From 29bda0dcdd565e64c2ace3ad707e9f731611f911 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=AD=9F=E5=B8=85?= <133814250@qq.com>
Date: Thu, 24 Nov 2022 23:37:34 +0800
Subject: [PATCH] v2.0
---
.gitignore | 7 +
.idea/.gitignore | 2 -
.idea/hotgo.iml | 8 -
.idea/inspectionProfiles/Project_Default.xml | 6 -
.idea/misc.xml | 6 -
.idea/modules.xml | 8 -
.idea/vcs.xml | 6 -
README.md | 260 +-
hotgo-server/.gitignore | 21 -
hotgo-server/LICENSE | 21 -
hotgo-server/README.MD | 1 -
hotgo-server/app/com/context_com.go | 108 -
hotgo-server/app/com/ip_com.go | 256 -
hotgo-server/app/com/jwt_com.go | 162 -
hotgo-server/app/com/redis_com.go | 83 -
hotgo-server/app/com/response_com.go | 122 -
hotgo-server/app/consts/debris_consts.go | 8 -
.../adminController/config_controller.go | 173 -
.../adminController/dept_controller.go | 177 -
.../adminController/dict_controller.go | 253 -
.../adminController/log_controller.go | 96 -
.../adminController/login_controller.go | 104 -
.../adminController/member_controller.go | 372 -
.../adminController/menu_controller.go | 189 -
.../adminController/notice_controller.go | 152 -
.../adminController/post_controller.go | 171 -
.../adminController/role_controller.go | 115 -
.../apiController/base_controller.go | 96 -
.../apiController/dict_controller.go | 30 -
.../apiController/log_controller.go | 96 -
.../apiController/login_controller.go | 99 -
.../apiController/member_controller.go | 72 -
hotgo-server/app/factory/queue/list.go | 63 -
hotgo-server/app/factory/queue/main.go | 248 -
hotgo-server/app/factory/queue/queue_test.go | 133 -
.../app/form/adminForm/config_form.go | 79 -
hotgo-server/app/form/adminForm/dict_form.go | 142 -
hotgo-server/app/form/adminForm/log_form.go | 53 -
hotgo-server/app/form/adminForm/login_form.go | 41 -
.../app/form/adminForm/notice_form.go | 70 -
hotgo-server/app/form/adminForm/role_form.go | 98 -
hotgo-server/app/form/apiForm/base_form.go | 34 -
hotgo-server/app/form/apiForm/dict_form.go | 19 -
hotgo-server/app/form/apiForm/log_form.go | 53 -
hotgo-server/app/form/apiForm/login_form.go | 43 -
hotgo-server/app/form/apiForm/member_form.go | 26 -
hotgo-server/app/form/common.go | 28 -
.../app/form/input/admin_dept_input.go | 75 -
.../app/form/input/admin_member_input.go | 171 -
.../app/form/input/admin_notice_input.go | 64 -
.../app/form/input/admin_post_input.go | 68 -
.../app/form/input/sys_config_input.go | 72 -
hotgo-server/app/form/input/sys_log_input.go | 26 -
hotgo-server/app/hook/hook.go | 52 -
.../interfaces/queue_producer_interface.go | 20 -
hotgo-server/app/middleware/admin_auth.go | 127 -
hotgo-server/app/middleware/api_auth.go | 127 -
hotgo-server/app/middleware/middleware.go | 64 -
hotgo-server/app/model/entity/admin_dept.go | 26 -
hotgo-server/app/model/entity/admin_member.go | 42 -
hotgo-server/app/model/entity/admin_menu.go | 33 -
.../app/model/entity/admin_menu_old.go | 32 -
hotgo-server/app/model/entity/admin_notice.go | 21 -
hotgo-server/app/model/entity/admin_post.go | 21 -
hotgo-server/app/model/entity/admin_role.go | 24 -
hotgo-server/app/model/entity/sys_config.go | 22 -
.../app/model/entity/sys_dict_data.go | 24 -
.../app/model/entity/sys_dict_type.go | 21 -
hotgo-server/app/model/entity/sys_log.go | 36 -
.../app/model/entity/sys_provinces.go | 21 -
hotgo-server/app/model/response.go | 17 -
.../app/service/adminService/dept_service.go | 358 -
.../service/adminService/member_service.go | 657 -
.../app/service/adminService/menu_service.go | 533 -
.../service/adminService/notice_service.go | 263 -
.../app/service/adminService/role_service.go | 165 -
.../app/service/apiService/member_service.go | 23 -
.../service/internal/dao/admin_menu_old.go | 24 -
.../app/service/internal/dao/admin_notice.go | 58 -
.../app/service/internal/dao/admin_role.go | 24 -
.../internal/dao/internal/admin_menu_old.go | 108 -
.../app/service/internal/dao/sys_config.go | 58 -
.../app/service/internal/dao/sys_dict_data.go | 62 -
.../app/service/internal/dao/sys_dict_type.go | 62 -
.../app/service/internal/dto/admin_menu.go | 35 -
.../service/internal/dto/admin_menu_old.go | 34 -
.../app/service/sysService/config_service.go | 233 -
.../app/service/sysService/dict_service.go | 505 -
.../service/sysService/provinces_service.go | 29 -
hotgo-server/app/utils/auth_util.go | 65 -
hotgo-server/app/utils/charset_util.go | 121 -
hotgo-server/app/utils/filter_util.go | 6 -
hotgo-server/app/utils/validate_util.go | 30 -
hotgo-server/boot/queue.go | 42 -
hotgo-server/config/.gitignore | 1 -
hotgo-server/config/config.example.yaml | 139 -
hotgo-server/go.mod | 23 -
hotgo-server/go.sum | 308 -
hotgo-server/main.go | 17 -
.../public/plugin/layer-3.1.1/layer.js | 2 -
.../public/plugin/layer-3.1.1/mobile/layer.js | 2 -
.../plugin/layer-3.1.1/mobile/need/layer.css | 1 -
.../layer-3.1.1/theme/default/icon-ext.png | Bin 5911 -> 0 bytes
.../plugin/layer-3.1.1/theme/default/icon.png | Bin 11493 -> 0 bytes
.../layer-3.1.1/theme/default/layer.css | 1 -
.../layer-3.1.1/theme/default/loading-0.gif | Bin 5793 -> 0 bytes
.../layer-3.1.1/theme/default/loading-1.gif | Bin 701 -> 0 bytes
.../layer-3.1.1/theme/default/loading-2.gif | Bin 1787 -> 0 bytes
.../resource/public/resource/image/cover.png | Bin 24590 -> 0 bytes
.../public/resource/image/favicon.ico | Bin 4286 -> 0 bytes
.../resource/public/resource/image/gf.ico | Bin 4286 -> 0 bytes
hotgo-server/router/admin.go | 43 -
hotgo-server/router/api.go | 38 -
hotgo-server/runtime/log/exception/.gitignore | 1 -
hotgo-server/runtime/log/logger/.gitignore | 1 -
hotgo-server/runtime/log/queue/.gitignore | 1 -
hotgo-server/runtime/log/server/.gitignore | 1 -
.../runtime/log/server/access/.gitignore | 1 -
.../runtime/log/server/error/.gitignore | 1 -
hotgo-server/storage/hotgo.sql | 5214 ---
hotgo-server/storage/ip/qqwry-utf8.dat | Bin 12935023 -> 0 bytes
hotgo-uniapp/.gitignore | 7 -
hotgo-uniapp/.vscode/settings.json | 5 -
hotgo-uniapp/App.vue | 26 -
hotgo-uniapp/LICENSE | 223 -
hotgo-uniapp/README.md | 1 -
hotgo-uniapp/common/base64.js | 74 -
hotgo-uniapp/common/config.js | 35 -
hotgo-uniapp/common/http.api.js | 72 -
hotgo-uniapp/common/http.interceptor.js | 139 -
hotgo-uniapp/common/locales/en.js | 33 -
hotgo-uniapp/common/locales/zh_CN.js | 33 -
hotgo-uniapp/common/spark-md5.js | 751 -
hotgo-uniapp/common/vue-i18n.min.js | 6 -
.../components/js-checkbox/js-checkbox.vue | 102 -
hotgo-uniapp/components/js-lang/js-lang.vue | 69 -
hotgo-uniapp/components/js-radio/js-radio.vue | 93 -
.../components/js-select/js-select.vue | 215 -
.../js-uploadfile/js-uploadfile.vue | 278 -
hotgo-uniapp/h5.html | 50 -
hotgo-uniapp/main.js | 60 -
hotgo-uniapp/manifest.json | 158 -
hotgo-uniapp/package-lock.json | 13 -
hotgo-uniapp/package.json | 26 -
hotgo-uniapp/pages.json | 160 -
hotgo-uniapp/pages/common/jeesite.scss | 121 -
hotgo-uniapp/pages/common/webview.vue | 33 -
hotgo-uniapp/pages/sys/home/index.scss | 22 -
hotgo-uniapp/pages/sys/home/index.vue | 225 -
hotgo-uniapp/pages/sys/login/forget.vue | 144 -
hotgo-uniapp/pages/sys/login/index.scss | 81 -
hotgo-uniapp/pages/sys/login/index.vue | 192 -
hotgo-uniapp/pages/sys/login/reg.vue | 187 -
hotgo-uniapp/pages/sys/msg/form.vue | 77 -
hotgo-uniapp/pages/sys/msg/index.vue | 163 -
hotgo-uniapp/pages/sys/user/about.vue | 78 -
hotgo-uniapp/pages/sys/user/comment.vue | 98 -
hotgo-uniapp/pages/sys/user/help.vue | 106 -
hotgo-uniapp/pages/sys/user/index.scss | 98 -
hotgo-uniapp/pages/sys/user/index.vue | 128 -
hotgo-uniapp/pages/sys/user/info.vue | 224 -
hotgo-uniapp/pages/sys/user/pwd.vue | 106 -
hotgo-uniapp/pages/sys/user/setting.vue | 87 -
hotgo-uniapp/pages/testData/form.vue | 129 -
hotgo-uniapp/pages/testData/index.vue | 123 -
hotgo-uniapp/static/common/img/iPhoneX.png | Bin 41116 -> 0 bytes
.../static/common/js/touch-emulator.js | 363 -
hotgo-uniapp/static/index.html | 52 -
hotgo-uniapp/static/jeesite/banner/1.svg | 843 -
hotgo-uniapp/static/jeesite/banner/2.svg | 966 -
hotgo-uniapp/static/jeesite/banner/3.svg | 479 -
hotgo-uniapp/static/jeesite/favicon.png | Bin 4794 -> 0 bytes
.../static/jeesite/login/eye_close.png | Bin 2914 -> 0 bytes
.../static/jeesite/login/eye_open.png | Bin 4708 -> 0 bytes
hotgo-uniapp/static/jeesite/logo200.png | Bin 6936 -> 0 bytes
hotgo-uniapp/static/jeesite/tabbar/home_1.png | Bin 760 -> 0 bytes
hotgo-uniapp/static/jeesite/tabbar/home_2.png | Bin 1020 -> 0 bytes
hotgo-uniapp/static/jeesite/tabbar/msg_1.png | Bin 835 -> 0 bytes
hotgo-uniapp/static/jeesite/tabbar/msg_2.png | Bin 1060 -> 0 bytes
hotgo-uniapp/static/jeesite/tabbar/my_1.png | Bin 1297 -> 0 bytes
hotgo-uniapp/static/jeesite/tabbar/my_2.png | Bin 1161 -> 0 bytes
hotgo-uniapp/static/uview/common/favicon.ico | Bin 4286 -> 0 bytes
hotgo-uniapp/static/uview/common/logo.png | Bin 15558 -> 0 bytes
.../static/uview/example/component.png | Bin 3074 -> 0 bytes
.../static/uview/example/component_select.png | Bin 1521 -> 0 bytes
hotgo-uniapp/static/uview/example/js.png | Bin 4236 -> 0 bytes
hotgo-uniapp/static/uview/example/js_bak.png | Bin 3212 -> 0 bytes
.../static/uview/example/js_select.png | Bin 4278 -> 0 bytes
.../static/uview/example/js_select_bak.png | Bin 2248 -> 0 bytes
.../static/uview/example/min_button.png | Bin 2962 -> 0 bytes
.../uview/example/min_button_select.png | Bin 2936 -> 0 bytes
.../static/uview/example/template.png | Bin 4097 -> 0 bytes
.../static/uview/example/template_select.png | Bin 4641 -> 0 bytes
hotgo-uniapp/store/$u.mixin.js | 27 -
hotgo-uniapp/store/index.js | 93 -
hotgo-uniapp/uni.scss | 41 -
.../unpackage/res/icons/1024x1024.png | Bin 16475 -> 0 bytes
hotgo-uniapp/unpackage/res/icons/120x120.png | Bin 3740 -> 0 bytes
hotgo-uniapp/unpackage/res/icons/144x144.png | Bin 4639 -> 0 bytes
hotgo-uniapp/unpackage/res/icons/152x152.png | Bin 4959 -> 0 bytes
hotgo-uniapp/unpackage/res/icons/167x167.png | Bin 5320 -> 0 bytes
hotgo-uniapp/unpackage/res/icons/180x180.png | Bin 5893 -> 0 bytes
hotgo-uniapp/unpackage/res/icons/192x192.png | Bin 6257 -> 0 bytes
hotgo-uniapp/unpackage/res/icons/20x20.png | Bin 433 -> 0 bytes
hotgo-uniapp/unpackage/res/icons/29x29.png | Bin 690 -> 0 bytes
hotgo-uniapp/unpackage/res/icons/40x40.png | Bin 1019 -> 0 bytes
hotgo-uniapp/unpackage/res/icons/58x58.png | Bin 1672 -> 0 bytes
hotgo-uniapp/unpackage/res/icons/60x60.png | Bin 1741 -> 0 bytes
hotgo-uniapp/unpackage/res/icons/72x72.png | Bin 2145 -> 0 bytes
hotgo-uniapp/unpackage/res/icons/76x76.png | Bin 2246 -> 0 bytes
hotgo-uniapp/unpackage/res/icons/80x80.png | Bin 2364 -> 0 bytes
hotgo-uniapp/unpackage/res/icons/87x87.png | Bin 2685 -> 0 bytes
hotgo-uniapp/unpackage/res/icons/96x96.png | Bin 2986 -> 0 bytes
hotgo-uniapp/uview-ui/LICENSE | 21 -
hotgo-uniapp/uview-ui/README.md | 106 -
.../u-action-sheet/u-action-sheet.vue | 190 -
.../components/u-alert-tips/u-alert-tips.vue | 256 -
.../u-avatar-cropper/u-avatar-cropper.vue | 290 -
.../components/u-avatar-cropper/weCropper.js | 1265 -
.../uview-ui/components/u-avatar/u-avatar.vue | 244 -
.../components/u-back-top/u-back-top.vue | 153 -
.../uview-ui/components/u-badge/u-badge.vue | 216 -
.../uview-ui/components/u-button/u-button.vue | 596 -
.../components/u-calendar/u-calendar.vue | 639 -
.../u-car-keyboard/u-car-keyboard.vue | 257 -
.../uview-ui/components/u-card/u-card.vue | 299 -
.../components/u-cell-group/u-cell-group.vue | 70 -
.../components/u-cell-item/u-cell-item.vue | 316 -
.../u-checkbox-group/u-checkbox-group.vue | 123 -
.../components/u-checkbox/u-checkbox.vue | 284 -
.../u-circle-progress/u-circle-progress.vue | 220 -
.../u-line-progress/u-line-progress.vue | 147 -
.../uview-ui/components/u-col/u-col.vue | 156 -
.../u-collapse-item/u-collapse-item.vue | 204 -
.../components/u-collapse/u-collapse.vue | 99 -
.../u-column-notice/u-column-notice.vue | 237 -
.../components/u-count-down/u-count-down.vue | 318 -
.../components/u-count-to/u-count-to.vue | 241 -
.../components/u-divider/u-divider.vue | 153 -
.../u-dropdown-item/u-dropdown-item.vue | 132 -
.../components/u-dropdown/u-dropdown.vue | 298 -
.../uview-ui/components/u-empty/u-empty.vue | 193 -
.../uview-ui/components/u-field/u-field.vue | 384 -
.../components/u-form-item/u-form-item.vue | 431 -
.../uview-ui/components/u-form/u-form.vue | 134 -
.../u-full-screen/u-full-screen.vue | 52 -
.../uview-ui/components/u-gap/u-gap.vue | 54 -
.../components/u-grid-item/u-grid-item.vue | 126 -
.../uview-ui/components/u-grid/u-grid.vue | 108 -
.../uview-ui/components/u-icon/u-icon.vue | 336 -
.../uview-ui/components/u-image/u-image.vue | 267 -
.../u-index-anchor/u-index-anchor.vue | 89 -
.../components/u-index-list/u-index-list.vue | 315 -
.../uview-ui/components/u-input/u-input.vue | 387 -
.../components/u-keyboard/u-keyboard.vue | 217 -
.../components/u-lazy-load/u-lazy-load.vue | 244 -
.../u-line-progress/u-line-progress.vue | 147 -
.../uview-ui/components/u-line/u-line.vue | 84 -
.../uview-ui/components/u-link/u-link.vue | 89 -
.../u-loading-page/u-loading-page.vue | 25 -
.../components/u-loading/u-loading.vue | 103 -
.../components/u-loadmore/u-loadmore.vue | 203 -
.../uview-ui/components/u-mask/u-mask.vue | 123 -
.../u-message-input/u-message-input.vue | 311 -
.../uview-ui/components/u-modal/u-modal.vue | 283 -
.../uview-ui/components/u-navbar/u-navbar.vue | 315 -
.../components/u-no-network/u-no-network.vue | 233 -
.../components/u-notice-bar/u-notice-bar.vue | 272 -
.../components/u-number-box/u-number-box.vue | 363 -
.../u-number-keyboard/u-number-keyboard.vue | 158 -
.../components/u-parse/libs/CssHandler.js | 100 -
.../components/u-parse/libs/MpHtmlParser.js | 580 -
.../components/u-parse/libs/config.js | 80 -
.../components/u-parse/libs/handler.wxs | 22 -
.../components/u-parse/libs/trees.vue | 505 -
.../uview-ui/components/u-parse/u-parse.vue | 645 -
.../uview-ui/components/u-picker/u-picker.vue | 676 -
.../uview-ui/components/u-popup/u-popup.vue | 456 -
.../u-radio-group/u-radio-group.vue | 128 -
.../uview-ui/components/u-radio/u-radio.vue | 271 -
.../uview-ui/components/u-rate/u-rate.vue | 275 -
.../components/u-read-more/u-read-more.vue | 179 -
.../components/u-row-notice/u-row-notice.vue | 269 -
.../uview-ui/components/u-row/u-row.vue | 84 -
.../uview-ui/components/u-search/u-search.vue | 342 -
.../components/u-section/u-section.vue | 154 -
.../uview-ui/components/u-select/u-select.vue | 424 -
.../components/u-skeleton/u-skeleton.vue | 199 -
.../uview-ui/components/u-slider/u-slider.vue | 257 -
.../uview-ui/components/u-steps/u-steps.vue | 200 -
.../uview-ui/components/u-sticky/u-sticky.vue | 157 -
.../components/u-subsection/u-subsection.vue | 355 -
.../u-swipe-action/u-swipe-action.vue | 255 -
.../uview-ui/components/u-swiper/u-swiper.vue | 340 -
.../uview-ui/components/u-switch/u-switch.vue | 163 -
.../uview-ui/components/u-tabbar/u-tabbar.vue | 330 -
.../uview-ui/components/u-table/u-table.vue | 84 -
.../u-tabs-swiper/u-tabs-swiper.vue | 488 -
.../uview-ui/components/u-tabs/u-tabs.vue | 369 -
.../uview-ui/components/u-tag/u-tag.vue | 294 -
.../uview-ui/components/u-td/u-td.vue | 66 -
.../uview-ui/components/u-th/u-th.vue | 62 -
.../u-time-line-item/u-time-line-item.vue | 83 -
.../components/u-time-line/u-time-line.vue | 43 -
.../uview-ui/components/u-toast/u-toast.vue | 220 -
.../components/u-top-tips/u-top-tips.vue | 121 -
.../uview-ui/components/u-tr/u-tr.vue | 25 -
.../uview-ui/components/u-upload/u-upload.vue | 660 -
.../u-verification-code.vue | 164 -
.../components/u-waterfall/u-waterfall.vue | 176 -
hotgo-uniapp/uview-ui/iconfont.css | 910 -
hotgo-uniapp/uview-ui/index.js | 140 -
hotgo-uniapp/uview-ui/index.scss | 23 -
hotgo-uniapp/uview-ui/libs/config/config.js | 15 -
hotgo-uniapp/uview-ui/libs/config/zIndex.js | 20 -
hotgo-uniapp/uview-ui/libs/css/color.scss | 155 -
hotgo-uniapp/uview-ui/libs/css/common.scss | 176 -
.../uview-ui/libs/css/style.components.scss | 7 -
hotgo-uniapp/uview-ui/libs/css/style.h5.scss | 8 -
hotgo-uniapp/uview-ui/libs/css/style.mp.scss | 72 -
.../uview-ui/libs/css/style.nvue.scss | 3 -
hotgo-uniapp/uview-ui/libs/css/style.vue.scss | 175 -
.../uview-ui/libs/function/$parent.js | 18 -
.../uview-ui/libs/function/addUnit.js | 8 -
hotgo-uniapp/uview-ui/libs/function/bem.js | 5 -
hotgo-uniapp/uview-ui/libs/function/color.js | 37 -
.../uview-ui/libs/function/colorGradient.js | 134 -
hotgo-uniapp/uview-ui/libs/function/date.js | 173 -
.../uview-ui/libs/function/debounce.js | 29 -
.../uview-ui/libs/function/deepClone.js | 23 -
.../uview-ui/libs/function/deepMerge.js | 30 -
.../uview-ui/libs/function/getParent.js | 47 -
hotgo-uniapp/uview-ui/libs/function/guid.js | 41 -
hotgo-uniapp/uview-ui/libs/function/md5.js | 385 -
.../uview-ui/libs/function/queryParams.js | 58 -
hotgo-uniapp/uview-ui/libs/function/random.js | 10 -
.../uview-ui/libs/function/randomArray.js | 7 -
hotgo-uniapp/uview-ui/libs/function/route.js | 122 -
hotgo-uniapp/uview-ui/libs/function/sys.js | 9 -
hotgo-uniapp/uview-ui/libs/function/test.js | 232 -
.../uview-ui/libs/function/throttle.js | 32 -
.../uview-ui/libs/function/timeFormat.js | 51 -
.../uview-ui/libs/function/timeFrom.js | 47 -
hotgo-uniapp/uview-ui/libs/function/toast.js | 9 -
hotgo-uniapp/uview-ui/libs/function/trim.js | 15 -
.../uview-ui/libs/function/type2icon.js | 35 -
hotgo-uniapp/uview-ui/libs/mixin/mixin.js | 64 -
hotgo-uniapp/uview-ui/libs/mixin/mpShare.js | 18 -
hotgo-uniapp/uview-ui/libs/request/index.js | 182 -
hotgo-uniapp/uview-ui/libs/store/index.js | 19 -
hotgo-uniapp/uview-ui/libs/util/area.js | 1 -
.../uview-ui/libs/util/async-validator.js | 1356 -
hotgo-uniapp/uview-ui/libs/util/city.js | 1 -
hotgo-uniapp/uview-ui/libs/util/emitter.js | 51 -
hotgo-uniapp/uview-ui/libs/util/province.js | 1 -
hotgo-uniapp/uview-ui/package.json | 39 -
hotgo-uniapp/uview-ui/theme.scss | 38 -
hotgo-uniapp/vue.config.js | 20 -
hotgo-web/.browserslistrc | 3 -
hotgo-web/.editorconfig | 39 -
hotgo-web/.env | 3 -
hotgo-web/.env.development | 3 -
hotgo-web/.env.preview | 3 -
hotgo-web/.eslintrc.js | 78 -
hotgo-web/.eslintrc.json | 5 -
hotgo-web/.gitattributes | 1 -
hotgo-web/.prettierrc | 6 -
hotgo-web/.travis.yml | 7 -
hotgo-web/LICENSE | 21 -
hotgo-web/README.md | 1 -
hotgo-web/babel.config.js | 28 -
hotgo-web/bin/build.bat | 12 -
hotgo-web/bin/package.bat | 12 -
hotgo-web/bin/run-web.bat | 12 -
hotgo-web/config/plugin.config.js | 49 -
hotgo-web/config/themePluginConfig.js | 115 -
hotgo-web/jest.config.js | 23 -
hotgo-web/jsconfig.json | 11 -
hotgo-web/package.json | 71 -
hotgo-web/postcss.config.js | 5 -
hotgo-web/public/index.html | 33 -
hotgo-web/public/logo.png | Bin 7628 -> 0 bytes
hotgo-web/src/App.vue | 28 -
hotgo-web/src/api/login.js | 85 -
hotgo-web/src/api/manage.js | 70 -
hotgo-web/src/api/menu.js | 9 -
hotgo-web/src/api/monitor/cache.js | 49 -
hotgo-web/src/api/monitor/job.js | 79 -
hotgo-web/src/api/monitor/jobLog.js | 35 -
hotgo-web/src/api/monitor/loginLog.js | 35 -
hotgo-web/src/api/monitor/online.js | 18 -
hotgo-web/src/api/monitor/operlog.js | 35 -
hotgo-web/src/api/monitor/server.js | 9 -
.../api/monitor/sysDataPermissionsDefRule.js | 69 -
.../api/monitor/sysDataPermissionsMethod.js | 78 -
.../src/api/monitor/sysDataPermissionsRule.js | 61 -
hotgo-web/src/api/system/config.js | 70 -
hotgo-web/src/api/system/dept.js | 173 -
hotgo-web/src/api/system/dict/data.js | 83 -
hotgo-web/src/api/system/dict/type.js | 71 -
hotgo-web/src/api/system/menu.js | 121 -
hotgo-web/src/api/system/notice.js | 62 -
hotgo-web/src/api/system/post.js | 72 -
hotgo-web/src/api/system/role.js | 127 -
hotgo-web/src/api/system/sysNoticeUserRead.js | 53 -
hotgo-web/src/api/system/sysPortalConfig.js | 93 -
hotgo-web/src/api/system/sysPortlet.js | 79 -
hotgo-web/src/api/system/sysTableConfig.js | 27 -
hotgo-web/src/api/system/sysThemeConfig.js | 60 -
hotgo-web/src/api/system/upload.js | 17 -
hotgo-web/src/api/system/user.js | 181 -
hotgo-web/src/api/tool/gen.js | 101 -
hotgo-web/src/api/tool/genConfigTemplate.js | 98 -
hotgo-web/src/assets/background.svg | 69 -
hotgo-web/src/assets/icons/Alipay.svg | 1 -
hotgo-web/src/assets/icons/DragColumn.svg | 1 -
hotgo-web/src/assets/icons/QRcode.svg | 1 -
hotgo-web/src/assets/icons/Sina.svg | 1 -
hotgo-web/src/assets/icons/WeChat.svg | 1 -
hotgo-web/src/assets/icons/bug.svg | 1 -
hotgo-web/src/assets/icons/build.svg | 1 -
hotgo-web/src/assets/icons/button.svg | 1 -
hotgo-web/src/assets/icons/bxAnalyse.svg | 1 -
hotgo-web/src/assets/icons/cascader.svg | 1 -
hotgo-web/src/assets/icons/chart.svg | 1 -
hotgo-web/src/assets/icons/checkbox.svg | 1 -
hotgo-web/src/assets/icons/clipboard.svg | 1 -
hotgo-web/src/assets/icons/codeNew.svg | 1 -
hotgo-web/src/assets/icons/color.svg | 1 -
hotgo-web/src/assets/icons/company.svg | 1 -
hotgo-web/src/assets/icons/companyFill.svg | 1 -
hotgo-web/src/assets/icons/component.svg | 1 -
hotgo-web/src/assets/icons/compress.svg | 1 -
hotgo-web/src/assets/icons/connections.svg | 1 -
hotgo-web/src/assets/icons/dashboardNew.svg | 1 -
hotgo-web/src/assets/icons/date.svg | 1 -
hotgo-web/src/assets/icons/dateRange.svg | 1 -
hotgo-web/src/assets/icons/dict.svg | 1 -
hotgo-web/src/assets/icons/dingtalk.svg | 1 -
hotgo-web/src/assets/icons/documentation.svg | 1 -
hotgo-web/src/assets/icons/download.svg | 1 -
hotgo-web/src/assets/icons/dragImg.svg | 1 -
hotgo-web/src/assets/icons/dragtable.svg | 1 -
hotgo-web/src/assets/icons/druid.svg | 1 -
hotgo-web/src/assets/icons/edit.svg | 1 -
hotgo-web/src/assets/icons/expend.svg | 1 -
hotgo-web/src/assets/icons/eyeOpen.svg | 1 -
hotgo-web/src/assets/icons/github.svg | 1 -
hotgo-web/src/assets/icons/guide.svg | 1 -
hotgo-web/src/assets/icons/input.svg | 1 -
hotgo-web/src/assets/icons/job.svg | 1 -
hotgo-web/src/assets/icons/log.svg | 1 -
hotgo-web/src/assets/icons/loginLog.svg | 1 -
hotgo-web/src/assets/icons/message.svg | 1 -
hotgo-web/src/assets/icons/monitor.svg | 2 -
hotgo-web/src/assets/icons/number.svg | 1 -
hotgo-web/src/assets/icons/online.svg | 1 -
hotgo-web/src/assets/icons/password.svg | 1 -
hotgo-web/src/assets/icons/pdf.svg | 1 -
hotgo-web/src/assets/icons/peoples.svg | 1 -
hotgo-web/src/assets/icons/phone.svg | 1 -
hotgo-web/src/assets/icons/post.svg | 1 -
hotgo-web/src/assets/icons/question.svg | 1 -
hotgo-web/src/assets/icons/radio.svg | 1 -
hotgo-web/src/assets/icons/rate.svg | 1 -
hotgo-web/src/assets/icons/redis.svg | 1 -
hotgo-web/src/assets/icons/row.svg | 1 -
hotgo-web/src/assets/icons/select.svg | 1 -
hotgo-web/src/assets/icons/server.svg | 1 -
hotgo-web/src/assets/icons/swagger.svg | 1 -
hotgo-web/src/assets/icons/switch.svg | 1 -
hotgo-web/src/assets/icons/system.svg | 2 -
hotgo-web/src/assets/icons/textarea.svg | 1 -
hotgo-web/src/assets/icons/time.svg | 1 -
hotgo-web/src/assets/icons/timeRange.svg | 1 -
hotgo-web/src/assets/icons/tool.svg | 1 -
hotgo-web/src/assets/icons/tree.svg | 1 -
hotgo-web/src/assets/icons/treeTable.svg | 1 -
hotgo-web/src/assets/icons/upload.svg | 1 -
hotgo-web/src/assets/icons/users.svg | 1 -
hotgo-web/src/assets/icons/validCode.svg | 1 -
.../src/assets/images/login-background.jpg | Bin 521275 -> 0 bytes
hotgo-web/src/assets/images/profile.jpg | Bin 81131 -> 0 bytes
hotgo-web/src/assets/images/upload/excel.svg | 52 -
hotgo-web/src/assets/images/upload/gif.svg | 23 -
hotgo-web/src/assets/images/upload/jpg.svg | 25 -
hotgo-web/src/assets/images/upload/other.svg | 44 -
hotgo-web/src/assets/images/upload/pdf.svg | 23 -
hotgo-web/src/assets/images/upload/png.svg | 26 -
hotgo-web/src/assets/images/upload/ppt.svg | 52 -
hotgo-web/src/assets/images/upload/text.svg | 60 -
hotgo-web/src/assets/images/upload/word.svg | 55 -
hotgo-web/src/assets/images/upload/zip.svg | 44 -
hotgo-web/src/assets/login-bg.png | Bin 64891 -> 0 bytes
hotgo-web/src/assets/logo.png | Bin 15033 -> 0 bytes
hotgo-web/src/assets/logo.svg | 319 -
hotgo-web/src/assets/projects/antdv.png | Bin 24773 -> 0 bytes
hotgo-web/src/assets/projects/ruoyi.png | Bin 2658 -> 0 bytes
hotgo-web/src/assets/styles/antv-theme.less | 705 -
hotgo-web/src/assets/styles/default.less | 700 -
hotgo-web/src/assets/wrapper.jpg | Bin 37004 -> 0 bytes
.../ArticleListContent/ArticleListContent.vue | 89 -
.../components/ArticleListContent/index.js | 3 -
hotgo-web/src/components/AvatarList/Item.jsx | 24 -
hotgo-web/src/components/AvatarList/List.jsx | 72 -
hotgo-web/src/components/AvatarList/index.js | 9 -
.../src/components/AvatarList/index.less | 60 -
hotgo-web/src/components/AvatarList/index.md | 64 -
hotgo-web/src/components/Dialog.js | 113 -
.../src/components/Ellipsis/Ellipsis.vue | 64 -
hotgo-web/src/components/Ellipsis/index.js | 3 -
hotgo-web/src/components/Ellipsis/index.md | 38 -
.../FooterToolbar/FooterToolBar.vue | 47 -
.../src/components/FooterToolbar/index.js | 4 -
.../src/components/FooterToolbar/index.less | 23 -
.../src/components/FooterToolbar/index.md | 48 -
.../src/components/GlobalFooter/index.vue | 21 -
.../GlobalHeader/AvatarDropdown.vue | 83 -
.../GlobalHeader/PlatformVersion.vue | 115 -
.../components/GlobalHeader/RightContent.vue | 251 -
hotgo-web/src/components/GridContent/index.js | 44 -
.../src/components/GridContent/index.less | 14 -
.../components/IconSelector/IconDetail.vue | 187 -
.../components/IconSelector/IconSelector.vue | 109 -
.../src/components/IconSelector/README.md | 48 -
.../src/components/IconSelector/icons.js | 36 -
.../src/components/IconSelector/index.js | 2 -
.../src/components/MultiTab/MultiTab.vue | 175 -
hotgo-web/src/components/MultiTab/events.js | 2 -
hotgo-web/src/components/MultiTab/index.js | 40 -
hotgo-web/src/components/MultiTab/index.less | 31 -
.../src/components/NProgress/nprogress.less | 76 -
.../src/components/NoticeIcon/NoticeIcon.vue | 90 -
hotgo-web/src/components/NoticeIcon/index.js | 2 -
.../src/components/NumberInfo/NumberInfo.vue | 54 -
hotgo-web/src/components/NumberInfo/index.js | 3 -
.../src/components/NumberInfo/index.less | 55 -
hotgo-web/src/components/NumberInfo/index.md | 43 -
hotgo-web/src/components/Other/CarbonAds.vue | 114 -
.../src/components/PageLoading/index.jsx | 106 -
.../src/components/ProLayout/BasicLayout.jsx | 187 -
.../src/components/ProLayout/BasicLayout.less | 101 -
.../src/components/ProLayout/BlockLayout.jsx | 9 -
hotgo-web/src/components/ProLayout/Header.jsx | 109 -
.../src/components/ProLayout/Header.less | 91 -
.../src/components/ProLayout/PageView.jsx | 14 -
.../src/components/ProLayout/WrapContent.jsx | 44 -
.../components/ConfigProvider/index.js | 27 -
.../DocumentTitle/SideEffect/index.js | 17 -
.../components/DocumentTitle/index.js | 89 -
.../components/DocumentTitle/util.js | 17 -
.../ProLayout/components/Fragment.jsx | 7 -
.../components/GlobalFooter/index.jsx | 43 -
.../components/GlobalFooter/index.less | 31 -
.../components/GlobalHeader/index.jsx | 81 -
.../components/GlobalHeader/index.less | 109 -
.../components/GridContent/index.jsx | 27 -
.../components/GridContent/index.less | 13 -
.../components/PageHeaderWrapper/index.jsx | 232 -
.../components/PageHeaderWrapper/index.less | 93 -
.../components/RouteMenu/BaseMenu.jsx | 181 -
.../ProLayout/components/RouteMenu/index.js | 2 -
.../SettingDrawer/BlockCheckbox.jsx | 69 -
.../components/SettingDrawer/LayoutChange.jsx | 95 -
.../components/SettingDrawer/ThemeColor.jsx | 75 -
.../components/SettingDrawer/ThemeColor.less | 26 -
.../components/SettingDrawer/index.jsx | 267 -
.../components/SettingDrawer/index.less | 90 -
.../SettingDrawer/index原始文件勿删.jsx | 344 -
.../components/SiderMenu/SiderMenu.jsx | 137 -
.../ProLayout/components/SiderMenu/index.jsx | 54 -
.../ProLayout/components/SiderMenu/index.less | 130 -
.../components/ProLayout/components/index.js | 15 -
hotgo-web/src/components/ProLayout/index.js | 9 -
.../ProLayout/utils/dynamicTheme.js | 38 -
.../src/components/ProLayout/utils/request.js | 62 -
.../src/components/ProLayout/utils/util.js | 64 -
.../src/components/Search/GlobalSearch.jsx | 63 -
hotgo-web/src/components/Search/index.less | 25 -
hotgo-web/src/components/SelectLang/index.jsx | 54 -
.../src/components/SelectLang/index.less | 31 -
.../SettingDrawer/SettingDrawer.vue | 343 -
.../components/SettingDrawer/SettingItem.vue | 38 -
.../src/components/SettingDrawer/index.js | 2 -
.../components/SettingDrawer/settingConfig.js | 48 -
.../components/SettingDrawer/themeColor.js | 24 -
.../StandardFormRow/StandardFormRow.vue | 122 -
.../src/components/StandardFormRow/index.js | 3 -
.../components/TagSelect/TagSelectOption.jsx | 45 -
hotgo-web/src/components/TagSelect/index.jsx | 113 -
hotgo-web/src/components/TextArea/index.jsx | 69 -
hotgo-web/src/components/TextArea/style.less | 12 -
hotgo-web/src/components/Tree/Tree.jsx | 124 -
hotgo-web/src/components/Trend/Trend.vue | 41 -
hotgo-web/src/components/Trend/index.js | 3 -
hotgo-web/src/components/Trend/index.less | 42 -
hotgo-web/src/components/Trend/index.md | 45 -
hotgo-web/src/components/_util/util.js | 46 -
hotgo-web/src/components/index.js | 37 -
hotgo-web/src/components/index.less | 6 -
.../components/pt/asyncComponent/Error.vue | 3 -
.../components/pt/asyncComponent/Loading.vue | 34 -
.../components/pt/asyncComponent/index.vue | 117 -
.../src/components/pt/dialog/AntModal.vue | 294 -
.../src/components/pt/import/ImportExcel.vue | 112 -
.../components/pt/passwordStrength/index.vue | 126 -
.../src/components/pt/ptButtons/Delete.vue | 88 -
.../src/components/pt/ptButtons/index.js | 2 -
.../components/pt/selectDept/SelectDept.vue | 719 -
.../components/pt/selectUser/SelectUser.vue | 787 -
hotgo-web/src/components/pt/split/Index.vue | 100 -
hotgo-web/src/components/pt/switch/Index.vue | 63 -
.../src/components/pt/table/ActionColumns.vue | 265 -
.../src/components/pt/table/ActionSize.vue | 49 -
.../src/components/pt/table/AdvanceTable.vue | 333 -
.../src/components/pt/table/SearchArea.vue | 352 -
hotgo-web/src/components/pt/table/index.js | 2 -
.../src/components/table/ActionColumns.vue | 147 -
hotgo-web/src/components/table/ActionSize.vue | 44 -
.../src/components/table/AdvanceTable.vue | 251 -
hotgo-web/src/components/table/SearchArea.vue | 352 -
hotgo-web/src/components/table/index.js | 2 -
hotgo-web/src/config/defaultSettings.js | 30 -
hotgo-web/src/config/router.config.js | 125 -
hotgo-web/src/core/bootstrap.js | 30 -
hotgo-web/src/core/directives/action.js | 34 -
hotgo-web/src/core/icons.js | 147 -
hotgo-web/src/core/lazy_use.js | 125 -
hotgo-web/src/core/permission/permission.js | 55 -
hotgo-web/src/core/use.js | 25 -
.../src/directive/permission/hasPermi.js | 27 -
hotgo-web/src/directive/permission/hasRole.js | 27 -
hotgo-web/src/directive/permission/index.js | 15 -
hotgo-web/src/global.less | 183 -
hotgo-web/src/layouts/BasicLayout.less | 66 -
hotgo-web/src/layouts/BasicLayout.vue | 217 -
hotgo-web/src/layouts/BlankLayout.vue | 16 -
hotgo-web/src/layouts/PageView.vue | 12 -
hotgo-web/src/layouts/RouteView.vue | 32 -
hotgo-web/src/layouts/UserLayout.vue | 160 -
hotgo-web/src/layouts/index.js | 7 -
hotgo-web/src/layouts/modules/tabs-view.vue | 199 -
hotgo-web/src/locales/index.js | 59 -
hotgo-web/src/locales/lang/en-US.js | 16 -
hotgo-web/src/locales/lang/en-US/setting.js | 29 -
hotgo-web/src/locales/lang/zh-CN.js | 16 -
hotgo-web/src/locales/lang/zh-CN/setting.js | 29 -
hotgo-web/src/main.js | 68 -
hotgo-web/src/mock/index.js | 18 -
hotgo-web/src/mock/services/user.js | 26 -
hotgo-web/src/mock/util.js | 38 -
hotgo-web/src/permission.js | 84 -
hotgo-web/src/router/README.md | 134 -
hotgo-web/src/router/generator-routers.js | 444 -
hotgo-web/src/router/index.js | 17 -
hotgo-web/src/store/app-mixin.js | 32 -
hotgo-web/src/store/device-mixin.js | 11 -
hotgo-web/src/store/getters.js | 23 -
hotgo-web/src/store/i18n-mixin.js | 16 -
hotgo-web/src/store/index.js | 32 -
hotgo-web/src/store/modules/app.js | 99 -
hotgo-web/src/store/modules/async-router.js | 31 -
hotgo-web/src/store/modules/permission.js | 104 -
hotgo-web/src/store/modules/user.js | 320 -
hotgo-web/src/store/mutation-types.js | 24 -
hotgo-web/src/utils/aidex.js | 269 -
hotgo-web/src/utils/axios.js | 35 -
hotgo-web/src/utils/domUtil.js | 21 -
hotgo-web/src/utils/drag.js | 95 -
hotgo-web/src/utils/errorCode.js | 7 -
hotgo-web/src/utils/filter.js | 20 -
hotgo-web/src/utils/highlight.js | 29 -
.../src/utils/pt/layout/baseMouldStyles.js | 385 -
hotgo-web/src/utils/request.js | 136 -
hotgo-web/src/utils/requireIcons.js | 9 -
hotgo-web/src/utils/routeConvert.js | 30 -
hotgo-web/src/utils/screenLog.js | 5 -
hotgo-web/src/utils/util.js | 128 -
hotgo-web/src/utils/utils.less | 50 -
hotgo-web/src/utils/validate.js | 83 -
hotgo-web/src/utils/zipdownload.js | 42 -
hotgo-web/src/views/404.vue | 15 -
hotgo-web/src/views/account/center/index.vue | 277 -
.../src/views/account/center/page/App.vue | 113 -
.../src/views/account/center/page/Article.vue | 75 -
.../src/views/account/center/page/Project.vue | 115 -
.../src/views/account/center/page/index.js | 5 -
.../views/account/settings/AvatarModal.vue | 201 -
.../views/account/settings/BaseSetting.vue | 222 -
.../src/views/account/settings/Security.vue | 48 -
.../src/views/account/settings/UpdataPass.vue | 126 -
.../views/account/settings/UpdatePassword.vue | 121 -
.../src/views/account/settings/index.vue | 312 -
.../src/views/dashboard/images/QQCode.png | Bin 120384 -> 0 bytes
.../src/views/dashboard/images/banner1.png | Bin 28779 -> 0 bytes
.../src/views/dashboard/images/banner2.png | Bin 28779 -> 0 bytes
.../src/views/dashboard/images/img02.png | Bin 13077 -> 0 bytes
.../src/views/dashboard/images/img03.png | Bin 10566 -> 0 bytes
.../src/views/dashboard/images/wxCode.png | Bin 154797 -> 0 bytes
hotgo-web/src/views/dashboard/index.vue | 32 -
.../src/views/dashboard/portal/About.vue | 70 -
.../src/views/dashboard/portal/CommonUse.vue | 165 -
hotgo-web/src/views/dashboard/portal/ToDo.vue | 837 -
.../src/views/dashboard/typical-home.less | 523 -
hotgo-web/src/views/demo/chart/area-chart.vue | 129 -
.../src/views/demo/chart/chart-radar.vue | 108 -
.../src/views/demo/chart/dashboard-chart.vue | 122 -
.../src/views/demo/chart/echartDashBoard.vue | 280 -
.../src/views/demo/chart/histogram-chart.vue | 115 -
hotgo-web/src/views/demo/chart/line-chart.vue | 225 -
hotgo-web/src/views/demo/chart/pie-chart.vue | 105 -
.../src/views/demo/chart/scatter-chart.vue | 165 -
.../src/views/demo/chart/sm-pieChart.vue | 82 -
.../demo/portLetCards/AmountStatistics.vue | 32 -
.../demo/portLetCards/DashboardChart.vue | 47 -
.../portLetCards/TaskCompletionStatistics.vue | 34 -
.../demo/portLetCards/TaskTotalStatistics.vue | 32 -
.../demo/portLetCards/TrafficStatistics.vue | 38 -
.../demo/portLetCards/icon/MtimeIcon.vue | 18 -
.../views/demo/portLetCards/images-m/bg01.png | Bin 1827 -> 0 bytes
.../demo/portLetCards/images-m/chart_sm.png | Bin 4238 -> 0 bytes
.../demo/portLetCards/images-m/img01.png | Bin 5625 -> 0 bytes
.../demo/portLetCards/images-m/img02.png | Bin 5062 -> 0 bytes
.../demo/portLetCards/images-m/img03.png | Bin 18956 -> 0 bytes
.../demo/portLetCards/images-m/img401.png | Bin 413155 -> 0 bytes
.../demo/portLetCards/images-m/title_left.png | Bin 187 -> 0 bytes
.../views/demo/portLetCards/style/base.less | 619 -
hotgo-web/src/views/exception/403.vue | 20 -
hotgo-web/src/views/exception/404.vue | 20 -
hotgo-web/src/views/exception/500.vue | 20 -
hotgo-web/src/views/index.less | 107 -
hotgo-web/src/views/index.vue | 772 -
hotgo-web/src/views/monitor/cache/index.vue | 299 -
.../views/monitor/cache/indexCacheList.vue | 360 -
.../src/views/monitor/cache/indexOld.vue | 229 -
hotgo-web/src/views/monitor/druid/index.vue | 42 -
hotgo-web/src/views/monitor/job/index.vue | 377 -
hotgo-web/src/views/monitor/job/log.vue | 325 -
.../views/monitor/job/modules/CreateForm.vue | 196 -
.../views/monitor/job/modules/LogViewForm.vue | 81 -
.../views/monitor/job/modules/ViewForm.vue | 96 -
.../views/monitor/loginlog/LoginLogIndex.vue | 304 -
hotgo-web/src/views/monitor/online/index.vue | 213 -
.../views/monitor/operlog/OperlogIndex.vue | 447 -
.../monitor/operlog/modules/ViewForm.vue | 99 -
hotgo-web/src/views/monitor/server/index.vue | 499 -
.../src/views/system/config/ConfigIndex.vue | 342 -
.../system/config/modules/ConfigAddForm.vue | 59 -
.../system/config/modules/ConfigEditForm.vue | 48 -
.../views/system/config/modules/ConfigForm.js | 117 -
.../src/views/system/dept/SysDeptIndex.vue | 429 -
.../system/dept/modules/SysDeptAddForm.vue | 83 -
.../system/dept/modules/SysDeptEditForm.vue | 97 -
.../views/system/dept/modules/SysDeptForm.js | 273 -
.../src/views/system/dict/DictDataIndex.vue | 279 -
hotgo-web/src/views/system/dict/DictIndex.vue | 360 -
.../system/dict/modules/DictDataAddForm.vue | 63 -
.../system/dict/modules/DictDataEditForm.vue | 49 -
.../views/system/dict/modules/DictDataForm.js | 129 -
.../system/dict/modules/DictTypeAddForm.vue | 51 -
.../system/dict/modules/DictTypeEditForm.vue | 43 -
.../views/system/dict/modules/DictTypeForm.js | 114 -
.../views/system/iconSelect/IconSelect.vue | 22 -
hotgo-web/src/views/system/menu/MenuIndex.vue | 449 -
.../views/system/menu/modules/MenuAddForm.vue | 140 -
.../system/menu/modules/MenuEditForm.vue | 109 -
.../src/views/system/menu/modules/MenuForm.js | 272 -
.../src/views/system/notice/NoticeIndex.vue | 295 -
.../views/system/notice/NoticeReadIndex.vue | 290 -
.../system/notice/modules/NoticeAddForm.vue | 57 -
.../system/notice/modules/NoticeEditForm.vue | 57 -
.../views/system/notice/modules/NoticeForm.js | 229 -
.../system/notice/modules/NoticeViewForm.vue | 65 -
hotgo-web/src/views/system/post/PostIndex.vue | 332 -
.../views/system/post/modules/PostAddForm.vue | 56 -
.../system/post/modules/PostEditForm.vue | 46 -
.../src/views/system/post/modules/PostForm.js | 140 -
hotgo-web/src/views/system/role/QueryList.vue | 691 -
.../src/views/system/role/SysRoleAuth.vue | 453 -
.../src/views/system/role/SysRoleIndex.vue | 360 -
.../role/modules/CreateDataScopeForm.vue | 293 -
.../views/system/role/modules/DataScope.vue | 324 -
.../system/role/modules/PortletScope.vue | 256 -
.../system/role/modules/SysRoleAddForm.vue | 84 -
.../system/role/modules/SysRoleEditForm.vue | 72 -
.../views/system/role/modules/SysRoleForm.js | 285 -
.../modules/SysPortalConfigAddForm.vue | 80 -
.../modules/SysPortalConfigEditForm.vue | 84 -
.../modules/SysPortalConfigForm.js | 159 -
.../src/views/system/sysportlet/index.vue | 356 -
.../sysportlet/modules/SysPortletAddForm.vue | 120 -
.../sysportlet/modules/SysPortletEditForm.vue | 124 -
.../sysportlet/modules/SysPortletForm.js | 135 -
.../src/views/system/user/SysUserIndex.vue | 497 -
.../views/system/user/modules/DeptTree.vue | 180 -
.../views/system/user/modules/ImportExcel.vue | 114 -
.../system/user/modules/ResetPassword.vue | 111 -
.../system/user/modules/SysUserAddForm.vue | 119 -
.../system/user/modules/SysUserEditForm.vue | 127 -
.../views/system/user/modules/SysUserForm.js | 243 -
hotgo-web/src/views/test/temp/home.vue | 5 -
hotgo-web/src/views/tool/build/index.vue | 40 -
.../tool/gen/genconfigtemplate/index.vue | 359 -
.../module/GenConfigTemplateAddForm.vue | 91 -
.../module/GenConfigTemplateEditForm.vue | 94 -
.../module/GenConfigTemplateForm.js | 169 -
hotgo-web/src/views/tool/gen/index.vue | 384 -
.../views/tool/gen/modules/BasicInfoForm.vue | 77 -
.../src/views/tool/gen/modules/GenEdit.vue | 772 -
.../views/tool/gen/modules/GenInfoForm.vue | 491 -
.../views/tool/gen/modules/ImportTable.vue | 198 -
.../views/tool/gen/modules/PreviewCode.vue | 71 -
hotgo-web/src/views/tool/swagger/index.vue | 42 -
hotgo-web/src/views/user/Login.vue | 226 -
hotgo-web/tests/unit/.eslintrc.js | 5 -
hotgo-web/vue.config.js | 145 -
hotgo-web/webstorm.config.js | 3 -
{hotgo-server => server}/.gitattributes | 0
server/.gitignore | 32 +
server/Makefile | 92 +
server/README.MD | 1 +
server/api/api/member/member.go | 16 +
server/api/api/user/hello.go | 18 +
server/api/backend/attachment/attachment.go | 68 +
server/api/backend/blacklist/blacklist.go | 68 +
server/api/backend/common/console.go | 39 +
server/api/backend/common/ems.go | 19 +
server/api/backend/common/site.go | 56 +
server/api/backend/common/upload.go | 19 +
server/api/backend/config/config.go | 30 +
server/api/backend/cron/cron.go | 68 +
server/api/backend/cron/cron_group.go | 75 +
.../api/backend/dept/dept.go | 62 +-
server/api/backend/dict/dict_data.go | 46 +
server/api/backend/dict/dict_type.go | 43 +
server/api/backend/log/log.go | 70 +
.../api/backend/member/member.go | 160 +-
.../api/backend/menu/menu.go | 75 +-
server/api/backend/monitor/monitor.go | 68 +
server/api/backend/notice/notice.go | 68 +
.../api/backend/post/post.go | 71 +-
server/api/backend/provinces/provinces.go | 68 +
server/api/backend/role/role.go | 131 +
server/api/backend/user/hello.go | 18 +
server/go.mod | 32 +
server/go.sum | 745 +
server/hack/config.yaml | 24 +
server/internal/cmd/cmd.go | 85 +
server/internal/cmd/handler_shutdown.go | 40 +
.../run.go => server/internal/cmd/http.go | 91 +-
server/internal/cmd/queue.go | 27 +
server/internal/cmd/tools.go | 62 +
.../internal/consts/app.go | 4 +-
.../internal/consts/code.go | 4 +-
server/internal/consts/config.go | 15 +
.../internal/consts/context.go | 6 +-
server/internal/consts/cron.go | 18 +
.../internal/consts/debris.go | 12 +-
.../internal/consts/error.go | 4 +-
.../internal/consts/openapi.go | 4 +-
.../internal/consts/queue.go | 6 +-
.../internal/consts/redis.go | 4 +-
server/internal/consts/status.go | 17 +
.../internal/consts/upload.go | 10 +-
.../internal/consts/version.go | 6 +-
.../internal/controller/api/member/member.go | 24 +
server/internal/controller/api/user/hello.go | 25 +
.../internal/controller/backend/admin/dept.go | 142 +
.../controller/backend/admin/member.go | 289 +
.../internal/controller/backend/admin/menu.go | 120 +
.../controller/backend/admin/monitor.go | 110 +
.../controller/backend/admin/notice.go | 113 +
.../internal/controller/backend/admin/post.go | 140 +
.../internal/controller/backend/admin/role.go | 117 +
.../controller/backend/common/console.go | 42 +
.../internal/controller/backend/common/ems.go | 32 +
.../controller/backend/common/site.go | 101 +
.../controller/backend/common/upload.go | 36 +
.../controller/backend/sys/attachment.go | 113 +
.../controller/backend/sys/blacklist.go | 113 +
.../internal/controller/backend/sys/config.go | 57 +
.../internal/controller/backend/sys/cron.go | 113 +
.../controller/backend/sys/cron_group.go | 124 +
.../controller/backend/sys/dict_data.go | 73 +
.../controller/backend/sys/dict_type.go | 72 +
server/internal/controller/backend/sys/log.go | 88 +
.../controller/backend/sys/provinces.go | 106 +
.../websocket/handler/admin/monitor.go | 184 +
.../websocket/handler/common/site.go | 40 +
server/internal/controller/websocket/send.go | 28 +
server/internal/crons/init.go | 199 +
server/internal/crons/monitor.go | 75 +
server/internal/crons/test.go | 29 +
server/internal/crons/test2.go | 46 +
.../html => server/internal/dao}/.gitkeep | 0
.../internal/dao/admin_dept.go | 36 +-
.../internal/dao/admin_member.go | 67 +-
server/internal/dao/admin_member_post.go | 90 +
.../internal/dao/admin_member_role.go | 9 +-
.../internal/dao/admin_menu.go | 103 +-
server/internal/dao/admin_notice.go | 27 +
.../internal/dao/admin_post.go | 37 +-
server/internal/dao/admin_role.go | 71 +
server/internal/dao/admin_role_casbin.go | 27 +
.../internal/dao/admin_role_dept.go | 14 +-
.../internal/dao/admin_role_menu.go | 9 +-
.../internal/dao/internal/admin_dept.go | 3 +-
.../internal/dao/internal/admin_member.go | 3 +-
.../dao/internal/admin_member_post.go | 1 +
.../dao/internal/admin_member_role.go | 1 +
.../internal/dao/internal/admin_menu.go | 93 +-
.../internal/dao/internal/admin_notice.go | 7 +
.../internal/dao/internal/admin_post.go | 1 +
.../internal/dao/internal/admin_role.go | 1 +
.../dao/internal/admin_role_casbin.go | 87 +
.../internal/dao/internal/admin_role_dept.go | 1 +
.../internal/dao/internal/admin_role_menu.go | 1 +
.../internal/dao/internal/sys_attachment.go | 105 +
server/internal/dao/internal/sys_blacklist.go | 83 +
.../internal/dao/internal/sys_config.go | 45 +-
server/internal/dao/internal/sys_cron.go | 95 +
.../internal/dao/internal/sys_cron_group.go | 89 +
.../internal/dao/internal/sys_dict_data.go | 1 +
.../internal/dao/internal/sys_dict_type.go | 3 +
.../internal/dao/internal/sys_log.go | 1 +
.../internal/dao/internal/sys_provinces.go | 7 +
server/internal/dao/sys_attachment.go | 51 +
server/internal/dao/sys_blacklist.go | 27 +
server/internal/dao/sys_config.go | 27 +
.../internal/dao/sys_cron.go | 17 +-
server/internal/dao/sys_cron_group.go | 40 +
server/internal/dao/sys_dict_data.go | 27 +
server/internal/dao/sys_dict_type.go | 99 +
.../internal/dao/sys_log.go | 9 +-
.../internal/dao/sys_provinces.go | 29 +-
server/internal/global/init.go | 42 +
server/internal/global/static.go | 21 +
.../internal/library/cache/cache.go | 13 +-
.../internal/library/captcha/captcha.go | 33 +-
server/internal/library/casbin/adapter.go | 324 +
server/internal/library/casbin/casbin_test.go | 68 +
server/internal/library/casbin/enforcer.go | 113 +
server/internal/library/contexts/context.go | 81 +
server/internal/library/ems/ems.go | 70 +
server/internal/library/jwt/jwt.go | 112 +
server/internal/library/location/location.go | 197 +
.../internal/library/notify/feishu/client.go | 83 +
.../internal/library/notify/feishu/image.go | 24 +
.../library/notify/feishu/interactive.go | 21 +
.../feishu/internal/security/security.go | 21 +
.../internal/library/notify/feishu/message.go | 66 +
server/internal/library/notify/feishu/post.go | 170 +
.../library/notify/feishu/sharechat.go | 24 +
server/internal/library/notify/feishu/text.go | 24 +
server/internal/library/queue/init.go | 216 +
.../internal/library}/queue/kafkamq.go | 27 +-
.../internal/library}/queue/logger.go | 28 +-
.../internal/library}/queue/redismq.go | 59 +-
.../internal/library}/queue/rocketmq.go | 8 +-
.../internal/library/queue/rocketmq_logger.go | 10 +-
server/internal/library/response/response.go | 84 +
.../plugin => server/internal/logic}/.gitkeep | 0
server/internal/logic/admin/dept.go | 349 +
server/internal/logic/admin/member.go | 576 +
.../internal/logic/admin/member_post.go | 46 +-
server/internal/logic/admin/menu.go | 369 +
server/internal/logic/admin/notice.go | 180 +
.../internal/logic/admin/post.go | 173 +-
server/internal/logic/admin/role.go | 221 +
server/internal/logic/common/upload.go | 139 +
server/internal/logic/hook/global_log.go | 37 +
server/internal/logic/hook/init.go | 22 +
server/internal/logic/logic.go | 13 +
.../internal/logic/middleware/admin_auth.go | 51 +
server/internal/logic/middleware/api_auth.go | 49 +
server/internal/logic/middleware/init.go | 172 +
.../internal/logic/middleware/response.go | 35 +-
server/internal/logic/middleware/weboscket.go | 42 +
server/internal/logic/sys/attachment.go | 204 +
server/internal/logic/sys/blacklist.go | 150 +
server/internal/logic/sys/config.go | 165 +
server/internal/logic/sys/cron.go | 183 +
server/internal/logic/sys/cron_group.go | 187 +
server/internal/logic/sys/dict_data.go | 130 +
server/internal/logic/sys/dict_type.go | 173 +
.../internal/logic/sys/log.go | 481 +-
server/internal/logic/sys/provinces.go | 155 +
.../css => server/internal/model}/.gitkeep | 0
server/internal/model/config.go | 30 +
.../app => server/internal}/model/context.go | 24 +-
.../internal/model/do}/.gitkeep | 0
.../internal/model/do}/admin_dept.go | 5 +-
.../internal/model/do}/admin_member.go | 6 +-
.../internal/model/do}/admin_member_post.go | 4 +-
.../internal/model/do}/admin_member_role.go | 4 +-
server/internal/model/do/admin_menu.go | 41 +
.../internal/model/do}/admin_notice.go | 7 +-
.../internal/model/do}/admin_post.go | 4 +-
.../internal/model/do}/admin_role.go | 4 +-
server/internal/model/do/admin_role_casbin.go | 22 +
.../internal/model/do}/admin_role_dept.go | 4 +-
.../internal/model/do}/admin_role_menu.go | 4 +-
server/internal/model/do/sys_attachment.go | 32 +
server/internal/model/do/sys_blacklist.go | 21 +
server/internal/model/do/sys_config.go | 28 +
server/internal/model/do/sys_cron.go | 27 +
.../internal/model/do/sys_cron_group.go | 18 +-
.../internal/model/do}/sys_dict_data.go | 4 +-
.../internal/model/do}/sys_dict_type.go | 5 +-
.../internal/model/do}/sys_log.go | 4 +-
.../internal/model/do}/sys_provinces.go | 8 +-
.../internal/model/entity}/.gitkeep | 0
server/internal/model/entity/admin_dept.go | 25 +
server/internal/model/entity/admin_member.go | 42 +
.../model/entity/admin_member_post.go | 4 +-
.../model/entity/admin_member_role.go | 4 +-
server/internal/model/entity/admin_menu.go | 39 +
server/internal/model/entity/admin_notice.go | 24 +
server/internal/model/entity/admin_post.go | 21 +
server/internal/model/entity/admin_role.go | 24 +
.../model/entity/admin_role_casbin.go | 17 +
.../internal}/model/entity/admin_role_dept.go | 4 +-
.../internal}/model/entity/admin_role_menu.go | 4 +-
.../internal/model/entity/sys_attachment.go | 30 +
server/internal/model/entity/sys_blacklist.go | 19 +
server/internal/model/entity/sys_config.go | 26 +
server/internal/model/entity/sys_cron.go | 25 +
.../internal/model/entity/sys_cron_group.go | 22 +
server/internal/model/entity/sys_dict_data.go | 24 +
server/internal/model/entity/sys_dict_type.go | 22 +
server/internal/model/entity/sys_log.go | 36 +
server/internal/model/entity/sys_provinces.go | 28 +
server/internal/model/input/adminin/dept.go | 92 +
server/internal/model/input/adminin/member.go | 192 +
server/internal/model/input/adminin/menu.go | 144 +
server/internal/model/input/adminin/notice.go | 64 +
server/internal/model/input/adminin/post.go | 81 +
.../internal/model/input/adminin/role.go | 32 +-
server/internal/model/input/form/base.go | 85 +
.../internal/model/input/sysin/attachment.go | 72 +
.../internal/model/input/sysin/blacklist.go | 60 +
server/internal/model/input/sysin/config.go | 101 +
server/internal/model/input/sysin/cron.go | 61 +
.../internal/model/input/sysin/cron_group.go | 67 +
.../internal/model/input/sysin/dict_data.go | 40 +
.../internal/model/input/sysin/dict_type.go | 30 +
server/internal/model/input/sysin/log.go | 50 +
.../internal/model/input/sysin/provinces.go | 61 +
.../internal/model/input/websocketin/send.go | 22 +
server/internal/model/monitor.go | 38 +
server/internal/model/response.go | 17 +
.../app => server/internal}/model/tree.go | 16 +-
server/internal/packed/packed.go | 9 +
server/internal/queues/init.go | 29 +
server/internal/queues/sys_log.go | 47 +
server/internal/router/admin.go | 47 +
server/internal/router/api.go | 30 +
server/internal/router/websocket.go | 49 +
.../internal/service}/.gitkeep | 0
server/internal/service/admin_dept.go | 35 +
server/internal/service/admin_member.go | 44 +
server/internal/service/admin_member_post.go | 27 +
server/internal/service/admin_menu.go | 38 +
server/internal/service/admin_notice.go | 32 +
server/internal/service/admin_post.go | 35 +
server/internal/service/admin_role.go | 35 +
server/internal/service/common_upload.go | 31 +
server/internal/service/hook.go | 26 +
server/internal/service/middleware.go | 32 +
server/internal/service/sys_attachment.go | 34 +
server/internal/service/sys_blacklist.go | 32 +
server/internal/service/sys_config.go | 32 +
server/internal/service/sys_cron.go | 33 +
server/internal/service/sys_cron_group.go | 33 +
server/internal/service/sys_dict_data.go | 29 +
server/internal/service/sys_dict_type.go | 32 +
server/internal/service/sys_log.go | 36 +
server/internal/service/sys_provinces.go | 32 +
server/internal/websocket/client.go | 204 +
server/internal/websocket/client_manager.go | 331 +
server/internal/websocket/init.go | 56 +
server/internal/websocket/model.go | 44 +
server/internal/websocket/router.go | 53 +
server/main.go | 23 +
server/manifest/config/casbin.conf | 15 +
server/manifest/config/config.example.yaml | 131 +
.../deploy/kustomize/base/deployment.yaml | 21 +
.../deploy/kustomize/base/kustomization.yaml | 8 +
.../deploy/kustomize/base/service.yaml | 12 +
.../kustomize/overlays/develop/configmap.yaml | 14 +
.../overlays/develop/deployment.yaml | 10 +
.../overlays/develop/kustomization.yaml | 14 +
server/manifest/docker/Dockerfile | 16 +
server/manifest/docker/docker.sh | 8 +
server/resource/data/hotgo.sql | 4801 +++
.../resource/i18n/.gitkeep | 0
server/resource/public/.gitignore | 2 +
.../8E2A05DA6D386B12988FE64CE3200A64.txt | 3 +
.../resource/public/favicon.ico | Bin
server/resource/public/html/.gitkeep | 0
server/resource/public/plugin/.gitkeep | 0
server/resource/public/resource/css/.gitkeep | 0
.../resource/public/resource/image/.gitkeep | 0
server/resource/public/resource/js/.gitkeep | 0
server/resource/template/.gitkeep | 0
server/utility/.gitkeep | 0
server/utility/auth/auth.go | 45 +
server/utility/charset/charset.go | 91 +
server/utility/convert/convert.go | 46 +
server/utility/encrypt/encrypt.go | 24 +
.../utility/excel/excel.go | 17 +-
server/utility/file/file.go | 113 +
server/utility/file/mime.go | 147 +
server/utility/format/format.go | 55 +
.../utility/signal/signal.go | 38 +-
server/utility/tree/tree.go | 59 +
server/utility/useragent/useragent.go | 125 +
server/utility/validate/validate.go | 78 +
web/.editorconfig | 19 +
web/.env | 11 +
web/.env.development | 30 +
web/.env.production | 31 +
web/.eslintignore | 16 +
web/.eslintrc.js | 77 +
{hotgo-web => web}/.gitignore | 10 +-
web/.prettierignore | 9 +
web/.stylelintignore | 3 +
LICENSE => web/LICENSE | 2 +-
web/README.md | 1 +
web/build/constant.ts | 6 +
web/build/getConfigFileName.ts | 9 +
web/build/script/buildConf.ts | 44 +
web/build/script/postBuild.ts | 23 +
web/build/utils.ts | 71 +
web/build/vite/plugin/compress.ts | 35 +
web/build/vite/plugin/html.ts | 42 +
web/build/vite/plugin/index.ts | 42 +
web/build/vite/plugin/mock.ts | 19 +
web/build/vite/plugin/styleImport.ts | 22 +
web/build/vite/proxy.ts | 34 +
web/commitlint.config.js | 57 +
web/index.html | 122 +
web/mock/_createProductionServer.ts | 18 +
web/mock/_util.ts | 73 +
web/mock/dashboard/console.ts | 44 +
web/mock/system/menu.ts | 89 +
web/mock/system/role.ts | 45 +
web/mock/table/list.ts | 40 +
web/mock/user/menus.ts | 53 +
web/mock/user/user.ts | 60 +
web/package-lock.json | 26849 ++++++++++++++++
web/package.json | 133 +
web/pnpm-lock.yaml | 7612 +++++
web/postcss.config.js | 6 +
web/prettier.config.js | 20 +
web/public/favicon.ico | Bin 0 -> 346 bytes
web/public/notification.png | Bin 0 -> 1987 bytes
web/src/App.vue | 86 +
web/src/api/apply/attachment.ts | 41 +
web/src/api/apply/notice.ts | 41 +
web/src/api/apply/provinces.ts | 41 +
web/src/api/dashboard/console.ts | 9 +
web/src/api/dict/dict.ts | 89 +
web/src/api/log/log.ts | 24 +
web/src/api/monitor/monitor.ts | 17 +
web/src/api/org/dept.ts | 33 +
web/src/api/org/post.ts | 33 +
web/src/api/org/user.ts | 33 +
web/src/api/sys/blacklist.ts | 41 +
web/src/api/sys/config.ts | 24 +
web/src/api/sys/cron.ts | 89 +
web/src/api/system/dict.ts | 0
web/src/api/system/menu.ts | 40 +
web/src/api/system/role.ts | 43 +
web/src/api/system/user.ts | 74 +
web/src/api/table/list.ts | 10 +
web/src/assets/icons/login.svg | 127 +
web/src/assets/icons/logo.svg | 60 +
web/src/assets/images/Business.svg | 474 +
web/src/assets/images/Error.svg | 255 +
web/src/assets/images/account-logo.png | Bin 0 -> 6990 bytes
web/src/assets/images/account-logo.png1 | Bin 0 -> 11762 bytes
web/src/assets/images/analysis.svg | 156 +
web/src/assets/images/exception/403.svg | 100 +
web/src/assets/images/exception/404.svg | 115 +
web/src/assets/images/exception/500.svg | 111 +
.../assets/images/exception/developing.svg | 133 +
.../assets/images/exception/load-error.svg | 178 +
web/src/assets/images/exception/nodata.svg | 106 +
web/src/assets/images/header-theme-dark.svg | 49 +
web/src/assets/images/login.svg | 127 +
web/src/assets/images/logo.png | Bin 0 -> 38601 bytes
web/src/assets/images/logo.png1 | Bin 0 -> 6448 bytes
web/src/assets/images/logo.png11 | Bin 0 -> 54608 bytes
web/src/assets/images/nav-horizontal-mix.svg | 15 +
web/src/assets/images/nav-horizontal.svg | 26 +
.../src/assets/images/nav-theme-dark.svg | 40 +-
.../src/assets/images/nav-theme-light.svg | 34 +-
web/src/assets/images/schoolboy.png | Bin 0 -> 126131 bytes
web/src/assets/images/tool.png | Bin 0 -> 2629 bytes
.../components/Application/Application.vue | 40 +
web/src/components/Application/index.ts | 3 +
web/src/components/CountTo/CountTo.vue | 110 +
web/src/components/CountTo/index.ts | 4 +
web/src/components/DialogContent/index.ts | 3 +
web/src/components/DialogContent/index.vue | 12 +
web/src/components/Form/index.ts | 4 +
web/src/components/Form/src/BasicForm.vue | 318 +
web/src/components/Form/src/helper.ts | 42 +
web/src/components/Form/src/hooks/useForm.ts | 86 +
.../Form/src/hooks/useFormContext.ts | 11 +
.../Form/src/hooks/useFormEvents.ts | 107 +
.../Form/src/hooks/useFormValues.ts | 54 +
web/src/components/Form/src/props.ts | 82 +
web/src/components/Form/src/types/form.ts | 59 +
web/src/components/Form/src/types/index.ts | 28 +
web/src/components/LoadingContent/index.ts | 3 +
web/src/components/LoadingContent/index.vue | 12 +
web/src/components/Lockscreen/Lockscreen.vue | 304 +
web/src/components/Lockscreen/Recharge.vue | 164 +
web/src/components/Lockscreen/index.ts | 3 +
web/src/components/MessageContent/index.ts | 3 +
web/src/components/MessageContent/index.vue | 12 +
web/src/components/Modal/index.ts | 3 +
web/src/components/Modal/src/basicModal.vue | 117 +
.../components/Modal/src/hooks/useModal.ts | 54 +
web/src/components/Modal/src/props.ts | 30 +
web/src/components/Modal/src/type/index.ts | 19 +
web/src/components/SvgIcon/index.vue | 59 +
web/src/components/Table/index.ts | 4 +
web/src/components/Table/src/Table.vue | 353 +
web/src/components/Table/src/componentMap.ts | 41 +
.../Table/src/components/TableAction.vue | 141 +
.../src/components/editable/CellComponent.ts | 47 +
.../src/components/editable/EditableCell.vue | 418 +
.../Table/src/components/editable/helper.ts | 15 +
.../Table/src/components/editable/index.ts | 49 +
.../src/components/settings/ColumnSetting.vue | 335 +
web/src/components/Table/src/const.ts | 11 +
.../components/Table/src/hooks/useColumns.ts | 164 +
.../Table/src/hooks/useDataSource.ts | 145 +
.../components/Table/src/hooks/useLoading.ts | 21 +
.../Table/src/hooks/usePagination.ts | 50 +
.../Table/src/hooks/useTableContext.ts | 22 +
web/src/components/Table/src/props.ts | 59 +
.../Table/src/types/componentType.ts | 8 +
.../components/Table/src/types/pagination.ts | 8 +
web/src/components/Table/src/types/table.ts | 38 +
.../components/Table/src/types/tableAction.ts | 27 +
web/src/components/Upload/index.ts | 1 +
web/src/components/Upload/src/BasicUpload.vue | 330 +
web/src/components/Upload/src/props.ts | 38 +
web/src/components/Upload/src/type/index.ts | 7 +
web/src/directives/clickOutside.ts | 86 +
web/src/directives/permission.ts | 19 +
web/src/enums/apiEnum.ts | 14 +
web/src/enums/breakpointEnum.ts | 28 +
web/src/enums/cacheEnum.ts | 20 +
web/src/enums/httpEnum.ts | 34 +
web/src/enums/optionsiEnum.ts | 67 +
web/src/enums/pageEnum.ts | 14 +
web/src/enums/permissionsEnum.ts | 4 +
web/src/enums/roleEnum.ts | 7 +
web/src/enums/socketEnum.ts | 16 +
web/src/hooks/core/useTimeout.ts | 47 +
web/src/hooks/event/useBreakpoint.ts | 89 +
web/src/hooks/event/useEventListener.ts | 62 +
web/src/hooks/event/useWindowSizeFn.ts | 36 +
web/src/hooks/index.ts | 3 +
web/src/hooks/setting/index.ts | 34 +
web/src/hooks/setting/useDesignSetting.ts | 18 +
web/src/hooks/setting/useProjectSetting.ts | 42 +
web/src/hooks/use-async.ts | 15 +
web/src/hooks/useBattery.ts | 93 +
web/src/hooks/useDomWidth.ts | 23 +
web/src/hooks/useEcharts.ts | 8 +
web/src/hooks/useOnline.ts | 30 +
web/src/hooks/useTime.ts | 55 +
web/src/hooks/web/useECharts.ts | 120 +
web/src/hooks/web/usePage.ts | 62 +
web/src/hooks/web/usePermission.ts | 52 +
web/src/layout/components/Footer/index.ts | 3 +
web/src/layout/components/Footer/index.vue | 56 +
.../components/Header/PopoverMessage.vue | 65 +
.../components/Header/ProjectSetting.vue | 384 +
.../layout/components/Header/components.ts | 36 +
web/src/layout/components/Header/index.ts | 3 +
web/src/layout/components/Header/index.vue | 606 +
web/src/layout/components/Logo/index.ts | 3 +
web/src/layout/components/Logo/index.vue | 39 +
web/src/layout/components/Main/index.ts | 3 +
web/src/layout/components/Main/index.vue | 50 +
web/src/layout/components/Menu/index.ts | 3 +
web/src/layout/components/Menu/index.vue | 167 +
web/src/layout/components/TagsView/index.ts | 3 +
web/src/layout/components/TagsView/index.vue | 675 +
web/src/layout/index.vue | 277 +
web/src/layout/parentLayout.vue | 3 +
web/src/main.ts | 52 +
web/src/plugins/customComponents.ts | 7 +
web/src/plugins/directives.ts | 12 +
web/src/plugins/globalMethods.ts | 5 +
web/src/plugins/index.ts | 4 +
web/src/plugins/naive.ts | 143 +
web/src/router/base.ts | 45 +
web/src/router/constant.ts | 7 +
web/src/router/generator-routers.ts | 154 +
web/src/router/index.ts | 60 +
web/src/router/modules/about.ts | 32 +
web/src/router/modules/comp.ts | 131 +
web/src/router/modules/dashboard.ts | 64 +
web/src/router/modules/docs.ts | 19 +
web/src/router/modules/exception.ts | 57 +
web/src/router/modules/form.ts | 57 +
web/src/router/modules/frame.ts | 24 +
web/src/router/modules/list.ts | 51 +
web/src/router/modules/result.ts | 57 +
web/src/router/modules/setting.ts | 49 +
web/src/router/modules/system.ts | 49 +
web/src/router/router-guards.ts | 109 +
web/src/router/router-icons.ts | 53 +
web/src/router/types.ts | 55 +
web/src/settings/animateSetting.ts | 8 +
web/src/settings/componentSetting.ts | 31 +
web/src/settings/designSetting.ts | 32 +
web/src/settings/projectSetting.ts | 57 +
web/src/store/index.ts | 10 +
web/src/store/modules/asyncRoute.ts | 127 +
web/src/store/modules/designSetting.ts | 40 +
web/src/store/modules/index.ts | 19 +
web/src/store/modules/lockscreen.ts | 31 +
web/src/store/modules/notification.ts | 51 +
web/src/store/modules/projectSetting.ts | 97 +
web/src/store/modules/tabsView.ts | 71 +
web/src/store/modules/user.ts | 139 +
web/src/store/mutation-types.ts | 5 +
web/src/store/types.ts | 14 +
web/src/styles/common.less | 129 +
web/src/styles/index.less | 3 +
web/src/styles/tailwind.css | 4 +
web/src/styles/transition/base.less | 18 +
web/src/styles/transition/fade.less | 81 +
web/src/styles/transition/index.less | 10 +
web/src/styles/transition/scale.less | 21 +
web/src/styles/transition/scroll.less | 67 +
web/src/styles/transition/slide.less | 39 +
web/src/styles/transition/zoom.less | 27 +
web/src/styles/var.less | 4 +
web/src/utils/Drag.ts | 98 +
web/src/utils/Storage.ts | 127 +
web/src/utils/array.ts | 144 +
web/src/utils/browser-type.ts | 142 +
web/src/utils/dateUtil.ts | 157 +
web/src/utils/domUtils.ts | 165 +
web/src/utils/downloadFile.ts | 75 +
web/src/utils/env.ts | 87 +
web/src/utils/http/axios/Axios.ts | 200 +
web/src/utils/http/axios/axiosCancel.ts | 61 +
web/src/utils/http/axios/axiosTransform.ts | 52 +
web/src/utils/http/axios/checkStatus.ts | 47 +
web/src/utils/http/axios/helper.ts | 47 +
web/src/utils/http/axios/index.ts | 288 +
web/src/utils/http/axios/types.ts | 65 +
web/src/utils/index.ts | 253 +
web/src/utils/is/index.ts | 118 +
web/src/utils/lib/echarts.ts | 53 +
web/src/utils/lodashChunk.ts | 12 +
web/src/utils/log.ts | 9 +
web/src/utils/propTypes.ts | 33 +
web/src/utils/urlUtils.ts | 24 +
web/src/utils/websocket.ts | 186 +
web/src/views/about/index.vue | 105 +
web/src/views/apply/attachment/columns.ts | 90 +
web/src/views/apply/attachment/index.vue | 394 +
web/src/views/apply/notice/columns.ts | 74 +
web/src/views/apply/notice/index.vue | 376 +
web/src/views/apply/provinces/columns.ts | 71 +
web/src/views/apply/provinces/index.vue | 376 +
web/src/views/comp/drag/index.vue | 162 +
web/src/views/comp/form/basic.vue | 172 +
web/src/views/comp/form/useForm.vue | 195 +
web/src/views/comp/modal/index.vue | 306 +
web/src/views/comp/richtext/vue-quill.vue | 114 +
web/src/views/comp/table/CellColumns.ts | 83 +
web/src/views/comp/table/basic.vue | 113 +
web/src/views/comp/table/basicColumns.ts | 72 +
web/src/views/comp/table/editCell.vue | 59 +
web/src/views/comp/table/editRow.vue | 114 +
web/src/views/comp/table/rowColumns.ts | 97 +
web/src/views/comp/upload/index.vue | 111 +
.../console/components/FluxTrend.vue | 111 +
.../dashboard/console/components/Icons.ts | 25 +
.../dashboard/console/components/VisiTab.vue | 30 +
.../console/components/VisitAmount.vue | 61 +
.../dashboard/console/components/props.ts | 17 +
web/src/views/dashboard/console/console.vue | 337 +
web/src/views/dashboard/monitor/monitor.vue | 7 +
.../views/dashboard/workplace/workplace.vue | 328 +
web/src/views/develop/code/index.vue | 39 +
web/src/views/exception/403.vue | 40 +
web/src/views/exception/404.vue | 40 +
web/src/views/exception/500.vue | 40 +
web/src/views/form/basicForm/index.vue | 194 +
web/src/views/form/detail/index.vue | 124 +
web/src/views/form/stepForm/Step1.vue | 122 +
web/src/views/form/stepForm/Step2.vue | 72 +
web/src/views/form/stepForm/Step3.vue | 72 +
web/src/views/form/stepForm/stepForm.vue | 54 +
web/src/views/frame/docs.vue | 1 +
web/src/views/iframe/index.vue | 61 +
web/src/views/list/basicList/columns.ts | 50 +
web/src/views/list/basicList/index.vue | 347 +
web/src/views/list/basicList/info.vue | 34 +
web/src/views/log/cron-log/columns.ts | 80 +
web/src/views/log/cron-log/index.vue | 293 +
web/src/views/log/cron-log/view.vue | 136 +
web/src/views/log/ems-log/columns.ts | 80 +
web/src/views/log/ems-log/index.vue | 293 +
web/src/views/log/ems-log/view.vue | 136 +
web/src/views/log/log/columns.ts | 80 +
web/src/views/log/log/index.vue | 293 +
web/src/views/log/log/view.vue | 136 +
web/src/views/log/login-log/columns.ts | 80 +
web/src/views/log/login-log/index.vue | 293 +
web/src/views/log/login-log/view.vue | 136 +
web/src/views/log/sms-log/columns.ts | 80 +
web/src/views/log/sms-log/index.vue | 293 +
web/src/views/log/sms-log/view.vue | 136 +
web/src/views/login/index.vue | 208 +
web/src/views/monitor/online/columns.ts | 117 +
web/src/views/monitor/online/index.vue | 134 +
web/src/views/monitor/serve-log/columns.ts | 80 +
web/src/views/monitor/serve-log/index.vue | 293 +
web/src/views/monitor/serve-log/view.vue | 136 +
.../serve-monitor/components/DataItem.vue | 97 +
.../components/chart/FullYearSalesChart.vue | 259 +
.../components/chart/LoadChart.vue | 122 +
web/src/views/monitor/serve-monitor/index.vue | 287 +
web/src/views/org/dept/dept.vue | 417 +
web/src/views/org/post/columns.ts | 58 +
web/src/views/org/post/post.vue | 345 +
web/src/views/org/user/columns.ts | 119 +
web/src/views/org/user/user.vue | 509 +
.../views/permission/menu/CreateDrawer.vue | 427 +
web/src/views/permission/menu/menu.vue | 619 +
web/src/views/permission/role/columns.ts | 36 +
web/src/views/permission/role/role.vue | 355 +
web/src/views/redirect/index.vue | 22 +
web/src/views/result/fail.vue | 70 +
web/src/views/result/info.vue | 74 +
web/src/views/result/success.vue | 55 +
.../views/setting/account/BasicSetting.vue | 71 +
.../views/setting/account/SafetySetting.vue | 52 +
web/src/views/setting/account/account.vue | 76 +
web/src/views/setting/system/BasicSetting.vue | 133 +
web/src/views/setting/system/EmailSetting.vue | 79 +
.../views/setting/system/RevealSetting.vue | 218 +
web/src/views/setting/system/system.vue | 95 +
web/src/views/system/account/BasicSetting.vue | 71 +
.../views/system/account/SafetySetting.vue | 52 +
web/src/views/system/account/account.vue | 76 +
web/src/views/system/blacklist/columns.ts | 41 +
web/src/views/system/blacklist/index.vue | 331 +
web/src/views/system/config/BasicSetting.vue | 205 +
web/src/views/system/config/EmailSetting.vue | 179 +
web/src/views/system/config/RevealSetting.vue | 218 +
web/src/views/system/config/ThemeSetting.vue | 98 +
web/src/views/system/config/system.vue | 102 +
web/src/views/system/cron/columns.ts | 81 +
web/src/views/system/cron/index.vue | 495 +
web/src/views/system/cron/modal/columns.ts | 78 +
web/src/views/system/cron/modal/index.vue | 248 +
web/src/views/system/cron/modal/modal.vue | 29 +
web/src/views/system/dict/CreateDrawer.vue | 182 +
web/src/views/system/dict/columns.ts | 50 +
web/src/views/system/dict/index.vue | 247 +
web/src/views/system/dict/list.vue | 298 +
web/stylelint.config.js | 70 +
web/tailwind.config.js | 78 +
web/tsconfig.json | 59 +
web/types/config.d.ts | 74 +
web/types/global.d.ts | 102 +
web/types/index.d.ts | 28 +
web/types/modules.d.ts | 10 +
web/types/utils.d.ts | 5 +
web/vite.config.ts | 88 +
web/yarn.lock | 8054 +++++
1487 files changed, 97869 insertions(+), 96539 deletions(-)
create mode 100644 .gitignore
delete mode 100644 .idea/.gitignore
delete mode 100644 .idea/hotgo.iml
delete mode 100644 .idea/inspectionProfiles/Project_Default.xml
delete mode 100644 .idea/misc.xml
delete mode 100644 .idea/modules.xml
delete mode 100644 .idea/vcs.xml
delete mode 100644 hotgo-server/.gitignore
delete mode 100644 hotgo-server/LICENSE
delete mode 100644 hotgo-server/README.MD
delete mode 100644 hotgo-server/app/com/context_com.go
delete mode 100644 hotgo-server/app/com/ip_com.go
delete mode 100644 hotgo-server/app/com/jwt_com.go
delete mode 100644 hotgo-server/app/com/redis_com.go
delete mode 100644 hotgo-server/app/com/response_com.go
delete mode 100644 hotgo-server/app/consts/debris_consts.go
delete mode 100644 hotgo-server/app/controller/adminController/config_controller.go
delete mode 100644 hotgo-server/app/controller/adminController/dept_controller.go
delete mode 100644 hotgo-server/app/controller/adminController/dict_controller.go
delete mode 100644 hotgo-server/app/controller/adminController/log_controller.go
delete mode 100644 hotgo-server/app/controller/adminController/login_controller.go
delete mode 100644 hotgo-server/app/controller/adminController/member_controller.go
delete mode 100644 hotgo-server/app/controller/adminController/menu_controller.go
delete mode 100644 hotgo-server/app/controller/adminController/notice_controller.go
delete mode 100644 hotgo-server/app/controller/adminController/post_controller.go
delete mode 100644 hotgo-server/app/controller/adminController/role_controller.go
delete mode 100644 hotgo-server/app/controller/apiController/base_controller.go
delete mode 100644 hotgo-server/app/controller/apiController/dict_controller.go
delete mode 100644 hotgo-server/app/controller/apiController/log_controller.go
delete mode 100644 hotgo-server/app/controller/apiController/login_controller.go
delete mode 100644 hotgo-server/app/controller/apiController/member_controller.go
delete mode 100644 hotgo-server/app/factory/queue/list.go
delete mode 100644 hotgo-server/app/factory/queue/main.go
delete mode 100644 hotgo-server/app/factory/queue/queue_test.go
delete mode 100644 hotgo-server/app/form/adminForm/config_form.go
delete mode 100644 hotgo-server/app/form/adminForm/dict_form.go
delete mode 100644 hotgo-server/app/form/adminForm/log_form.go
delete mode 100644 hotgo-server/app/form/adminForm/login_form.go
delete mode 100644 hotgo-server/app/form/adminForm/notice_form.go
delete mode 100644 hotgo-server/app/form/adminForm/role_form.go
delete mode 100644 hotgo-server/app/form/apiForm/base_form.go
delete mode 100644 hotgo-server/app/form/apiForm/dict_form.go
delete mode 100644 hotgo-server/app/form/apiForm/log_form.go
delete mode 100644 hotgo-server/app/form/apiForm/login_form.go
delete mode 100644 hotgo-server/app/form/apiForm/member_form.go
delete mode 100644 hotgo-server/app/form/common.go
delete mode 100644 hotgo-server/app/form/input/admin_dept_input.go
delete mode 100644 hotgo-server/app/form/input/admin_member_input.go
delete mode 100644 hotgo-server/app/form/input/admin_notice_input.go
delete mode 100644 hotgo-server/app/form/input/admin_post_input.go
delete mode 100644 hotgo-server/app/form/input/sys_config_input.go
delete mode 100644 hotgo-server/app/form/input/sys_log_input.go
delete mode 100644 hotgo-server/app/hook/hook.go
delete mode 100644 hotgo-server/app/interfaces/queue_producer_interface.go
delete mode 100644 hotgo-server/app/middleware/admin_auth.go
delete mode 100644 hotgo-server/app/middleware/api_auth.go
delete mode 100644 hotgo-server/app/middleware/middleware.go
delete mode 100644 hotgo-server/app/model/entity/admin_dept.go
delete mode 100644 hotgo-server/app/model/entity/admin_member.go
delete mode 100644 hotgo-server/app/model/entity/admin_menu.go
delete mode 100644 hotgo-server/app/model/entity/admin_menu_old.go
delete mode 100644 hotgo-server/app/model/entity/admin_notice.go
delete mode 100644 hotgo-server/app/model/entity/admin_post.go
delete mode 100644 hotgo-server/app/model/entity/admin_role.go
delete mode 100644 hotgo-server/app/model/entity/sys_config.go
delete mode 100644 hotgo-server/app/model/entity/sys_dict_data.go
delete mode 100644 hotgo-server/app/model/entity/sys_dict_type.go
delete mode 100644 hotgo-server/app/model/entity/sys_log.go
delete mode 100644 hotgo-server/app/model/entity/sys_provinces.go
delete mode 100644 hotgo-server/app/model/response.go
delete mode 100644 hotgo-server/app/service/adminService/dept_service.go
delete mode 100644 hotgo-server/app/service/adminService/member_service.go
delete mode 100644 hotgo-server/app/service/adminService/menu_service.go
delete mode 100644 hotgo-server/app/service/adminService/notice_service.go
delete mode 100644 hotgo-server/app/service/adminService/role_service.go
delete mode 100644 hotgo-server/app/service/apiService/member_service.go
delete mode 100644 hotgo-server/app/service/internal/dao/admin_menu_old.go
delete mode 100644 hotgo-server/app/service/internal/dao/admin_notice.go
delete mode 100644 hotgo-server/app/service/internal/dao/admin_role.go
delete mode 100644 hotgo-server/app/service/internal/dao/internal/admin_menu_old.go
delete mode 100644 hotgo-server/app/service/internal/dao/sys_config.go
delete mode 100644 hotgo-server/app/service/internal/dao/sys_dict_data.go
delete mode 100644 hotgo-server/app/service/internal/dao/sys_dict_type.go
delete mode 100644 hotgo-server/app/service/internal/dto/admin_menu.go
delete mode 100644 hotgo-server/app/service/internal/dto/admin_menu_old.go
delete mode 100644 hotgo-server/app/service/sysService/config_service.go
delete mode 100644 hotgo-server/app/service/sysService/dict_service.go
delete mode 100644 hotgo-server/app/service/sysService/provinces_service.go
delete mode 100644 hotgo-server/app/utils/auth_util.go
delete mode 100644 hotgo-server/app/utils/charset_util.go
delete mode 100644 hotgo-server/app/utils/filter_util.go
delete mode 100644 hotgo-server/app/utils/validate_util.go
delete mode 100644 hotgo-server/boot/queue.go
delete mode 100644 hotgo-server/config/.gitignore
delete mode 100644 hotgo-server/config/config.example.yaml
delete mode 100644 hotgo-server/go.mod
delete mode 100644 hotgo-server/go.sum
delete mode 100644 hotgo-server/main.go
delete mode 100644 hotgo-server/resource/public/plugin/layer-3.1.1/layer.js
delete mode 100644 hotgo-server/resource/public/plugin/layer-3.1.1/mobile/layer.js
delete mode 100644 hotgo-server/resource/public/plugin/layer-3.1.1/mobile/need/layer.css
delete mode 100644 hotgo-server/resource/public/plugin/layer-3.1.1/theme/default/icon-ext.png
delete mode 100644 hotgo-server/resource/public/plugin/layer-3.1.1/theme/default/icon.png
delete mode 100644 hotgo-server/resource/public/plugin/layer-3.1.1/theme/default/layer.css
delete mode 100644 hotgo-server/resource/public/plugin/layer-3.1.1/theme/default/loading-0.gif
delete mode 100644 hotgo-server/resource/public/plugin/layer-3.1.1/theme/default/loading-1.gif
delete mode 100644 hotgo-server/resource/public/plugin/layer-3.1.1/theme/default/loading-2.gif
delete mode 100644 hotgo-server/resource/public/resource/image/cover.png
delete mode 100644 hotgo-server/resource/public/resource/image/favicon.ico
delete mode 100644 hotgo-server/resource/public/resource/image/gf.ico
delete mode 100644 hotgo-server/router/admin.go
delete mode 100644 hotgo-server/router/api.go
delete mode 100644 hotgo-server/runtime/log/exception/.gitignore
delete mode 100644 hotgo-server/runtime/log/logger/.gitignore
delete mode 100644 hotgo-server/runtime/log/queue/.gitignore
delete mode 100644 hotgo-server/runtime/log/server/.gitignore
delete mode 100644 hotgo-server/runtime/log/server/access/.gitignore
delete mode 100644 hotgo-server/runtime/log/server/error/.gitignore
delete mode 100644 hotgo-server/storage/hotgo.sql
delete mode 100644 hotgo-server/storage/ip/qqwry-utf8.dat
delete mode 100644 hotgo-uniapp/.gitignore
delete mode 100644 hotgo-uniapp/.vscode/settings.json
delete mode 100644 hotgo-uniapp/App.vue
delete mode 100644 hotgo-uniapp/LICENSE
delete mode 100644 hotgo-uniapp/README.md
delete mode 100644 hotgo-uniapp/common/base64.js
delete mode 100644 hotgo-uniapp/common/config.js
delete mode 100644 hotgo-uniapp/common/http.api.js
delete mode 100644 hotgo-uniapp/common/http.interceptor.js
delete mode 100644 hotgo-uniapp/common/locales/en.js
delete mode 100644 hotgo-uniapp/common/locales/zh_CN.js
delete mode 100644 hotgo-uniapp/common/spark-md5.js
delete mode 100644 hotgo-uniapp/common/vue-i18n.min.js
delete mode 100644 hotgo-uniapp/components/js-checkbox/js-checkbox.vue
delete mode 100644 hotgo-uniapp/components/js-lang/js-lang.vue
delete mode 100644 hotgo-uniapp/components/js-radio/js-radio.vue
delete mode 100644 hotgo-uniapp/components/js-select/js-select.vue
delete mode 100644 hotgo-uniapp/components/js-uploadfile/js-uploadfile.vue
delete mode 100644 hotgo-uniapp/h5.html
delete mode 100644 hotgo-uniapp/main.js
delete mode 100644 hotgo-uniapp/manifest.json
delete mode 100644 hotgo-uniapp/package-lock.json
delete mode 100644 hotgo-uniapp/package.json
delete mode 100644 hotgo-uniapp/pages.json
delete mode 100644 hotgo-uniapp/pages/common/jeesite.scss
delete mode 100644 hotgo-uniapp/pages/common/webview.vue
delete mode 100644 hotgo-uniapp/pages/sys/home/index.scss
delete mode 100644 hotgo-uniapp/pages/sys/home/index.vue
delete mode 100644 hotgo-uniapp/pages/sys/login/forget.vue
delete mode 100644 hotgo-uniapp/pages/sys/login/index.scss
delete mode 100644 hotgo-uniapp/pages/sys/login/index.vue
delete mode 100644 hotgo-uniapp/pages/sys/login/reg.vue
delete mode 100644 hotgo-uniapp/pages/sys/msg/form.vue
delete mode 100644 hotgo-uniapp/pages/sys/msg/index.vue
delete mode 100644 hotgo-uniapp/pages/sys/user/about.vue
delete mode 100644 hotgo-uniapp/pages/sys/user/comment.vue
delete mode 100644 hotgo-uniapp/pages/sys/user/help.vue
delete mode 100644 hotgo-uniapp/pages/sys/user/index.scss
delete mode 100644 hotgo-uniapp/pages/sys/user/index.vue
delete mode 100644 hotgo-uniapp/pages/sys/user/info.vue
delete mode 100644 hotgo-uniapp/pages/sys/user/pwd.vue
delete mode 100644 hotgo-uniapp/pages/sys/user/setting.vue
delete mode 100644 hotgo-uniapp/pages/testData/form.vue
delete mode 100644 hotgo-uniapp/pages/testData/index.vue
delete mode 100644 hotgo-uniapp/static/common/img/iPhoneX.png
delete mode 100644 hotgo-uniapp/static/common/js/touch-emulator.js
delete mode 100644 hotgo-uniapp/static/index.html
delete mode 100644 hotgo-uniapp/static/jeesite/banner/1.svg
delete mode 100644 hotgo-uniapp/static/jeesite/banner/2.svg
delete mode 100644 hotgo-uniapp/static/jeesite/banner/3.svg
delete mode 100644 hotgo-uniapp/static/jeesite/favicon.png
delete mode 100644 hotgo-uniapp/static/jeesite/login/eye_close.png
delete mode 100644 hotgo-uniapp/static/jeesite/login/eye_open.png
delete mode 100644 hotgo-uniapp/static/jeesite/logo200.png
delete mode 100644 hotgo-uniapp/static/jeesite/tabbar/home_1.png
delete mode 100644 hotgo-uniapp/static/jeesite/tabbar/home_2.png
delete mode 100644 hotgo-uniapp/static/jeesite/tabbar/msg_1.png
delete mode 100644 hotgo-uniapp/static/jeesite/tabbar/msg_2.png
delete mode 100644 hotgo-uniapp/static/jeesite/tabbar/my_1.png
delete mode 100644 hotgo-uniapp/static/jeesite/tabbar/my_2.png
delete mode 100644 hotgo-uniapp/static/uview/common/favicon.ico
delete mode 100644 hotgo-uniapp/static/uview/common/logo.png
delete mode 100644 hotgo-uniapp/static/uview/example/component.png
delete mode 100644 hotgo-uniapp/static/uview/example/component_select.png
delete mode 100644 hotgo-uniapp/static/uview/example/js.png
delete mode 100644 hotgo-uniapp/static/uview/example/js_bak.png
delete mode 100644 hotgo-uniapp/static/uview/example/js_select.png
delete mode 100644 hotgo-uniapp/static/uview/example/js_select_bak.png
delete mode 100644 hotgo-uniapp/static/uview/example/min_button.png
delete mode 100644 hotgo-uniapp/static/uview/example/min_button_select.png
delete mode 100644 hotgo-uniapp/static/uview/example/template.png
delete mode 100644 hotgo-uniapp/static/uview/example/template_select.png
delete mode 100644 hotgo-uniapp/store/$u.mixin.js
delete mode 100644 hotgo-uniapp/store/index.js
delete mode 100644 hotgo-uniapp/uni.scss
delete mode 100644 hotgo-uniapp/unpackage/res/icons/1024x1024.png
delete mode 100644 hotgo-uniapp/unpackage/res/icons/120x120.png
delete mode 100644 hotgo-uniapp/unpackage/res/icons/144x144.png
delete mode 100644 hotgo-uniapp/unpackage/res/icons/152x152.png
delete mode 100644 hotgo-uniapp/unpackage/res/icons/167x167.png
delete mode 100644 hotgo-uniapp/unpackage/res/icons/180x180.png
delete mode 100644 hotgo-uniapp/unpackage/res/icons/192x192.png
delete mode 100644 hotgo-uniapp/unpackage/res/icons/20x20.png
delete mode 100644 hotgo-uniapp/unpackage/res/icons/29x29.png
delete mode 100644 hotgo-uniapp/unpackage/res/icons/40x40.png
delete mode 100644 hotgo-uniapp/unpackage/res/icons/58x58.png
delete mode 100644 hotgo-uniapp/unpackage/res/icons/60x60.png
delete mode 100644 hotgo-uniapp/unpackage/res/icons/72x72.png
delete mode 100644 hotgo-uniapp/unpackage/res/icons/76x76.png
delete mode 100644 hotgo-uniapp/unpackage/res/icons/80x80.png
delete mode 100644 hotgo-uniapp/unpackage/res/icons/87x87.png
delete mode 100644 hotgo-uniapp/unpackage/res/icons/96x96.png
delete mode 100644 hotgo-uniapp/uview-ui/LICENSE
delete mode 100644 hotgo-uniapp/uview-ui/README.md
delete mode 100644 hotgo-uniapp/uview-ui/components/u-action-sheet/u-action-sheet.vue
delete mode 100644 hotgo-uniapp/uview-ui/components/u-alert-tips/u-alert-tips.vue
delete mode 100644 hotgo-uniapp/uview-ui/components/u-avatar-cropper/u-avatar-cropper.vue
delete mode 100644 hotgo-uniapp/uview-ui/components/u-avatar-cropper/weCropper.js
delete mode 100644 hotgo-uniapp/uview-ui/components/u-avatar/u-avatar.vue
delete mode 100644 hotgo-uniapp/uview-ui/components/u-back-top/u-back-top.vue
delete mode 100644 hotgo-uniapp/uview-ui/components/u-badge/u-badge.vue
delete mode 100644 hotgo-uniapp/uview-ui/components/u-button/u-button.vue
delete mode 100644 hotgo-uniapp/uview-ui/components/u-calendar/u-calendar.vue
delete mode 100644 hotgo-uniapp/uview-ui/components/u-car-keyboard/u-car-keyboard.vue
delete mode 100644 hotgo-uniapp/uview-ui/components/u-card/u-card.vue
delete mode 100644 hotgo-uniapp/uview-ui/components/u-cell-group/u-cell-group.vue
delete mode 100644 hotgo-uniapp/uview-ui/components/u-cell-item/u-cell-item.vue
delete mode 100644 hotgo-uniapp/uview-ui/components/u-checkbox-group/u-checkbox-group.vue
delete mode 100644 hotgo-uniapp/uview-ui/components/u-checkbox/u-checkbox.vue
delete mode 100644 hotgo-uniapp/uview-ui/components/u-circle-progress/u-circle-progress.vue
delete mode 100644 hotgo-uniapp/uview-ui/components/u-circle-progress/u-line-progress/u-line-progress.vue
delete mode 100644 hotgo-uniapp/uview-ui/components/u-col/u-col.vue
delete mode 100644 hotgo-uniapp/uview-ui/components/u-collapse-item/u-collapse-item.vue
delete mode 100644 hotgo-uniapp/uview-ui/components/u-collapse/u-collapse.vue
delete mode 100644 hotgo-uniapp/uview-ui/components/u-column-notice/u-column-notice.vue
delete mode 100644 hotgo-uniapp/uview-ui/components/u-count-down/u-count-down.vue
delete mode 100644 hotgo-uniapp/uview-ui/components/u-count-to/u-count-to.vue
delete mode 100644 hotgo-uniapp/uview-ui/components/u-divider/u-divider.vue
delete mode 100644 hotgo-uniapp/uview-ui/components/u-dropdown-item/u-dropdown-item.vue
delete mode 100644 hotgo-uniapp/uview-ui/components/u-dropdown/u-dropdown.vue
delete mode 100644 hotgo-uniapp/uview-ui/components/u-empty/u-empty.vue
delete mode 100644 hotgo-uniapp/uview-ui/components/u-field/u-field.vue
delete mode 100644 hotgo-uniapp/uview-ui/components/u-form-item/u-form-item.vue
delete mode 100644 hotgo-uniapp/uview-ui/components/u-form/u-form.vue
delete mode 100644 hotgo-uniapp/uview-ui/components/u-full-screen/u-full-screen.vue
delete mode 100644 hotgo-uniapp/uview-ui/components/u-gap/u-gap.vue
delete mode 100644 hotgo-uniapp/uview-ui/components/u-grid-item/u-grid-item.vue
delete mode 100644 hotgo-uniapp/uview-ui/components/u-grid/u-grid.vue
delete mode 100644 hotgo-uniapp/uview-ui/components/u-icon/u-icon.vue
delete mode 100644 hotgo-uniapp/uview-ui/components/u-image/u-image.vue
delete mode 100644 hotgo-uniapp/uview-ui/components/u-index-anchor/u-index-anchor.vue
delete mode 100644 hotgo-uniapp/uview-ui/components/u-index-list/u-index-list.vue
delete mode 100644 hotgo-uniapp/uview-ui/components/u-input/u-input.vue
delete mode 100644 hotgo-uniapp/uview-ui/components/u-keyboard/u-keyboard.vue
delete mode 100644 hotgo-uniapp/uview-ui/components/u-lazy-load/u-lazy-load.vue
delete mode 100644 hotgo-uniapp/uview-ui/components/u-line-progress/u-line-progress.vue
delete mode 100644 hotgo-uniapp/uview-ui/components/u-line/u-line.vue
delete mode 100644 hotgo-uniapp/uview-ui/components/u-link/u-link.vue
delete mode 100644 hotgo-uniapp/uview-ui/components/u-loading-page/u-loading-page.vue
delete mode 100644 hotgo-uniapp/uview-ui/components/u-loading/u-loading.vue
delete mode 100644 hotgo-uniapp/uview-ui/components/u-loadmore/u-loadmore.vue
delete mode 100644 hotgo-uniapp/uview-ui/components/u-mask/u-mask.vue
delete mode 100644 hotgo-uniapp/uview-ui/components/u-message-input/u-message-input.vue
delete mode 100644 hotgo-uniapp/uview-ui/components/u-modal/u-modal.vue
delete mode 100644 hotgo-uniapp/uview-ui/components/u-navbar/u-navbar.vue
delete mode 100644 hotgo-uniapp/uview-ui/components/u-no-network/u-no-network.vue
delete mode 100644 hotgo-uniapp/uview-ui/components/u-notice-bar/u-notice-bar.vue
delete mode 100644 hotgo-uniapp/uview-ui/components/u-number-box/u-number-box.vue
delete mode 100644 hotgo-uniapp/uview-ui/components/u-number-keyboard/u-number-keyboard.vue
delete mode 100644 hotgo-uniapp/uview-ui/components/u-parse/libs/CssHandler.js
delete mode 100644 hotgo-uniapp/uview-ui/components/u-parse/libs/MpHtmlParser.js
delete mode 100644 hotgo-uniapp/uview-ui/components/u-parse/libs/config.js
delete mode 100644 hotgo-uniapp/uview-ui/components/u-parse/libs/handler.wxs
delete mode 100644 hotgo-uniapp/uview-ui/components/u-parse/libs/trees.vue
delete mode 100644 hotgo-uniapp/uview-ui/components/u-parse/u-parse.vue
delete mode 100644 hotgo-uniapp/uview-ui/components/u-picker/u-picker.vue
delete mode 100644 hotgo-uniapp/uview-ui/components/u-popup/u-popup.vue
delete mode 100644 hotgo-uniapp/uview-ui/components/u-radio-group/u-radio-group.vue
delete mode 100644 hotgo-uniapp/uview-ui/components/u-radio/u-radio.vue
delete mode 100644 hotgo-uniapp/uview-ui/components/u-rate/u-rate.vue
delete mode 100644 hotgo-uniapp/uview-ui/components/u-read-more/u-read-more.vue
delete mode 100644 hotgo-uniapp/uview-ui/components/u-row-notice/u-row-notice.vue
delete mode 100644 hotgo-uniapp/uview-ui/components/u-row/u-row.vue
delete mode 100644 hotgo-uniapp/uview-ui/components/u-search/u-search.vue
delete mode 100644 hotgo-uniapp/uview-ui/components/u-section/u-section.vue
delete mode 100644 hotgo-uniapp/uview-ui/components/u-select/u-select.vue
delete mode 100644 hotgo-uniapp/uview-ui/components/u-skeleton/u-skeleton.vue
delete mode 100644 hotgo-uniapp/uview-ui/components/u-slider/u-slider.vue
delete mode 100644 hotgo-uniapp/uview-ui/components/u-steps/u-steps.vue
delete mode 100644 hotgo-uniapp/uview-ui/components/u-sticky/u-sticky.vue
delete mode 100644 hotgo-uniapp/uview-ui/components/u-subsection/u-subsection.vue
delete mode 100644 hotgo-uniapp/uview-ui/components/u-swipe-action/u-swipe-action.vue
delete mode 100644 hotgo-uniapp/uview-ui/components/u-swiper/u-swiper.vue
delete mode 100644 hotgo-uniapp/uview-ui/components/u-switch/u-switch.vue
delete mode 100644 hotgo-uniapp/uview-ui/components/u-tabbar/u-tabbar.vue
delete mode 100644 hotgo-uniapp/uview-ui/components/u-table/u-table.vue
delete mode 100644 hotgo-uniapp/uview-ui/components/u-tabs-swiper/u-tabs-swiper.vue
delete mode 100644 hotgo-uniapp/uview-ui/components/u-tabs/u-tabs.vue
delete mode 100644 hotgo-uniapp/uview-ui/components/u-tag/u-tag.vue
delete mode 100644 hotgo-uniapp/uview-ui/components/u-td/u-td.vue
delete mode 100644 hotgo-uniapp/uview-ui/components/u-th/u-th.vue
delete mode 100644 hotgo-uniapp/uview-ui/components/u-time-line-item/u-time-line-item.vue
delete mode 100644 hotgo-uniapp/uview-ui/components/u-time-line/u-time-line.vue
delete mode 100644 hotgo-uniapp/uview-ui/components/u-toast/u-toast.vue
delete mode 100644 hotgo-uniapp/uview-ui/components/u-top-tips/u-top-tips.vue
delete mode 100644 hotgo-uniapp/uview-ui/components/u-tr/u-tr.vue
delete mode 100644 hotgo-uniapp/uview-ui/components/u-upload/u-upload.vue
delete mode 100644 hotgo-uniapp/uview-ui/components/u-verification-code/u-verification-code.vue
delete mode 100644 hotgo-uniapp/uview-ui/components/u-waterfall/u-waterfall.vue
delete mode 100644 hotgo-uniapp/uview-ui/iconfont.css
delete mode 100644 hotgo-uniapp/uview-ui/index.js
delete mode 100644 hotgo-uniapp/uview-ui/index.scss
delete mode 100644 hotgo-uniapp/uview-ui/libs/config/config.js
delete mode 100644 hotgo-uniapp/uview-ui/libs/config/zIndex.js
delete mode 100644 hotgo-uniapp/uview-ui/libs/css/color.scss
delete mode 100644 hotgo-uniapp/uview-ui/libs/css/common.scss
delete mode 100644 hotgo-uniapp/uview-ui/libs/css/style.components.scss
delete mode 100644 hotgo-uniapp/uview-ui/libs/css/style.h5.scss
delete mode 100644 hotgo-uniapp/uview-ui/libs/css/style.mp.scss
delete mode 100644 hotgo-uniapp/uview-ui/libs/css/style.nvue.scss
delete mode 100644 hotgo-uniapp/uview-ui/libs/css/style.vue.scss
delete mode 100644 hotgo-uniapp/uview-ui/libs/function/$parent.js
delete mode 100644 hotgo-uniapp/uview-ui/libs/function/addUnit.js
delete mode 100644 hotgo-uniapp/uview-ui/libs/function/bem.js
delete mode 100644 hotgo-uniapp/uview-ui/libs/function/color.js
delete mode 100644 hotgo-uniapp/uview-ui/libs/function/colorGradient.js
delete mode 100644 hotgo-uniapp/uview-ui/libs/function/date.js
delete mode 100644 hotgo-uniapp/uview-ui/libs/function/debounce.js
delete mode 100644 hotgo-uniapp/uview-ui/libs/function/deepClone.js
delete mode 100644 hotgo-uniapp/uview-ui/libs/function/deepMerge.js
delete mode 100644 hotgo-uniapp/uview-ui/libs/function/getParent.js
delete mode 100644 hotgo-uniapp/uview-ui/libs/function/guid.js
delete mode 100644 hotgo-uniapp/uview-ui/libs/function/md5.js
delete mode 100644 hotgo-uniapp/uview-ui/libs/function/queryParams.js
delete mode 100644 hotgo-uniapp/uview-ui/libs/function/random.js
delete mode 100644 hotgo-uniapp/uview-ui/libs/function/randomArray.js
delete mode 100644 hotgo-uniapp/uview-ui/libs/function/route.js
delete mode 100644 hotgo-uniapp/uview-ui/libs/function/sys.js
delete mode 100644 hotgo-uniapp/uview-ui/libs/function/test.js
delete mode 100644 hotgo-uniapp/uview-ui/libs/function/throttle.js
delete mode 100644 hotgo-uniapp/uview-ui/libs/function/timeFormat.js
delete mode 100644 hotgo-uniapp/uview-ui/libs/function/timeFrom.js
delete mode 100644 hotgo-uniapp/uview-ui/libs/function/toast.js
delete mode 100644 hotgo-uniapp/uview-ui/libs/function/trim.js
delete mode 100644 hotgo-uniapp/uview-ui/libs/function/type2icon.js
delete mode 100644 hotgo-uniapp/uview-ui/libs/mixin/mixin.js
delete mode 100644 hotgo-uniapp/uview-ui/libs/mixin/mpShare.js
delete mode 100644 hotgo-uniapp/uview-ui/libs/request/index.js
delete mode 100644 hotgo-uniapp/uview-ui/libs/store/index.js
delete mode 100644 hotgo-uniapp/uview-ui/libs/util/area.js
delete mode 100644 hotgo-uniapp/uview-ui/libs/util/async-validator.js
delete mode 100644 hotgo-uniapp/uview-ui/libs/util/city.js
delete mode 100644 hotgo-uniapp/uview-ui/libs/util/emitter.js
delete mode 100644 hotgo-uniapp/uview-ui/libs/util/province.js
delete mode 100644 hotgo-uniapp/uview-ui/package.json
delete mode 100644 hotgo-uniapp/uview-ui/theme.scss
delete mode 100644 hotgo-uniapp/vue.config.js
delete mode 100644 hotgo-web/.browserslistrc
delete mode 100644 hotgo-web/.editorconfig
delete mode 100644 hotgo-web/.env
delete mode 100644 hotgo-web/.env.development
delete mode 100644 hotgo-web/.env.preview
delete mode 100644 hotgo-web/.eslintrc.js
delete mode 100644 hotgo-web/.eslintrc.json
delete mode 100644 hotgo-web/.gitattributes
delete mode 100644 hotgo-web/.prettierrc
delete mode 100644 hotgo-web/.travis.yml
delete mode 100644 hotgo-web/LICENSE
delete mode 100644 hotgo-web/README.md
delete mode 100644 hotgo-web/babel.config.js
delete mode 100644 hotgo-web/bin/build.bat
delete mode 100644 hotgo-web/bin/package.bat
delete mode 100644 hotgo-web/bin/run-web.bat
delete mode 100644 hotgo-web/config/plugin.config.js
delete mode 100644 hotgo-web/config/themePluginConfig.js
delete mode 100644 hotgo-web/jest.config.js
delete mode 100644 hotgo-web/jsconfig.json
delete mode 100644 hotgo-web/package.json
delete mode 100644 hotgo-web/postcss.config.js
delete mode 100644 hotgo-web/public/index.html
delete mode 100644 hotgo-web/public/logo.png
delete mode 100644 hotgo-web/src/App.vue
delete mode 100644 hotgo-web/src/api/login.js
delete mode 100644 hotgo-web/src/api/manage.js
delete mode 100644 hotgo-web/src/api/menu.js
delete mode 100644 hotgo-web/src/api/monitor/cache.js
delete mode 100644 hotgo-web/src/api/monitor/job.js
delete mode 100644 hotgo-web/src/api/monitor/jobLog.js
delete mode 100644 hotgo-web/src/api/monitor/loginLog.js
delete mode 100644 hotgo-web/src/api/monitor/online.js
delete mode 100644 hotgo-web/src/api/monitor/operlog.js
delete mode 100644 hotgo-web/src/api/monitor/server.js
delete mode 100644 hotgo-web/src/api/monitor/sysDataPermissionsDefRule.js
delete mode 100644 hotgo-web/src/api/monitor/sysDataPermissionsMethod.js
delete mode 100644 hotgo-web/src/api/monitor/sysDataPermissionsRule.js
delete mode 100644 hotgo-web/src/api/system/config.js
delete mode 100644 hotgo-web/src/api/system/dept.js
delete mode 100644 hotgo-web/src/api/system/dict/data.js
delete mode 100644 hotgo-web/src/api/system/dict/type.js
delete mode 100644 hotgo-web/src/api/system/menu.js
delete mode 100644 hotgo-web/src/api/system/notice.js
delete mode 100644 hotgo-web/src/api/system/post.js
delete mode 100644 hotgo-web/src/api/system/role.js
delete mode 100644 hotgo-web/src/api/system/sysNoticeUserRead.js
delete mode 100644 hotgo-web/src/api/system/sysPortalConfig.js
delete mode 100644 hotgo-web/src/api/system/sysPortlet.js
delete mode 100644 hotgo-web/src/api/system/sysTableConfig.js
delete mode 100644 hotgo-web/src/api/system/sysThemeConfig.js
delete mode 100644 hotgo-web/src/api/system/upload.js
delete mode 100644 hotgo-web/src/api/system/user.js
delete mode 100644 hotgo-web/src/api/tool/gen.js
delete mode 100644 hotgo-web/src/api/tool/genConfigTemplate.js
delete mode 100644 hotgo-web/src/assets/background.svg
delete mode 100644 hotgo-web/src/assets/icons/Alipay.svg
delete mode 100644 hotgo-web/src/assets/icons/DragColumn.svg
delete mode 100644 hotgo-web/src/assets/icons/QRcode.svg
delete mode 100644 hotgo-web/src/assets/icons/Sina.svg
delete mode 100644 hotgo-web/src/assets/icons/WeChat.svg
delete mode 100644 hotgo-web/src/assets/icons/bug.svg
delete mode 100644 hotgo-web/src/assets/icons/build.svg
delete mode 100644 hotgo-web/src/assets/icons/button.svg
delete mode 100644 hotgo-web/src/assets/icons/bxAnalyse.svg
delete mode 100644 hotgo-web/src/assets/icons/cascader.svg
delete mode 100644 hotgo-web/src/assets/icons/chart.svg
delete mode 100644 hotgo-web/src/assets/icons/checkbox.svg
delete mode 100644 hotgo-web/src/assets/icons/clipboard.svg
delete mode 100644 hotgo-web/src/assets/icons/codeNew.svg
delete mode 100644 hotgo-web/src/assets/icons/color.svg
delete mode 100644 hotgo-web/src/assets/icons/company.svg
delete mode 100644 hotgo-web/src/assets/icons/companyFill.svg
delete mode 100644 hotgo-web/src/assets/icons/component.svg
delete mode 100644 hotgo-web/src/assets/icons/compress.svg
delete mode 100644 hotgo-web/src/assets/icons/connections.svg
delete mode 100644 hotgo-web/src/assets/icons/dashboardNew.svg
delete mode 100644 hotgo-web/src/assets/icons/date.svg
delete mode 100644 hotgo-web/src/assets/icons/dateRange.svg
delete mode 100644 hotgo-web/src/assets/icons/dict.svg
delete mode 100644 hotgo-web/src/assets/icons/dingtalk.svg
delete mode 100644 hotgo-web/src/assets/icons/documentation.svg
delete mode 100644 hotgo-web/src/assets/icons/download.svg
delete mode 100644 hotgo-web/src/assets/icons/dragImg.svg
delete mode 100644 hotgo-web/src/assets/icons/dragtable.svg
delete mode 100644 hotgo-web/src/assets/icons/druid.svg
delete mode 100644 hotgo-web/src/assets/icons/edit.svg
delete mode 100644 hotgo-web/src/assets/icons/expend.svg
delete mode 100644 hotgo-web/src/assets/icons/eyeOpen.svg
delete mode 100644 hotgo-web/src/assets/icons/github.svg
delete mode 100644 hotgo-web/src/assets/icons/guide.svg
delete mode 100644 hotgo-web/src/assets/icons/input.svg
delete mode 100644 hotgo-web/src/assets/icons/job.svg
delete mode 100644 hotgo-web/src/assets/icons/log.svg
delete mode 100644 hotgo-web/src/assets/icons/loginLog.svg
delete mode 100644 hotgo-web/src/assets/icons/message.svg
delete mode 100644 hotgo-web/src/assets/icons/monitor.svg
delete mode 100644 hotgo-web/src/assets/icons/number.svg
delete mode 100644 hotgo-web/src/assets/icons/online.svg
delete mode 100644 hotgo-web/src/assets/icons/password.svg
delete mode 100644 hotgo-web/src/assets/icons/pdf.svg
delete mode 100644 hotgo-web/src/assets/icons/peoples.svg
delete mode 100644 hotgo-web/src/assets/icons/phone.svg
delete mode 100644 hotgo-web/src/assets/icons/post.svg
delete mode 100644 hotgo-web/src/assets/icons/question.svg
delete mode 100644 hotgo-web/src/assets/icons/radio.svg
delete mode 100644 hotgo-web/src/assets/icons/rate.svg
delete mode 100644 hotgo-web/src/assets/icons/redis.svg
delete mode 100644 hotgo-web/src/assets/icons/row.svg
delete mode 100644 hotgo-web/src/assets/icons/select.svg
delete mode 100644 hotgo-web/src/assets/icons/server.svg
delete mode 100644 hotgo-web/src/assets/icons/swagger.svg
delete mode 100644 hotgo-web/src/assets/icons/switch.svg
delete mode 100644 hotgo-web/src/assets/icons/system.svg
delete mode 100644 hotgo-web/src/assets/icons/textarea.svg
delete mode 100644 hotgo-web/src/assets/icons/time.svg
delete mode 100644 hotgo-web/src/assets/icons/timeRange.svg
delete mode 100644 hotgo-web/src/assets/icons/tool.svg
delete mode 100644 hotgo-web/src/assets/icons/tree.svg
delete mode 100644 hotgo-web/src/assets/icons/treeTable.svg
delete mode 100644 hotgo-web/src/assets/icons/upload.svg
delete mode 100644 hotgo-web/src/assets/icons/users.svg
delete mode 100644 hotgo-web/src/assets/icons/validCode.svg
delete mode 100644 hotgo-web/src/assets/images/login-background.jpg
delete mode 100644 hotgo-web/src/assets/images/profile.jpg
delete mode 100644 hotgo-web/src/assets/images/upload/excel.svg
delete mode 100644 hotgo-web/src/assets/images/upload/gif.svg
delete mode 100644 hotgo-web/src/assets/images/upload/jpg.svg
delete mode 100644 hotgo-web/src/assets/images/upload/other.svg
delete mode 100644 hotgo-web/src/assets/images/upload/pdf.svg
delete mode 100644 hotgo-web/src/assets/images/upload/png.svg
delete mode 100644 hotgo-web/src/assets/images/upload/ppt.svg
delete mode 100644 hotgo-web/src/assets/images/upload/text.svg
delete mode 100644 hotgo-web/src/assets/images/upload/word.svg
delete mode 100644 hotgo-web/src/assets/images/upload/zip.svg
delete mode 100644 hotgo-web/src/assets/login-bg.png
delete mode 100644 hotgo-web/src/assets/logo.png
delete mode 100644 hotgo-web/src/assets/logo.svg
delete mode 100644 hotgo-web/src/assets/projects/antdv.png
delete mode 100644 hotgo-web/src/assets/projects/ruoyi.png
delete mode 100644 hotgo-web/src/assets/styles/antv-theme.less
delete mode 100644 hotgo-web/src/assets/styles/default.less
delete mode 100644 hotgo-web/src/assets/wrapper.jpg
delete mode 100644 hotgo-web/src/components/ArticleListContent/ArticleListContent.vue
delete mode 100644 hotgo-web/src/components/ArticleListContent/index.js
delete mode 100644 hotgo-web/src/components/AvatarList/Item.jsx
delete mode 100644 hotgo-web/src/components/AvatarList/List.jsx
delete mode 100644 hotgo-web/src/components/AvatarList/index.js
delete mode 100644 hotgo-web/src/components/AvatarList/index.less
delete mode 100644 hotgo-web/src/components/AvatarList/index.md
delete mode 100644 hotgo-web/src/components/Dialog.js
delete mode 100644 hotgo-web/src/components/Ellipsis/Ellipsis.vue
delete mode 100644 hotgo-web/src/components/Ellipsis/index.js
delete mode 100644 hotgo-web/src/components/Ellipsis/index.md
delete mode 100644 hotgo-web/src/components/FooterToolbar/FooterToolBar.vue
delete mode 100644 hotgo-web/src/components/FooterToolbar/index.js
delete mode 100644 hotgo-web/src/components/FooterToolbar/index.less
delete mode 100644 hotgo-web/src/components/FooterToolbar/index.md
delete mode 100644 hotgo-web/src/components/GlobalFooter/index.vue
delete mode 100644 hotgo-web/src/components/GlobalHeader/AvatarDropdown.vue
delete mode 100644 hotgo-web/src/components/GlobalHeader/PlatformVersion.vue
delete mode 100644 hotgo-web/src/components/GlobalHeader/RightContent.vue
delete mode 100644 hotgo-web/src/components/GridContent/index.js
delete mode 100644 hotgo-web/src/components/GridContent/index.less
delete mode 100644 hotgo-web/src/components/IconSelector/IconDetail.vue
delete mode 100644 hotgo-web/src/components/IconSelector/IconSelector.vue
delete mode 100644 hotgo-web/src/components/IconSelector/README.md
delete mode 100644 hotgo-web/src/components/IconSelector/icons.js
delete mode 100644 hotgo-web/src/components/IconSelector/index.js
delete mode 100644 hotgo-web/src/components/MultiTab/MultiTab.vue
delete mode 100644 hotgo-web/src/components/MultiTab/events.js
delete mode 100644 hotgo-web/src/components/MultiTab/index.js
delete mode 100644 hotgo-web/src/components/MultiTab/index.less
delete mode 100644 hotgo-web/src/components/NProgress/nprogress.less
delete mode 100644 hotgo-web/src/components/NoticeIcon/NoticeIcon.vue
delete mode 100644 hotgo-web/src/components/NoticeIcon/index.js
delete mode 100644 hotgo-web/src/components/NumberInfo/NumberInfo.vue
delete mode 100644 hotgo-web/src/components/NumberInfo/index.js
delete mode 100644 hotgo-web/src/components/NumberInfo/index.less
delete mode 100644 hotgo-web/src/components/NumberInfo/index.md
delete mode 100644 hotgo-web/src/components/Other/CarbonAds.vue
delete mode 100644 hotgo-web/src/components/PageLoading/index.jsx
delete mode 100644 hotgo-web/src/components/ProLayout/BasicLayout.jsx
delete mode 100644 hotgo-web/src/components/ProLayout/BasicLayout.less
delete mode 100644 hotgo-web/src/components/ProLayout/BlockLayout.jsx
delete mode 100644 hotgo-web/src/components/ProLayout/Header.jsx
delete mode 100644 hotgo-web/src/components/ProLayout/Header.less
delete mode 100644 hotgo-web/src/components/ProLayout/PageView.jsx
delete mode 100644 hotgo-web/src/components/ProLayout/WrapContent.jsx
delete mode 100644 hotgo-web/src/components/ProLayout/components/ConfigProvider/index.js
delete mode 100644 hotgo-web/src/components/ProLayout/components/DocumentTitle/SideEffect/index.js
delete mode 100644 hotgo-web/src/components/ProLayout/components/DocumentTitle/index.js
delete mode 100644 hotgo-web/src/components/ProLayout/components/DocumentTitle/util.js
delete mode 100644 hotgo-web/src/components/ProLayout/components/Fragment.jsx
delete mode 100644 hotgo-web/src/components/ProLayout/components/GlobalFooter/index.jsx
delete mode 100644 hotgo-web/src/components/ProLayout/components/GlobalFooter/index.less
delete mode 100644 hotgo-web/src/components/ProLayout/components/GlobalHeader/index.jsx
delete mode 100644 hotgo-web/src/components/ProLayout/components/GlobalHeader/index.less
delete mode 100644 hotgo-web/src/components/ProLayout/components/GridContent/index.jsx
delete mode 100644 hotgo-web/src/components/ProLayout/components/GridContent/index.less
delete mode 100644 hotgo-web/src/components/ProLayout/components/PageHeaderWrapper/index.jsx
delete mode 100644 hotgo-web/src/components/ProLayout/components/PageHeaderWrapper/index.less
delete mode 100644 hotgo-web/src/components/ProLayout/components/RouteMenu/BaseMenu.jsx
delete mode 100644 hotgo-web/src/components/ProLayout/components/RouteMenu/index.js
delete mode 100644 hotgo-web/src/components/ProLayout/components/SettingDrawer/BlockCheckbox.jsx
delete mode 100644 hotgo-web/src/components/ProLayout/components/SettingDrawer/LayoutChange.jsx
delete mode 100644 hotgo-web/src/components/ProLayout/components/SettingDrawer/ThemeColor.jsx
delete mode 100644 hotgo-web/src/components/ProLayout/components/SettingDrawer/ThemeColor.less
delete mode 100644 hotgo-web/src/components/ProLayout/components/SettingDrawer/index.jsx
delete mode 100644 hotgo-web/src/components/ProLayout/components/SettingDrawer/index.less
delete mode 100644 hotgo-web/src/components/ProLayout/components/SettingDrawer/index原始文件勿删.jsx
delete mode 100644 hotgo-web/src/components/ProLayout/components/SiderMenu/SiderMenu.jsx
delete mode 100644 hotgo-web/src/components/ProLayout/components/SiderMenu/index.jsx
delete mode 100644 hotgo-web/src/components/ProLayout/components/SiderMenu/index.less
delete mode 100644 hotgo-web/src/components/ProLayout/components/index.js
delete mode 100644 hotgo-web/src/components/ProLayout/index.js
delete mode 100644 hotgo-web/src/components/ProLayout/utils/dynamicTheme.js
delete mode 100644 hotgo-web/src/components/ProLayout/utils/request.js
delete mode 100644 hotgo-web/src/components/ProLayout/utils/util.js
delete mode 100644 hotgo-web/src/components/Search/GlobalSearch.jsx
delete mode 100644 hotgo-web/src/components/Search/index.less
delete mode 100644 hotgo-web/src/components/SelectLang/index.jsx
delete mode 100644 hotgo-web/src/components/SelectLang/index.less
delete mode 100644 hotgo-web/src/components/SettingDrawer/SettingDrawer.vue
delete mode 100644 hotgo-web/src/components/SettingDrawer/SettingItem.vue
delete mode 100644 hotgo-web/src/components/SettingDrawer/index.js
delete mode 100644 hotgo-web/src/components/SettingDrawer/settingConfig.js
delete mode 100644 hotgo-web/src/components/SettingDrawer/themeColor.js
delete mode 100644 hotgo-web/src/components/StandardFormRow/StandardFormRow.vue
delete mode 100644 hotgo-web/src/components/StandardFormRow/index.js
delete mode 100644 hotgo-web/src/components/TagSelect/TagSelectOption.jsx
delete mode 100644 hotgo-web/src/components/TagSelect/index.jsx
delete mode 100644 hotgo-web/src/components/TextArea/index.jsx
delete mode 100644 hotgo-web/src/components/TextArea/style.less
delete mode 100644 hotgo-web/src/components/Tree/Tree.jsx
delete mode 100644 hotgo-web/src/components/Trend/Trend.vue
delete mode 100644 hotgo-web/src/components/Trend/index.js
delete mode 100644 hotgo-web/src/components/Trend/index.less
delete mode 100644 hotgo-web/src/components/Trend/index.md
delete mode 100644 hotgo-web/src/components/_util/util.js
delete mode 100644 hotgo-web/src/components/index.js
delete mode 100644 hotgo-web/src/components/index.less
delete mode 100644 hotgo-web/src/components/pt/asyncComponent/Error.vue
delete mode 100644 hotgo-web/src/components/pt/asyncComponent/Loading.vue
delete mode 100644 hotgo-web/src/components/pt/asyncComponent/index.vue
delete mode 100644 hotgo-web/src/components/pt/dialog/AntModal.vue
delete mode 100644 hotgo-web/src/components/pt/import/ImportExcel.vue
delete mode 100644 hotgo-web/src/components/pt/passwordStrength/index.vue
delete mode 100644 hotgo-web/src/components/pt/ptButtons/Delete.vue
delete mode 100644 hotgo-web/src/components/pt/ptButtons/index.js
delete mode 100644 hotgo-web/src/components/pt/selectDept/SelectDept.vue
delete mode 100644 hotgo-web/src/components/pt/selectUser/SelectUser.vue
delete mode 100644 hotgo-web/src/components/pt/split/Index.vue
delete mode 100644 hotgo-web/src/components/pt/switch/Index.vue
delete mode 100644 hotgo-web/src/components/pt/table/ActionColumns.vue
delete mode 100644 hotgo-web/src/components/pt/table/ActionSize.vue
delete mode 100644 hotgo-web/src/components/pt/table/AdvanceTable.vue
delete mode 100644 hotgo-web/src/components/pt/table/SearchArea.vue
delete mode 100644 hotgo-web/src/components/pt/table/index.js
delete mode 100644 hotgo-web/src/components/table/ActionColumns.vue
delete mode 100644 hotgo-web/src/components/table/ActionSize.vue
delete mode 100644 hotgo-web/src/components/table/AdvanceTable.vue
delete mode 100644 hotgo-web/src/components/table/SearchArea.vue
delete mode 100644 hotgo-web/src/components/table/index.js
delete mode 100644 hotgo-web/src/config/defaultSettings.js
delete mode 100644 hotgo-web/src/config/router.config.js
delete mode 100644 hotgo-web/src/core/bootstrap.js
delete mode 100644 hotgo-web/src/core/directives/action.js
delete mode 100644 hotgo-web/src/core/icons.js
delete mode 100644 hotgo-web/src/core/lazy_use.js
delete mode 100644 hotgo-web/src/core/permission/permission.js
delete mode 100644 hotgo-web/src/core/use.js
delete mode 100644 hotgo-web/src/directive/permission/hasPermi.js
delete mode 100644 hotgo-web/src/directive/permission/hasRole.js
delete mode 100644 hotgo-web/src/directive/permission/index.js
delete mode 100644 hotgo-web/src/global.less
delete mode 100644 hotgo-web/src/layouts/BasicLayout.less
delete mode 100644 hotgo-web/src/layouts/BasicLayout.vue
delete mode 100644 hotgo-web/src/layouts/BlankLayout.vue
delete mode 100644 hotgo-web/src/layouts/PageView.vue
delete mode 100644 hotgo-web/src/layouts/RouteView.vue
delete mode 100644 hotgo-web/src/layouts/UserLayout.vue
delete mode 100644 hotgo-web/src/layouts/index.js
delete mode 100644 hotgo-web/src/layouts/modules/tabs-view.vue
delete mode 100644 hotgo-web/src/locales/index.js
delete mode 100644 hotgo-web/src/locales/lang/en-US.js
delete mode 100644 hotgo-web/src/locales/lang/en-US/setting.js
delete mode 100644 hotgo-web/src/locales/lang/zh-CN.js
delete mode 100644 hotgo-web/src/locales/lang/zh-CN/setting.js
delete mode 100644 hotgo-web/src/main.js
delete mode 100644 hotgo-web/src/mock/index.js
delete mode 100644 hotgo-web/src/mock/services/user.js
delete mode 100644 hotgo-web/src/mock/util.js
delete mode 100644 hotgo-web/src/permission.js
delete mode 100644 hotgo-web/src/router/README.md
delete mode 100644 hotgo-web/src/router/generator-routers.js
delete mode 100644 hotgo-web/src/router/index.js
delete mode 100644 hotgo-web/src/store/app-mixin.js
delete mode 100644 hotgo-web/src/store/device-mixin.js
delete mode 100644 hotgo-web/src/store/getters.js
delete mode 100644 hotgo-web/src/store/i18n-mixin.js
delete mode 100644 hotgo-web/src/store/index.js
delete mode 100644 hotgo-web/src/store/modules/app.js
delete mode 100644 hotgo-web/src/store/modules/async-router.js
delete mode 100644 hotgo-web/src/store/modules/permission.js
delete mode 100644 hotgo-web/src/store/modules/user.js
delete mode 100644 hotgo-web/src/store/mutation-types.js
delete mode 100644 hotgo-web/src/utils/aidex.js
delete mode 100644 hotgo-web/src/utils/axios.js
delete mode 100644 hotgo-web/src/utils/domUtil.js
delete mode 100644 hotgo-web/src/utils/drag.js
delete mode 100644 hotgo-web/src/utils/errorCode.js
delete mode 100644 hotgo-web/src/utils/filter.js
delete mode 100644 hotgo-web/src/utils/highlight.js
delete mode 100644 hotgo-web/src/utils/pt/layout/baseMouldStyles.js
delete mode 100644 hotgo-web/src/utils/request.js
delete mode 100644 hotgo-web/src/utils/requireIcons.js
delete mode 100644 hotgo-web/src/utils/routeConvert.js
delete mode 100644 hotgo-web/src/utils/screenLog.js
delete mode 100644 hotgo-web/src/utils/util.js
delete mode 100644 hotgo-web/src/utils/utils.less
delete mode 100644 hotgo-web/src/utils/validate.js
delete mode 100644 hotgo-web/src/utils/zipdownload.js
delete mode 100644 hotgo-web/src/views/404.vue
delete mode 100644 hotgo-web/src/views/account/center/index.vue
delete mode 100644 hotgo-web/src/views/account/center/page/App.vue
delete mode 100644 hotgo-web/src/views/account/center/page/Article.vue
delete mode 100644 hotgo-web/src/views/account/center/page/Project.vue
delete mode 100644 hotgo-web/src/views/account/center/page/index.js
delete mode 100644 hotgo-web/src/views/account/settings/AvatarModal.vue
delete mode 100644 hotgo-web/src/views/account/settings/BaseSetting.vue
delete mode 100644 hotgo-web/src/views/account/settings/Security.vue
delete mode 100644 hotgo-web/src/views/account/settings/UpdataPass.vue
delete mode 100644 hotgo-web/src/views/account/settings/UpdatePassword.vue
delete mode 100644 hotgo-web/src/views/account/settings/index.vue
delete mode 100644 hotgo-web/src/views/dashboard/images/QQCode.png
delete mode 100644 hotgo-web/src/views/dashboard/images/banner1.png
delete mode 100644 hotgo-web/src/views/dashboard/images/banner2.png
delete mode 100644 hotgo-web/src/views/dashboard/images/img02.png
delete mode 100644 hotgo-web/src/views/dashboard/images/img03.png
delete mode 100644 hotgo-web/src/views/dashboard/images/wxCode.png
delete mode 100644 hotgo-web/src/views/dashboard/index.vue
delete mode 100644 hotgo-web/src/views/dashboard/portal/About.vue
delete mode 100644 hotgo-web/src/views/dashboard/portal/CommonUse.vue
delete mode 100644 hotgo-web/src/views/dashboard/portal/ToDo.vue
delete mode 100644 hotgo-web/src/views/dashboard/typical-home.less
delete mode 100644 hotgo-web/src/views/demo/chart/area-chart.vue
delete mode 100644 hotgo-web/src/views/demo/chart/chart-radar.vue
delete mode 100644 hotgo-web/src/views/demo/chart/dashboard-chart.vue
delete mode 100644 hotgo-web/src/views/demo/chart/echartDashBoard.vue
delete mode 100644 hotgo-web/src/views/demo/chart/histogram-chart.vue
delete mode 100644 hotgo-web/src/views/demo/chart/line-chart.vue
delete mode 100644 hotgo-web/src/views/demo/chart/pie-chart.vue
delete mode 100644 hotgo-web/src/views/demo/chart/scatter-chart.vue
delete mode 100644 hotgo-web/src/views/demo/chart/sm-pieChart.vue
delete mode 100644 hotgo-web/src/views/demo/portLetCards/AmountStatistics.vue
delete mode 100644 hotgo-web/src/views/demo/portLetCards/DashboardChart.vue
delete mode 100644 hotgo-web/src/views/demo/portLetCards/TaskCompletionStatistics.vue
delete mode 100644 hotgo-web/src/views/demo/portLetCards/TaskTotalStatistics.vue
delete mode 100644 hotgo-web/src/views/demo/portLetCards/TrafficStatistics.vue
delete mode 100644 hotgo-web/src/views/demo/portLetCards/icon/MtimeIcon.vue
delete mode 100644 hotgo-web/src/views/demo/portLetCards/images-m/bg01.png
delete mode 100644 hotgo-web/src/views/demo/portLetCards/images-m/chart_sm.png
delete mode 100644 hotgo-web/src/views/demo/portLetCards/images-m/img01.png
delete mode 100644 hotgo-web/src/views/demo/portLetCards/images-m/img02.png
delete mode 100644 hotgo-web/src/views/demo/portLetCards/images-m/img03.png
delete mode 100644 hotgo-web/src/views/demo/portLetCards/images-m/img401.png
delete mode 100644 hotgo-web/src/views/demo/portLetCards/images-m/title_left.png
delete mode 100644 hotgo-web/src/views/demo/portLetCards/style/base.less
delete mode 100644 hotgo-web/src/views/exception/403.vue
delete mode 100644 hotgo-web/src/views/exception/404.vue
delete mode 100644 hotgo-web/src/views/exception/500.vue
delete mode 100644 hotgo-web/src/views/index.less
delete mode 100644 hotgo-web/src/views/index.vue
delete mode 100644 hotgo-web/src/views/monitor/cache/index.vue
delete mode 100644 hotgo-web/src/views/monitor/cache/indexCacheList.vue
delete mode 100644 hotgo-web/src/views/monitor/cache/indexOld.vue
delete mode 100644 hotgo-web/src/views/monitor/druid/index.vue
delete mode 100644 hotgo-web/src/views/monitor/job/index.vue
delete mode 100644 hotgo-web/src/views/monitor/job/log.vue
delete mode 100644 hotgo-web/src/views/monitor/job/modules/CreateForm.vue
delete mode 100644 hotgo-web/src/views/monitor/job/modules/LogViewForm.vue
delete mode 100644 hotgo-web/src/views/monitor/job/modules/ViewForm.vue
delete mode 100644 hotgo-web/src/views/monitor/loginlog/LoginLogIndex.vue
delete mode 100644 hotgo-web/src/views/monitor/online/index.vue
delete mode 100644 hotgo-web/src/views/monitor/operlog/OperlogIndex.vue
delete mode 100644 hotgo-web/src/views/monitor/operlog/modules/ViewForm.vue
delete mode 100644 hotgo-web/src/views/monitor/server/index.vue
delete mode 100644 hotgo-web/src/views/system/config/ConfigIndex.vue
delete mode 100644 hotgo-web/src/views/system/config/modules/ConfigAddForm.vue
delete mode 100644 hotgo-web/src/views/system/config/modules/ConfigEditForm.vue
delete mode 100644 hotgo-web/src/views/system/config/modules/ConfigForm.js
delete mode 100644 hotgo-web/src/views/system/dept/SysDeptIndex.vue
delete mode 100644 hotgo-web/src/views/system/dept/modules/SysDeptAddForm.vue
delete mode 100644 hotgo-web/src/views/system/dept/modules/SysDeptEditForm.vue
delete mode 100644 hotgo-web/src/views/system/dept/modules/SysDeptForm.js
delete mode 100644 hotgo-web/src/views/system/dict/DictDataIndex.vue
delete mode 100644 hotgo-web/src/views/system/dict/DictIndex.vue
delete mode 100644 hotgo-web/src/views/system/dict/modules/DictDataAddForm.vue
delete mode 100644 hotgo-web/src/views/system/dict/modules/DictDataEditForm.vue
delete mode 100644 hotgo-web/src/views/system/dict/modules/DictDataForm.js
delete mode 100644 hotgo-web/src/views/system/dict/modules/DictTypeAddForm.vue
delete mode 100644 hotgo-web/src/views/system/dict/modules/DictTypeEditForm.vue
delete mode 100644 hotgo-web/src/views/system/dict/modules/DictTypeForm.js
delete mode 100644 hotgo-web/src/views/system/iconSelect/IconSelect.vue
delete mode 100644 hotgo-web/src/views/system/menu/MenuIndex.vue
delete mode 100644 hotgo-web/src/views/system/menu/modules/MenuAddForm.vue
delete mode 100644 hotgo-web/src/views/system/menu/modules/MenuEditForm.vue
delete mode 100644 hotgo-web/src/views/system/menu/modules/MenuForm.js
delete mode 100644 hotgo-web/src/views/system/notice/NoticeIndex.vue
delete mode 100644 hotgo-web/src/views/system/notice/NoticeReadIndex.vue
delete mode 100644 hotgo-web/src/views/system/notice/modules/NoticeAddForm.vue
delete mode 100644 hotgo-web/src/views/system/notice/modules/NoticeEditForm.vue
delete mode 100644 hotgo-web/src/views/system/notice/modules/NoticeForm.js
delete mode 100644 hotgo-web/src/views/system/notice/modules/NoticeViewForm.vue
delete mode 100644 hotgo-web/src/views/system/post/PostIndex.vue
delete mode 100644 hotgo-web/src/views/system/post/modules/PostAddForm.vue
delete mode 100644 hotgo-web/src/views/system/post/modules/PostEditForm.vue
delete mode 100644 hotgo-web/src/views/system/post/modules/PostForm.js
delete mode 100644 hotgo-web/src/views/system/role/QueryList.vue
delete mode 100644 hotgo-web/src/views/system/role/SysRoleAuth.vue
delete mode 100644 hotgo-web/src/views/system/role/SysRoleIndex.vue
delete mode 100644 hotgo-web/src/views/system/role/modules/CreateDataScopeForm.vue
delete mode 100644 hotgo-web/src/views/system/role/modules/DataScope.vue
delete mode 100644 hotgo-web/src/views/system/role/modules/PortletScope.vue
delete mode 100644 hotgo-web/src/views/system/role/modules/SysRoleAddForm.vue
delete mode 100644 hotgo-web/src/views/system/role/modules/SysRoleEditForm.vue
delete mode 100644 hotgo-web/src/views/system/role/modules/SysRoleForm.js
delete mode 100644 hotgo-web/src/views/system/sysportalconfig/modules/SysPortalConfigAddForm.vue
delete mode 100644 hotgo-web/src/views/system/sysportalconfig/modules/SysPortalConfigEditForm.vue
delete mode 100644 hotgo-web/src/views/system/sysportalconfig/modules/SysPortalConfigForm.js
delete mode 100644 hotgo-web/src/views/system/sysportlet/index.vue
delete mode 100644 hotgo-web/src/views/system/sysportlet/modules/SysPortletAddForm.vue
delete mode 100644 hotgo-web/src/views/system/sysportlet/modules/SysPortletEditForm.vue
delete mode 100644 hotgo-web/src/views/system/sysportlet/modules/SysPortletForm.js
delete mode 100644 hotgo-web/src/views/system/user/SysUserIndex.vue
delete mode 100644 hotgo-web/src/views/system/user/modules/DeptTree.vue
delete mode 100644 hotgo-web/src/views/system/user/modules/ImportExcel.vue
delete mode 100644 hotgo-web/src/views/system/user/modules/ResetPassword.vue
delete mode 100644 hotgo-web/src/views/system/user/modules/SysUserAddForm.vue
delete mode 100644 hotgo-web/src/views/system/user/modules/SysUserEditForm.vue
delete mode 100644 hotgo-web/src/views/system/user/modules/SysUserForm.js
delete mode 100644 hotgo-web/src/views/test/temp/home.vue
delete mode 100644 hotgo-web/src/views/tool/build/index.vue
delete mode 100644 hotgo-web/src/views/tool/gen/genconfigtemplate/index.vue
delete mode 100644 hotgo-web/src/views/tool/gen/genconfigtemplate/module/GenConfigTemplateAddForm.vue
delete mode 100644 hotgo-web/src/views/tool/gen/genconfigtemplate/module/GenConfigTemplateEditForm.vue
delete mode 100644 hotgo-web/src/views/tool/gen/genconfigtemplate/module/GenConfigTemplateForm.js
delete mode 100644 hotgo-web/src/views/tool/gen/index.vue
delete mode 100644 hotgo-web/src/views/tool/gen/modules/BasicInfoForm.vue
delete mode 100644 hotgo-web/src/views/tool/gen/modules/GenEdit.vue
delete mode 100644 hotgo-web/src/views/tool/gen/modules/GenInfoForm.vue
delete mode 100644 hotgo-web/src/views/tool/gen/modules/ImportTable.vue
delete mode 100644 hotgo-web/src/views/tool/gen/modules/PreviewCode.vue
delete mode 100644 hotgo-web/src/views/tool/swagger/index.vue
delete mode 100644 hotgo-web/src/views/user/Login.vue
delete mode 100644 hotgo-web/tests/unit/.eslintrc.js
delete mode 100644 hotgo-web/vue.config.js
delete mode 100644 hotgo-web/webstorm.config.js
rename {hotgo-server => server}/.gitattributes (100%)
create mode 100644 server/.gitignore
create mode 100644 server/Makefile
create mode 100644 server/README.MD
create mode 100644 server/api/api/member/member.go
create mode 100644 server/api/api/user/hello.go
create mode 100644 server/api/backend/attachment/attachment.go
create mode 100644 server/api/backend/blacklist/blacklist.go
create mode 100644 server/api/backend/common/console.go
create mode 100644 server/api/backend/common/ems.go
create mode 100644 server/api/backend/common/site.go
create mode 100644 server/api/backend/common/upload.go
create mode 100644 server/api/backend/config/config.go
create mode 100644 server/api/backend/cron/cron.go
create mode 100644 server/api/backend/cron/cron_group.go
rename hotgo-server/app/form/adminForm/dept_form.go => server/api/backend/dept/dept.go (58%)
create mode 100644 server/api/backend/dict/dict_data.go
create mode 100644 server/api/backend/dict/dict_type.go
create mode 100644 server/api/backend/log/log.go
rename hotgo-server/app/form/adminForm/member_form.go => server/api/backend/member/member.go (63%)
rename hotgo-server/app/form/adminForm/menu_form.go => server/api/backend/menu/menu.go (60%)
create mode 100644 server/api/backend/monitor/monitor.go
create mode 100644 server/api/backend/notice/notice.go
rename hotgo-server/app/form/adminForm/post_form.go => server/api/backend/post/post.go (57%)
create mode 100644 server/api/backend/provinces/provinces.go
create mode 100644 server/api/backend/role/role.go
create mode 100644 server/api/backend/user/hello.go
create mode 100644 server/go.mod
create mode 100644 server/go.sum
create mode 100644 server/hack/config.yaml
create mode 100644 server/internal/cmd/cmd.go
create mode 100644 server/internal/cmd/handler_shutdown.go
rename hotgo-server/boot/run.go => server/internal/cmd/http.go (50%)
create mode 100644 server/internal/cmd/queue.go
create mode 100644 server/internal/cmd/tools.go
rename hotgo-server/app/consts/app_consts.go => server/internal/consts/app.go (83%)
rename hotgo-server/app/consts/code_consts.go => server/internal/consts/code.go (96%)
create mode 100644 server/internal/consts/config.go
rename hotgo-server/app/consts/context_consts.go => server/internal/consts/context.go (73%)
create mode 100644 server/internal/consts/cron.go
rename hotgo-server/addons/wechat/router.go => server/internal/consts/debris.go (55%)
rename hotgo-server/app/consts/error_consts.go => server/internal/consts/error.go (85%)
rename hotgo-server/app/consts/openapi_consts.go => server/internal/consts/openapi.go (88%)
rename hotgo-server/app/consts/queue_consts.go => server/internal/consts/queue.go (77%)
rename hotgo-server/app/consts/redis_consts.go => server/internal/consts/redis.go (85%)
create mode 100644 server/internal/consts/status.go
rename hotgo-server/app/consts/status_consts.go => server/internal/consts/upload.go (55%)
rename hotgo-server/app/consts/version_consts.go => server/internal/consts/version.go (72%)
create mode 100644 server/internal/controller/api/member/member.go
create mode 100644 server/internal/controller/api/user/hello.go
create mode 100644 server/internal/controller/backend/admin/dept.go
create mode 100644 server/internal/controller/backend/admin/member.go
create mode 100644 server/internal/controller/backend/admin/menu.go
create mode 100644 server/internal/controller/backend/admin/monitor.go
create mode 100644 server/internal/controller/backend/admin/notice.go
create mode 100644 server/internal/controller/backend/admin/post.go
create mode 100644 server/internal/controller/backend/admin/role.go
create mode 100644 server/internal/controller/backend/common/console.go
create mode 100644 server/internal/controller/backend/common/ems.go
create mode 100644 server/internal/controller/backend/common/site.go
create mode 100644 server/internal/controller/backend/common/upload.go
create mode 100644 server/internal/controller/backend/sys/attachment.go
create mode 100644 server/internal/controller/backend/sys/blacklist.go
create mode 100644 server/internal/controller/backend/sys/config.go
create mode 100644 server/internal/controller/backend/sys/cron.go
create mode 100644 server/internal/controller/backend/sys/cron_group.go
create mode 100644 server/internal/controller/backend/sys/dict_data.go
create mode 100644 server/internal/controller/backend/sys/dict_type.go
create mode 100644 server/internal/controller/backend/sys/log.go
create mode 100644 server/internal/controller/backend/sys/provinces.go
create mode 100644 server/internal/controller/websocket/handler/admin/monitor.go
create mode 100644 server/internal/controller/websocket/handler/common/site.go
create mode 100644 server/internal/controller/websocket/send.go
create mode 100644 server/internal/crons/init.go
create mode 100644 server/internal/crons/monitor.go
create mode 100644 server/internal/crons/test.go
create mode 100644 server/internal/crons/test2.go
rename {hotgo-server/resource/public/html => server/internal/dao}/.gitkeep (100%)
rename {hotgo-server/app/service => server}/internal/dao/admin_dept.go (67%)
rename {hotgo-server/app/service => server}/internal/dao/admin_member.go (68%)
create mode 100644 server/internal/dao/admin_member_post.go
rename {hotgo-server/app/service => server}/internal/dao/admin_member_role.go (69%)
rename {hotgo-server/app/service => server}/internal/dao/admin_menu.go (74%)
create mode 100644 server/internal/dao/admin_notice.go
rename {hotgo-server/app/service => server}/internal/dao/admin_post.go (66%)
create mode 100644 server/internal/dao/admin_role.go
create mode 100644 server/internal/dao/admin_role_casbin.go
rename {hotgo-server/app/service => server}/internal/dao/admin_role_dept.go (69%)
rename {hotgo-server/app/service => server}/internal/dao/admin_role_menu.go (69%)
rename {hotgo-server/app/service => server}/internal/dao/internal/admin_dept.go (98%)
rename {hotgo-server/app/service => server}/internal/dao/internal/admin_member.go (98%)
rename {hotgo-server/app/service => server}/internal/dao/internal/admin_member_post.go (99%)
rename {hotgo-server/app/service => server}/internal/dao/internal/admin_member_role.go (99%)
rename {hotgo-server/app/service => server}/internal/dao/internal/admin_menu.go (57%)
rename {hotgo-server/app/service => server}/internal/dao/internal/admin_notice.go (94%)
rename {hotgo-server/app/service => server}/internal/dao/internal/admin_post.go (99%)
rename {hotgo-server/app/service => server}/internal/dao/internal/admin_role.go (99%)
create mode 100644 server/internal/dao/internal/admin_role_casbin.go
rename {hotgo-server/app/service => server}/internal/dao/internal/admin_role_dept.go (99%)
rename {hotgo-server/app/service => server}/internal/dao/internal/admin_role_menu.go (99%)
create mode 100644 server/internal/dao/internal/sys_attachment.go
create mode 100644 server/internal/dao/internal/sys_blacklist.go
rename {hotgo-server/app/service => server}/internal/dao/internal/sys_config.go (74%)
create mode 100644 server/internal/dao/internal/sys_cron.go
create mode 100644 server/internal/dao/internal/sys_cron_group.go
rename {hotgo-server/app/service => server}/internal/dao/internal/sys_dict_data.go (99%)
rename {hotgo-server/app/service => server}/internal/dao/internal/sys_dict_type.go (98%)
rename {hotgo-server/app/service => server}/internal/dao/internal/sys_log.go (99%)
rename {hotgo-server/app/service => server}/internal/dao/internal/sys_provinces.go (94%)
create mode 100644 server/internal/dao/sys_attachment.go
create mode 100644 server/internal/dao/sys_blacklist.go
create mode 100644 server/internal/dao/sys_config.go
rename hotgo-server/app/service/internal/dao/admin_member_post.go => server/internal/dao/sys_cron.go (50%)
create mode 100644 server/internal/dao/sys_cron_group.go
create mode 100644 server/internal/dao/sys_dict_data.go
create mode 100644 server/internal/dao/sys_dict_type.go
rename {hotgo-server/app/service => server}/internal/dao/sys_log.go (70%)
rename {hotgo-server/app/service => server}/internal/dao/sys_provinces.go (75%)
create mode 100644 server/internal/global/init.go
create mode 100644 server/internal/global/static.go
rename hotgo-server/app/com/cache_com.go => server/internal/library/cache/cache.go (72%)
rename hotgo-server/app/com/captcha_com.go => server/internal/library/captcha/captcha.go (58%)
create mode 100644 server/internal/library/casbin/adapter.go
create mode 100644 server/internal/library/casbin/casbin_test.go
create mode 100644 server/internal/library/casbin/enforcer.go
create mode 100644 server/internal/library/contexts/context.go
create mode 100644 server/internal/library/ems/ems.go
create mode 100644 server/internal/library/jwt/jwt.go
create mode 100644 server/internal/library/location/location.go
create mode 100644 server/internal/library/notify/feishu/client.go
create mode 100644 server/internal/library/notify/feishu/image.go
create mode 100644 server/internal/library/notify/feishu/interactive.go
create mode 100644 server/internal/library/notify/feishu/internal/security/security.go
create mode 100644 server/internal/library/notify/feishu/message.go
create mode 100644 server/internal/library/notify/feishu/post.go
create mode 100644 server/internal/library/notify/feishu/sharechat.go
create mode 100644 server/internal/library/notify/feishu/text.go
create mode 100644 server/internal/library/queue/init.go
rename {hotgo-server/app/factory => server/internal/library}/queue/kafkamq.go (92%)
rename {hotgo-server/app/factory => server/internal/library}/queue/logger.go (58%)
rename {hotgo-server/app/factory => server/internal/library}/queue/redismq.go (83%)
rename {hotgo-server/app/factory => server/internal/library}/queue/rocketmq.go (94%)
rename hotgo-server/app/factory/queue/rocketmq_rewrite_logger.go => server/internal/library/queue/rocketmq_logger.go (89%)
create mode 100644 server/internal/library/response/response.go
rename {hotgo-server/resource/public/plugin => server/internal/logic}/.gitkeep (100%)
create mode 100644 server/internal/logic/admin/dept.go
create mode 100644 server/internal/logic/admin/member.go
rename hotgo-server/app/service/adminService/member_post_service.go => server/internal/logic/admin/member_post.go (53%)
create mode 100644 server/internal/logic/admin/menu.go
create mode 100644 server/internal/logic/admin/notice.go
rename hotgo-server/app/service/adminService/post_service.go => server/internal/logic/admin/post.go (52%)
create mode 100644 server/internal/logic/admin/role.go
create mode 100644 server/internal/logic/common/upload.go
create mode 100644 server/internal/logic/hook/global_log.go
create mode 100644 server/internal/logic/hook/init.go
create mode 100644 server/internal/logic/logic.go
create mode 100644 server/internal/logic/middleware/admin_auth.go
create mode 100644 server/internal/logic/middleware/api_auth.go
create mode 100644 server/internal/logic/middleware/init.go
rename hotgo-server/app/middleware/handler_response.go => server/internal/logic/middleware/response.go (67%)
create mode 100644 server/internal/logic/middleware/weboscket.go
create mode 100644 server/internal/logic/sys/attachment.go
create mode 100644 server/internal/logic/sys/blacklist.go
create mode 100644 server/internal/logic/sys/config.go
create mode 100644 server/internal/logic/sys/cron.go
create mode 100644 server/internal/logic/sys/cron_group.go
create mode 100644 server/internal/logic/sys/dict_data.go
create mode 100644 server/internal/logic/sys/dict_type.go
rename hotgo-server/app/service/sysService/log_service.go => server/internal/logic/sys/log.go (59%)
create mode 100644 server/internal/logic/sys/provinces.go
rename {hotgo-server/resource/public/resource/css => server/internal/model}/.gitkeep (100%)
create mode 100644 server/internal/model/config.go
rename {hotgo-server/app => server/internal}/model/context.go (64%)
rename {hotgo-server/resource/public/resource/image => server/internal/model/do}/.gitkeep (100%)
rename {hotgo-server/app/service/internal/dto => server/internal/model/do}/admin_dept.go (89%)
rename {hotgo-server/app/service/internal/dto => server/internal/model/do}/admin_member.go (92%)
rename {hotgo-server/app/service/internal/dto => server/internal/model/do}/admin_member_post.go (87%)
rename {hotgo-server/app/service/internal/dto => server/internal/model/do}/admin_member_role.go (87%)
create mode 100644 server/internal/model/do/admin_menu.go
rename {hotgo-server/app/service/internal/dto => server/internal/model/do}/admin_notice.go (81%)
rename {hotgo-server/app/service/internal/dto => server/internal/model/do}/admin_post.go (92%)
rename {hotgo-server/app/service/internal/dto => server/internal/model/do}/admin_role.go (94%)
create mode 100644 server/internal/model/do/admin_role_casbin.go
rename {hotgo-server/app/service/internal/dto => server/internal/model/do}/admin_role_dept.go (88%)
rename {hotgo-server/app/service/internal/dto => server/internal/model/do}/admin_role_menu.go (88%)
create mode 100644 server/internal/model/do/sys_attachment.go
create mode 100644 server/internal/model/do/sys_blacklist.go
create mode 100644 server/internal/model/do/sys_config.go
create mode 100644 server/internal/model/do/sys_cron.go
rename hotgo-server/app/service/internal/dto/sys_config.go => server/internal/model/do/sys_cron_group.go (59%)
rename {hotgo-server/app/service/internal/dto => server/internal/model/do}/sys_dict_data.go (93%)
rename {hotgo-server/app/service/internal/dto => server/internal/model/do}/sys_dict_type.go (88%)
rename {hotgo-server/app/service/internal/dto => server/internal/model/do}/sys_log.go (95%)
rename {hotgo-server/app/service/internal/dto => server/internal/model/do}/sys_provinces.go (79%)
rename {hotgo-server/resource/public/resource/js => server/internal/model/entity}/.gitkeep (100%)
create mode 100644 server/internal/model/entity/admin_dept.go
create mode 100644 server/internal/model/entity/admin_member.go
rename {hotgo-server/app => server/internal}/model/entity/admin_member_post.go (74%)
rename {hotgo-server/app => server/internal}/model/entity/admin_member_role.go (74%)
create mode 100644 server/internal/model/entity/admin_menu.go
create mode 100644 server/internal/model/entity/admin_notice.go
create mode 100644 server/internal/model/entity/admin_post.go
create mode 100644 server/internal/model/entity/admin_role.go
create mode 100644 server/internal/model/entity/admin_role_casbin.go
rename {hotgo-server/app => server/internal}/model/entity/admin_role_dept.go (75%)
rename {hotgo-server/app => server/internal}/model/entity/admin_role_menu.go (75%)
create mode 100644 server/internal/model/entity/sys_attachment.go
create mode 100644 server/internal/model/entity/sys_blacklist.go
create mode 100644 server/internal/model/entity/sys_config.go
create mode 100644 server/internal/model/entity/sys_cron.go
create mode 100644 server/internal/model/entity/sys_cron_group.go
create mode 100644 server/internal/model/entity/sys_dict_data.go
create mode 100644 server/internal/model/entity/sys_dict_type.go
create mode 100644 server/internal/model/entity/sys_log.go
create mode 100644 server/internal/model/entity/sys_provinces.go
create mode 100644 server/internal/model/input/adminin/dept.go
create mode 100644 server/internal/model/input/adminin/member.go
create mode 100644 server/internal/model/input/adminin/menu.go
create mode 100644 server/internal/model/input/adminin/notice.go
create mode 100644 server/internal/model/input/adminin/post.go
rename hotgo-server/app/form/input/admin_role_input.go => server/internal/model/input/adminin/role.go (60%)
create mode 100644 server/internal/model/input/form/base.go
create mode 100644 server/internal/model/input/sysin/attachment.go
create mode 100644 server/internal/model/input/sysin/blacklist.go
create mode 100644 server/internal/model/input/sysin/config.go
create mode 100644 server/internal/model/input/sysin/cron.go
create mode 100644 server/internal/model/input/sysin/cron_group.go
create mode 100644 server/internal/model/input/sysin/dict_data.go
create mode 100644 server/internal/model/input/sysin/dict_type.go
create mode 100644 server/internal/model/input/sysin/log.go
create mode 100644 server/internal/model/input/sysin/provinces.go
create mode 100644 server/internal/model/input/websocketin/send.go
create mode 100644 server/internal/model/monitor.go
create mode 100644 server/internal/model/response.go
rename {hotgo-server/app => server/internal}/model/tree.go (53%)
create mode 100644 server/internal/packed/packed.go
create mode 100644 server/internal/queues/init.go
create mode 100644 server/internal/queues/sys_log.go
create mode 100644 server/internal/router/admin.go
create mode 100644 server/internal/router/api.go
create mode 100644 server/internal/router/websocket.go
rename {hotgo-server/resource/template => server/internal/service}/.gitkeep (100%)
create mode 100644 server/internal/service/admin_dept.go
create mode 100644 server/internal/service/admin_member.go
create mode 100644 server/internal/service/admin_member_post.go
create mode 100644 server/internal/service/admin_menu.go
create mode 100644 server/internal/service/admin_notice.go
create mode 100644 server/internal/service/admin_post.go
create mode 100644 server/internal/service/admin_role.go
create mode 100644 server/internal/service/common_upload.go
create mode 100644 server/internal/service/hook.go
create mode 100644 server/internal/service/middleware.go
create mode 100644 server/internal/service/sys_attachment.go
create mode 100644 server/internal/service/sys_blacklist.go
create mode 100644 server/internal/service/sys_config.go
create mode 100644 server/internal/service/sys_cron.go
create mode 100644 server/internal/service/sys_cron_group.go
create mode 100644 server/internal/service/sys_dict_data.go
create mode 100644 server/internal/service/sys_dict_type.go
create mode 100644 server/internal/service/sys_log.go
create mode 100644 server/internal/service/sys_provinces.go
create mode 100644 server/internal/websocket/client.go
create mode 100644 server/internal/websocket/client_manager.go
create mode 100644 server/internal/websocket/init.go
create mode 100644 server/internal/websocket/model.go
create mode 100644 server/internal/websocket/router.go
create mode 100644 server/main.go
create mode 100644 server/manifest/config/casbin.conf
create mode 100644 server/manifest/config/config.example.yaml
create mode 100644 server/manifest/deploy/kustomize/base/deployment.yaml
create mode 100644 server/manifest/deploy/kustomize/base/kustomization.yaml
create mode 100644 server/manifest/deploy/kustomize/base/service.yaml
create mode 100644 server/manifest/deploy/kustomize/overlays/develop/configmap.yaml
create mode 100644 server/manifest/deploy/kustomize/overlays/develop/deployment.yaml
create mode 100644 server/manifest/deploy/kustomize/overlays/develop/kustomization.yaml
create mode 100644 server/manifest/docker/Dockerfile
create mode 100644 server/manifest/docker/docker.sh
create mode 100644 server/resource/data/hotgo.sql
rename hotgo-web/src/views/applyLicense/ApplyLicense.vue => server/resource/i18n/.gitkeep (100%)
create mode 100644 server/resource/public/.gitignore
create mode 100644 server/resource/public/.well-known/pki-validation/8E2A05DA6D386B12988FE64CE3200A64.txt
rename {hotgo-server => server}/resource/public/favicon.ico (100%)
create mode 100644 server/resource/public/html/.gitkeep
create mode 100644 server/resource/public/plugin/.gitkeep
create mode 100644 server/resource/public/resource/css/.gitkeep
create mode 100644 server/resource/public/resource/image/.gitkeep
create mode 100644 server/resource/public/resource/js/.gitkeep
create mode 100644 server/resource/template/.gitkeep
create mode 100644 server/utility/.gitkeep
create mode 100644 server/utility/auth/auth.go
create mode 100644 server/utility/charset/charset.go
create mode 100644 server/utility/convert/convert.go
create mode 100644 server/utility/encrypt/encrypt.go
rename hotgo-server/app/utils/excel_util.go => server/utility/excel/excel.go (85%)
create mode 100644 server/utility/file/file.go
create mode 100644 server/utility/file/mime.go
create mode 100644 server/utility/format/format.go
rename hotgo-server/app/utils/signal_util.go => server/utility/signal/signal.go (58%)
create mode 100644 server/utility/tree/tree.go
create mode 100644 server/utility/useragent/useragent.go
create mode 100644 server/utility/validate/validate.go
create mode 100644 web/.editorconfig
create mode 100644 web/.env
create mode 100644 web/.env.development
create mode 100644 web/.env.production
create mode 100644 web/.eslintignore
create mode 100644 web/.eslintrc.js
rename {hotgo-web => web}/.gitignore (73%)
create mode 100644 web/.prettierignore
create mode 100644 web/.stylelintignore
rename LICENSE => web/LICENSE (96%)
create mode 100644 web/README.md
create mode 100644 web/build/constant.ts
create mode 100644 web/build/getConfigFileName.ts
create mode 100644 web/build/script/buildConf.ts
create mode 100644 web/build/script/postBuild.ts
create mode 100644 web/build/utils.ts
create mode 100644 web/build/vite/plugin/compress.ts
create mode 100644 web/build/vite/plugin/html.ts
create mode 100644 web/build/vite/plugin/index.ts
create mode 100644 web/build/vite/plugin/mock.ts
create mode 100644 web/build/vite/plugin/styleImport.ts
create mode 100644 web/build/vite/proxy.ts
create mode 100644 web/commitlint.config.js
create mode 100644 web/index.html
create mode 100644 web/mock/_createProductionServer.ts
create mode 100644 web/mock/_util.ts
create mode 100644 web/mock/dashboard/console.ts
create mode 100644 web/mock/system/menu.ts
create mode 100644 web/mock/system/role.ts
create mode 100644 web/mock/table/list.ts
create mode 100644 web/mock/user/menus.ts
create mode 100644 web/mock/user/user.ts
create mode 100644 web/package-lock.json
create mode 100644 web/package.json
create mode 100644 web/pnpm-lock.yaml
create mode 100644 web/postcss.config.js
create mode 100644 web/prettier.config.js
create mode 100644 web/public/favicon.ico
create mode 100644 web/public/notification.png
create mode 100644 web/src/App.vue
create mode 100644 web/src/api/apply/attachment.ts
create mode 100644 web/src/api/apply/notice.ts
create mode 100644 web/src/api/apply/provinces.ts
create mode 100644 web/src/api/dashboard/console.ts
create mode 100644 web/src/api/dict/dict.ts
create mode 100644 web/src/api/log/log.ts
create mode 100644 web/src/api/monitor/monitor.ts
create mode 100644 web/src/api/org/dept.ts
create mode 100644 web/src/api/org/post.ts
create mode 100644 web/src/api/org/user.ts
create mode 100644 web/src/api/sys/blacklist.ts
create mode 100644 web/src/api/sys/config.ts
create mode 100644 web/src/api/sys/cron.ts
create mode 100644 web/src/api/system/dict.ts
create mode 100644 web/src/api/system/menu.ts
create mode 100644 web/src/api/system/role.ts
create mode 100644 web/src/api/system/user.ts
create mode 100644 web/src/api/table/list.ts
create mode 100644 web/src/assets/icons/login.svg
create mode 100644 web/src/assets/icons/logo.svg
create mode 100644 web/src/assets/images/Business.svg
create mode 100644 web/src/assets/images/Error.svg
create mode 100644 web/src/assets/images/account-logo.png
create mode 100644 web/src/assets/images/account-logo.png1
create mode 100644 web/src/assets/images/analysis.svg
create mode 100644 web/src/assets/images/exception/403.svg
create mode 100644 web/src/assets/images/exception/404.svg
create mode 100644 web/src/assets/images/exception/500.svg
create mode 100644 web/src/assets/images/exception/developing.svg
create mode 100644 web/src/assets/images/exception/load-error.svg
create mode 100644 web/src/assets/images/exception/nodata.svg
create mode 100644 web/src/assets/images/header-theme-dark.svg
create mode 100644 web/src/assets/images/login.svg
create mode 100644 web/src/assets/images/logo.png
create mode 100644 web/src/assets/images/logo.png1
create mode 100644 web/src/assets/images/logo.png11
create mode 100644 web/src/assets/images/nav-horizontal-mix.svg
create mode 100644 web/src/assets/images/nav-horizontal.svg
rename hotgo-web/src/assets/images/dark.svg => web/src/assets/images/nav-theme-dark.svg (58%)
rename hotgo-web/src/assets/images/light.svg => web/src/assets/images/nav-theme-light.svg (67%)
create mode 100644 web/src/assets/images/schoolboy.png
create mode 100644 web/src/assets/images/tool.png
create mode 100644 web/src/components/Application/Application.vue
create mode 100644 web/src/components/Application/index.ts
create mode 100644 web/src/components/CountTo/CountTo.vue
create mode 100644 web/src/components/CountTo/index.ts
create mode 100644 web/src/components/DialogContent/index.ts
create mode 100644 web/src/components/DialogContent/index.vue
create mode 100644 web/src/components/Form/index.ts
create mode 100644 web/src/components/Form/src/BasicForm.vue
create mode 100644 web/src/components/Form/src/helper.ts
create mode 100644 web/src/components/Form/src/hooks/useForm.ts
create mode 100644 web/src/components/Form/src/hooks/useFormContext.ts
create mode 100644 web/src/components/Form/src/hooks/useFormEvents.ts
create mode 100644 web/src/components/Form/src/hooks/useFormValues.ts
create mode 100644 web/src/components/Form/src/props.ts
create mode 100644 web/src/components/Form/src/types/form.ts
create mode 100644 web/src/components/Form/src/types/index.ts
create mode 100644 web/src/components/LoadingContent/index.ts
create mode 100644 web/src/components/LoadingContent/index.vue
create mode 100644 web/src/components/Lockscreen/Lockscreen.vue
create mode 100644 web/src/components/Lockscreen/Recharge.vue
create mode 100644 web/src/components/Lockscreen/index.ts
create mode 100644 web/src/components/MessageContent/index.ts
create mode 100644 web/src/components/MessageContent/index.vue
create mode 100644 web/src/components/Modal/index.ts
create mode 100644 web/src/components/Modal/src/basicModal.vue
create mode 100644 web/src/components/Modal/src/hooks/useModal.ts
create mode 100644 web/src/components/Modal/src/props.ts
create mode 100644 web/src/components/Modal/src/type/index.ts
create mode 100644 web/src/components/SvgIcon/index.vue
create mode 100644 web/src/components/Table/index.ts
create mode 100644 web/src/components/Table/src/Table.vue
create mode 100644 web/src/components/Table/src/componentMap.ts
create mode 100644 web/src/components/Table/src/components/TableAction.vue
create mode 100644 web/src/components/Table/src/components/editable/CellComponent.ts
create mode 100644 web/src/components/Table/src/components/editable/EditableCell.vue
create mode 100644 web/src/components/Table/src/components/editable/helper.ts
create mode 100644 web/src/components/Table/src/components/editable/index.ts
create mode 100644 web/src/components/Table/src/components/settings/ColumnSetting.vue
create mode 100644 web/src/components/Table/src/const.ts
create mode 100644 web/src/components/Table/src/hooks/useColumns.ts
create mode 100644 web/src/components/Table/src/hooks/useDataSource.ts
create mode 100644 web/src/components/Table/src/hooks/useLoading.ts
create mode 100644 web/src/components/Table/src/hooks/usePagination.ts
create mode 100644 web/src/components/Table/src/hooks/useTableContext.ts
create mode 100644 web/src/components/Table/src/props.ts
create mode 100644 web/src/components/Table/src/types/componentType.ts
create mode 100644 web/src/components/Table/src/types/pagination.ts
create mode 100644 web/src/components/Table/src/types/table.ts
create mode 100644 web/src/components/Table/src/types/tableAction.ts
create mode 100644 web/src/components/Upload/index.ts
create mode 100644 web/src/components/Upload/src/BasicUpload.vue
create mode 100644 web/src/components/Upload/src/props.ts
create mode 100644 web/src/components/Upload/src/type/index.ts
create mode 100644 web/src/directives/clickOutside.ts
create mode 100644 web/src/directives/permission.ts
create mode 100644 web/src/enums/apiEnum.ts
create mode 100644 web/src/enums/breakpointEnum.ts
create mode 100644 web/src/enums/cacheEnum.ts
create mode 100644 web/src/enums/httpEnum.ts
create mode 100644 web/src/enums/optionsiEnum.ts
create mode 100644 web/src/enums/pageEnum.ts
create mode 100644 web/src/enums/permissionsEnum.ts
create mode 100644 web/src/enums/roleEnum.ts
create mode 100644 web/src/enums/socketEnum.ts
create mode 100644 web/src/hooks/core/useTimeout.ts
create mode 100644 web/src/hooks/event/useBreakpoint.ts
create mode 100644 web/src/hooks/event/useEventListener.ts
create mode 100644 web/src/hooks/event/useWindowSizeFn.ts
create mode 100644 web/src/hooks/index.ts
create mode 100644 web/src/hooks/setting/index.ts
create mode 100644 web/src/hooks/setting/useDesignSetting.ts
create mode 100644 web/src/hooks/setting/useProjectSetting.ts
create mode 100644 web/src/hooks/use-async.ts
create mode 100644 web/src/hooks/useBattery.ts
create mode 100644 web/src/hooks/useDomWidth.ts
create mode 100644 web/src/hooks/useEcharts.ts
create mode 100644 web/src/hooks/useOnline.ts
create mode 100644 web/src/hooks/useTime.ts
create mode 100644 web/src/hooks/web/useECharts.ts
create mode 100644 web/src/hooks/web/usePage.ts
create mode 100644 web/src/hooks/web/usePermission.ts
create mode 100644 web/src/layout/components/Footer/index.ts
create mode 100644 web/src/layout/components/Footer/index.vue
create mode 100644 web/src/layout/components/Header/PopoverMessage.vue
create mode 100644 web/src/layout/components/Header/ProjectSetting.vue
create mode 100644 web/src/layout/components/Header/components.ts
create mode 100644 web/src/layout/components/Header/index.ts
create mode 100644 web/src/layout/components/Header/index.vue
create mode 100644 web/src/layout/components/Logo/index.ts
create mode 100644 web/src/layout/components/Logo/index.vue
create mode 100644 web/src/layout/components/Main/index.ts
create mode 100644 web/src/layout/components/Main/index.vue
create mode 100644 web/src/layout/components/Menu/index.ts
create mode 100644 web/src/layout/components/Menu/index.vue
create mode 100644 web/src/layout/components/TagsView/index.ts
create mode 100644 web/src/layout/components/TagsView/index.vue
create mode 100644 web/src/layout/index.vue
create mode 100644 web/src/layout/parentLayout.vue
create mode 100644 web/src/main.ts
create mode 100644 web/src/plugins/customComponents.ts
create mode 100644 web/src/plugins/directives.ts
create mode 100644 web/src/plugins/globalMethods.ts
create mode 100644 web/src/plugins/index.ts
create mode 100644 web/src/plugins/naive.ts
create mode 100644 web/src/router/base.ts
create mode 100644 web/src/router/constant.ts
create mode 100644 web/src/router/generator-routers.ts
create mode 100644 web/src/router/index.ts
create mode 100644 web/src/router/modules/about.ts
create mode 100644 web/src/router/modules/comp.ts
create mode 100644 web/src/router/modules/dashboard.ts
create mode 100644 web/src/router/modules/docs.ts
create mode 100644 web/src/router/modules/exception.ts
create mode 100644 web/src/router/modules/form.ts
create mode 100644 web/src/router/modules/frame.ts
create mode 100644 web/src/router/modules/list.ts
create mode 100644 web/src/router/modules/result.ts
create mode 100644 web/src/router/modules/setting.ts
create mode 100644 web/src/router/modules/system.ts
create mode 100644 web/src/router/router-guards.ts
create mode 100644 web/src/router/router-icons.ts
create mode 100644 web/src/router/types.ts
create mode 100644 web/src/settings/animateSetting.ts
create mode 100644 web/src/settings/componentSetting.ts
create mode 100644 web/src/settings/designSetting.ts
create mode 100644 web/src/settings/projectSetting.ts
create mode 100644 web/src/store/index.ts
create mode 100644 web/src/store/modules/asyncRoute.ts
create mode 100644 web/src/store/modules/designSetting.ts
create mode 100644 web/src/store/modules/index.ts
create mode 100644 web/src/store/modules/lockscreen.ts
create mode 100644 web/src/store/modules/notification.ts
create mode 100644 web/src/store/modules/projectSetting.ts
create mode 100644 web/src/store/modules/tabsView.ts
create mode 100644 web/src/store/modules/user.ts
create mode 100644 web/src/store/mutation-types.ts
create mode 100644 web/src/store/types.ts
create mode 100644 web/src/styles/common.less
create mode 100644 web/src/styles/index.less
create mode 100644 web/src/styles/tailwind.css
create mode 100644 web/src/styles/transition/base.less
create mode 100644 web/src/styles/transition/fade.less
create mode 100644 web/src/styles/transition/index.less
create mode 100644 web/src/styles/transition/scale.less
create mode 100644 web/src/styles/transition/scroll.less
create mode 100644 web/src/styles/transition/slide.less
create mode 100644 web/src/styles/transition/zoom.less
create mode 100644 web/src/styles/var.less
create mode 100644 web/src/utils/Drag.ts
create mode 100644 web/src/utils/Storage.ts
create mode 100644 web/src/utils/array.ts
create mode 100644 web/src/utils/browser-type.ts
create mode 100644 web/src/utils/dateUtil.ts
create mode 100644 web/src/utils/domUtils.ts
create mode 100644 web/src/utils/downloadFile.ts
create mode 100644 web/src/utils/env.ts
create mode 100644 web/src/utils/http/axios/Axios.ts
create mode 100644 web/src/utils/http/axios/axiosCancel.ts
create mode 100644 web/src/utils/http/axios/axiosTransform.ts
create mode 100644 web/src/utils/http/axios/checkStatus.ts
create mode 100644 web/src/utils/http/axios/helper.ts
create mode 100644 web/src/utils/http/axios/index.ts
create mode 100644 web/src/utils/http/axios/types.ts
create mode 100644 web/src/utils/index.ts
create mode 100644 web/src/utils/is/index.ts
create mode 100644 web/src/utils/lib/echarts.ts
create mode 100644 web/src/utils/lodashChunk.ts
create mode 100644 web/src/utils/log.ts
create mode 100644 web/src/utils/propTypes.ts
create mode 100644 web/src/utils/urlUtils.ts
create mode 100644 web/src/utils/websocket.ts
create mode 100644 web/src/views/about/index.vue
create mode 100644 web/src/views/apply/attachment/columns.ts
create mode 100644 web/src/views/apply/attachment/index.vue
create mode 100644 web/src/views/apply/notice/columns.ts
create mode 100644 web/src/views/apply/notice/index.vue
create mode 100644 web/src/views/apply/provinces/columns.ts
create mode 100644 web/src/views/apply/provinces/index.vue
create mode 100644 web/src/views/comp/drag/index.vue
create mode 100644 web/src/views/comp/form/basic.vue
create mode 100644 web/src/views/comp/form/useForm.vue
create mode 100644 web/src/views/comp/modal/index.vue
create mode 100644 web/src/views/comp/richtext/vue-quill.vue
create mode 100644 web/src/views/comp/table/CellColumns.ts
create mode 100644 web/src/views/comp/table/basic.vue
create mode 100644 web/src/views/comp/table/basicColumns.ts
create mode 100644 web/src/views/comp/table/editCell.vue
create mode 100644 web/src/views/comp/table/editRow.vue
create mode 100644 web/src/views/comp/table/rowColumns.ts
create mode 100644 web/src/views/comp/upload/index.vue
create mode 100644 web/src/views/dashboard/console/components/FluxTrend.vue
create mode 100644 web/src/views/dashboard/console/components/Icons.ts
create mode 100644 web/src/views/dashboard/console/components/VisiTab.vue
create mode 100644 web/src/views/dashboard/console/components/VisitAmount.vue
create mode 100644 web/src/views/dashboard/console/components/props.ts
create mode 100644 web/src/views/dashboard/console/console.vue
create mode 100644 web/src/views/dashboard/monitor/monitor.vue
create mode 100644 web/src/views/dashboard/workplace/workplace.vue
create mode 100644 web/src/views/develop/code/index.vue
create mode 100644 web/src/views/exception/403.vue
create mode 100644 web/src/views/exception/404.vue
create mode 100644 web/src/views/exception/500.vue
create mode 100644 web/src/views/form/basicForm/index.vue
create mode 100644 web/src/views/form/detail/index.vue
create mode 100644 web/src/views/form/stepForm/Step1.vue
create mode 100644 web/src/views/form/stepForm/Step2.vue
create mode 100644 web/src/views/form/stepForm/Step3.vue
create mode 100644 web/src/views/form/stepForm/stepForm.vue
create mode 100644 web/src/views/frame/docs.vue
create mode 100644 web/src/views/iframe/index.vue
create mode 100644 web/src/views/list/basicList/columns.ts
create mode 100644 web/src/views/list/basicList/index.vue
create mode 100644 web/src/views/list/basicList/info.vue
create mode 100644 web/src/views/log/cron-log/columns.ts
create mode 100644 web/src/views/log/cron-log/index.vue
create mode 100644 web/src/views/log/cron-log/view.vue
create mode 100644 web/src/views/log/ems-log/columns.ts
create mode 100644 web/src/views/log/ems-log/index.vue
create mode 100644 web/src/views/log/ems-log/view.vue
create mode 100644 web/src/views/log/log/columns.ts
create mode 100644 web/src/views/log/log/index.vue
create mode 100644 web/src/views/log/log/view.vue
create mode 100644 web/src/views/log/login-log/columns.ts
create mode 100644 web/src/views/log/login-log/index.vue
create mode 100644 web/src/views/log/login-log/view.vue
create mode 100644 web/src/views/log/sms-log/columns.ts
create mode 100644 web/src/views/log/sms-log/index.vue
create mode 100644 web/src/views/log/sms-log/view.vue
create mode 100644 web/src/views/login/index.vue
create mode 100644 web/src/views/monitor/online/columns.ts
create mode 100644 web/src/views/monitor/online/index.vue
create mode 100644 web/src/views/monitor/serve-log/columns.ts
create mode 100644 web/src/views/monitor/serve-log/index.vue
create mode 100644 web/src/views/monitor/serve-log/view.vue
create mode 100644 web/src/views/monitor/serve-monitor/components/DataItem.vue
create mode 100644 web/src/views/monitor/serve-monitor/components/chart/FullYearSalesChart.vue
create mode 100644 web/src/views/monitor/serve-monitor/components/chart/LoadChart.vue
create mode 100644 web/src/views/monitor/serve-monitor/index.vue
create mode 100644 web/src/views/org/dept/dept.vue
create mode 100644 web/src/views/org/post/columns.ts
create mode 100644 web/src/views/org/post/post.vue
create mode 100644 web/src/views/org/user/columns.ts
create mode 100644 web/src/views/org/user/user.vue
create mode 100644 web/src/views/permission/menu/CreateDrawer.vue
create mode 100644 web/src/views/permission/menu/menu.vue
create mode 100644 web/src/views/permission/role/columns.ts
create mode 100644 web/src/views/permission/role/role.vue
create mode 100644 web/src/views/redirect/index.vue
create mode 100644 web/src/views/result/fail.vue
create mode 100644 web/src/views/result/info.vue
create mode 100644 web/src/views/result/success.vue
create mode 100644 web/src/views/setting/account/BasicSetting.vue
create mode 100644 web/src/views/setting/account/SafetySetting.vue
create mode 100644 web/src/views/setting/account/account.vue
create mode 100644 web/src/views/setting/system/BasicSetting.vue
create mode 100644 web/src/views/setting/system/EmailSetting.vue
create mode 100644 web/src/views/setting/system/RevealSetting.vue
create mode 100644 web/src/views/setting/system/system.vue
create mode 100644 web/src/views/system/account/BasicSetting.vue
create mode 100644 web/src/views/system/account/SafetySetting.vue
create mode 100644 web/src/views/system/account/account.vue
create mode 100644 web/src/views/system/blacklist/columns.ts
create mode 100644 web/src/views/system/blacklist/index.vue
create mode 100644 web/src/views/system/config/BasicSetting.vue
create mode 100644 web/src/views/system/config/EmailSetting.vue
create mode 100644 web/src/views/system/config/RevealSetting.vue
create mode 100644 web/src/views/system/config/ThemeSetting.vue
create mode 100644 web/src/views/system/config/system.vue
create mode 100644 web/src/views/system/cron/columns.ts
create mode 100644 web/src/views/system/cron/index.vue
create mode 100644 web/src/views/system/cron/modal/columns.ts
create mode 100644 web/src/views/system/cron/modal/index.vue
create mode 100644 web/src/views/system/cron/modal/modal.vue
create mode 100644 web/src/views/system/dict/CreateDrawer.vue
create mode 100644 web/src/views/system/dict/columns.ts
create mode 100644 web/src/views/system/dict/index.vue
create mode 100644 web/src/views/system/dict/list.vue
create mode 100644 web/stylelint.config.js
create mode 100644 web/tailwind.config.js
create mode 100644 web/tsconfig.json
create mode 100644 web/types/config.d.ts
create mode 100644 web/types/global.d.ts
create mode 100644 web/types/index.d.ts
create mode 100644 web/types/modules.d.ts
create mode 100644 web/types/utils.d.ts
create mode 100644 web/vite.config.ts
create mode 100644 web/yarn.lock
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..7f6a9bb
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,7 @@
+*.zip
+.idea
+.user.ini
+pull.bat
+push.sh
+/dist
+
diff --git a/.idea/.gitignore b/.idea/.gitignore
deleted file mode 100644
index e7e9d11..0000000
--- a/.idea/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-# Default ignored files
-/workspace.xml
diff --git a/.idea/hotgo.iml b/.idea/hotgo.iml
deleted file mode 100644
index c956989..0000000
--- a/.idea/hotgo.iml
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml
deleted file mode 100644
index 03d9549..0000000
--- a/.idea/inspectionProfiles/Project_Default.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
deleted file mode 100644
index 28a804d..0000000
--- a/.idea/misc.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
deleted file mode 100644
index e0f7a6a..0000000
--- a/.idea/modules.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
deleted file mode 100644
index 94a25f7..0000000
--- a/.idea/vcs.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/README.md b/README.md
index 203a448..17017b6 100644
--- a/README.md
+++ b/README.md
@@ -1,83 +1,247 @@
-# hotgo
+# HotGO-V2
+
-#### HotGo 是一个基于 vue 和 goframe2.0 开发的全栈前后端分离的开发基础平台和移动应用平台,集成jwt鉴权,动态路由,动态菜单,casbin鉴权,消息队列,定时任务等功能,提供多种常用场景文件,让您把更多时间专注在业务开发上。
-## 技术选型
+## 平台简介
+* 基于全新Go Frame 2.0+Vue3+Naive UI开发的全栈前后端分离的管理系统
+* 前端采用naive-ui-admin 、Vue、Naive UI。
-* 后端:用 goframe2.0 快速搭建基础API,goframe2.0 是一个go语言编写的Web框架。
-* 前端:用基于 JeeSite Mobile Uni-App+aidex-sharp 构建基础页面。
-* 数据库:采用MySql(8.0)版本,使用 gorm 实现对数据库的基本操作。
-* 缓存:使用Redis实现记录当前活跃用户的jwt令牌并实现多点登录限制。
-* API文档:使用Swagger构建自动化文档。
-* 消息队列:同时兼容 kafka、redis、rocketmq,一键配置切换到自己想用的MQ。
+## 特征
+* 高生产率:几分钟即可搭建一个后台管理系统
+* 模块化:单应用多系统的模式,将一个完整的应用拆分为多个系统,后续扩展更加便捷,增加代码复用性。
+* 插件化: 可通过插件的方式扩展系统功能
+* 认证机制:采用jwt的用户状态认证及casbin的权限认证
+* 路由模式:得利于goframe2.0提供了规范化的路由注册方式,无需注解自动生成api文档
+* 面向接口开发
-## 系统截图
-#### * web端
-
+## 内置功能
-
+1. 用户管理:用户是系统操作者,该功能主要完成系统用户配置。
+2. 部门管理:配置系统组织机构(公司、部门、岗位),树结构展现支持数据权限。
+3. 岗位管理:配置系统用户所属担任职务。
+4. 菜单管理:配置系统菜单,操作权限,按钮权限标识等。
+5. 角色管理:角色菜单权限分配、设置角色按机构进行数据范围权限划分。
+6. 字典管理:对系统中经常使用的一些较为固定的数据进行维护。
+7. 配置管理:对系统动态配置常用参数。
+8. 操作日志:系统正常操作日志记录和查询;系统异常信息日志记录和查询。
+9. 登录日志:系统登录日志记录查询包含登录异常。
+10. 调度日志:服务端运行所产生的警告、异常、崩溃日志的详细数据和堆栈信息。
+11. 在线用户:当前系统中活跃用户状态监控。
+12. 定时任务:在线(添加、修改、删除)任务调度包含执行结果日志。
+13. 代码生成:前后端代码的生成。
+14. 服务监控:监视当前系统CPU、内存、磁盘、网络、堆栈等相关信息。
+15. 附件管理:文件上传,多种上传方式适配。
+16. 消息队列:同时兼容 kafka、redis、rocketmq,一键配置切换到自己想用的MQ。
+17. 通知公告:采用websocket及时推送在线用户最新公告。
+18. 地区编码:整合国内通用省市区编码,运用于项目于一身。
+19. 常用工具:集成常用的工具包和命令行工具,可以快速开发自定义命令行,多种启动入口。
-
-#### * 移动端
-
-
+> HotGo开源以来得到了大家的很多支持,本项目初衷只为互相学习交流,没有任何盈利性目的!欢迎为HotGO贡献代码或提供建议!
+
+## 演示地址
+- [https://hotgo.facms.cn/admin](https://hotgo.facms.cn/admin)
+> 账号:admin 密码:123456
+
## 环境要求
-- node版本 >= v14.0.0
-- golang版本 >= v1.16
+- node版本 >= v16.0.0
+- golang版本 >= v1.18
+- gf版本 >=2.1
- IDE推荐:Goland
-- mysql版本 >=8.0
-- redis版本 >=5.0
+- mysql版本 >=5.7
+- redis版本 >=3.0
## 快速开始
- 一、拉取代码到你已经安装好以上环境的服务器中
+一、拉取代码到你已经安装好以上环境的服务器中
```shell script
-git clone https://github.com/bufanyun/hotgo.git
+git clone https://github.com/bufanyun/hotgo.git && cd hotgo
```
二、配置你的站点信息
服务端:
- - 创建mysql数据库,将数据库文件导入你的mysql,目录地址:/hotgo-server/storage/hotgo.sql
- - 将/hotgo-server/config/config.example.yaml 改为:config.yaml,并根据你实际环境情况进行配置
+- 项目数据库文件 `resource/data/db.sql` 创建数据库并导入
+- 修改配置 `manifest/config/config.yaml.bak` 复制改为`manifest/config/config.yaml`
-web+uinapp端:
- - 配置服务端地址,包含在一下文件中:
- * hotgo-uniapp/common/config.js
- * /hotgo-uniapp/manifest.json
- * hotgo-uniapp/common/config.js
+其中hotgo配置
+```yaml
+hotgo:
+ debug: true # debug开关,开启后:接口出现错误时会输出堆栈信息,默认为true
+ ipMethod: "cz88" # IP归属地解析方法,可选:cz88|whois,默认为cz88
+ wsAddr: "ws://你的IP:8000/socket" # 客户端websocket连接地址,如果项目在公网,请填写公网IP:运行端口
+ isDemo: false # 是否為演示系統 false | true
+ ssl: # https
+ switch: false # 是否开启https访问,需要配置sslCrtPath、sslKeyPath证书夹
+ crtPath: "resource/ssl/server.crt"
+ keyPath: "resource/ssl/server.key"
+ log: # 全局请求日志
+ switch: true # 日志开关,默认为true
+ queue: true # 是否启用队列,启用时需要配置队列信息,默认为true
+ module: [ "admin", "api", "default" ] # 需要记录的模块
+ skipCode: [ ] # 不记录的状态码,如: ["0", "-1"]
+ admin:
+ superIds: [ 1,2 ] # 后台超管账号ID,通过ID验证超管
+ superRoleKey: "super" # 超管角色唯一标识符,通过角色验证超管
+ defaultPage: 10 # 列表分页默认加载数量
+ defaultPageSize: 1 # 列表分页默认加载页码
+```
+
+后台前端:
+- 配置服务端地址,包含在以下文件中:
+* /hotgo/web/.env.development
+* /hotgo/web/.env.production
+* /hotgo/web/.env
+
+其中必改配置
+```
+VITE_PROXY=[["/admin","http://你的IP:8000/admin"]]
+```
三、 启动服务
服务端:
```shell script
- cd hotgo-server
- go mod tidy #更新包
- go run main.go #启动服务
+ cd server
+
+ # 更新包
+ go mod tidy
+
+ # 查看命令行方法
+ go run main.go
+
+ # 启动所有服务
+ gf run main.go --args "all"
+
+ # 如果顺利,至此到浏览器打开:http://你的IP:8000/admin,即可看到后台登录地址
+ # 登录账号:admin, 密码:123456
+ # 好奇为什么没有运行前端代码就能将后台运行起来?这要得益于gf强大的pack功能!
+ # 当然这只是为了降低运行门槛,如果想对前端进行开发请继续往下看
+
```
web端:
```shell script
-cd hotgo-web
-npm install #安装依赖
-npm run dev #启动web项目
+ cd web
+ # 首先确定你以安装node16.0以上版本并安装了包[npm、yarn],否则可能会出现一些未知报错
+
+ # 安装依赖
+ yarn install
+
+ # 启动web项目
+ npm run dev
+
+ # 如果顺利,至此到浏览器打开:http://你的IP:8001/admin
```
-uinapp端:
-- 1、下载并安装:集成开发环境 HBuilderX (推荐,也可以使用 VSCode 或 WebStorm)
-- 2、菜单:文件 -> 导入 -> 从本地目录导入,选择 “jeesite4-uniapp” 文件夹。
-- 3、菜单:运行 -> 运行到内置浏览器(或运行到浏览器 -> Chrome 浏览器)。
-- 4、等待 HBuliderX 控制台编译完成后,会自动弹出手机登录页面。
-## 特别感谢(以下排名不分先后)
+## 文档地址
+> 文档正在书写中,请耐心等一等。
-* goframe2.0 https://goframe.org
-* JeeSite Mobile Uni-App https://gitee.com/thinkgem/jeesite4-uniapp
-* aidex-sharp https://gitee.com/big-hedgehog/aidex-sharp
-## 开源声明
-* 目前项目还在持续更新中,仅供参考学习,如遇到问题请联系作者下方微信!
+## 演示图
+
+
+
+  |
+  |
+
+
+  |
+  |
+
+
+  |
+  |
+
+
+  |
+  |
+
+
+  |
+  |
+
+
+
+## 感谢(排名不分先后)
+> gf框架 [https://github.com/gogf/gf](https://github.com/gogf/gf)
+>
+> naive-ui [https://www.naiveui.com](https://www.naiveui.com)
+>
+> naive-ui-admin [https://github.com/jekip/naive-ui-admin](https://github.com/jekip/naive-ui-admin)
+>
+> websocket [https://github.com/gorilla/websocket](github.com/gorilla/websocket)
+>
+> casbin [https://github.com/casbin/casbin](https://github.com/casbin/casbin)
+
+
+## 交流QQ群
+交流群①:190966648
+>
+
+
+> 感谢你使用HotGo,公司团队精力时间有限,因此我们不再提供免费的技术服务!
+>
+> 同时您也可以联系我们,雇佣我们团队为您干活,谢谢合作!
+
+
+## 商用说明
+
+> HotGo 是开源免费的,遵循 MIT 开源协议,意味着您无需支付任何费用,也无需授权,即可将它应用到您的产品中。
+
+* 使用本项目必须保留所有版权信息。
+
+* 本项目包含的第三方源码和二进制文件之版权信息另行标注。
+
+* 版权所有Copyright © 2022-2024 by Ms (https://github.com/bufanyun/hotgo)
+
+* All rights reserved。
+
+
+## 免责声明:
+* HotGo为开源学习项目,一切商业行为与HotGo无关。
+
+* 用户不得利用HotGo从事非法行为,用户应当合法合规的使用,发现用户在使用产品时有任何的非法行为,HotGo有权配合有关机关进行调查或向政府部门举报,HotGo不承担用户因非法行为造成的任何法律责任,一切法律责任由用户自行承担,如因用户使用造成第三方损害的,用户应当依法予以赔偿。
+
+* 所有与使用HotGo相关的资源直接风险均由用户承担。
+
+
+#### 如果对您有帮助,您可以点右上角 💘Star💘支持
+
+
+
+## [感谢JetBrains提供的免费GoLand](https://jb.gg/OpenSource)
+[](https://jb.gg/OpenSource)
+
+
+
+
+
-
\ No newline at end of file
diff --git a/hotgo-server/.gitignore b/hotgo-server/.gitignore
deleted file mode 100644
index 2d67c83..0000000
--- a/hotgo-server/.gitignore
+++ /dev/null
@@ -1,21 +0,0 @@
-.DS_Store
-.buildpath
-.hgignore.swp
-.project
-.orig
-.swp
-.idea/
-.settings/
-config/config.yaml
-runtime/log/logger/*.log
-runtime/log/logger/exception/*.log
-runtime/log/logger/queue/*.log
-runtime/log/server/*.log
-runtime/log/server/access/*.log
-runtime/log/server/error/*.log
-bin/
-*/.DS_Store
-.vscode
-main.exe
-main.exe~
-hotgo.exe
\ No newline at end of file
diff --git a/hotgo-server/LICENSE b/hotgo-server/LICENSE
deleted file mode 100644
index d410ffc..0000000
--- a/hotgo-server/LICENSE
+++ /dev/null
@@ -1,21 +0,0 @@
-MIT License
-
-Copyright (c) 2018 john@goframe.org https://goframe.org
-
-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.
\ No newline at end of file
diff --git a/hotgo-server/README.MD b/hotgo-server/README.MD
deleted file mode 100644
index f24827f..0000000
--- a/hotgo-server/README.MD
+++ /dev/null
@@ -1 +0,0 @@
-# hotgo 服务端代码
\ No newline at end of file
diff --git a/hotgo-server/app/com/context_com.go b/hotgo-server/app/com/context_com.go
deleted file mode 100644
index 8f9cb4f..0000000
--- a/hotgo-server/app/com/context_com.go
+++ /dev/null
@@ -1,108 +0,0 @@
-//
-// @Link https://github.com/bufanyun/hotgo
-// @Copyright Copyright (c) 2022 HotGo CLI
-// @Author Ms <133814250@qq.com>
-// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
-//
-package com
-
-import (
- "context"
- "github.com/bufanyun/hotgo/app/consts"
- "github.com/bufanyun/hotgo/app/model"
- "github.com/gogf/gf/v2/net/ghttp"
-)
-
-// 上下文
-var Context = new(comContext)
-
-type comContext struct{}
-
-//
-// @Title 初始化上下文对象指针到上下文对象中,以便后续的请求流程中可以修改
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param r
-// @Param customCtx
-//
-func (component *comContext) Init(r *ghttp.Request, customCtx *model.Context) {
- r.SetCtxVar(consts.ContextKey, customCtx)
-}
-
-//
-// @Title 获得上下文变量,如果没有设置,那么返回nil
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Return *model.Context
-//
-func (component *comContext) Get(ctx context.Context) *model.Context {
- value := ctx.Value(consts.ContextKey)
- if value == nil {
- return nil
- }
- if localCtx, ok := value.(*model.Context); ok {
- return localCtx
- }
- return nil
-}
-
-//
-// @Title 将上下文信息设置到上下文请求中,注意是完整覆盖
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param user
-//
-func (component *comContext) SetUser(ctx context.Context, user *model.Identity) {
- component.Get(ctx).User = user
-}
-
-//
-// @Title 设置组件响应 用于全局日志使用
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param response
-//
-func (component *comContext) SetResponse(ctx context.Context, response *model.Response) {
- component.Get(ctx).ComResponse = response
-}
-
-//
-// @Title 设置应用模块
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param module
-//
-func (component *comContext) SetModule(ctx context.Context, module string) {
- component.Get(ctx).Module = module
-}
-
-//
-// @Title 设置请求耗时
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param module
-//
-func (component *comContext) SetTakeUpTime(ctx context.Context, takeUpTime int64) {
- component.Get(ctx).TakeUpTime = takeUpTime
-}
-
-//
-// @Title 获取用户ID
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Return int
-//
-func (component *comContext) GetUserId(ctx context.Context) int64 {
- user := component.Get(ctx).User
- if user == nil {
- return 0
- }
-
- return user.Id
-}
diff --git a/hotgo-server/app/com/ip_com.go b/hotgo-server/app/com/ip_com.go
deleted file mode 100644
index 174e8c2..0000000
--- a/hotgo-server/app/com/ip_com.go
+++ /dev/null
@@ -1,256 +0,0 @@
-//
-// @Link https://github.com/bufanyun/hotgo
-// @Copyright Copyright (c) 2022 HotGo CLI
-// @Author Ms <133814250@qq.com>
-// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
-//
-package com
-
-import (
- "context"
- "time"
-
- "github.com/axgle/mahonia"
- "github.com/bufanyun/hotgo/app/model/entity"
- "github.com/bufanyun/hotgo/app/utils"
- "github.com/gogf/gf/v2/errors/gerror"
- "github.com/gogf/gf/v2/frame/g"
- "github.com/gogf/gf/v2/text/gstr"
- "github.com/gogf/gf/v2/util/gconv"
- "github.com/kayon/iploc"
-)
-
-// IP归属地
-var Ip = new(ip)
-
-type ip struct{}
-
-type IpLocationData struct {
- Ip string `json:"ip"`
- Country string `json:"country"`
- Region string `json:"region"`
- Province string `json:"province"`
- ProvinceCode int `json:"province_code"`
- City string `json:"city"`
- CityCode int `json:"city_code"`
- Area string `json:"area"`
- AreaCode int `json:"area_code"`
-}
-
-//
-// @Title 通过Whois接口查询IP归属地
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param ip
-// @Return IpLocationData
-//
-func (component *ip) WhoisLocation(ctx context.Context, ip string) IpLocationData {
-
- type whoisRegionData struct {
- Ip string `json:"ip"`
- Pro string `json:"pro" `
- ProCode string `json:"proCode" `
- City string `json:"city" `
- CityCode string `json:"cityCode"`
- Region string `json:"region"`
- RegionCode string `json:"regionCode"`
- Addr string `json:"addr"`
- Err string `json:"err"`
- }
-
- if !utils.Validate.IsIp(ip) {
- return IpLocationData{}
- }
-
- response, err := g.Client().Timeout(10*time.Second).Get(ctx, "http://whois.pconline.com.cn/ipJson.jsp?ip="+ip+"&json=true")
- if err != nil {
- err = gerror.New(err.Error())
- return IpLocationData{
- Ip: ip,
- }
- }
-
- defer response.Close()
-
- var enc mahonia.Decoder
- enc = mahonia.NewDecoder("gbk")
-
- data := enc.ConvertString(response.ReadAllString())
-
- g.Log().Print(ctx, "data:", data)
- whoisData := whoisRegionData{}
- if err := gconv.Struct(data, &whoisData); err != nil {
- err = gerror.New(err.Error())
-
- g.Log().Print(ctx, "err:", err)
- return IpLocationData{
- Ip: ip,
- }
- }
-
- g.Log().Print(ctx, "whoisData:", whoisData)
-
- return IpLocationData{
- Ip: whoisData.Ip,
- //Country string `json:"country"`
- Region: whoisData.Addr,
- Province: whoisData.Pro,
- ProvinceCode: gconv.Int(whoisData.ProCode),
- City: whoisData.City,
- CityCode: gconv.Int(whoisData.CityCode),
- Area: whoisData.Region,
- AreaCode: gconv.Int(whoisData.RegionCode),
- }
-}
-
-//
-// @Title 通过Cz88的IP库查询IP归属地
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param ip
-// @Return IpLocationData
-//
-func (component *ip) Cz88Find(ctx context.Context, ip string) IpLocationData {
- if !utils.Validate.IsIp(ip) {
- g.Log().Print(ctx, "ip格式错误:", ip)
- return IpLocationData{}
- }
-
- loc, err := iploc.OpenWithoutIndexes("./storage/ip/qqwry-utf8.dat")
- if err != nil {
- err = gerror.New(err.Error())
- return IpLocationData{
- Ip: ip,
- }
- }
-
- detail := loc.Find(ip)
- if detail == nil {
- return IpLocationData{
- Ip: ip,
- }
- }
-
- locationData := IpLocationData{
- Ip: ip,
- Country: detail.Country,
- Region: detail.Region,
- Province: detail.Province,
- City: detail.City,
- Area: detail.County,
- }
-
- if gstr.LenRune(locationData.Province) == 0 {
- return locationData
- }
-
- var (
- provinceModel *entity.SysProvinces
- cityModel *entity.SysProvinces
- areaModel *entity.SysProvinces
- )
-
- err = g.DB().Model("hg_sys_provinces").
- Where("level", 1).
- WhereLike("title", "%"+locationData.Province+"%").
- Scan(&provinceModel)
-
- if err != nil {
- err = gerror.New(err.Error())
- return locationData
- }
-
- if provinceModel != nil {
- locationData.ProvinceCode = provinceModel.Id
- locationData.Province = provinceModel.Title
- }
-
- if gstr.LenRune(locationData.City) == 0 {
- return locationData
-
- // 是否为直辖市
- } else if component.IsJurisdictionByIpTitle(locationData.City) {
- locationData.CityCode = provinceModel.Id + 100
- locationData.City = "直辖市"
- } else {
-
- //替换掉
- locationData.City = gstr.Replace(locationData.City, "地区", "")
-
- err = g.DB().Model("hg_sys_provinces").
- Where("level", 2).
- Where("pid", locationData.ProvinceCode).
- WhereLike("title", "%"+locationData.City+"%").
- Scan(&cityModel)
-
- if err != nil {
- err = gerror.New(err.Error())
- return locationData
- }
-
- if cityModel != nil {
- locationData.CityCode = cityModel.Id
- locationData.City = cityModel.Title
- }
- }
-
- if gstr.LenRune(locationData.Area) == 0 {
- return locationData
- }
-
- err = g.DB().Model("hg_sys_provinces").
- Where("level", 3).
- Where("pid", locationData.CityCode).
- WhereLike("title", "%"+locationData.Area+"%").
- Scan(&areaModel)
-
- if err != nil {
- err = gerror.New(err.Error())
- return locationData
- }
-
- if areaModel != nil {
- locationData.AreaCode = areaModel.Id
- locationData.Area = areaModel.Title
- }
-
- return locationData
-}
-
-//
-// @Title 判断地区名称是否为直辖市
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param title
-// @Return bool
-//
-func (component *ip) IsJurisdictionByIpTitle(title string) bool {
-
- lists := []string{"北京市", "天津市", "重庆市", "上海市"}
-
- for i := 0; i < len(lists); i++ {
- if gstr.Contains(lists[i], title) {
- return true
- }
- }
- return false
-}
-
-//
-// @Title 获取IP归属地信息
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param ip
-// @Return IpLocationData
-//
-func (component *ip) GetLocation(ctx context.Context, ip string) IpLocationData {
- method, _ := g.Cfg().Get(ctx, "hotgo.ipMethod", "cz88")
-
- if method.String() == "whois" {
- return component.WhoisLocation(ctx, ip)
- }
- return component.Cz88Find(ctx, ip)
-}
diff --git a/hotgo-server/app/com/jwt_com.go b/hotgo-server/app/com/jwt_com.go
deleted file mode 100644
index 4495023..0000000
--- a/hotgo-server/app/com/jwt_com.go
+++ /dev/null
@@ -1,162 +0,0 @@
-//
-// @Link https://github.com/bufanyun/hotgo
-// @Copyright Copyright (c) 2022 HotGo CLI
-// @Author Ms <133814250@qq.com>
-// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
-//
-package com
-
-import (
- "context"
- "fmt"
- "github.com/bufanyun/hotgo/app/consts"
- "github.com/bufanyun/hotgo/app/model"
- "github.com/dgrijalva/jwt-go"
- "github.com/gogf/gf/v2/crypto/gmd5"
- "github.com/gogf/gf/v2/errors/gerror"
- "github.com/gogf/gf/v2/frame/g"
- "github.com/gogf/gf/v2/net/ghttp"
- "github.com/gogf/gf/v2/text/gstr"
- "github.com/gogf/gf/v2/util/gconv"
- "time"
-)
-
-// jwt鉴权
-type JWT struct{}
-
-var Jwt = new(JWT)
-
-//
-// @Title 为指定用户生成token
-// @Description 主要用于登录成功的jwt鉴权绑定
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param user 用户信息
-// @Param isRefresh 是否是刷新token
-// @Return interface{}
-// @Return error
-//
-func (component *JWT) GenerateLoginToken(ctx context.Context, user *model.Identity, isRefresh bool) (interface{}, error) {
-
- jwtVersion, _ := g.Cfg().Get(ctx, "jwt.version", "1.0")
- jwtSign, _ := g.Cfg().Get(ctx, "jwt.sign", "hotGo")
-
- token := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{
- "id": user.Id,
- "username": user.Username,
- "realname": user.Realname,
- "avatar": user.Avatar,
- "email": user.Email,
- "mobile": user.Mobile,
- "last_time": user.LastTime,
- "last_ip": user.LastIp,
- "exp": user.Exp,
- "expires": user.Expires,
- "app": user.App,
- "role": user.Role,
- "visit_count": user.VisitCount,
- "is_refresh": isRefresh,
- "jwt_version": jwtVersion.String(),
- })
-
- tokenString, err := token.SignedString(jwtSign.Bytes())
- if err != nil {
- err := gerror.New(err.Error())
- return nil, err
- }
-
- tokenStringMd5 := gmd5.MustEncryptString(tokenString)
-
- // TODO 绑定登录token
- cache := Cache.New()
- key := consts.RedisJwtToken + tokenStringMd5
-
- // TODO 将有效期转为持续时间,单位:秒
- expires, _ := time.ParseDuration(fmt.Sprintf("+%vs", user.Expires))
-
- err = cache.Set(ctx, key, tokenString, expires)
- if err != nil {
- err := gerror.New(err.Error())
- return nil, err
- }
- _ = cache.Set(ctx, consts.RedisJwtUserBind+user.App+":"+gconv.String(user.Id), key, expires)
-
- return tokenString, err
-}
-
-//
-// @Title 解析token
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param tokenString
-// @Param secret
-// @Return jwt.MapClaims
-// @Return error
-//
-func (component *JWT) ParseToken(tokenString string, secret []byte) (jwt.MapClaims, error) {
- if tokenString == "" {
- err := gerror.New("token 为空")
- return nil, err
- }
- token, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) {
-
- if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok {
- return nil, fmt.Errorf("Unexpected signing method: %v", token.Header["alg"])
- }
- return secret, nil
- })
-
- if token == nil {
- err := gerror.New("token不存在")
- return nil, err
- }
-
- if claims, ok := token.Claims.(jwt.MapClaims); ok && token.Valid {
- return claims, nil
- } else {
- return nil, err
- }
-}
-
-/**
-token有效正确返回用户id
-*/
-//func(component *JWT) VerifyLoginToken(tokenString string) (uint, err error) {
-// //if tokenString == "" {
-// // err = gerror.New("token不能为空")
-// // return 0, err
-// //}
-//
-//}
-
-//
-// @Title 获取 authorization
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param r
-// @Return string
-//
-func (component *JWT) GetAuthorization(r *ghttp.Request) string {
-
- // TODO 默认从请求头获取
- var authorization = r.Header.Get("Authorization")
-
- // TODO 如果请求头不存在则从get参数获取
- if authorization == "" {
- return r.Get("authorization").String()
- }
-
- return gstr.Replace(authorization, "Bearer ", "")
-}
-
-/**
-清掉所以的相关的redis
-*/
-func (component *JWT) Layout(adminUserId int, tokenString string) {
- if tokenString == "" {
- return
- }
- //g.Redis().Do("HDEL", "VerifyLoginToken", gmd5.MustEncryptString(tokenString))
- //// 删除
- //g.Redis().Do("HDEL", "VerifyLoginTokenAdminUserId", adminUserId)
-}
diff --git a/hotgo-server/app/com/redis_com.go b/hotgo-server/app/com/redis_com.go
deleted file mode 100644
index 26dab5a..0000000
--- a/hotgo-server/app/com/redis_com.go
+++ /dev/null
@@ -1,83 +0,0 @@
-//
-// @Link https://github.com/bufanyun/hotgo
-// @Copyright Copyright (c) 2022 HotGo CLI
-// @Author Ms <133814250@qq.com>
-// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
-//
-package com
-
-import (
- "context"
- "github.com/gogf/gf/v2/container/gvar"
- "github.com/gogf/gf/v2/database/gredis"
- "github.com/gogf/gf/v2/errors/gerror"
- "github.com/gogf/gf/v2/frame/g"
- "github.com/gogf/gf/v2/util/gconv"
-)
-
-var Redis = new(redis)
-
-type redis struct{}
-
-//
-// @Title 实例化redis
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param name
-// @Return *gredis.Redis
-//
-func (component *redis) Instance(name ...string) *gredis.Redis {
- return g.Redis(name...)
-}
-
-//
-// @Title 获取
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param key
-// @Return *gvar.Var
-// @Return error
-//
-func (component *redis) Get(ctx context.Context, key string) (*gvar.Var, error) {
- data, err := Redis.Instance().Do(ctx, "GET", key)
- if err != nil {
- err := gerror.New(err.Error())
- return nil, err
- }
-
- return data, nil
-}
-
-//
-// @Title 设置
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param key
-// @Param value
-// @Param expire
-// @Return *gvar.Var
-// @Return error
-//
-func (component *redis) Set(ctx context.Context, key string, value string, expire interface{}) (*gvar.Var, error) {
-
- redisInstance := Redis.Instance()
- response, err := redisInstance.Do(ctx, "SET", key, value)
- if err != nil {
- err := gerror.New(err.Error())
- return nil, err
- }
-
- exp := gconv.Int(expire)
- // TODO 设置有效期
- if exp > 0 {
- _, err = redisInstance.Do(ctx, "EXPIRE", key, exp)
- if err != nil {
- err := gerror.New(err.Error())
- return nil, err
- }
- }
-
- return response, nil
-}
diff --git a/hotgo-server/app/com/response_com.go b/hotgo-server/app/com/response_com.go
deleted file mode 100644
index 782a690..0000000
--- a/hotgo-server/app/com/response_com.go
+++ /dev/null
@@ -1,122 +0,0 @@
-//
-// @Link https://github.com/bufanyun/hotgo
-// @Copyright Copyright (c) 2022 HotGo CLI
-// @Author Ms <133814250@qq.com>
-// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
-//
-package com
-
-import (
- "github.com/bufanyun/hotgo/app/consts"
- "github.com/bufanyun/hotgo/app/model"
- "github.com/gogf/gf/v2/frame/g"
- "github.com/gogf/gf/v2/net/ghttp"
- "time"
-)
-
-// 统一响应
-var Response = new(response)
-
-type response struct{}
-
-//
-// @Title 返回JSON数据并退出当前HTTP执行函数
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param r
-// @Param code
-// @Param message
-// @Param data
-//
-func (component *response) JsonExit(r *ghttp.Request, code int, message string, data ...interface{}) {
- component.RJson(r, code, message, data...)
- r.Exit()
-}
-
-//
-// @Title 标准返回结果数据结构封装
-// @Description 返回固定数据结构的JSON
-// @Author Ms <133814250@qq.com>
-// @Param r
-// @Param code 状态码(200:成功,302跳转,和http请求状态码一至)
-// @Param message 请求结果信息
-// @Param data 请求结果,根据不同接口返回结果的数据结构不同
-//
-func (component *response) RJson(r *ghttp.Request, code int, message string, data ...interface{}) {
- responseData := interface{}(nil)
- if len(data) > 0 {
- responseData = data[0]
- }
- Res := &model.Response{
- Code: code,
- Message: message,
- Timestamp: time.Now().Unix(),
- ReqId: Context.Get(r.Context()).ReqId,
- }
-
- // TODO 如果不是正常的返回,则将data转为error
- if consts.CodeOK == code {
- Res.Data = responseData
- } else {
- Res.Error = responseData
- }
-
- // TODO 清空响应
- r.Response.ClearBuffer()
-
- // TODO 写入响应
- if err := r.Response.WriteJson(Res); err != nil {
- g.Log().Error(r.Context(), "响应异常:", err)
- }
-
- // TODO 加入到上下文
- Context.SetResponse(r.Context(), Res)
-}
-
-//
-// @Title 返回成功JSON
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param isExit
-// @Param r
-// @Param message
-// @Param data
-//
-func (component *response) SusJson(isExit bool, r *ghttp.Request, message string, data ...interface{}) {
- if isExit {
- component.JsonExit(r, consts.CodeOK, message, data...)
- }
- component.RJson(r, consts.CodeOK, message, data...)
-}
-
-//
-// @Title 返回失败JSON
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param isExit
-// @Param r
-// @Param message
-// @Param data
-//
-func (component *response) FailJson(isExit bool, r *ghttp.Request, message string, data ...interface{}) {
- if isExit {
- component.JsonExit(r, consts.CodeNil, message, data...)
- }
- component.RJson(r, consts.CodeNil, message, data...)
-}
-
-//
-// @Title 重定向
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param r
-// @Param location
-// @Param code
-//
-func (component *response) Redirect(r *ghttp.Request, location string, code ...int) {
- r.Response.RedirectTo(location, code...)
-}
-
-func (component *response) Download(r *ghttp.Request, location string, code ...int) {
- r.Response.ServeFileDownload("test.txt")
-}
diff --git a/hotgo-server/app/consts/debris_consts.go b/hotgo-server/app/consts/debris_consts.go
deleted file mode 100644
index 44e5dc4..0000000
--- a/hotgo-server/app/consts/debris_consts.go
+++ /dev/null
@@ -1,8 +0,0 @@
-package consts
-
-// 碎片
-const (
-
- // 默认分页
- DebrisPageSize = 10
-)
diff --git a/hotgo-server/app/controller/adminController/config_controller.go b/hotgo-server/app/controller/adminController/config_controller.go
deleted file mode 100644
index 4788395..0000000
--- a/hotgo-server/app/controller/adminController/config_controller.go
+++ /dev/null
@@ -1,173 +0,0 @@
-package adminController
-
-import (
- "context"
- "github.com/bufanyun/hotgo/app/form/adminForm"
- "github.com/bufanyun/hotgo/app/form/input"
- "github.com/bufanyun/hotgo/app/service/sysService"
- "github.com/gogf/gf/v2/util/gconv"
-)
-
-// 配置
-var Config = config{}
-
-type config struct{}
-
-//
-// @Title 名称是否唯一
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return res
-// @Return err
-//
-func (controller *config) GetValue(ctx context.Context, req *adminForm.ConfigGetValueReq) (*adminForm.ConfigGetValueRes, error) {
-
- data, err := sysService.Config.GetValue(ctx, input.SysConfigGetValueInp{Key: req.Key})
- if err != nil {
- return nil, err
- }
-
- var res adminForm.ConfigGetValueRes
- res.Value = data.Value
- return &res, nil
-}
-
-//
-// @Title 名称是否唯一
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return res
-// @Return err
-//
-func (controller *config) NameUnique(ctx context.Context, req *adminForm.ConfigNameUniqueReq) (*adminForm.ConfigNameUniqueRes, error) {
-
- data, err := sysService.Config.NameUnique(ctx, input.SysConfigNameUniqueInp{Id: req.Id, Name: req.Name})
- if err != nil {
- return nil, err
- }
-
- var res adminForm.ConfigNameUniqueRes
- res.IsUnique = data.IsUnique
- return &res, nil
-}
-
-//
-// @Title 删除
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return res
-// @Return err
-//
-func (controller *config) Delete(ctx context.Context, req *adminForm.ConfigDeleteReq) (res *adminForm.ConfigDeleteRes, err error) {
- var in input.SysConfigDeleteInp
- if err = gconv.Scan(req, &in); err != nil {
- return nil, err
- }
- if err = sysService.Config.Delete(ctx, in); err != nil {
- return nil, err
- }
- return res, nil
-}
-
-//
-// @Title 修改/新增
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return res
-// @Return err
-//
-func (controller *config) Edit(ctx context.Context, req *adminForm.ConfigEditReq) (res *adminForm.ConfigEditRes, err error) {
-
- var in input.SysConfigEditInp
- if err = gconv.Scan(req, &in); err != nil {
- return nil, err
- }
- if err = sysService.Config.Edit(ctx, in); err != nil {
- return nil, err
- }
-
- return res, nil
-}
-
-//
-// @Title 最大排序
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return res
-// @Return err
-//
-func (controller *config) MaxSort(ctx context.Context, req *adminForm.ConfigMaxSortReq) (*adminForm.ConfigMaxSortRes, error) {
-
- data, err := sysService.Config.MaxSort(ctx, input.SysConfigMaxSortInp{Id: req.Id})
- if err != nil {
- return nil, err
- }
-
- var res adminForm.ConfigMaxSortRes
- res.Sort = data.Sort
- return &res, nil
-}
-
-//
-// @Title 获取指定信息
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return res
-// @Return err
-//
-func (controller *config) View(ctx context.Context, req *adminForm.ConfigViewReq) (*adminForm.ConfigViewRes, error) {
-
- data, err := sysService.Config.View(ctx, input.SysConfigViewInp{Id: req.Id})
- if err != nil {
- return nil, err
- }
-
- var res adminForm.ConfigViewRes
- res.SysConfigViewModel = data
- return &res, nil
-}
-
-//
-// @Title 查看列表
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return res
-// @Return err
-//
-func (controller *config) List(ctx context.Context, req *adminForm.ConfigListReq) (*adminForm.ConfigListRes, error) {
-
- var (
- in input.SysConfigListInp
- res adminForm.ConfigListRes
- )
-
- if err := gconv.Scan(req, &in); err != nil {
- return nil, err
- }
-
- list, totalCount, err := sysService.Config.List(ctx, in)
- if err != nil {
- return nil, err
- }
-
- res.List = list
- res.TotalCount = totalCount
- res.Limit = req.Page
- res.Limit = req.Limit
-
- return &res, nil
-}
diff --git a/hotgo-server/app/controller/adminController/dept_controller.go b/hotgo-server/app/controller/adminController/dept_controller.go
deleted file mode 100644
index 47dc548..0000000
--- a/hotgo-server/app/controller/adminController/dept_controller.go
+++ /dev/null
@@ -1,177 +0,0 @@
-package adminController
-
-import (
- "context"
- "github.com/bufanyun/hotgo/app/form/adminForm"
- "github.com/bufanyun/hotgo/app/form/input"
- "github.com/bufanyun/hotgo/app/service/adminService"
- "github.com/gogf/gf/v2/util/gconv"
-)
-
-// 部门
-var Dept = dept{}
-
-type dept struct{}
-
-//
-// @Title 名称是否唯一
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return res
-// @Return err
-//
-func (controller *dept) NameUnique(ctx context.Context, req *adminForm.DeptNameUniqueReq) (*adminForm.DeptNameUniqueRes, error) {
-
- data, err := adminService.Dept.NameUnique(ctx, input.AdminDeptNameUniqueInp{Id: req.Id, Name: req.Name})
- if err != nil {
- return nil, err
- }
-
- var res adminForm.DeptNameUniqueRes
- res.IsUnique = data.IsUnique
- return &res, nil
-}
-
-//
-// @Title 删除
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return res
-// @Return err
-//
-func (controller *dept) Delete(ctx context.Context, req *adminForm.DeptDeleteReq) (res *adminForm.DeptDeleteRes, err error) {
- var in input.AdminDeptDeleteInp
- if err = gconv.Scan(req, &in); err != nil {
- return nil, err
- }
- if err = adminService.Dept.Delete(ctx, in); err != nil {
- return nil, err
- }
- return res, nil
-}
-
-//
-// @Title 修改/新增
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return res
-// @Return err
-//
-func (controller *dept) Edit(ctx context.Context, req *adminForm.DeptEditReq) (res *adminForm.DeptEditRes, err error) {
-
- var in input.AdminDeptEditInp
- if err = gconv.Scan(req, &in); err != nil {
- return nil, err
- }
- if err = adminService.Dept.Edit(ctx, in); err != nil {
- return nil, err
- }
-
- return res, nil
-}
-
-//
-// @Title 最大排序
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return res
-// @Return err
-//
-func (controller *dept) MaxSort(ctx context.Context, req *adminForm.DeptMaxSortReq) (*adminForm.DeptMaxSortRes, error) {
-
- data, err := adminService.Dept.MaxSort(ctx, input.AdminDeptMaxSortInp{Id: req.Id})
- if err != nil {
- return nil, err
- }
-
- var res adminForm.DeptMaxSortRes
- res.Sort = data.Sort
- return &res, nil
-}
-
-//
-// @Title 获取指定信息
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return res
-// @Return err
-//
-func (controller *dept) View(ctx context.Context, req *adminForm.DeptViewReq) (*adminForm.DeptViewRes, error) {
-
- data, err := adminService.Dept.View(ctx, input.AdminDeptViewInp{Id: req.Id})
- if err != nil {
- return nil, err
- }
-
- var res adminForm.DeptViewRes
- res.AdminDeptViewModel = data
- return &res, nil
-}
-
-//
-// @Title 查看列表
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return res
-// @Return err
-//
-func (controller *dept) List(ctx context.Context, req *adminForm.DeptListReq) (*adminForm.DeptListRes, error) {
-
- var (
- in input.AdminDeptListInp
- res adminForm.DeptListRes
- )
-
- if err := gconv.Scan(req, &in); err != nil {
- return nil, err
- }
- data, err := adminService.Dept.List(ctx, in)
- if err != nil {
- return nil, err
- }
-
- _ = gconv.Structs(data, &res)
-
- return &res, nil
-}
-
-//
-// @Title 查看列表树
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return res
-// @Return err
-//
-func (controller *dept) ListTree(ctx context.Context, req *adminForm.DeptListTreeReq) (*adminForm.DeptListTreeRes, error) {
-
- var (
- in input.AdminDeptListTreeInp
- res adminForm.DeptListTreeRes
- )
-
- if err := gconv.Scan(req, &in); err != nil {
- return nil, err
- }
- data, err := adminService.Dept.ListTree(ctx, in)
- if err != nil {
- return nil, err
- }
-
- _ = gconv.Structs(data, &res)
-
- return &res, nil
-}
diff --git a/hotgo-server/app/controller/adminController/dict_controller.go b/hotgo-server/app/controller/adminController/dict_controller.go
deleted file mode 100644
index 6b286fa..0000000
--- a/hotgo-server/app/controller/adminController/dict_controller.go
+++ /dev/null
@@ -1,253 +0,0 @@
-package adminController
-
-import (
- "context"
- "github.com/bufanyun/hotgo/app/form/adminForm"
- "github.com/bufanyun/hotgo/app/service/sysService"
-)
-
-// 字典
-var Dict = dict{}
-
-type dict struct{}
-
-//
-// @Title 数据键值是否唯一
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return res
-// @Return err
-//
-func (controller *dict) DataUnique(ctx context.Context, req *adminForm.DictDataUniqueReq) (res *adminForm.DictDataUniqueRes, err error) {
-
- res, err = sysService.Dict.DataUnique(ctx, req)
- if err != nil {
- return nil, err
- }
- return res, nil
-}
-
-//
-// @Title 查询字典数据最大排序
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return res
-// @Return err
-//
-func (controller *dict) DataMaxSort(ctx context.Context, req *adminForm.DictDataMaxSortReq) (res *adminForm.DictDataMaxSortRes, err error) {
-
- res, err = sysService.Dict.DataMaxSort(ctx, req)
- if err != nil {
- return nil, err
- }
- return res, nil
-}
-
-//
-// @Title 删除字典数据
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return res
-// @Return err
-//
-func (controller *dict) DataDelete(ctx context.Context, req *adminForm.DictDataDeleteReq) (res *adminForm.DictDataDeleteRes, err error) {
-
- if err = sysService.Dict.DataDelete(ctx, req); err != nil {
- return nil, err
- }
- return res, nil
-}
-
-//
-// @Title 修改/新增字典数据
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return res
-// @Return err
-//
-func (controller *dict) DataEdit(ctx context.Context, req *adminForm.DictDataEditReq) (res *adminForm.DictDataEditRes, err error) {
-
- if err = sysService.Dict.DataEdit(ctx, req); err != nil {
- return nil, err
- }
- return res, nil
-}
-
-//
-// @Title 获取指定字典类型信息
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return res
-// @Return err
-//
-func (controller *dict) DataView(ctx context.Context, req *adminForm.DictDataViewReq) (res *adminForm.DictDataViewRes, err error) {
-
- res, err = sysService.Dict.DataView(ctx, req)
- if err != nil {
- return nil, err
- }
- return res, nil
-}
-
-//
-// @Title 获取字典数据列表
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return res
-// @Return err
-//
-func (controller *dict) DataList(ctx context.Context, req *adminForm.DictDataListReq) (res *adminForm.DictDataListRes, err error) {
-
- res, err = sysService.Dict.DataList(ctx, req)
- if err != nil {
- return nil, err
- }
- return res, nil
-}
-
-//
-// @Title 获取指定字典类型的属性数据
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return res
-// @Return err
-//
-func (controller *dict) Attribute(ctx context.Context, req *adminForm.DictAttributeReq) (res *adminForm.DictAttributeRes, err error) {
-
- res, err = sysService.Dict.Attribute(ctx, req)
- if err != nil {
- return nil, err
- }
- return res, nil
-}
-
-//
-// @Title 导出字典类型
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return res
-// @Return err
-//
-func (controller *dict) TypeExport(ctx context.Context, req *adminForm.DictTypeExportReq) (res *adminForm.DictTypeExportRes, err error) {
- if err = sysService.Dict.TypeExport(ctx, req); err != nil {
- return nil, err
- }
- return
-}
-
-//
-// @Title 刷新字典缓存
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return res
-// @Return err
-//
-func (controller *dict) TypeRefreshCache(ctx context.Context, req *adminForm.DictTypeRefreshCacheReq) (res *adminForm.DictTypeRefreshCacheRes, err error) {
- return nil, nil
-}
-
-//
-// @Title 删除字典类型
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return res
-// @Return err
-//
-func (controller *dict) TypeDelete(ctx context.Context, req *adminForm.DictTypeDeleteReq) (res *adminForm.DictTypeDeleteRes, err error) {
-
- if err = sysService.Dict.TypeDelete(ctx, req); err != nil {
- return nil, err
- }
- return res, nil
-}
-
-//
-// @Title 修改/新增字典类型
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return res
-// @Return err
-//
-func (controller *dict) TypeEdit(ctx context.Context, req *adminForm.DictTypeEditReq) (res *adminForm.DictTypeEditRes, err error) {
-
- if err = sysService.Dict.TypeEdit(ctx, req); err != nil {
- return nil, err
- }
- return res, nil
-}
-
-//
-// @Title 类型是否唯一
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return res
-// @Return err
-//
-func (controller *dict) TypeUnique(ctx context.Context, req *adminForm.DictTypeUniqueReq) (res *adminForm.DictTypeUniqueRes, err error) {
-
- res, err = sysService.Dict.TypeUnique(ctx, req)
- if err != nil {
- return nil, err
- }
- return res, nil
-}
-
-//
-// @Title 获取指定字典类型信息
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return res
-// @Return err
-//
-func (controller *dict) TypeView(ctx context.Context, req *adminForm.DictTypeViewReq) (res *adminForm.DictTypeViewRes, err error) {
-
- res, err = sysService.Dict.TypeView(ctx, req)
- if err != nil {
- return nil, err
- }
- return res, nil
-}
-
-//
-// @Title 获取字典类型列表
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return res
-// @Return err
-//
-func (controller *dict) TypeList(ctx context.Context, req *adminForm.DictTypeListReq) (res *adminForm.DictTypeListRes, err error) {
-
- res, err = sysService.Dict.TypeList(ctx, req)
- if err != nil {
- return nil, err
- }
- return res, nil
-}
diff --git a/hotgo-server/app/controller/adminController/log_controller.go b/hotgo-server/app/controller/adminController/log_controller.go
deleted file mode 100644
index b400f1e..0000000
--- a/hotgo-server/app/controller/adminController/log_controller.go
+++ /dev/null
@@ -1,96 +0,0 @@
-package adminController
-
-import (
- "context"
- "github.com/bufanyun/hotgo/app/form/adminForm"
- "github.com/bufanyun/hotgo/app/form/input"
- "github.com/bufanyun/hotgo/app/service/sysService"
- "github.com/gogf/gf/v2/errors/gerror"
-)
-
-// 日志
-var Log = log{}
-
-type log struct{}
-
-//
-// @Title 清空日志
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return res
-// @Return err
-//
-func (controller *log) Clear(ctx context.Context, req *adminForm.LogClearReq) (res *adminForm.LogClearRes, err error) {
- err = gerror.New("考虑安全,请到数据库清空")
- return
-}
-
-//
-// @Title 导出
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return res
-// @Return err
-//
-func (controller *log) Export(ctx context.Context, req *adminForm.LogExportReq) (res *adminForm.LogExportRes, err error) {
-
- err = sysService.Log.Export(ctx, input.LogListInp{
- Page: req.Page,
- Limit: req.Limit,
- Module: req.Module,
- Method: req.Method,
- Url: req.Url,
- Ip: req.Ip,
- ErrorCode: req.ErrorCode,
- StartTime: req.StartTime,
- EndTime: req.EndTime,
- MemberId: req.MemberId,
- TakeUpTime: req.TakeUpTime,
- })
- if err != nil {
- return nil, err
- }
-
- return
-}
-
-//
-// @Title 获取全局日志列表
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return res
-// @Return err
-//
-func (controller *log) List(ctx context.Context, req *adminForm.LogListReq) (*adminForm.LogListRes, error) {
-
- list, totalCount, err := sysService.Log.List(ctx, input.LogListInp{
- Page: req.Page,
- Limit: req.Limit,
- Module: req.Module,
- Method: req.Method,
- Url: req.Url,
- Ip: req.Ip,
- ErrorCode: req.ErrorCode,
- StartTime: req.StartTime,
- EndTime: req.EndTime,
- MemberId: req.MemberId,
- TakeUpTime: req.TakeUpTime,
- })
- if err != nil {
- return nil, err
- }
-
- var res adminForm.LogListRes
- res.List = list
- res.TotalCount = totalCount
- res.Limit = req.Page
- res.Limit = req.Limit
-
- return &res, nil
-}
diff --git a/hotgo-server/app/controller/adminController/login_controller.go b/hotgo-server/app/controller/adminController/login_controller.go
deleted file mode 100644
index b41a507..0000000
--- a/hotgo-server/app/controller/adminController/login_controller.go
+++ /dev/null
@@ -1,104 +0,0 @@
-//
-// @Link https://github.com/bufanyun/hotgo
-// @Copyright Copyright (c) 2022 HotGo CLI
-// @Author Ms <133814250@qq.com>
-// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
-//
-package adminController
-
-import (
- "context"
- "github.com/bufanyun/hotgo/app/com"
- "github.com/bufanyun/hotgo/app/consts"
- "github.com/bufanyun/hotgo/app/form/adminForm"
- "github.com/bufanyun/hotgo/app/form/input"
- "github.com/bufanyun/hotgo/app/service/adminService"
- "github.com/gogf/gf/v2/crypto/gmd5"
- "github.com/gogf/gf/v2/errors/gerror"
- "github.com/gogf/gf/v2/util/gconv"
-)
-
-var Login = login{}
-
-type login struct{}
-
-//
-// @Title 登录验证码
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return res
-// @Return err
-//
-func (controller *login) Captcha(ctx context.Context, req *adminForm.LoginCaptchaReq) (res *adminForm.LoginCaptchaRes, err error) {
-
- // TODO 获取生成的验证码图片
- Cid, Base64 := com.Captcha.GetVerifyImgString(ctx)
- res = &adminForm.LoginCaptchaRes{Cid: Cid, Base64: Base64}
-
- return
-}
-
-//
-// @Title 提交登录
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return res
-// @Return err
-//
-func (controller *login) Sign(ctx context.Context, req *adminForm.LoginReq) (res *adminForm.LoginRes, err error) {
-
- //// 校验 验证码
- //if !com.Captcha.VerifyString(req.Cid, req.Code) {
- // err = gerror.New("验证码错误")
- // return
- //}
-
- var in input.AdminMemberLoginSignInp
- if err = gconv.Scan(req, &in); err != nil {
- return nil, err
- }
-
- model, err := adminService.Member.Login(ctx, in)
- if err != nil {
- return nil, err
- }
-
- if err = gconv.Scan(model, &res); err != nil {
- return nil, err
- }
- return
-}
-
-//
-// @Title 注销登录
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return res
-// @Return err
-//
-func (controller *login) Logout(ctx context.Context, req *adminForm.LoginLogoutReq) (res *adminForm.LoginLogoutRes, err error) {
-
- var authorization = com.Jwt.GetAuthorization(com.Context.Get(ctx).Request)
-
- // TODO 获取jwtToken
- jwtToken := consts.RedisJwtToken + gmd5.MustEncryptString(authorization)
- if len(jwtToken) == 0 {
- err = gerror.New("当前用户未登录!")
- return res, err
- }
-
- // TODO 删除登录token
- cache := com.Cache.New()
- _, err = cache.Remove(ctx, jwtToken)
- if err != nil {
- return res, err
- }
-
- return
-}
diff --git a/hotgo-server/app/controller/adminController/member_controller.go b/hotgo-server/app/controller/adminController/member_controller.go
deleted file mode 100644
index 31f6042..0000000
--- a/hotgo-server/app/controller/adminController/member_controller.go
+++ /dev/null
@@ -1,372 +0,0 @@
-//
-// @Link https://github.com/bufanyun/hotgo
-// @Copyright Copyright (c) 2022 HotGo CLI
-// @Author Ms <133814250@qq.com>
-// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
-//
-package adminController
-
-import (
- "context"
- "github.com/bufanyun/hotgo/app/com"
- "github.com/bufanyun/hotgo/app/form/adminForm"
- "github.com/bufanyun/hotgo/app/form/input"
- "github.com/bufanyun/hotgo/app/service/adminService"
- "github.com/gogf/gf/v2/errors/gerror"
- "github.com/gogf/gf/v2/util/gconv"
-)
-
-// 会员
-var Member = member{}
-
-type member struct{}
-
-//
-// @Title 修改登录密码
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return res
-// @Return err
-//
-func (controller *member) UpdateProfile(ctx context.Context, req *adminForm.MemberUpdateProfileReq) (res *adminForm.MemberUpdateProfileRes, err error) {
-
- var in input.AdminMemberUpdateProfileInp
- if err = gconv.Scan(req, &in); err != nil {
- return nil, err
- }
-
- if err = adminService.Member.UpdateProfile(ctx, in); err != nil {
- return nil, err
- }
-
- return
-}
-
-//
-// @Title 修改登录密码
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return res
-// @Return err
-//
-func (controller *member) UpdatePwd(ctx context.Context, req *adminForm.MemberUpdatePwdReq) (res *adminForm.MemberUpdatePwdRes, err error) {
-
- memberId := com.Context.Get(ctx).User.Id
- if memberId <= 0 {
- err := gerror.New("获取用户信息失败!")
- return nil, err
- }
-
- if err = adminService.Member.
- UpdatePwd(ctx, input.AdminMemberUpdatePwdInp{Id: memberId, OldPassword: req.OldPassword, NewPassword: req.NewPassword}); err != nil {
- return nil, err
- }
-
- return
-}
-
-//
-// @Title 获取登录用户的基本信息
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return res
-// @Return err
-//
-func (controller *member) Profile(ctx context.Context, req *adminForm.MemberProfileReq) (*adminForm.MemberProfileRes, error) {
-
- var res adminForm.MemberProfileRes
-
- memberId := com.Context.Get(ctx).User.Id
- if memberId <= 0 {
- err := gerror.New("获取用户信息失败!")
- return nil, err
- }
-
- // TODO 用户基本信息
- memberInfo, err := adminService.Member.View(ctx, input.AdminMemberViewInp{Id: memberId})
- if err != nil {
- return nil, err
- }
- res.User = memberInfo
-
- // TODO 所在部门
- sysDept, err := adminService.Dept.View(ctx, input.AdminDeptViewInp{Id: memberInfo.DeptId})
- if err != nil {
- return nil, err
- }
- res.SysDept = sysDept
-
- // TODO 角色列表
- sysRoles, err := adminService.Role.GetMemberList(ctx, memberInfo.Role)
- if err != nil {
- return nil, err
- }
- res.SysRoles = sysRoles
-
- // TODO 获取角色名称
- roleGroup, err := adminService.Role.GetName(ctx, memberInfo.Role)
- if err != nil {
- return nil, err
- }
- res.RoleGroup = roleGroup
-
- // TODO 获取第一岗位名称
- postGroup, err := adminService.Post.GetMemberByStartName(ctx, memberInfo.Id)
- if err != nil {
- return nil, err
- }
- res.PostGroup = postGroup
-
- return &res, nil
-}
-
-//
-// @Title 重置密码
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return res
-// @Return err
-//
-func (controller *member) ResetPwd(ctx context.Context, req *adminForm.MemberResetPwdReq) (res *adminForm.MemberResetPwdRes, err error) {
-
- if err = adminService.Member.
- ResetPwd(ctx, input.AdminMemberResetPwdInp{Id: req.Id, Password: req.Password}); err != nil {
- return nil, err
- }
-
- return
-}
-
-//
-// @Title 邮箱是否唯一
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return res
-// @Return err
-//
-func (controller *member) EmailUnique(ctx context.Context, req *adminForm.MemberEmailUniqueReq) (*adminForm.MemberEmailUniqueRes, error) {
-
- data, err := adminService.Member.EmailUnique(ctx, input.AdminMemberEmailUniqueInp{Id: req.Id, Email: req.Email})
- if err != nil {
- return nil, err
- }
-
- var res adminForm.MemberEmailUniqueRes
- res.IsUnique = data.IsUnique
- return &res, nil
-}
-
-//
-// @Title 手机号是否唯一
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return res
-// @Return err
-//
-func (controller *member) MobileUnique(ctx context.Context, req *adminForm.MemberMobileUniqueReq) (*adminForm.MemberMobileUniqueRes, error) {
-
- data, err := adminService.Member.MobileUnique(ctx, input.AdminMemberMobileUniqueInp{Id: req.Id, Mobile: req.Mobile})
- if err != nil {
- return nil, err
- }
-
- var res adminForm.MemberMobileUniqueRes
- res.IsUnique = data.IsUnique
- return &res, nil
-}
-
-//
-// @Title 名称是否唯一
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return res
-// @Return err
-//
-func (controller *member) NameUnique(ctx context.Context, req *adminForm.MemberNameUniqueReq) (*adminForm.MemberNameUniqueRes, error) {
-
- data, err := adminService.Member.NameUnique(ctx, input.AdminMemberNameUniqueInp{Id: req.Id, Username: req.Username})
- if err != nil {
- return nil, err
- }
-
- var res adminForm.MemberNameUniqueRes
- res.IsUnique = data.IsUnique
- return &res, nil
-}
-
-//
-// @Title 删除
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return res
-// @Return err
-//
-func (controller *member) Delete(ctx context.Context, req *adminForm.MemberDeleteReq) (res *adminForm.MemberDeleteRes, err error) {
-
- err = gerror.New("考虑安全暂时不允许删除用户,请选择禁用!")
- return nil, err
-
- var in input.AdminMemberDeleteInp
- if err = gconv.Scan(req, &in); err != nil {
- return nil, err
- }
- if err = adminService.Member.Delete(ctx, in); err != nil {
- return nil, err
- }
- return res, nil
-}
-
-//
-// @Title 修改/新增
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return res
-// @Return err
-//
-func (controller *member) Edit(ctx context.Context, req *adminForm.MemberEditReq) (res *adminForm.MemberEditRes, err error) {
-
- var in input.AdminMemberEditInp
- if err = gconv.Scan(req, &in); err != nil {
- return nil, err
- }
- if err = adminService.Member.Edit(ctx, in); err != nil {
- return nil, err
- }
-
- return res, nil
-}
-
-//
-// @Title 最大排序
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return res
-// @Return err
-//
-func (controller *member) MaxSort(ctx context.Context, req *adminForm.MemberMaxSortReq) (*adminForm.MemberMaxSortRes, error) {
-
- data, err := adminService.Member.MaxSort(ctx, input.AdminMemberMaxSortInp{Id: req.Id})
- if err != nil {
- return nil, err
- }
-
- var res adminForm.MemberMaxSortRes
- res.Sort = data.Sort
- return &res, nil
-}
-
-//
-// @Title 获取指定信息
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return res
-// @Return err
-//
-func (controller *member) View(ctx context.Context, req *adminForm.MemberViewReq) (*adminForm.MemberViewRes, error) {
-
- postsList, _, err := adminService.Post.List(ctx, input.AdminPostListInp{})
- if err != nil {
- return nil, err
- }
-
- roleList, _, err := adminService.Role.List(ctx, input.AdminRoleListInp{})
- if err != nil {
- return nil, err
- }
-
- var res adminForm.MemberViewRes
- res.Posts = postsList
- res.Roles = roleList
-
- if req.Id <= 0 {
- return &res, err
- }
-
- memberInfo, err := adminService.Member.View(ctx, input.AdminMemberViewInp{Id: req.Id})
- if err != nil {
- return nil, err
- }
-
- res.AdminMemberViewModel = memberInfo
-
- res.PostIds, err = adminService.MemberPost.GetMemberByIds(ctx, memberInfo.Id)
- if err != nil {
- return nil, err
- }
-
- res.RoleIds = []int64{memberInfo.Role}
- res.DeptName, err = adminService.Dept.GetName(ctx, memberInfo.DeptId)
- if err != nil {
- return nil, err
- }
- return &res, nil
-}
-
-//
-// @Title 查看列表
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return res
-// @Return err
-//
-func (controller *member) List(ctx context.Context, req *adminForm.MemberListReq) (*adminForm.MemberListRes, error) {
-
- var (
- in input.AdminMemberListInp
- res adminForm.MemberListRes
- )
-
- if err := gconv.Scan(req, &in); err != nil {
- return nil, err
- }
-
- list, totalCount, err := adminService.Member.List(ctx, in)
- if err != nil {
- return nil, err
- }
-
- res.List = list
- res.TotalCount = totalCount
- res.Limit = req.Page
- res.Limit = req.Limit
-
- return &res, nil
-}
-
-//
-// @Title 登录用户信息
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return res
-// @Return err
-//
-func (controller *member) Info(ctx context.Context, req *adminForm.MemberInfoReq) (res *adminForm.MemberInfoRes, err error) {
-
- return adminService.Member.LoginMemberInfo(ctx, req)
-}
diff --git a/hotgo-server/app/controller/adminController/menu_controller.go b/hotgo-server/app/controller/adminController/menu_controller.go
deleted file mode 100644
index 713293d..0000000
--- a/hotgo-server/app/controller/adminController/menu_controller.go
+++ /dev/null
@@ -1,189 +0,0 @@
-//
-// @Link https://github.com/bufanyun/hotgo
-// @Copyright Copyright (c) 2022 HotGo CLI
-// @Author Ms <133814250@qq.com>
-// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
-//
-package adminController
-
-import (
- "context"
- "github.com/bufanyun/hotgo/app/form/adminForm"
- "github.com/bufanyun/hotgo/app/form/input"
- "github.com/bufanyun/hotgo/app/service/adminService"
- "github.com/gogf/gf/v2/util/gconv"
-)
-
-// 菜单
-var Menu = menu{}
-
-type menu struct{}
-
-//
-// @Title 查询角色菜单列表
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return res
-// @Return err
-//
-func (controller *menu) RoleList(ctx context.Context, req *adminForm.MenuRoleListReq) (*adminForm.MenuRoleListRes, error) {
-
- var in input.MenuRoleListInp
- if err := gconv.Scan(req, &in); err != nil {
- return nil, err
- }
-
- data, err := adminService.Menu.RoleList(ctx, in)
- if err != nil {
- return nil, err
- }
-
- var res adminForm.MenuRoleListRes
- res.CheckedKeys = data.CheckedKeys
- res.Menus = data.Menus
- return &res, nil
-}
-
-//
-// @Title 查询菜单列表
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return res
-// @Return err
-//
-func (controller *menu) SearchList(ctx context.Context, req *adminForm.MenuSearchListReq) (res *adminForm.MenuSearchListRes, err error) {
-
- res, err = adminService.Menu.SearchList(ctx, req)
- if err != nil {
- return nil, err
- }
- return res, nil
-}
-
-//
-// @Title 最大排序
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return res
-// @Return err
-//
-func (controller *menu) MaxSort(ctx context.Context, req *adminForm.MenuMaxSortReq) (res *adminForm.MenuMaxSortRes, err error) {
-
- res, err = adminService.Menu.MaxSort(ctx, req)
- if err != nil {
- return nil, err
- }
- return res, nil
-}
-
-//
-// @Title 菜单名称是否唯一
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return res
-// @Return err
-//
-func (controller *menu) NameUnique(ctx context.Context, req *adminForm.MenuNameUniqueReq) (res *adminForm.MenuNameUniqueRes, err error) {
-
- res, err = adminService.Menu.NameUnique(ctx, req)
- if err != nil {
- return nil, err
- }
- return res, nil
-}
-
-//
-// @Title 菜单编码是否唯一
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return res
-// @Return err
-//
-func (controller *menu) CodeUnique(ctx context.Context, req *adminForm.MenuCodeUniqueReq) (res *adminForm.MenuCodeUniqueRes, err error) {
-
- res, err = adminService.Menu.CodeUnique(ctx, req)
- if err != nil {
- return nil, err
- }
- return res, nil
-}
-
-//
-// @Title 删除
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return res
-// @Return err
-//
-func (controller *menu) Delete(ctx context.Context, req *adminForm.MenuDeleteReq) (res *adminForm.MenuDeleteRes, err error) {
-
- if err = adminService.Menu.Delete(ctx, req); err != nil {
- return nil, err
- }
- return res, nil
-}
-
-//
-// @Title 修改/新增
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return res
-// @Return err
-//
-func (controller *menu) Edit(ctx context.Context, req *adminForm.MenuEditReq) (res *adminForm.MenuEditRes, err error) {
-
- if err = adminService.Menu.Edit(ctx, req); err != nil {
- return nil, err
- }
- return res, nil
-}
-
-//
-// @Title 获取信息
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return res
-// @Return err
-//
-func (controller *menu) View(ctx context.Context, req *adminForm.MenuViewReq) (res *adminForm.MenuViewRes, err error) {
-
- res, err = adminService.Menu.View(ctx, req)
- if err != nil {
- return nil, err
- }
- return res, nil
-}
-
-//
-// @Title 获取列表
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return res
-// @Return err
-//
-func (controller *menu) List(ctx context.Context, req *adminForm.MenuListReq) (res *adminForm.MenuListRes, err error) {
-
- res, err = adminService.Menu.List(ctx, req)
- if err != nil {
- return nil, err
- }
- return res, nil
-}
diff --git a/hotgo-server/app/controller/adminController/notice_controller.go b/hotgo-server/app/controller/adminController/notice_controller.go
deleted file mode 100644
index 08d23c5..0000000
--- a/hotgo-server/app/controller/adminController/notice_controller.go
+++ /dev/null
@@ -1,152 +0,0 @@
-package adminController
-
-import (
- "context"
- "github.com/bufanyun/hotgo/app/form/adminForm"
- "github.com/bufanyun/hotgo/app/form/input"
- "github.com/bufanyun/hotgo/app/service/adminService"
- "github.com/gogf/gf/v2/util/gconv"
-)
-
-// 公告
-var Notice = notice{}
-
-type notice struct{}
-
-//
-// @Title 名称是否唯一
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return res
-// @Return err
-//
-func (controller *notice) NameUnique(ctx context.Context, req *adminForm.NoticeNameUniqueReq) (*adminForm.NoticeNameUniqueRes, error) {
-
- data, err := adminService.Notice.NameUnique(ctx, input.AdminNoticeNameUniqueInp{Id: req.Id, Title: req.Title})
- if err != nil {
- return nil, err
- }
-
- var res adminForm.NoticeNameUniqueRes
- res.IsUnique = data.IsUnique
- return &res, nil
-}
-
-//
-// @Title 删除
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return res
-// @Return err
-//
-func (controller *notice) Delete(ctx context.Context, req *adminForm.NoticeDeleteReq) (res *adminForm.NoticeDeleteRes, err error) {
- var in input.AdminNoticeDeleteInp
- if err = gconv.Scan(req, &in); err != nil {
- return nil, err
- }
- if err = adminService.Notice.Delete(ctx, in); err != nil {
- return nil, err
- }
- return res, nil
-}
-
-//
-// @Title 修改/新增
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return res
-// @Return err
-//
-func (controller *notice) Edit(ctx context.Context, req *adminForm.NoticeEditReq) (res *adminForm.NoticeEditRes, err error) {
-
- var in input.AdminNoticeEditInp
- if err = gconv.Scan(req, &in); err != nil {
- return nil, err
- }
- if err = adminService.Notice.Edit(ctx, in); err != nil {
- return nil, err
- }
-
- return res, nil
-}
-
-//
-// @Title 最大排序
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return res
-// @Return err
-//
-func (controller *notice) MaxSort(ctx context.Context, req *adminForm.NoticeMaxSortReq) (*adminForm.NoticeMaxSortRes, error) {
-
- data, err := adminService.Notice.MaxSort(ctx, input.AdminNoticeMaxSortInp{Id: req.Id})
- if err != nil {
- return nil, err
- }
-
- var res adminForm.NoticeMaxSortRes
- res.Sort = data.Sort
- return &res, nil
-}
-
-//
-// @Title 获取指定信息
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return res
-// @Return err
-//
-func (controller *notice) View(ctx context.Context, req *adminForm.NoticeViewReq) (*adminForm.NoticeViewRes, error) {
-
- data, err := adminService.Notice.View(ctx, input.AdminNoticeViewInp{Id: req.Id})
- if err != nil {
- return nil, err
- }
-
- var res adminForm.NoticeViewRes
- res.AdminNoticeViewModel = data
- return &res, nil
-}
-
-//
-// @Title 查看列表
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return res
-// @Return err
-//
-func (controller *notice) List(ctx context.Context, req *adminForm.NoticeListReq) (*adminForm.NoticeListRes, error) {
-
- var (
- in input.AdminNoticeListInp
- res adminForm.NoticeListRes
- )
-
- if err := gconv.Scan(req, &in); err != nil {
- return nil, err
- }
-
- list, totalCount, err := adminService.Notice.List(ctx, in)
- if err != nil {
- return nil, err
- }
-
- res.List = list
- res.TotalCount = totalCount
- res.Limit = req.Page
- res.Limit = req.Limit
-
- return &res, nil
-}
diff --git a/hotgo-server/app/controller/adminController/post_controller.go b/hotgo-server/app/controller/adminController/post_controller.go
deleted file mode 100644
index 856ef38..0000000
--- a/hotgo-server/app/controller/adminController/post_controller.go
+++ /dev/null
@@ -1,171 +0,0 @@
-package adminController
-
-import (
- "context"
- "github.com/bufanyun/hotgo/app/form/adminForm"
- "github.com/bufanyun/hotgo/app/form/input"
- "github.com/bufanyun/hotgo/app/service/adminService"
- "github.com/gogf/gf/v2/util/gconv"
-)
-
-// 岗位
-var Post = post{}
-
-type post struct{}
-
-//
-// @Title 删除
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return res
-// @Return err
-//
-func (controller *post) Delete(ctx context.Context, req *adminForm.PostDeleteReq) (res *adminForm.PostDeleteRes, err error) {
- var in input.AdminPostDeleteInp
- if err = gconv.Scan(req, &in); err != nil {
- return nil, err
- }
- if err = adminService.Post.Delete(ctx, in); err != nil {
- return nil, err
- }
- return res, nil
-}
-
-//
-// @Title 修改/新增
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return res
-// @Return err
-//
-func (controller *post) Edit(ctx context.Context, req *adminForm.PostEditReq) (res *adminForm.PostEditRes, err error) {
-
- var in input.AdminPostEditInp
- if err = gconv.Scan(req, &in); err != nil {
- return nil, err
- }
- if err = adminService.Post.Edit(ctx, in); err != nil {
- return nil, err
- }
-
- return res, nil
-}
-
-//
-// @Title 最大排序
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return res
-// @Return err
-//
-func (controller *post) MaxSort(ctx context.Context, req *adminForm.PostMaxSortReq) (*adminForm.PostMaxSortRes, error) {
-
- data, err := adminService.Post.MaxSort(ctx, input.AdminPostMaxSortInp{Id: req.Id})
- if err != nil {
- return nil, err
- }
-
- var res adminForm.PostMaxSortRes
- res.Sort = data.Sort
- return &res, nil
-}
-
-//
-// @Title 名称是否唯一
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return res
-// @Return err
-//
-func (controller *post) NameUnique(ctx context.Context, req *adminForm.PostNameUniqueReq) (*adminForm.PostNameUniqueRes, error) {
-
- data, err := adminService.Post.NameUnique(ctx, input.AdminPostNameUniqueInp{Id: req.Id, Name: req.Name})
- if err != nil {
- return nil, err
- }
-
- var res adminForm.PostNameUniqueRes
- res.IsUnique = data.IsUnique
- return &res, nil
-}
-
-//
-// @Title 编码是否唯一
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return res
-// @Return err
-//
-func (controller *post) CodeUnique(ctx context.Context, req *adminForm.PostCodeUniqueReq) (*adminForm.PostCodeUniqueRes, error) {
-
- data, err := adminService.Post.CodeUnique(ctx, input.AdminPostCodeUniqueInp{Id: req.Id, Code: req.Code})
- if err != nil {
- return nil, err
- }
-
- var res adminForm.PostCodeUniqueRes
- res.IsUnique = data.IsUnique
- return &res, nil
-}
-
-//
-// @Title 获取指定信息
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return res
-// @Return err
-//
-func (controller *post) View(ctx context.Context, req *adminForm.PostViewReq) (*adminForm.PostViewRes, error) {
-
- data, err := adminService.Post.View(ctx, input.AdminPostViewInp{Id: req.Id})
- if err != nil {
- return nil, err
- }
-
- var res adminForm.PostViewRes
- res.AdminPostViewModel = data
- return &res, nil
-}
-
-//
-// @Title 获取列表
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return res
-// @Return err
-//
-func (controller *post) List(ctx context.Context, req *adminForm.PostListReq) (*adminForm.PostListRes, error) {
-
- list, totalCount, err := adminService.Post.List(ctx, input.AdminPostListInp{
- Page: req.Page,
- Limit: req.Limit,
- Name: req.Name,
- Code: req.Code,
- Status: req.Status,
- })
- if err != nil {
- return nil, err
- }
-
- var res adminForm.PostListRes
- res.List = list
- res.TotalCount = totalCount
- res.Limit = req.Page
- res.Limit = req.Limit
-
- return &res, nil
-}
diff --git a/hotgo-server/app/controller/adminController/role_controller.go b/hotgo-server/app/controller/adminController/role_controller.go
deleted file mode 100644
index f2e21bf..0000000
--- a/hotgo-server/app/controller/adminController/role_controller.go
+++ /dev/null
@@ -1,115 +0,0 @@
-//
-// @Link https://github.com/bufanyun/hotgo
-// @Copyright Copyright (c) 2022 HotGo CLI
-// @Author Ms <133814250@qq.com>
-// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
-//
-package adminController
-
-import (
- "context"
-
- "github.com/gogf/gf/v2/util/gconv"
-
- "github.com/bufanyun/hotgo/app/com"
- "github.com/bufanyun/hotgo/app/form/adminForm"
- "github.com/bufanyun/hotgo/app/form/input"
- "github.com/bufanyun/hotgo/app/service/adminService"
-)
-
-// 角色
-var Role = role{}
-
-type role struct{}
-
-//
-// @Title 获取角色下的会员列表
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return res
-// @Return err
-//
-func (controller *role) RoleMemberList(ctx context.Context, req *adminForm.RoleMemberListReq) (*adminForm.RoleMemberListRes, error) {
-
- var in input.AdminRoleMemberListInp
- if err := gconv.Scan(req, &in); err != nil {
- return nil, err
- }
- list, totalCount, err := adminService.Member.RoleMemberList(ctx, in)
- if err != nil {
- return nil, err
- }
-
- var res adminForm.RoleMemberListRes
- res.List = list
- res.TotalCount = totalCount
- res.Limit = req.Page
- res.Limit = req.Limit
-
- return &res, nil
-}
-
-//
-// @Title 获取列表
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return res
-// @Return err
-//
-func (controller *role) List(ctx context.Context, req *adminForm.RoleListReq) (*adminForm.RoleListRes, error) {
-
- list, totalCount, err := adminService.Role.List(ctx, input.AdminRoleListInp{
- Page: req.Page,
- Limit: req.Limit,
- })
- if err != nil {
- return nil, err
- }
-
- var res adminForm.RoleListRes
- res.List = list
- res.TotalCount = totalCount
- res.Limit = req.Page
- res.Limit = req.Limit
-
- return &res, nil
-}
-
-//
-// @Title 动态路由
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return res
-// @Return err
-//
-func (controller *role) Dynamic(ctx context.Context, req *adminForm.RoleDynamicReq) (res *adminForm.RoleDynamicRes, err error) {
-
- res, err = adminService.Menu.GetMenuList(ctx, com.Context.GetUserId(ctx))
- if err != nil {
- return nil, err
- }
- return res, nil
-}
-
-//
-// @Title 修改角色菜单权限
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return res
-// @Return err
-//
-func (controller *role) Edit(ctx context.Context, req *adminForm.RoleMenuEditReq) (res *adminForm.RoleMenuEditRes, err error) {
- err = adminService.Role.EditRoleMenu(ctx, req)
- if err != nil {
- return nil, err
- }
- return res, nil
-}
diff --git a/hotgo-server/app/controller/apiController/base_controller.go b/hotgo-server/app/controller/apiController/base_controller.go
deleted file mode 100644
index a41462b..0000000
--- a/hotgo-server/app/controller/apiController/base_controller.go
+++ /dev/null
@@ -1,96 +0,0 @@
-//
-// @Link https://github.com/bufanyun/hotgo
-// @Copyright Copyright (c) 2022 HotGo CLI
-// @Author Ms <133814250@qq.com>
-// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
-//
-package apiController
-
-import (
- "context"
- "github.com/bufanyun/hotgo/app/com"
- "github.com/bufanyun/hotgo/app/consts"
- "github.com/bufanyun/hotgo/app/form/apiForm"
- "github.com/bufanyun/hotgo/app/model"
- "github.com/gogf/gf/v2/frame/g"
- "github.com/xuri/excelize/v2"
- "time"
-)
-
-// 基础
-var Base = base{}
-
-type base struct{}
-
-//
-// @Title 获取lang信息
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return res
-// @Return err
-//
-func (controller *base) Lang(ctx context.Context, req *apiForm.BaseLangReq) (res *apiForm.BaseLangRes, err error) {
-
- return
-}
-
-//
-// @Title 获取IP归属地信息
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return res
-// @Return err
-//
-func (controller *base) IpLocation(ctx context.Context, req *apiForm.IpLocationReq) (res *apiForm.IpLocationRes, err error) {
-
- panic("测试panic...")
- data := com.Ip.GetLocation(ctx, req.Ip)
- res = &apiForm.IpLocationRes{data}
-
- return
-}
-
-func (controller *base) Excel(ctx context.Context, req *apiForm.ExportReq) (res *apiForm.ExportRes, err error) {
- w := com.Context.Get(ctx).Request.Response
-
- // 文件名
- fileName := "demo.xlsx"
- // 创建excel文件 (第三方excel包)
- file := excelize.NewFile()
- // 填充数据
- index := file.NewSheet("Sheet1")
- err = file.SetCellValue("Sheet1", "A1", "Hello world.")
- if err != nil {
- g.Log().Print(ctx, "SetCellValue:", err)
- return nil, err
- }
- err = file.SetCellValue("Sheet1", "B1", 100)
- if err != nil {
- g.Log().Print(ctx, "SetCellValue2:", err)
- return nil, err
- }
- file.SetActiveSheet(index)
- // 设置header头
- w.Header().Add("Content-Disposition", "attachment; filename="+fileName)
- w.Header().Add("Content-Type", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
- // 写入字节数据
- err = file.Write(w.Writer)
- if err != nil {
- g.Log().Print(ctx, "Write:", err)
- return nil, err
- }
-
- // TODO 加入到上下文
- com.Context.SetResponse(ctx, &model.Response{
- Code: consts.CodeOK,
- Message: "",
- Timestamp: time.Now().Unix(),
- ReqId: com.Context.Get(ctx).ReqId,
- })
- //com.Context.Get(ctx).Request.Exit()
- return
-}
diff --git a/hotgo-server/app/controller/apiController/dict_controller.go b/hotgo-server/app/controller/apiController/dict_controller.go
deleted file mode 100644
index 3ad8ba2..0000000
--- a/hotgo-server/app/controller/apiController/dict_controller.go
+++ /dev/null
@@ -1,30 +0,0 @@
-package apiController
-
-import (
- "context"
- "github.com/bufanyun/hotgo/app/form/adminForm"
- "github.com/bufanyun/hotgo/app/service/sysService"
-)
-
-// 字典
-var Dict = dict{}
-
-type dict struct{}
-
-//
-// @Title 获取指定字典类型的属性数据
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return res
-// @Return err
-//
-func (controller *dict) Attribute(ctx context.Context, req *adminForm.DictAttributeReq) (res *adminForm.DictAttributeRes, err error) {
-
- res, err = sysService.Dict.Attribute(ctx, req)
- if err != nil {
- return nil, err
- }
- return res, nil
-}
diff --git a/hotgo-server/app/controller/apiController/log_controller.go b/hotgo-server/app/controller/apiController/log_controller.go
deleted file mode 100644
index dcd7b37..0000000
--- a/hotgo-server/app/controller/apiController/log_controller.go
+++ /dev/null
@@ -1,96 +0,0 @@
-package apiController
-
-import (
- "context"
- "github.com/bufanyun/hotgo/app/form/apiForm"
- "github.com/bufanyun/hotgo/app/form/input"
- "github.com/bufanyun/hotgo/app/service/sysService"
- "github.com/gogf/gf/v2/errors/gerror"
-)
-
-// 日志
-var Log = log{}
-
-type log struct{}
-
-//
-// @Title 清空日志
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return res
-// @Return err
-//
-func (controller *log) Clear(ctx context.Context, req *apiForm.LogClearReq) (res *apiForm.LogClearRes, err error) {
- err = gerror.New("考虑安全,请到数据库清空")
- return
-}
-
-//
-// @Title 导出
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return res
-// @Return err
-//
-func (controller *log) Export(ctx context.Context, req *apiForm.LogExportReq) (res *apiForm.LogExportRes, err error) {
-
- err = sysService.Log.Export(ctx, input.LogListInp{
- Page: req.Page,
- Limit: req.Limit,
- Module: req.Module,
- Method: req.Method,
- Url: req.Url,
- Ip: req.Ip,
- ErrorCode: req.ErrorCode,
- StartTime: req.StartTime,
- EndTime: req.EndTime,
- MemberId: req.MemberId,
- TakeUpTime: req.TakeUpTime,
- })
- if err != nil {
- return nil, err
- }
-
- return
-}
-
-//
-// @Title 获取全局日志列表
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return res
-// @Return err
-//
-func (controller *log) List(ctx context.Context, req *apiForm.LogListReq) (*apiForm.LogListRes, error) {
-
- list, totalCount, err := sysService.Log.List(ctx, input.LogListInp{
- Page: req.Page,
- Limit: req.Limit,
- Module: req.Module,
- Method: req.Method,
- Url: req.Url,
- Ip: req.Ip,
- ErrorCode: req.ErrorCode,
- StartTime: req.StartTime,
- EndTime: req.EndTime,
- MemberId: req.MemberId,
- TakeUpTime: req.TakeUpTime,
- })
- if err != nil {
- return nil, err
- }
-
- var res apiForm.LogListRes
- res.List = list
- res.TotalCount = totalCount
- res.Limit = req.Page
- res.Limit = req.Limit
-
- return &res, nil
-}
diff --git a/hotgo-server/app/controller/apiController/login_controller.go b/hotgo-server/app/controller/apiController/login_controller.go
deleted file mode 100644
index e187048..0000000
--- a/hotgo-server/app/controller/apiController/login_controller.go
+++ /dev/null
@@ -1,99 +0,0 @@
-package apiController
-
-import (
- "context"
- "github.com/bufanyun/hotgo/app/com"
- "github.com/bufanyun/hotgo/app/consts"
- "github.com/bufanyun/hotgo/app/form/apiForm"
- "github.com/bufanyun/hotgo/app/form/input"
- "github.com/bufanyun/hotgo/app/service/adminService"
- "github.com/gogf/gf/v2/crypto/gmd5"
- "github.com/gogf/gf/v2/errors/gerror"
- "github.com/gogf/gf/v2/util/gconv"
-)
-
-// 登录
-var Login = login{}
-
-type login struct{}
-
-//
-// @Title 检查登录
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return res
-// @Return err
-//
-func (controller *login) Check(ctx context.Context, req *apiForm.LoginCheckReq) (*apiForm.LoginCheckRes, error) {
-
- var res apiForm.LoginCheckRes
- res.IsValidCodeLogin = false
- res.Result = "login"
-
- return &res, nil
-}
-
-//
-// @Title 提交登录
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return res
-// @Return err
-//
-func (controller *login) Sign(ctx context.Context, req *apiForm.LoginReq) (res *apiForm.LoginRes, err error) {
-
- //// 校验 验证码
- //if !com.Captcha.VerifyString(req.Cid, req.Code) {
- // err = gerror.New("验证码错误")
- // return
- //}
-
- var in input.AdminMemberLoginSignInp
- if err = gconv.Scan(req, &in); err != nil {
- return nil, err
- }
-
- model, err := adminService.Member.Login(ctx, in)
- if err != nil {
- return nil, err
- }
-
- if err = gconv.Scan(model, &res); err != nil {
- return nil, err
- }
- return
-}
-
-//
-// @Title 注销登录
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return res
-// @Return err
-//
-func (controller *login) Logout(ctx context.Context, req *apiForm.LoginLogoutReq) (res *apiForm.LoginLogoutRes, err error) {
-
- var authorization = com.Jwt.GetAuthorization(com.Context.Get(ctx).Request)
-
- // TODO 获取jwtToken
- jwtToken := consts.RedisJwtToken + gmd5.MustEncryptString(authorization)
- if len(jwtToken) == 0 {
- err = gerror.New("当前用户未登录!")
- return res, err
- }
-
- // TODO 删除登录token
- cache := com.Cache.New()
- _, err = cache.Remove(ctx, jwtToken)
- if err != nil {
- return res, err
- }
-
- return
-}
diff --git a/hotgo-server/app/controller/apiController/member_controller.go b/hotgo-server/app/controller/apiController/member_controller.go
deleted file mode 100644
index 8e6e7c2..0000000
--- a/hotgo-server/app/controller/apiController/member_controller.go
+++ /dev/null
@@ -1,72 +0,0 @@
-package apiController
-
-import (
- "context"
- "github.com/bufanyun/hotgo/app/com"
- "github.com/bufanyun/hotgo/app/form/apiForm"
- "github.com/bufanyun/hotgo/app/form/input"
- "github.com/bufanyun/hotgo/app/service/adminService"
- "github.com/gogf/gf/v2/errors/gerror"
-)
-
-// 会员
-var Member = member{}
-
-type member struct{}
-
-//
-// @Title 获取登录用户的基本信息
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return res
-// @Return err
-//
-func (controller *member) Profile(ctx context.Context, req *apiForm.MemberProfileReq) (*apiForm.MemberProfileRes, error) {
-
- var res apiForm.MemberProfileRes
-
- memberId := com.Context.Get(ctx).User.Id
- if memberId <= 0 {
- err := gerror.New("获取用户信息失败!")
- return nil, err
- }
-
- // TODO 用户基本信息
- memberInfo, err := adminService.Member.View(ctx, input.AdminMemberViewInp{Id: memberId})
- if err != nil {
- return nil, err
- }
- res.User = memberInfo
-
- // TODO 所在部门
- sysDept, err := adminService.Dept.View(ctx, input.AdminDeptViewInp{Id: memberInfo.DeptId})
- if err != nil {
- return nil, err
- }
- res.SysDept = sysDept
-
- // TODO 角色列表
- sysRoles, err := adminService.Role.GetMemberList(ctx, memberInfo.Role)
- if err != nil {
- return nil, err
- }
- res.SysRoles = sysRoles
-
- // TODO 获取角色名称
- roleGroup, err := adminService.Role.GetName(ctx, memberInfo.Role)
- if err != nil {
- return nil, err
- }
- res.RoleGroup = roleGroup
-
- // TODO 获取第一岗位名称
- postGroup, err := adminService.Post.GetMemberByStartName(ctx, memberInfo.Id)
- if err != nil {
- return nil, err
- }
- res.PostGroup = postGroup
-
- return &res, nil
-}
diff --git a/hotgo-server/app/factory/queue/list.go b/hotgo-server/app/factory/queue/list.go
deleted file mode 100644
index 898a25e..0000000
--- a/hotgo-server/app/factory/queue/list.go
+++ /dev/null
@@ -1,63 +0,0 @@
-package queue
-
-import (
- "container/list"
- "sync"
-)
-
-type Queue struct {
- l *list.List
- m sync.Mutex
-}
-
-func NewQueue() *Queue {
- return &Queue{l: list.New()}
-}
-
-func (q *Queue) LPush(v interface{}) {
- if v == nil {
- return
- }
- q.m.Lock()
- defer q.m.Unlock()
- q.l.PushFront(v)
-}
-
-func (q *Queue) RPush(v interface{}) {
- if v == nil {
- return
- }
- q.m.Lock()
- defer q.m.Unlock()
- q.l.PushBack(v)
-}
-
-func (q *Queue) LPop() interface{} {
- q.m.Lock()
- defer q.m.Unlock()
-
- element := q.l.Front()
- if element == nil {
- return nil
- }
-
- q.l.Remove(element)
- return element.Value
-}
-
-func (q *Queue) RPop() interface{} {
- q.m.Lock()
- defer q.m.Unlock()
-
- element := q.l.Back()
- if element == nil {
- return nil
- }
-
- q.l.Remove(element)
- return element.Value
-}
-
-func (q *Queue) Len() int {
- return q.l.Len()
-}
diff --git a/hotgo-server/app/factory/queue/main.go b/hotgo-server/app/factory/queue/main.go
deleted file mode 100644
index db241c2..0000000
--- a/hotgo-server/app/factory/queue/main.go
+++ /dev/null
@@ -1,248 +0,0 @@
-//
-// @Link https://github.com/bufanyun/hotgo
-// @Copyright Copyright (c) 2022 HotGo CLI
-// @Author Ms <133814250@qq.com>
-// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
-//
-package queue
-
-import (
- "github.com/bufanyun/hotgo/app/utils"
- "github.com/gogf/gf/v2/errors/gerror"
- "github.com/gogf/gf/v2/frame/g"
- "github.com/gogf/gf/v2/os/gctx"
- "sync"
- "time"
-)
-
-//
-// MqProducer
-// @Description
-//
-type MqProducer interface {
- SendMsg(topic string, body string) (mqMsg MqMsg, err error)
- SendByteMsg(topic string, body []byte) (mqMsg MqMsg, err error)
-}
-
-//
-// MqConsumer
-// @Description
-//
-type MqConsumer interface {
- ListenReceiveMsgDo(topic string, receiveDo func(mqMsg MqMsg)) (err error)
-}
-
-const (
- _ = iota
- SendMsg
- ReceiveMsg
-)
-
-type MqMsg struct {
- RunType int `json:"run_type"`
- Topic string `json:"topic"`
- MsgId string `json:"msg_id"`
- Offset int64 `json:"offset"`
- Partition int32 `json:"partition"`
- Timestamp time.Time `json:"timestamp"`
-
- Body []byte `json:"body"`
-}
-
-var (
- ctx = gctx.New()
- mqProducerInstanceMap map[string]MqProducer
- mqConsumerInstanceMap map[string]MqConsumer
- mutex sync.Mutex
-)
-
-func init() {
- mqProducerInstanceMap = make(map[string]MqProducer)
- mqConsumerInstanceMap = make(map[string]MqConsumer)
-}
-
-//
-// @Title 实例化消费者
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Return mqClient
-// @Return err
-//
-func InstanceConsumer() (mqClient MqConsumer, err error) {
- groupName, _ := g.Cfg().Get(ctx, "queue.groupName", "hotgo")
- return NewConsumer(groupName.String())
-}
-
-//
-// @Title 实例化生产者
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Return mqClient
-// @Return err
-//
-func InstanceProducer() (mqClient MqProducer, err error) {
- groupName, _ := g.Cfg().Get(ctx, "queue.groupName", "hotgo")
- return NewProducer(groupName.String())
-}
-
-//
-// @Title 新建一个生产者实例
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param groupName
-// @Return mqClient
-// @Return err
-//
-func NewProducer(groupName string) (mqClient MqProducer, err error) {
- if item, ok := mqProducerInstanceMap[groupName]; ok {
- return item, nil
- }
-
- if groupName == "" {
- return mqClient, gerror.New("mq groupName is empty.")
- }
-
- // 驱动
- driver, _ := g.Cfg().Get(ctx, "queue.driver", "")
-
- // 重试次数
- retryCount, _ := g.Cfg().Get(ctx, "queue.retry", 2)
- retry := retryCount.Int()
-
- switch driver.String() {
- case "rocketmq":
- address, _ := g.Cfg().Get(ctx, "queue.rocketmq.address", nil)
- if len(address.Strings()) == 0 {
- panic("queue rocketmq address is not support")
- }
- mqClient = RegisterRocketProducerMust(address.Strings(), groupName, retry)
- case "kafka":
- address, _ := g.Cfg().Get(ctx, "queue.kafka.address", nil)
- if len(address.Strings()) == 0 {
- panic("queue kafka address is not support")
- }
- version, _ := g.Cfg().Get(ctx, "queue.kafka.version", "2.0.0")
- mqClient = RegisterKafkaProducerMust(KafkaConfig{
- Brokers: address.Strings(),
- GroupID: groupName,
- Version: version.String(),
- })
- case "redis":
- address, _ := g.Cfg().Get(ctx, "queue.redis.address", nil)
- if len(address.String()) == 0 {
- panic("queue redis address is not support")
- }
- db, _ := g.Cfg().Get(ctx, "queue.redis.db", 0)
- pass, _ := g.Cfg().Get(ctx, "queue.redis.pass", "")
- timeout, _ := g.Cfg().Get(ctx, "queue.redis.timeout", 0)
-
- mqClient = RegisterRedisMqProducerMust(RedisOption{
- Addr: address.String(),
- Passwd: pass.String(),
- DBnum: db.Int(),
- Timeout: timeout.Int(),
- }, PoolOption{
- 5, 50, 5,
- }, groupName, retry)
-
- default:
- panic("queue driver is not support")
- }
-
- mutex.Lock()
- defer mutex.Unlock()
- mqProducerInstanceMap[groupName] = mqClient
-
- return mqClient, nil
-}
-
-//
-// @Title 新建一个消费者实例
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param groupName
-// @Return mqClient
-// @Return err
-//
-func NewConsumer(groupName string) (mqClient MqConsumer, err error) {
- // 是否支持创建多个消费者
- multiComsumer, _ := g.Cfg().Get(ctx, "queue.multiComsumer", true)
- randTag := string(utils.Charset.RandomCreateBytes(6))
- if multiComsumer.Bool() == false {
- randTag = "001"
- }
-
- if item, ok := mqConsumerInstanceMap[groupName+"-"+randTag]; ok {
- return item, nil
- }
-
- driver, _ := g.Cfg().Get(ctx, "queue.driver", "")
-
- if groupName == "" {
- return mqClient, gerror.New("mq groupName is empty.")
- }
-
- switch driver.String() {
- case "rocketmq":
- address, _ := g.Cfg().Get(ctx, "queue.rocketmq.address", nil)
- if address == nil {
- return nil, gerror.New("queue.rocketmq.address is empty.")
- }
-
- mqClient = RegisterRocketConsumerMust(address.Strings(), groupName)
- case "kafka":
- address, _ := g.Cfg().Get(ctx, "queue.kafka.address", nil)
- if len(address.Strings()) == 0 {
- panic("queue kafka address is not support")
- }
- version, _ := g.Cfg().Get(ctx, "queue.kafka.version", "2.0.0")
-
- clientId := "HOTGO-Consumer-" + groupName
- randClient, _ := g.Cfg().Get(ctx, "queue.kafka.randClient", true)
- if randClient.Bool() {
- clientId += "-" + randTag
- }
-
- mqClient = RegisterKafkaMqConsumerMust(KafkaConfig{
- Brokers: address.Strings(),
- GroupID: groupName,
- Version: version.String(),
- ClientId: clientId,
- })
- case "redis":
- address, _ := g.Cfg().Get(ctx, "queue.redis.address", nil)
- if len(address.String()) == 0 {
- panic("queue redis address is not support")
- }
- db, _ := g.Cfg().Get(ctx, "queue.redis.db", 0)
- pass, _ := g.Cfg().Get(ctx, "queue.redis.pass", "")
- timeout, _ := g.Cfg().Get(ctx, "queue.redis.pass", 0)
-
- mqClient = RegisterRedisMqConsumerMust(RedisOption{
- Addr: address.String(),
- Passwd: pass.String(),
- DBnum: db.Int(),
- Timeout: timeout.Int(),
- }, PoolOption{
- 5, 50, 5,
- }, groupName)
- default:
- panic("queue driver is not support")
- }
-
- mutex.Lock()
- defer mutex.Unlock()
- mqConsumerInstanceMap[groupName] = mqClient
-
- return mqClient, nil
-}
-
-//
-// @Title 返回消息体
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Return string
-//
-func (m *MqMsg) BodyString() string {
- return string(m.Body)
-}
diff --git a/hotgo-server/app/factory/queue/queue_test.go b/hotgo-server/app/factory/queue/queue_test.go
deleted file mode 100644
index 432eebf..0000000
--- a/hotgo-server/app/factory/queue/queue_test.go
+++ /dev/null
@@ -1,133 +0,0 @@
-package queue
-
-import (
- "fmt"
- "testing"
- "time"
-)
-
-func TestRPushQueue(t *testing.T) {
-
- ll := NewQueue()
-
- ll.RPush("1")
- ll.RPush("2")
- ll.RPush("3")
-
- go func() {
- ll.RPush("4")
- }()
- go func() {
- ll.RPush("5")
- }()
-
- go func() {
- ll.RPush("6")
- }()
-
- time.Sleep(1 * time.Second)
-
- if ll.Len() != 6 {
- t.Error("list Len() do error #1")
- }
-
- listVal := fmt.Sprintf("num=>%v,%v,%v", ll.LPop(), ll.LPop(), ll.LPop())
- if listVal != "num=>1,2,3" {
- t.Error("list do error #2")
- }
-
- if ll.Len() != 3 {
- t.Error("list Len() do error #3")
- }
-
- ll.LPop()
- ll.LPop()
- ll.LPop()
- c := ll.LPop()
-
- if c != nil {
- t.Error("list LPop() do error #4")
- }
-
- time.Sleep(1 * time.Second)
-}
-
-func TestLPushQueue(t *testing.T) {
-
- ll := NewQueue()
-
- ll.LPush("1")
- ll.LPush("2")
- ll.LPush("3")
-
- go func() {
- ll.LPush("4")
- }()
- go func() {
- ll.LPush("5")
- }()
-
- go func() {
- ll.LPush("6")
- }()
-
- time.Sleep(1 * time.Second)
-
- if ll.Len() != 6 {
- t.Error("list Len() do error #1")
- }
-
- listVal := fmt.Sprintf("num=>%v,%v,%v", ll.RPop(), ll.RPop(), ll.RPop())
- if listVal != "num=>1,2,3" {
- t.Error("list do error #2")
- }
-
- if ll.Len() != 3 {
- t.Error("list Len() do error #3")
- }
-
- ll.RPop()
- ll.RPop()
- ll.RPop()
- c := ll.RPop()
-
- if c != nil {
- t.Error("list RPop() do error #4")
- }
-
- time.Sleep(1 * time.Second)
-}
-
-func TestRegisterRocketMqProducer(t *testing.T) {
- ins, err := RegisterRocketMqProducer([]string{}, "tests", 2)
- if err == nil {
- t.Error("RegisterRocketMqProducer err #1")
- }
-
- ins, err = RegisterRocketMqProducer([]string{"192.168.1.1:9876"}, "tests", 2)
- if err != nil {
- t.Error("RegisterRocketMqProducer err #2")
- }
-
- if ins.endPoints[0] != "192.168.1.1:9876" {
- t.Error("RegisterRocketMqProducer err #3")
- }
-
-}
-
-func TestRegisterRocketMqConsumer(t *testing.T) {
- ins, err := RegisterRocketMqConsumer([]string{}, "tests")
- if err == nil {
- t.Error("RegisterRocketMqConsumer err #1")
- }
-
- ins, err = RegisterRocketMqProducer([]string{"192.168.1.1:9876"}, "tests", 2)
- if err != nil {
- t.Error("RegisterRocketMqConsumer err #2")
- }
-
- if ins.endPoints[0] != "192.168.1.1:9876" {
- t.Error("RegisterRocketMqConsumer err #3")
- }
-
-}
diff --git a/hotgo-server/app/form/adminForm/config_form.go b/hotgo-server/app/form/adminForm/config_form.go
deleted file mode 100644
index f819dd0..0000000
--- a/hotgo-server/app/form/adminForm/config_form.go
+++ /dev/null
@@ -1,79 +0,0 @@
-//
-// @Link https://github.com/bufanyun/hotgo
-// @Copyright Copyright (c) 2022 HotGo CLI
-// @Author Ms <133814250@qq.com>
-// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
-//
-package adminForm
-
-import (
- "github.com/bufanyun/hotgo/app/form"
- "github.com/bufanyun/hotgo/app/form/input"
- "github.com/bufanyun/hotgo/app/model/entity"
- "github.com/gogf/gf/v2/frame/g"
-)
-
-// 获取指定配置键的值
-type ConfigGetValueReq struct {
- g.Meta `path:"/config/get_value" method:"get" tags:"配置" summary:"获取指定配置键的值"`
- Key string `json:"key" v:"required#配置键不能为空" dc:"配置键"`
-}
-type ConfigGetValueRes struct {
- Value string `json:"value" dc:"配置值"`
-}
-
-// 名称是否唯一
-type ConfigNameUniqueReq struct {
- g.Meta `path:"/config/name_unique" method:"get" tags:"配置" summary:"配置名称是否唯一"`
- Name string `json:"name" v:"required#配置名称不能为空" dc:"配置名称"`
- Id int64 `json:"id" dc:"配置ID"`
-}
-type ConfigNameUniqueRes struct {
- IsUnique bool `json:"is_unique" dc:"是否唯一"`
-}
-
-// 查询列表
-type ConfigListReq struct {
- g.Meta `path:"/config/list" method:"get" tags:"配置" summary:"获取配置列表"`
- form.PageReq
- form.RangeDateReq
- form.StatusReq
- Name string `json:"name" dc:"配置名称"`
-}
-
-type ConfigListRes struct {
- List []*input.SysConfigListModel `json:"list" dc:"数据列表"`
- form.PageRes
-}
-
-// 获取指定信息
-type ConfigViewReq struct {
- g.Meta `path:"/config/view" method:"get" tags:"配置" summary:"获取指定信息"`
- Id string `json:"id" v:"required#配置ID不能为空" dc:"配置ID"`
-}
-type ConfigViewRes struct {
- *input.SysConfigViewModel
-}
-
-// 修改/新增
-type ConfigEditReq struct {
- g.Meta `path:"/config/edit" method:"post" tags:"配置" summary:"修改/新增配置"`
- entity.SysConfig
-}
-type ConfigEditRes struct{}
-
-// 删除
-type ConfigDeleteReq struct {
- g.Meta `path:"/config/delete" method:"post" tags:"配置" summary:"删除配置"`
- Id interface{} `json:"id" v:"required#配置ID不能为空" dc:"配置ID"`
-}
-type ConfigDeleteRes struct{}
-
-// 最大排序
-type ConfigMaxSortReq struct {
- g.Meta `path:"/config/max_sort" method:"get" tags:"配置" summary:"配置最大排序"`
- Id int64 `json:"id" dc:"配置ID"`
-}
-type ConfigMaxSortRes struct {
- Sort int `json:"sort" dc:"排序"`
-}
diff --git a/hotgo-server/app/form/adminForm/dict_form.go b/hotgo-server/app/form/adminForm/dict_form.go
deleted file mode 100644
index 60e39b1..0000000
--- a/hotgo-server/app/form/adminForm/dict_form.go
+++ /dev/null
@@ -1,142 +0,0 @@
-//
-// @Link https://github.com/bufanyun/hotgo
-// @Copyright Copyright (c) 2022 HotGo CLI
-// @Author Ms <133814250@qq.com>
-// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
-//
-package adminForm
-
-import (
- "github.com/bufanyun/hotgo/app/form"
- "github.com/bufanyun/hotgo/app/model/entity"
- "github.com/gogf/gf/v2/frame/g"
-)
-
-/************************ 字典数据 *****************/
-
-// 数据键值是否唯一
-type DictDataUniqueReq struct {
- g.Meta `path:"/dict_data/unique" method:"get" tags:"字典" summary:"数据键值是否唯一"`
- Value string `json:"value" v:"required#数据键值不能为空" dc:"数据键值"`
- Type string `json:"type" example:"sys_common_status" v:"required#字典类型不能为空" dc:"字典类型"`
- Id int64 `json:"id" dc:"字典数据ID"`
-}
-type DictDataUniqueRes struct {
- IsUnique bool `json:"is_unique" dc:"是否唯一"`
-}
-
-// 查询字典数据最大排序
-type DictDataMaxSortReq struct {
- g.Meta `path:"/dict_data/max_sort" method:"get" tags:"字典" summary:"查询字典数据最大排序"`
- Type string `json:"type" example:"sys_common_status" v:"required#字典类型不能为空" dc:"字典类型"`
-}
-type DictDataMaxSortRes struct {
- Sort int `json:"sort" dc:"排序"`
-}
-
-// 修改/新增字典数据
-type DictDataEditReq struct {
- g.Meta `path:"/dict_data/edit" method:"post" tags:"字典" summary:"修改/新增字典数据"`
- entity.SysDictData
-}
-type DictDataEditRes struct{}
-
-// 删除字典类型
-type DictDataDeleteReq struct {
- g.Meta `path:"/dict_data/delete" method:"post" tags:"字典" summary:"删除字典数据"`
- Id interface{} `json:"id" v:"required#字典数据ID不能为空" dc:"字典数据ID"`
-}
-type DictDataDeleteRes struct{}
-
-// 获取指定字典数据信息
-type DictDataViewReq struct {
- g.Meta `path:"/dict_data/view" method:"get" tags:"字典" summary:"获取指定字典数据信息"`
- Id string `json:"id" v:"required#字典数据ID不能为空" dc:"字典数据ID"`
-}
-type DictDataViewRes struct {
- *entity.SysDictData
-}
-
-// 获取字典数据列表
-type DictDataListReq struct {
- g.Meta `path:"/dict_data/list" method:"get" tags:"字典" summary:"获取字典数据列表"`
- form.PageReq
- Type string `json:"type" example:"sys_common_status" v:"required#字典类型不能为空" dc:"字典类型"`
-}
-type DictDataListRes struct {
- List []*entity.SysDictData `json:"list" dc:"数据列表"`
- form.PageRes
-}
-
-// 获取指定字典类型的属性数据
-type DictAttributeReq struct {
- g.Meta `path:"/dict/attribute" method:"get" tags:"字典" summary:"获取指定字典类型的属性数据"`
- Type string `json:"type" example:"sys_common_status" v:"required#字典类型不能为空" dc:"字典类型"`
-}
-type DictAttributeRes []*entity.SysDictData
-
-/************************ 字典类型 *****************/
-
-// 修改/新增字典类型
-type DictTypeExportReq struct {
- g.Meta `path:"/dict_type/export" method:"get" tags:"字典" summary:"导出字典类型"`
- form.PageReq
- form.RangeDateReq
- form.StatusReq
- Name string `json:"name" dc:"字典名称"`
- Type string `json:"type" dc:"字典类型"`
-}
-type DictTypeExportRes struct{}
-
-// 刷新字典缓存
-type DictTypeRefreshCacheReq struct {
- g.Meta `path:"/dict_type/refresh_cache" method:"get" tags:"字典" summary:"刷新字典缓存"`
-}
-type DictTypeRefreshCacheRes struct{}
-
-// 获取字典类型列表
-type DictTypeListReq struct {
- g.Meta `path:"/dict_type/list" method:"get" tags:"字典" summary:"获取字典类型列表"`
- form.PageReq
- form.RangeDateReq
- form.StatusReq
- Name string `json:"name" dc:"字典名称"`
- Type string `json:"type" dc:"字典类型"`
-}
-type DictTypeListRes struct {
- List []*entity.SysDictType `json:"list" dc:"数据列表"`
- form.PageRes
-}
-
-// 修改/新增字典类型
-type DictTypeEditReq struct {
- g.Meta `path:"/dict_type/edit" method:"post" tags:"字典" summary:"修改/新增字典类型"`
- entity.SysDictType
-}
-type DictTypeEditRes struct{}
-
-// 删除字典类型
-type DictTypeDeleteReq struct {
- g.Meta `path:"/dict_type/delete" method:"post" tags:"字典" summary:"删除字典类型"`
- Id interface{} `json:"id" v:"required#字典类型ID不能为空" dc:"字典类型ID"`
-}
-type DictTypeDeleteRes struct{}
-
-// 获取指定字典类型信息
-type DictTypeViewReq struct {
- g.Meta `path:"/dict_type/view" method:"get" tags:"字典" summary:"获取指定字典类型信息"`
- Id string `json:"id" v:"required#字典类型ID不能为空" dc:"字典类型ID"`
-}
-type DictTypeViewRes struct {
- *entity.SysDictType
-}
-
-// 类型是否唯一
-type DictTypeUniqueReq struct {
- g.Meta `path:"/dict_type/unique" method:"get" tags:"字典" summary:"类型是否唯一"`
- Type string `json:"type" example:"sys_common_status" v:"required#字典类型不能为空" dc:"字典类型"`
- Id int64 `json:"id" dc:"字典类型ID"`
-}
-type DictTypeUniqueRes struct {
- IsUnique bool `json:"is_unique" dc:"是否唯一"`
-}
diff --git a/hotgo-server/app/form/adminForm/log_form.go b/hotgo-server/app/form/adminForm/log_form.go
deleted file mode 100644
index ab727ac..0000000
--- a/hotgo-server/app/form/adminForm/log_form.go
+++ /dev/null
@@ -1,53 +0,0 @@
-//
-// @Link https://github.com/bufanyun/hotgo
-// @Copyright Copyright (c) 2022 HotGo CLI
-// @Author Ms <133814250@qq.com>
-// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
-//
-package adminForm
-
-import (
- "github.com/bufanyun/hotgo/app/form"
- "github.com/bufanyun/hotgo/app/form/input"
- "github.com/gogf/gf/v2/frame/g"
-)
-
-// 清空日志
-type LogClearReq struct {
- g.Meta `path:"/log/clear" method:"post" tags:"日志" summary:"清空日志"`
-}
-type LogClearRes struct{}
-
-// 导出
-type LogExportReq struct {
- g.Meta `path:"/log/export" method:"get" tags:"日志" summary:"导出日志"`
- form.PageReq
- form.RangeDateReq
- Module string `json:"module" dc:"应用端口"`
- MemberId int `json:"member_id" dc:"用户ID"`
- TakeUpTime int `json:"take_up_time" dc:"请求耗时"`
- Method string `json:"method" dc:"请求方式"`
- Url string `json:"url" dc:"请求路径"`
- Ip string `json:"ip" dc:"访问IP"`
- ErrorCode string `json:"error_code" dc:"状态码"`
-}
-type LogExportRes struct{}
-
-// 获取菜单列表
-type LogListReq struct {
- g.Meta `path:"/log/list" method:"get" tags:"日志" summary:"获取日志列表"`
- form.PageReq
- form.RangeDateReq
- Module string `json:"module" dc:"应用端口"`
- MemberId int `json:"member_id" dc:"用户ID"`
- TakeUpTime int `json:"take_up_time" dc:"请求耗时"`
- Method string `json:"method" dc:"请求方式"`
- Url string `json:"url" dc:"请求路径"`
- Ip string `json:"ip" dc:"访问IP"`
- ErrorCode string `json:"error_code" dc:"状态码"`
-}
-
-type LogListRes struct {
- List []*input.LogListModel `json:"list" dc:"数据列表"`
- form.PageRes
-}
diff --git a/hotgo-server/app/form/adminForm/login_form.go b/hotgo-server/app/form/adminForm/login_form.go
deleted file mode 100644
index b9e04a1..0000000
--- a/hotgo-server/app/form/adminForm/login_form.go
+++ /dev/null
@@ -1,41 +0,0 @@
-//
-// @Link https://github.com/bufanyun/hotgo
-// @Copyright Copyright (c) 2022 HotGo CLI
-// @Author Ms <133814250@qq.com>
-// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
-//
-package adminForm
-
-import (
- "github.com/bufanyun/hotgo/app/model"
- "github.com/gogf/gf/v2/frame/g"
-)
-
-// 注销登录
-type LoginLogoutReq struct {
- g.Meta `path:"/login/logout" method:"post" tags:"登录" summary:"注销登录"`
-}
-type LoginLogoutRes struct{}
-
-// 获取登录验证码
-type LoginCaptchaReq struct {
- g.Meta `path:"/login/captcha" method:"get" tags:"登录" summary:"获取登录验证码"`
-}
-type LoginCaptchaRes struct {
- Cid string `json:"cid" dc:"验证码ID"`
- Base64 string `json:"base64" dc:"验证码"`
-}
-
-// 提交登录
-type LoginReq struct {
- g.Meta `path:"/login/sign" method:"post" tags:"登录" summary:"提交登录"`
- Username string `json:"username" v:"required#用户名不能为空" dc:"用户名"`
- Password string `json:"password" v:"required#密码不能为空" dc:"密码"`
- Cid string `json:"cid" v:"required#验证码ID不能为空" dc:"验证码ID"`
- Code string `json:"code" v:"required#验证码不能为空" dc:"验证码"`
- Device string `json:"device" dc:"登录设备"`
-}
-type LoginRes struct {
- model.Identity
- Token string `json:"token" dc:"登录token"`
-}
diff --git a/hotgo-server/app/form/adminForm/notice_form.go b/hotgo-server/app/form/adminForm/notice_form.go
deleted file mode 100644
index 91ceadf..0000000
--- a/hotgo-server/app/form/adminForm/notice_form.go
+++ /dev/null
@@ -1,70 +0,0 @@
-//
-// @Link https://github.com/bufanyun/hotgo
-// @Copyright Copyright (c) 2022 HotGo CLI
-// @Author Ms <133814250@qq.com>
-// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
-//
-package adminForm
-
-import (
- "github.com/bufanyun/hotgo/app/form"
- "github.com/bufanyun/hotgo/app/form/input"
- "github.com/bufanyun/hotgo/app/model/entity"
- "github.com/gogf/gf/v2/frame/g"
-)
-
-// 名称是否唯一
-type NoticeNameUniqueReq struct {
- g.Meta `path:"/notice/name_unique" method:"get" tags:"公告" summary:"公告名称是否唯一"`
- Title string `json:"name" v:"required#公告名称不能为空" dc:"公告名称"`
- Id int64 `json:"id" dc:"公告ID"`
-}
-type NoticeNameUniqueRes struct {
- IsUnique bool `json:"is_unique" dc:"是否唯一"`
-}
-
-// 查询列表
-type NoticeListReq struct {
- g.Meta `path:"/notice/list" method:"get" tags:"公告" summary:"获取公告列表"`
- form.PageReq
- form.RangeDateReq
- form.StatusReq
- Name string `json:"name" dc:"公告名称"`
-}
-
-type NoticeListRes struct {
- List []*input.AdminNoticeListModel `json:"list" dc:"数据列表"`
- form.PageRes
-}
-
-// 获取指定信息
-type NoticeViewReq struct {
- g.Meta `path:"/notice/view" method:"get" tags:"公告" summary:"获取指定信息"`
- Id string `json:"id" v:"required#公告ID不能为空" dc:"公告ID"`
-}
-type NoticeViewRes struct {
- *input.AdminNoticeViewModel
-}
-
-// 修改/新增
-type NoticeEditReq struct {
- g.Meta `path:"/notice/edit" method:"post" tags:"公告" summary:"修改/新增公告"`
- entity.AdminNotice
-}
-type NoticeEditRes struct{}
-
-// 删除
-type NoticeDeleteReq struct {
- g.Meta `path:"/notice/delete" method:"post" tags:"公告" summary:"删除公告"`
- Id interface{} `json:"id" v:"required#公告ID不能为空" dc:"公告ID"`
-}
-type NoticeDeleteRes struct{}
-
-// 最大排序
-type NoticeMaxSortReq struct {
- g.Meta `path:"/notice/max_sort" method:"get" tags:"公告" summary:"公告最大排序"`
- Id int64 `json:"id" dc:"公告ID"`
-}
-type NoticeMaxSortRes struct {
- Sort int `json:"sort" dc:"排序"`
-}
diff --git a/hotgo-server/app/form/adminForm/role_form.go b/hotgo-server/app/form/adminForm/role_form.go
deleted file mode 100644
index abf79a0..0000000
--- a/hotgo-server/app/form/adminForm/role_form.go
+++ /dev/null
@@ -1,98 +0,0 @@
-//
-// @Link https://github.com/bufanyun/hotgo
-// @Copyright Copyright (c) 2022 HotGo CLI
-// @Author Ms <133814250@qq.com>
-// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
-//
-package adminForm
-
-import (
- "github.com/gogf/gf/v2/frame/g"
-
- "github.com/bufanyun/hotgo/app/form"
- "github.com/bufanyun/hotgo/app/form/input"
-)
-
-// 查询列表
-type RoleMemberListReq struct {
- g.Meta `path:"/role/member_list" method:"get" tags:"角色" summary:"获取角色下的会员列表"`
- form.PageReq
- form.RangeDateReq
- form.StatusReq
- Role int `json:"role" description:"角色ID"`
- DeptId int `json:"dept_id" description:"部门ID"`
- Mobile int `json:"mobile" description:"手机号"`
- Username string `json:"username" description:"用户名"`
- Realname string `json:"realname" description:"真实姓名"`
- StartTime string `json:"start_time" description:"开始时间"`
- EndTime string `json:"end_time" description:"结束时间"`
- Name string `json:"name" description:"岗位名称"`
- Code string `json:"code" description:"岗位编码"`
-}
-
-type RoleMemberListRes struct {
- List []*input.AdminMemberListModel `json:"list" description:"数据列表"`
- form.PageRes
-}
-
-// 查询列表
-type RoleListReq struct {
- g.Meta `path:"/role/list" method:"get" tags:"角色" summary:"获取角色列表"`
- form.PageReq
- form.RangeDateReq
- form.StatusReq
- DeptId int `json:"dept_id" description:"部门ID"`
- Mobile int `json:"mobile" description:"手机号"`
- Username string `json:"username" description:"用户名"`
- Realname string `json:"realname" description:"真实姓名"`
- StartTime string `json:"start_time" description:"开始时间"`
- EndTime string `json:"end_time" description:"结束时间"`
- Name string `json:"name" description:"岗位名称"`
- Code string `json:"code" description:"岗位编码"`
-}
-
-type RoleListRes struct {
- List []*input.AdminRoleListModel `json:"list" description:"数据列表"`
- form.PageRes
-}
-
-// 动态路由
-type RoleDynamicReq struct {
- g.Meta `path:"/role/dynamic" method:"get" tags:"路由" summary:"获取动态路由" description:"获取登录用户动态路由"`
-}
-
-type RoleDynamicMeta struct {
- Title string `json:"title" description:"菜单标题"`
- Icon string `json:"icon" description:"菜单图标"`
- NoCache bool `json:"noCache" description:"是否缓存"`
- Remark string `json:"remark" description:"备注"`
-}
-
-type RoleDynamicBase struct {
- Id int64 `json:"id" description:"菜单ID"`
- Pid int64 `json:"pid" description:"父ID"`
- Name string `json:"name" description:"菜单名称"`
- Code string `json:"code" description:"菜单编码"`
- Path string `json:"path" description:"路由地址"`
- Hidden bool `json:"hidden" description:"是否隐藏"`
- Redirect string `json:"redirect" description:"重定向"`
- Component string `json:"component" description:"组件路径"`
- AlwaysShow bool `json:"alwaysShow" description:"暂时不知道干啥"`
- IsFrame string `json:"isFrame" description:"是否为外链(0是 1否)"`
- Meta *RoleDynamicMeta `json:"meta" description:"配置数据集"`
-}
-
-type RoleDynamicMenu struct {
- RoleDynamicBase
- Children []*RoleDynamicBase `json:"children" description:"子菜单"`
-}
-
-type RoleDynamicRes []*RoleDynamicMenu
-
-type RoleMenuEditReq struct {
- g.Meta `path:"/role/edit" method:"post" tags:"角色" summary:"编辑角色菜单权限"`
- RoleId int64 `json:"id"`
- MenuIds []int64 `json:"menuIds"`
-}
-
-type RoleMenuEditRes struct{}
diff --git a/hotgo-server/app/form/apiForm/base_form.go b/hotgo-server/app/form/apiForm/base_form.go
deleted file mode 100644
index 8618d43..0000000
--- a/hotgo-server/app/form/apiForm/base_form.go
+++ /dev/null
@@ -1,34 +0,0 @@
-//
-// @Link https://github.com/bufanyun/hotgo
-// @Copyright Copyright (c) 2022 HotGo CLI
-// @Author Ms <133814250@qq.com>
-// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
-//
-package apiForm
-
-import (
- "github.com/bufanyun/hotgo/app/com"
- "github.com/gogf/gf/v2/frame/g"
-)
-
-// 获取lang信息
-type BaseLangReq struct {
- g.Meta `path:"/base/lang" method:"get" tags:"基础接口" summary:"获取lang信息"`
- L string `json:"l" v:"required#语言不能为空" dc:"语言"`
-}
-type BaseLangRes struct {
-}
-
-// 获取登录验证码
-type IpLocationReq struct {
- g.Meta `path:"/base/ip_location" method:"get" tags:"基础接口" summary:"获取IP归属地信息"`
- Ip string `json:"ip" v:"required#ip不能为空" dc:"ipv4地址"`
-}
-type IpLocationRes struct {
- com.IpLocationData
-}
-
-type ExportReq struct {
- g.Meta `path:"/base/export" method:"get" tags:"字典接口" summary:"导出字典类型"`
-}
-type ExportRes struct{}
diff --git a/hotgo-server/app/form/apiForm/dict_form.go b/hotgo-server/app/form/apiForm/dict_form.go
deleted file mode 100644
index 2a45c7f..0000000
--- a/hotgo-server/app/form/apiForm/dict_form.go
+++ /dev/null
@@ -1,19 +0,0 @@
-//
-// @Link https://github.com/bufanyun/hotgo
-// @Copyright Copyright (c) 2022 HotGo CLI
-// @Author Ms <133814250@qq.com>
-// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
-//
-package apiForm
-
-import (
- "github.com/bufanyun/hotgo/app/model/entity"
- "github.com/gogf/gf/v2/frame/g"
-)
-
-// 获取指定字典类型的属性数据
-type DictAttributeReq struct {
- g.Meta `path:"/dict/attribute" method:"get" tags:"字典接口" summary:"获取指定字典类型的属性数据"`
- Type string `json:"type" example:"sys_common_status" v:"required#字典类型不能为空" dc:"字典类型"`
-}
-type DictAttributeRes []*entity.SysDictData
diff --git a/hotgo-server/app/form/apiForm/log_form.go b/hotgo-server/app/form/apiForm/log_form.go
deleted file mode 100644
index ec7bf82..0000000
--- a/hotgo-server/app/form/apiForm/log_form.go
+++ /dev/null
@@ -1,53 +0,0 @@
-//
-// @Link https://github.com/bufanyun/hotgo
-// @Copyright Copyright (c) 2022 HotGo CLI
-// @Author Ms <133814250@qq.com>
-// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
-//
-package apiForm
-
-import (
- "github.com/bufanyun/hotgo/app/form"
- "github.com/bufanyun/hotgo/app/form/input"
- "github.com/gogf/gf/v2/frame/g"
-)
-
-// 清空日志
-type LogClearReq struct {
- g.Meta `path:"/log/clear" method:"post" tags:"日志接口" summary:"清空日志"`
-}
-type LogClearRes struct{}
-
-// 导出
-type LogExportReq struct {
- g.Meta `path:"/log/export" method:"get" tags:"日志接口" summary:"导出日志"`
- form.PageReq
- form.RangeDateReq
- Module string `json:"module" dc:"应用端口"`
- MemberId int `json:"member_id" dc:"用户ID"`
- TakeUpTime int `json:"take_up_time" dc:"请求耗时"`
- Method string `json:"method" dc:"请求方式"`
- Url string `json:"url" dc:"请求路径"`
- Ip string `json:"ip" dc:"访问IP"`
- ErrorCode string `json:"error_code" dc:"状态码"`
-}
-type LogExportRes struct{}
-
-// 获取菜单列表
-type LogListReq struct {
- g.Meta `path:"/log/list" method:"get" tags:"日志接口" summary:"获取日志列表"`
- form.PageReq
- form.RangeDateReq
- Module string `json:"module" dc:"应用端口"`
- MemberId int `json:"member_id" dc:"用户ID"`
- TakeUpTime int `json:"take_up_time" dc:"请求耗时"`
- Method string `json:"method" dc:"请求方式"`
- Url string `json:"url" dc:"请求路径"`
- Ip string `json:"ip" dc:"访问IP"`
- ErrorCode string `json:"error_code" dc:"状态码"`
-}
-
-type LogListRes struct {
- List []*input.LogListModel `json:"list" dc:"数据列表"`
- form.PageRes
-}
diff --git a/hotgo-server/app/form/apiForm/login_form.go b/hotgo-server/app/form/apiForm/login_form.go
deleted file mode 100644
index 4f7c624..0000000
--- a/hotgo-server/app/form/apiForm/login_form.go
+++ /dev/null
@@ -1,43 +0,0 @@
-//
-// @Link https://github.com/bufanyun/hotgo
-// @Copyright Copyright (c) 2022 HotGo CLI
-// @Author Ms <133814250@qq.com>
-// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
-//
-package apiForm
-
-import (
- "github.com/bufanyun/hotgo/app/model"
- "github.com/gogf/gf/v2/frame/g"
-)
-
-// 注销登录
-type LoginLogoutReq struct {
- g.Meta `path:"/login/logout" method:"get" tags:"登录接口" summary:"注销登录"`
-}
-type LoginLogoutRes struct{}
-
-// 登录效验
-type LoginCheckReq struct {
- g.Meta `path:"/login/check" method:"get" tags:"登录接口" summary:"登录效验"`
-}
-type LoginCheckRes struct {
- IsValidCodeLogin bool `json:"isValidCodeLogin" dc:"是否验证码"`
- Message string `json:"message" dc:"消息"`
- Result string `json:"result" dc:"响应"`
- // Sessionid string `json:"sessionid" dc:"sessionid"`
-}
-
-// 提交登录
-type LoginReq struct {
- g.Meta `path:"/login/sign" method:"post" tags:"登录接口" summary:"提交登录"`
- Username string `json:"username" v:"required#用户名不能为空" dc:"用户名"`
- Password string `json:"password" v:"required#密码不能为空" dc:"密码"`
- Cid string `json:"cid" v:"required#验证码ID不能为空" dc:"验证码ID"`
- Code string `json:"code" v:"required#验证码不能为空" dc:"验证码"`
- Device string `json:"device" dc:"登录设备"`
-}
-type LoginRes struct {
- model.Identity
- Token string `json:"token" dc:"登录token"`
-}
diff --git a/hotgo-server/app/form/apiForm/member_form.go b/hotgo-server/app/form/apiForm/member_form.go
deleted file mode 100644
index 255dd79..0000000
--- a/hotgo-server/app/form/apiForm/member_form.go
+++ /dev/null
@@ -1,26 +0,0 @@
-//
-// @Link https://github.com/bufanyun/hotgo
-// @Copyright Copyright (c) 2022 HotGo CLI
-// @Author Ms <133814250@qq.com>
-// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
-//
-package apiForm
-
-import (
- "github.com/bufanyun/hotgo/app/form/input"
- "github.com/gogf/gf/v2/frame/g"
-)
-
-// 获取登录用户的基本信息
-type MemberProfileReq struct {
- g.Meta `path:"/member/profile" method:"get" tags:"会员接口" summary:"获取登录用户的基本信息"`
-}
-type MemberProfileRes struct {
- PostGroup string `json:"postGroup" dc:"岗位名称"`
- RoleGroup string `json:"roleGroup" dc:"角色名称"`
- User *input.AdminMemberViewModel `json:"user" dc:"用户基本信息"`
- SysDept *input.AdminDeptViewModel `json:"sysDept" dc:"部门信息"`
- SysRoles []*input.AdminRoleListModel `json:"sysRoles" dc:"角色列表"`
- PostIds int64 `json:"postIds" dc:"当前岗位"`
- RoleIds int64 `json:"roleIds" dc:"当前角色"`
-}
diff --git a/hotgo-server/app/form/common.go b/hotgo-server/app/form/common.go
deleted file mode 100644
index c3a4eaa..0000000
--- a/hotgo-server/app/form/common.go
+++ /dev/null
@@ -1,28 +0,0 @@
-//
-// @Link https://github.com/bufanyun/hotgo
-// @Copyright Copyright (c) 2022 HotGo CLI
-// @Author Ms <133814250@qq.com>
-// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
-//
-package form
-
-// 分页
-type PageReq struct {
- Page int `json:"page" example:"10" d:"1" v:"min:1#页码最小值不能低于1" dc:"当前页码"`
- Limit int `json:"limit" example:"1" d:"10" v:"min:1|max:100#|每页数量最小值不能低于1|最大值不能大于100" dc:"每页数量"`
-}
-type PageRes struct {
- PageReq
- TotalCount int `json:"total_count" example:"0" dc:"全部数据量"`
-}
-
-// 时间查询
-type RangeDateReq struct {
- StartTime string `json:"start_time" v:"date#开始日期格式不正确" dc:"开始日期"`
- EndTime string `json:"end_time" v:"date#结束日期格式不正确" dc:"结束日期"`
-}
-
-// 状态查询
-type StatusReq struct {
- Status int `json:"status" v:"in:0,1,2,3#状态可选范围:0~3" dc:"状态"`
-}
diff --git a/hotgo-server/app/form/input/admin_dept_input.go b/hotgo-server/app/form/input/admin_dept_input.go
deleted file mode 100644
index 4c7df38..0000000
--- a/hotgo-server/app/form/input/admin_dept_input.go
+++ /dev/null
@@ -1,75 +0,0 @@
-package input
-
-import "github.com/bufanyun/hotgo/app/model/entity"
-
-// 名称是否唯一
-type AdminDeptNameUniqueInp struct {
- Name string
- Id int64
-}
-
-type AdminDeptNameUniqueModel struct {
- IsUnique bool
-}
-
-// 最大排序
-type AdminDeptMaxSortInp struct {
- Id int64
-}
-
-type AdminDeptMaxSortModel struct {
- Sort int
-}
-
-// 修改/新增字典数据
-type AdminDeptEditInp struct {
- entity.AdminDept
-}
-type AdminDeptEditModel struct{}
-
-// 删除字典类型
-type AdminDeptDeleteInp struct {
- Id interface{}
-}
-type AdminDeptDeleteModel struct{}
-
-// 获取信息
-type AdminDeptViewInp struct {
- Id int64
-}
-
-type AdminDeptViewModel struct {
- entity.AdminDept
-}
-
-// 获取列表
-type AdminDeptListInp struct {
- Name string
-}
-
-// 树
-type AdminDeptTreeDept struct {
- entity.AdminDept
- Children []*AdminDeptTreeDept `json:"children"`
-}
-
-type AdminDeptListModel AdminDeptTreeDept
-
-// 获取列表树
-type AdminDeptListTreeInp struct {
- Name string
-}
-
-// 树
-type AdminDeptListTreeDept struct {
- Id int64 `json:"id" `
- Key int64 `json:"key" `
- Pid int64 `json:"pid" `
- Label string `json:"label"`
- Title string `json:"title"`
- Name string `json:"name"`
- Type string `json:"type"`
- Children []*AdminDeptListTreeDept `json:"children"`
-}
-
-type AdminDeptListTreeModel AdminDeptListTreeDept
diff --git a/hotgo-server/app/form/input/admin_member_input.go b/hotgo-server/app/form/input/admin_member_input.go
deleted file mode 100644
index b5ff5d2..0000000
--- a/hotgo-server/app/form/input/admin_member_input.go
+++ /dev/null
@@ -1,171 +0,0 @@
-package input
-
-import (
- "github.com/bufanyun/hotgo/app/model"
- "github.com/bufanyun/hotgo/app/model/entity"
- "github.com/gogf/gf/v2/os/gtime"
-)
-
-// 更新会员资料
-type AdminMemberUpdateProfileInp struct {
- Mobile int
- Email string
- Realname string
-}
-
-// 获取指定会员资料
-type AdminMemberProfileInp struct {
- Id int64
-}
-type AdminMemberProfileModel struct {
- PostGroup string `json:"postGroup" description:"岗位名称"`
- RoleGroup string `json:"roleGroup" description:"角色名称"`
- User *AdminMemberViewModel `json:"user" description:"用户基本信息"`
- SysDept *AdminDeptViewModel `json:"sysDept" description:"部门信息"`
- SysRoles []*AdminRoleListModel `json:"sysRoles" description:"角色列表"`
- PostIds int64 `json:"postIds" description:"当前岗位"`
- RoleIds int64 `json:"roleIds" description:"当前角色"`
-}
-
-// 更新会员资料
-type MemberUpdateProfileInp struct {
- Mobile int
- Email string
- Realname string
-}
-
-// 修改登录密码
-type AdminMemberUpdatePwdInp struct {
- Id int64
- OldPassword string
- NewPassword string
-}
-
-// 重置密码
-type AdminMemberResetPwdInp struct {
- Password string
- Id int64
-}
-
-// 邮箱是否唯一
-type AdminMemberEmailUniqueInp struct {
- Email string
- Id int64
-}
-
-type AdminMemberEmailUniqueModel struct {
- IsUnique bool
-}
-
-// 手机号是否唯一
-type AdminMemberMobileUniqueInp struct {
- Mobile string
- Id int64
-}
-
-type AdminMemberMobileUniqueModel struct {
- IsUnique bool
-}
-
-// 名称是否唯一
-type AdminMemberNameUniqueInp struct {
- Username string
- Id int64
-}
-
-type AdminMemberNameUniqueModel struct {
- IsUnique bool
-}
-
-// 最大排序
-type AdminMemberMaxSortInp struct {
- Id int64
-}
-
-type AdminMemberMaxSortModel struct {
- Sort int
-}
-
-// 修改/新增字典数据
-type AdminMemberEditInp struct {
- Id int64 `json:"id" description:""`
- PostIds []int64 `json:"postIds" v:"required#岗位不能为空" description:"岗位ID"`
- DeptId int64 `json:"dept_id" v:"required#部门不能为空" description:"部门ID"`
- Username string `json:"username" v:"required#账号不能为空" description:"帐号"`
- Password string `json:"password" description:"密码"`
- Realname string `json:"realname" description:"真实姓名"`
- Avatar string `json:"avatar" description:"头像"`
- Sex string `json:"sex" description:"性别[0:未知;1:男;2:女]"`
- Qq string `json:"qq" description:"qq"`
- Email string `json:"email" description:"邮箱"`
- Birthday *gtime.Time `json:"birthday" description:"生日"`
- ProvinceId int `json:"province_id" description:"省"`
- CityId int `json:"city_id" description:"城市"`
- AreaId int `json:"area_id" description:"地区"`
- Address string `json:"address" description:"默认地址"`
- Mobile string `json:"mobile" description:"手机号码"`
- HomePhone string `json:"home_phone" description:"家庭号码"`
- DingtalkRobotToken string `json:"dingtalk_robot_token" description:"钉钉机器人token"`
- Role int `json:"role" v:"required#角色不能为空" description:"权限"`
- Remark string `json:"remark" description:"备注"`
- Status string `json:"status" description:"状态"`
- CreatedAt *gtime.Time `json:"created_at" description:"创建时间"`
- UpdatedAt *gtime.Time `json:"updated_at" description:"修改时间"`
-}
-
-type AdminMemberAddInp struct {
- AdminMemberEditInp
- PasswordHash string `json:"password_hash" description:"密码hash"`
- Salt string `json:"salt" description:"密码盐"`
-}
-
-type AdminMemberEditModel struct{}
-
-// 删除字典类型
-type AdminMemberDeleteInp struct {
- Id interface{}
-}
-type AdminMemberDeleteModel struct{}
-
-// 获取信息
-type AdminMemberViewInp struct {
- Id int64
-}
-
-type AdminMemberViewModel struct {
- entity.AdminMember
-}
-
-// 获取列表
-type AdminMemberListInp struct {
- Page int
- Limit int
- Name string
- Code string
- DeptId int
- Mobile int
- Username string
- Realname string
- StartTime string
- EndTime string
- Status int
-}
-
-type AdminMemberListModel struct {
- entity.AdminMember
- DeptName string `json:"dept_name"`
- RoleName string `json:"role_name"`
-}
-
-// 登录
-type AdminMemberLoginSignInp struct {
- Username string
- Password string
- Device string
- Cid string
- Code string
-}
-type AdminMemberLoginSignModel struct {
- model.Identity
- Token string `json:"token" v:"" description:"登录token"`
-}
diff --git a/hotgo-server/app/form/input/admin_notice_input.go b/hotgo-server/app/form/input/admin_notice_input.go
deleted file mode 100644
index 00877f1..0000000
--- a/hotgo-server/app/form/input/admin_notice_input.go
+++ /dev/null
@@ -1,64 +0,0 @@
-package input
-
-import "github.com/bufanyun/hotgo/app/model/entity"
-
-// 名称是否唯一
-type AdminNoticeNameUniqueInp struct {
- Title string
- Id int64
-}
-
-type AdminNoticeNameUniqueModel struct {
- IsUnique bool
-}
-
-// 最大排序
-type AdminNoticeMaxSortInp struct {
- Id int64
-}
-
-type AdminNoticeMaxSortModel struct {
- Sort int
-}
-
-// 修改/新增字典数据
-type AdminNoticeEditInp struct {
- entity.AdminNotice
-}
-type AdminNoticeEditModel struct{}
-
-// 删除字典类型
-type AdminNoticeDeleteInp struct {
- Id interface{}
-}
-type AdminNoticeDeleteModel struct{}
-
-// 获取信息
-type AdminNoticeViewInp struct {
- Id string
-}
-
-type AdminNoticeViewModel struct {
- entity.AdminNotice
-}
-
-// 获取列表
-type AdminNoticeListInp struct {
- Page int
- Limit int
- Name string
- Code string
- DeptId int
- Mobile int
- Username string
- Realname string
- StartTime string
- EndTime string
- Status int
-}
-
-type AdminNoticeListModel struct {
- entity.AdminNotice
- DeptName string `json:"dept_name"`
- RoleName string `json:"role_name"`
-}
diff --git a/hotgo-server/app/form/input/admin_post_input.go b/hotgo-server/app/form/input/admin_post_input.go
deleted file mode 100644
index 09a23da..0000000
--- a/hotgo-server/app/form/input/admin_post_input.go
+++ /dev/null
@@ -1,68 +0,0 @@
-package input
-
-import (
- "github.com/bufanyun/hotgo/app/model/entity"
-)
-
-// 获取列表
-type AdminPostListInp struct {
- Page int
- Limit int
- Name string
- Code string
- Status int
-}
-
-type AdminPostListModel struct {
- entity.AdminPost
-}
-
-// 获取信息
-type AdminPostViewInp struct {
- Id string
-}
-
-type AdminPostViewModel struct {
- entity.AdminPost
-}
-
-// 编码是否唯一
-type AdminPostCodeUniqueInp struct {
- Code string
- Id int64
-}
-
-type AdminPostCodeUniqueModel struct {
- IsUnique bool
-}
-
-// 名称是否唯一
-type AdminPostNameUniqueInp struct {
- Name string
- Id int64
-}
-
-type AdminPostNameUniqueModel struct {
- IsUnique bool
-}
-
-// 最大排序
-type AdminPostMaxSortInp struct {
- Id int64
-}
-
-type AdminPostMaxSortModel struct {
- Sort int
-}
-
-// 修改/新增字典数据
-type AdminPostEditInp struct {
- entity.AdminPost
-}
-type AdminPostEditModel struct{}
-
-// 删除字典类型
-type AdminPostDeleteInp struct {
- Id interface{}
-}
-type AdminPostDeleteModel struct{}
diff --git a/hotgo-server/app/form/input/sys_config_input.go b/hotgo-server/app/form/input/sys_config_input.go
deleted file mode 100644
index 87ec6b6..0000000
--- a/hotgo-server/app/form/input/sys_config_input.go
+++ /dev/null
@@ -1,72 +0,0 @@
-package input
-
-import "github.com/bufanyun/hotgo/app/model/entity"
-
-// 获取指定配置键的值
-type SysConfigGetValueInp struct {
- Key string
-}
-type SysConfigGetValueModel struct {
- Value string
-}
-
-// 名称是否唯一
-type SysConfigNameUniqueInp struct {
- Name string
- Id int64
-}
-
-type SysConfigNameUniqueModel struct {
- IsUnique bool
-}
-
-// 最大排序
-type SysConfigMaxSortInp struct {
- Id int64
-}
-
-type SysConfigMaxSortModel struct {
- Sort int
-}
-
-// 修改/新增字典数据
-type SysConfigEditInp struct {
- entity.SysConfig
-}
-type SysConfigEditModel struct{}
-
-// 删除字典类型
-type SysConfigDeleteInp struct {
- Id interface{}
-}
-type SysConfigDeleteModel struct{}
-
-// 获取信息
-type SysConfigViewInp struct {
- Id string
-}
-
-type SysConfigViewModel struct {
- entity.SysConfig
-}
-
-// 获取列表
-type SysConfigListInp struct {
- Page int
- Limit int
- Name string
- Code string
- DeptId int
- Mobile int
- Username string
- Realname string
- StartTime string
- EndTime string
- Status int
-}
-
-type SysConfigListModel struct {
- entity.SysConfig
- DeptName string `json:"dept_name"`
- RoleName string `json:"role_name"`
-}
diff --git a/hotgo-server/app/form/input/sys_log_input.go b/hotgo-server/app/form/input/sys_log_input.go
deleted file mode 100644
index c9aa62c..0000000
--- a/hotgo-server/app/form/input/sys_log_input.go
+++ /dev/null
@@ -1,26 +0,0 @@
-package input
-
-import (
- "github.com/bufanyun/hotgo/app/model/entity"
-)
-
-// 获取菜单列表
-type LogListInp struct {
- Page int
- Limit int
- Module string
- MemberId int
- TakeUpTime int
- Method string
- Url string
- Ip string
- ErrorCode string
- StartTime string
- EndTime string
-}
-
-type LogListModel struct {
- entity.SysLog
- MemberName string `json:"member_name"`
- Region string `json:"region"`
-}
diff --git a/hotgo-server/app/hook/hook.go b/hotgo-server/app/hook/hook.go
deleted file mode 100644
index 637d416..0000000
--- a/hotgo-server/app/hook/hook.go
+++ /dev/null
@@ -1,52 +0,0 @@
-//
-// @Link https://github.com/bufanyun/hotgo
-// @Copyright Copyright (c) 2022 HotGo CLI
-// @Author Ms <133814250@qq.com>
-// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
-//
-package hook
-
-import (
- "github.com/bufanyun/hotgo/app/com"
- "github.com/bufanyun/hotgo/app/service/sysService"
- "github.com/gogf/gf/v2/net/ghttp"
- "github.com/gogf/gf/v2/os/gtime"
-)
-
-type (
- // sHook is service struct of module Hook.
- sHook struct{}
-)
-
-var (
- // insHook is the instance of service Hook.
- insHook = sHook{}
-)
-
-// Hook returns the interface of Hook service.
-func Instance() *sHook {
- return &insHook
-}
-
-//
-// @Title 全局日志
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param r
-//
-func (s *sHook) GlobalLog(r *ghttp.Request) {
- var (
- ctx = r.Context()
- )
-
- // 没有上下文的请求不记录,如:doc、favicon.ico等非服务类业务
- modelCtx := com.Context.Get(ctx)
- if modelCtx == nil {
- return
- }
-
- // 计算运行耗时
- com.Context.SetTakeUpTime(ctx, gtime.TimestampMilli()-r.EnterTime)
-
- go sysService.Log.AutoLog(ctx)
-}
diff --git a/hotgo-server/app/interfaces/queue_producer_interface.go b/hotgo-server/app/interfaces/queue_producer_interface.go
deleted file mode 100644
index 253154e..0000000
--- a/hotgo-server/app/interfaces/queue_producer_interface.go
+++ /dev/null
@@ -1,20 +0,0 @@
-//
-// @Package interfaces
-// @Description
-// @Author Ms <133814250@qq.com>
-//
-package interfaces
-
-//
-// QueueProducer
-// @Description
-//
-type QueueProducer interface {
- //
- // @Title
- // @Description
- // @Author Ms <133814250@qq.com>
- // @Return string
- //
- Push() string
-}
\ No newline at end of file
diff --git a/hotgo-server/app/middleware/admin_auth.go b/hotgo-server/app/middleware/admin_auth.go
deleted file mode 100644
index df8301f..0000000
--- a/hotgo-server/app/middleware/admin_auth.go
+++ /dev/null
@@ -1,127 +0,0 @@
-//
-// @Link https://github.com/bufanyun/hotgo
-// @Copyright Copyright (c) 2022 HotGo CLI
-// @Author Ms <133814250@qq.com>
-// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
-//
-package middleware
-
-import (
- "github.com/bufanyun/hotgo/app/com"
- "github.com/bufanyun/hotgo/app/consts"
- "github.com/bufanyun/hotgo/app/model"
- "github.com/bufanyun/hotgo/app/utils"
- "github.com/gogf/gf/v2/crypto/gmd5"
- "github.com/gogf/gf/v2/errors/gcode"
- "github.com/gogf/gf/v2/frame/g"
- "github.com/gogf/gf/v2/net/ghttp"
- "github.com/gogf/gf/v2/text/gstr"
- "github.com/gogf/gf/v2/util/gconv"
-)
-
-//
-// @Title 后台中间件
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param r
-//
-func (s *sMiddleware) AdminAuth(r *ghttp.Request) {
-
- var (
- ctx = r.Context()
- user = new(model.Identity)
- authorization = com.Jwt.GetAuthorization(r)
- )
-
- // TODO 替换掉模块前缀
- routerPrefix, _ := g.Cfg().Get(ctx, "router.admin.prefix", "/admin")
- path := gstr.Replace(r.URL.Path, routerPrefix.String(), "", 1)
-
- /// TODO 不需要验证登录的路由地址
- if utils.Auth.IsExceptLogin(ctx, path) {
- r.Middleware.Next()
- return
- }
-
- if authorization == "" {
- com.Response.JsonExit(r, gcode.CodeNotAuthorized.Code(), "请先登录!")
- return
- }
-
- // TODO 获取jwtToken
- jwtToken := consts.RedisJwtToken + gmd5.MustEncryptString(authorization)
- jwtSign, _ := g.Cfg().Get(ctx, "jwt.sign", "hotgo")
-
- data, ParseErr := com.Jwt.ParseToken(authorization, jwtSign.Bytes())
- if ParseErr != nil {
- com.Response.JsonExit(r, gcode.CodeNotAuthorized.Code(), "token不正确或已过期!", ParseErr.Error())
- }
-
- parseErr := gconv.Struct(data, &user)
- if parseErr != nil {
- com.Response.JsonExit(r, gcode.CodeNotAuthorized.Code(), "登录信息解析异常,请重新登录!", parseErr.Error())
- }
-
- // TODO 判断token跟redis的缓存的token是否一样
- cache := com.Cache.New()
- isContains, containsErr := cache.Contains(ctx, jwtToken)
- if containsErr != nil {
- com.Response.JsonExit(r, gcode.CodeNotAuthorized.Code(), "token无效!", containsErr.Error())
- return
- }
- if !isContains {
- com.Response.JsonExit(r, gcode.CodeNotAuthorized.Code(), "token已过期!")
- return
- }
-
- // TODO 是否开启多端登录
- if multiPort, _ := g.Cfg().Get(ctx, "jwt.multiPort", true); !multiPort.Bool() {
- key := consts.RedisJwtUserBind + consts.AppAdmin + ":" + gconv.String(user.Id)
- originJwtToken, originErr := cache.Get(ctx, key)
- if originErr != nil {
- com.Response.JsonExit(r, gcode.CodeNotAuthorized.Code(), "信息异常,请重新登录!", originErr.Error())
- return
- }
-
- if originJwtToken == nil || originJwtToken.IsEmpty() {
- com.Response.JsonExit(r, gcode.CodeNotAuthorized.Code(), "token已过期!")
- return
- }
-
- if jwtToken != originJwtToken.String() {
- com.Response.JsonExit(r, gcode.CodeNotAuthorized.Code(), "账号已在其他地方登录!")
- return
- }
- }
-
- // TODO 保存到上下文
- customCtx := &model.Context{}
- if user != nil {
- customCtx.User = &model.Identity{
- Id: user.Id,
- Username: user.Username,
- Realname: user.Realname,
- Avatar: user.Avatar,
- Email: user.Email,
- Mobile: user.Mobile,
- VisitCount: user.VisitCount,
- LastTime: user.LastTime,
- LastIp: user.LastIp,
- Role: user.Role,
- Exp: user.Exp,
- Expires: user.Expires,
- App: user.App,
- }
- }
- com.Context.SetUser(ctx, customCtx.User)
- com.Context.SetModule(ctx, consts.AppAdmin)
-
- //// TODO 验证路由访问权限
- //verify := adminService.Role.Verify(ctx, customCtx.User.Id, path)
- //if !verify {
- // com.Response.JsonExit(r, gcode.CodeSecurityReason.Code(), "你没有访问权限!")
- // return
- //}
-
- r.Middleware.Next()
-}
diff --git a/hotgo-server/app/middleware/api_auth.go b/hotgo-server/app/middleware/api_auth.go
deleted file mode 100644
index b1ae655..0000000
--- a/hotgo-server/app/middleware/api_auth.go
+++ /dev/null
@@ -1,127 +0,0 @@
-//
-// @Link https://github.com/bufanyun/hotgo
-// @Copyright Copyright (c) 2022 HotGo CLI
-// @Author Ms <133814250@qq.com>
-// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
-//
-package middleware
-
-import (
- "github.com/bufanyun/hotgo/app/com"
- "github.com/bufanyun/hotgo/app/consts"
- "github.com/bufanyun/hotgo/app/model"
- "github.com/bufanyun/hotgo/app/utils"
- "github.com/gogf/gf/v2/crypto/gmd5"
- "github.com/gogf/gf/v2/errors/gcode"
- "github.com/gogf/gf/v2/frame/g"
- "github.com/gogf/gf/v2/net/ghttp"
- "github.com/gogf/gf/v2/text/gstr"
- "github.com/gogf/gf/v2/util/gconv"
-)
-
-//
-// @Title 接口中间件
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param r
-//
-func (s *sMiddleware) ApiAuth(r *ghttp.Request) {
-
- var (
- ctx = r.Context()
- user = new(model.Identity)
- authorization = com.Jwt.GetAuthorization(r)
- )
-
- // TODO 替换掉模块前缀
- routerPrefix, _ := g.Cfg().Get(ctx, "router.api.prefix", "/api")
- path := gstr.Replace(r.URL.Path, routerPrefix.String(), "", 1)
-
- /// TODO 不需要验证登录的路由地址
- if utils.Auth.IsExceptLogin(ctx, path) {
- r.Middleware.Next()
- return
- }
-
- if authorization == "" {
- com.Response.JsonExit(r, gcode.CodeNotAuthorized.Code(), "请先登录!")
- return
- }
-
- // TODO 获取jwtToken
- jwtToken := consts.RedisJwtToken + gmd5.MustEncryptString(authorization)
- jwtSign, _ := g.Cfg().Get(ctx, "jwt.sign", "hotgo")
-
- data, ParseErr := com.Jwt.ParseToken(authorization, jwtSign.Bytes())
- if ParseErr != nil {
- com.Response.JsonExit(r, gcode.CodeNotAuthorized.Code(), "token不正确或已过期!", ParseErr.Error())
- }
-
- parseErr := gconv.Struct(data, &user)
- if parseErr != nil {
- com.Response.JsonExit(r, gcode.CodeNotAuthorized.Code(), "登录信息解析异常,请重新登录!", parseErr.Error())
- }
-
- // TODO 判断token跟redis的缓存的token是否一样
- cache := com.Cache.New()
- isContains, containsErr := cache.Contains(ctx, jwtToken)
- if containsErr != nil {
- com.Response.JsonExit(r, gcode.CodeNotAuthorized.Code(), "token无效!", containsErr.Error())
- return
- }
- if !isContains {
- com.Response.JsonExit(r, gcode.CodeNotAuthorized.Code(), "token已过期!")
- return
- }
-
- // TODO 是否开启多端登录
- if multiPort, _ := g.Cfg().Get(ctx, "jwt.multiPort", true); !multiPort.Bool() {
- key := consts.RedisJwtUserBind + consts.AppApi + ":" + gconv.String(user.Id)
- originJwtToken, originErr := cache.Get(ctx, key)
- if originErr != nil {
- com.Response.JsonExit(r, gcode.CodeNotAuthorized.Code(), "信息异常,请重新登录!", originErr.Error())
- return
- }
-
- if originJwtToken == nil || originJwtToken.IsEmpty() {
- com.Response.JsonExit(r, gcode.CodeNotAuthorized.Code(), "token已过期!")
- return
- }
-
- if jwtToken != originJwtToken.String() {
- com.Response.JsonExit(r, gcode.CodeNotAuthorized.Code(), "账号已在其他地方登录!")
- return
- }
- }
-
- // TODO 保存到上下文
- customCtx := &model.Context{}
- if user != nil {
- customCtx.User = &model.Identity{
- Id: user.Id,
- Username: user.Username,
- Realname: user.Realname,
- Avatar: user.Avatar,
- Email: user.Email,
- Mobile: user.Mobile,
- VisitCount: user.VisitCount,
- LastTime: user.LastTime,
- LastIp: user.LastIp,
- Role: user.Role,
- Exp: user.Exp,
- Expires: user.Expires,
- App: user.App,
- }
- }
- com.Context.SetUser(ctx, customCtx.User)
- com.Context.SetModule(ctx, consts.AppApi)
-
- //// TODO 验证路由访问权限
- //verify := adminService.Role.Verify(ctx, customCtx.User.Id, path)
- //if !verify {
- // com.Response.JsonExit(r, gcode.CodeSecurityReason.Code(), "你没有访问权限!")
- // return
- //}
-
- r.Middleware.Next()
-}
diff --git a/hotgo-server/app/middleware/middleware.go b/hotgo-server/app/middleware/middleware.go
deleted file mode 100644
index 5723732..0000000
--- a/hotgo-server/app/middleware/middleware.go
+++ /dev/null
@@ -1,64 +0,0 @@
-//
-// @Link https://github.com/bufanyun/hotgo
-// @Copyright Copyright (c) 2022 HotGo CLI
-// @Author Ms <133814250@qq.com>
-// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
-//
-package middleware
-
-import (
- "github.com/bufanyun/hotgo/app/com"
- "github.com/bufanyun/hotgo/app/model"
- "github.com/gogf/gf/v2/frame/g"
- "github.com/gogf/gf/v2/net/ghttp"
- "github.com/gogf/gf/v2/util/grand"
- "github.com/gogf/gf/v2/util/guid"
- "go.opentelemetry.io/otel/trace"
-)
-
-type (
- // sMiddleware is service struct of module Middleware.
- sMiddleware struct{}
-)
-
-var (
- // insMiddleware is the instance of service Middleware.
- insMiddleware = sMiddleware{}
-)
-
-// Middleware returns the interface of Middleware service.
-func Instance() *sMiddleware {
- return &insMiddleware
-}
-
-//
-// @Title 初始化请求上下文
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param r
-//
-func (s *sMiddleware) Ctx(r *ghttp.Request) {
-
- spanCtx := trace.SpanContextFromContext(r.Context())
-
- reqId := guid.S(grand.B(64))
- if traceId := spanCtx.TraceID(); traceId.IsValid() {
- reqId = traceId.String()
- }
-
- customCtx := &model.Context{
- Data: make(g.Map),
- Request: r,
- ReqId: reqId,
- }
-
- com.Context.Init(r, customCtx)
-
- r.Middleware.Next()
-}
-
-// CORS allows Cross-origin resource sharing.
-func (s *sMiddleware) CORS(r *ghttp.Request) {
- r.Response.CORSDefault()
- r.Middleware.Next()
-}
diff --git a/hotgo-server/app/model/entity/admin_dept.go b/hotgo-server/app/model/entity/admin_dept.go
deleted file mode 100644
index 035b774..0000000
--- a/hotgo-server/app/model/entity/admin_dept.go
+++ /dev/null
@@ -1,26 +0,0 @@
-// =================================================================================
-// Code generated by GoFrame CLI tool. DO NOT EDIT.
-// =================================================================================
-
-package entity
-
-import (
- "github.com/gogf/gf/v2/os/gtime"
-)
-
-// AdminDept is the golang structure for table admin_dept.
-type AdminDept struct {
- Id int64 `json:"id" description:"部门id"`
- Pid int64 `json:"pid" description:"父部门id"`
- Ancestors string `json:"ancestors" description:"祖级列表"`
- Name string `json:"name" description:"部门名称"`
- Code string `json:"code" description:"部门编码"`
- Type string `json:"type" description:"部门类型"`
- Leader string `json:"leader" description:"负责人"`
- Phone string `json:"phone" description:"联系电话"`
- Email string `json:"email" description:"邮箱"`
- Sort int `json:"sort" description:"排序"`
- Status string `json:"status" description:"部门状态"`
- CreatedAt *gtime.Time `json:"created_at" description:"创建时间"`
- UpdatedAt *gtime.Time `json:"updated_at" description:"更新时间"`
-}
diff --git a/hotgo-server/app/model/entity/admin_member.go b/hotgo-server/app/model/entity/admin_member.go
deleted file mode 100644
index 9db55bc..0000000
--- a/hotgo-server/app/model/entity/admin_member.go
+++ /dev/null
@@ -1,42 +0,0 @@
-// =================================================================================
-// Code generated by GoFrame CLI tool. DO NOT EDIT.
-// =================================================================================
-
-package entity
-
-import (
- "github.com/gogf/gf/v2/os/gtime"
-)
-
-// AdminMember is the golang structure for table admin_member.
-type AdminMember struct {
- Id int64 `json:"id" description:""`
- DeptId int64 `json:"dept_id" description:"部门ID"`
- Username string `json:"username" description:"帐号"`
- PasswordHash string `json:"password_hash" description:"密码"`
- Salt string `json:"salt" description:"密码盐"`
- AuthKey string `json:"auth_key" description:"授权令牌"`
- PasswordResetToken string `json:"password_reset_token" description:"密码重置令牌"`
- Type string `json:"type" description:"1:普通管理员;10超级管理员"`
- Realname string `json:"realname" description:"真实姓名"`
- Avatar string `json:"avatar" description:"头像"`
- Sex string `json:"sex" description:"性别[0:未知;1:男;2:女]"`
- Qq string `json:"qq" description:"qq"`
- Email string `json:"email" description:"邮箱"`
- Birthday *gtime.Time `json:"birthday" description:"生日"`
- ProvinceId int `json:"province_id" description:"省"`
- CityId int `json:"city_id" description:"城市"`
- AreaId int `json:"area_id" description:"地区"`
- Address string `json:"address" description:"默认地址"`
- Mobile string `json:"mobile" description:"手机号码"`
- HomePhone string `json:"home_phone" description:"家庭号码"`
- DingtalkRobotToken string `json:"dingtalk_robot_token" description:"钉钉机器人token"`
- VisitCount uint `json:"visit_count" description:"访问次数"`
- LastTime int `json:"last_time" description:"最后一次登录时间"`
- LastIp string `json:"last_ip" description:"最后一次登录ip"`
- Role int64 `json:"role" description:"权限"`
- Remark string `json:"remark" description:"备注"`
- Status string `json:"status" description:"状态"`
- CreatedAt *gtime.Time `json:"created_at" description:"创建时间"`
- UpdatedAt *gtime.Time `json:"updated_at" description:"修改时间"`
-}
diff --git a/hotgo-server/app/model/entity/admin_menu.go b/hotgo-server/app/model/entity/admin_menu.go
deleted file mode 100644
index cc16576..0000000
--- a/hotgo-server/app/model/entity/admin_menu.go
+++ /dev/null
@@ -1,33 +0,0 @@
-// =================================================================================
-// Code generated by GoFrame CLI tool. DO NOT EDIT.
-// =================================================================================
-
-package entity
-
-import (
- "github.com/gogf/gf/v2/os/gtime"
-)
-
-// AdminMenu is the golang structure for table admin_menu.
-type AdminMenu struct {
- Id int64 `json:"id" description:"菜单ID"`
- Pid int64 `json:"pid" description:"父菜单ID"`
- Name string `json:"name" description:"菜单名称"`
- Code string `json:"code" description:"菜单编码"`
- Icon string `json:"icon" description:"菜单图标"`
- Type string `json:"type" description:"菜单类型(M目录 C菜单 F按钮)"`
- Perms string `json:"perms" description:"权限标识"`
- Path string `json:"path" description:"路由地址"`
- Component string `json:"component" description:"组件路径"`
- Query string `json:"query" description:"路由参数"`
- IsFrame string `json:"is_frame" description:"是否内嵌"`
- IsCache string `json:"is_cache" description:"是否不缓存"`
- IsVisible string `json:"is_visible" description:"是否隐藏"`
- Remark string `json:"remark" description:"备注"`
- Level int `json:"level" description:"级别"`
- Tree string `json:"tree" description:"树"`
- Sort int `json:"sort" description:"排序"`
- Status string `json:"status" description:"菜单状态"`
- CreatedAt *gtime.Time `json:"created_at" description:"创建时间"`
- UpdatedAt *gtime.Time `json:"updated_at" description:"更新时间"`
-}
diff --git a/hotgo-server/app/model/entity/admin_menu_old.go b/hotgo-server/app/model/entity/admin_menu_old.go
deleted file mode 100644
index ea8d422..0000000
--- a/hotgo-server/app/model/entity/admin_menu_old.go
+++ /dev/null
@@ -1,32 +0,0 @@
-// =================================================================================
-// Code generated by GoFrame CLI tool. DO NOT EDIT.
-// =================================================================================
-
-package entity
-
-import (
- "github.com/gogf/gf/v2/os/gtime"
-)
-
-// AdminMenuOld is the golang structure for table admin_menu_old.
-type AdminMenuOld struct {
- Id int64 `json:"id" description:"菜单ID"`
- Pid int64 `json:"pid" description:"父菜单ID"`
- Name string `json:"name" description:"菜单名称"`
- Icon string `json:"icon" description:"菜单图标"`
- Type string `json:"type" description:"菜单类型(M目录 C菜单 F按钮)"`
- Perms string `json:"perms" description:"权限标识"`
- Path string `json:"path" description:"路由地址"`
- Component string `json:"component" description:"组件路径"`
- Query string `json:"query" description:"路由参数"`
- IsFrame int `json:"is_frame" description:"是否为外链(0是 1否)"`
- IsCache int `json:"is_cache" description:"是否缓存(0缓存 1不缓存)"`
- IsVisible int `json:"is_visible" description:"菜单状态(0显示 1隐藏)"`
- Remark string `json:"remark" description:"备注"`
- Level int `json:"level" description:"级别"`
- Tree string `json:"tree" description:"树"`
- Sort int `json:"sort" description:"排序"`
- Status int `json:"status" description:"菜单状态"`
- CreatedAt *gtime.Time `json:"created_at" description:"创建时间"`
- UpdatedAt *gtime.Time `json:"updated_at" description:"更新时间"`
-}
diff --git a/hotgo-server/app/model/entity/admin_notice.go b/hotgo-server/app/model/entity/admin_notice.go
deleted file mode 100644
index 355c0d1..0000000
--- a/hotgo-server/app/model/entity/admin_notice.go
+++ /dev/null
@@ -1,21 +0,0 @@
-// =================================================================================
-// Code generated by GoFrame CLI tool. DO NOT EDIT.
-// =================================================================================
-
-package entity
-
-import (
- "github.com/gogf/gf/v2/os/gtime"
-)
-
-// AdminNotice is the golang structure for table admin_notice.
-type AdminNotice struct {
- Id int64 `json:"id" description:"公告ID"`
- Title string `json:"title" description:"公告标题"`
- Type string `json:"type" description:"公告类型(1通知 2公告)"`
- Content string `json:"content" description:"公告内容"`
- Remark string `json:"remark" description:"备注"`
- Status string `json:"status" description:"公告状态"`
- CreatedAt *gtime.Time `json:"created_at" description:"创建时间"`
- UpdatedAt *gtime.Time `json:"updated_at" description:"更新时间"`
-}
diff --git a/hotgo-server/app/model/entity/admin_post.go b/hotgo-server/app/model/entity/admin_post.go
deleted file mode 100644
index 935a099..0000000
--- a/hotgo-server/app/model/entity/admin_post.go
+++ /dev/null
@@ -1,21 +0,0 @@
-// =================================================================================
-// Code generated by GoFrame CLI tool. DO NOT EDIT.
-// =================================================================================
-
-package entity
-
-import (
- "github.com/gogf/gf/v2/os/gtime"
-)
-
-// AdminPost is the golang structure for table admin_post.
-type AdminPost struct {
- Id int64 `json:"id" description:"岗位ID"`
- Code string `json:"code" description:"岗位编码"`
- Name string `json:"name" description:"岗位名称"`
- Remark string `json:"remark" description:"备注"`
- Sort int `json:"sort" description:"显示顺序"`
- Status string `json:"status" description:"状态"`
- CreatedAt *gtime.Time `json:"created_at" description:"创建时间"`
- UpdatedAt *gtime.Time `json:"updated_at" description:"更新时间"`
-}
diff --git a/hotgo-server/app/model/entity/admin_role.go b/hotgo-server/app/model/entity/admin_role.go
deleted file mode 100644
index 2f0f92c..0000000
--- a/hotgo-server/app/model/entity/admin_role.go
+++ /dev/null
@@ -1,24 +0,0 @@
-// =================================================================================
-// Code generated by GoFrame CLI tool. DO NOT EDIT.
-// =================================================================================
-
-package entity
-
-import (
- "github.com/gogf/gf/v2/os/gtime"
-)
-
-// AdminRole is the golang structure for table admin_role.
-type AdminRole struct {
- Id int64 `json:"id" description:"角色ID"`
- Name string `json:"name" description:"角色名称"`
- Key string `json:"key" description:"角色权限字符串"`
- DataScope int `json:"data_scope" description:"数据范围(1:全部数据权限 2:自定数据权限 3:本部门数据权限 4:本部门及以下数据权限)"`
- MenuCheckStrictly int `json:"menu_check_strictly" description:"菜单树选择项是否关联显示"`
- DeptCheckStrictly int `json:"dept_check_strictly" description:"部门树选择项是否关联显示"`
- Remark string `json:"remark" description:"备注"`
- Sort int `json:"sort" description:"排序"`
- Status string `json:"status" description:"角色状态"`
- CreatedAt *gtime.Time `json:"created_at" description:"创建时间"`
- UpdatedAt *gtime.Time `json:"updated_at" description:"更新时间"`
-}
diff --git a/hotgo-server/app/model/entity/sys_config.go b/hotgo-server/app/model/entity/sys_config.go
deleted file mode 100644
index 2fc7844..0000000
--- a/hotgo-server/app/model/entity/sys_config.go
+++ /dev/null
@@ -1,22 +0,0 @@
-// =================================================================================
-// Code generated by GoFrame CLI tool. DO NOT EDIT.
-// =================================================================================
-
-package entity
-
-import (
- "github.com/gogf/gf/v2/os/gtime"
-)
-
-// SysConfig is the golang structure for table sys_config.
-type SysConfig struct {
- Id int64 `json:"id" description:"配置ID"`
- Name string `json:"name" description:"参数名称"`
- Key string `json:"key" description:"参数键名"`
- Value string `json:"value" description:"参数键值"`
- IsDefault string `json:"is_default" description:"是否默认"`
- Status string `json:"status" description:"状态"`
- Remark string `json:"remark" description:"备注"`
- CreatedAt *gtime.Time `json:"created_at" description:"创建时间"`
- UpdatedAt *gtime.Time `json:"updated_at" description:"更新时间"`
-}
diff --git a/hotgo-server/app/model/entity/sys_dict_data.go b/hotgo-server/app/model/entity/sys_dict_data.go
deleted file mode 100644
index 3a66971..0000000
--- a/hotgo-server/app/model/entity/sys_dict_data.go
+++ /dev/null
@@ -1,24 +0,0 @@
-// =================================================================================
-// Code generated by GoFrame CLI tool. DO NOT EDIT.
-// =================================================================================
-
-package entity
-
-import (
- "github.com/gogf/gf/v2/os/gtime"
-)
-
-// SysDictData is the golang structure for table sys_dict_data.
-type SysDictData struct {
- Id int64 `json:"id" description:"字典编码"`
- Label string `json:"label" description:"字典标签"`
- Value string `json:"value" description:"字典键值"`
- Type string `json:"type" description:"字典类型"`
- ListClass string `json:"list_class" description:"表格回显样式"`
- IsDefault string `json:"is_default" description:"是否默认"`
- Sort int `json:"sort" description:"字典排序"`
- Remark string `json:"remark" description:"备注"`
- Status string `json:"status" description:"状态"`
- CreatedAt *gtime.Time `json:"created_at" description:"创建时间"`
- UpdatedAt *gtime.Time `json:"updated_at" description:"更新时间"`
-}
diff --git a/hotgo-server/app/model/entity/sys_dict_type.go b/hotgo-server/app/model/entity/sys_dict_type.go
deleted file mode 100644
index 51a247e..0000000
--- a/hotgo-server/app/model/entity/sys_dict_type.go
+++ /dev/null
@@ -1,21 +0,0 @@
-// =================================================================================
-// Code generated by GoFrame CLI tool. DO NOT EDIT.
-// =================================================================================
-
-package entity
-
-import (
- "github.com/gogf/gf/v2/os/gtime"
-)
-
-// SysDictType is the golang structure for table sys_dict_type.
-type SysDictType struct {
- Id int64 `json:"id" description:"字典主键"`
- Name string `json:"name" description:"字典名称"`
- Type string `json:"type" description:"字典类型"`
- Sort int `json:"sort" description:"排序"`
- Remark string `json:"remark" description:"备注"`
- Status string `json:"status" description:"状态"`
- CreatedAt *gtime.Time `json:"created_at" description:"创建时间"`
- UpdatedAt *gtime.Time `json:"updated_at" description:"更新时间"`
-}
diff --git a/hotgo-server/app/model/entity/sys_log.go b/hotgo-server/app/model/entity/sys_log.go
deleted file mode 100644
index 7205ee3..0000000
--- a/hotgo-server/app/model/entity/sys_log.go
+++ /dev/null
@@ -1,36 +0,0 @@
-// =================================================================================
-// Code generated by GoFrame CLI tool. DO NOT EDIT.
-// =================================================================================
-
-package entity
-
-import (
- "github.com/gogf/gf/v2/os/gtime"
-)
-
-// SysLog is the golang structure for table sys_log.
-type SysLog struct {
- Id int64 `json:"id" description:""`
- AppId string `json:"app_id" description:"应用id"`
- MerchantId uint `json:"merchant_id" description:"商户id"`
- MemberId int `json:"member_id" description:"用户id"`
- Method string `json:"method" description:"提交类型"`
- Module string `json:"module" description:"模块"`
- Url string `json:"url" description:"提交url"`
- GetData string `json:"get_data" description:"get数据"`
- PostData string `json:"post_data" description:"post数据"`
- HeaderData string `json:"header_data" description:"header数据"`
- Ip string `json:"ip" description:"ip地址"`
- ProvinceId int `json:"province_id" description:"省编码"`
- CityId int `json:"city_id" description:"市编码"`
- ErrorCode int `json:"error_code" description:"报错code"`
- ErrorMsg string `json:"error_msg" description:"报错信息"`
- ErrorData string `json:"error_data" description:"报错日志"`
- ReqId string `json:"req_id" description:"对外id"`
- Timestamp int `json:"timestamp" description:"响应时间"`
- UserAgent string `json:"user_agent" description:"UA信息"`
- TakeUpTime int64 `json:"take_up_time" description:"请求耗时"`
- Status string `json:"status" description:"状态"`
- CreatedAt *gtime.Time `json:"created_at" description:"创建时间"`
- UpdatedAt *gtime.Time `json:"updated_at" description:"修改时间"`
-}
diff --git a/hotgo-server/app/model/entity/sys_provinces.go b/hotgo-server/app/model/entity/sys_provinces.go
deleted file mode 100644
index 1c56a52..0000000
--- a/hotgo-server/app/model/entity/sys_provinces.go
+++ /dev/null
@@ -1,21 +0,0 @@
-// =================================================================================
-// Code generated by GoFrame CLI tool. DO NOT EDIT.
-// =================================================================================
-
-package entity
-
-// SysProvinces is the golang structure for table sys_provinces.
-type SysProvinces struct {
- Id int `json:"id" description:"ID"`
- Title string `json:"title" description:"栏目名"`
- Pid int `json:"pid" description:"父栏目"`
- ShortTitle string `json:"short_title" description:"缩写"`
- Areacode int `json:"areacode" description:"区域编码"`
- Zipcode int `json:"zipcode" description:"邮政编码"`
- Pinyin string `json:"pinyin" description:"拼音"`
- Lng string `json:"lng" description:"经度"`
- Lat string `json:"lat" description:"纬度"`
- Level int `json:"level" description:"级别"`
- Tree string `json:"tree" description:""`
- Sort uint `json:"sort" description:"排序"`
-}
diff --git a/hotgo-server/app/model/response.go b/hotgo-server/app/model/response.go
deleted file mode 100644
index 7363b09..0000000
--- a/hotgo-server/app/model/response.go
+++ /dev/null
@@ -1,17 +0,0 @@
-//
-// @Link https://github.com/bufanyun/hotgo
-// @Copyright Copyright (c) 2022 HotGo CLI
-// @Author Ms <133814250@qq.com>
-// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
-//
-package model
-
-// HTTP响应
-type Response struct {
- Code int `json:"code" example:"0" description:"状态码"`
- Message string `json:"message" example:"操作成功" description:"提示消息"`
- Data interface{} `json:"data" description:"数据集"`
- Error interface{} `json:"error" description:"错误信息"`
- Timestamp int64 `json:"timestamp" example:"1640966400" description:"服务器时间戳"`
- ReqId string `json:"req_id" v:"0" example:"d0bb93048bc5c9164cdee845dcb7f820" description:"唯一请求ID"`
-}
diff --git a/hotgo-server/app/service/adminService/dept_service.go b/hotgo-server/app/service/adminService/dept_service.go
deleted file mode 100644
index 7fb351f..0000000
--- a/hotgo-server/app/service/adminService/dept_service.go
+++ /dev/null
@@ -1,358 +0,0 @@
-package adminService
-
-import (
- "context"
- "github.com/bufanyun/hotgo/app/consts"
- "github.com/bufanyun/hotgo/app/form/input"
- "github.com/bufanyun/hotgo/app/model/entity"
- "github.com/bufanyun/hotgo/app/service/internal/dao"
- "github.com/gogf/gf/v2/errors/gerror"
- "github.com/gogf/gf/v2/os/gtime"
- "github.com/gogf/gf/v2/util/gconv"
-)
-
-var Dept = dept{}
-
-type dept struct{}
-
-//
-// @Title 菜单名称是否唯一
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return *adminForm.DictTypeUniqueRes
-// @Return error
-//
-func (service *dept) NameUnique(ctx context.Context, in input.AdminDeptNameUniqueInp) (*input.AdminDeptNameUniqueModel, error) {
-
- var res input.AdminDeptNameUniqueModel
- isUnique, err := dao.AdminDept.IsUniqueName(ctx, in.Id, in.Name)
- if err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return nil, err
- }
-
- res.IsUnique = isUnique
- return &res, nil
-}
-
-//
-// @Title 删除
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return error
-//
-func (service *dept) Delete(ctx context.Context, in input.AdminDeptDeleteInp) error {
-
- exist, err := dao.AdminRoleDept.Ctx(ctx).Where("dept_id", in.Id).One()
- if err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return err
- }
- if !exist.IsEmpty() {
- return gerror.New("请先解除该部门下所有已关联用户关联关系!")
- }
- _, err = dao.AdminDept.Ctx(ctx).Where("id", in.Id).Delete()
- if err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return err
- }
-
- return nil
-}
-
-//
-// @Title 修改/新增
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return error
-//
-func (service *dept) Edit(ctx context.Context, in input.AdminDeptEditInp) (err error) {
-
- if in.Name == "" {
- err = gerror.New("名称不能为空")
- return err
- }
-
- uniqueName, err := dao.AdminDept.IsUniqueName(ctx, in.Id, in.Name)
- if err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return err
- }
- if !uniqueName {
- err = gerror.New("名称已存在")
- return err
- }
-
- // 修改
- in.UpdatedAt = gtime.Now()
- if in.Id > 0 {
- _, err = dao.AdminDept.Ctx(ctx).Where("id", in.Id).Data(in).Update()
- if err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return err
- }
-
- return nil
- }
-
- // 新增
- in.CreatedAt = gtime.Now()
- _, err = dao.AdminDept.Ctx(ctx).Data(in).Insert()
- if err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return err
- }
- return nil
-}
-
-//
-// @Title 最大排序
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return *adminForm.DictDataMaxSortRes
-// @Return error
-//
-func (service *dept) MaxSort(ctx context.Context, in input.AdminDeptMaxSortInp) (*input.AdminDeptMaxSortModel, error) {
- var res input.AdminDeptMaxSortModel
-
- if in.Id > 0 {
- if err := dao.AdminDept.Ctx(ctx).Where("id", in.Id).Order("sort desc").Scan(&res); err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return nil, err
- }
- }
-
- res.Sort = res.Sort + 10
-
- return &res, nil
-}
-
-//
-// @Title 获取指定字典类型信息
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return *adminForm.DictTypeViewRes
-// @Return error
-//
-func (service *dept) View(ctx context.Context, in input.AdminDeptViewInp) (res *input.AdminDeptViewModel, err error) {
-
- if err = dao.AdminDept.Ctx(ctx).Where("id", in.Id).Scan(&res); err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return nil, err
- }
-
- return res, nil
-}
-
-//
-// @Title 获取列表
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return res
-// @Return err
-//
-func (service *dept) List(ctx context.Context, in input.AdminDeptListInp) (list []*input.AdminDeptListModel, err error) {
-
- mod := dao.AdminDept.Ctx(ctx)
-
- var (
- dataList []*entity.AdminDept
- models []*DeptTree
- //searchResult []*entity.AdminDept
- //id int64
- //ids []int64
- )
-
- // 部门名称
- if in.Name != "" {
- //err = dao.AdminDept.Ctx(ctx).WhereLike("name", "%"+in.Name+"%").Scan(&searchResult)
- //if err != nil {
- // err = gerror.Wrap(err, consts.ErrorORM)
- // return nil, err
- //}
- //for i := 0; i < len(searchResult); i++ {
- // id, err = dao.AdminDept.TopPid(ctx, searchResult[i])
- // ids = append(ids, id)
- //}
- //
- //if len(ids) == 0 {
- // return nil, nil
- //}
- //mod = mod.Where("id", ids)
- }
-
- err = mod.Order("id desc").Scan(&dataList)
- if err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return list, err
- }
-
- _ = gconv.Structs(dataList, &models)
-
- childIds := service.getDeptChildIds(ctx, models, 0)
-
- _ = gconv.Structs(childIds, &list)
-
- return list, nil
-}
-
-type DeptTree struct {
- entity.AdminDept
- Children []*DeptTree `json:"children"`
-}
-
-//
-// @Title 将列表转为父子关系列表
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param lists
-// @Param pid
-// @Return []*RelationTree
-//
-func (service *dept) getDeptChildIds(ctx context.Context, lists []*DeptTree, pid int64) []*DeptTree {
-
- var (
- count = len(lists)
- newLists []*DeptTree
- )
-
- if count == 0 {
- return nil
- }
-
- for i := 0; i < len(lists); i++ {
- if lists[i].Id > 0 && lists[i].Pid == pid {
- var row *DeptTree
- if err := gconv.Structs(lists[i], &row); err != nil {
- panic(err)
- }
- row.Children = service.getDeptChildIds(ctx, lists, row.Id)
- newLists = append(newLists, row)
- }
- }
-
- return newLists
-}
-
-type DeptListTree struct {
- Id int64 `json:"id" `
- Key int64 `json:"key" `
- Pid int64 `json:"pid" `
- Label string `json:"label"`
- Title string `json:"title"`
- Name string `json:"name"`
- Type string `json:"type"`
- Children []*DeptListTree `json:"children"`
-}
-
-//
-// @Title 获取列表树
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return res
-// @Return err
-//
-func (service *dept) ListTree(ctx context.Context, in input.AdminDeptListTreeInp) (list []*input.AdminDeptListTreeModel, err error) {
-
- mod := dao.AdminDept.Ctx(ctx)
-
- var (
- dataList []*entity.AdminDept
- models []*DeptListTree
- )
-
- err = mod.Order("id desc").Scan(&dataList)
- if err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return list, err
- }
-
- _ = gconv.Structs(dataList, &models)
-
- // TODO 重写树入参
- for i := 0; i < len(models); i++ {
- models[i].Key = models[i].Id
- models[i].Title = models[i].Name
- models[i].Label = models[i].Name
- }
-
- childIds := service.getDeptTreeChildIds(ctx, models, 0)
-
- _ = gconv.Structs(childIds, &list)
-
- return list, nil
-}
-
-//
-// @Title 将列表转为父子关系列表
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param lists
-// @Param pid
-// @Return []*RelationTree
-//
-func (service *dept) getDeptTreeChildIds(ctx context.Context, lists []*DeptListTree, pid int64) []*DeptListTree {
-
- var (
- count = len(lists)
- newLists []*DeptListTree
- )
-
- if count == 0 {
- return nil
- }
-
- for i := 0; i < len(lists); i++ {
- if lists[i].Id > 0 && lists[i].Pid == pid {
- var row *DeptListTree
- if err := gconv.Structs(lists[i], &row); err != nil {
- panic(err)
- }
- row.Children = service.getDeptTreeChildIds(ctx, lists, row.Id)
- newLists = append(newLists, row)
- }
- }
-
- return newLists
-}
-
-//
-// @Title 获取部门名称
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param id
-// @Return name
-// @Return err
-//
-func (service *dept) GetName(ctx context.Context, id int64) (name string, err error) {
-
- var data entity.AdminDept
-
- err = dao.AdminDept.Ctx(ctx).
- Where("id", id).
- Fields("name").
- Scan(&data)
- if err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return name, err
- }
-
- return data.Name, nil
-}
diff --git a/hotgo-server/app/service/adminService/member_service.go b/hotgo-server/app/service/adminService/member_service.go
deleted file mode 100644
index 2f1b7ef..0000000
--- a/hotgo-server/app/service/adminService/member_service.go
+++ /dev/null
@@ -1,657 +0,0 @@
-//
-// @Link https://github.com/bufanyun/hotgo
-// @Copyright Copyright (c) 2022 HotGo CLI
-// @Author Ms <133814250@qq.com>
-// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
-//
-package adminService
-
-import (
- "context"
- "github.com/bufanyun/hotgo/app/com"
- "github.com/bufanyun/hotgo/app/consts"
- "github.com/bufanyun/hotgo/app/form/adminForm"
- "github.com/bufanyun/hotgo/app/form/input"
- "github.com/bufanyun/hotgo/app/model"
- "github.com/bufanyun/hotgo/app/model/entity"
- "github.com/bufanyun/hotgo/app/service/internal/dao"
- "github.com/bufanyun/hotgo/app/service/internal/dto"
- "github.com/gogf/gf/v2/crypto/gmd5"
- "github.com/gogf/gf/v2/errors/gerror"
- "github.com/gogf/gf/v2/frame/g"
- "github.com/gogf/gf/v2/os/gtime"
- "github.com/gogf/gf/v2/util/gconv"
- "github.com/gogf/gf/v2/util/grand"
-)
-
-var Member = new(member)
-
-type member struct{}
-
-//
-// @Title 修改登录密码
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return *adminForm.DictTypeUniqueRes
-// @Return error
-//
-func (service *member) UpdateProfile(ctx context.Context, in input.AdminMemberUpdateProfileInp) (err error) {
-
- memberId := com.Context.Get(ctx).User.Id
- if memberId <= 0 {
- err := gerror.New("获取用户信息失败!")
- return err
- }
-
- var memberInfo entity.AdminMember
- if err = dao.AdminMember.Ctx(ctx).Where("id", memberId).Scan(&memberInfo); err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return err
- }
-
- _, err = dao.AdminMember.Ctx(ctx).
- Where("id", memberId).
- Data(g.Map{
- "mobile": in.Mobile,
- "email": in.Email,
- "realname": in.Realname,
- }).
- Update()
-
- if err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return err
- }
-
- return
-}
-
-//
-// @Title 修改登录密码
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return *adminForm.DictTypeUniqueRes
-// @Return error
-//
-func (service *member) UpdatePwd(ctx context.Context, in input.AdminMemberUpdatePwdInp) (err error) {
-
- var memberInfo entity.AdminMember
- if err = dao.AdminMember.Ctx(ctx).Where("id", in.Id).Scan(&memberInfo); err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return err
- }
-
- if gmd5.MustEncryptString(in.OldPassword+memberInfo.Salt) != memberInfo.PasswordHash {
- err = gerror.New("原密码不正确")
- return err
- }
-
- _, err = dao.AdminMember.Ctx(ctx).
- Where("id", in.Id).
- Data(g.Map{
- "password_hash": gmd5.MustEncryptString(in.NewPassword + memberInfo.Salt),
- "updated_at": gtime.Now(),
- }).
- Update()
- if err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return err
- }
-
- return
-}
-
-//
-// @Title 重置密码
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return *adminForm.DictTypeUniqueRes
-// @Return error
-//
-func (service *member) ResetPwd(ctx context.Context, in input.AdminMemberResetPwdInp) (err error) {
-
- var memberInfo entity.AdminMember
- if err = dao.AdminMember.Ctx(ctx).Where("id", in.Id).Scan(&memberInfo); err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return err
- }
-
- _, err = dao.AdminMember.Ctx(ctx).
- Where("id", in.Id).
- Data(g.Map{
- "password_hash": gmd5.MustEncryptString(in.Password + memberInfo.Salt),
- "updated_at": gtime.Now(),
- }).
- Update()
- if err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return err
- }
-
- return
-}
-
-//
-// @Title 菜单名称是否唯一
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return *adminForm.DictTypeUniqueRes
-// @Return error
-//
-func (service *member) EmailUnique(ctx context.Context, in input.AdminMemberEmailUniqueInp) (*input.AdminMemberEmailUniqueModel, error) {
-
- var res input.AdminMemberEmailUniqueModel
- isUnique, err := dao.AdminMember.IsUniqueEmail(ctx, in.Id, in.Email)
- if err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return nil, err
- }
-
- res.IsUnique = isUnique
- return &res, nil
-}
-
-//
-// @Title 手机号是否唯一
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return *adminForm.DictTypeUniqueRes
-// @Return error
-//
-func (service *member) MobileUnique(ctx context.Context, in input.AdminMemberMobileUniqueInp) (*input.AdminMemberMobileUniqueModel, error) {
-
- var res input.AdminMemberMobileUniqueModel
- isUnique, err := dao.AdminMember.IsUniqueMobile(ctx, in.Id, in.Mobile)
- if err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return nil, err
- }
-
- res.IsUnique = isUnique
- return &res, nil
-}
-
-//
-// @Title 菜单名称是否唯一
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return *adminForm.DictTypeUniqueRes
-// @Return error
-//
-func (service *member) NameUnique(ctx context.Context, in input.AdminMemberNameUniqueInp) (*input.AdminMemberNameUniqueModel, error) {
-
- var res input.AdminMemberNameUniqueModel
- isUnique, err := dao.AdminMember.IsUniqueName(ctx, in.Id, in.Username)
- if err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return nil, err
- }
-
- res.IsUnique = isUnique
- return &res, nil
-}
-
-//
-// @Title 删除
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return error
-//
-func (service *member) Delete(ctx context.Context, in input.AdminMemberDeleteInp) error {
-
- exist, err := dao.AdminMember.Ctx(ctx).Where("member_id", in.Id).One()
- if err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return err
- }
- if !exist.IsEmpty() {
- return gerror.New("请先解除该部门下所有已关联用户关联关系!")
- }
- _, err = dao.AdminMember.Ctx(ctx).Where("id", in.Id).Delete()
- if err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return err
- }
-
- return nil
-}
-
-//
-// @Title 修改/新增
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return error
-//
-func (service *member) Edit(ctx context.Context, in input.AdminMemberEditInp) (err error) {
-
- if in.Username == "" {
- err = gerror.New("帐号不能为空")
- return err
- }
-
- uniqueName, err := dao.AdminMember.IsUniqueName(ctx, in.Id, in.Username)
- if err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return err
- }
- if !uniqueName {
- err = gerror.New("帐号已存在")
- return err
- }
-
- if in.Mobile != "" {
- uniqueMobile, err := dao.AdminMember.IsUniqueMobile(ctx, in.Id, in.Mobile)
- if err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return err
- }
- if !uniqueMobile {
- err = gerror.New("手机号已存在")
- return err
- }
- }
-
- if in.Email != "" {
- uniqueEmail, err := dao.AdminMember.IsUniqueMobile(ctx, in.Id, in.Email)
- if err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return err
- }
- if !uniqueEmail {
- err = gerror.New("邮箱已存在")
- return err
- }
- }
-
- // 修改
- in.UpdatedAt = gtime.Now()
- if in.Id > 0 {
- _, err = dao.AdminMember.Ctx(ctx).Where("id", in.Id).Data(in).Update()
- if err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return err
- }
-
- // 更新岗位
- err = MemberPost.UpdatePostIds(ctx, in.Id, in.PostIds)
- if err != nil {
- return err
- }
- return nil
- }
-
- // 新增
- in.CreatedAt = gtime.Now()
-
- // 新增用户时的额外属性
- var data input.AdminMemberAddInp
- data.AdminMemberEditInp = in
- data.Salt = grand.S(6)
- data.PasswordHash = gmd5.MustEncryptString(data.Password + data.Salt)
-
- g.Log().Print(ctx, "data.Salt:", data)
- insert, err := dao.AdminMember.Ctx(ctx).Data(data).Insert()
- if err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return err
- }
-
- // 更新岗位
- id, err := insert.LastInsertId()
- if err != nil {
- return err
- }
- err = MemberPost.UpdatePostIds(ctx, id, in.PostIds)
- if err != nil {
- return err
- }
- return nil
-}
-
-//
-// @Title 最大排序
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return *adminForm.DictDataMaxSortRes
-// @Return error
-//
-func (service *member) MaxSort(ctx context.Context, in input.AdminMemberMaxSortInp) (*input.AdminMemberMaxSortModel, error) {
- var res input.AdminMemberMaxSortModel
-
- if in.Id > 0 {
- if err := dao.AdminMember.Ctx(ctx).Where("id", in.Id).Order("sort desc").Scan(&res); err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return nil, err
- }
- }
-
- res.Sort = res.Sort + 10
-
- return &res, nil
-}
-
-//
-// @Title 获取指定字典类型信息
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return *adminForm.DictTypeViewRes
-// @Return error
-//
-func (service *member) View(ctx context.Context, in input.AdminMemberViewInp) (res *input.AdminMemberViewModel, err error) {
-
- if err = dao.AdminMember.Ctx(ctx).Where("id", in.Id).Scan(&res); err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return nil, err
- }
-
- return res, nil
-}
-
-//
-// @Title 获取列表
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return res
-// @Return err
-//
-func (service *member) List(ctx context.Context, in input.AdminMemberListInp) (list []*input.AdminMemberListModel, totalCount int, err error) {
-
- var authorization = com.Jwt.GetAuthorization(com.Context.Get(ctx).Request)
- // TODO 获取jwtToken
- jwtToken := consts.RedisJwtToken + gmd5.MustEncryptString(authorization)
- g.Log().Print(ctx, "jwtToken:", jwtToken)
-
- mod := dao.AdminMember.Ctx(ctx)
-
- if in.Realname != "" {
- mod = mod.WhereLike("realname", "%"+in.Realname+"%")
- }
- if in.Username != "" {
- mod = mod.WhereLike("username", "%"+in.Username+"%")
- }
- if in.Mobile > 0 {
- mod = mod.Where("mobile", in.Mobile)
- }
- if in.Status > 0 {
- mod = mod.Where("status", in.Status)
- }
- if in.DeptId > 0 {
- mod = mod.Where("dept_id", in.DeptId)
- }
-
- // 日期范围
- if in.StartTime != "" {
- mod = mod.WhereGTE("created_at", in.StartTime)
- }
- if in.EndTime != "" {
- mod = mod.WhereLTE("created_at", in.EndTime)
- }
-
- totalCount, err = mod.Count()
- if err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return list, totalCount, err
- }
-
- err = mod.Page(in.Page, in.Limit).Order("id desc").Scan(&list)
- if err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return list, totalCount, err
- }
-
- // TODO 重写树入参
- for i := 0; i < len(list); i++ {
- // TODO 部门
- deptName, err := dao.AdminDept.Ctx(ctx).
- Fields("name").
- Where("id", list[i].DeptId).
- Value()
- if err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return list, totalCount, err
- }
- list[i].DeptName = deptName.String()
-
- // TODO 角色
- roleName, err := dao.AdminRole.Ctx(ctx).
- Fields("name").
- Where("id", list[i].Role).
- Value()
- if err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return list, totalCount, err
- }
- list[i].RoleName = roleName.String()
- }
-
- return list, totalCount, err
-}
-
-// //
-// @Title 获取登录用户信息
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return res
-// @Return err
-//
-func (service *member) LoginMemberInfo(ctx context.Context, req *adminForm.MemberInfoReq) (res *adminForm.MemberInfoRes, err error) {
-
- var (
- defaultPortalConfig adminForm.PortalConfig
- defaultPortalConfigs []*adminForm.PortalConfig
- configContent adminForm.PortalConfigContent
- configContents []*adminForm.PortalConfigContent
- configContentOptions []*adminForm.PortalConfigContentOptions
- Options adminForm.PortalConfigContentOptions
- )
-
- g.Log().Print(ctx, "测试")
-
- // TODO 配置内容选项
- Options.TitleRequired = true
- Options.Refresh = 1
- configContentOptions = append(configContentOptions, &Options)
-
- // TODO 配置内容
- configContent.Options = configContentOptions
- configContent.Id = 1
- configContent.X = 0
- configContent.Y = 0
- configContent.W = 3
- configContent.H = 262
- configContent.I = 1
- configContent.Key = "kuaijierukou"
- configContent.IsShowTitle = "N"
- configContent.IsAllowDrag = false
- configContent.Name = "快捷入口"
- configContent.Type = "smallPage"
- configContent.Url = "dashboard/portal/CommonUse"
- configContent.Moved = true
-
- configContents = append(configContents, &configContent)
-
- // TODO 默认配置
- defaultPortalConfig.Id = "4ae60dd1debe462096698e1da993317a"
- defaultPortalConfig.Name = "首页"
- defaultPortalConfig.Code = "6c297eb4651940edbb45c87c75be00d7"
- defaultPortalConfig.ApplicationRange = "U"
- defaultPortalConfig.IsDefault = "Y"
- defaultPortalConfig.ResourceId = "1"
- defaultPortalConfig.SystemDefinedId = "app1"
- defaultPortalConfig.PortalConfigContent = gconv.String(configContents)
-
- defaultPortalConfigs = append(defaultPortalConfigs, &defaultPortalConfig)
-
- member := com.Context.Get(ctx).User
-
- noticeList, err := Notice.WhereAll(ctx, dto.AdminNotice{
- Status: consts.StatusEnabled,
- })
- if err != nil {
- noticeList = nil
- }
-
- res = &adminForm.MemberInfoRes{
- LincenseInfo: consts.VersionApp,
- Permissions: []string{"*:*:*"},
- Roles: []string{"admin"},
- User: *member,
- DefaultPortalConfig: defaultPortalConfigs,
- UserPortalConfig: defaultPortalConfigs,
- SysNoticeList: noticeList,
- }
-
- return
-}
-
-//
-// @Title 提交登录
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return res
-// @Return err
-//
-func (service *member) Login(ctx context.Context, in input.AdminMemberLoginSignInp) (res *input.AdminMemberLoginSignModel, err error) {
-
- var member *entity.AdminMember
- err = dao.AdminMember.Ctx(ctx).Where("username", in.Username).Scan(&member)
-
- if err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return
- }
- if member == nil {
- err = gerror.New(consts.ErrorNotData)
- return
- }
-
- if member.Salt == "" {
- err = gerror.New("用户信息错误")
- return
- }
-
- if member.PasswordHash != gmd5.MustEncryptString(in.Password+member.Salt) {
- err = gerror.New("用户密码不正确")
- return
- }
-
- // 默认设备
- if in.Device != consts.AppAdmin && in.Device != consts.AppApi {
- in.Device = consts.AppAdmin
- }
-
- // TODO 生成token
- jwtExpires, err := g.Cfg().Get(ctx, "jwt.expires", 1)
- if err != nil {
- err := gerror.New(err.Error())
- return nil, err
- }
- // TODO 有效期
- expires := jwtExpires.Int64()
-
- // TODO 过期时间戳
- exp := gconv.Int64(gtime.Timestamp()) + expires
-
- var identity *model.Identity
- identity = &model.Identity{
- Id: member.Id,
- Username: member.Username,
- Realname: member.Realname,
- Avatar: member.Avatar,
- Email: member.Email,
- Mobile: member.Mobile,
- VisitCount: member.VisitCount,
- LastTime: member.LastTime,
- LastIp: member.LastIp,
- Role: member.Role,
- Exp: exp,
- Expires: expires,
- App: consts.AppAdmin,
- }
- token, err := com.Jwt.GenerateLoginToken(ctx, identity, false)
- if err != nil {
- err = gerror.New(err.Error())
- return
- }
-
- // TODO 更新登录信息
- authKey := gmd5.MustEncryptString(gconv.String(token))
-
- _, err = dao.AdminMember.Ctx(ctx).Data(dto.AdminMember{
- AuthKey: gmd5.MustEncryptString(authKey),
- VisitCount: member.VisitCount + 1,
- LastTime: gtime.Timestamp(),
- LastIp: com.Context.Get(ctx).Request.GetClientIp(),
- }).Where(dto.AdminMember{
- Id: member.Id,
- }).Update()
-
- if err != nil {
- err = gerror.New(err.Error())
- return
- }
-
- res = &input.AdminMemberLoginSignModel{
- Identity: *identity,
- Token: gconv.String(token),
- }
-
- return res, nil
-}
-
-//
-// @Title 获取角色下的会员列表
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return res
-// @Return err
-//
-func (service *member) RoleMemberList(ctx context.Context, in input.AdminRoleMemberListInp) (list []*input.AdminMemberListModel, totalCount int, err error) {
-
- mod := dao.AdminMember.Ctx(ctx)
- if in.Role > 0 {
- mod = mod.Where("role", in.Role)
- }
-
- totalCount, err = mod.Count()
- if err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return list, totalCount, err
- }
-
- err = mod.Page(in.Page, in.Limit).Order("id desc").Scan(&list)
- if err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return list, totalCount, err
- }
-
- return list, totalCount, err
-}
diff --git a/hotgo-server/app/service/adminService/menu_service.go b/hotgo-server/app/service/adminService/menu_service.go
deleted file mode 100644
index 35f9efd..0000000
--- a/hotgo-server/app/service/adminService/menu_service.go
+++ /dev/null
@@ -1,533 +0,0 @@
-//
-// @Link https://github.com/bufanyun/hotgo
-// @Copyright Copyright (c) 2022 HotGo CLI
-// @Author Ms <133814250@qq.com>
-// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
-//
-package adminService
-
-import (
- "context"
- "github.com/bufanyun/hotgo/app/consts"
- "github.com/bufanyun/hotgo/app/form/adminForm"
- "github.com/bufanyun/hotgo/app/form/input"
- "github.com/bufanyun/hotgo/app/model"
- "github.com/bufanyun/hotgo/app/model/entity"
- "github.com/bufanyun/hotgo/app/service/internal/dao"
- "github.com/bufanyun/hotgo/app/service/internal/dto"
- "github.com/gogf/gf/v2/errors/gerror"
- "github.com/gogf/gf/v2/os/gtime"
- "github.com/gogf/gf/v2/util/gconv"
-)
-
-var Menu = new(menu)
-
-type menu struct{}
-
-//
-// @Title 查询角色菜单列表
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return *adminForm.MenuSearchListRes
-// @Return error
-//
-func (service *menu) RoleList(ctx context.Context, in input.MenuRoleListInp) (*input.MenuRoleListModel, error) {
-
- var (
- mod = dao.AdminRoleMenu.Ctx(ctx)
- roleMenu []*entity.AdminRoleMenu
- lst []*model.LabelTreeMenu
- res input.MenuRoleListModel
- err error
- checkedKeys []int64
- )
-
- // TODO 获取选中菜单ID
- if in.RoleId > 0 {
- mod = mod.Where("role_id", in.RoleId)
- }
- err = mod.Fields().Scan(&roleMenu)
- if err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return nil, err
- }
- for i := 0; i < len(roleMenu); i++ {
- checkedKeys = append(checkedKeys, roleMenu[i].MenuId)
- }
- res.CheckedKeys = checkedKeys
-
- // TODO 获取菜单树
- lst, err = dao.AdminMenu.GenLabelTreeList(ctx, 0)
- if err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return nil, err
- }
-
- _ = gconv.Structs(lst, &res.Menus)
-
- return &res, nil
-}
-
-//
-// @Title 查询菜单列表
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return *adminForm.MenuSearchListRes
-// @Return error
-//
-func (service *menu) SearchList(ctx context.Context, req *adminForm.MenuSearchListReq) (*adminForm.MenuSearchListRes, error) {
-
- var (
- mod = dao.AdminMenu.Ctx(ctx)
- lst []*model.TreeMenu
- res adminForm.MenuSearchListRes
- searchResult []*entity.AdminMenu
- id int64
- ids []int64
- err error
- )
-
- if req.Name != "" {
- mod = mod.WhereLike("name", "%"+req.Name+"%")
- }
-
- if req.Status > 0 {
- mod = mod.Where("status", req.Status)
- }
-
- if req.Name != "" || req.Status > 0 {
- err = mod.Scan(&searchResult)
- if err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return nil, err
- }
- for i := 0; i < len(searchResult); i++ {
- id, err = dao.AdminMenu.TopPid(ctx, searchResult[i])
- ids = append(ids, id)
- }
- }
-
- lst, err = dao.AdminMenu.GenTreeList(ctx, 0, ids)
- if err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return nil, err
- }
-
- _ = gconv.Structs(lst, &res)
-
- return &res, nil
-}
-
-//
-// @Title 最大排序
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return *adminForm.DictDataMaxSortRes
-// @Return error
-//
-func (service *menu) MaxSort(ctx context.Context, req *adminForm.MenuMaxSortReq) (*adminForm.MenuMaxSortRes, error) {
- var (
- res adminForm.MenuMaxSortRes
- err error
- )
-
- if req.Id > 0 {
- if err = dao.AdminMenu.Ctx(ctx).Where("id", req.Id).Order("sort desc").Scan(&res); err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return nil, err
- }
- }
-
- res.Sort = res.Sort + 10
-
- return &res, nil
-}
-
-//
-// @Title 菜单名称是否唯一
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return *adminForm.DictTypeUniqueRes
-// @Return error
-//
-func (service *menu) NameUnique(ctx context.Context, req *adminForm.MenuNameUniqueReq) (*adminForm.MenuNameUniqueRes, error) {
- var (
- res adminForm.MenuNameUniqueRes
- err error
- )
-
- res.IsUnique, err = dao.AdminMenu.IsUniqueName(ctx, req.Id, req.Name)
- if err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return nil, err
- }
-
- return &res, nil
-}
-
-//
-// @Title 菜单编码是否唯一
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return *adminForm.DictTypeUniqueRes
-// @Return error
-//
-func (service *menu) CodeUnique(ctx context.Context, req *adminForm.MenuCodeUniqueReq) (*adminForm.MenuCodeUniqueRes, error) {
- var (
- res adminForm.MenuCodeUniqueRes
- err error
- )
-
- res.IsUnique, err = dao.AdminMenu.IsUniqueCode(ctx, req.Id, req.Code)
- if err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return nil, err
- }
-
- return &res, nil
-}
-
-//
-// @Title 删除
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return error
-//
-func (service *menu) Delete(ctx context.Context, req *adminForm.MenuDeleteReq) error {
-
- exist, err := dao.AdminMenu.Ctx(ctx).Where("pid", req.Id).One()
- if err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return err
- }
- if !exist.IsEmpty() {
- return gerror.New("请先删除该菜单下的所有菜单!")
- }
- _, err = dao.AdminMenu.Ctx(ctx).Where("id", req.Id).Delete()
- if err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return err
- }
-
- return nil
-}
-
-//
-// @Title 修改/新增
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return error
-//
-func (service *menu) Edit(ctx context.Context, req *adminForm.MenuEditReq) (err error) {
- var (
- pidData *dto.AdminMenu
- uniqueName bool
- uniqueCode bool
- )
-
- if req.Name == "" {
- err = gerror.New("菜单名称不能为空")
- return err
- }
- if req.Path == "" {
- err = gerror.New("菜单路径不能为空")
- return err
- }
- if req.Code == "" {
- err = gerror.New("菜单编码不能为空")
- return err
- }
-
- uniqueName, err = dao.AdminMenu.IsUniqueName(ctx, req.Id, req.Name)
- if err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return err
- }
- if !uniqueName {
- err = gerror.New("菜单名称已存在")
- return err
- }
-
- uniqueCode, err = dao.AdminMenu.IsUniqueCode(ctx, req.Id, req.Code)
- if err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return err
- }
- if !uniqueCode {
- err = gerror.New("菜单编码已存在")
- return err
- }
-
- // TODO 维护菜单等级
- if req.Pid == 0 {
- req.Level = 1
- } else {
- if err = dao.AdminMenu.Ctx(ctx).Where("id", req.Pid).Scan(&pidData); err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return err
- }
- if pidData == nil {
- return gerror.New("上级菜单信息错误")
- }
- req.Level = gconv.Int(pidData.Level) + 1
- }
-
- // 修改
- req.UpdatedAt = gtime.Now()
- if req.Id > 0 {
- if req.Pid == req.Id {
- return gerror.New("上级菜单不能是当前菜单")
- }
- _, err = dao.AdminMenu.Ctx(ctx).Where("id", req.Id).Data(req).Update()
- if err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return err
- }
-
- return nil
- }
-
- // 新增
- req.CreatedAt = gtime.Now()
- _, err = dao.AdminMenu.Ctx(ctx).Data(req).Insert()
- if err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return err
- }
- return nil
-}
-
-//
-// @Title 获取信息
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return *adminForm.DictTypeViewRes
-// @Return error
-//
-func (service *menu) View(ctx context.Context, req *adminForm.MenuViewReq) (res *adminForm.MenuViewRes, err error) {
- //var (
- // res adminForm.MenuViewRes
- //)
-
- if err = dao.AdminMenu.Ctx(ctx).Where("id", req.Id).Scan(&res); err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return nil, err
- }
-
- return res, nil
-}
-
-//
-// @Title 获取菜单列表
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return res
-// @Return err
-//
-func (service *menu) List(ctx context.Context, req *adminForm.MenuListReq) (*adminForm.MenuListRes, error) {
- var (
- m = dao.AdminMenu.Ctx(ctx)
- list []*entity.AdminMenu
- res adminForm.MenuListRes
- totalCount int
- err error
- )
-
- if req.Pid == 0 {
- m = m.Where("level", 1)
- } else {
- m = m.Where("pid", req.Pid)
- }
-
- totalCount, err = m.Count()
- if err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return nil, err
- }
-
- err = m.Page(req.Page, req.Limit).Scan(&list)
- if err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return nil, err
- }
-
- res.List = list
- res.Page = req.Page
- res.Limit = req.Limit
- res.TotalCount = totalCount
-
- return &res, nil
-}
-
-type RelationTree struct {
- adminForm.RoleDynamicBase
- Children []*RelationTree `json:"children"`
-}
-
-//
-// @Title 获取菜单列表
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param member_id
-//
-func (service *menu) GetMenuList(ctx context.Context, member_id int64) (lists *adminForm.RoleDynamicRes, err error) {
-
- var (
- results []*entity.AdminMenu
- models []*RelationTree
- recursion []*adminForm.RoleDynamicBase
- finalResponse adminForm.RoleDynamicRes
- )
-
- err = dao.AdminMenu.Ctx(ctx).Order("sort asc,id desc").Scan(&results)
- if err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return nil, err
- }
-
- for i := 0; i < len(results); i++ {
-
- // 元数据
- var (
- meta adminForm.RoleDynamicMeta
- rec adminForm.RoleDynamicBase
- )
-
- meta.Title = results[i].Name
- meta.Icon = results[i].Icon
- meta.NoCache = gconv.Bool(results[i].IsCache)
- meta.Remark = results[i].Remark
-
- rec.Id = results[i].Id
- rec.Pid = results[i].Pid
- rec.IsFrame = results[i].IsFrame
- rec.Name = results[i].Name
- rec.Code = results[i].Code
- rec.Path = results[i].Path
- rec.Hidden = results[i].IsVisible == "1"
- rec.Redirect = service.getRedirect(results[i])
- rec.Component = service.getComponent(results[i])
- rec.AlwaysShow = true
- rec.Meta = &meta
-
- recursion = append(recursion, &rec)
- }
-
- _ = gconv.Structs(recursion, &models)
-
- childIds := service.getChildIds(ctx, models, 0)
-
- _ = gconv.Structs(childIds, &finalResponse)
-
- return &finalResponse, nil
-}
-
-//
-// @Title 获取菜单的组件配置
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param model
-// @Return string
-//
-func (service *menu) getComponent(mod *entity.AdminMenu) string {
-
- if mod.Type == "M" {
- return "Layout"
- }
-
- if mod.Type == "C" {
- return mod.Component
- }
-
- return mod.Component
-}
-
-//
-// @Title 获取菜单是否重定向
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param model
-// @Return string
-//
-func (service *menu) getRedirect(model *entity.AdminMenu) string {
- if model.Type == "M" {
- return "noRedirect"
- }
-
- return ""
-}
-
-//
-// @Title 将菜单转为父子关系菜单
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param lists
-// @Param pid
-// @Return []*RelationTree
-//
-func (service *menu) getChildIds(ctx context.Context, lists []*RelationTree, pid int64) []*RelationTree {
-
- var (
- count = len(lists)
- newLists []*RelationTree
- )
-
- if count == 0 {
- return nil
- }
-
- for i := 0; i < len(lists); i++ {
- if lists[i].Id > 0 && lists[i].Pid == pid {
- var row *RelationTree
- if err := gconv.Structs(lists[i], &row); err != nil {
- panic(err)
- }
- row.Children = service.getChildIds(ctx, lists, row.Id)
- newLists = append(newLists, row)
- }
- }
-
- return newLists
-}
-
-//
-// @Title 根据条件查询一行的数据
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param where
-// @Return *entity.AdminMenu
-//
-func (service *menu) WhereScan(ctx context.Context, where dto.AdminMenu) *entity.AdminMenu {
- var (
- mod *entity.AdminMenu
- err error
- )
-
- if err = dao.AdminMenu.Ctx(ctx).Where(where).Scan(&mod); err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return nil
- }
-
- return mod
-}
diff --git a/hotgo-server/app/service/adminService/notice_service.go b/hotgo-server/app/service/adminService/notice_service.go
deleted file mode 100644
index fbefaed..0000000
--- a/hotgo-server/app/service/adminService/notice_service.go
+++ /dev/null
@@ -1,263 +0,0 @@
-//
-// @Link https://github.com/bufanyun/hotgo
-// @Copyright Copyright (c) 2022 HotGo CLI
-// @Author Ms <133814250@qq.com>
-// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
-//
-package adminService
-
-import (
- "context"
- "github.com/bufanyun/hotgo/app/consts"
- "github.com/bufanyun/hotgo/app/form/input"
- "github.com/bufanyun/hotgo/app/model/entity"
- "github.com/bufanyun/hotgo/app/service/internal/dao"
- "github.com/bufanyun/hotgo/app/service/internal/dto"
- "github.com/gogf/gf/v2/database/gdb"
- "github.com/gogf/gf/v2/errors/gerror"
- "github.com/gogf/gf/v2/os/gtime"
- "github.com/gogf/gf/v2/util/gconv"
-)
-
-var Notice = new(notice)
-
-type notice struct{}
-
-//
-// @Title 菜单名称是否唯一
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return *adminForm.DictTypeUniqueRes
-// @Return error
-//
-func (service *notice) NameUnique(ctx context.Context, in input.AdminNoticeNameUniqueInp) (*input.AdminNoticeNameUniqueModel, error) {
-
- var res input.AdminNoticeNameUniqueModel
- isUnique, err := dao.AdminNotice.IsUniqueTitle(ctx, in.Id, in.Title)
- if err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return nil, err
- }
-
- res.IsUnique = isUnique
- return &res, nil
-}
-
-//
-// @Title 删除
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return error
-//
-func (service *notice) Delete(ctx context.Context, in input.AdminNoticeDeleteInp) error {
-
- _, err := dao.AdminNotice.Ctx(ctx).Where("id", in.Id).Delete()
- if err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return err
- }
-
- return nil
-}
-
-//
-// @Title 修改/新增
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return error
-//
-func (service *notice) Edit(ctx context.Context, in input.AdminNoticeEditInp) (err error) {
-
- if in.Title == "" {
- err = gerror.New("名称不能为空")
- return err
- }
-
- uniqueName, err := dao.AdminNotice.IsUniqueTitle(ctx, in.Id, in.Title)
- if err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return err
- }
- if !uniqueName {
- err = gerror.New("名称已存在")
- return err
- }
-
- // 修改
- in.UpdatedAt = gtime.Now()
- if in.Id > 0 {
- _, err = dao.AdminNotice.Ctx(ctx).Where("id", in.Id).Data(in).Update()
- if err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return err
- }
-
- return nil
- }
-
- // 新增
- in.CreatedAt = gtime.Now()
- _, err = dao.AdminNotice.Ctx(ctx).Data(in).Insert()
- if err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return err
- }
- return nil
-}
-
-//
-// @Title 最大排序
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return *adminForm.DictDataMaxSortRes
-// @Return error
-//
-func (service *notice) MaxSort(ctx context.Context, in input.AdminNoticeMaxSortInp) (*input.AdminNoticeMaxSortModel, error) {
- var res input.AdminNoticeMaxSortModel
-
- if in.Id > 0 {
- if err := dao.AdminNotice.Ctx(ctx).Where("id", in.Id).Order("sort desc").Scan(&res); err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return nil, err
- }
- }
-
- res.Sort = res.Sort + 10
-
- return &res, nil
-}
-
-//
-// @Title 获取指定字典类型信息
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return *adminForm.DictTypeViewRes
-// @Return error
-//
-func (service *notice) View(ctx context.Context, in input.AdminNoticeViewInp) (res *input.AdminNoticeViewModel, err error) {
-
- if err = dao.AdminNotice.Ctx(ctx).Where("id", in.Id).Scan(&res); err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return nil, err
- }
-
- return res, nil
-}
-
-//
-// @Title 获取列表
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return res
-// @Return err
-//
-func (service *notice) List(ctx context.Context, in input.AdminNoticeListInp) (list []*input.AdminNoticeListModel, totalCount int, err error) {
-
- mod := dao.AdminNotice.Ctx(ctx)
-
- if in.Realname != "" {
- mod = mod.WhereLike("realname", "%"+in.Realname+"%")
- }
- if in.Username != "" {
- mod = mod.WhereLike("username", "%"+in.Username+"%")
- }
- if in.Mobile > 0 {
- mod = mod.Where("mobile", in.Mobile)
- }
- if in.Status > 0 {
- mod = mod.Where("status", in.Status)
- }
- if in.DeptId > 0 {
- mod = mod.Where("dept_id", in.DeptId)
- }
-
- // 日期范围
- if in.StartTime != "" {
- mod = mod.WhereGTE("created_at", in.StartTime)
- }
- if in.EndTime != "" {
- mod = mod.WhereLTE("created_at", in.EndTime)
- }
-
- totalCount, err = mod.Count()
- if err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return list, totalCount, err
- }
-
- err = mod.Page(in.Page, in.Limit).Order("id desc").Scan(&list)
- if err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return list, totalCount, err
- }
-
- //// TODO 重写树入参
- //for i := 0; i < len(list); i++ {
- //}
-
- return list, totalCount, err
-}
-
-//
-// @Title 根据条件查询所有数据
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param where
-// @Return []*entity.AdminNotice
-// @Return error
-//
-func (service *notice) WhereAll(ctx context.Context, where dto.AdminNotice) ([]*entity.AdminNotice, error) {
- var (
- model []*entity.AdminNotice
- err error
- result gdb.Result
- )
- result, err = dao.AdminNotice.Ctx(ctx).Where(where).All()
- if err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return nil, err
- }
-
- err = gconv.Scan(result, &model)
- if err != nil {
- err = gerror.Wrap(err, consts.ErrorRotaPointer)
- return nil, err
- }
-
- return model, nil
-}
-
-//
-// @Title 根据条件查询一行的数据
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param where
-// @Return *entity.AdminMenu
-//
-func (service *notice) WhereScan(ctx context.Context, where dto.AdminNotice) *entity.AdminNotice {
- var (
- model *entity.AdminNotice
- err error
- )
-
- if err = dao.AdminMenu.Ctx(ctx).Where(where).Scan(&model); err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return nil
- }
-
- return model
-}
diff --git a/hotgo-server/app/service/adminService/role_service.go b/hotgo-server/app/service/adminService/role_service.go
deleted file mode 100644
index 603b786..0000000
--- a/hotgo-server/app/service/adminService/role_service.go
+++ /dev/null
@@ -1,165 +0,0 @@
-//
-// @Link https://github.com/bufanyun/hotgo
-// @Copyright Copyright (c) 2022 HotGo CLI
-// @Author Ms <133814250@qq.com>
-// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
-//
-package adminService
-
-import (
- "context"
-
- "github.com/gogf/gf/v2/database/gdb"
- "github.com/gogf/gf/v2/errors/gerror"
- "github.com/gogf/gf/v2/frame/g"
-
- "github.com/bufanyun/hotgo/app/consts"
- "github.com/bufanyun/hotgo/app/form/adminForm"
- "github.com/bufanyun/hotgo/app/form/input"
- "github.com/bufanyun/hotgo/app/service/internal/dao"
- "github.com/bufanyun/hotgo/app/service/internal/dto"
- "github.com/bufanyun/hotgo/app/utils"
-)
-
-var Role = new(role)
-
-type role struct{}
-
-//
-// @Title 验证权限
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param member_id
-// @Param path
-// @Return bool
-//
-func (service *role) Verify(ctx context.Context, member_id int, path string) bool {
- var (
- err error
- )
-
- if utils.Auth.IsExceptAuth(ctx, path) {
- return true
- }
-
- menu := Menu.WhereScan(ctx, dto.AdminMenu{
- Path: path,
- Status: consts.StatusEnabled,
- })
-
- if menu == nil {
- err = gerror.New(consts.ErrorNotData)
- return false
- }
-
- g.Log().Print(ctx, "menu:", menu)
- g.Log().Print(ctx, "err:", err)
-
- return true
-}
-
-//
-// @Title 获取列表
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return res
-// @Return err
-//
-func (service *role) List(ctx context.Context, in input.AdminRoleListInp) (list []*input.AdminRoleListModel, totalCount int, err error) {
-
- mod := dao.AdminRole.Ctx(ctx)
-
- totalCount, err = mod.Count()
- if err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return list, totalCount, err
- }
-
- err = mod.Page(in.Page, in.Limit).Order("id asc").Scan(&list)
- if err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return list, totalCount, err
- }
-
- return list, totalCount, err
-}
-
-//
-// @Title 获取指定角色的名称
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param RoleId
-// @Return name
-// @Return err
-//
-func (service *role) GetName(ctx context.Context, RoleId int64) (name string, err error) {
- roleName, err := dao.AdminRole.Ctx(ctx).
- Fields("name").
- Where("id", RoleId).
- Order("id desc").
- Value()
- if err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return name, err
- }
-
- return roleName.String(), nil
-}
-
-//
-// @Title 获取指定会员的岗位列表
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return res
-// @Return err
-//
-func (service *role) GetMemberList(ctx context.Context, RoleId int64) (list []*input.AdminRoleListModel, err error) {
-
- err = dao.AdminRole.Ctx(ctx).
- Where("id", RoleId).
- Order("id desc").
- Scan(&list)
- if err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return list, err
- }
-
- return list, err
-}
-
-//
-// @Title 更改角色菜单权限
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return err
-//
-func (service *role) EditRoleMenu(ctx context.Context, reqInfo *adminForm.RoleMenuEditReq) error {
- return dao.AdminRoleMenu.Transaction(ctx, func(ctx context.Context, tx *gdb.TX) (err error) {
- _, err = dao.AdminRoleMenu.Ctx(ctx).Where("role_id", reqInfo.RoleId).Delete()
- if err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return err
- }
- addMap := make(g.List, 0, len(reqInfo.MenuIds))
- for _, v := range reqInfo.MenuIds {
- addMap = append(addMap, g.Map{
- "role_id": reqInfo.RoleId,
- "menu_id": v,
- })
- }
- _, err = dao.AdminRoleMenu.Ctx(ctx).Data(addMap).Insert()
- if err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return err
- }
- return nil
- })
-}
diff --git a/hotgo-server/app/service/apiService/member_service.go b/hotgo-server/app/service/apiService/member_service.go
deleted file mode 100644
index 0ea9a02..0000000
--- a/hotgo-server/app/service/apiService/member_service.go
+++ /dev/null
@@ -1,23 +0,0 @@
-//
-// @Link https://github.com/bufanyun/hotgo
-// @Copyright Copyright (c) 2022 HotGo CLI
-// @Author Ms <133814250@qq.com>
-// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
-//
-package apiService
-
-import (
- "context"
- "github.com/gogf/gf/v2/frame/g"
-)
-
-var Member = new(member)
-
-type member struct {}
-
-func (service *member) Test() (ctx context.Context) {
- g.Log().Print(ctx, "apiService--WithMember--test...")
-
- //g.Log().Print(ctx, "api调用:" , service.App.Admin.Member.Test())
- return
-}
\ No newline at end of file
diff --git a/hotgo-server/app/service/internal/dao/admin_menu_old.go b/hotgo-server/app/service/internal/dao/admin_menu_old.go
deleted file mode 100644
index 265e376..0000000
--- a/hotgo-server/app/service/internal/dao/admin_menu_old.go
+++ /dev/null
@@ -1,24 +0,0 @@
-// =================================================================================
-// This is auto-generated by GoFrame CLI tool only once. Fill this file as you wish.
-// =================================================================================
-
-package dao
-
-import (
- "github.com/bufanyun/hotgo/app/service/internal/dao/internal"
-)
-
-// adminMenuOldDao is the data access object for table hg_admin_menu_old.
-// You can define custom methods on it to extend its functionality as you wish.
-type adminMenuOldDao struct {
- *internal.AdminMenuOldDao
-}
-
-var (
- // AdminMenuOld is globally public accessible object for table hg_admin_menu_old operations.
- AdminMenuOld = adminMenuOldDao{
- internal.NewAdminMenuOldDao(),
- }
-)
-
-// Fill with you ideas below.
diff --git a/hotgo-server/app/service/internal/dao/admin_notice.go b/hotgo-server/app/service/internal/dao/admin_notice.go
deleted file mode 100644
index b64b4fa..0000000
--- a/hotgo-server/app/service/internal/dao/admin_notice.go
+++ /dev/null
@@ -1,58 +0,0 @@
-// =================================================================================
-// This is auto-generated by GoFrame CLI tool only once. Fill this file as you wish.
-// =================================================================================
-
-package dao
-
-import (
- "context"
- "github.com/bufanyun/hotgo/app/consts"
- "github.com/bufanyun/hotgo/app/model/entity"
- "github.com/bufanyun/hotgo/app/service/internal/dao/internal"
- "github.com/gogf/gf/v2/errors/gerror"
-)
-
-// adminNoticeDao is the data access object for table hg_admin_notice.
-// You can define custom methods on it to extend its functionality as you wish.
-type adminNoticeDao struct {
- *internal.AdminNoticeDao
-}
-
-var (
- // AdminNotice is globally public accessible object for table hg_admin_notice operations.
- AdminNotice = adminNoticeDao{
- internal.NewAdminNoticeDao(),
- }
-)
-
-// Fill with you ideas below.
-
-//
-// @Title 判断名称是否唯一
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param id
-// @Param name
-// @Return bool
-// @Return error
-//
-func (dao *adminNoticeDao) IsUniqueTitle(ctx context.Context, id int64, title string) (bool, error) {
- var data *entity.AdminNotice
- m := dao.Ctx(ctx).Where("title", title)
-
- if id > 0 {
- m = m.WhereNot("id", id)
- }
-
- if err := m.Scan(&data); err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return false, err
- }
-
- if data == nil {
- return true, nil
- }
-
- return false, nil
-}
diff --git a/hotgo-server/app/service/internal/dao/admin_role.go b/hotgo-server/app/service/internal/dao/admin_role.go
deleted file mode 100644
index 3ef3b48..0000000
--- a/hotgo-server/app/service/internal/dao/admin_role.go
+++ /dev/null
@@ -1,24 +0,0 @@
-// =================================================================================
-// This is auto-generated by GoFrame CLI tool only once. Fill this file as you wish.
-// =================================================================================
-
-package dao
-
-import (
- "github.com/bufanyun/hotgo/app/service/internal/dao/internal"
-)
-
-// adminRoleDao is the data access object for table hg_admin_role.
-// You can define custom methods on it to extend its functionality as you wish.
-type adminRoleDao struct {
- *internal.AdminRoleDao
-}
-
-var (
- // AdminRole is globally public accessible object for table hg_admin_role operations.
- AdminRole = adminRoleDao{
- internal.NewAdminRoleDao(),
- }
-)
-
-// Fill with you ideas below.
diff --git a/hotgo-server/app/service/internal/dao/internal/admin_menu_old.go b/hotgo-server/app/service/internal/dao/internal/admin_menu_old.go
deleted file mode 100644
index a2c50e8..0000000
--- a/hotgo-server/app/service/internal/dao/internal/admin_menu_old.go
+++ /dev/null
@@ -1,108 +0,0 @@
-// ==========================================================================
-// Code generated by GoFrame CLI tool. DO NOT EDIT.
-// ==========================================================================
-
-package internal
-
-import (
- "context"
- "github.com/gogf/gf/v2/database/gdb"
- "github.com/gogf/gf/v2/frame/g"
-)
-
-// AdminMenuOldDao is the data access object for table hg_admin_menu_old.
-type AdminMenuOldDao struct {
- table string // table is the underlying table name of the DAO.
- group string // group is the database configuration group name of current DAO.
- columns AdminMenuOldColumns // columns contains all the column names of Table for convenient usage.
-}
-
-// AdminMenuOldColumns defines and stores column names for table hg_admin_menu_old.
-type AdminMenuOldColumns struct {
- Id string // 菜单ID
- Pid string // 父菜单ID
- Name string // 菜单名称
- Icon string // 菜单图标
- Type string // 菜单类型(M目录 C菜单 F按钮)
- Perms string // 权限标识
- Path string // 路由地址
- Component string // 组件路径
- Query string // 路由参数
- IsFrame string // 是否为外链(0是 1否)
- IsCache string // 是否缓存(0缓存 1不缓存)
- IsVisible string // 菜单状态(0显示 1隐藏)
- Remark string // 备注
- Level string // 级别
- Tree string // 树
- Sort string // 排序
- Status string // 菜单状态
- CreatedAt string // 创建时间
- UpdatedAt string // 更新时间
-}
-
-// adminMenuOldColumns holds the columns for table hg_admin_menu_old.
-var adminMenuOldColumns = AdminMenuOldColumns{
- Id: "id",
- Pid: "pid",
- Name: "name",
- Icon: "icon",
- Type: "type",
- Perms: "perms",
- Path: "path",
- Component: "component",
- Query: "query",
- IsFrame: "is_frame",
- IsCache: "is_cache",
- IsVisible: "is_visible",
- Remark: "remark",
- Level: "level",
- Tree: "tree",
- Sort: "sort",
- Status: "status",
- CreatedAt: "created_at",
- UpdatedAt: "updated_at",
-}
-
-// NewAdminMenuOldDao creates and returns a new DAO object for table data access.
-func NewAdminMenuOldDao() *AdminMenuOldDao {
- return &AdminMenuOldDao{
- group: "default",
- table: "hg_admin_menu_old",
- columns: adminMenuOldColumns,
- }
-}
-
-// DB retrieves and returns the underlying raw database management object of current DAO.
-func (dao *AdminMenuOldDao) DB() gdb.DB {
- return g.DB(dao.group)
-}
-
-// Table returns the table name of current dao.
-func (dao *AdminMenuOldDao) Table() string {
- return dao.table
-}
-
-// Columns returns all column names of current dao.
-func (dao *AdminMenuOldDao) Columns() AdminMenuOldColumns {
- return dao.columns
-}
-
-// Group returns the configuration group name of database of current dao.
-func (dao *AdminMenuOldDao) Group() string {
- return dao.group
-}
-
-// Ctx creates and returns the Model for current DAO, It automatically sets the context for current operation.
-func (dao *AdminMenuOldDao) Ctx(ctx context.Context) *gdb.Model {
- return dao.DB().Model(dao.table).Safe().Ctx(ctx)
-}
-
-// Transaction wraps the transaction logic using function f.
-// It rollbacks the transaction and returns the error from function f if it returns non-nil error.
-// It commits the transaction and returns nil if function f returns nil.
-//
-// Note that, you should not Commit or Rollback the transaction in function f
-// as it is automatically handled by this function.
-func (dao *AdminMenuOldDao) Transaction(ctx context.Context, f func(ctx context.Context, tx *gdb.TX) error) (err error) {
- return dao.Ctx(ctx).Transaction(ctx, f)
-}
diff --git a/hotgo-server/app/service/internal/dao/sys_config.go b/hotgo-server/app/service/internal/dao/sys_config.go
deleted file mode 100644
index 9915d79..0000000
--- a/hotgo-server/app/service/internal/dao/sys_config.go
+++ /dev/null
@@ -1,58 +0,0 @@
-// =================================================================================
-// This is auto-generated by GoFrame CLI tool only once. Fill this file as you wish.
-// =================================================================================
-
-package dao
-
-import (
- "context"
- "github.com/bufanyun/hotgo/app/consts"
- "github.com/bufanyun/hotgo/app/model/entity"
- "github.com/bufanyun/hotgo/app/service/internal/dao/internal"
- "github.com/gogf/gf/v2/errors/gerror"
-)
-
-// sysConfigDao is the data access object for table hg_sys_config.
-// You can define custom methods on it to extend its functionality as you wish.
-type sysConfigDao struct {
- *internal.SysConfigDao
-}
-
-var (
- // SysConfig is globally public accessible object for table hg_sys_config operations.
- SysConfig = sysConfigDao{
- internal.NewSysConfigDao(),
- }
-)
-
-//
-// @Title 判断名称是否唯一
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param id
-// @Param name
-// @Return bool
-// @Return error
-//
-func (dao *sysConfigDao) IsUniqueName(ctx context.Context, id int64, name string) (bool, error) {
- var data *entity.SysConfig
- m := dao.Ctx(ctx).Where("name", name)
-
- if id > 0 {
- m = m.WhereNot("id", id)
- }
-
- if err := m.Scan(&data); err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return false, err
- }
-
- if data == nil {
- return true, nil
- }
-
- return false, nil
-}
-
-// Fill with you ideas below.
diff --git a/hotgo-server/app/service/internal/dao/sys_dict_data.go b/hotgo-server/app/service/internal/dao/sys_dict_data.go
deleted file mode 100644
index c0b6b11..0000000
--- a/hotgo-server/app/service/internal/dao/sys_dict_data.go
+++ /dev/null
@@ -1,62 +0,0 @@
-// =================================================================================
-// This is auto-generated by GoFrame CLI tool only once. Fill this file as you wish.
-// =================================================================================
-
-package dao
-
-import (
- "context"
- "github.com/bufanyun/hotgo/app/consts"
- "github.com/bufanyun/hotgo/app/model/entity"
- "github.com/bufanyun/hotgo/app/service/internal/dao/internal"
- "github.com/gogf/gf/v2/errors/gerror"
-)
-
-// sysDictDataDao is the data access object for table hg_sys_dict_data.
-// You can define custom methods on it to extend its functionality as you wish.
-type sysDictDataDao struct {
- *internal.SysDictDataDao
-}
-
-var (
- // SysDictData is globally public accessible object for table hg_sys_dict_data operations.
- SysDictData = sysDictDataDao{
- internal.NewSysDictDataDao(),
- }
-)
-
-//
-// @Title 判断字典类型是否唯一
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param id
-// @Param dictType
-// @Return bool
-// @Return error
-//
-func (dao *sysDictDataDao) IsUnique(ctx context.Context, id int64, dictType string, dictValue string) (bool, error) {
- var (
- data *entity.SysDictData
- err error
- )
- m := dao.Ctx(ctx).Where("type", dictType).Where("value", dictValue)
-
- if id > 0 {
- m = m.WhereNot("id", id)
- }
-
- if err = m.Scan(&data); err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return false, err
- }
-
- if data == nil {
- return true, nil
- }
-
- return false, nil
-
-}
-
-// Fill with you ideas below.
diff --git a/hotgo-server/app/service/internal/dao/sys_dict_type.go b/hotgo-server/app/service/internal/dao/sys_dict_type.go
deleted file mode 100644
index 0f6c73a..0000000
--- a/hotgo-server/app/service/internal/dao/sys_dict_type.go
+++ /dev/null
@@ -1,62 +0,0 @@
-// =================================================================================
-// This is auto-generated by GoFrame CLI tool only once. Fill this file as you wish.
-// =================================================================================
-
-package dao
-
-import (
- "context"
- "github.com/bufanyun/hotgo/app/consts"
- "github.com/bufanyun/hotgo/app/model/entity"
- "github.com/bufanyun/hotgo/app/service/internal/dao/internal"
- "github.com/gogf/gf/v2/errors/gerror"
-)
-
-// sysDictTypeDao is the data access object for table hg_sys_dict_type.
-// You can define custom methods on it to extend its functionality as you wish.
-type sysDictTypeDao struct {
- *internal.SysDictTypeDao
-}
-
-var (
- // SysDictType is globally public accessible object for table hg_sys_dict_type operations.
- SysDictType = sysDictTypeDao{
- internal.NewSysDictTypeDao(),
- }
-)
-
-//
-// @Title 判断字典类型是否唯一
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param id
-// @Param dictType
-// @Return bool
-// @Return error
-//
-func (dao *sysDictTypeDao) IsUnique(ctx context.Context, id int64, dictType string) (bool, error) {
- var (
- data *entity.SysDictType
- err error
- )
- m := dao.Ctx(ctx).Where("type", dictType)
-
- if id > 0 {
- m = m.WhereNot("id", id)
- }
-
- if err = m.Scan(&data); err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return false, err
- }
-
- if data == nil {
- return true, nil
- }
-
- return false, nil
-
-}
-
-// Fill with you ideas below.
diff --git a/hotgo-server/app/service/internal/dto/admin_menu.go b/hotgo-server/app/service/internal/dto/admin_menu.go
deleted file mode 100644
index c15f45b..0000000
--- a/hotgo-server/app/service/internal/dto/admin_menu.go
+++ /dev/null
@@ -1,35 +0,0 @@
-// =================================================================================
-// Code generated by GoFrame CLI tool. DO NOT EDIT.
-// =================================================================================
-
-package dto
-
-import (
- "github.com/gogf/gf/v2/frame/g"
- "github.com/gogf/gf/v2/os/gtime"
-)
-
-// AdminMenu is the golang structure of table hg_admin_menu for DAO operations like Where/Data.
-type AdminMenu struct {
- g.Meta `orm:"table:hg_admin_menu, dto:true"`
- Id interface{} // 菜单ID
- Pid interface{} // 父菜单ID
- Name interface{} // 菜单名称
- Code interface{} // 菜单编码
- Icon interface{} // 菜单图标
- Type interface{} // 菜单类型(M目录 C菜单 F按钮)
- Perms interface{} // 权限标识
- Path interface{} // 路由地址
- Component interface{} // 组件路径
- Query interface{} // 路由参数
- IsFrame interface{} // 是否内嵌
- IsCache interface{} // 是否不缓存
- IsVisible interface{} // 是否隐藏
- Remark interface{} // 备注
- Level interface{} // 级别
- Tree interface{} // 树
- Sort interface{} // 排序
- Status interface{} // 菜单状态
- CreatedAt *gtime.Time // 创建时间
- UpdatedAt *gtime.Time // 更新时间
-}
diff --git a/hotgo-server/app/service/internal/dto/admin_menu_old.go b/hotgo-server/app/service/internal/dto/admin_menu_old.go
deleted file mode 100644
index bd0f3b4..0000000
--- a/hotgo-server/app/service/internal/dto/admin_menu_old.go
+++ /dev/null
@@ -1,34 +0,0 @@
-// =================================================================================
-// Code generated by GoFrame CLI tool. DO NOT EDIT.
-// =================================================================================
-
-package dto
-
-import (
- "github.com/gogf/gf/v2/frame/g"
- "github.com/gogf/gf/v2/os/gtime"
-)
-
-// AdminMenuOld is the golang structure of table hg_admin_menu_old for DAO operations like Where/Data.
-type AdminMenuOld struct {
- g.Meta `orm:"table:hg_admin_menu_old, dto:true"`
- Id interface{} // 菜单ID
- Pid interface{} // 父菜单ID
- Name interface{} // 菜单名称
- Icon interface{} // 菜单图标
- Type interface{} // 菜单类型(M目录 C菜单 F按钮)
- Perms interface{} // 权限标识
- Path interface{} // 路由地址
- Component interface{} // 组件路径
- Query interface{} // 路由参数
- IsFrame interface{} // 是否为外链(0是 1否)
- IsCache interface{} // 是否缓存(0缓存 1不缓存)
- IsVisible interface{} // 菜单状态(0显示 1隐藏)
- Remark interface{} // 备注
- Level interface{} // 级别
- Tree interface{} // 树
- Sort interface{} // 排序
- Status interface{} // 菜单状态
- CreatedAt *gtime.Time // 创建时间
- UpdatedAt *gtime.Time // 更新时间
-}
diff --git a/hotgo-server/app/service/sysService/config_service.go b/hotgo-server/app/service/sysService/config_service.go
deleted file mode 100644
index ee8dfa0..0000000
--- a/hotgo-server/app/service/sysService/config_service.go
+++ /dev/null
@@ -1,233 +0,0 @@
-package sysService
-
-import (
- "context"
- "github.com/bufanyun/hotgo/app/consts"
- "github.com/bufanyun/hotgo/app/form/input"
- "github.com/bufanyun/hotgo/app/service/internal/dao"
- "github.com/gogf/gf/v2/errors/gerror"
- "github.com/gogf/gf/v2/os/gtime"
-)
-
-var Config = new(config)
-
-type config struct{}
-
-//
-// @Title 最大排序
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return *adminForm.DictDataMaxSortRes
-// @Return error
-//
-func (service *config) GetValue(ctx context.Context, in input.SysConfigGetValueInp) (*input.SysConfigGetValueModel, error) {
- var res input.SysConfigGetValueModel
-
- if err := dao.SysConfig.Ctx(ctx).
- Fields("value").
- Where("key", in.Key).
- Order("id desc").
- Scan(&res); err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return nil, err
- }
-
- return &res, nil
-}
-
-//
-// @Title 菜单名称是否唯一
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return *adminForm.DictTypeUniqueRes
-// @Return error
-//
-func (service *config) NameUnique(ctx context.Context, in input.SysConfigNameUniqueInp) (*input.SysConfigNameUniqueModel, error) {
-
- var res input.SysConfigNameUniqueModel
- isUnique, err := dao.SysConfig.IsUniqueName(ctx, in.Id, in.Name)
- if err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return nil, err
- }
-
- res.IsUnique = isUnique
- return &res, nil
-}
-
-//
-// @Title 删除
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return error
-//
-func (service *config) Delete(ctx context.Context, in input.SysConfigDeleteInp) error {
-
- exist, err := dao.SysConfig.Ctx(ctx).Where("Member_id", in.Id).One()
- if err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return err
- }
- if !exist.IsEmpty() {
- return gerror.New("请先解除该部门下所有已关联用户关联关系!")
- }
- _, err = dao.SysConfig.Ctx(ctx).Where("id", in.Id).Delete()
- if err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return err
- }
-
- return nil
-}
-
-//
-// @Title 修改/新增
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return error
-//
-func (service *config) Edit(ctx context.Context, in input.SysConfigEditInp) (err error) {
-
- if in.Name == "" {
- err = gerror.New("名称不能为空")
- return err
- }
-
- uniqueName, err := dao.SysConfig.IsUniqueName(ctx, in.Id, in.Name)
- if err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return err
- }
- if !uniqueName {
- err = gerror.New("名称已存在")
- return err
- }
-
- // 修改
- in.UpdatedAt = gtime.Now()
- if in.Id > 0 {
- _, err = dao.SysConfig.Ctx(ctx).Where("id", in.Id).Data(in).Update()
- if err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return err
- }
-
- return nil
- }
-
- // 新增
- in.CreatedAt = gtime.Now()
- _, err = dao.SysConfig.Ctx(ctx).Data(in).Insert()
- if err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return err
- }
- return nil
-}
-
-//
-// @Title 最大排序
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return *adminForm.DictDataMaxSortRes
-// @Return error
-//
-func (service *config) MaxSort(ctx context.Context, in input.SysConfigMaxSortInp) (*input.SysConfigMaxSortModel, error) {
- var res input.SysConfigMaxSortModel
-
- if in.Id > 0 {
- if err := dao.SysConfig.Ctx(ctx).Where("id", in.Id).Order("sort desc").Scan(&res); err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return nil, err
- }
- }
-
- res.Sort = res.Sort + 10
-
- return &res, nil
-}
-
-//
-// @Title 获取指定字典类型信息
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return *adminForm.DictTypeViewRes
-// @Return error
-//
-func (service *config) View(ctx context.Context, in input.SysConfigViewInp) (res *input.SysConfigViewModel, err error) {
-
- if err = dao.SysConfig.Ctx(ctx).Where("id", in.Id).Scan(&res); err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return nil, err
- }
-
- return res, nil
-}
-
-//
-// @Title 获取列表
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return res
-// @Return err
-//
-func (service *config) List(ctx context.Context, in input.SysConfigListInp) (list []*input.SysConfigListModel, totalCount int, err error) {
-
- mod := dao.SysConfig.Ctx(ctx)
-
- if in.Realname != "" {
- mod = mod.WhereLike("realname", "%"+in.Realname+"%")
- }
- if in.Username != "" {
- mod = mod.WhereLike("username", "%"+in.Username+"%")
- }
- if in.Mobile > 0 {
- mod = mod.Where("mobile", in.Mobile)
- }
- if in.Status > 0 {
- mod = mod.Where("status", in.Status)
- }
- if in.DeptId > 0 {
- mod = mod.Where("dept_id", in.DeptId)
- }
-
- // 日期范围
- if in.StartTime != "" {
- mod = mod.WhereGTE("created_at", in.StartTime)
- }
- if in.EndTime != "" {
- mod = mod.WhereLTE("created_at", in.EndTime)
- }
-
- totalCount, err = mod.Count()
- if err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return list, totalCount, err
- }
-
- err = mod.Page(in.Page, in.Limit).Order("id desc").Scan(&list)
- if err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return list, totalCount, err
- }
-
- //// TODO 重写树入参
- //for i := 0; i < len(list); i++ {
- //}
-
- return list, totalCount, err
-}
diff --git a/hotgo-server/app/service/sysService/dict_service.go b/hotgo-server/app/service/sysService/dict_service.go
deleted file mode 100644
index 2bfa589..0000000
--- a/hotgo-server/app/service/sysService/dict_service.go
+++ /dev/null
@@ -1,505 +0,0 @@
-//
-// @Link https://github.com/bufanyun/hotgo
-// @Copyright Copyright (c) 2022 HotGo CLI
-// @Author Ms <133814250@qq.com>
-// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
-//
-package sysService
-
-import (
- "context"
- "github.com/bufanyun/hotgo/app/com"
- "github.com/bufanyun/hotgo/app/consts"
- "github.com/bufanyun/hotgo/app/form/adminForm"
- "github.com/bufanyun/hotgo/app/model"
- "github.com/bufanyun/hotgo/app/model/entity"
- "github.com/bufanyun/hotgo/app/service/internal/dao"
- "github.com/bufanyun/hotgo/app/utils"
- "github.com/gogf/gf/v2/errors/gerror"
- "github.com/gogf/gf/v2/frame/g"
- "github.com/gogf/gf/v2/net/ghttp"
- "github.com/gogf/gf/v2/os/gtime"
- "github.com/gogf/gf/v2/util/gconv"
- "time"
-)
-
-var Dict = new(dict)
-
-type dict struct{}
-
-//
-// @Title 数据键值是否唯一
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return *adminForm.DictTypeUniqueRes
-// @Return error
-//
-func (service *dict) DataUnique(ctx context.Context, req *adminForm.DictDataUniqueReq) (*adminForm.DictDataUniqueRes, error) {
- var (
- res adminForm.DictDataUniqueRes
- err error
- )
-
- res.IsUnique, err = dao.SysDictData.IsUnique(ctx, req.Id, req.Type, req.Value)
- if err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return nil, err
- }
-
- return &res, nil
-}
-
-//
-// @Title 查询字典数据最大排序
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return *adminForm.DictDataMaxSortRes
-// @Return error
-//
-func (service *dict) DataMaxSort(ctx context.Context, req *adminForm.DictDataMaxSortReq) (*adminForm.DictDataMaxSortRes, error) {
- var (
- m = dao.SysDictData.Ctx(ctx).Where("type", req.Type).Order("sort desc")
- res adminForm.DictDataMaxSortRes
- err error
- )
-
- if err = m.Scan(&res); err != nil && err.Error() != "sql: no rows in result set" {
-
- err = gerror.Wrap(err, consts.ErrorORM)
- return nil, err
- }
-
- res.Sort = res.Sort + 10
-
- return &res, nil
-}
-
-//
-// @Title 删除字典类型
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return error
-//
-func (service *dict) DataDelete(ctx context.Context, req *adminForm.DictDataDeleteReq) error {
- var (
- m = dao.SysDictData.Ctx(ctx).Where("id", req.Id)
- err error
- )
-
- _, err = m.Delete()
- if err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return err
- }
-
- return nil
-}
-
-//
-// @Title 修改/新增字典类型
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return error
-//
-func (service *dict) DataEdit(ctx context.Context, req *adminForm.DictDataEditReq) error {
- var (
- m = dao.SysDictData.Ctx(ctx)
- isUnique bool
- err error
- )
-
- if req.Label == "" {
- err = gerror.New("字典标签不能为空")
- return err
- }
- if req.Type == "" {
- err = gerror.New("字典类型不能为空")
- return err
- }
- if req.Value == "" {
- err = gerror.New("字典键值不能为空")
- return err
- }
-
- isUnique, err = dao.SysDictData.IsUnique(ctx, req.Id, req.Type, req.Value)
- if err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return err
- }
-
- if !isUnique {
- err = gerror.New("字典键值已存在")
- return err
- }
-
- req.UpdatedAt = gtime.Now()
-
- // 修改
- if req.Id > 0 {
- _, err = m.Where("id", req.Id).Data(req).Update()
- if err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return err
- }
-
- return nil
- }
-
- req.CreatedAt = gtime.Now()
-
- // 新增
- _, err = m.Data(req).Insert()
- if err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return err
- }
- return nil
-}
-
-//
-// @Title 获取指定字典数据信息
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return *adminForm.DictTypeViewRes
-// @Return error
-//
-func (service *dict) DataView(ctx context.Context, req *adminForm.DictDataViewReq) (*adminForm.DictDataViewRes, error) {
- var (
- m = dao.SysDictData.Ctx(ctx).Where("id", req.Id)
- res adminForm.DictDataViewRes
- err error
- )
-
- if err = m.Scan(&res); err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return nil, err
- }
-
- return &res, nil
-}
-
-//
-// @Title 获取指定字典类型的属性数据
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return *adminForm.DictAttributeRes
-// @Return error
-//
-func (service *dict) Attribute(ctx context.Context, req *adminForm.DictAttributeReq) (*adminForm.DictAttributeRes, error) {
- var (
- m = dao.SysDictData.Ctx(ctx).Where("type", req.Type).Order("sort asc,id desc")
- res adminForm.DictAttributeRes
- err error
- )
-
- if err = m.Scan(&res); err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return nil, err
- }
-
- return &res, nil
-}
-
-//
-// @Title 获取字典数据列表
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return res
-// @Return err
-//
-func (service *dict) DataList(ctx context.Context, req *adminForm.DictDataListReq) (*adminForm.DictDataListRes, error) {
- var (
- m = dao.SysDictData.Ctx(ctx).Where("type", req.Type)
- list []*entity.SysDictData
- res adminForm.DictDataListRes
- totalCount int
- err error
- )
-
- totalCount, err = m.Count()
- if err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return nil, err
- }
-
- if err = m.Page(req.Page, req.Limit).Order("sort asc,id desc").Scan(&list); err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return nil, err
- }
-
- res.List = list
- res.Page = req.Page
- res.Limit = req.Limit
- res.TotalCount = totalCount
-
- return &res, nil
-}
-
-//
-// @Title 导出字典类型
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return *adminForm.DictDataListRes
-// @Return error
-//
-func (service *dict) TypeExport(ctx context.Context, req *adminForm.DictTypeExportReq) error {
-
- // 导出格式
- type exportImage struct {
- Id int64 `json:"id" `
- Name string `json:"name" `
- Type string `json:"type" `
- Remark string `json:"remark" `
- Status string `json:"status" `
- CreatedAt string `json:"created_at"`
- UpdatedAt string `json:"updated_at"`
- }
-
- var (
- list []exportImage
- titleList = []string{"ID", "字典名称", "字典类型", "备注", "状态", "创建时间", "更新时间"}
- fileName = "字典类型导出-" + com.Context.Get(ctx).ReqId + ".xlsx"
- sheetName = "HotGo"
- err error
- )
-
- if err = dao.SysDictType.Ctx(ctx).Page(req.Page, req.Limit).Order("sort asc,id desc").Scan(&list); err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return err
- }
-
- // TODO 格式化格式
- for i := 0; i < len(list); i++ {
- if list[i].Status == consts.StatusEnabled {
- list[i].Status = "启用"
- } else if list[i].Status == consts.StatusDisable {
- list[i].Status = "禁用"
- } else if list[i].Status == consts.StatusDelete {
- list[i].Status = "已删除"
- }
- }
-
- // TODO 强转类型
- writer := com.Context.Get(ctx).Request.Response.Writer
- w, _ := interface{}(writer).(*ghttp.ResponseWriter)
-
- g.Log().Print(ctx, "gconv.Interfaces(list):", gconv.Interfaces(list))
- if err = utils.Excel.ExportByStruct(w, titleList, gconv.Interfaces(list), fileName, sheetName); err != nil {
- err = gerror.Wrap(err, "ExportByStruct:")
- return err
- }
-
- // TODO 加入到上下文
- com.Context.SetResponse(ctx, &model.Response{
- Code: consts.CodeOK,
- Message: "导出成功",
- Timestamp: time.Now().Unix(),
- ReqId: com.Context.Get(ctx).ReqId,
- })
-
- return nil
-}
-
-//
-// @Title 删除字典类型
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return error
-//
-func (service *dict) TypeDelete(ctx context.Context, req *adminForm.DictTypeDeleteReq) error {
- var (
- m = dao.SysDictType.Ctx(ctx).Where("id", req.Id)
- err error
- )
-
- _, err = m.Delete()
- if err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return err
- }
-
- return nil
-}
-
-//
-// @Title 修改/新增字典类型
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return error
-//
-func (service *dict) TypeEdit(ctx context.Context, req *adminForm.DictTypeEditReq) error {
- var (
- m = dao.SysDictType.Ctx(ctx)
- isUnique bool
- err error
- )
-
- if req.Name == "" {
- err = gerror.New("字典名称不能为空")
- return err
- }
- if req.Type == "" {
- err = gerror.New("字典类型不能为空")
- return err
- }
-
- isUnique, err = dao.SysDictType.IsUnique(ctx, req.Id, req.Type)
- if err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return err
- }
-
- if !isUnique {
- err = gerror.New("字典类型已存在")
- return err
- }
-
- req.UpdatedAt = gtime.Now()
-
- // 修改
- if req.Id > 0 {
- _, err = m.Where("id", req.Id).Data(req).Update()
- if err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return err
- }
-
- return nil
- }
-
- req.CreatedAt = gtime.Now()
-
- // 新增
- _, err = m.Where("id", req.Id).Data(req).Insert()
- if err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return err
- }
- return nil
-}
-
-//
-// @Title 类型是否唯一
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return *adminForm.DictTypeUniqueRes
-// @Return error
-//
-func (service *dict) TypeUnique(ctx context.Context, req *adminForm.DictTypeUniqueReq) (*adminForm.DictTypeUniqueRes, error) {
- var (
- res adminForm.DictTypeUniqueRes
- err error
- )
-
- res.IsUnique, err = dao.SysDictType.IsUnique(ctx, req.Id, req.Type)
- if err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return nil, err
- }
-
- return &res, nil
-}
-
-//
-// @Title 获取指定字典类型信息
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return *adminForm.DictTypeViewRes
-// @Return error
-//
-func (service *dict) TypeView(ctx context.Context, req *adminForm.DictTypeViewReq) (*adminForm.DictTypeViewRes, error) {
- var (
- m = dao.SysDictType.Ctx(ctx).Where("id", req.Id)
- res adminForm.DictTypeViewRes
- err error
- )
-
- if err = m.Scan(&res); err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return nil, err
- }
-
- return &res, nil
-}
-
-//
-// @Title 获取字典类型列表
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param req
-// @Return res
-// @Return err
-//
-func (service *dict) TypeList(ctx context.Context, req *adminForm.DictTypeListReq) (*adminForm.DictTypeListRes, error) {
- var (
- m = dao.SysDictType.Ctx(ctx)
- list []*entity.SysDictType
- res adminForm.DictTypeListRes
- totalCount int
- err error
- )
-
- if req.Name != "" {
- m = m.WhereLike("name", "%"+req.Name+"%")
- }
-
- if req.Type != "" {
- m = m.Where("type", req.Type)
- }
-
- // 日期范围
- if req.StartTime != "" {
- m = m.WhereGTE("created_at", req.StartTime)
- }
- if req.EndTime != "" {
- m = m.WhereLTE("created_at", req.EndTime)
- }
-
- // 状态
- if req.Status > 0 {
- m = m.Where("status", req.Status)
- }
-
- totalCount, err = m.Count()
- if err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return nil, err
- }
-
- if err = m.Page(req.Page, req.Limit).Order("sort asc,id desc").Scan(&list); err != nil {
- err = gerror.Wrap(err, consts.ErrorORM)
- return nil, err
- }
-
- res.List = list
- res.Page = req.Page
- res.Limit = req.Limit
- res.TotalCount = totalCount
-
- return &res, nil
-}
diff --git a/hotgo-server/app/service/sysService/provinces_service.go b/hotgo-server/app/service/sysService/provinces_service.go
deleted file mode 100644
index b652873..0000000
--- a/hotgo-server/app/service/sysService/provinces_service.go
+++ /dev/null
@@ -1,29 +0,0 @@
-//
-// @Link https://github.com/bufanyun/hotgo
-// @Copyright Copyright (c) 2022 HotGo CLI
-// @Author Ms <133814250@qq.com>
-// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
-//
-package sysService
-
-import (
- "context"
- "github.com/bufanyun/hotgo/app/com"
-)
-
-var Provinces = new(provinces)
-
-type provinces struct{}
-
-//
-// @Title 获取地区中的省市编码
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param location
-//
-func (service *provinces) GetLocationCode(ctx context.Context, location com.IpLocationData) {
-
- return
-}
-
diff --git a/hotgo-server/app/utils/auth_util.go b/hotgo-server/app/utils/auth_util.go
deleted file mode 100644
index 1964418..0000000
--- a/hotgo-server/app/utils/auth_util.go
+++ /dev/null
@@ -1,65 +0,0 @@
-//
-// @Link https://github.com/bufanyun/hotgo
-// @Copyright Copyright (c) 2022 HotGo CLI
-// @Author Ms <133814250@qq.com>
-// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
-//
-package utils
-
-import (
- "context"
- "github.com/gogf/gf/v2/frame/g"
-)
-
-// 权限认证类
-var Auth = new(auth)
-
-type auth struct{}
-
-//
-// @Title 是否是不需要验证权限的路由地址
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param path
-// @Return bool
-//
-func (util *auth) IsExceptAuth(ctx context.Context, path string) bool {
-
- var pathList []string
-
- except, _ := g.Cfg().Get(ctx, "router.admin.exceptAuth")
- pathList = except.Strings()
-
- for i := 0; i < len(pathList); i++ {
- if Charset.IsExists(pathList[i], path) {
- return true
- }
- }
-
- return false
-}
-
-//
-// @Title 是否是不需要登录的路由地址
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-// @Param path
-// @Return bool
-//
-func (util *auth) IsExceptLogin(ctx context.Context, path string) bool {
-
- var pathList []string
-
- except, _ := g.Cfg().Get(ctx, "router.admin.exceptLogin")
- pathList = except.Strings()
-
- for i := 0; i < len(pathList); i++ {
- if Charset.IsExists(pathList[i], path) {
- return true
- }
- }
-
- return false
-}
diff --git a/hotgo-server/app/utils/charset_util.go b/hotgo-server/app/utils/charset_util.go
deleted file mode 100644
index 9f1e49e..0000000
--- a/hotgo-server/app/utils/charset_util.go
+++ /dev/null
@@ -1,121 +0,0 @@
-//
-// @Link https://github.com/bufanyun/hotgo
-// @Copyright Copyright (c) 2022 HotGo CLI
-// @Author Ms <133814250@qq.com>
-// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
-//
-package utils
-
-import (
- "crypto/md5"
- "crypto/rand"
- "fmt"
- "github.com/gogf/gf/v2/errors/gerror"
- "github.com/gogf/gf/v2/text/gstr"
- "github.com/gogf/gf/v2/util/gconv"
- r "math/rand"
- "time"
-)
-
-// 字符类
-var Charset = new(charset)
-
-type charset struct{}
-
-//
-// @Title 获取map的所有key,字串符类型
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param m
-// @Return []string
-//
-func (util *charset) GetMapKeysByString(m map[string]string) []string {
- // 数组默认长度为map长度,后面append时,不需要重新申请内存和拷贝,效率很高
- j := 0
- keys := make([]string, len(m))
- for k := range m {
- keys[j] = k
- j++
- }
- return keys
-}
-
-//
-// @Title 生成md5
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param str
-// @Return string
-//
-func (util *charset) Md5ToString(str string) string {
- md5str := fmt.Sprintf("%x", md5.Sum([]byte(str)))
- return md5str
-}
-
-//
-// @Title 生成随机字串符
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param n
-// @Param alphabets
-// @Return []byte
-//
-func (util *charset) RandomCreateBytes(n int, alphabets ...byte) []byte {
- if len(alphabets) == 0 {
- alphabets = []byte(`0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz`)
- }
- var bytes = make([]byte, n)
- var randBy bool
- r.Seed(time.Now().UnixNano())
- if num, err := rand.Read(bytes); num != n || err != nil {
- randBy = true
- }
- for i, b := range bytes {
- if randBy {
- bytes[i] = alphabets[r.Intn(len(alphabets))]
- } else {
- bytes[i] = alphabets[b%byte(len(alphabets))]
- }
- }
- return bytes
-}
-
-//
-// @Title 格式化错误的堆栈信息
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param err
-// @Return []string
-//
-func (util *charset) GetStack(err error) []string {
- stackList := gstr.Split(gerror.Stack(err), "\n")
- for i := 0; i < len(stackList); i++ {
- stackList[i] = gstr.Replace(stackList[i], "\t", "--> ")
- }
-
- return stackList
-}
-
-//
-// @Title 判断字符或切片字符是否存在指定字符
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param elems
-// @Param search
-// @Return bool
-//
-func (util *charset) IsExists(elems interface{}, search string) bool {
- switch elems.(type) {
- case []string:
- elem := gconv.Strings(elems)
- for i := 0; i < len(elem); i++ {
- if gconv.String(elem[i]) == search {
- return true
- }
- }
- default:
- return gconv.String(elems) == search
- }
-
- return false
-}
diff --git a/hotgo-server/app/utils/filter_util.go b/hotgo-server/app/utils/filter_util.go
deleted file mode 100644
index 32ea66f..0000000
--- a/hotgo-server/app/utils/filter_util.go
+++ /dev/null
@@ -1,6 +0,0 @@
-package utils
-
-// 过滤类
-var Filter = new(filter)
-
-type filter struct{}
diff --git a/hotgo-server/app/utils/validate_util.go b/hotgo-server/app/utils/validate_util.go
deleted file mode 100644
index fd4adb0..0000000
--- a/hotgo-server/app/utils/validate_util.go
+++ /dev/null
@@ -1,30 +0,0 @@
-//
-// @Link https://github.com/bufanyun/hotgo
-// @Copyright Copyright (c) 2022 HotGo CLI
-// @Author Ms <133814250@qq.com>
-// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
-//
-package utils
-
-import (
- "net"
-)
-
-// 验证类
-var Validate = new(validate)
-
-type validate struct{}
-
-//
-// @Title 是否为ipv4
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ip
-// @Return bool
-//
-func (util *validate) IsIp(ip string) bool {
- if net.ParseIP(ip) != nil {
- return true
- }
- return false
-}
diff --git a/hotgo-server/boot/queue.go b/hotgo-server/boot/queue.go
deleted file mode 100644
index 1260e47..0000000
--- a/hotgo-server/boot/queue.go
+++ /dev/null
@@ -1,42 +0,0 @@
-//
-// @Link https://github.com/bufanyun/hotgo
-// @Copyright Copyright (c) 2022 HotGo CLI
-// @Author Ms <133814250@qq.com>
-// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
-//
-package boot
-
-import (
- "context"
- "github.com/bufanyun/hotgo/app/consts"
- "github.com/bufanyun/hotgo/app/factory/queue"
- "github.com/bufanyun/hotgo/app/service/sysService"
-)
-
-//
-// @Title 消息队列监听
-// @Description
-// @Author Ms <133814250@qq.com>
-// @Param ctx
-//
-func QueueListen(ctx context.Context) {
-
- consumer, err := queue.InstanceConsumer()
- if err != nil {
- queue.FatalLog(ctx, "InstanceConsumer异常", err)
- return
- }
-
- // 全局日志
- if listenErr := consumer.ListenReceiveMsgDo(consts.QueueLogTopic, func(mqMsg queue.MqMsg) {
-
- // 自定义消费回调
- err := sysService.Log.QueueJob(ctx, mqMsg)
-
- // 记录消费日志
- queue.ConsumerLog(ctx, consts.QueueLogTopic, mqMsg, err)
- }); listenErr != nil {
- queue.FatalLog(ctx, "主题:"+consts.QueueLogTopic+" 监听失败", listenErr)
- }
-
-}
diff --git a/hotgo-server/config/.gitignore b/hotgo-server/config/.gitignore
deleted file mode 100644
index a539470..0000000
--- a/hotgo-server/config/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-config.yaml
\ No newline at end of file
diff --git a/hotgo-server/config/config.example.yaml b/hotgo-server/config/config.example.yaml
deleted file mode 100644
index bd5eabe..0000000
--- a/hotgo-server/config/config.example.yaml
+++ /dev/null
@@ -1,139 +0,0 @@
-# hotgo配置
-hotgo:
- debug: true # debug开关,开启后:接口出现错误时会输出堆栈信息,默认为true
- ipMethod: "cz88" # IP归属地解析方法,可选:cz88|whois,默认为cz88
- log: # 全局请求日志
- switch: true # 日志开关,默认为true
- queue: true # 是否启用队列,启用时需要配置队列信息,默认为true
- module: ["admin", "api"] # 需要记录的模块
- skipCode: [] # 不记录的状态码,如: ["0", "-1"]
-
-
-# 路由配置
-router:
- # 后台
- admin:
- # 前缀
- prefix: "/admin"
- # 不需要验证登录的路由地址
- exceptLogin: [
- "/login/captcha", # 登录验证码
- "/login/sign", # 登录
- "/login/logout", # 退出
- ]
- # 不需要验证权限的路由地址
- exceptAuth: [
- "/member/info", # 登录用户信息
- "/role/dynamic", # 获取动态路由
- ]
- # 接口
- api:
- # 前缀
- prefix: "/api"
- # 不需要验证登录的路由地址
- exceptPath: []
-
-
-# HTTP Server.
-server:
- address: ":8299"
- serverRoot: "resource/public"
- openapiPath: "/openApi.json"
- swaggerPath: "/doc"
- DumpRouterMap: false
- logPath: "./runtime/log/server"
- ErrorStack: true # 当Server捕获到异常时是否记录堆栈信息到日志中。默认为true
- ErrorLogEnabled: true # 是否记录异常日志信息到日志中。默认为true
- errorLogPattern: "error/{Y-m-d}.log" # 异常错误日志文件格式。默认为"error-{Ymd}.log"
- accessLogEnabled: true # 是否记录访问日志。默认为false
- accessLogPattern: "access/{Y-m-d}.log" # 访问日志文件格式。默认为"access-{Ymd}.log"
- serverAgent: "HG HTTP Server"
-
-
-# Global logging.
-logger:
- level: "all"
- stdout: true
- headerPrint: false
- ctxKeys: []
- path: "./runtime/log/logger" # 日志文件路径。默认为空,表示关闭,仅输出到终端
- file: "{Y-m-d}.log" # 日志文件格式。默认为"{Y-m-d}.log"
- exception: # 系统异常日志
- path: "./runtime/log/exception"
- level: "all"
- file: "{Y-m-d}.log"
- queue: # 消息队列日志
- path: "./runtime/log/queue"
- level: "all"
- file: "{Y-m-d}.log"
-
-
-#JWT
-jwt:
- version: "1.0" # 版本号
- expires: "864000" # 有效期,单位:秒
- sign: "hotgo" # 秘钥,考虑安全问题请修改默认值
- multiPort: true # 是否允许多端登录,默认为true
-
-
-#消息队列
-queue:
- switch: false # 队列开关,默认为false
- driver: "redis" # 队列驱动,可选:redis|rocketmq|kafka
- retry: 2 # 重试次数
- multiComsumer: true # 是否支持创建多个消费者
- groupName: "hotgo" # mq群组名称
- redis:
- address: "127.0.0.1:6379" # redis服务地址,默认为127.0.0.1:6379
- db: 0 # 指定redis库
- pass: "hg123456" # redis密码
- timeout: 0 # 队列超时时间(s) ,0为永不超时,当队列一直没有被消费到达超时时间则队列会被销毁
- rocketmq:
- address: "127.0.0.1:9876" # brocker地址+端口
- logLevel: "all" # 系统日志级别,可选:all|close|debug|info|warn|error|fatal
- kafka:
- address: "127.0.0.1:9092" # kafka地址+端口
- version: "2.0.0.0" # kafka专属配置,默认2.0.0.0
- randClient: true # 开启随机生成clientID,可以实现启动多实例同时一起消费相同topic,加速消费能力的特性,默认为true
-
-
-# Redis数据库配置
-redis:
- default:
- address: "127.0.0.1:6379"
- db: "1"
- pass: "hg123456."
- idleTimeout: "20"
-# cache:
-# address: "127.0.0.1:6379"
-# db: "1"
-# pass: "hg123456."
-# idleTimeout: "20"
-
-
-# Database.
-database:
- logger:
- level: "all"
- stdout: true
-
- default:
- link: "mysql:hotgo:hg123456.@tcp(127.0.0.1:3306)/hotgo"
- debug: true
- Prefix: "hg_"
-
-
-# CLI.
-gfcli:
- build:
- name: "hg"
- gen:
- dao:
- - link: "mysql:hotgo:hg123456.@tcp(127.0.0.1:3306)/hotgo"
- path: "./app"
- # tables: "" #指定当前数据库中需要执行代码生成的数据表。如果为空,表示数据库的所有表都会生成。
- # tablesEx: "" #指定当前数据库中需要排除代码生成的数据表。
- removePrefix: "hg_"
- descriptionTag: true
- noModelComment: true
- jsonCase: "Snake"
\ No newline at end of file
diff --git a/hotgo-server/go.mod b/hotgo-server/go.mod
deleted file mode 100644
index b92e6ab..0000000
--- a/hotgo-server/go.mod
+++ /dev/null
@@ -1,23 +0,0 @@
-module github.com/bufanyun/hotgo
-
-go 1.15
-
-require (
- github.com/Shopify/sarama v1.30.1
- github.com/apache/rocketmq-client-go/v2 v2.1.0
- github.com/axgle/mahonia v0.0.0-20180208002826-3358181d7394
- github.com/bufanyun/pool v0.2.1
- github.com/dgrijalva/jwt-go v3.2.0+incompatible
- github.com/gogf/gf/v2 v2.0.4
- github.com/gomodule/redigo v2.0.0+incompatible
- github.com/google/btree v1.0.1 // indirect
- github.com/json-iterator/go v1.1.10 // indirect
- github.com/kayon/iploc v0.0.0-20200312105652-bda3e968a794
- github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
- github.com/modern-go/reflect2 v1.0.1 // indirect
- github.com/mojocn/base64Captcha v1.3.5
- github.com/pkg/errors v0.9.1 // indirect
- github.com/xuri/excelize/v2 v2.5.0
- go.opentelemetry.io/otel/trace v1.0.0
- go.uber.org/atomic v1.6.0 // indirect
-)
diff --git a/hotgo-server/go.sum b/hotgo-server/go.sum
deleted file mode 100644
index 444e16c..0000000
--- a/hotgo-server/go.sum
+++ /dev/null
@@ -1,308 +0,0 @@
-github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/BurntSushi/toml v0.4.1 h1:GaI7EiDXDRfa8VshkTj7Fym7ha+y8/XxIgD2okUIjLw=
-github.com/BurntSushi/toml v0.4.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=
-github.com/Shopify/sarama v1.30.1 h1:z47lP/5PBw2UVKf1lvfS5uWXaJws6ggk9PLnKEHtZiQ=
-github.com/Shopify/sarama v1.30.1/go.mod h1:hGgx05L/DiW8XYBXeJdKIN6V2QUy2H6JqME5VT1NLRw=
-github.com/Shopify/toxiproxy/v2 v2.1.6-0.20210914104332-15ea381dcdae h1:ePgznFqEG1v3AjMklnK8H7BSc++FDSo7xfK9K7Af+0Y=
-github.com/Shopify/toxiproxy/v2 v2.1.6-0.20210914104332-15ea381dcdae/go.mod h1:/cvHQkZ1fst0EmZnA5dFtiQdWCNCFYzb+uE2vqVgvx0=
-github.com/apache/rocketmq-client-go/v2 v2.1.0 h1:3eABKfxc1WmS2lLTTbKMe1gZfZV6u1Sx9orFnOfABV0=
-github.com/apache/rocketmq-client-go/v2 v2.1.0/go.mod h1:oEZKFDvS7sz/RWU0839+dQBupazyBV7WX5cP6nrio0Q=
-github.com/axgle/mahonia v0.0.0-20180208002826-3358181d7394 h1:OYA+5W64v3OgClL+IrOD63t4i/RW7RqrAVl9LTZ9UqQ=
-github.com/axgle/mahonia v0.0.0-20180208002826-3358181d7394/go.mod h1:Q8n74mJTIgjX4RBBcHnJ05h//6/k6foqmgE45jTQtxg=
-github.com/bufanyun/pool v0.2.1 h1:rW6TVJt+vS71d1uBI9sCMUjS39AWZFsUww+2XOh+338=
-github.com/bufanyun/pool v0.2.1/go.mod h1:uZsjaA/H4agFQ1E0KWj4bnzRUVGmieM54pJiIKPTrAI=
-github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE=
-github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
-github.com/clbanning/mxj/v2 v2.5.5 h1:oT81vUeEiQQ/DcHbzSytRngP6Ky9O+L+0Bw0zSJag9E=
-github.com/clbanning/mxj/v2 v2.5.5/go.mod h1:hNiWqW14h+kc+MdF9C6/YoRfjEJoR3ou6tn/Qo+ve2s=
-github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
-github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
-github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
-github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM=
-github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
-github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78=
-github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc=
-github.com/eapache/go-resiliency v1.2.0 h1:v7g92e/KSN71Rq7vSThKaWIq68fL4YHvWyiUKorFR1Q=
-github.com/eapache/go-resiliency v1.2.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs=
-github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21 h1:YEetp8/yCZMuEPMUDHG0CW/brkkEp8mzqk2+ODEitlw=
-github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU=
-github.com/eapache/queue v1.1.0 h1:YOEu7KNc61ntiQlcEeUIoDTJ2o8mQznoNvUhiigpIqc=
-github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I=
-github.com/emirpasic/gods v1.12.0 h1:QAUIPSaCu4G+POclxeqb3F+WPpdKqFGlw36+yOzGlrg=
-github.com/emirpasic/gods v1.12.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o=
-github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w=
-github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk=
-github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw=
-github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g=
-github.com/frankban/quicktest v1.11.3 h1:8sXhOn0uLys67V8EsXLc6eszDs8VXWxL3iRvebPhedY=
-github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k=
-github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
-github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
-github.com/fsnotify/fsnotify v1.5.1 h1:mZcQUHVQUQWoPXXtuf9yuEXKudkV2sx1E06UadKWpgI=
-github.com/fsnotify/fsnotify v1.5.1/go.mod h1:T3375wBYaZdLLcVNkcVbzGHY7f1l/uK5T5Ai1i3InKU=
-github.com/go-redis/redis/v8 v8.11.4 h1:kHoYkfZP6+pe04aFTnhDH6GDROa5yJdHJVNxV3F46Tg=
-github.com/go-redis/redis/v8 v8.11.4/go.mod h1:2Z2wHZXdQpCDXEGzqMockDpNyYvi2l4Pxt6RJr792+w=
-github.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfCHuOE=
-github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
-github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE=
-github.com/gogf/gf/v2 v2.0.4 h1:m5F/f2lX+etXhI6rAQCR6szQoHE1ulAYlIvH0UXa2wM=
-github.com/gogf/gf/v2 v2.0.4/go.mod h1:apktt6TleWtCIwpz63vBqUnw8MX8gWKoZyxgDpXFtgM=
-github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g=
-github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k=
-github.com/golang/mock v1.3.1 h1:qGJ6qTW+x6xX/my+8YUVl4WNpX9B7+/l2tRsHGZ7f2s=
-github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y=
-github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
-github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
-github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
-github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
-github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
-github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
-github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
-github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw=
-github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
-github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM=
-github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
-github.com/gomodule/redigo v2.0.0+incompatible h1:K/R+8tc58AaqLkqG2Ol3Qk+DR/TlNuhuh457pBFPtt0=
-github.com/gomodule/redigo v2.0.0+incompatible/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4=
-github.com/google/btree v1.0.1 h1:gK4Kx5IaGY9CD5sPJ36FHiBJ6ZXl0kilRiiCj+jdYp4=
-github.com/google/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA=
-github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
-github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
-github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.6 h1:BKbKCqvP6I+rmFHt06ZmyQtvB8xAkWdhFyr0ZUNZcxQ=
-github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
-github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8=
-github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
-github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So=
-github.com/gorilla/securecookie v1.1.1 h1:miw7JPhV+b/lAHSXz4qd/nN9jRiAFV5FwjeKyCS8BvQ=
-github.com/gorilla/securecookie v1.1.1/go.mod h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+HVt/4epWDjd4=
-github.com/gorilla/sessions v1.2.1 h1:DHd3rPN5lE3Ts3D8rKkQ8x/0kqfeNmBAaiSi+o7FsgI=
-github.com/gorilla/sessions v1.2.1/go.mod h1:dk2InVEVJ0sfLlnXv9EAgkf6ecYs/i80K/zI+bUmuGM=
-github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc=
-github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
-github.com/grokify/html-strip-tags-go v0.0.1 h1:0fThFwLbW7P/kOiTBs03FsJSV9RM2M/Q/MOnCQxKMo0=
-github.com/grokify/html-strip-tags-go v0.0.1/go.mod h1:2Su6romC5/1VXOQMaWL2yb618ARB8iVo6/DR99A6d78=
-github.com/hashicorp/go-uuid v1.0.2 h1:cfejS+Tpcp13yd5nYHWDI6qVCny6wyX2Mt5SGur2IGE=
-github.com/hashicorp/go-uuid v1.0.2/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
-github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
-github.com/jcmturner/aescts/v2 v2.0.0 h1:9YKLH6ey7H4eDBXW8khjYslgyqG2xZikXP0EQFKrle8=
-github.com/jcmturner/aescts/v2 v2.0.0/go.mod h1:AiaICIRyfYg35RUkr8yESTqvSy7csK90qZ5xfvvsoNs=
-github.com/jcmturner/dnsutils/v2 v2.0.0 h1:lltnkeZGL0wILNvrNiVCR6Ro5PGU/SeBvVO/8c/iPbo=
-github.com/jcmturner/dnsutils/v2 v2.0.0/go.mod h1:b0TnjGOvI/n42bZa+hmXL+kFJZsFT7G4t3HTlQ184QM=
-github.com/jcmturner/gofork v1.0.0 h1:J7uCkflzTEhUZ64xqKnkDxq3kzc96ajM1Gli5ktUem8=
-github.com/jcmturner/gofork v1.0.0/go.mod h1:MK8+TM0La+2rjBD4jE12Kj1pCCxK7d2LK/UM3ncEo0o=
-github.com/jcmturner/goidentity/v6 v6.0.1 h1:VKnZd2oEIMorCTsFBnJWbExfNN7yZr3EhJAxwOkZg6o=
-github.com/jcmturner/goidentity/v6 v6.0.1/go.mod h1:X1YW3bgtvwAXju7V3LCIMpY0Gbxyjn/mY9zx4tFonSg=
-github.com/jcmturner/gokrb5/v8 v8.4.2 h1:6ZIM6b/JJN0X8UM43ZOM6Z4SJzla+a/u7scXFJzodkA=
-github.com/jcmturner/gokrb5/v8 v8.4.2/go.mod h1:sb+Xq/fTY5yktf/VxLsE3wlfPqQjp0aWNYyvBVK62bc=
-github.com/jcmturner/rpc/v2 v2.0.3 h1:7FXXj8Ti1IaVFpSAziCZWNzbNuZmnvw/i6CqLNdWfZY=
-github.com/jcmturner/rpc/v2 v2.0.3/go.mod h1:VUJYCIDm3PVOEHw8sgt091/20OJjskO/YJki3ELg/Hc=
-github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
-github.com/json-iterator/go v1.1.10 h1:Kz6Cvnvv2wGdaG/V8yMvfkmNiXq9Ya2KUv4rouJJr68=
-github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
-github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo=
-github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
-github.com/kayon/iploc v0.0.0-20200312105652-bda3e968a794 h1:dWJxw+KQOMeVcoyxqG9I5fppPld1hh1FG8ngv0fKNsQ=
-github.com/kayon/iploc v0.0.0-20200312105652-bda3e968a794/go.mod h1:IwrOeG3O3K9vVXmcVvc9T0XLabw67QePi5pKQt5U+Kw=
-github.com/klauspost/compress v1.13.6 h1:P76CopJELS0TiO2mebmnzgWaajssP/EszplttgQxcgc=
-github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk=
-github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
-github.com/kr/pretty v0.2.1 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI=
-github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
-github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
-github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
-github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
-github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
-github.com/mattn/go-colorable v0.1.9 h1:sqDoxXbdeALODt0DAeJCVp38ps9ZogZEAXjus69YV3U=
-github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
-github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
-github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y=
-github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
-github.com/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/QdE+0=
-github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
-github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
-github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
-github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
-github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
-github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI=
-github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
-github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 h1:RWengNIwukTxcDr9M+97sNutRR1RKhG96O6jWumTTnw=
-github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8=
-github.com/mojocn/base64Captcha v1.3.5 h1:Qeilr7Ta6eDtG4S+tQuZ5+hO+QHbiGAJdi4PfoagaA0=
-github.com/mojocn/base64Captcha v1.3.5/go.mod h1:/tTTXn4WTpX9CfrmipqRytCpJ27Uw3G6I7NcP2WwcmY=
-github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A=
-github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE=
-github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU=
-github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec=
-github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY=
-github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
-github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk=
-github.com/onsi/ginkgo v1.16.4 h1:29JGrr5oVBm5ulCWet69zQkzWipVXIol6ygQUe/EzNc=
-github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0=
-github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY=
-github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
-github.com/onsi/gomega v1.16.0 h1:6gjqkI8iiRHMvdccRJM8rVKjCWk6ZIm6FTm3ddIe4/c=
-github.com/onsi/gomega v1.16.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY=
-github.com/pierrec/lz4 v2.6.1+incompatible h1:9UY3+iC23yxF0UfGaYrGplQ+79Rg+h/q9FV9ix19jjM=
-github.com/pierrec/lz4 v2.6.1+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=
-github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
-github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
-github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
-github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
-github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
-github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:N/ElC8H3+5XpJzTSTfLsJV/mx9Q9g7kxmchpfZyxgzM=
-github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
-github.com/richardlehane/mscfb v1.0.3 h1:rD8TBkYWkObWO0oLDFCbwMeZ4KoalxQy+QgniCj3nKI=
-github.com/richardlehane/mscfb v1.0.3/go.mod h1:YzVpcZg9czvAuhk9T+a3avCpcFPMUWm7gK3DypaEsUk=
-github.com/richardlehane/msoleps v1.0.1 h1:RfrALnSNXzmXLbGct/P2b4xkFz4e8Gmj/0Vj9M9xC1o=
-github.com/richardlehane/msoleps v1.0.1/go.mod h1:BWev5JBpU9Ko2WAgmZEuiz4/u3ZYTKbjLycmwiWUfWg=
-github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
-github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
-github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q=
-github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE=
-github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
-github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM=
-github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
-github.com/smartystreets/goconvey v0.0.0-20190710185942-9d28bd7c0945 h1:N8Bg45zpk/UcpNGnfJt2y/3lRWASHNTUET8owPYCgYI=
-github.com/smartystreets/goconvey v0.0.0-20190710185942-9d28bd7c0945/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
-github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
-github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
-github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
-github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
-github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
-github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
-github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
-github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
-github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
-github.com/tidwall/gjson v1.2.1 h1:j0efZLrZUvNerEf6xqoi0NjWMK5YlLrR7Guo/dxY174=
-github.com/tidwall/gjson v1.2.1/go.mod h1:c/nTNbUr0E0OrXEhq1pwa8iEgc2DOt4ZZqAt1HtCkPA=
-github.com/tidwall/match v1.0.1 h1:PnKP62LPNxHKTwvHHZZzdOAOCtsJTjo6dZLCwpKm5xc=
-github.com/tidwall/match v1.0.1/go.mod h1:LujAq0jyVjBy028G1WhWfIzbpQfMO8bBZ6Tyb0+pL9E=
-github.com/tidwall/pretty v0.0.0-20190325153808-1166b9ac2b65 h1:rQ229MBgvW68s1/g6f1/63TgYwYxfF4E+bi/KC19P8g=
-github.com/tidwall/pretty v0.0.0-20190325153808-1166b9ac2b65/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk=
-github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI=
-github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI=
-github.com/xdg-go/scram v1.0.2/go.mod h1:1WAq6h33pAW+iRreB34OORO2Nf7qel3VV3fjBj+hCSs=
-github.com/xdg-go/stringprep v1.0.2/go.mod h1:8F9zXuvzgwmyT5DUm4GUfZGDdT3W+LCvS6+da4O5kxM=
-github.com/xuri/efp v0.0.0-20210322160811-ab561f5b45e3 h1:EpI0bqf/eX9SdZDwlMmahKM+CDBgNbsXMhsN28XrM8o=
-github.com/xuri/efp v0.0.0-20210322160811-ab561f5b45e3/go.mod h1:ybY/Jr0T0GTCnYjKqmdwxyxn2BQf2RcQIIvex5QldPI=
-github.com/xuri/excelize/v2 v2.5.0 h1:nDDVfX0qaDuGjAvb+5zTd0Bxxoqa1Ffv9B4kiE23PTM=
-github.com/xuri/excelize/v2 v2.5.0/go.mod h1:rSu0C3papjzxQA3sdK8cU544TebhrPUoTOaGPIh0Q1A=
-github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-github.com/yuin/goldmark v1.4.0/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
-go.opentelemetry.io/otel v1.0.0 h1:qTTn6x71GVBvoafHK/yaRUmFzI4LcONZD0/kXxl5PHI=
-go.opentelemetry.io/otel v1.0.0/go.mod h1:AjRVh9A5/5DE7S+mZtTR6t8vpKKryam+0lREnfmS4cg=
-go.opentelemetry.io/otel/sdk v1.0.0 h1:BNPMYUONPNbLneMttKSjQhOTlFLOD9U22HNG1KrIN2Y=
-go.opentelemetry.io/otel/sdk v1.0.0/go.mod h1:PCrDHlSy5x1kjezSdL37PhbFUMjrsLRshJ2zCzeXwbM=
-go.opentelemetry.io/otel/trace v1.0.0 h1:TSBr8GTEtKevYMG/2d21M989r5WJYVimhTHBKVEZuh4=
-go.opentelemetry.io/otel/trace v1.0.0/go.mod h1:PXTWqayeFUlJV1YDNhsJYB184+IvAH814St6o6ajzIs=
-go.uber.org/atomic v1.5.1/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ=
-go.uber.org/atomic v1.6.0 h1:Ezj3JGmsOnG1MoRWQkPBsKLe9DwWD9QeXzTRzzldNVk=
-go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ=
-golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
-golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
-golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/crypto v0.0.0-20201112155050-0c6587e931a9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
-golang.org/x/crypto v0.0.0-20210920023735-84f357641f63 h1:kETrAMYZq6WVGPa8IIixL0CaEcIUNi+1WX7grUoi3y8=
-golang.org/x/crypto v0.0.0-20210920023735-84f357641f63/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
-golang.org/x/image v0.0.0-20190501045829-6d32002ffd75/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
-golang.org/x/image v0.0.0-20210220032944-ac19c3e999fb h1:fqpd0EBDzlHRCjiphRR5Zo/RSWWQlWv34418dnEixWk=
-golang.org/x/image v0.0.0-20210220032944-ac19c3e999fb/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
-golang.org/x/lint v0.0.0-20190930215403-16217165b5de h1:5hukYrvBGR8/eNkX5mdUezrA6JiaEZDtJb9Ei+1LlBs=
-golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
-golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/mod v0.4.2 h1:Gz96sIWK3OalVv/I/qNygP42zyoKp3xptRVCWRFEBvo=
-golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
-golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
-golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
-golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
-golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk=
-golang.org/x/net v0.0.0-20210726213435-c6fcb2dbf985/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
-golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
-golang.org/x/net v0.0.0-20210917221730-978cfadd31cf/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
-golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2 h1:CIJ76btIcR3eFI5EgSo6k1qKw9KJexJuRLI9G7Hp5wE=
-golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
-golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e h1:WUoyKPm6nCo1BnNUvPGnFG3T5DUVem42yDJZZ4CNxMA=
-golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
-golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
-golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
-golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
-golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
-golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
-golang.org/x/text v0.3.8-0.20211105212822-18b340fc7af2 h1:GLw7MR8AfAG2GmGcmVgObFOHXYypgGjnGno25RDwn3Y=
-golang.org/x/text v0.3.8-0.20211105212822-18b340fc7af2/go.mod h1:EFNZuWvGYxIRUEX+K8UmCFwYmZjqcrnq15ZuVldZkZ0=
-golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
-golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
-golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
-golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
-golang.org/x/tools v0.1.7 h1:6j8CgantCy3yc8JGBqkDLMKWqZ0RDU2g1HVgacojGWQ=
-golang.org/x/tools v0.1.7/go.mod h1:LGqMHiF4EqQNHR1JncWGqT5BVaXmza+X+BDGol+dOxo=
-golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
-golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
-google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
-google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
-google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
-google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
-google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
-google.golang.org/protobuf v1.26.0 h1:bxAC2xTBsZGibn2RTntX0oH50xLsqy1OxA9tTL3p/lk=
-google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
-gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
-gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
-gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
-gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
-gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
-gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
-gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
-gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo=
-gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-stathat.com/c/consistent v1.0.0 h1:ezyc51EGcRPJUxfHGSgJjWzJdj3NiMU9pNfLNGiXV0c=
-stathat.com/c/consistent v1.0.0/go.mod h1:QkzMWzcbB+yQBL2AttO6sgsQS/JSTapcDISJalmCDS0=
diff --git a/hotgo-server/main.go b/hotgo-server/main.go
deleted file mode 100644
index 79c768a..0000000
--- a/hotgo-server/main.go
+++ /dev/null
@@ -1,17 +0,0 @@
-package main
-
-import (
- "github.com/bufanyun/hotgo/boot"
- "github.com/gogf/gf/v2/errors/gerror"
- "github.com/gogf/gf/v2/frame/g"
- "github.com/gogf/gf/v2/os/gctx"
-)
-
-func main() {
-
- var ctx = gctx.New()
-
- if err := boot.Main.RunWithError(ctx); err != nil {
- g.Log().Fatal(ctx, gerror.Stack(err))
- }
-}
diff --git a/hotgo-server/resource/public/plugin/layer-3.1.1/layer.js b/hotgo-server/resource/public/plugin/layer-3.1.1/layer.js
deleted file mode 100644
index 12cb6b5..0000000
--- a/hotgo-server/resource/public/plugin/layer-3.1.1/layer.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/*! layer-v3.1.1 Web弹层组件 MIT License http://layer.layui.com/ By 贤心 */
- ;!function(e,t){"use strict";var i,n,a=e.layui&&layui.define,o={getPath:function(){var e=document.currentScript?document.currentScript.src:function(){for(var e,t=document.scripts,i=t.length-1,n=i;n>0;n--)if("interactive"===t[n].readyState){e=t[n].src;break}return e||t[i].src}();return e.substring(0,e.lastIndexOf("/")+1)}(),config:{},end:{},minIndex:0,minLeft:[],btn:["确定","取消"],type:["dialog","page","iframe","loading","tips"],getStyle:function(t,i){var n=t.currentStyle?t.currentStyle:e.getComputedStyle(t,null);return n[n.getPropertyValue?"getPropertyValue":"getAttribute"](i)},link:function(t,i,n){if(r.path){var a=document.getElementsByTagName("head")[0],s=document.createElement("link");"string"==typeof i&&(n=i);var l=(n||t).replace(/\.|\//g,""),f="layuicss-"+l,c=0;s.rel="stylesheet",s.href=r.path+t,s.id=f,document.getElementById(f)||a.appendChild(s),"function"==typeof i&&!function u(){return++c>80?e.console&&console.error("layer.css: Invalid"):void(1989===parseInt(o.getStyle(document.getElementById(f),"width"))?i():setTimeout(u,100))}()}}},r={v:"3.1.1",ie:function(){var t=navigator.userAgent.toLowerCase();return!!(e.ActiveXObject||"ActiveXObject"in e)&&((t.match(/msie\s(\d+)/)||[])[1]||"11")}(),index:e.layer&&e.layer.v?1e5:0,path:o.getPath,config:function(e,t){return e=e||{},r.cache=o.config=i.extend({},o.config,e),r.path=o.config.path||r.path,"string"==typeof e.extend&&(e.extend=[e.extend]),o.config.path&&r.ready(),e.extend?(a?layui.addcss("modules/layer/"+e.extend):o.link("theme/"+e.extend),this):this},ready:function(e){var t="layer",i="",n=(a?"modules/layer/":"theme/")+"default/layer.css?v="+r.v+i;return a?layui.addcss(n,e,t):o.link(n,e,t),this},alert:function(e,t,n){var a="function"==typeof t;return a&&(n=t),r.open(i.extend({content:e,yes:n},a?{}:t))},confirm:function(e,t,n,a){var s="function"==typeof t;return s&&(a=n,n=t),r.open(i.extend({content:e,btn:o.btn,yes:n,btn2:a},s?{}:t))},msg:function(e,n,a){var s="function"==typeof n,f=o.config.skin,c=(f?f+" "+f+"-msg":"")||"layui-layer-msg",u=l.anim.length-1;return s&&(a=n),r.open(i.extend({content:e,time:3e3,shade:!1,skin:c,title:!1,closeBtn:!1,btn:!1,resize:!1,end:a},s&&!o.config.skin?{skin:c+" layui-layer-hui",anim:u}:function(){return n=n||{},(n.icon===-1||n.icon===t&&!o.config.skin)&&(n.skin=c+" "+(n.skin||"layui-layer-hui")),n}()))},load:function(e,t){return r.open(i.extend({type:3,icon:e||0,resize:!1,shade:.01},t))},tips:function(e,t,n){return r.open(i.extend({type:4,content:[e,t],closeBtn:!1,time:3e3,shade:!1,resize:!1,fixed:!1,maxWidth:210},n))}},s=function(e){var t=this;t.index=++r.index,t.config=i.extend({},t.config,o.config,e),document.body?t.creat():setTimeout(function(){t.creat()},30)};s.pt=s.prototype;var l=["layui-layer",".layui-layer-title",".layui-layer-main",".layui-layer-dialog","layui-layer-iframe","layui-layer-content","layui-layer-btn","layui-layer-close"];l.anim=["layer-anim-00","layer-anim-01","layer-anim-02","layer-anim-03","layer-anim-04","layer-anim-05","layer-anim-06"],s.pt.config={type:0,shade:.3,fixed:!0,move:l[1],title:"信息",offset:"auto",area:"auto",closeBtn:1,time:0,zIndex:19891014,maxWidth:360,anim:0,isOutAnim:!0,icon:-1,moveType:1,resize:!0,scrollbar:!0,tips:2},s.pt.vessel=function(e,t){var n=this,a=n.index,r=n.config,s=r.zIndex+a,f="object"==typeof r.title,c=r.maxmin&&(1===r.type||2===r.type),u=r.title?''+(f?r.title[0]:r.title)+"
":"";return r.zIndex=s,t([r.shade?'':"",''+(e&&2!=r.type?"":u)+'
'+(0==r.type&&r.icon!==-1?'':"")+(1==r.type&&e?"":r.content||"")+'
'+function(){var e=c?'':"";return r.closeBtn&&(e+=''),e}()+""+(r.btn?function(){var e="";"string"==typeof r.btn&&(r.btn=[r.btn]);for(var t=0,i=r.btn.length;t
'+r.btn[t]+"";return''+e+"
"}():"")+(r.resize?'':"")+" "],u,i('')),n},s.pt.creat=function(){var e=this,t=e.config,a=e.index,s=t.content,f="object"==typeof s,c=i("body");if(!t.id||!i("#"+t.id)[0]){switch("string"==typeof t.area&&(t.area="auto"===t.area?["",""]:[t.area,""]),t.shift&&(t.anim=t.shift),6==r.ie&&(t.fixed=!1),t.type){case 0:t.btn="btn"in t?t.btn:o.btn[0],r.closeAll("dialog");break;case 2:var s=t.content=f?t.content:[t.content||"http://layer.layui.com","auto"];t.content='';break;case 3:delete t.title,delete t.closeBtn,t.icon===-1&&0===t.icon,r.closeAll("loading");break;case 4:f||(t.content=[t.content,"body"]),t.follow=t.content[1],t.content=t.content[0]+'',delete t.title,t.tips="object"==typeof t.tips?t.tips:[t.tips,!0],t.tipsMore||r.closeAll("tips")}if(e.vessel(f,function(n,r,u){c.append(n[0]),f?function(){2==t.type||4==t.type?function(){i("body").append(n[1])}():function(){s.parents("."+l[0])[0]||(s.data("display",s.css("display")).show().addClass("layui-layer-wrap").wrap(n[1]),i("#"+l[0]+a).find("."+l[5]).before(r))}()}():c.append(n[1]),i(".layui-layer-move")[0]||c.append(o.moveElem=u),e.layero=i("#"+l[0]+a),t.scrollbar||l.html.css("overflow","hidden").attr("layer-full",a)}).auto(a),i("#layui-layer-shade"+e.index).css({"background-color":t.shade[1]||"#000",opacity:t.shade[0]||t.shade}),2==t.type&&6==r.ie&&e.layero.find("iframe").attr("src",s[0]),4==t.type?e.tips():e.offset(),t.fixed&&n.on("resize",function(){e.offset(),(/^\d+%$/.test(t.area[0])||/^\d+%$/.test(t.area[1]))&&e.auto(a),4==t.type&&e.tips()}),t.time<=0||setTimeout(function(){r.close(e.index)},t.time),e.move().callback(),l.anim[t.anim]){var u="layer-anim "+l.anim[t.anim];e.layero.addClass(u).one("webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend",function(){i(this).removeClass(u)})}t.isOutAnim&&e.layero.data("isOutAnim",!0)}},s.pt.auto=function(e){var t=this,a=t.config,o=i("#"+l[0]+e);""===a.area[0]&&a.maxWidth>0&&(r.ie&&r.ie<8&&a.btn&&o.width(o.innerWidth()),o.outerWidth()>a.maxWidth&&o.width(a.maxWidth));var s=[o.innerWidth(),o.innerHeight()],f=o.find(l[1]).outerHeight()||0,c=o.find("."+l[6]).outerHeight()||0,u=function(e){e=o.find(e),e.height(s[1]-f-c-2*(0|parseFloat(e.css("padding-top"))))};switch(a.type){case 2:u("iframe");break;default:""===a.area[1]?a.maxHeight>0&&o.outerHeight()>a.maxHeight?(s[1]=a.maxHeight,u("."+l[5])):a.fixed&&s[1]>=n.height()&&(s[1]=n.height(),u("."+l[5])):u("."+l[5])}return t},s.pt.offset=function(){var e=this,t=e.config,i=e.layero,a=[i.outerWidth(),i.outerHeight()],o="object"==typeof t.offset;e.offsetTop=(n.height()-a[1])/2,e.offsetLeft=(n.width()-a[0])/2,o?(e.offsetTop=t.offset[0],e.offsetLeft=t.offset[1]||e.offsetLeft):"auto"!==t.offset&&("t"===t.offset?e.offsetTop=0:"r"===t.offset?e.offsetLeft=n.width()-a[0]:"b"===t.offset?e.offsetTop=n.height()-a[1]:"l"===t.offset?e.offsetLeft=0:"lt"===t.offset?(e.offsetTop=0,e.offsetLeft=0):"lb"===t.offset?(e.offsetTop=n.height()-a[1],e.offsetLeft=0):"rt"===t.offset?(e.offsetTop=0,e.offsetLeft=n.width()-a[0]):"rb"===t.offset?(e.offsetTop=n.height()-a[1],e.offsetLeft=n.width()-a[0]):e.offsetTop=t.offset),t.fixed||(e.offsetTop=/%$/.test(e.offsetTop)?n.height()*parseFloat(e.offsetTop)/100:parseFloat(e.offsetTop),e.offsetLeft=/%$/.test(e.offsetLeft)?n.width()*parseFloat(e.offsetLeft)/100:parseFloat(e.offsetLeft),e.offsetTop+=n.scrollTop(),e.offsetLeft+=n.scrollLeft()),i.attr("minLeft")&&(e.offsetTop=n.height()-(i.find(l[1]).outerHeight()||0),e.offsetLeft=i.css("left")),i.css({top:e.offsetTop,left:e.offsetLeft})},s.pt.tips=function(){var e=this,t=e.config,a=e.layero,o=[a.outerWidth(),a.outerHeight()],r=i(t.follow);r[0]||(r=i("body"));var s={width:r.outerWidth(),height:r.outerHeight(),top:r.offset().top,left:r.offset().left},f=a.find(".layui-layer-TipsG"),c=t.tips[0];t.tips[1]||f.remove(),s.autoLeft=function(){s.left+o[0]-n.width()>0?(s.tipLeft=s.left+s.width-o[0],f.css({right:12,left:"auto"})):s.tipLeft=s.left},s.where=[function(){s.autoLeft(),s.tipTop=s.top-o[1]-10,f.removeClass("layui-layer-TipsB").addClass("layui-layer-TipsT").css("border-right-color",t.tips[1])},function(){s.tipLeft=s.left+s.width+10,s.tipTop=s.top,f.removeClass("layui-layer-TipsL").addClass("layui-layer-TipsR").css("border-bottom-color",t.tips[1])},function(){s.autoLeft(),s.tipTop=s.top+s.height+10,f.removeClass("layui-layer-TipsT").addClass("layui-layer-TipsB").css("border-right-color",t.tips[1])},function(){s.tipLeft=s.left-o[0]-10,s.tipTop=s.top,f.removeClass("layui-layer-TipsR").addClass("layui-layer-TipsL").css("border-bottom-color",t.tips[1])}],s.where[c-1](),1===c?s.top-(n.scrollTop()+o[1]+16)<0&&s.where[2]():2===c?n.width()-(s.left+s.width+o[0]+16)>0||s.where[3]():3===c?s.top-n.scrollTop()+s.height+o[1]+16-n.height()>0&&s.where[0]():4===c&&o[0]+16-s.left>0&&s.where[1](),a.find("."+l[5]).css({"background-color":t.tips[1],"padding-right":t.closeBtn?"30px":""}),a.css({left:s.tipLeft-(t.fixed?n.scrollLeft():0),top:s.tipTop-(t.fixed?n.scrollTop():0)})},s.pt.move=function(){var e=this,t=e.config,a=i(document),s=e.layero,l=s.find(t.move),f=s.find(".layui-layer-resize"),c={};return t.move&&l.css("cursor","move"),l.on("mousedown",function(e){e.preventDefault(),t.move&&(c.moveStart=!0,c.offset=[e.clientX-parseFloat(s.css("left")),e.clientY-parseFloat(s.css("top"))],o.moveElem.css("cursor","move").show())}),f.on("mousedown",function(e){e.preventDefault(),c.resizeStart=!0,c.offset=[e.clientX,e.clientY],c.area=[s.outerWidth(),s.outerHeight()],o.moveElem.css("cursor","se-resize").show()}),a.on("mousemove",function(i){if(c.moveStart){var a=i.clientX-c.offset[0],o=i.clientY-c.offset[1],l="fixed"===s.css("position");if(i.preventDefault(),c.stX=l?0:n.scrollLeft(),c.stY=l?0:n.scrollTop(),!t.moveOut){var f=n.width()-s.outerWidth()+c.stX,u=n.height()-s.outerHeight()+c.stY;af&&(a=f),ou&&(o=u)}s.css({left:a,top:o})}if(t.resize&&c.resizeStart){var a=i.clientX-c.offset[0],o=i.clientY-c.offset[1];i.preventDefault(),r.style(e.index,{width:c.area[0]+a,height:c.area[1]+o}),c.isResize=!0,t.resizing&&t.resizing(s)}}).on("mouseup",function(e){c.moveStart&&(delete c.moveStart,o.moveElem.hide(),t.moveEnd&&t.moveEnd(s)),c.resizeStart&&(delete c.resizeStart,o.moveElem.hide())}),e},s.pt.callback=function(){function e(){var e=a.cancel&&a.cancel(t.index,n);e===!1||r.close(t.index)}var t=this,n=t.layero,a=t.config;t.openLayer(),a.success&&(2==a.type?n.find("iframe").on("load",function(){a.success(n,t.index)}):a.success(n,t.index)),6==r.ie&&t.IE6(n),n.find("."+l[6]).children("a").on("click",function(){var e=i(this).index();if(0===e)a.yes?a.yes(t.index,n):a.btn1?a.btn1(t.index,n):r.close(t.index);else{var o=a["btn"+(e+1)]&&a["btn"+(e+1)](t.index,n);o===!1||r.close(t.index)}}),n.find("."+l[7]).on("click",e),a.shadeClose&&i("#layui-layer-shade"+t.index).on("click",function(){r.close(t.index)}),n.find(".layui-layer-min").on("click",function(){var e=a.min&&a.min(n);e===!1||r.min(t.index,a)}),n.find(".layui-layer-max").on("click",function(){i(this).hasClass("layui-layer-maxmin")?(r.restore(t.index),a.restore&&a.restore(n)):(r.full(t.index,a),setTimeout(function(){a.full&&a.full(n)},100))}),a.end&&(o.end[t.index]=a.end)},o.reselect=function(){i.each(i("select"),function(e,t){var n=i(this);n.parents("."+l[0])[0]||1==n.attr("layer")&&i("."+l[0]).length<1&&n.removeAttr("layer").show(),n=null})},s.pt.IE6=function(e){i("select").each(function(e,t){var n=i(this);n.parents("."+l[0])[0]||"none"===n.css("display")||n.attr({layer:"1"}).hide(),n=null})},s.pt.openLayer=function(){var e=this;r.zIndex=e.config.zIndex,r.setTop=function(e){var t=function(){r.zIndex++,e.css("z-index",r.zIndex+1)};return r.zIndex=parseInt(e[0].style.zIndex),e.on("mousedown",t),r.zIndex}},o.record=function(e){var t=[e.width(),e.height(),e.position().top,e.position().left+parseFloat(e.css("margin-left"))];e.find(".layui-layer-max").addClass("layui-layer-maxmin"),e.attr({area:t})},o.rescollbar=function(e){l.html.attr("layer-full")==e&&(l.html[0].style.removeProperty?l.html[0].style.removeProperty("overflow"):l.html[0].style.removeAttribute("overflow"),l.html.removeAttr("layer-full"))},e.layer=r,r.getChildFrame=function(e,t){return t=t||i("."+l[4]).attr("times"),i("#"+l[0]+t).find("iframe").contents().find(e)},r.getFrameIndex=function(e){return i("#"+e).parents("."+l[4]).attr("times")},r.iframeAuto=function(e){if(e){var t=r.getChildFrame("html",e).outerHeight(),n=i("#"+l[0]+e),a=n.find(l[1]).outerHeight()||0,o=n.find("."+l[6]).outerHeight()||0;n.css({height:t+a+o}),n.find("iframe").css({height:t})}},r.iframeSrc=function(e,t){i("#"+l[0]+e).find("iframe").attr("src",t)},r.style=function(e,t,n){var a=i("#"+l[0]+e),r=a.find(".layui-layer-content"),s=a.attr("type"),f=a.find(l[1]).outerHeight()||0,c=a.find("."+l[6]).outerHeight()||0;a.attr("minLeft");s!==o.type[3]&&s!==o.type[4]&&(n||(parseFloat(t.width)<=260&&(t.width=260),parseFloat(t.height)-f-c<=64&&(t.height=64+f+c)),a.css(t),c=a.find("."+l[6]).outerHeight(),s===o.type[2]?a.find("iframe").css({height:parseFloat(t.height)-f-c}):r.css({height:parseFloat(t.height)-f-c-parseFloat(r.css("padding-top"))-parseFloat(r.css("padding-bottom"))}))},r.min=function(e,t){var a=i("#"+l[0]+e),s=a.find(l[1]).outerHeight()||0,f=a.attr("minLeft")||181*o.minIndex+"px",c=a.css("position");o.record(a),o.minLeft[0]&&(f=o.minLeft[0],o.minLeft.shift()),a.attr("position",c),r.style(e,{width:180,height:s,left:f,top:n.height()-s,position:"fixed",overflow:"hidden"},!0),a.find(".layui-layer-min").hide(),"page"===a.attr("type")&&a.find(l[4]).hide(),o.rescollbar(e),a.attr("minLeft")||o.minIndex++,a.attr("minLeft",f)},r.restore=function(e){var t=i("#"+l[0]+e),n=t.attr("area").split(",");t.attr("type");r.style(e,{width:parseFloat(n[0]),height:parseFloat(n[1]),top:parseFloat(n[2]),left:parseFloat(n[3]),position:t.attr("position"),overflow:"visible"},!0),t.find(".layui-layer-max").removeClass("layui-layer-maxmin"),t.find(".layui-layer-min").show(),"page"===t.attr("type")&&t.find(l[4]).show(),o.rescollbar(e)},r.full=function(e){var t,a=i("#"+l[0]+e);o.record(a),l.html.attr("layer-full")||l.html.css("overflow","hidden").attr("layer-full",e),clearTimeout(t),t=setTimeout(function(){var t="fixed"===a.css("position");r.style(e,{top:t?0:n.scrollTop(),left:t?0:n.scrollLeft(),width:n.width(),height:n.height()},!0),a.find(".layui-layer-min").hide()},100)},r.title=function(e,t){var n=i("#"+l[0]+(t||r.index)).find(l[1]);n.html(e)},r.close=function(e){var t=i("#"+l[0]+e),n=t.attr("type"),a="layer-anim-close";if(t[0]){var s="layui-layer-wrap",f=function(){if(n===o.type[1]&&"object"===t.attr("conType")){t.children(":not(."+l[5]+")").remove();for(var a=t.find("."+s),r=0;r<2;r++)a.unwrap();a.css("display",a.data("display")).removeClass(s)}else{if(n===o.type[2])try{var f=i("#"+l[4]+e)[0];f.contentWindow.document.write(""),f.contentWindow.close(),t.find("."+l[5])[0].removeChild(f)}catch(c){}t[0].innerHTML="",t.remove()}"function"==typeof o.end[e]&&o.end[e](),delete o.end[e]};t.data("isOutAnim")&&t.addClass("layer-anim "+a),i("#layui-layer-moves, #layui-layer-shade"+e).remove(),6==r.ie&&o.reselect(),o.rescollbar(e),t.attr("minLeft")&&(o.minIndex--,o.minLeft.push(t.attr("minLeft"))),r.ie&&r.ie<10||!t.data("isOutAnim")?f():setTimeout(function(){f()},200)}},r.closeAll=function(e){i.each(i("."+l[0]),function(){var t=i(this),n=e?t.attr("type")===e:1;n&&r.close(t.attr("times")),n=null})};var f=r.cache||{},c=function(e){return f.skin?" "+f.skin+" "+f.skin+"-"+e:""};r.prompt=function(e,t){var a="";if(e=e||{},"function"==typeof e&&(t=e),e.area){var o=e.area;a='style="width: '+o[0]+"; height: "+o[1]+';"',delete e.area}var s,l=2==e.formType?'":function(){return''}(),f=e.success;return delete e.success,r.open(i.extend({type:1,btn:["确定","取消"],content:l,skin:"layui-layer-prompt"+c("prompt"),maxWidth:n.width(),success:function(e){s=e.find(".layui-layer-input"),s.focus(),"function"==typeof f&&f(e)},resize:!1,yes:function(i){var n=s.val();""===n?s.focus():n.length>(e.maxlength||500)?r.tips("最多输入"+(e.maxlength||500)+"个字数",s,{tips:1}):t&&t(n,i,s)}},e))},r.tab=function(e){e=e||{};var t=e.tab||{},n="layui-this",a=e.success;return delete e.success,r.open(i.extend({type:1,skin:"layui-layer-tab"+c("tab"),resize:!1,title:function(){var e=t.length,i=1,a="";if(e>0)for(a=''+t[0].title+"";i"+t[i].title+"";return a}(),content:''+function(){var e=t.length,i=1,a="";if(e>0)for(a='- '+(t[0].content||"no content")+"
";i'+(t[i].content||"no content")+"";return a}()+"
",success:function(t){var o=t.find(".layui-layer-title").children(),r=t.find(".layui-layer-tabmain").children();o.on("mousedown",function(t){t.stopPropagation?t.stopPropagation():t.cancelBubble=!0;var a=i(this),o=a.index();a.addClass(n).siblings().removeClass(n),r.eq(o).show().siblings().hide(),"function"==typeof e.change&&e.change(o)}),"function"==typeof a&&a(t)}},e))},r.photos=function(t,n,a){function o(e,t,i){var n=new Image;return n.src=e,n.complete?t(n):(n.onload=function(){n.onload=null,t(n)},void(n.onerror=function(e){n.onerror=null,i(e)}))}var s={};if(t=t||{},t.photos){var l=t.photos.constructor===Object,f=l?t.photos:{},u=f.data||[],d=f.start||0;s.imgIndex=(0|d)+1,t.img=t.img||"img";var y=t.success;if(delete t.success,l){if(0===u.length)return r.msg("没有图片")}else{var p=i(t.photos),h=function(){u=[],p.find(t.img).each(function(e){var t=i(this);t.attr("layer-index",e),u.push({alt:t.attr("alt"),pid:t.attr("layer-pid"),src:t.attr("layer-src")||t.attr("src"),thumb:t.attr("src")})})};if(h(),0===u.length)return;if(n||p.on("click",t.img,function(){var e=i(this),n=e.attr("layer-index");r.photos(i.extend(t,{photos:{start:n,data:u,tab:t.tab},full:t.full}),!0),h()}),!n)return}s.imgprev=function(e){s.imgIndex--,s.imgIndex<1&&(s.imgIndex=u.length),s.tabimg(e)},s.imgnext=function(e,t){s.imgIndex++,s.imgIndex>u.length&&(s.imgIndex=1,t)||s.tabimg(e)},s.keyup=function(e){if(!s.end){var t=e.keyCode;e.preventDefault(),37===t?s.imgprev(!0):39===t?s.imgnext(!0):27===t&&r.close(s.index)}},s.tabimg=function(e){if(!(u.length<=1))return f.start=s.imgIndex-1,r.close(s.index),r.photos(t,!0,e)},s.event=function(){s.bigimg.hover(function(){s.imgsee.show()},function(){s.imgsee.hide()}),s.bigimg.find(".layui-layer-imgprev").on("click",function(e){e.preventDefault(),s.imgprev()}),s.bigimg.find(".layui-layer-imgnext").on("click",function(e){e.preventDefault(),s.imgnext()}),i(document).on("keyup",s.keyup)},s.loadi=r.load(1,{shade:!("shade"in t)&&.9,scrollbar:!1}),o(u[d].src,function(n){r.close(s.loadi),s.index=r.open(i.extend({type:1,id:"layui-layer-photos",area:function(){var a=[n.width,n.height],o=[i(e).width()-100,i(e).height()-100];if(!t.full&&(a[0]>o[0]||a[1]>o[1])){var r=[a[0]/o[0],a[1]/o[1]];r[0]>r[1]?(a[0]=a[0]/r[0],a[1]=a[1]/r[0]):r[0]
",success:function(e,i){s.bigimg=e.find(".layui-layer-phimg"),s.imgsee=e.find(".layui-layer-imguide,.layui-layer-imgbar"),s.event(e),t.tab&&t.tab(u[d],e),"function"==typeof y&&y(e)},end:function(){s.end=!0,i(document).off("keyup",s.keyup)}},t))},function(){r.close(s.loadi),r.msg("当前图片地址异常
是否继续查看下一张?",{time:3e4,btn:["下一张","不看了"],yes:function(){u.length>1&&s.imgnext(!0,!0)}})})}},o.run=function(t){i=t,n=i(e),l.html=i("html"),r.open=function(e){var t=new s(e);return t.index}},e.layui&&layui.define?(r.ready(),layui.define("jquery",function(t){r.path=layui.cache.dir,o.run(layui.$),e.layer=r,t("layer",r)})):"function"==typeof define&&define.amd?define(["jquery"],function(){return o.run(e.jQuery),r}):function(){o.run(e.jQuery),r.ready()}()}(window);
\ No newline at end of file
diff --git a/hotgo-server/resource/public/plugin/layer-3.1.1/mobile/layer.js b/hotgo-server/resource/public/plugin/layer-3.1.1/mobile/layer.js
deleted file mode 100644
index f9cf693..0000000
--- a/hotgo-server/resource/public/plugin/layer-3.1.1/mobile/layer.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/*! layer mobile-v2.0.0 Web弹层组件 MIT License http://layer.layui.com/mobile By 贤心 */
- ;!function(e){"use strict";var t=document,n="querySelectorAll",i="getElementsByClassName",a=function(e){return t[n](e)},s={type:0,shade:!0,shadeClose:!0,fixed:!0,anim:"scale"},l={extend:function(e){var t=JSON.parse(JSON.stringify(s));for(var n in e)t[n]=e[n];return t},timer:{},end:{}};l.touch=function(e,t){e.addEventListener("click",function(e){t.call(this,e)},!1)};var r=0,o=["layui-m-layer"],c=function(e){var t=this;t.config=l.extend(e),t.view()};c.prototype.view=function(){var e=this,n=e.config,s=t.createElement("div");e.id=s.id=o[0]+r,s.setAttribute("class",o[0]+" "+o[0]+(n.type||0)),s.setAttribute("index",r);var l=function(){var e="object"==typeof n.title;return n.title?''+(e?n.title[0]:n.title)+"
":""}(),c=function(){"string"==typeof n.btn&&(n.btn=[n.btn]);var e,t=(n.btn||[]).length;return 0!==t&&n.btn?(e=''+n.btn[0]+"",2===t&&(e=''+n.btn[1]+""+e),''+e+"
"):""}();if(n.fixed||(n.top=n.hasOwnProperty("top")?n.top:100,n.style=n.style||"",n.style+=" top:"+(t.body.scrollTop+n.top)+"px"),2===n.type&&(n.content=''+(n.content||"")+"
"),n.skin&&(n.anim="up"),"msg"===n.skin&&(n.shade=!1),s.innerHTML=(n.shade?"':"")+'",!n.type||2===n.type){var d=t[i](o[0]+n.type),y=d.length;y>=1&&layer.close(d[0].getAttribute("index"))}document.body.appendChild(s);var u=e.elem=a("#"+e.id)[0];n.success&&n.success(u),e.index=r++,e.action(n,u)},c.prototype.action=function(e,t){var n=this;e.time&&(l.timer[n.index]=setTimeout(function(){layer.close(n.index)},1e3*e.time));var a=function(){var t=this.getAttribute("type");0==t?(e.no&&e.no(),layer.close(n.index)):e.yes?e.yes(n.index):layer.close(n.index)};if(e.btn)for(var s=t[i]("layui-m-layerbtn")[0].children,r=s.length,o=0;odiv{line-height:22px;padding-top:7px;margin-bottom:20px;font-size:14px}.layui-m-layerbtn{display:box;display:-moz-box;display:-webkit-box;width:100%;height:50px;line-height:50px;font-size:0;border-top:1px solid #D0D0D0;background-color:#F2F2F2}.layui-m-layerbtn span{display:block;-moz-box-flex:1;box-flex:1;-webkit-box-flex:1;font-size:14px;cursor:pointer}.layui-m-layerbtn span[yes]{color:#40AFFE}.layui-m-layerbtn span[no]{border-right:1px solid #D0D0D0;border-radius:0 0 0 5px}.layui-m-layerbtn span:active{background-color:#F6F6F6}.layui-m-layerend{position:absolute;right:7px;top:10px;width:30px;height:30px;border:0;font-weight:400;background:0 0;cursor:pointer;-webkit-appearance:none;font-size:30px}.layui-m-layerend::after,.layui-m-layerend::before{position:absolute;left:5px;top:15px;content:'';width:18px;height:1px;background-color:#999;transform:rotate(45deg);-webkit-transform:rotate(45deg);border-radius:3px}.layui-m-layerend::after{transform:rotate(-45deg);-webkit-transform:rotate(-45deg)}body .layui-m-layer .layui-m-layer-footer{position:fixed;width:95%;max-width:100%;margin:0 auto;left:0;right:0;bottom:10px;background:0 0}.layui-m-layer-footer .layui-m-layercont{padding:20px;border-radius:5px 5px 0 0;background-color:rgba(255,255,255,.8)}.layui-m-layer-footer .layui-m-layerbtn{display:block;height:auto;background:0 0;border-top:none}.layui-m-layer-footer .layui-m-layerbtn span{background-color:rgba(255,255,255,.8)}.layui-m-layer-footer .layui-m-layerbtn span[no]{color:#FD482C;border-top:1px solid #c2c2c2;border-radius:0 0 5px 5px}.layui-m-layer-footer .layui-m-layerbtn span[yes]{margin-top:10px;border-radius:5px}body .layui-m-layer .layui-m-layer-msg{width:auto;max-width:90%;margin:0 auto;bottom:-150px;background-color:rgba(0,0,0,.7);color:#fff}.layui-m-layer-msg .layui-m-layercont{padding:10px 20px}
\ No newline at end of file
diff --git a/hotgo-server/resource/public/plugin/layer-3.1.1/theme/default/icon-ext.png b/hotgo-server/resource/public/plugin/layer-3.1.1/theme/default/icon-ext.png
deleted file mode 100644
index bbbb669bb311514baa5db3a6a00b4644d0e280f1..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 5911
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
bWW^%>x7XlHV^#Q1uOX^B?ki3(VEg|7!QHuF
diff --git a/hotgo-server/resource/public/plugin/layer-3.1.1/theme/default/loading-1.gif b/hotgo-server/resource/public/plugin/layer-3.1.1/theme/default/loading-1.gif
deleted file mode 100644
index db3a483e4b74971fbfb1cc0fb6499852cedfe650..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 701
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Μ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