From 9d4f78656be50bd1634807300912e7426d34c227 Mon Sep 17 00:00:00 2001 From: admin Date: Mon, 8 Dec 2025 14:39:07 +0800 Subject: [PATCH] Initial commit --- .gitignore | 8 + INTERFACE_CONFIG.md | 117 ++ PROJECT_INTRODUCTION.md | 119 ++ STARTUP.md | 75 + admin/.gitattributes | 1 + admin/.gitignore | 8 + admin/LICENSE | 21 + admin/README.md | 195 +++ admin/client/.editorconfig | 14 + admin/client/.env.development | 14 + admin/client/.env.production | 6 + admin/client/.env.staging | 8 + admin/client/.eslintignore | 4 + admin/client/.eslintrc.js | 198 +++ admin/client/.gitignore | 16 + admin/client/.travis.yml | 5 + admin/client/Dockerfile | 6 + admin/client/Dockerfile_dev | 7 + admin/client/LICENSE | 21 + admin/client/README-zh.md | 98 ++ admin/client/README.md | 91 ++ admin/client/babel.config.js | 5 + admin/client/build/index.js | 35 + admin/client/jest.config.js | 24 + admin/client/jsconfig.json | 9 + admin/client/mock/index.js | 67 + admin/client/mock/mock-server.js | 68 + admin/client/mock/table.js | 29 + admin/client/mock/user.js | 84 + admin/client/package.json | 75 + admin/client/postcss.config.js | 8 + admin/client/public/favicon.ico | Bin 0 -> 67646 bytes admin/client/public/index.html | 17 + admin/client/src/App.vue | 11 + admin/client/src/api/crm.js | 360 +++++ admin/client/src/api/dashboard.js | 8 + admin/client/src/api/dict.js | 57 + admin/client/src/api/file.js | 32 + admin/client/src/api/moritor.js | 26 + admin/client/src/api/org.js | 35 + admin/client/src/api/perm.js | 28 + admin/client/src/api/position.js | 31 + admin/client/src/api/role.js | 38 + admin/client/src/api/table.js | 9 + admin/client/src/api/task.js | 45 + admin/client/src/api/user.js | 70 + admin/client/src/api/workflow.js | 258 +++ admin/client/src/assets/404_images/404.png | Bin 0 -> 98071 bytes .../src/assets/404_images/404_cloud.png | Bin 0 -> 4766 bytes .../src/components/Breadcrumb/index.vue | 78 + .../client/src/components/Hamburger/index.vue | 44 + .../src/components/Pagination/index.vue | 101 ++ admin/client/src/components/SvgIcon/index.vue | 62 + .../client/src/directive/el-table/adaptive.js | 42 + admin/client/src/directive/el-table/index.js | 13 + admin/client/src/icons/index.js | 9 + admin/client/src/icons/svg/404.svg | 1 + admin/client/src/icons/svg/bug.svg | 1 + admin/client/src/icons/svg/chart.svg | 1 + admin/client/src/icons/svg/clipboard.svg | 1 + admin/client/src/icons/svg/component.svg | 1 + admin/client/src/icons/svg/dashboard.svg | 1 + admin/client/src/icons/svg/documentation.svg | 1 + admin/client/src/icons/svg/drag.svg | 1 + admin/client/src/icons/svg/edit.svg | 1 + admin/client/src/icons/svg/education.svg | 1 + admin/client/src/icons/svg/email.svg | 1 + admin/client/src/icons/svg/example.svg | 1 + admin/client/src/icons/svg/excel.svg | 1 + .../client/src/icons/svg/exit-fullscreen.svg | 1 + admin/client/src/icons/svg/eye-open.svg | 1 + admin/client/src/icons/svg/eye.svg | 1 + admin/client/src/icons/svg/form.svg | 1 + admin/client/src/icons/svg/fullscreen.svg | 1 + admin/client/src/icons/svg/guide.svg | 1 + admin/client/src/icons/svg/icon.svg | 1 + admin/client/src/icons/svg/international.svg | 1 + admin/client/src/icons/svg/language.svg | 1 + admin/client/src/icons/svg/link.svg | 1 + admin/client/src/icons/svg/list.svg | 1 + admin/client/src/icons/svg/lock.svg | 1 + admin/client/src/icons/svg/medal.svg | 1 + admin/client/src/icons/svg/message.svg | 1 + admin/client/src/icons/svg/money.svg | 1 + admin/client/src/icons/svg/nested.svg | 1 + admin/client/src/icons/svg/password.svg | 1 + admin/client/src/icons/svg/pdf.svg | 1 + admin/client/src/icons/svg/people.svg | 1 + admin/client/src/icons/svg/peoples.svg | 1 + admin/client/src/icons/svg/position.svg | 1 + admin/client/src/icons/svg/qq.svg | 1 + admin/client/src/icons/svg/search.svg | 1 + admin/client/src/icons/svg/shopping.svg | 1 + admin/client/src/icons/svg/size.svg | 1 + admin/client/src/icons/svg/skill.svg | 1 + admin/client/src/icons/svg/star.svg | 1 + admin/client/src/icons/svg/tab.svg | 1 + admin/client/src/icons/svg/table.svg | 1 + admin/client/src/icons/svg/theme.svg | 1 + admin/client/src/icons/svg/tree-table.svg | 1 + admin/client/src/icons/svg/tree.svg | 1 + admin/client/src/icons/svg/trophy.svg | 1 + admin/client/src/icons/svg/user.svg | 1 + admin/client/src/icons/svg/video.svg | 1 + admin/client/src/icons/svg/wechat.svg | 1 + admin/client/src/icons/svg/zip.svg | 1 + admin/client/src/icons/svgo.yml | 22 + .../client/src/layout/components/AppMain.vue | 40 + admin/client/src/layout/components/Navbar.vue | 154 ++ .../layout/components/Sidebar/FixiOSBug.js | 26 + .../src/layout/components/Sidebar/Item.vue | 29 + .../src/layout/components/Sidebar/Link.vue | 36 + .../src/layout/components/Sidebar/Logo.vue | 82 + .../layout/components/Sidebar/SidebarItem.vue | 95 ++ .../src/layout/components/Sidebar/index.vue | 54 + admin/client/src/layout/components/index.js | 3 + admin/client/src/layout/index.vue | 93 ++ .../client/src/layout/mixin/ResizeHandler.js | 45 + admin/client/src/main.js | 44 + admin/client/src/permission.js | 73 + admin/client/src/router/index.js | 269 ++++ admin/client/src/settings.js | 16 + admin/client/src/store/getters.js | 10 + admin/client/src/store/index.js | 21 + admin/client/src/store/modules/app.js | 48 + admin/client/src/store/modules/permission.js | 68 + admin/client/src/store/modules/settings.js | 31 + admin/client/src/store/modules/user.js | 108 ++ admin/client/src/styles/element-ui.scss | 86 + admin/client/src/styles/index.scss | 143 ++ admin/client/src/styles/mixin.scss | 28 + admin/client/src/styles/sidebar.scss | 209 +++ admin/client/src/styles/transition.scss | 48 + admin/client/src/styles/variables.scss | 25 + admin/client/src/utils/auth.js | 25 + admin/client/src/utils/get-page-title.js | 10 + admin/client/src/utils/index.js | 384 +++++ admin/client/src/utils/permission.js | 27 + admin/client/src/utils/request.js | 88 ++ admin/client/src/utils/scroll-to.js | 58 + admin/client/src/utils/validate.js | 20 + admin/client/src/vendor/Export2Excel.js | 220 +++ admin/client/src/vendor/Export2Zip.js | 24 + admin/client/src/views/404.vue | 228 +++ admin/client/src/views/crm/banner.vue | 242 +++ admin/client/src/views/crm/category.vue | 174 ++ admin/client/src/views/crm/coupon.vue | 297 ++++ admin/client/src/views/crm/honor.vue | 277 ++++ admin/client/src/views/crm/index.vue | 3 + admin/client/src/views/crm/issued_coupon.vue | 175 +++ admin/client/src/views/crm/project.vue | 542 +++++++ admin/client/src/views/crm/showcase.vue | 304 ++++ admin/client/src/views/crm/student.vue | 434 +++++ admin/client/src/views/crm/teacher.vue | 170 ++ .../views/dashboard/components/BarChart.vue | 94 ++ .../views/dashboard/components/LineChart.vue | 135 ++ .../views/dashboard/components/PanelGroup.vue | 283 ++++ .../views/dashboard/components/PieChart.vue | 85 + admin/client/src/views/dashboard/index.vue | 129 ++ .../src/views/dashboard/mixins/resize.js | 43 + admin/client/src/views/form/index.vue | 85 + admin/client/src/views/login/index.vue | 246 +++ admin/client/src/views/monitor/service.vue | 177 +++ admin/client/src/views/nested/menu1/index.vue | 7 + .../src/views/nested/menu1/menu1-1/index.vue | 7 + .../src/views/nested/menu1/menu1-2/index.vue | 7 + .../nested/menu1/menu1-2/menu1-2-1/index.vue | 5 + .../nested/menu1/menu1-2/menu1-2-2/index.vue | 5 + .../src/views/nested/menu1/menu1-3/index.vue | 5 + admin/client/src/views/nested/menu2/index.vue | 5 + .../src/views/system/changepassword.vue | 78 + admin/client/src/views/system/dict.vue | 370 +++++ admin/client/src/views/system/file.vue | 181 +++ .../client/src/views/system/organization.vue | 225 +++ admin/client/src/views/system/perm.vue | 239 +++ admin/client/src/views/system/position.vue | 211 +++ admin/client/src/views/system/role.vue | 301 ++++ admin/client/src/views/system/task.vue | 410 +++++ admin/client/src/views/system/user.vue | 378 +++++ admin/client/src/views/table/index.vue | 79 + admin/client/src/views/tree/index.vue | 78 + .../src/views/workflow/configuration.vue | 52 + .../client/src/views/workflow/customfield.vue | 447 ++++++ admin/client/src/views/workflow/index.vue | 515 ++++++ admin/client/src/views/workflow/state.vue | 487 ++++++ admin/client/src/views/workflow/test.vue | 133 ++ admin/client/src/views/workflow/ticket.vue | 1020 ++++++++++++ .../src/views/workflow/ticketDetail.vue | 563 +++++++ .../src/views/workflow/ticketHandle.vue | 816 ++++++++++ .../client/src/views/workflow/transitions.vue | 267 ++++ .../src/views/workflow/workFlowTickets.vue | 197 +++ admin/client/tests/unit/.eslintrc.js | 5 + .../tests/unit/components/Breadcrumb.spec.js | 98 ++ .../tests/unit/components/Hamburger.spec.js | 18 + .../tests/unit/components/SvgIcon.spec.js | 22 + .../tests/unit/utils/formatTime.spec.js | 30 + .../client/tests/unit/utils/parseTime.spec.js | 28 + .../client/tests/unit/utils/validate.spec.js | 17 + admin/client/vue.config.js | 137 ++ admin/docker-compose.yml | 27 + admin/img/dict.png | Bin 0 -> 40884 bytes admin/img/docs.png | Bin 0 -> 72543 bytes admin/img/task.png | Bin 0 -> 64666 bytes admin/img/ticket.png | Bin 0 -> 587323 bytes admin/img/user.png | Bin 0 -> 49852 bytes admin/server/.gitignore | 15 + admin/server/Dockerfile | 10 + admin/server/apps/crm/__init__.py | 0 admin/server/apps/crm/admin.py | 76 + admin/server/apps/crm/apps.py | 6 + admin/server/apps/crm/authentication.py | 49 + admin/server/apps/crm/management/__init__.py | 0 .../apps/crm/management/commands/__init__.py | 0 .../crm/management/commands/init_crm_data.py | 104 ++ .../commands/populate_degree_ceremony.py | 108 ++ .../management/commands/populate_mock_data.py | 248 +++ .../apps/crm/migrations/0001_initial.py | 99 ++ .../crm/migrations/0002_project_detail.py | 18 + .../crm/migrations/0003_banner_project.py | 19 + .../crm/migrations/0004_auto_20251128_1719.py | 40 + ...udent_education_student_parent_and_more.py | 27 + .../0006_student_wechat_nickname.py | 18 + ...007_project_project_type_studentproject.py | 36 + ...oject_category_project_teacher_and_more.py | 41 + .../apps/crm/migrations/0009_studenthonor.py | 31 + .../crm/migrations/0010_studentshowcase.py | 33 + .../0011_project_price_project_show_price.py | 23 + .../0012_alter_studentcoupon_status.py | 18 + .../crm/migrations/0013_student_openid.py | 18 + .../migrations/0014_alter_student_phone.py | 18 + .../crm/migrations/0015_auto_20251202_1204.py | 22 + .../migrations/0016_alter_project_teacher.py | 19 + .../crm/migrations/0017_auto_20251202_1422.py | 33 + .../crm/migrations/0018_auto_20251202_1430.py | 21 + .../crm/migrations/0019_auto_20251202_1443.py | 37 + .../crm/migrations/0020_student_teacher.py | 19 + .../0021_alter_studentproject_status.py | 18 + .../crm/migrations/0022_auto_20251203_1637.py | 37 + .../crm/migrations/0023_auto_20251203_1645.py | 22 + .../migrations/0024_project_custom_teacher.py | 18 + .../crm/migrations/0025_auto_20251204_1044.py | 27 + .../crm/migrations/0026_student_position.py | 18 + .../migrations/0027_coupon_is_time_limited.py | 18 + admin/server/apps/crm/migrations/__init__.py | 0 admin/server/apps/crm/models.py | 305 ++++ admin/server/apps/crm/serializers.py | 129 ++ admin/server/apps/crm/tests.py | 50 + admin/server/apps/crm/urls.py | 28 + admin/server/apps/crm/views.py | 677 ++++++++ admin/server/apps/monitor/__init__.py | 0 admin/server/apps/monitor/admin.py | 3 + admin/server/apps/monitor/apps.py | 6 + admin/server/apps/monitor/middleware.py | 1 + .../apps/monitor/migrations/__init__.py | 0 admin/server/apps/monitor/models.py | 3 + admin/server/apps/monitor/tests.py | 3 + admin/server/apps/monitor/urls.py | 10 + admin/server/apps/monitor/views.py | 93 ++ admin/server/apps/system/__init__.py | 1 + admin/server/apps/system/admin.py | 11 + admin/server/apps/system/apps.py | 9 + admin/server/apps/system/authentication.py | 23 + admin/server/apps/system/filters.py | 11 + .../apps/system/migrations/0001_initial.py | 239 +++ .../migrations/0002_auto_20210718_0918.py | 23 + .../migrations/0003_auto_20220227_1732.py | 18 + .../migrations/0004_auto_20251128_1413.py | 58 + ...t_options_alter_file_create_by_and_more.py | 34 + .../migrations/0006_auto_20251202_1204.py | 22 + .../server/apps/system/migrations/__init__.py | 0 admin/server/apps/system/mixins.py | 48 + admin/server/apps/system/models.py | 218 +++ admin/server/apps/system/permission.py | 97 ++ admin/server/apps/system/permission_data.py | 98 ++ admin/server/apps/system/serializers.py | 187 +++ admin/server/apps/system/signals.py | 12 + admin/server/apps/system/tasks.py | 9 + admin/server/apps/system/tests.py | 3 + admin/server/apps/system/urls.py | 19 + admin/server/apps/system/views.py | 440 ++++++ admin/server/apps/wf/__init__.py | 0 admin/server/apps/wf/admin.py | 3 + admin/server/apps/wf/apps.py | 7 + admin/server/apps/wf/filters.py | 26 + .../server/apps/wf/migrations/0001_initial.py | 177 +++ admin/server/apps/wf/migrations/__init__.py | 0 admin/server/apps/wf/models.py | 237 +++ admin/server/apps/wf/scripts.py | 56 + admin/server/apps/wf/serializers.py | 193 +++ admin/server/apps/wf/services.py | 353 +++++ admin/server/apps/wf/tests.py | 3 + admin/server/apps/wf/urls.py | 18 + admin/server/apps/wf/views.py | 373 +++++ admin/server/db.json | 498 ++++++ admin/server/log/.gitignore | 2 + admin/server/manage.py | 21 + admin/server/media/default/avatar.png | Bin 0 -> 22934 bytes admin/server/requirements.txt | 12 + admin/server/server/__init__.py | 5 + admin/server/server/asgi.py | 16 + admin/server/server/celery.py | 22 + admin/server/server/conf_e.py | 18 + admin/server/server/settings.py | 314 ++++ admin/server/server/urls.py | 66 + admin/server/server/wsgi.py | 16 + admin/server/start.sh | 10 + admin/server/utils/__init__.py | 0 admin/server/utils/model.py | 87 + admin/server/utils/pagination.py | 23 + admin/server/utils/queryset.py | 70 + admin/server/utils/response.py | 63 + admin/server/utils/serializer.py | 39 + admin/server/utils/test.py | 4 + admin/server/utils/view.py | 51 + admin/server/utils/workflow.py | 36 + admin/specification.md | 53 + create_repo.py | 140 ++ db.sqlite3 | Bin 0 -> 663552 bytes login-logo.png | Bin 0 -> 560651 bytes logo.png | Bin 0 -> 27399 bytes setup_firewall.bat | 52 + wechat-mini-program/app.js | 84 + wechat-mini-program/app.json | 43 + wechat-mini-program/app.wxss | 45 + wechat-mini-program/assets/empty-honor.png | Bin 0 -> 2210 bytes .../assets/icons/coupon-icon.png | Bin 0 -> 228 bytes .../assets/icons/profile-icon.png | Bin 0 -> 357 bytes wechat-mini-program/assets/logo.png | Bin 0 -> 22255 bytes .../assets/tabbar/coupon-active.png | Bin 0 -> 228 bytes wechat-mini-program/assets/tabbar/coupon.png | Bin 0 -> 243 bytes .../assets/tabbar/home-active.png | Bin 0 -> 774 bytes .../assets/tabbar/home-active.svg | 1 + wechat-mini-program/assets/tabbar/home.png | Bin 0 -> 932 bytes wechat-mini-program/assets/tabbar/home.svg | 1 + .../assets/tabbar/project-active.png | Bin 0 -> 1113 bytes .../assets/tabbar/project-active.svg | 1 + wechat-mini-program/assets/tabbar/project.png | Bin 0 -> 1172 bytes wechat-mini-program/assets/tabbar/project.svg | 1 + .../assets/tabbar/user-active.png | Bin 0 -> 769 bytes .../assets/tabbar/user-active.svg | 1 + wechat-mini-program/assets/tabbar/user.png | Bin 0 -> 1312 bytes wechat-mini-program/assets/tabbar/user.svg | 1 + .../components/mp-html/.eslintignore | 1 + .../components/mp-html/.eslintrc.json | 30 + .../mp-html/.github/ISSUE_TEMPLATE/bug.md | 23 + .../.github/ISSUE_TEMPLATE/enhancement.md | 14 + .../.github/ISSUE_TEMPLATE/question.md | 12 + .../components/mp-html/.stylelintrc.json | 6 + .../components/mp-html/LICENSE | 21 + .../components/mp-html/README.md | 236 +++ .../mp-html/dist/mp-alipay/index.acss | 1 + .../mp-html/dist/mp-alipay/index.axml | 1 + .../mp-html/dist/mp-alipay/index.js | 8 + .../mp-html/dist/mp-alipay/index.json | 1 + .../mp-html/dist/mp-alipay/node/node.acss | 1 + .../mp-html/dist/mp-alipay/node/node.axml | 1 + .../mp-html/dist/mp-alipay/node/node.js | 1 + .../mp-html/dist/mp-alipay/node/node.json | 1 + .../mp-html/dist/mp-alipay/parser.js | 1 + .../mp-html/dist/mp-baidu/index.css | 1 + .../components/mp-html/dist/mp-baidu/index.js | 8 + .../mp-html/dist/mp-baidu/index.json | 1 + .../mp-html/dist/mp-baidu/index.swan | 1 + .../mp-html/dist/mp-baidu/node/node.css | 1 + .../mp-html/dist/mp-baidu/node/node.js | 1 + .../mp-html/dist/mp-baidu/node/node.json | 1 + .../mp-html/dist/mp-baidu/node/node.swan | 1 + .../mp-html/dist/mp-baidu/parser.js | 1 + .../components/mp-html/dist/mp-qq/index.js | 8 + .../components/mp-html/dist/mp-qq/index.json | 1 + .../components/mp-html/dist/mp-qq/index.qml | 1 + .../components/mp-html/dist/mp-qq/index.qss | 1 + .../mp-html/dist/mp-qq/node/node.js | 1 + .../mp-html/dist/mp-qq/node/node.json | 1 + .../mp-html/dist/mp-qq/node/node.qml | 1 + .../mp-html/dist/mp-qq/node/node.qss | 1 + .../components/mp-html/dist/mp-qq/parser.js | 1 + .../mp-html/dist/mp-toutiao/index.js | 8 + .../mp-html/dist/mp-toutiao/index.json | 1 + .../mp-html/dist/mp-toutiao/index.ttml | 1 + .../mp-html/dist/mp-toutiao/index.ttss | 1 + .../mp-html/dist/mp-toutiao/node/node.js | 1 + .../mp-html/dist/mp-toutiao/node/node.json | 1 + .../mp-html/dist/mp-toutiao/node/node.ttml | 1 + .../mp-html/dist/mp-toutiao/node/node.ttss | 1 + .../mp-html/dist/mp-toutiao/parser.js | 1 + .../mp-html/dist/mp-weixin/index.js | 8 + .../mp-html/dist/mp-weixin/index.json | 1 + .../mp-html/dist/mp-weixin/index.wxml | 1 + .../mp-html/dist/mp-weixin/index.wxss | 1 + .../mp-html/dist/mp-weixin/node/node.js | 1 + .../mp-html/dist/mp-weixin/node/node.json | 1 + .../mp-html/dist/mp-weixin/node/node.wxml | 1 + .../mp-html/dist/mp-weixin/node/node.wxss | 1 + .../mp-html/dist/mp-weixin/parser.js | 1 + .../uni-app/components/mp-html/mp-html.vue | 498 ++++++ .../uni-app/components/mp-html/node/node.vue | 597 +++++++ .../dist/uni-app/components/mp-html/parser.js | 1400 +++++++++++++++++ .../static/app-plus/mp-html/js/handler.js | 1 + .../app-plus/mp-html/js/uni.webview.min.js | 1 + .../static/app-plus/mp-html/local.html | 1 + .../components/mp-html/docs/.nojekyll | 0 .../components/mp-html/docs/README.md | 56 + .../components/mp-html/docs/_coverpage.md | 12 + .../components/mp-html/docs/_sidebar.md | 20 + .../components/mp-html/docs/advanced/api.md | 230 +++ .../mp-html/docs/advanced/develop.md | 114 ++ .../mp-html/docs/advanced/plugin.md | 488 ++++++ .../mp-html/docs/assets/case/365刷题.jpg | Bin 0 -> 19442 bytes .../mp-html/docs/assets/case/AI瓦力.jpg | Bin 0 -> 20773 bytes .../docs/assets/case/MiniProgram模版演示.jpg | Bin 0 -> 19652 bytes .../mp-html/docs/assets/case/优秀笔记.jpg | Bin 0 -> 19901 bytes .../docs/assets/case/你的代码写的真棒.jpg | Bin 0 -> 21692 bytes .../mp-html/docs/assets/case/典典博客.jpg | Bin 0 -> 42859 bytes .../docs/assets/case/古典文学名著阅读.jpg | Bin 0 -> 20543 bytes .../mp-html/docs/assets/case/同城共享书.jpg | Bin 0 -> 21430 bytes .../mp-html/docs/assets/case/多么生活.jpg | Bin 0 -> 17588 bytes .../mp-html/docs/assets/case/富文本插件.jpg | Bin 0 -> 19223 bytes .../mp-html/docs/assets/case/小莫唐尼.png | Bin 0 -> 29338 bytes .../mp-html/docs/assets/case/微慕.jpg | Bin 0 -> 19698 bytes .../mp-html/docs/assets/case/技术源share.jpg | Bin 0 -> 20134 bytes .../mp-html/docs/assets/case/欢喜商城.png | Bin 0 -> 30529 bytes .../mp-html/docs/assets/case/科学复习.png | Bin 0 -> 25662 bytes .../docs/assets/case/程序员技术之旅.jpg | Bin 0 -> 18749 bytes .../mp-html/docs/assets/case/谛否.jpg | Bin 0 -> 19763 bytes .../mp-html/docs/assets/case/食法查.png | Bin 0 -> 31636 bytes .../components/mp-html/docs/assets/group.jpg | Bin 0 -> 19980 bytes .../mp-html/docs/assets/logo/logo.ico | Bin 0 -> 16958 bytes .../mp-html/docs/assets/logo/logo.png | Bin 0 -> 3320 bytes .../mp-html/docs/assets/plugin/card.png | Bin 0 -> 34845 bytes .../mp-html/docs/assets/sponsor.png | Bin 0 -> 25037 bytes .../mp-html/docs/assets/tutorials/01.png | Bin 0 -> 110275 bytes .../mp-html/docs/assets/tutorials/02.png | Bin 0 -> 31633 bytes .../mp-html/docs/assets/tutorials/03.png | Bin 0 -> 24802 bytes .../mp-html/docs/assets/tutorials/04.png | Bin 0 -> 110941 bytes .../components/mp-html/docs/basic/event.md | 173 ++ .../components/mp-html/docs/basic/prop.md | 141 ++ .../mp-html/docs/changelog/changelog.md | 322 ++++ .../components/mp-html/docs/index.html | 50 + .../mp-html/docs/lib/docsify.min.js | 1 + .../mp-html/docs/lib/prism-bash.min.js | 1 + .../components/mp-html/docs/lib/search.min.js | 1 + .../components/mp-html/docs/lib/vue.css | 858 ++++++++++ .../mp-html/docs/overview/feature.md | 228 +++ .../mp-html/docs/overview/quickstart.md | 287 ++++ .../mp-html/docs/question/contribution.md | 16 + .../components/mp-html/docs/question/faq.md | 152 ++ .../mp-html/docs/question/feedback.md | 30 + .../components/mp-html/gulpfile.js | 113 ++ .../components/mp-html/lint.js | 63 + .../components/mp-html/package.json | 74 + .../components/mp-html/plugins/README.md | 2 + .../mp-html/plugins/audio/README.md | 25 + .../components/mp-html/plugins/audio/build.js | 11 + .../mp-html/plugins/audio/context.js | 7 + .../components/mp-html/plugins/audio/index.js | 34 + .../plugins/audio/miniprogram/audio.js | 189 +++ .../plugins/audio/miniprogram/audio.json | 3 + .../plugins/audio/miniprogram/audio.wxml | 17 + .../plugins/audio/miniprogram/audio.wxss | 127 ++ .../plugins/audio/miniprogram/build.js | 3 + .../mp-html/plugins/audio/uni-app/audio.vue | 269 ++++ .../mp-html/plugins/audio/uni-app/build.js | 3 + .../components/mp-html/plugins/card/README.md | 30 + .../components/mp-html/plugins/card/build.js | 14 + .../components/mp-html/plugins/card/index.js | 7 + .../mp-html/plugins/card/miniprogram/build.js | 3 + .../mp-html/plugins/card/miniprogram/card.js | 26 + .../plugins/card/miniprogram/card.json | 3 + .../plugins/card/miniprogram/card.wxml | 9 + .../plugins/card/miniprogram/card.wxss | 55 + .../mp-html/plugins/card/uni-app/build.js | 3 + .../mp-html/plugins/card/uni-app/card.vue | 122 ++ .../mp-html/plugins/editable/README.md | 137 ++ .../mp-html/plugins/editable/config.js | 15 + .../plugins/editable/miniprogram/build.js | 813 ++++++++++ .../plugins/editable/miniprogram/index.js | 551 +++++++ .../mp-html/plugins/editable/uni-app/build.js | 744 +++++++++ .../mp-html/plugins/editable/uni-app/index.js | 553 +++++++ .../mp-html/plugins/emoji/README.md | 15 + .../components/mp-html/plugins/emoji/index.js | 203 +++ .../mp-html/plugins/highlight/README.md | 26 + .../mp-html/plugins/highlight/config.js | 5 + .../mp-html/plugins/highlight/index.js | 96 ++ .../plugins/highlight/miniprogram/build.js | 88 ++ .../mp-html/plugins/highlight/prism.css | 125 ++ .../mp-html/plugins/highlight/prism.min.js | 7 + .../plugins/highlight/uni-app/build.js | 88 ++ .../mp-html/plugins/img-cache/README.md | 24 + .../mp-html/plugins/img-cache/build.js | 16 + .../mp-html/plugins/img-cache/index.js | 138 ++ .../mp-html/plugins/latex/README.md | 16 + .../components/mp-html/plugins/latex/build.js | 14 + .../components/mp-html/plugins/latex/index.js | 80 + .../mp-html/plugins/latex/katex.css | 1070 +++++++++++++ .../mp-html/plugins/latex/katex.min.js | 1 + .../mp-html/plugins/markdown/README.md | 17 + .../mp-html/plugins/markdown/index.js | 34 + .../mp-html/plugins/markdown/marked.min.js | 6 + .../plugins/markdown/miniprogram/build.js | 70 + .../mp-html/plugins/markdown/uni-app/build.js | 68 + .../mp-html/plugins/search/README.md | 46 + .../plugins/search/miniprogram/index.js | 137 ++ .../mp-html/plugins/search/uni-app/index.js | 132 ++ .../mp-html/plugins/style/README.md | 30 + .../components/mp-html/plugins/style/index.js | 129 ++ .../mp-html/plugins/style/parser.js | 175 +++ .../mp-html/plugins/template/README.md | 2 + .../mp-html/plugins/template/build.js | 65 + .../mp-html/plugins/template/index.js | 67 + .../mp-html/plugins/txv-video/README.md | 18 + .../mp-html/plugins/txv-video/build.js | 3 + .../mp-html/plugins/txv-video/index.js | 46 + .../plugins/txv-video/miniprogram/build.js | 6 + .../plugins/txv-video/uni-app/build.js | 3 + .../mp-html/src/miniprogram/index.js | 396 +++++ .../mp-html/src/miniprogram/index.json | 6 + .../mp-html/src/miniprogram/index.wxml | 7 + .../mp-html/src/miniprogram/index.wxss | 13 + .../mp-html/src/miniprogram/node/node.js | 247 +++ .../mp-html/src/miniprogram/node/node.json | 6 + .../mp-html/src/miniprogram/node/node.wxml | 112 ++ .../mp-html/src/miniprogram/node/node.wxss | 164 ++ .../mp-html/src/miniprogram/parser.js | 1276 +++++++++++++++ .../uni-app/components/mp-html/mp-html.vue | 498 ++++++ .../uni-app/components/mp-html/node/node.vue | 595 +++++++ .../src/uni-app/components/mp-html/parser.js | 1400 +++++++++++++++++ .../static/app-plus/mp-html/js/handler.js | 254 +++ .../app-plus/mp-html/js/uni.webview.min.js | 1 + .../static/app-plus/mp-html/local.html | 33 + .../components/mp-html/test/content.js | 203 +++ .../components/mp-html/test/test.js | 373 +++++ wechat-mini-program/config/env.js | 11 + .../images/tabbar/coupon-active.png | Bin 0 -> 228 bytes wechat-mini-program/images/tabbar/coupon.png | Bin 0 -> 243 bytes .../images/tabbar/home-active.png | Bin 0 -> 406 bytes wechat-mini-program/images/tabbar/home.png | Bin 0 -> 459 bytes .../images/tabbar/user-active.png | Bin 0 -> 357 bytes wechat-mini-program/images/tabbar/user.png | Bin 0 -> 438 bytes .../node_modules/.package-lock.json | 12 + .../node_modules/mp-html/.eslintignore | 1 + .../node_modules/mp-html/.eslintrc.json | 30 + .../mp-html/.github/ISSUE_TEMPLATE/bug.md | 23 + .../.github/ISSUE_TEMPLATE/enhancement.md | 14 + .../.github/ISSUE_TEMPLATE/question.md | 12 + .../node_modules/mp-html/.stylelintrc.json | 6 + .../node_modules/mp-html/LICENSE | 21 + .../node_modules/mp-html/README.md | 241 +++ .../mp-html/dist/mp-alipay/index.acss | 1 + .../mp-html/dist/mp-alipay/index.axml | 1 + .../mp-html/dist/mp-alipay/index.js | 8 + .../mp-html/dist/mp-alipay/index.json | 1 + .../mp-html/dist/mp-alipay/node/node.acss | 1 + .../mp-html/dist/mp-alipay/node/node.axml | 1 + .../mp-html/dist/mp-alipay/node/node.js | 1 + .../mp-html/dist/mp-alipay/node/node.json | 1 + .../mp-html/dist/mp-alipay/parser.js | 1 + .../mp-html/dist/mp-baidu/index.css | 1 + .../mp-html/dist/mp-baidu/index.js | 8 + .../mp-html/dist/mp-baidu/index.json | 1 + .../mp-html/dist/mp-baidu/index.swan | 1 + .../mp-html/dist/mp-baidu/node/node.css | 1 + .../mp-html/dist/mp-baidu/node/node.js | 1 + .../mp-html/dist/mp-baidu/node/node.json | 1 + .../mp-html/dist/mp-baidu/node/node.swan | 1 + .../mp-html/dist/mp-baidu/parser.js | 1 + .../node_modules/mp-html/dist/mp-qq/index.js | 8 + .../mp-html/dist/mp-qq/index.json | 1 + .../node_modules/mp-html/dist/mp-qq/index.qml | 1 + .../node_modules/mp-html/dist/mp-qq/index.qss | 1 + .../mp-html/dist/mp-qq/node/node.js | 1 + .../mp-html/dist/mp-qq/node/node.json | 1 + .../mp-html/dist/mp-qq/node/node.qml | 1 + .../mp-html/dist/mp-qq/node/node.qss | 1 + .../node_modules/mp-html/dist/mp-qq/parser.js | 1 + .../mp-html/dist/mp-toutiao/index.js | 8 + .../mp-html/dist/mp-toutiao/index.json | 1 + .../mp-html/dist/mp-toutiao/index.ttml | 1 + .../mp-html/dist/mp-toutiao/index.ttss | 1 + .../mp-html/dist/mp-toutiao/node/node.js | 1 + .../mp-html/dist/mp-toutiao/node/node.json | 1 + .../mp-html/dist/mp-toutiao/node/node.ttml | 1 + .../mp-html/dist/mp-toutiao/node/node.ttss | 1 + .../mp-html/dist/mp-toutiao/parser.js | 1 + .../mp-html/dist/mp-weixin/index.js | 8 + .../mp-html/dist/mp-weixin/index.json | 1 + .../mp-html/dist/mp-weixin/index.wxml | 1 + .../mp-html/dist/mp-weixin/index.wxss | 1 + .../mp-html/dist/mp-weixin/node/node.js | 1 + .../mp-html/dist/mp-weixin/node/node.json | 1 + .../mp-html/dist/mp-weixin/node/node.wxml | 1 + .../mp-html/dist/mp-weixin/node/node.wxss | 1 + .../mp-html/dist/mp-weixin/parser.js | 1 + .../uni-app/components/mp-html/mp-html.vue | 498 ++++++ .../uni-app/components/mp-html/node/node.vue | 597 +++++++ .../dist/uni-app/components/mp-html/parser.js | 1400 +++++++++++++++++ .../static/app-plus/mp-html/js/handler.js | 1 + .../app-plus/mp-html/js/uni.webview.min.js | 1 + .../static/app-plus/mp-html/local.html | 1 + .../node_modules/mp-html/docs/.nojekyll | 0 .../node_modules/mp-html/docs/README.md | 56 + .../node_modules/mp-html/docs/_coverpage.md | 12 + .../node_modules/mp-html/docs/_sidebar.md | 20 + .../node_modules/mp-html/docs/advanced/api.md | 230 +++ .../mp-html/docs/advanced/develop.md | 114 ++ .../mp-html/docs/advanced/plugin.md | 488 ++++++ .../mp-html/docs/assets/case/365刷题.jpg | Bin 0 -> 19442 bytes .../mp-html/docs/assets/case/AI瓦力.jpg | Bin 0 -> 20773 bytes .../docs/assets/case/MiniProgram模版演示.jpg | Bin 0 -> 19652 bytes .../mp-html/docs/assets/case/优秀笔记.jpg | Bin 0 -> 19901 bytes .../docs/assets/case/你的代码写的真棒.jpg | Bin 0 -> 21692 bytes .../mp-html/docs/assets/case/典典博客.jpg | Bin 0 -> 42859 bytes .../docs/assets/case/古典文学名著阅读.jpg | Bin 0 -> 20543 bytes .../mp-html/docs/assets/case/同城共享书.jpg | Bin 0 -> 21430 bytes .../mp-html/docs/assets/case/多么生活.jpg | Bin 0 -> 17588 bytes .../mp-html/docs/assets/case/富文本插件.jpg | Bin 0 -> 19223 bytes .../mp-html/docs/assets/case/小莫唐尼.png | Bin 0 -> 29338 bytes .../mp-html/docs/assets/case/微慕.jpg | Bin 0 -> 19698 bytes .../mp-html/docs/assets/case/技术源share.jpg | Bin 0 -> 20134 bytes .../mp-html/docs/assets/case/欢喜商城.png | Bin 0 -> 30529 bytes .../mp-html/docs/assets/case/科学复习.png | Bin 0 -> 25662 bytes .../docs/assets/case/程序员技术之旅.jpg | Bin 0 -> 18749 bytes .../mp-html/docs/assets/case/谛否.jpg | Bin 0 -> 19763 bytes .../mp-html/docs/assets/case/食法查.png | Bin 0 -> 31636 bytes .../mp-html/docs/assets/group.jpg | Bin 0 -> 19980 bytes .../mp-html/docs/assets/logo/logo.ico | Bin 0 -> 16958 bytes .../mp-html/docs/assets/logo/logo.png | Bin 0 -> 3320 bytes .../mp-html/docs/assets/plugin/card.png | Bin 0 -> 34845 bytes .../mp-html/docs/assets/sponsor.png | Bin 0 -> 25037 bytes .../mp-html/docs/assets/tutorials/01.png | Bin 0 -> 110275 bytes .../mp-html/docs/assets/tutorials/02.png | Bin 0 -> 31633 bytes .../mp-html/docs/assets/tutorials/03.png | Bin 0 -> 24802 bytes .../mp-html/docs/assets/tutorials/04.png | Bin 0 -> 110941 bytes .../node_modules/mp-html/docs/basic/event.md | 173 ++ .../node_modules/mp-html/docs/basic/prop.md | 141 ++ .../mp-html/docs/changelog/changelog.md | 322 ++++ .../node_modules/mp-html/docs/index.html | 50 + .../mp-html/docs/lib/docsify.min.js | 1 + .../mp-html/docs/lib/prism-bash.min.js | 1 + .../mp-html/docs/lib/search.min.js | 1 + .../node_modules/mp-html/docs/lib/vue.css | 858 ++++++++++ .../mp-html/docs/overview/feature.md | 228 +++ .../mp-html/docs/overview/quickstart.md | 287 ++++ .../mp-html/docs/question/contribution.md | 16 + .../node_modules/mp-html/docs/question/faq.md | 152 ++ .../mp-html/docs/question/feedback.md | 30 + .../node_modules/mp-html/gulpfile.js | 113 ++ .../node_modules/mp-html/lint.js | 63 + .../node_modules/mp-html/package.json | 74 + .../node_modules/mp-html/plugins/README.md | 2 + .../mp-html/plugins/audio/README.md | 25 + .../mp-html/plugins/audio/build.js | 11 + .../mp-html/plugins/audio/context.js | 7 + .../mp-html/plugins/audio/index.js | 34 + .../plugins/audio/miniprogram/audio.js | 189 +++ .../plugins/audio/miniprogram/audio.json | 3 + .../plugins/audio/miniprogram/audio.wxml | 17 + .../plugins/audio/miniprogram/audio.wxss | 127 ++ .../plugins/audio/miniprogram/build.js | 3 + .../mp-html/plugins/audio/uni-app/audio.vue | 269 ++++ .../mp-html/plugins/audio/uni-app/build.js | 3 + .../mp-html/plugins/card/README.md | 30 + .../mp-html/plugins/card/build.js | 14 + .../mp-html/plugins/card/index.js | 7 + .../mp-html/plugins/card/miniprogram/build.js | 3 + .../mp-html/plugins/card/miniprogram/card.js | 26 + .../plugins/card/miniprogram/card.json | 3 + .../plugins/card/miniprogram/card.wxml | 9 + .../plugins/card/miniprogram/card.wxss | 55 + .../mp-html/plugins/card/uni-app/build.js | 3 + .../mp-html/plugins/card/uni-app/card.vue | 122 ++ .../mp-html/plugins/editable/README.md | 137 ++ .../mp-html/plugins/editable/config.js | 15 + .../plugins/editable/miniprogram/build.js | 813 ++++++++++ .../plugins/editable/miniprogram/index.js | 551 +++++++ .../mp-html/plugins/editable/uni-app/build.js | 744 +++++++++ .../mp-html/plugins/editable/uni-app/index.js | 553 +++++++ .../mp-html/plugins/emoji/README.md | 15 + .../mp-html/plugins/emoji/index.js | 203 +++ .../mp-html/plugins/highlight/README.md | 26 + .../mp-html/plugins/highlight/config.js | 5 + .../mp-html/plugins/highlight/index.js | 96 ++ .../plugins/highlight/miniprogram/build.js | 88 ++ .../mp-html/plugins/highlight/prism.css | 125 ++ .../mp-html/plugins/highlight/prism.min.js | 7 + .../plugins/highlight/uni-app/build.js | 88 ++ .../mp-html/plugins/img-cache/README.md | 24 + .../mp-html/plugins/img-cache/build.js | 16 + .../mp-html/plugins/img-cache/index.js | 138 ++ .../mp-html/plugins/latex/README.md | 16 + .../mp-html/plugins/latex/build.js | 14 + .../mp-html/plugins/latex/index.js | 80 + .../mp-html/plugins/latex/katex.css | 1070 +++++++++++++ .../mp-html/plugins/latex/katex.min.js | 1 + .../mp-html/plugins/markdown/README.md | 17 + .../mp-html/plugins/markdown/index.js | 34 + .../mp-html/plugins/markdown/marked.min.js | 6 + .../plugins/markdown/miniprogram/build.js | 70 + .../mp-html/plugins/markdown/uni-app/build.js | 68 + .../mp-html/plugins/search/README.md | 46 + .../plugins/search/miniprogram/index.js | 137 ++ .../mp-html/plugins/search/uni-app/index.js | 132 ++ .../mp-html/plugins/style/README.md | 30 + .../mp-html/plugins/style/index.js | 129 ++ .../mp-html/plugins/style/parser.js | 175 +++ .../mp-html/plugins/template/README.md | 2 + .../mp-html/plugins/template/build.js | 65 + .../mp-html/plugins/template/index.js | 67 + .../mp-html/plugins/txv-video/README.md | 18 + .../mp-html/plugins/txv-video/build.js | 3 + .../mp-html/plugins/txv-video/index.js | 46 + .../plugins/txv-video/miniprogram/build.js | 6 + .../plugins/txv-video/uni-app/build.js | 3 + .../mp-html/src/miniprogram/index.js | 396 +++++ .../mp-html/src/miniprogram/index.json | 6 + .../mp-html/src/miniprogram/index.wxml | 7 + .../mp-html/src/miniprogram/index.wxss | 13 + .../mp-html/src/miniprogram/node/node.js | 247 +++ .../mp-html/src/miniprogram/node/node.json | 6 + .../mp-html/src/miniprogram/node/node.wxml | 112 ++ .../mp-html/src/miniprogram/node/node.wxss | 164 ++ .../mp-html/src/miniprogram/parser.js | 1276 +++++++++++++++ .../uni-app/components/mp-html/mp-html.vue | 498 ++++++ .../uni-app/components/mp-html/node/node.vue | 595 +++++++ .../src/uni-app/components/mp-html/parser.js | 1400 +++++++++++++++++ .../static/app-plus/mp-html/js/handler.js | 254 +++ .../app-plus/mp-html/js/uni.webview.min.js | 1 + .../static/app-plus/mp-html/local.html | 33 + .../node_modules/mp-html/test/content.js | 203 +++ .../node_modules/mp-html/test/test.js | 373 +++++ .../node_modules/mp-html/tools/config.js | 82 + .../node_modules/mp-html/tools/converter.js | 205 +++ .../mp-html/tools/demo/miniprogram/app.js | 1 + .../mp-html/tools/demo/miniprogram/app.json | 13 + .../demo/miniprogram/pages/index/index.js | 32 + .../demo/miniprogram/pages/index/index.json | 5 + .../demo/miniprogram/pages/index/index.wxml | 3 + .../tools/demo/miniprogram/pages/jump/jump.js | 1 + .../demo/miniprogram/pages/jump/jump.json | 1 + .../demo/miniprogram/pages/jump/jump.wxml | 1 + .../demo/miniprogram/project.config.json | 13 + .../mp-html/tools/demo/uni-app/App.vue | 6 + .../mp-html/tools/demo/uni-app/README.md | 194 +++ .../mp-html/tools/demo/uni-app/index.html | 14 + .../mp-html/tools/demo/uni-app/main.js | 21 + .../mp-html/tools/demo/uni-app/manifest.json | 45 + .../mp-html/tools/demo/uni-app/pages.json | 16 + .../tools/demo/uni-app/pages/index/index.vue | 52 + .../tools/demo/uni-app/pages/jump/jump.vue | 12 + .../node_modules/mp-html/tools/ifdef.js | 115 ++ .../node_modules/mp-html/tools/minifier.js | 40 + .../node_modules/mp-html/tools/plugin.js | 248 +++ wechat-mini-program/package-lock.json | 17 + wechat-mini-program/package.json | 16 + wechat-mini-program/pages/coupon/coupon.js | 188 +++ wechat-mini-program/pages/coupon/coupon.json | 3 + wechat-mini-program/pages/coupon/coupon.wxml | 43 + wechat-mini-program/pages/coupon/coupon.wxss | 231 +++ wechat-mini-program/pages/course/course.js | 148 ++ wechat-mini-program/pages/course/course.json | 6 + wechat-mini-program/pages/course/course.wxml | 72 + wechat-mini-program/pages/course/course.wxss | 309 ++++ wechat-mini-program/pages/detail/detail.js | 173 ++ wechat-mini-program/pages/detail/detail.json | 8 + wechat-mini-program/pages/detail/detail.wxml | 48 + wechat-mini-program/pages/detail/detail.wxss | 172 ++ wechat-mini-program/pages/index/index.js | 158 ++ wechat-mini-program/pages/index/index.json | 6 + wechat-mini-program/pages/index/index.wxml | 95 ++ wechat-mini-program/pages/index/index.wxss | 316 ++++ wechat-mini-program/pages/login/login.js | 131 ++ wechat-mini-program/pages/login/login.json | 3 + wechat-mini-program/pages/login/login.wxml | 20 + wechat-mini-program/pages/login/login.wxss | 56 + wechat-mini-program/pages/profile/profile.js | 339 ++++ .../pages/profile/profile.json | 5 + .../pages/profile/profile.wxml | 107 ++ .../pages/profile/profile.wxss | 206 +++ wechat-mini-program/project.config.json | 62 + .../project.private.config.json | 23 + wechat-mini-program/sitemap.json | 7 + wechat-mini-program/utils/request.js | 41 + 782 files changed, 66418 insertions(+) create mode 100644 .gitignore create mode 100644 INTERFACE_CONFIG.md create mode 100644 PROJECT_INTRODUCTION.md create mode 100644 STARTUP.md create mode 100644 admin/.gitattributes create mode 100644 admin/.gitignore create mode 100644 admin/LICENSE create mode 100644 admin/README.md create mode 100644 admin/client/.editorconfig create mode 100644 admin/client/.env.development create mode 100644 admin/client/.env.production create mode 100644 admin/client/.env.staging create mode 100644 admin/client/.eslintignore create mode 100644 admin/client/.eslintrc.js create mode 100644 admin/client/.gitignore create mode 100644 admin/client/.travis.yml create mode 100644 admin/client/Dockerfile create mode 100644 admin/client/Dockerfile_dev create mode 100644 admin/client/LICENSE create mode 100644 admin/client/README-zh.md create mode 100644 admin/client/README.md create mode 100644 admin/client/babel.config.js create mode 100644 admin/client/build/index.js create mode 100644 admin/client/jest.config.js create mode 100644 admin/client/jsconfig.json create mode 100644 admin/client/mock/index.js create mode 100644 admin/client/mock/mock-server.js create mode 100644 admin/client/mock/table.js create mode 100644 admin/client/mock/user.js create mode 100644 admin/client/package.json create mode 100644 admin/client/postcss.config.js create mode 100644 admin/client/public/favicon.ico create mode 100644 admin/client/public/index.html create mode 100644 admin/client/src/App.vue create mode 100644 admin/client/src/api/crm.js create mode 100644 admin/client/src/api/dashboard.js create mode 100644 admin/client/src/api/dict.js create mode 100644 admin/client/src/api/file.js create mode 100644 admin/client/src/api/moritor.js create mode 100644 admin/client/src/api/org.js create mode 100644 admin/client/src/api/perm.js create mode 100644 admin/client/src/api/position.js create mode 100644 admin/client/src/api/role.js create mode 100644 admin/client/src/api/table.js create mode 100644 admin/client/src/api/task.js create mode 100644 admin/client/src/api/user.js create mode 100644 admin/client/src/api/workflow.js create mode 100644 admin/client/src/assets/404_images/404.png create mode 100644 admin/client/src/assets/404_images/404_cloud.png create mode 100644 admin/client/src/components/Breadcrumb/index.vue create mode 100644 admin/client/src/components/Hamburger/index.vue create mode 100644 admin/client/src/components/Pagination/index.vue create mode 100644 admin/client/src/components/SvgIcon/index.vue create mode 100644 admin/client/src/directive/el-table/adaptive.js create mode 100644 admin/client/src/directive/el-table/index.js create mode 100644 admin/client/src/icons/index.js create mode 100644 admin/client/src/icons/svg/404.svg create mode 100644 admin/client/src/icons/svg/bug.svg create mode 100644 admin/client/src/icons/svg/chart.svg create mode 100644 admin/client/src/icons/svg/clipboard.svg create mode 100644 admin/client/src/icons/svg/component.svg create mode 100644 admin/client/src/icons/svg/dashboard.svg create mode 100644 admin/client/src/icons/svg/documentation.svg create mode 100644 admin/client/src/icons/svg/drag.svg create mode 100644 admin/client/src/icons/svg/edit.svg create mode 100644 admin/client/src/icons/svg/education.svg create mode 100644 admin/client/src/icons/svg/email.svg create mode 100644 admin/client/src/icons/svg/example.svg create mode 100644 admin/client/src/icons/svg/excel.svg create mode 100644 admin/client/src/icons/svg/exit-fullscreen.svg create mode 100644 admin/client/src/icons/svg/eye-open.svg create mode 100644 admin/client/src/icons/svg/eye.svg create mode 100644 admin/client/src/icons/svg/form.svg create mode 100644 admin/client/src/icons/svg/fullscreen.svg create mode 100644 admin/client/src/icons/svg/guide.svg create mode 100644 admin/client/src/icons/svg/icon.svg create mode 100644 admin/client/src/icons/svg/international.svg create mode 100644 admin/client/src/icons/svg/language.svg create mode 100644 admin/client/src/icons/svg/link.svg create mode 100644 admin/client/src/icons/svg/list.svg create mode 100644 admin/client/src/icons/svg/lock.svg create mode 100644 admin/client/src/icons/svg/medal.svg create mode 100644 admin/client/src/icons/svg/message.svg create mode 100644 admin/client/src/icons/svg/money.svg create mode 100644 admin/client/src/icons/svg/nested.svg create mode 100644 admin/client/src/icons/svg/password.svg create mode 100644 admin/client/src/icons/svg/pdf.svg create mode 100644 admin/client/src/icons/svg/people.svg create mode 100644 admin/client/src/icons/svg/peoples.svg create mode 100644 admin/client/src/icons/svg/position.svg create mode 100644 admin/client/src/icons/svg/qq.svg create mode 100644 admin/client/src/icons/svg/search.svg create mode 100644 admin/client/src/icons/svg/shopping.svg create mode 100644 admin/client/src/icons/svg/size.svg create mode 100644 admin/client/src/icons/svg/skill.svg create mode 100644 admin/client/src/icons/svg/star.svg create mode 100644 admin/client/src/icons/svg/tab.svg create mode 100644 admin/client/src/icons/svg/table.svg create mode 100644 admin/client/src/icons/svg/theme.svg create mode 100644 admin/client/src/icons/svg/tree-table.svg create mode 100644 admin/client/src/icons/svg/tree.svg create mode 100644 admin/client/src/icons/svg/trophy.svg create mode 100644 admin/client/src/icons/svg/user.svg create mode 100644 admin/client/src/icons/svg/video.svg create mode 100644 admin/client/src/icons/svg/wechat.svg create mode 100644 admin/client/src/icons/svg/zip.svg create mode 100644 admin/client/src/icons/svgo.yml create mode 100644 admin/client/src/layout/components/AppMain.vue create mode 100644 admin/client/src/layout/components/Navbar.vue create mode 100644 admin/client/src/layout/components/Sidebar/FixiOSBug.js create mode 100644 admin/client/src/layout/components/Sidebar/Item.vue create mode 100644 admin/client/src/layout/components/Sidebar/Link.vue create mode 100644 admin/client/src/layout/components/Sidebar/Logo.vue create mode 100644 admin/client/src/layout/components/Sidebar/SidebarItem.vue create mode 100644 admin/client/src/layout/components/Sidebar/index.vue create mode 100644 admin/client/src/layout/components/index.js create mode 100644 admin/client/src/layout/index.vue create mode 100644 admin/client/src/layout/mixin/ResizeHandler.js create mode 100644 admin/client/src/main.js create mode 100644 admin/client/src/permission.js create mode 100644 admin/client/src/router/index.js create mode 100644 admin/client/src/settings.js create mode 100644 admin/client/src/store/getters.js create mode 100644 admin/client/src/store/index.js create mode 100644 admin/client/src/store/modules/app.js create mode 100644 admin/client/src/store/modules/permission.js create mode 100644 admin/client/src/store/modules/settings.js create mode 100644 admin/client/src/store/modules/user.js create mode 100644 admin/client/src/styles/element-ui.scss create mode 100644 admin/client/src/styles/index.scss create mode 100644 admin/client/src/styles/mixin.scss create mode 100644 admin/client/src/styles/sidebar.scss create mode 100644 admin/client/src/styles/transition.scss create mode 100644 admin/client/src/styles/variables.scss create mode 100644 admin/client/src/utils/auth.js create mode 100644 admin/client/src/utils/get-page-title.js create mode 100644 admin/client/src/utils/index.js create mode 100644 admin/client/src/utils/permission.js create mode 100644 admin/client/src/utils/request.js create mode 100644 admin/client/src/utils/scroll-to.js create mode 100644 admin/client/src/utils/validate.js create mode 100644 admin/client/src/vendor/Export2Excel.js create mode 100644 admin/client/src/vendor/Export2Zip.js create mode 100644 admin/client/src/views/404.vue create mode 100644 admin/client/src/views/crm/banner.vue create mode 100644 admin/client/src/views/crm/category.vue create mode 100644 admin/client/src/views/crm/coupon.vue create mode 100644 admin/client/src/views/crm/honor.vue create mode 100644 admin/client/src/views/crm/index.vue create mode 100644 admin/client/src/views/crm/issued_coupon.vue create mode 100644 admin/client/src/views/crm/project.vue create mode 100644 admin/client/src/views/crm/showcase.vue create mode 100644 admin/client/src/views/crm/student.vue create mode 100644 admin/client/src/views/crm/teacher.vue create mode 100644 admin/client/src/views/dashboard/components/BarChart.vue create mode 100644 admin/client/src/views/dashboard/components/LineChart.vue create mode 100644 admin/client/src/views/dashboard/components/PanelGroup.vue create mode 100644 admin/client/src/views/dashboard/components/PieChart.vue create mode 100644 admin/client/src/views/dashboard/index.vue create mode 100644 admin/client/src/views/dashboard/mixins/resize.js create mode 100644 admin/client/src/views/form/index.vue create mode 100644 admin/client/src/views/login/index.vue create mode 100644 admin/client/src/views/monitor/service.vue create mode 100644 admin/client/src/views/nested/menu1/index.vue create mode 100644 admin/client/src/views/nested/menu1/menu1-1/index.vue create mode 100644 admin/client/src/views/nested/menu1/menu1-2/index.vue create mode 100644 admin/client/src/views/nested/menu1/menu1-2/menu1-2-1/index.vue create mode 100644 admin/client/src/views/nested/menu1/menu1-2/menu1-2-2/index.vue create mode 100644 admin/client/src/views/nested/menu1/menu1-3/index.vue create mode 100644 admin/client/src/views/nested/menu2/index.vue create mode 100644 admin/client/src/views/system/changepassword.vue create mode 100644 admin/client/src/views/system/dict.vue create mode 100644 admin/client/src/views/system/file.vue create mode 100644 admin/client/src/views/system/organization.vue create mode 100644 admin/client/src/views/system/perm.vue create mode 100644 admin/client/src/views/system/position.vue create mode 100644 admin/client/src/views/system/role.vue create mode 100644 admin/client/src/views/system/task.vue create mode 100644 admin/client/src/views/system/user.vue create mode 100644 admin/client/src/views/table/index.vue create mode 100644 admin/client/src/views/tree/index.vue create mode 100644 admin/client/src/views/workflow/configuration.vue create mode 100644 admin/client/src/views/workflow/customfield.vue create mode 100644 admin/client/src/views/workflow/index.vue create mode 100644 admin/client/src/views/workflow/state.vue create mode 100644 admin/client/src/views/workflow/test.vue create mode 100644 admin/client/src/views/workflow/ticket.vue create mode 100644 admin/client/src/views/workflow/ticketDetail.vue create mode 100644 admin/client/src/views/workflow/ticketHandle.vue create mode 100644 admin/client/src/views/workflow/transitions.vue create mode 100644 admin/client/src/views/workflow/workFlowTickets.vue create mode 100644 admin/client/tests/unit/.eslintrc.js create mode 100644 admin/client/tests/unit/components/Breadcrumb.spec.js create mode 100644 admin/client/tests/unit/components/Hamburger.spec.js create mode 100644 admin/client/tests/unit/components/SvgIcon.spec.js create mode 100644 admin/client/tests/unit/utils/formatTime.spec.js create mode 100644 admin/client/tests/unit/utils/parseTime.spec.js create mode 100644 admin/client/tests/unit/utils/validate.spec.js create mode 100644 admin/client/vue.config.js create mode 100644 admin/docker-compose.yml create mode 100644 admin/img/dict.png create mode 100644 admin/img/docs.png create mode 100644 admin/img/task.png create mode 100644 admin/img/ticket.png create mode 100644 admin/img/user.png create mode 100644 admin/server/.gitignore create mode 100644 admin/server/Dockerfile create mode 100644 admin/server/apps/crm/__init__.py create mode 100644 admin/server/apps/crm/admin.py create mode 100644 admin/server/apps/crm/apps.py create mode 100644 admin/server/apps/crm/authentication.py create mode 100644 admin/server/apps/crm/management/__init__.py create mode 100644 admin/server/apps/crm/management/commands/__init__.py create mode 100644 admin/server/apps/crm/management/commands/init_crm_data.py create mode 100644 admin/server/apps/crm/management/commands/populate_degree_ceremony.py create mode 100644 admin/server/apps/crm/management/commands/populate_mock_data.py create mode 100644 admin/server/apps/crm/migrations/0001_initial.py create mode 100644 admin/server/apps/crm/migrations/0002_project_detail.py create mode 100644 admin/server/apps/crm/migrations/0003_banner_project.py create mode 100644 admin/server/apps/crm/migrations/0004_auto_20251128_1719.py create mode 100644 admin/server/apps/crm/migrations/0005_remove_student_education_student_parent_and_more.py create mode 100644 admin/server/apps/crm/migrations/0006_student_wechat_nickname.py create mode 100644 admin/server/apps/crm/migrations/0007_project_project_type_studentproject.py create mode 100644 admin/server/apps/crm/migrations/0008_teacher_remove_project_category_project_teacher_and_more.py create mode 100644 admin/server/apps/crm/migrations/0009_studenthonor.py create mode 100644 admin/server/apps/crm/migrations/0010_studentshowcase.py create mode 100644 admin/server/apps/crm/migrations/0011_project_price_project_show_price.py create mode 100644 admin/server/apps/crm/migrations/0012_alter_studentcoupon_status.py create mode 100644 admin/server/apps/crm/migrations/0013_student_openid.py create mode 100644 admin/server/apps/crm/migrations/0014_alter_student_phone.py create mode 100644 admin/server/apps/crm/migrations/0015_auto_20251202_1204.py create mode 100644 admin/server/apps/crm/migrations/0016_alter_project_teacher.py create mode 100644 admin/server/apps/crm/migrations/0017_auto_20251202_1422.py create mode 100644 admin/server/apps/crm/migrations/0018_auto_20251202_1430.py create mode 100644 admin/server/apps/crm/migrations/0019_auto_20251202_1443.py create mode 100644 admin/server/apps/crm/migrations/0020_student_teacher.py create mode 100644 admin/server/apps/crm/migrations/0021_alter_studentproject_status.py create mode 100644 admin/server/apps/crm/migrations/0022_auto_20251203_1637.py create mode 100644 admin/server/apps/crm/migrations/0023_auto_20251203_1645.py create mode 100644 admin/server/apps/crm/migrations/0024_project_custom_teacher.py create mode 100644 admin/server/apps/crm/migrations/0025_auto_20251204_1044.py create mode 100644 admin/server/apps/crm/migrations/0026_student_position.py create mode 100644 admin/server/apps/crm/migrations/0027_coupon_is_time_limited.py create mode 100644 admin/server/apps/crm/migrations/__init__.py create mode 100644 admin/server/apps/crm/models.py create mode 100644 admin/server/apps/crm/serializers.py create mode 100644 admin/server/apps/crm/tests.py create mode 100644 admin/server/apps/crm/urls.py create mode 100644 admin/server/apps/crm/views.py create mode 100644 admin/server/apps/monitor/__init__.py create mode 100644 admin/server/apps/monitor/admin.py create mode 100644 admin/server/apps/monitor/apps.py create mode 100644 admin/server/apps/monitor/middleware.py create mode 100644 admin/server/apps/monitor/migrations/__init__.py create mode 100644 admin/server/apps/monitor/models.py create mode 100644 admin/server/apps/monitor/tests.py create mode 100644 admin/server/apps/monitor/urls.py create mode 100644 admin/server/apps/monitor/views.py create mode 100644 admin/server/apps/system/__init__.py create mode 100644 admin/server/apps/system/admin.py create mode 100644 admin/server/apps/system/apps.py create mode 100644 admin/server/apps/system/authentication.py create mode 100644 admin/server/apps/system/filters.py create mode 100644 admin/server/apps/system/migrations/0001_initial.py create mode 100644 admin/server/apps/system/migrations/0002_auto_20210718_0918.py create mode 100644 admin/server/apps/system/migrations/0003_auto_20220227_1732.py create mode 100644 admin/server/apps/system/migrations/0004_auto_20251128_1413.py create mode 100644 admin/server/apps/system/migrations/0005_alter_historicaldict_options_alter_file_create_by_and_more.py create mode 100644 admin/server/apps/system/migrations/0006_auto_20251202_1204.py create mode 100644 admin/server/apps/system/migrations/__init__.py create mode 100644 admin/server/apps/system/mixins.py create mode 100644 admin/server/apps/system/models.py create mode 100644 admin/server/apps/system/permission.py create mode 100644 admin/server/apps/system/permission_data.py create mode 100644 admin/server/apps/system/serializers.py create mode 100644 admin/server/apps/system/signals.py create mode 100644 admin/server/apps/system/tasks.py create mode 100644 admin/server/apps/system/tests.py create mode 100644 admin/server/apps/system/urls.py create mode 100644 admin/server/apps/system/views.py create mode 100644 admin/server/apps/wf/__init__.py create mode 100644 admin/server/apps/wf/admin.py create mode 100644 admin/server/apps/wf/apps.py create mode 100644 admin/server/apps/wf/filters.py create mode 100644 admin/server/apps/wf/migrations/0001_initial.py create mode 100644 admin/server/apps/wf/migrations/__init__.py create mode 100644 admin/server/apps/wf/models.py create mode 100644 admin/server/apps/wf/scripts.py create mode 100644 admin/server/apps/wf/serializers.py create mode 100644 admin/server/apps/wf/services.py create mode 100644 admin/server/apps/wf/tests.py create mode 100644 admin/server/apps/wf/urls.py create mode 100644 admin/server/apps/wf/views.py create mode 100644 admin/server/db.json create mode 100644 admin/server/log/.gitignore create mode 100644 admin/server/manage.py create mode 100644 admin/server/media/default/avatar.png create mode 100644 admin/server/requirements.txt create mode 100644 admin/server/server/__init__.py create mode 100644 admin/server/server/asgi.py create mode 100644 admin/server/server/celery.py create mode 100644 admin/server/server/conf_e.py create mode 100644 admin/server/server/settings.py create mode 100644 admin/server/server/urls.py create mode 100644 admin/server/server/wsgi.py create mode 100644 admin/server/start.sh create mode 100644 admin/server/utils/__init__.py create mode 100644 admin/server/utils/model.py create mode 100644 admin/server/utils/pagination.py create mode 100644 admin/server/utils/queryset.py create mode 100644 admin/server/utils/response.py create mode 100644 admin/server/utils/serializer.py create mode 100644 admin/server/utils/test.py create mode 100644 admin/server/utils/view.py create mode 100644 admin/server/utils/workflow.py create mode 100644 admin/specification.md create mode 100644 create_repo.py create mode 100644 db.sqlite3 create mode 100644 login-logo.png create mode 100644 logo.png create mode 100644 setup_firewall.bat create mode 100644 wechat-mini-program/app.js create mode 100644 wechat-mini-program/app.json create mode 100644 wechat-mini-program/app.wxss create mode 100644 wechat-mini-program/assets/empty-honor.png create mode 100644 wechat-mini-program/assets/icons/coupon-icon.png create mode 100644 wechat-mini-program/assets/icons/profile-icon.png create mode 100644 wechat-mini-program/assets/logo.png create mode 100644 wechat-mini-program/assets/tabbar/coupon-active.png create mode 100644 wechat-mini-program/assets/tabbar/coupon.png create mode 100644 wechat-mini-program/assets/tabbar/home-active.png create mode 100644 wechat-mini-program/assets/tabbar/home-active.svg create mode 100644 wechat-mini-program/assets/tabbar/home.png create mode 100644 wechat-mini-program/assets/tabbar/home.svg create mode 100644 wechat-mini-program/assets/tabbar/project-active.png create mode 100644 wechat-mini-program/assets/tabbar/project-active.svg create mode 100644 wechat-mini-program/assets/tabbar/project.png create mode 100644 wechat-mini-program/assets/tabbar/project.svg create mode 100644 wechat-mini-program/assets/tabbar/user-active.png create mode 100644 wechat-mini-program/assets/tabbar/user-active.svg create mode 100644 wechat-mini-program/assets/tabbar/user.png create mode 100644 wechat-mini-program/assets/tabbar/user.svg create mode 100644 wechat-mini-program/components/mp-html/.eslintignore create mode 100644 wechat-mini-program/components/mp-html/.eslintrc.json create mode 100644 wechat-mini-program/components/mp-html/.github/ISSUE_TEMPLATE/bug.md create mode 100644 wechat-mini-program/components/mp-html/.github/ISSUE_TEMPLATE/enhancement.md create mode 100644 wechat-mini-program/components/mp-html/.github/ISSUE_TEMPLATE/question.md create mode 100644 wechat-mini-program/components/mp-html/.stylelintrc.json create mode 100644 wechat-mini-program/components/mp-html/LICENSE create mode 100644 wechat-mini-program/components/mp-html/README.md create mode 100644 wechat-mini-program/components/mp-html/dist/mp-alipay/index.acss create mode 100644 wechat-mini-program/components/mp-html/dist/mp-alipay/index.axml create mode 100644 wechat-mini-program/components/mp-html/dist/mp-alipay/index.js create mode 100644 wechat-mini-program/components/mp-html/dist/mp-alipay/index.json create mode 100644 wechat-mini-program/components/mp-html/dist/mp-alipay/node/node.acss create mode 100644 wechat-mini-program/components/mp-html/dist/mp-alipay/node/node.axml create mode 100644 wechat-mini-program/components/mp-html/dist/mp-alipay/node/node.js create mode 100644 wechat-mini-program/components/mp-html/dist/mp-alipay/node/node.json create mode 100644 wechat-mini-program/components/mp-html/dist/mp-alipay/parser.js create mode 100644 wechat-mini-program/components/mp-html/dist/mp-baidu/index.css create mode 100644 wechat-mini-program/components/mp-html/dist/mp-baidu/index.js create mode 100644 wechat-mini-program/components/mp-html/dist/mp-baidu/index.json create mode 100644 wechat-mini-program/components/mp-html/dist/mp-baidu/index.swan create mode 100644 wechat-mini-program/components/mp-html/dist/mp-baidu/node/node.css create mode 100644 wechat-mini-program/components/mp-html/dist/mp-baidu/node/node.js create mode 100644 wechat-mini-program/components/mp-html/dist/mp-baidu/node/node.json create mode 100644 wechat-mini-program/components/mp-html/dist/mp-baidu/node/node.swan create mode 100644 wechat-mini-program/components/mp-html/dist/mp-baidu/parser.js create mode 100644 wechat-mini-program/components/mp-html/dist/mp-qq/index.js create mode 100644 wechat-mini-program/components/mp-html/dist/mp-qq/index.json create mode 100644 wechat-mini-program/components/mp-html/dist/mp-qq/index.qml create mode 100644 wechat-mini-program/components/mp-html/dist/mp-qq/index.qss create mode 100644 wechat-mini-program/components/mp-html/dist/mp-qq/node/node.js create mode 100644 wechat-mini-program/components/mp-html/dist/mp-qq/node/node.json create mode 100644 wechat-mini-program/components/mp-html/dist/mp-qq/node/node.qml create mode 100644 wechat-mini-program/components/mp-html/dist/mp-qq/node/node.qss create mode 100644 wechat-mini-program/components/mp-html/dist/mp-qq/parser.js create mode 100644 wechat-mini-program/components/mp-html/dist/mp-toutiao/index.js create mode 100644 wechat-mini-program/components/mp-html/dist/mp-toutiao/index.json create mode 100644 wechat-mini-program/components/mp-html/dist/mp-toutiao/index.ttml create mode 100644 wechat-mini-program/components/mp-html/dist/mp-toutiao/index.ttss create mode 100644 wechat-mini-program/components/mp-html/dist/mp-toutiao/node/node.js create mode 100644 wechat-mini-program/components/mp-html/dist/mp-toutiao/node/node.json create mode 100644 wechat-mini-program/components/mp-html/dist/mp-toutiao/node/node.ttml create mode 100644 wechat-mini-program/components/mp-html/dist/mp-toutiao/node/node.ttss create mode 100644 wechat-mini-program/components/mp-html/dist/mp-toutiao/parser.js create mode 100644 wechat-mini-program/components/mp-html/dist/mp-weixin/index.js create mode 100644 wechat-mini-program/components/mp-html/dist/mp-weixin/index.json create mode 100644 wechat-mini-program/components/mp-html/dist/mp-weixin/index.wxml create mode 100644 wechat-mini-program/components/mp-html/dist/mp-weixin/index.wxss create mode 100644 wechat-mini-program/components/mp-html/dist/mp-weixin/node/node.js create mode 100644 wechat-mini-program/components/mp-html/dist/mp-weixin/node/node.json create mode 100644 wechat-mini-program/components/mp-html/dist/mp-weixin/node/node.wxml create mode 100644 wechat-mini-program/components/mp-html/dist/mp-weixin/node/node.wxss create mode 100644 wechat-mini-program/components/mp-html/dist/mp-weixin/parser.js create mode 100644 wechat-mini-program/components/mp-html/dist/uni-app/components/mp-html/mp-html.vue create mode 100644 wechat-mini-program/components/mp-html/dist/uni-app/components/mp-html/node/node.vue create mode 100644 wechat-mini-program/components/mp-html/dist/uni-app/components/mp-html/parser.js create mode 100644 wechat-mini-program/components/mp-html/dist/uni-app/static/app-plus/mp-html/js/handler.js create mode 100644 wechat-mini-program/components/mp-html/dist/uni-app/static/app-plus/mp-html/js/uni.webview.min.js create mode 100644 wechat-mini-program/components/mp-html/dist/uni-app/static/app-plus/mp-html/local.html create mode 100644 wechat-mini-program/components/mp-html/docs/.nojekyll create mode 100644 wechat-mini-program/components/mp-html/docs/README.md create mode 100644 wechat-mini-program/components/mp-html/docs/_coverpage.md create mode 100644 wechat-mini-program/components/mp-html/docs/_sidebar.md create mode 100644 wechat-mini-program/components/mp-html/docs/advanced/api.md create mode 100644 wechat-mini-program/components/mp-html/docs/advanced/develop.md create mode 100644 wechat-mini-program/components/mp-html/docs/advanced/plugin.md create mode 100644 wechat-mini-program/components/mp-html/docs/assets/case/365刷题.jpg create mode 100644 wechat-mini-program/components/mp-html/docs/assets/case/AI瓦力.jpg create mode 100644 wechat-mini-program/components/mp-html/docs/assets/case/MiniProgram模版演示.jpg create mode 100644 wechat-mini-program/components/mp-html/docs/assets/case/优秀笔记.jpg create mode 100644 wechat-mini-program/components/mp-html/docs/assets/case/你的代码写的真棒.jpg create mode 100644 wechat-mini-program/components/mp-html/docs/assets/case/典典博客.jpg create mode 100644 wechat-mini-program/components/mp-html/docs/assets/case/古典文学名著阅读.jpg create mode 100644 wechat-mini-program/components/mp-html/docs/assets/case/同城共享书.jpg create mode 100644 wechat-mini-program/components/mp-html/docs/assets/case/多么生活.jpg create mode 100644 wechat-mini-program/components/mp-html/docs/assets/case/富文本插件.jpg create mode 100644 wechat-mini-program/components/mp-html/docs/assets/case/小莫唐尼.png create mode 100644 wechat-mini-program/components/mp-html/docs/assets/case/微慕.jpg create mode 100644 wechat-mini-program/components/mp-html/docs/assets/case/技术源share.jpg create mode 100644 wechat-mini-program/components/mp-html/docs/assets/case/欢喜商城.png create mode 100644 wechat-mini-program/components/mp-html/docs/assets/case/科学复习.png create mode 100644 wechat-mini-program/components/mp-html/docs/assets/case/程序员技术之旅.jpg create mode 100644 wechat-mini-program/components/mp-html/docs/assets/case/谛否.jpg create mode 100644 wechat-mini-program/components/mp-html/docs/assets/case/食法查.png create mode 100644 wechat-mini-program/components/mp-html/docs/assets/group.jpg create mode 100644 wechat-mini-program/components/mp-html/docs/assets/logo/logo.ico create mode 100644 wechat-mini-program/components/mp-html/docs/assets/logo/logo.png create mode 100644 wechat-mini-program/components/mp-html/docs/assets/plugin/card.png create mode 100644 wechat-mini-program/components/mp-html/docs/assets/sponsor.png create mode 100644 wechat-mini-program/components/mp-html/docs/assets/tutorials/01.png create mode 100644 wechat-mini-program/components/mp-html/docs/assets/tutorials/02.png create mode 100644 wechat-mini-program/components/mp-html/docs/assets/tutorials/03.png create mode 100644 wechat-mini-program/components/mp-html/docs/assets/tutorials/04.png create mode 100644 wechat-mini-program/components/mp-html/docs/basic/event.md create mode 100644 wechat-mini-program/components/mp-html/docs/basic/prop.md create mode 100644 wechat-mini-program/components/mp-html/docs/changelog/changelog.md create mode 100644 wechat-mini-program/components/mp-html/docs/index.html create mode 100644 wechat-mini-program/components/mp-html/docs/lib/docsify.min.js create mode 100644 wechat-mini-program/components/mp-html/docs/lib/prism-bash.min.js create mode 100644 wechat-mini-program/components/mp-html/docs/lib/search.min.js create mode 100644 wechat-mini-program/components/mp-html/docs/lib/vue.css create mode 100644 wechat-mini-program/components/mp-html/docs/overview/feature.md create mode 100644 wechat-mini-program/components/mp-html/docs/overview/quickstart.md create mode 100644 wechat-mini-program/components/mp-html/docs/question/contribution.md create mode 100644 wechat-mini-program/components/mp-html/docs/question/faq.md create mode 100644 wechat-mini-program/components/mp-html/docs/question/feedback.md create mode 100644 wechat-mini-program/components/mp-html/gulpfile.js create mode 100644 wechat-mini-program/components/mp-html/lint.js create mode 100644 wechat-mini-program/components/mp-html/package.json create mode 100644 wechat-mini-program/components/mp-html/plugins/README.md create mode 100644 wechat-mini-program/components/mp-html/plugins/audio/README.md create mode 100644 wechat-mini-program/components/mp-html/plugins/audio/build.js create mode 100644 wechat-mini-program/components/mp-html/plugins/audio/context.js create mode 100644 wechat-mini-program/components/mp-html/plugins/audio/index.js create mode 100644 wechat-mini-program/components/mp-html/plugins/audio/miniprogram/audio.js create mode 100644 wechat-mini-program/components/mp-html/plugins/audio/miniprogram/audio.json create mode 100644 wechat-mini-program/components/mp-html/plugins/audio/miniprogram/audio.wxml create mode 100644 wechat-mini-program/components/mp-html/plugins/audio/miniprogram/audio.wxss create mode 100644 wechat-mini-program/components/mp-html/plugins/audio/miniprogram/build.js create mode 100644 wechat-mini-program/components/mp-html/plugins/audio/uni-app/audio.vue create mode 100644 wechat-mini-program/components/mp-html/plugins/audio/uni-app/build.js create mode 100644 wechat-mini-program/components/mp-html/plugins/card/README.md create mode 100644 wechat-mini-program/components/mp-html/plugins/card/build.js create mode 100644 wechat-mini-program/components/mp-html/plugins/card/index.js create mode 100644 wechat-mini-program/components/mp-html/plugins/card/miniprogram/build.js create mode 100644 wechat-mini-program/components/mp-html/plugins/card/miniprogram/card.js create mode 100644 wechat-mini-program/components/mp-html/plugins/card/miniprogram/card.json create mode 100644 wechat-mini-program/components/mp-html/plugins/card/miniprogram/card.wxml create mode 100644 wechat-mini-program/components/mp-html/plugins/card/miniprogram/card.wxss create mode 100644 wechat-mini-program/components/mp-html/plugins/card/uni-app/build.js create mode 100644 wechat-mini-program/components/mp-html/plugins/card/uni-app/card.vue create mode 100644 wechat-mini-program/components/mp-html/plugins/editable/README.md create mode 100644 wechat-mini-program/components/mp-html/plugins/editable/config.js create mode 100644 wechat-mini-program/components/mp-html/plugins/editable/miniprogram/build.js create mode 100644 wechat-mini-program/components/mp-html/plugins/editable/miniprogram/index.js create mode 100644 wechat-mini-program/components/mp-html/plugins/editable/uni-app/build.js create mode 100644 wechat-mini-program/components/mp-html/plugins/editable/uni-app/index.js create mode 100644 wechat-mini-program/components/mp-html/plugins/emoji/README.md create mode 100644 wechat-mini-program/components/mp-html/plugins/emoji/index.js create mode 100644 wechat-mini-program/components/mp-html/plugins/highlight/README.md create mode 100644 wechat-mini-program/components/mp-html/plugins/highlight/config.js create mode 100644 wechat-mini-program/components/mp-html/plugins/highlight/index.js create mode 100644 wechat-mini-program/components/mp-html/plugins/highlight/miniprogram/build.js create mode 100644 wechat-mini-program/components/mp-html/plugins/highlight/prism.css create mode 100644 wechat-mini-program/components/mp-html/plugins/highlight/prism.min.js create mode 100644 wechat-mini-program/components/mp-html/plugins/highlight/uni-app/build.js create mode 100644 wechat-mini-program/components/mp-html/plugins/img-cache/README.md create mode 100644 wechat-mini-program/components/mp-html/plugins/img-cache/build.js create mode 100644 wechat-mini-program/components/mp-html/plugins/img-cache/index.js create mode 100644 wechat-mini-program/components/mp-html/plugins/latex/README.md create mode 100644 wechat-mini-program/components/mp-html/plugins/latex/build.js create mode 100644 wechat-mini-program/components/mp-html/plugins/latex/index.js create mode 100644 wechat-mini-program/components/mp-html/plugins/latex/katex.css create mode 100644 wechat-mini-program/components/mp-html/plugins/latex/katex.min.js create mode 100644 wechat-mini-program/components/mp-html/plugins/markdown/README.md create mode 100644 wechat-mini-program/components/mp-html/plugins/markdown/index.js create mode 100644 wechat-mini-program/components/mp-html/plugins/markdown/marked.min.js create mode 100644 wechat-mini-program/components/mp-html/plugins/markdown/miniprogram/build.js create mode 100644 wechat-mini-program/components/mp-html/plugins/markdown/uni-app/build.js create mode 100644 wechat-mini-program/components/mp-html/plugins/search/README.md create mode 100644 wechat-mini-program/components/mp-html/plugins/search/miniprogram/index.js create mode 100644 wechat-mini-program/components/mp-html/plugins/search/uni-app/index.js create mode 100644 wechat-mini-program/components/mp-html/plugins/style/README.md create mode 100644 wechat-mini-program/components/mp-html/plugins/style/index.js create mode 100644 wechat-mini-program/components/mp-html/plugins/style/parser.js create mode 100644 wechat-mini-program/components/mp-html/plugins/template/README.md create mode 100644 wechat-mini-program/components/mp-html/plugins/template/build.js create mode 100644 wechat-mini-program/components/mp-html/plugins/template/index.js create mode 100644 wechat-mini-program/components/mp-html/plugins/txv-video/README.md create mode 100644 wechat-mini-program/components/mp-html/plugins/txv-video/build.js create mode 100644 wechat-mini-program/components/mp-html/plugins/txv-video/index.js create mode 100644 wechat-mini-program/components/mp-html/plugins/txv-video/miniprogram/build.js create mode 100644 wechat-mini-program/components/mp-html/plugins/txv-video/uni-app/build.js create mode 100644 wechat-mini-program/components/mp-html/src/miniprogram/index.js create mode 100644 wechat-mini-program/components/mp-html/src/miniprogram/index.json create mode 100644 wechat-mini-program/components/mp-html/src/miniprogram/index.wxml create mode 100644 wechat-mini-program/components/mp-html/src/miniprogram/index.wxss create mode 100644 wechat-mini-program/components/mp-html/src/miniprogram/node/node.js create mode 100644 wechat-mini-program/components/mp-html/src/miniprogram/node/node.json create mode 100644 wechat-mini-program/components/mp-html/src/miniprogram/node/node.wxml create mode 100644 wechat-mini-program/components/mp-html/src/miniprogram/node/node.wxss create mode 100644 wechat-mini-program/components/mp-html/src/miniprogram/parser.js create mode 100644 wechat-mini-program/components/mp-html/src/uni-app/components/mp-html/mp-html.vue create mode 100644 wechat-mini-program/components/mp-html/src/uni-app/components/mp-html/node/node.vue create mode 100644 wechat-mini-program/components/mp-html/src/uni-app/components/mp-html/parser.js create mode 100644 wechat-mini-program/components/mp-html/src/uni-app/static/app-plus/mp-html/js/handler.js create mode 100644 wechat-mini-program/components/mp-html/src/uni-app/static/app-plus/mp-html/js/uni.webview.min.js create mode 100644 wechat-mini-program/components/mp-html/src/uni-app/static/app-plus/mp-html/local.html create mode 100644 wechat-mini-program/components/mp-html/test/content.js create mode 100644 wechat-mini-program/components/mp-html/test/test.js create mode 100644 wechat-mini-program/config/env.js create mode 100644 wechat-mini-program/images/tabbar/coupon-active.png create mode 100644 wechat-mini-program/images/tabbar/coupon.png create mode 100644 wechat-mini-program/images/tabbar/home-active.png create mode 100644 wechat-mini-program/images/tabbar/home.png create mode 100644 wechat-mini-program/images/tabbar/user-active.png create mode 100644 wechat-mini-program/images/tabbar/user.png create mode 100644 wechat-mini-program/node_modules/.package-lock.json create mode 100644 wechat-mini-program/node_modules/mp-html/.eslintignore create mode 100644 wechat-mini-program/node_modules/mp-html/.eslintrc.json create mode 100644 wechat-mini-program/node_modules/mp-html/.github/ISSUE_TEMPLATE/bug.md create mode 100644 wechat-mini-program/node_modules/mp-html/.github/ISSUE_TEMPLATE/enhancement.md create mode 100644 wechat-mini-program/node_modules/mp-html/.github/ISSUE_TEMPLATE/question.md create mode 100644 wechat-mini-program/node_modules/mp-html/.stylelintrc.json create mode 100644 wechat-mini-program/node_modules/mp-html/LICENSE create mode 100644 wechat-mini-program/node_modules/mp-html/README.md create mode 100644 wechat-mini-program/node_modules/mp-html/dist/mp-alipay/index.acss create mode 100644 wechat-mini-program/node_modules/mp-html/dist/mp-alipay/index.axml create mode 100644 wechat-mini-program/node_modules/mp-html/dist/mp-alipay/index.js create mode 100644 wechat-mini-program/node_modules/mp-html/dist/mp-alipay/index.json create mode 100644 wechat-mini-program/node_modules/mp-html/dist/mp-alipay/node/node.acss create mode 100644 wechat-mini-program/node_modules/mp-html/dist/mp-alipay/node/node.axml create mode 100644 wechat-mini-program/node_modules/mp-html/dist/mp-alipay/node/node.js create mode 100644 wechat-mini-program/node_modules/mp-html/dist/mp-alipay/node/node.json create mode 100644 wechat-mini-program/node_modules/mp-html/dist/mp-alipay/parser.js create mode 100644 wechat-mini-program/node_modules/mp-html/dist/mp-baidu/index.css create mode 100644 wechat-mini-program/node_modules/mp-html/dist/mp-baidu/index.js create mode 100644 wechat-mini-program/node_modules/mp-html/dist/mp-baidu/index.json create mode 100644 wechat-mini-program/node_modules/mp-html/dist/mp-baidu/index.swan create mode 100644 wechat-mini-program/node_modules/mp-html/dist/mp-baidu/node/node.css create mode 100644 wechat-mini-program/node_modules/mp-html/dist/mp-baidu/node/node.js create mode 100644 wechat-mini-program/node_modules/mp-html/dist/mp-baidu/node/node.json create mode 100644 wechat-mini-program/node_modules/mp-html/dist/mp-baidu/node/node.swan create mode 100644 wechat-mini-program/node_modules/mp-html/dist/mp-baidu/parser.js create mode 100644 wechat-mini-program/node_modules/mp-html/dist/mp-qq/index.js create mode 100644 wechat-mini-program/node_modules/mp-html/dist/mp-qq/index.json create mode 100644 wechat-mini-program/node_modules/mp-html/dist/mp-qq/index.qml create mode 100644 wechat-mini-program/node_modules/mp-html/dist/mp-qq/index.qss create mode 100644 wechat-mini-program/node_modules/mp-html/dist/mp-qq/node/node.js create mode 100644 wechat-mini-program/node_modules/mp-html/dist/mp-qq/node/node.json create mode 100644 wechat-mini-program/node_modules/mp-html/dist/mp-qq/node/node.qml create mode 100644 wechat-mini-program/node_modules/mp-html/dist/mp-qq/node/node.qss create mode 100644 wechat-mini-program/node_modules/mp-html/dist/mp-qq/parser.js create mode 100644 wechat-mini-program/node_modules/mp-html/dist/mp-toutiao/index.js create mode 100644 wechat-mini-program/node_modules/mp-html/dist/mp-toutiao/index.json create mode 100644 wechat-mini-program/node_modules/mp-html/dist/mp-toutiao/index.ttml create mode 100644 wechat-mini-program/node_modules/mp-html/dist/mp-toutiao/index.ttss create mode 100644 wechat-mini-program/node_modules/mp-html/dist/mp-toutiao/node/node.js create mode 100644 wechat-mini-program/node_modules/mp-html/dist/mp-toutiao/node/node.json create mode 100644 wechat-mini-program/node_modules/mp-html/dist/mp-toutiao/node/node.ttml create mode 100644 wechat-mini-program/node_modules/mp-html/dist/mp-toutiao/node/node.ttss create mode 100644 wechat-mini-program/node_modules/mp-html/dist/mp-toutiao/parser.js create mode 100644 wechat-mini-program/node_modules/mp-html/dist/mp-weixin/index.js create mode 100644 wechat-mini-program/node_modules/mp-html/dist/mp-weixin/index.json create mode 100644 wechat-mini-program/node_modules/mp-html/dist/mp-weixin/index.wxml create mode 100644 wechat-mini-program/node_modules/mp-html/dist/mp-weixin/index.wxss create mode 100644 wechat-mini-program/node_modules/mp-html/dist/mp-weixin/node/node.js create mode 100644 wechat-mini-program/node_modules/mp-html/dist/mp-weixin/node/node.json create mode 100644 wechat-mini-program/node_modules/mp-html/dist/mp-weixin/node/node.wxml create mode 100644 wechat-mini-program/node_modules/mp-html/dist/mp-weixin/node/node.wxss create mode 100644 wechat-mini-program/node_modules/mp-html/dist/mp-weixin/parser.js create mode 100644 wechat-mini-program/node_modules/mp-html/dist/uni-app/components/mp-html/mp-html.vue create mode 100644 wechat-mini-program/node_modules/mp-html/dist/uni-app/components/mp-html/node/node.vue create mode 100644 wechat-mini-program/node_modules/mp-html/dist/uni-app/components/mp-html/parser.js create mode 100644 wechat-mini-program/node_modules/mp-html/dist/uni-app/static/app-plus/mp-html/js/handler.js create mode 100644 wechat-mini-program/node_modules/mp-html/dist/uni-app/static/app-plus/mp-html/js/uni.webview.min.js create mode 100644 wechat-mini-program/node_modules/mp-html/dist/uni-app/static/app-plus/mp-html/local.html create mode 100644 wechat-mini-program/node_modules/mp-html/docs/.nojekyll create mode 100644 wechat-mini-program/node_modules/mp-html/docs/README.md create mode 100644 wechat-mini-program/node_modules/mp-html/docs/_coverpage.md create mode 100644 wechat-mini-program/node_modules/mp-html/docs/_sidebar.md create mode 100644 wechat-mini-program/node_modules/mp-html/docs/advanced/api.md create mode 100644 wechat-mini-program/node_modules/mp-html/docs/advanced/develop.md create mode 100644 wechat-mini-program/node_modules/mp-html/docs/advanced/plugin.md create mode 100644 wechat-mini-program/node_modules/mp-html/docs/assets/case/365刷题.jpg create mode 100644 wechat-mini-program/node_modules/mp-html/docs/assets/case/AI瓦力.jpg create mode 100644 wechat-mini-program/node_modules/mp-html/docs/assets/case/MiniProgram模版演示.jpg create mode 100644 wechat-mini-program/node_modules/mp-html/docs/assets/case/优秀笔记.jpg create mode 100644 wechat-mini-program/node_modules/mp-html/docs/assets/case/你的代码写的真棒.jpg create mode 100644 wechat-mini-program/node_modules/mp-html/docs/assets/case/典典博客.jpg create mode 100644 wechat-mini-program/node_modules/mp-html/docs/assets/case/古典文学名著阅读.jpg create mode 100644 wechat-mini-program/node_modules/mp-html/docs/assets/case/同城共享书.jpg create mode 100644 wechat-mini-program/node_modules/mp-html/docs/assets/case/多么生活.jpg create mode 100644 wechat-mini-program/node_modules/mp-html/docs/assets/case/富文本插件.jpg create mode 100644 wechat-mini-program/node_modules/mp-html/docs/assets/case/小莫唐尼.png create mode 100644 wechat-mini-program/node_modules/mp-html/docs/assets/case/微慕.jpg create mode 100644 wechat-mini-program/node_modules/mp-html/docs/assets/case/技术源share.jpg create mode 100644 wechat-mini-program/node_modules/mp-html/docs/assets/case/欢喜商城.png create mode 100644 wechat-mini-program/node_modules/mp-html/docs/assets/case/科学复习.png create mode 100644 wechat-mini-program/node_modules/mp-html/docs/assets/case/程序员技术之旅.jpg create mode 100644 wechat-mini-program/node_modules/mp-html/docs/assets/case/谛否.jpg create mode 100644 wechat-mini-program/node_modules/mp-html/docs/assets/case/食法查.png create mode 100644 wechat-mini-program/node_modules/mp-html/docs/assets/group.jpg create mode 100644 wechat-mini-program/node_modules/mp-html/docs/assets/logo/logo.ico create mode 100644 wechat-mini-program/node_modules/mp-html/docs/assets/logo/logo.png create mode 100644 wechat-mini-program/node_modules/mp-html/docs/assets/plugin/card.png create mode 100644 wechat-mini-program/node_modules/mp-html/docs/assets/sponsor.png create mode 100644 wechat-mini-program/node_modules/mp-html/docs/assets/tutorials/01.png create mode 100644 wechat-mini-program/node_modules/mp-html/docs/assets/tutorials/02.png create mode 100644 wechat-mini-program/node_modules/mp-html/docs/assets/tutorials/03.png create mode 100644 wechat-mini-program/node_modules/mp-html/docs/assets/tutorials/04.png create mode 100644 wechat-mini-program/node_modules/mp-html/docs/basic/event.md create mode 100644 wechat-mini-program/node_modules/mp-html/docs/basic/prop.md create mode 100644 wechat-mini-program/node_modules/mp-html/docs/changelog/changelog.md create mode 100644 wechat-mini-program/node_modules/mp-html/docs/index.html create mode 100644 wechat-mini-program/node_modules/mp-html/docs/lib/docsify.min.js create mode 100644 wechat-mini-program/node_modules/mp-html/docs/lib/prism-bash.min.js create mode 100644 wechat-mini-program/node_modules/mp-html/docs/lib/search.min.js create mode 100644 wechat-mini-program/node_modules/mp-html/docs/lib/vue.css create mode 100644 wechat-mini-program/node_modules/mp-html/docs/overview/feature.md create mode 100644 wechat-mini-program/node_modules/mp-html/docs/overview/quickstart.md create mode 100644 wechat-mini-program/node_modules/mp-html/docs/question/contribution.md create mode 100644 wechat-mini-program/node_modules/mp-html/docs/question/faq.md create mode 100644 wechat-mini-program/node_modules/mp-html/docs/question/feedback.md create mode 100644 wechat-mini-program/node_modules/mp-html/gulpfile.js create mode 100644 wechat-mini-program/node_modules/mp-html/lint.js create mode 100644 wechat-mini-program/node_modules/mp-html/package.json create mode 100644 wechat-mini-program/node_modules/mp-html/plugins/README.md create mode 100644 wechat-mini-program/node_modules/mp-html/plugins/audio/README.md create mode 100644 wechat-mini-program/node_modules/mp-html/plugins/audio/build.js create mode 100644 wechat-mini-program/node_modules/mp-html/plugins/audio/context.js create mode 100644 wechat-mini-program/node_modules/mp-html/plugins/audio/index.js create mode 100644 wechat-mini-program/node_modules/mp-html/plugins/audio/miniprogram/audio.js create mode 100644 wechat-mini-program/node_modules/mp-html/plugins/audio/miniprogram/audio.json create mode 100644 wechat-mini-program/node_modules/mp-html/plugins/audio/miniprogram/audio.wxml create mode 100644 wechat-mini-program/node_modules/mp-html/plugins/audio/miniprogram/audio.wxss create mode 100644 wechat-mini-program/node_modules/mp-html/plugins/audio/miniprogram/build.js create mode 100644 wechat-mini-program/node_modules/mp-html/plugins/audio/uni-app/audio.vue create mode 100644 wechat-mini-program/node_modules/mp-html/plugins/audio/uni-app/build.js create mode 100644 wechat-mini-program/node_modules/mp-html/plugins/card/README.md create mode 100644 wechat-mini-program/node_modules/mp-html/plugins/card/build.js create mode 100644 wechat-mini-program/node_modules/mp-html/plugins/card/index.js create mode 100644 wechat-mini-program/node_modules/mp-html/plugins/card/miniprogram/build.js create mode 100644 wechat-mini-program/node_modules/mp-html/plugins/card/miniprogram/card.js create mode 100644 wechat-mini-program/node_modules/mp-html/plugins/card/miniprogram/card.json create mode 100644 wechat-mini-program/node_modules/mp-html/plugins/card/miniprogram/card.wxml create mode 100644 wechat-mini-program/node_modules/mp-html/plugins/card/miniprogram/card.wxss create mode 100644 wechat-mini-program/node_modules/mp-html/plugins/card/uni-app/build.js create mode 100644 wechat-mini-program/node_modules/mp-html/plugins/card/uni-app/card.vue create mode 100644 wechat-mini-program/node_modules/mp-html/plugins/editable/README.md create mode 100644 wechat-mini-program/node_modules/mp-html/plugins/editable/config.js create mode 100644 wechat-mini-program/node_modules/mp-html/plugins/editable/miniprogram/build.js create mode 100644 wechat-mini-program/node_modules/mp-html/plugins/editable/miniprogram/index.js create mode 100644 wechat-mini-program/node_modules/mp-html/plugins/editable/uni-app/build.js create mode 100644 wechat-mini-program/node_modules/mp-html/plugins/editable/uni-app/index.js create mode 100644 wechat-mini-program/node_modules/mp-html/plugins/emoji/README.md create mode 100644 wechat-mini-program/node_modules/mp-html/plugins/emoji/index.js create mode 100644 wechat-mini-program/node_modules/mp-html/plugins/highlight/README.md create mode 100644 wechat-mini-program/node_modules/mp-html/plugins/highlight/config.js create mode 100644 wechat-mini-program/node_modules/mp-html/plugins/highlight/index.js create mode 100644 wechat-mini-program/node_modules/mp-html/plugins/highlight/miniprogram/build.js create mode 100644 wechat-mini-program/node_modules/mp-html/plugins/highlight/prism.css create mode 100644 wechat-mini-program/node_modules/mp-html/plugins/highlight/prism.min.js create mode 100644 wechat-mini-program/node_modules/mp-html/plugins/highlight/uni-app/build.js create mode 100644 wechat-mini-program/node_modules/mp-html/plugins/img-cache/README.md create mode 100644 wechat-mini-program/node_modules/mp-html/plugins/img-cache/build.js create mode 100644 wechat-mini-program/node_modules/mp-html/plugins/img-cache/index.js create mode 100644 wechat-mini-program/node_modules/mp-html/plugins/latex/README.md create mode 100644 wechat-mini-program/node_modules/mp-html/plugins/latex/build.js create mode 100644 wechat-mini-program/node_modules/mp-html/plugins/latex/index.js create mode 100644 wechat-mini-program/node_modules/mp-html/plugins/latex/katex.css create mode 100644 wechat-mini-program/node_modules/mp-html/plugins/latex/katex.min.js create mode 100644 wechat-mini-program/node_modules/mp-html/plugins/markdown/README.md create mode 100644 wechat-mini-program/node_modules/mp-html/plugins/markdown/index.js create mode 100644 wechat-mini-program/node_modules/mp-html/plugins/markdown/marked.min.js create mode 100644 wechat-mini-program/node_modules/mp-html/plugins/markdown/miniprogram/build.js create mode 100644 wechat-mini-program/node_modules/mp-html/plugins/markdown/uni-app/build.js create mode 100644 wechat-mini-program/node_modules/mp-html/plugins/search/README.md create mode 100644 wechat-mini-program/node_modules/mp-html/plugins/search/miniprogram/index.js create mode 100644 wechat-mini-program/node_modules/mp-html/plugins/search/uni-app/index.js create mode 100644 wechat-mini-program/node_modules/mp-html/plugins/style/README.md create mode 100644 wechat-mini-program/node_modules/mp-html/plugins/style/index.js create mode 100644 wechat-mini-program/node_modules/mp-html/plugins/style/parser.js create mode 100644 wechat-mini-program/node_modules/mp-html/plugins/template/README.md create mode 100644 wechat-mini-program/node_modules/mp-html/plugins/template/build.js create mode 100644 wechat-mini-program/node_modules/mp-html/plugins/template/index.js create mode 100644 wechat-mini-program/node_modules/mp-html/plugins/txv-video/README.md create mode 100644 wechat-mini-program/node_modules/mp-html/plugins/txv-video/build.js create mode 100644 wechat-mini-program/node_modules/mp-html/plugins/txv-video/index.js create mode 100644 wechat-mini-program/node_modules/mp-html/plugins/txv-video/miniprogram/build.js create mode 100644 wechat-mini-program/node_modules/mp-html/plugins/txv-video/uni-app/build.js create mode 100644 wechat-mini-program/node_modules/mp-html/src/miniprogram/index.js create mode 100644 wechat-mini-program/node_modules/mp-html/src/miniprogram/index.json create mode 100644 wechat-mini-program/node_modules/mp-html/src/miniprogram/index.wxml create mode 100644 wechat-mini-program/node_modules/mp-html/src/miniprogram/index.wxss create mode 100644 wechat-mini-program/node_modules/mp-html/src/miniprogram/node/node.js create mode 100644 wechat-mini-program/node_modules/mp-html/src/miniprogram/node/node.json create mode 100644 wechat-mini-program/node_modules/mp-html/src/miniprogram/node/node.wxml create mode 100644 wechat-mini-program/node_modules/mp-html/src/miniprogram/node/node.wxss create mode 100644 wechat-mini-program/node_modules/mp-html/src/miniprogram/parser.js create mode 100644 wechat-mini-program/node_modules/mp-html/src/uni-app/components/mp-html/mp-html.vue create mode 100644 wechat-mini-program/node_modules/mp-html/src/uni-app/components/mp-html/node/node.vue create mode 100644 wechat-mini-program/node_modules/mp-html/src/uni-app/components/mp-html/parser.js create mode 100644 wechat-mini-program/node_modules/mp-html/src/uni-app/static/app-plus/mp-html/js/handler.js create mode 100644 wechat-mini-program/node_modules/mp-html/src/uni-app/static/app-plus/mp-html/js/uni.webview.min.js create mode 100644 wechat-mini-program/node_modules/mp-html/src/uni-app/static/app-plus/mp-html/local.html create mode 100644 wechat-mini-program/node_modules/mp-html/test/content.js create mode 100644 wechat-mini-program/node_modules/mp-html/test/test.js create mode 100644 wechat-mini-program/node_modules/mp-html/tools/config.js create mode 100644 wechat-mini-program/node_modules/mp-html/tools/converter.js create mode 100644 wechat-mini-program/node_modules/mp-html/tools/demo/miniprogram/app.js create mode 100644 wechat-mini-program/node_modules/mp-html/tools/demo/miniprogram/app.json create mode 100644 wechat-mini-program/node_modules/mp-html/tools/demo/miniprogram/pages/index/index.js create mode 100644 wechat-mini-program/node_modules/mp-html/tools/demo/miniprogram/pages/index/index.json create mode 100644 wechat-mini-program/node_modules/mp-html/tools/demo/miniprogram/pages/index/index.wxml create mode 100644 wechat-mini-program/node_modules/mp-html/tools/demo/miniprogram/pages/jump/jump.js create mode 100644 wechat-mini-program/node_modules/mp-html/tools/demo/miniprogram/pages/jump/jump.json create mode 100644 wechat-mini-program/node_modules/mp-html/tools/demo/miniprogram/pages/jump/jump.wxml create mode 100644 wechat-mini-program/node_modules/mp-html/tools/demo/miniprogram/project.config.json create mode 100644 wechat-mini-program/node_modules/mp-html/tools/demo/uni-app/App.vue create mode 100644 wechat-mini-program/node_modules/mp-html/tools/demo/uni-app/README.md create mode 100644 wechat-mini-program/node_modules/mp-html/tools/demo/uni-app/index.html create mode 100644 wechat-mini-program/node_modules/mp-html/tools/demo/uni-app/main.js create mode 100644 wechat-mini-program/node_modules/mp-html/tools/demo/uni-app/manifest.json create mode 100644 wechat-mini-program/node_modules/mp-html/tools/demo/uni-app/pages.json create mode 100644 wechat-mini-program/node_modules/mp-html/tools/demo/uni-app/pages/index/index.vue create mode 100644 wechat-mini-program/node_modules/mp-html/tools/demo/uni-app/pages/jump/jump.vue create mode 100644 wechat-mini-program/node_modules/mp-html/tools/ifdef.js create mode 100644 wechat-mini-program/node_modules/mp-html/tools/minifier.js create mode 100644 wechat-mini-program/node_modules/mp-html/tools/plugin.js create mode 100644 wechat-mini-program/package-lock.json create mode 100644 wechat-mini-program/package.json create mode 100644 wechat-mini-program/pages/coupon/coupon.js create mode 100644 wechat-mini-program/pages/coupon/coupon.json create mode 100644 wechat-mini-program/pages/coupon/coupon.wxml create mode 100644 wechat-mini-program/pages/coupon/coupon.wxss create mode 100644 wechat-mini-program/pages/course/course.js create mode 100644 wechat-mini-program/pages/course/course.json create mode 100644 wechat-mini-program/pages/course/course.wxml create mode 100644 wechat-mini-program/pages/course/course.wxss create mode 100644 wechat-mini-program/pages/detail/detail.js create mode 100644 wechat-mini-program/pages/detail/detail.json create mode 100644 wechat-mini-program/pages/detail/detail.wxml create mode 100644 wechat-mini-program/pages/detail/detail.wxss create mode 100644 wechat-mini-program/pages/index/index.js create mode 100644 wechat-mini-program/pages/index/index.json create mode 100644 wechat-mini-program/pages/index/index.wxml create mode 100644 wechat-mini-program/pages/index/index.wxss create mode 100644 wechat-mini-program/pages/login/login.js create mode 100644 wechat-mini-program/pages/login/login.json create mode 100644 wechat-mini-program/pages/login/login.wxml create mode 100644 wechat-mini-program/pages/login/login.wxss create mode 100644 wechat-mini-program/pages/profile/profile.js create mode 100644 wechat-mini-program/pages/profile/profile.json create mode 100644 wechat-mini-program/pages/profile/profile.wxml create mode 100644 wechat-mini-program/pages/profile/profile.wxss create mode 100644 wechat-mini-program/project.config.json create mode 100644 wechat-mini-program/project.private.config.json create mode 100644 wechat-mini-program/sitemap.json create mode 100644 wechat-mini-program/utils/request.js diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c747d33 --- /dev/null +++ b/.gitignore @@ -0,0 +1,8 @@ +.venv/ +__pycache__/ +*.pyc +.trae/ +.vscode/ +.idea/ +*.log +.env \ No newline at end of file diff --git a/INTERFACE_CONFIG.md b/INTERFACE_CONFIG.md new file mode 100644 index 0000000..461a545 --- /dev/null +++ b/INTERFACE_CONFIG.md @@ -0,0 +1,117 @@ +# 接口地址配置说明文档 + +本文档主要说明 GeminiWX 项目中服务端、管理后台(Web)、微信小程序的接口地址配置方法。 + +## 1. 服务端 (Server) + +服务端基于 Django 开发,主要配置文件位于 `admin/server` 目录。 + +### 核心配置 +- **配置文件路径**: `admin/server/server/settings.py` 和 `admin/server/server/conf_e.py` +- **端口配置**: 默认运行在 `8000` 端口(在 `docker-compose.yml` 或 `manage.py` 启动命令中指定)。 + +### 允许的主机 (Allowed Hosts) +在 `admin/server/server/settings.py` 中: +```python +ALLOWED_HOSTS = ['*'] # 允许所有域名访问,生产环境建议修改为具体域名 +``` + +### 微信 AppID 配置 +为了确保微信登录和支付等功能正常,需要在以下两处保持 `AppID` 一致: +1. **服务端**: `admin/server/server/conf_e.py` + ```python + WECHAT_APP_ID = 'wx2d9b9759137ef46b' # 示例 AppID + WECHAT_APP_SECRET = '...' + ``` +2. **小程序**: `wechat-mini-program/project.config.json` + ```json + { + "appid": "wx2d9b9759137ef46b", + ... + } + ``` + +### 数据库与密钥配置 +在 `admin/server/server/conf_e.py` 中配置数据库连接信息。 + +--- + +## 2. 管理后台 Web (Admin Client) + +管理后台基于 Vue.js 开发,位于 `admin/client` 目录。 + +### 开发环境 (Development) +- **配置文件**: `admin/client/.env.development` +- **配置项**: + ```properties + VUE_APP_BASE_API = '/api' + ``` +- **代理配置**: `admin/client/vue.config.js` + 开发环境下,`/api` 开头的请求会被代理到本地服务端: + ```javascript + proxy: { + '/api': { + target: 'http://192.168.5.81:8000', // 目标服务器地址 + changeOrigin: true + } + } + ``` + +### 预发布环境 (Staging) +- **配置文件**: `admin/client/.env.staging` +- **配置项**: + ```properties + VUE_APP_BASE_API = '/stage-api' + ``` +- **构建**: 运行 `npm run build:stage`(假设 `package.json` 中有对应 script,通常为 `vue-cli-service build --mode staging`)。 + +### 生产环境 (Production) +- **配置文件**: `admin/client/.env.production` +- **配置项**: + ```properties + VUE_APP_BASE_API = '/api' + ``` +- **构建**: 运行 `npm run build:prod` 后,生成的静态文件位于 `admin/server/dist` (配置于 `vue.config.js` 的 `outputDir`)。 + +--- + +## 3. 微信小程序 (WeChat Mini Program) + +微信小程序代码位于 `wechat-mini-program` 目录。 + +### 接口地址配置 +- **配置文件路径**: `wechat-mini-program/config/env.js` +- **配置内容**: + + 该文件根据 `env` 变量决定使用开发环境还是生产环境的配置。 + + ```javascript + const env = 'development' // 修改此处切换环境:'development' 或 'production' + + const configs = { + development: { + baseUrl: 'http://192.168.5.81:8000/api' // 开发环境接口地址,请修改为本机局域网IP + }, + production: { + baseUrl: 'https://your-domain.example.com/api' // 生产环境接口地址 + } + } + + module.exports = configs[env] + ``` + +### 注意事项 +1. **开发调试**: 确保手机和电脑在同一局域网,且 `baseUrl` 中的 IP 地址是电脑的局域网 IP(可通过 `ipconfig` 或 `ifconfig` 查看)。 +2. **真机调试**: 微信开发者工具中需勾选“不校验合法域名”选项,或者在微信后台配置合法的服务器域名。 + +--- + +## 4. 快速检查清单 + +| 项目 | 环境 | 配置文件 | 关键配置项 | 说明 | +| --- | --- | --- | --- | --- | +| **Web** | 开发 | `admin/client/.env.development` | `VUE_APP_BASE_API` | 默认为 `/api`,配合 `vue.config.js` 代理 | +| **Web** | 预发布 | `admin/client/.env.staging` | `VUE_APP_BASE_API` | 默认为 `/stage-api` | +| **Web** | 生产 | `admin/client/.env.production` | `VUE_APP_BASE_API` | 默认为 `/api` | +| **小程序** | 开发 | `wechat-mini-program/config/env.js` | `configs.development.baseUrl` | **需修改为本机 IP** | +| **小程序** | 生产 | `wechat-mini-program/config/env.js` | `configs.production.baseUrl` | 修改为线上域名 | diff --git a/PROJECT_INTRODUCTION.md b/PROJECT_INTRODUCTION.md new file mode 100644 index 0000000..8e2e7f5 --- /dev/null +++ b/PROJECT_INTRODUCTION.md @@ -0,0 +1,119 @@ +# 项目介绍文档 + +## 1. 项目概述 + +本项目是一个基于 RBAC (Role-Based Access Control) 模型权限控制的中小型应用基础开发平台。项目采用前后端分离架构,旨在提供一套功能完善、易于扩展的后台管理系统解决方案。 + +项目包含三个主要部分: +* **Web 管理端**:提供完整的后台管理界面。 +* **后端 API 服务**:提供 RESTful API 接口及业务逻辑处理。 +* **移动端**:支持微信小程序及 H5,方便移动办公。 + +## 2. 技术栈 + +### 2.1 后端 (Server) +* **核心框架**: Django 3.2.23 +* **API 框架**: Django REST Framework (DRF) 3.12.4 +* **异步任务**: Celery 5.2.7 + Redis (用于定时任务、异步操作) +* **认证机制**: JWT (JSON Web Token) - djangorestframework-simplejwt +* **接口文档**: Swagger (drf-yasg) +* **数据库**: + * 开发环境默认使用 SQLite + * 生产环境及工作流模块建议使用 PostgreSQL +* **其他特性**: + * 支持 CORS 跨域 + * 使用 django-simple-history 实现审计/历史记录功能 + +### 2.2 前端 (Web Client) +* **核心框架**: Vue.js 2.6.10 +* **UI 组件库**: Element UI 2.15.14 +* **路由管理**: Vue Router 3.0.6 +* **状态管理**: Vuex 3.1.0 +* **HTTP 请求**: Axios +* **图表/可视化**: D3.js, Dagre-D3 (用于工作流展示等) +* **工具组件**: + * vue-treeselect (树形选择) + * xlsx (Excel 导入导出) + +### 2.3 移动端 (Mobile Client) +* **框架**: Uni-app (基于 Vue.js) +* **UI 库**: uView UI +* **发布目标**: 微信小程序, H5 + +## 3. 核心功能模块 + +### 3.1 系统管理 (System) +* **组织架构管理**: 支持多级组织机构管理。 +* **用户管理**: 用户的增删改查,支持分配角色和岗位。 +* **角色管理**: 基于 RBAC 的角色管理,支持功能权限分配。 +* **岗位管理**: 用户的职位/岗位管理。 +* **菜单/权限管理**: + * **功能权限**: 控制到每一个 API 接口的访问权限。 + * **数据权限**: 支持全部、本级及以下、同级及以下、本人等多种数据可见范围控制。 +* **数据字典**: 系统通用的字典数据管理。 +* **文件库**: 统一的文件上传和管理。 + +### 3.2 客户关系管理 (CRM) +* 包含基本的 CRM 功能模块(具体业务逻辑见 `apps/crm`)。 + +### 3.3 工作流 (Workflow) +* 基于 `loonflow` 引擎简化的工作流实现。 +* 支持工作流定义、状态流转。 +* **注意**: 后端代码位于 `apps/wf`,建议配合 PostgreSQL 使用以获得完整支持(SQLite 可能不支持部分 JSON 查询)。 + +### 3.4 系统监控 (Monitor) +* **服务监控**: 监控服务器状态、服务运行情况。 +* **定时任务**: 基于 Celery Beat 的定时任务管理。 +* **审计日志**: 记录用户操作历史。 + +## 4. 项目结构说明 + +```text +root/ +├── admin/ +│ ├── client/ # Web 前端项目源码 (Vue + ElementUI) +│ ├── client_mp/ # 移动端项目源码 (Uni-app + uView) +│ └── server/ # 后端项目源码 (Django) +│ ├── apps/ # 业务应用模块 (crm, monitor, system, wf) +│ ├── server/ # Django 项目配置 (settings, urls) +│ ├── utils/ # 通用工具类 +│ └── manage.py # Django 管理脚本 +├── wechat-mini-program/ # 原生微信小程序代码 (可能为旧版或独立模块) +└── docker-compose.yml # Docker 部署配置 +``` + +## 5. 快速开始 + +### 5.1 后端启动 (Windows) +1. 进入 `admin/server` 目录。 +2. 创建并激活虚拟环境: + ```bash + python -m venv venv + .\venv\scripts\activate + ``` +3. 安装依赖: `pip install -r requirements.txt` +4. 配置数据库: 复制 `conf_e.py` 为 `conf.py` 并配置数据库连接(默认可使用 SQLite)。 +5. 初始化数据库: + ```bash + python manage.py migrate + python manage.py loaddata db.json # 导入初始数据 + ``` +6. 创建超级用户: `python manage.py createsuperuser` +7. 启动服务: `python manage.py runserver 8000` +8. 接口文档地址: `http://localhost:8000/api/swagger/` + +### 5.2 前端启动 +1. 进入 `admin/client` 目录。 +2. 安装依赖: `npm install --registry=https://registry.npmmirror.com` +3. 启动开发服务: `npm run dev` +4. 访问地址: `http://localhost:9528` + +## 6. 部署建议 + +* **生产环境**: 建议前后端分离部署,使用 Nginx 进行反向代理。 +* **后端**: 使用 Gunicorn 或 uWSGI 运行 Django 服务,配合 Supervisor 进行进程守护。 +* **前端**: 运行 `npm run build:prod` 打包生成静态文件,由 Nginx 托管。 +* **WebSocket**: 如需支持 WebSocket 功能,需配置 Daphne 并通过 Supervisor 运行。 + +## 7. 参考资料 +* 更多复杂功能参考原仓库: [https://github.com/caoqianming/xt_server](https://github.com/caoqianming/xt_server) diff --git a/STARTUP.md b/STARTUP.md new file mode 100644 index 0000000..89e8e2a --- /dev/null +++ b/STARTUP.md @@ -0,0 +1,75 @@ +# 项目启动文档 + +本文档说明如何启动 GeminiWX 项目的服务端、管理后台和小程序。 + +## 1. 目录结构 + +* `admin/server`: Django 后端服务 +* `admin/client`: Vue.js 管理后台前端 +* `wechat-mini-program`: 微信小程序前端代码 + +## 2. 启动服务端 (Django) + +服务端基于 Django 框架。 + +### 步骤 + +1. 打开终端。 +2. 进入项目根目录。 +3. 使用 `admin/server/.venv` 中的 Python 解释器启动服务: + + ```powershell + .\admin\server\.venv\Scripts\python.exe admin/server/manage.py runserver 0.0.0.0:8000 + ``` + + 或者,如果你已经激活了虚拟环境: + + ```powershell + cd admin/server + python manage.py runserver 0.0.0.0:8000 + ``` + +4. 服务启动后,访问 `http://localhost:8000/` 确认运行正常。 + +## 3. 启动管理后台 (Vue.js) + +管理后台基于 Vue Element Admin 模板。 + +### 步骤 + +1. 打开新的终端窗口。 +2. 进入前端目录: + + ```powershell + cd admin/client + ``` + +3. 安装依赖(如果尚未安装): + + ```powershell + npm install + ``` + +4. 启动开发服务器: + + ```powershell + npm run dev + ``` + +5. 启动完成后,浏览器会自动打开 `http://localhost:9528` (或其他配置的端口)。 + +## 4. 启动微信小程序 + +### 步骤 + +1. 下载并安装 [微信开发者工具](https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html)。 +2. 打开微信开发者工具,选择“导入项目”。 +3. 选择目录 `wechat-mini-program`。 +4. 设置 AppID(如果没有,可以使用测试号)。 +5. 在开发者工具中编译并预览。 + +## 注意事项 + +* **端口占用**: 确保 8000 (后端) 和 9528 (前端) 端口未被占用。 +* **数据库**: 项目默认使用 `db.sqlite3`,无需额外配置数据库服务。 +* **Python 环境**: 请使用项目自带的虚拟环境 `admin/server/.venv` 以确保依赖正确。 diff --git a/admin/.gitattributes b/admin/.gitattributes new file mode 100644 index 0000000..6e51dee --- /dev/null +++ b/admin/.gitattributes @@ -0,0 +1 @@ +*.vue linguist-language=python diff --git a/admin/.gitignore b/admin/.gitignore new file mode 100644 index 0000000..fee402c --- /dev/null +++ b/admin/.gitignore @@ -0,0 +1,8 @@ +unpackage/dist/* +node_modules/* +deploy.sh +package-lock.json +.idea/ +.vscode/ +server/static/ +img/wechat_group.jpg diff --git a/admin/LICENSE b/admin/LICENSE new file mode 100644 index 0000000..09310e6 --- /dev/null +++ b/admin/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2018 blackholll + +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. diff --git a/admin/README.md b/admin/README.md new file mode 100644 index 0000000..5ee5885 --- /dev/null +++ b/admin/README.md @@ -0,0 +1,195 @@ +# 简介 +基于RBAC模型权限控制的中小型应用的基础开发平台,前后端分离,后端采用django+django-rest-framework,前端采用vue+ElementUI,移动端采用uniapp+uView(可发布h5和小程序). + +JWT认证,可使用simple_history实现审计功能,支持swagger + +内置模块有组织机构\用户\角色\岗位\数据字典\文件库\定时任务\工作流(已上传大部分代码, 后端代码位于apps/wf) + +使用工作流建议数据库用Postgresql, 下面的预览环境因为是用的sqlite因此有些json查询不支持, 使用方法可参考loonflow文档基本是一致, 主要是做了简化 + +支持功能权限(控权到每个接口)和简单的数据权限(全部、本级及以下、同级及以下、本人等) + +----- + +若需要更复杂的一些功能,请查看仓库 + + +其在master分支的后端基础上进行了重新编写,拥有更完善的权限控制、工作流引擎、运维管理、websocket支持并提供多种常用功能集成到utils中. + + +## 部分截图 +![image](https://github.com/caoqianming/django-vue-admin/blob/master/img/ticket.png) +![image](https://github.com/caoqianming/django-vue-admin/blob/master/img/user.png) +![image](https://github.com/caoqianming/django-vue-admin/blob/master/img/dict.png) +![image](https://github.com/caoqianming/django-vue-admin/blob/master/img/task.png) + +## 预览地址 +预览地址直接使用的runserver,账户admin,密码admin。请谨慎操作,勿修改密码 + + + +## 启动(以下是在windows下开发操作步骤) + + +### django后端 +定位到server文件夹 + +建立虚拟环境 `python -m venv venv` + +激活虚拟环境 `.\venv\scripts\activate` + +安装依赖包 `pip install -r requirements.txt` + +复制server文件夹下的conf_e.py为conf.py +根据需要修改里面的数据库连接及DEBUG参数 + +同步数据库 `python manage.py migrate` + +可导入初始数据 `python manage.py loaddata db.json` 或直接使用sqlite数据库(超管账户密码均为admin,每隔一段时间数据库会重置) + +创建超级管理员 `python manage.py createsuperuser` + +运行服务 `python manage.py runserver 8000` + +### vue前端 +定位到client文件夹 + +安装node.js + +安装依赖包 `npm install --registry=https://registry.npmmirror.com` + +运行服务 `npm run dev` + +### nginx +本地跑时修改nginx.conf,可显示资源文件 + +``` +listen 8012 +location /media { + proxy_pass http://localhost:8000; +} +location / { + proxy_pass http://localhost:9528; +} +``` + +运行nginx.exe + +### 运行 +打开localhost:8012即可访问 + +接口文档 localhost:8000/api/swagger/ + +后台地址 localhost:8000/django/admin/ + +## 部署 +部署时注意修改conf.py + +可以前后端分开部署, nginx代理。也可打包之后将前端dist替换server/dist, 然后执行collectstatic + +使用gunicorn启动: 进入虚拟环境执行 gunicorn -w 5 -b 0.0.0.0:2251 server.wsgi + +如果需要webscoket还需要配置daphne启动,可使用supervisor监控 + +Nginx配置可参考如下: +``` +server { + listen 2250; + client_max_body_size 1024m; + location /media/ { + alias /home/lighthouse/xx/media/; + limit_rate 800k; + } + location / { + alias /home/lighthouse/xx/dist/; + index index.html; + } + location ~ ^/(api|django)/ { + set $CSRFTOKEN ""; + if ($http_cookie ~* "CSRFTOKEN=(.+?)(?=;|$)") { + set $CSRFTOKEN "$1"; + } + proxy_set_header X-CSRFToken $CSRFTOKEN; + proxy_pass http://localhost:2251; + proxy_pass_header Authorization; + proxy_pass_header WWW-Authenticate; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + } + location /ws/ { + proxy_pass http://localhost:2252; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + proxy_redirect off; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Host $server_name; + } + +} +``` + +### docker-compose 方式运行 + +前端 `./client` 和后端 `./server` 目录下都有Dockerfile,如果需要单独构建镜像,可以自行构建。 + +这里主要说docker-compose启动这种方式。 + +按照注释修改docker-compose.yml文件。里面主要有两个服务,一个是`backend`后端,一个是`frontend`前端。 + +默认是用开发模式跑的后端和前端。如果需要单机部署,又想用docker-compose的话,改为生产模式性能会好些。 + + +启动 +``` +cd +docker-compose up -d +``` + +启动成功后,访问端口同前面的,接口8000端口,前端8012端口,如需改动,自己改docker-compose.yml + +如果要执行里面的命令 +docker-compose exec <服务名> <命令> + +举个栗子: + +如果我要执行后端生成数据变更命令。`python manage.py makemigrations` + +则用如下语句 + +``` +docker-compose exec backend python manage.py makemigrations +``` + +### 理念 +首先得会使用django-rest-framework, 理解vue-element-admin前端方案 + +本项目采用前端路由,后端根据用户角色读取用户权限代码返回给前端,由前端进行加载(核心代码是路由表中的perms属性以及checkpermission方法) + +后端功能权限的核心代码在server/apps/system/permission.py下重写了has_permission方法, 在APIView和ViewSet中定义perms权限代码 + +数据权限因为跟具体业务有关,简单定义了几个规则,重写了has_object_permission方法;根据需要使用即可 + +由于实际情况比较复杂,这里建议根据不同情况自己写drf的permission_class + +### 关于定时任务 +使用celery以及django_celery_beat包实现 + +需要安装redis并在默认端口启动, 并启动worker以及beat + +进入虚拟环境并启动worker: `celery -A server worker -l info -P eventlet`, linux系统不用加-P eventlet + +进入虚拟环境并启动beat: `celery -A server beat -l info` + +### 工作流 +工作流模块参考loonflow的实现可查看其文档(逻辑一样, 感谢loonflow) +目前大部分代码已上传, 可查看swagger + +### 微信群 +愿意交流的话 +可以加QQ群 235665873 +可以加微信群 +![image](http://49.232.14.174:7777/media/wechat_group.jpg) diff --git a/admin/client/.editorconfig b/admin/client/.editorconfig new file mode 100644 index 0000000..ea6e20f --- /dev/null +++ b/admin/client/.editorconfig @@ -0,0 +1,14 @@ +# http://editorconfig.org +root = true + +[*] +charset = utf-8 +indent_style = space +indent_size = 2 +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true + +[*.md] +insert_final_newline = false +trim_trailing_whitespace = false diff --git a/admin/client/.env.development b/admin/client/.env.development new file mode 100644 index 0000000..f67b802 --- /dev/null +++ b/admin/client/.env.development @@ -0,0 +1,14 @@ +# just a flag +ENV = 'development' + +# base api +VUE_APP_BASE_API = '/api' + +# vue-cli uses the VUE_CLI_BABEL_TRANSPILE_MODULES environment variable, +# to control whether the babel-plugin-dynamic-import-node plugin is enabled. +# It only does one thing by converting all import() to require(). +# This configuration can significantly increase the speed of hot updates, +# when you have a large number of pages. +# Detail: https://github.com/vuejs/vue-cli/blob/dev/packages/@vue/babel-preset-app/index.js + +VUE_CLI_BABEL_TRANSPILE_MODULES = true diff --git a/admin/client/.env.production b/admin/client/.env.production new file mode 100644 index 0000000..07d391e --- /dev/null +++ b/admin/client/.env.production @@ -0,0 +1,6 @@ +# just a flag +ENV = 'production' + +# base api +VUE_APP_BASE_API = '/api' + diff --git a/admin/client/.env.staging b/admin/client/.env.staging new file mode 100644 index 0000000..a8793a0 --- /dev/null +++ b/admin/client/.env.staging @@ -0,0 +1,8 @@ +NODE_ENV = production + +# just a flag +ENV = 'staging' + +# base api +VUE_APP_BASE_API = '/stage-api' + diff --git a/admin/client/.eslintignore b/admin/client/.eslintignore new file mode 100644 index 0000000..e6529fc --- /dev/null +++ b/admin/client/.eslintignore @@ -0,0 +1,4 @@ +build/*.js +src/assets +public +dist diff --git a/admin/client/.eslintrc.js b/admin/client/.eslintrc.js new file mode 100644 index 0000000..c977505 --- /dev/null +++ b/admin/client/.eslintrc.js @@ -0,0 +1,198 @@ +module.exports = { + root: true, + parserOptions: { + parser: 'babel-eslint', + sourceType: 'module' + }, + env: { + browser: true, + node: true, + es6: true, + }, + extends: ['plugin:vue/recommended', 'eslint:recommended'], + + // add your custom rules here + //it is base on https://github.com/vuejs/eslint-config-vue + rules: { + "vue/max-attributes-per-line": [2, { + "singleline": 10, + "multiline": { + "max": 1, + "allowFirstLine": false + } + }], + "vue/singleline-html-element-content-newline": "off", + "vue/multiline-html-element-content-newline":"off", + "vue/name-property-casing": ["error", "PascalCase"], + "vue/no-v-html": "off", + 'accessor-pairs': 2, + 'arrow-spacing': [2, { + 'before': true, + 'after': true + }], + 'block-spacing': [2, 'always'], + 'brace-style': [2, '1tbs', { + 'allowSingleLine': true + }], + 'camelcase': [0, { + 'properties': 'always' + }], + 'comma-dangle': [2, 'never'], + 'comma-spacing': [2, { + 'before': false, + 'after': true + }], + 'comma-style': [2, 'last'], + 'constructor-super': 2, + 'curly': [2, 'multi-line'], + 'dot-location': [2, 'property'], + 'eol-last': 2, + 'eqeqeq': ["error", "always", {"null": "ignore"}], + 'generator-star-spacing': [2, { + 'before': true, + 'after': true + }], + 'handle-callback-err': [2, '^(err|error)$'], + 'indent': [2, 2, { + 'SwitchCase': 1 + }], + 'jsx-quotes': [2, 'prefer-single'], + 'key-spacing': [2, { + 'beforeColon': false, + 'afterColon': true + }], + 'keyword-spacing': [2, { + 'before': true, + 'after': true + }], + 'new-cap': [2, { + 'newIsCap': true, + 'capIsNew': false + }], + 'new-parens': 2, + 'no-array-constructor': 2, + 'no-caller': 2, + 'no-console': 'off', + 'no-class-assign': 2, + 'no-cond-assign': 2, + 'no-const-assign': 2, + 'no-control-regex': 0, + 'no-delete-var': 2, + 'no-dupe-args': 2, + 'no-dupe-class-members': 2, + 'no-dupe-keys': 2, + 'no-duplicate-case': 2, + 'no-empty-character-class': 2, + 'no-empty-pattern': 2, + 'no-eval': 2, + 'no-ex-assign': 2, + 'no-extend-native': 2, + 'no-extra-bind': 2, + 'no-extra-boolean-cast': 2, + 'no-extra-parens': [2, 'functions'], + 'no-fallthrough': 2, + 'no-floating-decimal': 2, + 'no-func-assign': 2, + 'no-implied-eval': 2, + 'no-inner-declarations': [2, 'functions'], + 'no-invalid-regexp': 2, + 'no-irregular-whitespace': 2, + 'no-iterator': 2, + 'no-label-var': 2, + 'no-labels': [2, { + 'allowLoop': false, + 'allowSwitch': false + }], + 'no-lone-blocks': 2, + 'no-mixed-spaces-and-tabs': 2, + 'no-multi-spaces': 2, + 'no-multi-str': 2, + 'no-multiple-empty-lines': [2, { + 'max': 1 + }], + 'no-native-reassign': 2, + 'no-negated-in-lhs': 2, + 'no-new-object': 2, + 'no-new-require': 2, + 'no-new-symbol': 2, + 'no-new-wrappers': 2, + 'no-obj-calls': 2, + 'no-octal': 2, + 'no-octal-escape': 2, + 'no-path-concat': 2, + 'no-proto': 2, + 'no-redeclare': 2, + 'no-regex-spaces': 2, + 'no-return-assign': [2, 'except-parens'], + 'no-self-assign': 2, + 'no-self-compare': 2, + 'no-sequences': 2, + 'no-shadow-restricted-names': 2, + 'no-spaced-func': 2, + 'no-sparse-arrays': 2, + 'no-this-before-super': 2, + 'no-throw-literal': 2, + 'no-trailing-spaces': 2, + 'no-undef': 2, + 'no-undef-init': 2, + 'no-unexpected-multiline': 2, + 'no-unmodified-loop-condition': 2, + 'no-unneeded-ternary': [2, { + 'defaultAssignment': false + }], + 'no-unreachable': 2, + 'no-unsafe-finally': 2, + 'no-unused-vars': [2, { + 'vars': 'all', + 'args': 'none' + }], + 'no-useless-call': 2, + 'no-useless-computed-key': 2, + 'no-useless-constructor': 2, + 'no-useless-escape': 0, + 'no-whitespace-before-property': 2, + 'no-with': 2, + 'one-var': [2, { + 'initialized': 'never' + }], + 'operator-linebreak': [2, 'after', { + 'overrides': { + '?': 'before', + ':': 'before' + } + }], + 'padded-blocks': [2, 'never'], + 'quotes': [2, 'single', { + 'avoidEscape': true, + 'allowTemplateLiterals': true + }], + 'semi': [2, 'never'], + 'semi-spacing': [2, { + 'before': false, + 'after': true + }], + 'space-before-blocks': [2, 'always'], + 'space-before-function-paren': [2, 'never'], + 'space-in-parens': [2, 'never'], + 'space-infix-ops': 2, + 'space-unary-ops': [2, { + 'words': true, + 'nonwords': false + }], + 'spaced-comment': [2, 'always', { + 'markers': ['global', 'globals', 'eslint', 'eslint-disable', '*package', '!', ','] + }], + 'template-curly-spacing': [2, 'never'], + 'use-isnan': 2, + 'valid-typeof': 2, + 'wrap-iife': [2, 'any'], + 'yield-star-spacing': [2, 'both'], + 'yoda': [2, 'never'], + 'prefer-const': 2, + 'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0, + 'object-curly-spacing': [2, 'always', { + objectsInObjects: false + }], + 'array-bracket-spacing': [2, 'never'] + } +} diff --git a/admin/client/.gitignore b/admin/client/.gitignore new file mode 100644 index 0000000..9ad28d2 --- /dev/null +++ b/admin/client/.gitignore @@ -0,0 +1,16 @@ +.DS_Store +node_modules/ +dist/ +npm-debug.log* +yarn-debug.log* +yarn-error.log* +package-lock.json +tests/**/coverage/ + +# Editor directories and files +.idea +.vscode +*.suo +*.ntvs* +*.njsproj +*.sln diff --git a/admin/client/.travis.yml b/admin/client/.travis.yml new file mode 100644 index 0000000..f4be7a0 --- /dev/null +++ b/admin/client/.travis.yml @@ -0,0 +1,5 @@ +language: node_js +node_js: 10 +script: npm run test +notifications: + email: false diff --git a/admin/client/Dockerfile b/admin/client/Dockerfile new file mode 100644 index 0000000..35534e1 --- /dev/null +++ b/admin/client/Dockerfile @@ -0,0 +1,6 @@ +FROM node:10-alpine3.9 as builder +WORKDIR /code +COPY . . +RUN npm install --registry=https://registry.npm.taobao.org && npm run build:prod +FROM nginx:1.19.2-alpine +COPY --from=builder /code/dist /usr/share/nginx/html diff --git a/admin/client/Dockerfile_dev b/admin/client/Dockerfile_dev new file mode 100644 index 0000000..6f5a6ad --- /dev/null +++ b/admin/client/Dockerfile_dev @@ -0,0 +1,7 @@ +FROM node:10-alpine3.9 +ENV NODE_ENV=development +WORKDIR /code +COPY . . +RUN npm config set sass_binary_site=https://npm.taobao.org/mirrors/node-sass &&\ + npm install --registry=https://registry.npm.taobao.org +ENTRYPOINT ["npm","run","dev:docker"] diff --git a/admin/client/LICENSE b/admin/client/LICENSE new file mode 100644 index 0000000..6151575 --- /dev/null +++ b/admin/client/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2017-present PanJiaChen + +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. diff --git a/admin/client/README-zh.md b/admin/client/README-zh.md new file mode 100644 index 0000000..d248632 --- /dev/null +++ b/admin/client/README-zh.md @@ -0,0 +1,98 @@ +# vue-admin-template + +> 这是一个极简的 vue admin 管理后台。它只包含了 Element UI & axios & iconfont & permission control & lint,这些搭建后台必要的东西。 + +[线上地址](http://panjiachen.github.io/vue-admin-template) + +[国内访问](https://panjiachen.gitee.io/vue-admin-template) + +目前版本为 `v4.0+` 基于 `vue-cli` 进行构建,若你想使用旧版本,可以切换分支到[tag/3.11.0](https://github.com/PanJiaChen/vue-admin-template/tree/tag/3.11.0),它不依赖 `vue-cli`。 + +## Extra + +如果你想要根据用户角色来动态生成侧边栏和 router,你可以使用该分支[permission-control](https://github.com/PanJiaChen/vue-admin-template/tree/permission-control) + +## 相关项目 + +- [vue-element-admin](https://github.com/PanJiaChen/vue-element-admin) + +- [electron-vue-admin](https://github.com/PanJiaChen/electron-vue-admin) + +- [vue-typescript-admin-template](https://github.com/Armour/vue-typescript-admin-template) + +- [awesome-project](https://github.com/PanJiaChen/vue-element-admin/issues/2312) + +写了一个系列的教程配套文章,如何从零构建后一个完整的后台项目: + +- [手摸手,带你用 vue 撸后台 系列一(基础篇)](https://juejin.im/post/59097cd7a22b9d0065fb61d2) +- [手摸手,带你用 vue 撸后台 系列二(登录权限篇)](https://juejin.im/post/591aa14f570c35006961acac) +- [手摸手,带你用 vue 撸后台 系列三 (实战篇)](https://juejin.im/post/593121aa0ce4630057f70d35) +- [手摸手,带你用 vue 撸后台 系列四(vueAdmin 一个极简的后台基础模板,专门针对本项目的文章,算作是一篇文档)](https://juejin.im/post/595b4d776fb9a06bbe7dba56) +- [手摸手,带你封装一个 vue component](https://segmentfault.com/a/1190000009090836) + +## Build Setup + +```bash +# 克隆项目 +git clone https://github.com/PanJiaChen/vue-admin-template.git + +# 进入项目目录 +cd vue-admin-template + +# 安装依赖 +npm install + +# 建议不要直接使用 cnpm 安装以来,会有各种诡异的 bug。可以通过如下操作解决 npm 下载速度慢的问题 +npm install --registry=https://registry.npm.taobao.org + +# 启动服务 +npm run dev +``` + +浏览器访问 [http://localhost:9528](http://localhost:9528) + +## 发布 + +```bash +# 构建测试环境 +npm run build:stage + +# 构建生产环境 +npm run build:prod +``` + +## 其它 + +```bash +# 预览发布环境效果 +npm run preview + +# 预览发布环境效果 + 静态资源分析 +npm run preview -- --report + +# 代码格式检查 +npm run lint + +# 代码格式检查并自动修复 +npm run lint -- --fix +``` + +更多信息请参考 [使用文档](https://panjiachen.github.io/vue-element-admin-site/zh/) + +## Demo + +![demo](https://github.com/PanJiaChen/PanJiaChen.github.io/blob/master/images/demo.gif) + +## Browsers support + +Modern browsers and Internet Explorer 10+. + +| [IE / Edge](http://godban.github.io/browsers-support-badges/)
IE / Edge | [Firefox](http://godban.github.io/browsers-support-badges/)
Firefox | [Chrome](http://godban.github.io/browsers-support-badges/)
Chrome | [Safari](http://godban.github.io/browsers-support-badges/)
Safari | +| --------- | --------- | --------- | --------- | +| IE10, IE11, Edge| last 2 versions| last 2 versions| last 2 versions + +## License + +[MIT](https://github.com/PanJiaChen/vue-admin-template/blob/master/LICENSE) license. + +Copyright (c) 2017-present PanJiaChen diff --git a/admin/client/README.md b/admin/client/README.md new file mode 100644 index 0000000..b99f942 --- /dev/null +++ b/admin/client/README.md @@ -0,0 +1,91 @@ +# vue-admin-template + +English | [简体中文](./README-zh.md) + +> A minimal vue admin template with Element UI & axios & iconfont & permission control & lint + +**Live demo:** http://panjiachen.github.io/vue-admin-template + + +**The current version is `v4.0+` build on `vue-cli`. If you want to use the old version , you can switch branch to [tag/3.11.0](https://github.com/PanJiaChen/vue-admin-template/tree/tag/3.11.0), it does not rely on `vue-cli`** + +## Build Setup + + +```bash +# clone the project +git clone https://github.com/PanJiaChen/vue-admin-template.git + +# enter the project directory +cd vue-admin-template + +# install dependency +npm install + +# develop +npm run dev +``` + +This will automatically open http://localhost:9528 + +## Build + +```bash +# build for test environment +npm run build:stage + +# build for production environment +npm run build:prod +``` + +## Advanced + +```bash +# preview the release environment effect +npm run preview + +# preview the release environment effect + static resource analysis +npm run preview -- --report + +# code format check +npm run lint + +# code format check and auto fix +npm run lint -- --fix +``` + +Refer to [Documentation](https://panjiachen.github.io/vue-element-admin-site/guide/essentials/deploy.html) for more information + +## Demo + +![demo](https://github.com/PanJiaChen/PanJiaChen.github.io/blob/master/images/demo.gif) + +## Extra + +If you want router permission && generate menu by user roles , you can use this branch [permission-control](https://github.com/PanJiaChen/vue-admin-template/tree/permission-control) + +For `typescript` version, you can use [vue-typescript-admin-template](https://github.com/Armour/vue-typescript-admin-template) (Credits: [@Armour](https://github.com/Armour)) + +## Related Project + +- [vue-element-admin](https://github.com/PanJiaChen/vue-element-admin) + +- [electron-vue-admin](https://github.com/PanJiaChen/electron-vue-admin) + +- [vue-typescript-admin-template](https://github.com/Armour/vue-typescript-admin-template) + +- [awesome-project](https://github.com/PanJiaChen/vue-element-admin/issues/2312) + +## Browsers support + +Modern browsers and Internet Explorer 10+. + +| [IE / Edge](http://godban.github.io/browsers-support-badges/)
IE / Edge | [Firefox](http://godban.github.io/browsers-support-badges/)
Firefox | [Chrome](http://godban.github.io/browsers-support-badges/)
Chrome | [Safari](http://godban.github.io/browsers-support-badges/)
Safari | +| --------- | --------- | --------- | --------- | +| IE10, IE11, Edge| last 2 versions| last 2 versions| last 2 versions + +## License + +[MIT](https://github.com/PanJiaChen/vue-admin-template/blob/master/LICENSE) license. + +Copyright (c) 2017-present PanJiaChen diff --git a/admin/client/babel.config.js b/admin/client/babel.config.js new file mode 100644 index 0000000..ba17966 --- /dev/null +++ b/admin/client/babel.config.js @@ -0,0 +1,5 @@ +module.exports = { + presets: [ + '@vue/app' + ] +} diff --git a/admin/client/build/index.js b/admin/client/build/index.js new file mode 100644 index 0000000..0c57de2 --- /dev/null +++ b/admin/client/build/index.js @@ -0,0 +1,35 @@ +const { run } = require('runjs') +const chalk = require('chalk') +const config = require('../vue.config.js') +const rawArgv = process.argv.slice(2) +const args = rawArgv.join(' ') + +if (process.env.npm_config_preview || rawArgv.includes('--preview')) { + const report = rawArgv.includes('--report') + + run(`vue-cli-service build ${args}`) + + const port = 9526 + const publicPath = config.publicPath + + var connect = require('connect') + var serveStatic = require('serve-static') + const app = connect() + + app.use( + publicPath, + serveStatic('./dist', { + index: ['index.html', '/'] + }) + ) + + app.listen(port, function () { + console.log(chalk.green(`> Preview at http://localhost:${port}${publicPath}`)) + if (report) { + console.log(chalk.green(`> Report at http://localhost:${port}${publicPath}report.html`)) + } + + }) +} else { + run(`vue-cli-service build ${args}`) +} diff --git a/admin/client/jest.config.js b/admin/client/jest.config.js new file mode 100644 index 0000000..143cdc8 --- /dev/null +++ b/admin/client/jest.config.js @@ -0,0 +1,24 @@ +module.exports = { + moduleFileExtensions: ['js', 'jsx', 'json', 'vue'], + transform: { + '^.+\\.vue$': 'vue-jest', + '.+\\.(css|styl|less|sass|scss|svg|png|jpg|ttf|woff|woff2)$': + 'jest-transform-stub', + '^.+\\.jsx?$': 'babel-jest' + }, + moduleNameMapper: { + '^@/(.*)$': '/src/$1' + }, + snapshotSerializers: ['jest-serializer-vue'], + testMatch: [ + '**/tests/unit/**/*.spec.(js|jsx|ts|tsx)|**/__tests__/*.(js|jsx|ts|tsx)' + ], + collectCoverageFrom: ['src/utils/**/*.{js,vue}', '!src/utils/auth.js', '!src/utils/request.js', 'src/components/**/*.{js,vue}'], + coverageDirectory: '/tests/unit/coverage', + // 'collectCoverage': true, + 'coverageReporters': [ + 'lcov', + 'text-summary' + ], + testURL: 'http://localhost/' +} diff --git a/admin/client/jsconfig.json b/admin/client/jsconfig.json new file mode 100644 index 0000000..ed079e2 --- /dev/null +++ b/admin/client/jsconfig.json @@ -0,0 +1,9 @@ +{ + "compilerOptions": { + "baseUrl": "./", + "paths": { + "@/*": ["src/*"] + } + }, + "exclude": ["node_modules", "dist"] +} diff --git a/admin/client/mock/index.js b/admin/client/mock/index.js new file mode 100644 index 0000000..90e2ffe --- /dev/null +++ b/admin/client/mock/index.js @@ -0,0 +1,67 @@ +import Mock from 'mockjs' +import { param2Obj } from '../src/utils' + +import user from './user' +import table from './table' + +const mocks = [ + ...user, + ...table +] + +// for front mock +// please use it cautiously, it will redefine XMLHttpRequest, +// which will cause many of your third-party libraries to be invalidated(like progress event). +export function mockXHR() { + // mock patch + // https://github.com/nuysoft/Mock/issues/300 + Mock.XHR.prototype.proxy_send = Mock.XHR.prototype.send + Mock.XHR.prototype.send = function() { + if (this.custom.xhr) { + this.custom.xhr.withCredentials = this.withCredentials || false + + if (this.responseType) { + this.custom.xhr.responseType = this.responseType + } + } + this.proxy_send(...arguments) + } + + function XHR2ExpressReqWrap(respond) { + return function(options) { + let result = null + if (respond instanceof Function) { + const { body, type, url } = options + // https://expressjs.com/en/4x/api.html#req + result = respond({ + method: type, + body: JSON.parse(body), + query: param2Obj(url) + }) + } else { + result = respond + } + return Mock.mock(result) + } + } + + for (const i of mocks) { + Mock.mock(new RegExp(i.url), i.type || 'get', XHR2ExpressReqWrap(i.response)) + } +} + +// for mock server +const responseFake = (url, type, respond) => { + return { + url: new RegExp(`${process.env.VUE_APP_BASE_API}${url}`), + type: type || 'get', + response(req, res) { + console.log('request invoke:' + req.path) + res.json(Mock.mock(respond instanceof Function ? respond(req, res) : respond)) + } + } +} + +export default mocks.map(route => { + return responseFake(route.url, route.type, route.response) +}) diff --git a/admin/client/mock/mock-server.js b/admin/client/mock/mock-server.js new file mode 100644 index 0000000..4c4cb2a --- /dev/null +++ b/admin/client/mock/mock-server.js @@ -0,0 +1,68 @@ +const chokidar = require('chokidar') +const bodyParser = require('body-parser') +const chalk = require('chalk') +const path = require('path') + +const mockDir = path.join(process.cwd(), 'mock') + +function registerRoutes(app) { + let mockLastIndex + const { default: mocks } = require('./index.js') + for (const mock of mocks) { + app[mock.type](mock.url, mock.response) + mockLastIndex = app._router.stack.length + } + const mockRoutesLength = Object.keys(mocks).length + return { + mockRoutesLength: mockRoutesLength, + mockStartIndex: mockLastIndex - mockRoutesLength + } +} + +function unregisterRoutes() { + Object.keys(require.cache).forEach(i => { + if (i.includes(mockDir)) { + delete require.cache[require.resolve(i)] + } + }) +} + +module.exports = app => { + // es6 polyfill + require('@babel/register') + + // parse app.body + // https://expressjs.com/en/4x/api.html#req.body + app.use(bodyParser.json()) + app.use(bodyParser.urlencoded({ + extended: true + })) + + const mockRoutes = registerRoutes(app) + var mockRoutesLength = mockRoutes.mockRoutesLength + var mockStartIndex = mockRoutes.mockStartIndex + + // watch files, hot reload mock server + chokidar.watch(mockDir, { + ignored: /mock-server/, + ignoreInitial: true + }).on('all', (event, path) => { + if (event === 'change' || event === 'add') { + try { + // remove mock routes stack + app._router.stack.splice(mockStartIndex, mockRoutesLength) + + // clear routes cache + unregisterRoutes() + + const mockRoutes = registerRoutes(app) + mockRoutesLength = mockRoutes.mockRoutesLength + mockStartIndex = mockRoutes.mockStartIndex + + console.log(chalk.magentaBright(`\n > Mock Server hot reload success! changed ${path}`)) + } catch (error) { + console.log(chalk.redBright(error)) + } + } + }) +} diff --git a/admin/client/mock/table.js b/admin/client/mock/table.js new file mode 100644 index 0000000..ba95f76 --- /dev/null +++ b/admin/client/mock/table.js @@ -0,0 +1,29 @@ +import Mock from 'mockjs' + +const data = Mock.mock({ + 'items|30': [{ + id: '@id', + title: '@sentence(10, 20)', + 'status|1': ['published', 'draft', 'deleted'], + author: 'name', + display_time: '@datetime', + pageviews: '@integer(300, 5000)' + }] +}) + +export default [ + { + url: '/vue-admin-template/table/list', + type: 'get', + response: config => { + const items = data.items + return { + code: 20000, + data: { + total: items.length, + items: items + } + } + } + } +] diff --git a/admin/client/mock/user.js b/admin/client/mock/user.js new file mode 100644 index 0000000..f007cd9 --- /dev/null +++ b/admin/client/mock/user.js @@ -0,0 +1,84 @@ + +const tokens = { + admin: { + token: 'admin-token' + }, + editor: { + token: 'editor-token' + } +} + +const users = { + 'admin-token': { + roles: ['admin'], + introduction: 'I am a super administrator', + avatar: 'https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif', + name: 'Super Admin' + }, + 'editor-token': { + roles: ['editor'], + introduction: 'I am an editor', + avatar: 'https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif', + name: 'Normal Editor' + } +} + +export default [ + // user login + { + url: '/vue-admin-template/user/login', + type: 'post', + response: config => { + const { username } = config.body + const token = tokens[username] + + // mock error + if (!token) { + return { + code: 60204, + message: 'Account and password are incorrect.' + } + } + + return { + code: 20000, + data: token + } + } + }, + + // get user info + { + url: '/vue-admin-template/user/info\.*', + type: 'get', + response: config => { + const { token } = config.query + const info = users[token] + + // mock error + if (!info) { + return { + code: 50008, + message: 'Login failed, unable to get user details.' + } + } + + return { + code: 20000, + data: info + } + } + }, + + // user logout + { + url: '/vue-admin-template/user/logout', + type: 'post', + response: _ => { + return { + code: 20000, + data: 'success' + } + } + } +] diff --git a/admin/client/package.json b/admin/client/package.json new file mode 100644 index 0000000..2cbd789 --- /dev/null +++ b/admin/client/package.json @@ -0,0 +1,75 @@ +{ + "name": "vue-admin-template", + "version": "4.2.1", + "description": "A vue admin template with Element UI & axios & iconfont & permission control & lint", + "author": "Pan ", + "license": "MIT", + "scripts": { + "dev": "set NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service serve", + "dev:docker": "NODE_ENV=development PORT=80 ./node_modules/.bin/vue-cli-service serve", + "build:prod": "set NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service build", + "build:stage": "vue-cli-service build --mode staging", + "preview": "node build/index.js --preview", + "lint": "eslint --ext .js,.vue src", + "test:unit": "jest --clearCache && vue-cli-service test:unit", + "test:ci": "npm run lint && npm run test:unit", + "svgo": "svgo -f src/icons/svg --config=src/icons/svgo.yml" + }, + "dependencies": { + "@riophae/vue-treeselect": "^0.4.0", + "axios": "1.6", + "d3": "^7.6.1", + "dagre-d3": "^0.6.4", + "echarts": "^6.0.0", + "element-ui": "2.15.14", + "file-saver": "^2.0.2", + "js-cookie": "2.2.0", + "normalize.css": "7.0.0", + "nprogress": "0.2.0", + "path-to-regexp": "3.3.0", + "vue": "2.6.10", + "vue-count-to": "^1.0.13", + "vue-json-editor": "^1.4.3", + "vue-router": "3.0.6", + "vuex": "3.1.0", + "wangeditor": "^4.7.15", + "webpack": "^4.36.0", + "xlsx": "^0.15.5" + }, + "devDependencies": { + "@babel/core": "^7.4.0", + "@babel/register": "7.0.0", + "@vue/cli-plugin-babel": "3.6.0", + "@vue/cli-plugin-eslint": "^3.9.1", + "@vue/cli-plugin-unit-jest": "3.6.3", + "@vue/cli-service": "3.6.0", + "@vue/test-utils": "1.0.0-beta.29", + "autoprefixer": "^9.8.8", + "babel-core": "7.0.0-bridge.0", + "babel-eslint": "10.0.1", + "babel-jest": "23.6.0", + "chalk": "2.4.2", + "connect": "3.6.6", + "eslint": "5.15.3", + "eslint-plugin-vue": "5.2.2", + "html-webpack-plugin": "3.2.0", + "mockjs": "1.1.0", + "runjs": "^4.3.2", + "sass": "^1.69.5", + "sass-loader": "^8.0", + "script-ext-html-webpack-plugin": "2.1.3", + "script-loader": "0.7.2", + "serve-static": "^1.15.0", + "svg-sprite-loader": "4.1.3", + "svgo": "1.2.2", + "vue-template-compiler": "2.6.10" + }, + "engines": { + "node": ">=8.9", + "npm": ">= 3.0.0" + }, + "browserslist": [ + "> 1%", + "last 2 versions" + ] +} diff --git a/admin/client/postcss.config.js b/admin/client/postcss.config.js new file mode 100644 index 0000000..10473ef --- /dev/null +++ b/admin/client/postcss.config.js @@ -0,0 +1,8 @@ +// https://github.com/michael-ciniawsky/postcss-load-config + +module.exports = { + 'plugins': { + // to edit target browsers: use "browserslist" field in package.json + 'autoprefixer': {} + } +} diff --git a/admin/client/public/favicon.ico b/admin/client/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..34b63ac63a87ee3ea8e7a0f3f5b5406c437e2112 GIT binary patch literal 67646 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 X;@D+E7Ad=S_FbjlW&KY_+xPzm3MBT? literal 0 HcmV?d00001 diff --git a/admin/client/public/index.html b/admin/client/public/index.html new file mode 100644 index 0000000..fa2be91 --- /dev/null +++ b/admin/client/public/index.html @@ -0,0 +1,17 @@ + + + + + + + + <%= webpackConfig.name %> + + + +
+ + + diff --git a/admin/client/src/App.vue b/admin/client/src/App.vue new file mode 100644 index 0000000..ec9032c --- /dev/null +++ b/admin/client/src/App.vue @@ -0,0 +1,11 @@ + + + diff --git a/admin/client/src/api/crm.js b/admin/client/src/api/crm.js new file mode 100644 index 0000000..48685e4 --- /dev/null +++ b/admin/client/src/api/crm.js @@ -0,0 +1,360 @@ +import request from '@/utils/request' + +// Teachers +export function getTeachers(query) { + return request({ + url: '/teachers/', + method: 'get', + params: query + }) +} + +export function createTeacher(data) { + return request({ + url: '/teachers/', + method: 'post', + data + }) +} + +export function updateTeacher(id, data) { + return request({ + url: `/teachers/${id}/`, + method: 'put', + data + }) +} + +export function deleteTeacher(id) { + return request({ + url: `/teachers/${id}/`, + method: 'delete' + }) +} + +// Teaching Centers +export function getTeachingCenters(query) { + return request({ + url: '/teaching-centers/', + method: 'get', + params: query + }) +} + +export function createTeachingCenter(data) { + return request({ + url: '/teaching-centers/', + method: 'post', + data + }) +} + +export function updateTeachingCenter(id, data) { + return request({ + url: `/teaching-centers/${id}/`, + method: 'put', + data + }) +} + +export function deleteTeachingCenter(id) { + return request({ + url: `/teaching-centers/${id}/`, + method: 'delete' + }) +} + +// Categories +export function getCategories(query) { + return request({ + url: '/categories/', + method: 'get', + params: query + }) +} + +export function createCategory(data) { + return request({ + url: '/categories/', + method: 'post', + data + }) +} + +export function updateCategory(id, data) { + return request({ + url: `/categories/${id}/`, + method: 'put', + data + }) +} + +export function deleteCategory(id) { + return request({ + url: `/categories/${id}/`, + method: 'delete' + }) +} + +// Projects +export function getProjects(query) { + return request({ + url: '/projects/', + method: 'get', + params: query + }) +} + +export function createProject(data) { + return request({ + url: '/projects/', + method: 'post', + data + }) +} + +export function updateProject(id, data) { + return request({ + url: `/projects/${id}/`, + method: 'put', + data + }) +} + +export function deleteProject(id) { + return request({ + url: `/projects/${id}/`, + method: 'delete' + }) +} + +// Coupons +export function getCoupons(query) { + return request({ + url: '/coupons/', + method: 'get', + params: query + }) +} + +export function createCoupon(data) { + return request({ + url: '/coupons/', + method: 'post', + data + }) +} + +export function updateCoupon(id, data) { + return request({ + url: `/coupons/${id}/`, + method: 'put', + data + }) +} + +export function deleteCoupon(id) { + return request({ + url: `/coupons/${id}/`, + method: 'delete' + }) +} + +// Banners +export function getBanners(query) { + return request({ + url: '/banners/', + method: 'get', + params: query + }) +} + +export function createBanner(data) { + return request({ + url: '/banners/', + method: 'post', + data + }) +} + +export function updateBanner(id, data) { + return request({ + url: `/banners/${id}/`, + method: 'put', + data + }) +} + +export function deleteBanner(id) { + return request({ + url: `/banners/${id}/`, + method: 'delete' + }) +} + +// Students +export function getStudents(query) { + return request({ + url: '/students/', + method: 'get', + params: query + }) +} + +export function createStudent(data) { + return request({ + url: '/students/', + method: 'post', + data + }) +} + +export function updateStudent(id, data) { + return request({ + url: `/students/${id}/`, + method: 'put', + data + }) +} + +export function deleteStudent(id) { + return request({ + url: `/students/${id}/`, + method: 'delete' + }) +} + +export function clearStudents() { + return request({ + url: '/students/clear/', + method: 'delete' + }) +} + +export function assignCouponToStudent(id, couponId) { + return request({ + url: `/students/${id}/assign_coupon/`, + method: 'post', + data: { coupon_id: couponId } + }) +} + +// Student Coupons (Issued Coupons) +export function getStudentCoupons(query) { + return request({ + url: '/student-coupons/', + method: 'get', + params: query + }) +} + +export function updateStudentCoupon(id, data) { + return request({ + url: `/student-coupons/${id}/`, + method: 'patch', + data + }) +} + +export function deleteStudentCoupon(id) { + return request({ + url: `/student-coupons/${id}/`, + method: 'delete' + }) +} + +// Student Projects (Enrollments) +export function getStudentProjects(query) { + return request({ + url: '/student-projects/', + method: 'get', + params: query + }) +} + +export function createStudentProject(data) { + return request({ + url: '/student-projects/', + method: 'post', + data + }) +} + +export function updateStudentProject(id, data) { + return request({ + url: `/student-projects/${id}/`, + method: 'patch', + data + }) +} + +export function deleteStudentProject(id) { + return request({ + url: `/student-projects/${id}/`, + method: 'delete' + }) +} + +// Student Honors +export function getHonors(query) { + return request({ + url: '/student-honors/', + method: 'get', + params: query + }) +} + +export function createHonor(data) { + return request({ + url: '/student-honors/', + method: 'post', + data + }) +} + +export function updateHonor(id, data) { + return request({ + url: `/student-honors/${id}/`, + method: 'put', + data + }) +} + +export function deleteHonor(id) { + return request({ + url: `/student-honors/${id}/`, + method: 'delete' + }) +} + +// Student Showcases +export function getShowcases(query) { + return request({ + url: '/student-showcases/', + method: 'get', + params: query + }) +} + +export function createShowcase(data) { + return request({ + url: '/student-showcases/', + method: 'post', + data + }) +} + +export function updateShowcase(id, data) { + return request({ + url: `/student-showcases/${id}/`, + method: 'put', + data + }) +} + +export function deleteShowcase(id) { + return request({ + url: `/student-showcases/${id}/`, + method: 'delete' + }) +} diff --git a/admin/client/src/api/dashboard.js b/admin/client/src/api/dashboard.js new file mode 100644 index 0000000..d72e70e --- /dev/null +++ b/admin/client/src/api/dashboard.js @@ -0,0 +1,8 @@ +import request from '@/utils/request' + +export function getDashboardStats() { + return request({ + url: '/dashboard/stats', + method: 'get' + }) +} diff --git a/admin/client/src/api/dict.js b/admin/client/src/api/dict.js new file mode 100644 index 0000000..d46429f --- /dev/null +++ b/admin/client/src/api/dict.js @@ -0,0 +1,57 @@ +import request from '@/utils/request' + +export function getDictTypeList(query) { + return request({ + url: '/system/dicttype/', + method: 'get', + params: query + }) +} +export function createDictType(data) { + return request({ + url: '/system/dicttype/', + method: 'post', + data + }) +} +export function updateDictType(id, data) { + return request({ + url: `/system/dicttype/${id}/`, + method: 'put', + data + }) +} +export function deleteDictType(id) { + return request({ + url: `/system/dicttype/${id}/`, + method: 'delete' + }) +} + +export function getDictList(query) { + return request({ + url: '/system/dict/', + method: 'get', + params: query + }) +} +export function createDict(data) { + return request({ + url: '/system/dict/', + method: 'post', + data + }) +} +export function updateDict(id, data) { + return request({ + url: `/system/dict/${id}/`, + method: 'put', + data + }) +} +export function deleteDict(id) { + return request({ + url: `/system/dict/${id}/`, + method: 'delete' + }) +} diff --git a/admin/client/src/api/file.js b/admin/client/src/api/file.js new file mode 100644 index 0000000..99587b1 --- /dev/null +++ b/admin/client/src/api/file.js @@ -0,0 +1,32 @@ +import { getToken } from "@/utils/auth" +import request from '@/utils/request' + +export function upUrl() { + return process.env.VUE_APP_BASE_API + '/file/' +} + +export function upHeaders() { + return { Authorization: "Bearer " + getToken() } +} + +export function getFileList(query) { + return request({ + url: '/file/', + method: 'get', + params: query + }) +} + +export function deleteFile(id) { + return request({ + url: '/file/' + id + '/', + method: 'delete' + }) +} + +export function clearFiles() { + return request({ + url: '/file/clear_all/', + method: 'delete' + }) +} diff --git a/admin/client/src/api/moritor.js b/admin/client/src/api/moritor.js new file mode 100644 index 0000000..659ca27 --- /dev/null +++ b/admin/client/src/api/moritor.js @@ -0,0 +1,26 @@ +import { getToken } from "@/utils/auth" +import request from '@/utils/request' + +//查看日志列表 + +export function getlogList(query) { + return request({ + url: '/monitor/log/', + method: 'get', + params: query + }) +} +//查看日志详情 +export function getLog(name) { + return request({ + url: `/monitor/log/${name}/`, + method: 'get' + }) +} +//获取服务器状态信息 +export function getServerList() { + return request({ + url: '/monitor/server/', + method: 'get' + }) +} \ No newline at end of file diff --git a/admin/client/src/api/org.js b/admin/client/src/api/org.js new file mode 100644 index 0000000..2880ec4 --- /dev/null +++ b/admin/client/src/api/org.js @@ -0,0 +1,35 @@ +import request from '@/utils/request' + +export function getOrgAll() { + return request({ + url: '/system/organization/', + method: 'get' + }) +} +export function getOrgList(query) { + return request({ + url: '/system/organization/', + method: 'get', + params: query + }) +} +export function createOrg(data) { + return request({ + url: '/system/organization/', + method: 'post', + data + }) +} +export function updateOrg(id, data) { + return request({ + url: `/system/organization/${id}/`, + method: 'put', + data + }) +} +export function deleteOrg(id) { + return request({ + url: `/system/organization/${id}/`, + method: 'delete' + }) +} diff --git a/admin/client/src/api/perm.js b/admin/client/src/api/perm.js new file mode 100644 index 0000000..29ebf53 --- /dev/null +++ b/admin/client/src/api/perm.js @@ -0,0 +1,28 @@ +import request from '@/utils/request' + +export function getPermAll() { + return request({ + url: '/system/permission/', + method: 'get' + }) +} +export function createPerm(data) { + return request({ + url: '/system/permission/', + method: 'post', + data + }) +} +export function updatePerm(id, data) { + return request({ + url: `/system/permission/${id}/`, + method: 'put', + data + }) +} +export function deletePerm(id) { + return request({ + url: `/system/permission/${id}/`, + method: 'delete' + }) +} \ No newline at end of file diff --git a/admin/client/src/api/position.js b/admin/client/src/api/position.js new file mode 100644 index 0000000..2ea116f --- /dev/null +++ b/admin/client/src/api/position.js @@ -0,0 +1,31 @@ +import request from '@/utils/request' + +export function getPositionAll() { + return request({ + url: '/system/position/', + method: 'get' + }) +} + +export function createPosition(data) { + return request({ + url: '/system/position/', + method: 'post', + data + }) +} + +export function updatePosition(id, data) { + return request({ + url: `/system/position/${id}/`, + method: 'put', + data + }) +} + +export function deletePosition(id) { + return request({ + url: `/system/position/${id}/`, + method: 'delete' + }) +} diff --git a/admin/client/src/api/role.js b/admin/client/src/api/role.js new file mode 100644 index 0000000..e25e097 --- /dev/null +++ b/admin/client/src/api/role.js @@ -0,0 +1,38 @@ +import request from '@/utils/request' + +export function getRoutes() { + return request({ + url: '/system/permission/', + method: 'get' + }) +} + +export function getRoleAll() { + return request({ + url: '/system/role/', + method: 'get' + }) +} + +export function createRole(data) { + return request({ + url: '/system/role/', + method: 'post', + data + }) +} + +export function updateRole(id, data) { + return request({ + url: `/system/role/${id}/`, + method: 'put', + data + }) +} + +export function deleteRole(id) { + return request({ + url: `/system/role/${id}/`, + method: 'delete' + }) +} diff --git a/admin/client/src/api/table.js b/admin/client/src/api/table.js new file mode 100644 index 0000000..2752f52 --- /dev/null +++ b/admin/client/src/api/table.js @@ -0,0 +1,9 @@ +import request from '@/utils/request' + +export function getList(params) { + return request({ + url: '/vue-admin-template/table/list', + method: 'get', + params + }) +} diff --git a/admin/client/src/api/task.js b/admin/client/src/api/task.js new file mode 100644 index 0000000..1e3b397 --- /dev/null +++ b/admin/client/src/api/task.js @@ -0,0 +1,45 @@ +import request from '@/utils/request' + +export function getptaskList(query) { + return request({ + url: '/system/ptask/', + method: 'get', + params: query + }) +} + +export function getTaskAll() { + return request({ + url: '/system/task/', + method: 'get' + }) +} +export function createptask(data) { + return request({ + url: '/system/ptask/', + method: 'post', + data + }) +} + +export function updateptask(id, data) { + return request({ + url: `/system/ptask/${id}/`, + method: 'put', + data + }) +} + +export function toggletask(id) { + return request({ + url: `/system/ptask/${id}/toggle/`, + method: 'put' + }) +} + +export function deleteptask(id) { + return request({ + url: `/system/ptask/${id}/`, + method: 'delete' + }) +} \ No newline at end of file diff --git a/admin/client/src/api/user.js b/admin/client/src/api/user.js new file mode 100644 index 0000000..8edf3ab --- /dev/null +++ b/admin/client/src/api/user.js @@ -0,0 +1,70 @@ +import request from '@/utils/request' + +export function login(data) { + return request({ + url: '/token/', + method: 'post', + data + }) +} + +export function logout() { + return request({ + url: '/token/black/', + method: 'get' + }) +} + +export function getInfo() { + return request({ + url: '/system/user/info/', + method: 'get' + }) +} + +export function getUserList(query) { + return request({ + url: '/system/user/', + method: 'get', + params: query + }) +} + +export function getUser(id) { + return request({ + url: `/system/user/${id}/`, + method: 'get' + }) +} + +export function createUser(data) { + return request({ + url: '/system/user/', + method: 'post', + data + }) +} + +export function updateUser(id, data) { + return request({ + url: `/system/user/${id}/`, + method: 'put', + data + }) +} + +export function deleteUser(id, data) { + return request({ + url: `/system/user/${id}/`, + method: 'delete', + data + }) +} + +export function changePassword(data) { + return request({ + url: '/system/user/password/', + method: 'put', + data + }) +} diff --git a/admin/client/src/api/workflow.js b/admin/client/src/api/workflow.js new file mode 100644 index 0000000..f5a13de --- /dev/null +++ b/admin/client/src/api/workflow.js @@ -0,0 +1,258 @@ +import request from '@/utils/request' + +export function getWorkflowList(query) { + return request({ + url: '/wf/workflow/', + method: 'get', + params: query + }) +} +export function createWorkflow(data) { + return request({ + url: '/wf/workflow/', + method: 'post', + data + }) +} +export function updateWorkflow(id, data) { + return request({ + url: `/wf/workflow/${id}/`, + method: 'put', + data + }) +} +export function deleteWorkflow(id, data) { + return request({ + url: `/wf/workflow/${id}/`, + method: 'delete', + data + }) +} +//流转状态列表 +export function getWfStateList(id) { + return request({ + url: `/wf/workflow/${id}/states`, + method: 'get' + }) +} +//工单流转step +export function getWfFlowSteps(id) { + return request({ + url: `/wf/ticket/${id}/flowsteps/`, + method: 'get' + }) +} + +//流转状态创建 +export function createWfState(data) { + return request({ + url: '/wf/state/', + method: 'post', + data + }) +} +//处理工单 +export function ticketHandle(id,data) { + return request({ + url: `/wf/ticket/${id}/handle/`, + method: 'post', + data + }) +} + +//流转状态更新 +export function updateWfState(id, data) { + return request({ + url: `/wf/state/${id}/`, + method: 'put', + data + }) +} +//流转状态删除 +export function deleteWfState(id, data) { + return request({ + url: `/wf/state/${id}/`, + method: 'delete', + data + }) +} +//自定义字段列表 +export function getWfCustomfieldList(id) { + return request({ + url: `/wf/workflow/${id}/customfields`, + method: 'get' + }) +} +//自定义字段创建 +export function createWfCustomfield(data) { + return request({ + url: '/wf/customfield/', + method: 'post', + data + }) +} +//自定义字段更新 +export function updateWfCustomfield(id, data) { + return request({ + url: `/wf/customfield/${id}/`, + method: 'put', + data + }) +} +//自定义字段删除 +export function deleteWfCustomfield(id, data) { + return request({ + url: `/wf/customfield/${id}/`, + method: 'delete', + data + }) +} +//流转列表 +export function getWfTransitionList(id) { + return request({ + url: `/wf/workflow/${id}/transitions/`, + method: 'get' + }) +} +//流转创建 +export function createWfTransition(data) { + return request({ + url: '/wf/transition/', + method: 'post', + data + }) +} +//流转更新 +export function updateWfTransition(id, data) { + return request({ + url: `/wf/transition/${id}/`, + method: 'put', + data + }) +} +//流转删除 +export function deleteWfTransition(id, data) { + return request({ + url: `/wf/transition/${id}/`, + method: 'delete', + data + }) +} +//工单列表 +export function getTickets(query) { + return request({ + url: `/wf/ticket/`, + method: 'get', + params:query + }) +} +//新建工单 +export function createTicket(data) { + return request({ + url: '/wf/ticket/', + method: 'post', + data + }) +} + //详情 +export function ticketread(id) { + return request({ + url: `/wf/ticket/${id}/`, + method: 'get', + + }) + +} +//接单 +export function ticketAccpet(id,data) { + return request({ + url: `/wf/ticket/${id}/accpet/`, + method: 'post', + data + }) +} +//撤回工单,允许创建人在指定状态撤回工单至初始状态 +export function ticketRetreat(id,data) { + return request({ + url: `/wf/ticket/${id}/retreat/`, + method: 'post', + data + }) +} +//关闭工单,仅允许创建人在初始状态关闭工单 +export function ticketAddNode(id,data) { + return request({ + url: `/wf/ticket/${id}/add_node/`, + method: 'post', + data + }) +} +//加签 +export function ticketClose(id,data) { + return request({ + url: `/wf/ticket/${id}/close/`, + method: 'post', + data + }) +} +//加签 +export function ticketAddNodeEnd(id,data) { + return request({ + url: `/wf/ticket/${id}/add_node_end/`, + method: 'post', + data + }) +} +//工单删除 +export function ticketDestory(data) { + return request({ + url: `/wf/ticket/destory/`, + method: 'post', + data + }) +} +//工单详情 +export function getTicketDetail(id) { + return request({ + url: `/wf/ticket/${id}/`, + method: 'get' + }) +} + +//工单流转 +export function getTicketTransitions(id) { + return request({ + url: `/wf/ticket/${id}/transitions/`, + method: 'get' + }) +} + +//工单流转记录 +export function getTicketFlowlog(id) { + return request({ + url: `/wf/ticket/${id}/flowlogs/`, + method: 'get' + }) +} +//工单代办数量 +export function getCount(data) { + return request({ + url: `/wf/ticket/duty_agg/`, + method: 'get', + params:data + }) +} +//工单代办数量 +export function getCodes() { + return request({ + url: `/wf/participant_from_code`, + method: 'get' + }) +} +//工单详情 +export function getWorkflowInit(id) { + return request({ + url: `/wf/workflow/${id}/init/`, + method: 'get' + }) +} diff --git a/admin/client/src/assets/404_images/404.png b/admin/client/src/assets/404_images/404.png new file mode 100644 index 0000000000000000000000000000000000000000..3d8e2305cc973ad2121403aee4bf08728f76c461 GIT binary patch literal 98071 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 literal 0 HcmV?d00001 diff --git a/admin/client/src/assets/404_images/404_cloud.png b/admin/client/src/assets/404_images/404_cloud.png new file mode 100644 index 0000000000000000000000000000000000000000..c6281d09013e0a2c5f8e699a0a6038d9480291e5 GIT binary patch literal 4766 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 literal 0 HcmV?d00001 diff --git a/admin/client/src/components/Breadcrumb/index.vue b/admin/client/src/components/Breadcrumb/index.vue new file mode 100644 index 0000000..e65a60d --- /dev/null +++ b/admin/client/src/components/Breadcrumb/index.vue @@ -0,0 +1,78 @@ + + + + + diff --git a/admin/client/src/components/Hamburger/index.vue b/admin/client/src/components/Hamburger/index.vue new file mode 100644 index 0000000..368b002 --- /dev/null +++ b/admin/client/src/components/Hamburger/index.vue @@ -0,0 +1,44 @@ + + + + + diff --git a/admin/client/src/components/Pagination/index.vue b/admin/client/src/components/Pagination/index.vue new file mode 100644 index 0000000..e316e20 --- /dev/null +++ b/admin/client/src/components/Pagination/index.vue @@ -0,0 +1,101 @@ + + + + + diff --git a/admin/client/src/components/SvgIcon/index.vue b/admin/client/src/components/SvgIcon/index.vue new file mode 100644 index 0000000..9a3318e --- /dev/null +++ b/admin/client/src/components/SvgIcon/index.vue @@ -0,0 +1,62 @@ + + + + + diff --git a/admin/client/src/directive/el-table/adaptive.js b/admin/client/src/directive/el-table/adaptive.js new file mode 100644 index 0000000..298daea --- /dev/null +++ b/admin/client/src/directive/el-table/adaptive.js @@ -0,0 +1,42 @@ +import { addResizeListener, removeResizeListener } from 'element-ui/src/utils/resize-event' + +/** + * How to use + * ... + * el-table height is must be set + * bottomOffset: 30(default) // The height of the table from the bottom of the page. + */ + +const doResize = (el, binding, vnode) => { + const { componentInstance: $table } = vnode + + const { value } = binding + + if (!$table.height) { + throw new Error(`el-$table must set the height. Such as height='100px'`) + } + const bottomOffset = (value && value.bottomOffset) || 30 + + if (!$table) return + + const height = window.innerHeight - el.getBoundingClientRect().top - bottomOffset + $table.$nextTick(() => { + $table.layout.setHeight(height) + }) +} + +export default { + bind(el, binding, vnode) { + el.resizeListener = () => { + doResize(el, binding, vnode) + } + // parameter 1 is must be "Element" type + addResizeListener(window.document.body, el.resizeListener) + }, + inserted(el, binding, vnode) { + doResize(el, binding, vnode) + }, + unbind(el) { + removeResizeListener(window.document.body, el.resizeListener) + } +} diff --git a/admin/client/src/directive/el-table/index.js b/admin/client/src/directive/el-table/index.js new file mode 100644 index 0000000..d3d4515 --- /dev/null +++ b/admin/client/src/directive/el-table/index.js @@ -0,0 +1,13 @@ +import adaptive from './adaptive' + +const install = function(Vue) { + Vue.directive('el-height-adaptive-table', adaptive) +} + +if (window.Vue) { + window['el-height-adaptive-table'] = adaptive + Vue.use(install); // eslint-disable-line +} + +adaptive.install = install +export default adaptive diff --git a/admin/client/src/icons/index.js b/admin/client/src/icons/index.js new file mode 100644 index 0000000..2c6b309 --- /dev/null +++ b/admin/client/src/icons/index.js @@ -0,0 +1,9 @@ +import Vue from 'vue' +import SvgIcon from '@/components/SvgIcon'// svg component + +// register globally +Vue.component('svg-icon', SvgIcon) + +const req = require.context('./svg', false, /\.svg$/) +const requireAll = requireContext => requireContext.keys().map(requireContext) +requireAll(req) diff --git a/admin/client/src/icons/svg/404.svg b/admin/client/src/icons/svg/404.svg new file mode 100644 index 0000000..6df5019 --- /dev/null +++ b/admin/client/src/icons/svg/404.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/admin/client/src/icons/svg/bug.svg b/admin/client/src/icons/svg/bug.svg new file mode 100644 index 0000000..05a150d --- /dev/null +++ b/admin/client/src/icons/svg/bug.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/admin/client/src/icons/svg/chart.svg b/admin/client/src/icons/svg/chart.svg new file mode 100644 index 0000000..27728fb --- /dev/null +++ b/admin/client/src/icons/svg/chart.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/admin/client/src/icons/svg/clipboard.svg b/admin/client/src/icons/svg/clipboard.svg new file mode 100644 index 0000000..90923ff --- /dev/null +++ b/admin/client/src/icons/svg/clipboard.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/admin/client/src/icons/svg/component.svg b/admin/client/src/icons/svg/component.svg new file mode 100644 index 0000000..207ada3 --- /dev/null +++ b/admin/client/src/icons/svg/component.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/admin/client/src/icons/svg/dashboard.svg b/admin/client/src/icons/svg/dashboard.svg new file mode 100644 index 0000000..5317d37 --- /dev/null +++ b/admin/client/src/icons/svg/dashboard.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/admin/client/src/icons/svg/documentation.svg b/admin/client/src/icons/svg/documentation.svg new file mode 100644 index 0000000..7043122 --- /dev/null +++ b/admin/client/src/icons/svg/documentation.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/admin/client/src/icons/svg/drag.svg b/admin/client/src/icons/svg/drag.svg new file mode 100644 index 0000000..4185d3c --- /dev/null +++ b/admin/client/src/icons/svg/drag.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/admin/client/src/icons/svg/edit.svg b/admin/client/src/icons/svg/edit.svg new file mode 100644 index 0000000..d26101f --- /dev/null +++ b/admin/client/src/icons/svg/edit.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/admin/client/src/icons/svg/education.svg b/admin/client/src/icons/svg/education.svg new file mode 100644 index 0000000..7bfb01d --- /dev/null +++ b/admin/client/src/icons/svg/education.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/admin/client/src/icons/svg/email.svg b/admin/client/src/icons/svg/email.svg new file mode 100644 index 0000000..74d25e2 --- /dev/null +++ b/admin/client/src/icons/svg/email.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/admin/client/src/icons/svg/example.svg b/admin/client/src/icons/svg/example.svg new file mode 100644 index 0000000..46f42b5 --- /dev/null +++ b/admin/client/src/icons/svg/example.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/admin/client/src/icons/svg/excel.svg b/admin/client/src/icons/svg/excel.svg new file mode 100644 index 0000000..74d97b8 --- /dev/null +++ b/admin/client/src/icons/svg/excel.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/admin/client/src/icons/svg/exit-fullscreen.svg b/admin/client/src/icons/svg/exit-fullscreen.svg new file mode 100644 index 0000000..485c128 --- /dev/null +++ b/admin/client/src/icons/svg/exit-fullscreen.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/admin/client/src/icons/svg/eye-open.svg b/admin/client/src/icons/svg/eye-open.svg new file mode 100644 index 0000000..88dcc98 --- /dev/null +++ b/admin/client/src/icons/svg/eye-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/admin/client/src/icons/svg/eye.svg b/admin/client/src/icons/svg/eye.svg new file mode 100644 index 0000000..16ed2d8 --- /dev/null +++ b/admin/client/src/icons/svg/eye.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/admin/client/src/icons/svg/form.svg b/admin/client/src/icons/svg/form.svg new file mode 100644 index 0000000..dcbaa18 --- /dev/null +++ b/admin/client/src/icons/svg/form.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/admin/client/src/icons/svg/fullscreen.svg b/admin/client/src/icons/svg/fullscreen.svg new file mode 100644 index 0000000..0e86b6f --- /dev/null +++ b/admin/client/src/icons/svg/fullscreen.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/admin/client/src/icons/svg/guide.svg b/admin/client/src/icons/svg/guide.svg new file mode 100644 index 0000000..b271001 --- /dev/null +++ b/admin/client/src/icons/svg/guide.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/admin/client/src/icons/svg/icon.svg b/admin/client/src/icons/svg/icon.svg new file mode 100644 index 0000000..82be8ee --- /dev/null +++ b/admin/client/src/icons/svg/icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/admin/client/src/icons/svg/international.svg b/admin/client/src/icons/svg/international.svg new file mode 100644 index 0000000..e9b56ee --- /dev/null +++ b/admin/client/src/icons/svg/international.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/admin/client/src/icons/svg/language.svg b/admin/client/src/icons/svg/language.svg new file mode 100644 index 0000000..0082b57 --- /dev/null +++ b/admin/client/src/icons/svg/language.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/admin/client/src/icons/svg/link.svg b/admin/client/src/icons/svg/link.svg new file mode 100644 index 0000000..48197ba --- /dev/null +++ b/admin/client/src/icons/svg/link.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/admin/client/src/icons/svg/list.svg b/admin/client/src/icons/svg/list.svg new file mode 100644 index 0000000..20259ed --- /dev/null +++ b/admin/client/src/icons/svg/list.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/admin/client/src/icons/svg/lock.svg b/admin/client/src/icons/svg/lock.svg new file mode 100644 index 0000000..74fee54 --- /dev/null +++ b/admin/client/src/icons/svg/lock.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/admin/client/src/icons/svg/medal.svg b/admin/client/src/icons/svg/medal.svg new file mode 100644 index 0000000..93be397 --- /dev/null +++ b/admin/client/src/icons/svg/medal.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/admin/client/src/icons/svg/message.svg b/admin/client/src/icons/svg/message.svg new file mode 100644 index 0000000..14ca817 --- /dev/null +++ b/admin/client/src/icons/svg/message.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/admin/client/src/icons/svg/money.svg b/admin/client/src/icons/svg/money.svg new file mode 100644 index 0000000..c1580de --- /dev/null +++ b/admin/client/src/icons/svg/money.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/admin/client/src/icons/svg/nested.svg b/admin/client/src/icons/svg/nested.svg new file mode 100644 index 0000000..06713a8 --- /dev/null +++ b/admin/client/src/icons/svg/nested.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/admin/client/src/icons/svg/password.svg b/admin/client/src/icons/svg/password.svg new file mode 100644 index 0000000..e291d85 --- /dev/null +++ b/admin/client/src/icons/svg/password.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/admin/client/src/icons/svg/pdf.svg b/admin/client/src/icons/svg/pdf.svg new file mode 100644 index 0000000..957aa0c --- /dev/null +++ b/admin/client/src/icons/svg/pdf.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/admin/client/src/icons/svg/people.svg b/admin/client/src/icons/svg/people.svg new file mode 100644 index 0000000..2bd54ae --- /dev/null +++ b/admin/client/src/icons/svg/people.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/admin/client/src/icons/svg/peoples.svg b/admin/client/src/icons/svg/peoples.svg new file mode 100644 index 0000000..aab852e --- /dev/null +++ b/admin/client/src/icons/svg/peoples.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/admin/client/src/icons/svg/position.svg b/admin/client/src/icons/svg/position.svg new file mode 100644 index 0000000..f89f0e0 --- /dev/null +++ b/admin/client/src/icons/svg/position.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/admin/client/src/icons/svg/qq.svg b/admin/client/src/icons/svg/qq.svg new file mode 100644 index 0000000..ee13d4e --- /dev/null +++ b/admin/client/src/icons/svg/qq.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/admin/client/src/icons/svg/search.svg b/admin/client/src/icons/svg/search.svg new file mode 100644 index 0000000..84233dd --- /dev/null +++ b/admin/client/src/icons/svg/search.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/admin/client/src/icons/svg/shopping.svg b/admin/client/src/icons/svg/shopping.svg new file mode 100644 index 0000000..87513e7 --- /dev/null +++ b/admin/client/src/icons/svg/shopping.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/admin/client/src/icons/svg/size.svg b/admin/client/src/icons/svg/size.svg new file mode 100644 index 0000000..ddb25b8 --- /dev/null +++ b/admin/client/src/icons/svg/size.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/admin/client/src/icons/svg/skill.svg b/admin/client/src/icons/svg/skill.svg new file mode 100644 index 0000000..a3b7312 --- /dev/null +++ b/admin/client/src/icons/svg/skill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/admin/client/src/icons/svg/star.svg b/admin/client/src/icons/svg/star.svg new file mode 100644 index 0000000..6cf86e6 --- /dev/null +++ b/admin/client/src/icons/svg/star.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/admin/client/src/icons/svg/tab.svg b/admin/client/src/icons/svg/tab.svg new file mode 100644 index 0000000..b4b48e4 --- /dev/null +++ b/admin/client/src/icons/svg/tab.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/admin/client/src/icons/svg/table.svg b/admin/client/src/icons/svg/table.svg new file mode 100644 index 0000000..0e3dc9d --- /dev/null +++ b/admin/client/src/icons/svg/table.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/admin/client/src/icons/svg/theme.svg b/admin/client/src/icons/svg/theme.svg new file mode 100644 index 0000000..5982a2f --- /dev/null +++ b/admin/client/src/icons/svg/theme.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/admin/client/src/icons/svg/tree-table.svg b/admin/client/src/icons/svg/tree-table.svg new file mode 100644 index 0000000..8aafdb8 --- /dev/null +++ b/admin/client/src/icons/svg/tree-table.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/admin/client/src/icons/svg/tree.svg b/admin/client/src/icons/svg/tree.svg new file mode 100644 index 0000000..dd4b7dd --- /dev/null +++ b/admin/client/src/icons/svg/tree.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/admin/client/src/icons/svg/trophy.svg b/admin/client/src/icons/svg/trophy.svg new file mode 100644 index 0000000..5abd07c --- /dev/null +++ b/admin/client/src/icons/svg/trophy.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/admin/client/src/icons/svg/user.svg b/admin/client/src/icons/svg/user.svg new file mode 100644 index 0000000..0ba0716 --- /dev/null +++ b/admin/client/src/icons/svg/user.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/admin/client/src/icons/svg/video.svg b/admin/client/src/icons/svg/video.svg new file mode 100644 index 0000000..a0fbcdb --- /dev/null +++ b/admin/client/src/icons/svg/video.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/admin/client/src/icons/svg/wechat.svg b/admin/client/src/icons/svg/wechat.svg new file mode 100644 index 0000000..c586e55 --- /dev/null +++ b/admin/client/src/icons/svg/wechat.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/admin/client/src/icons/svg/zip.svg b/admin/client/src/icons/svg/zip.svg new file mode 100644 index 0000000..f806fc4 --- /dev/null +++ b/admin/client/src/icons/svg/zip.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/admin/client/src/icons/svgo.yml b/admin/client/src/icons/svgo.yml new file mode 100644 index 0000000..d11906a --- /dev/null +++ b/admin/client/src/icons/svgo.yml @@ -0,0 +1,22 @@ +# replace default config + +# multipass: true +# full: true + +plugins: + + # - name + # + # or: + # - name: false + # - name: true + # + # or: + # - name: + # param1: 1 + # param2: 2 + +- removeAttrs: + attrs: + - 'fill' + - 'fill-rule' diff --git a/admin/client/src/layout/components/AppMain.vue b/admin/client/src/layout/components/AppMain.vue new file mode 100644 index 0000000..f6a3286 --- /dev/null +++ b/admin/client/src/layout/components/AppMain.vue @@ -0,0 +1,40 @@ + + + + + + + diff --git a/admin/client/src/layout/components/Navbar.vue b/admin/client/src/layout/components/Navbar.vue new file mode 100644 index 0000000..2534892 --- /dev/null +++ b/admin/client/src/layout/components/Navbar.vue @@ -0,0 +1,154 @@ + + + + + diff --git a/admin/client/src/layout/components/Sidebar/FixiOSBug.js b/admin/client/src/layout/components/Sidebar/FixiOSBug.js new file mode 100644 index 0000000..bc14856 --- /dev/null +++ b/admin/client/src/layout/components/Sidebar/FixiOSBug.js @@ -0,0 +1,26 @@ +export default { + computed: { + device() { + return this.$store.state.app.device + } + }, + mounted() { + // In order to fix the click on menu on the ios device will trigger the mouseleave bug + // https://github.com/PanJiaChen/vue-element-admin/issues/1135 + this.fixBugIniOS() + }, + methods: { + fixBugIniOS() { + const $subMenu = this.$refs.subMenu + if ($subMenu) { + const handleMouseleave = $subMenu.handleMouseleave + $subMenu.handleMouseleave = (e) => { + if (this.device === 'mobile') { + return + } + handleMouseleave(e) + } + } + } + } +} diff --git a/admin/client/src/layout/components/Sidebar/Item.vue b/admin/client/src/layout/components/Sidebar/Item.vue new file mode 100644 index 0000000..b515f61 --- /dev/null +++ b/admin/client/src/layout/components/Sidebar/Item.vue @@ -0,0 +1,29 @@ + diff --git a/admin/client/src/layout/components/Sidebar/Link.vue b/admin/client/src/layout/components/Sidebar/Link.vue new file mode 100644 index 0000000..eb4dd10 --- /dev/null +++ b/admin/client/src/layout/components/Sidebar/Link.vue @@ -0,0 +1,36 @@ + + + + diff --git a/admin/client/src/layout/components/Sidebar/Logo.vue b/admin/client/src/layout/components/Sidebar/Logo.vue new file mode 100644 index 0000000..fc7e40a --- /dev/null +++ b/admin/client/src/layout/components/Sidebar/Logo.vue @@ -0,0 +1,82 @@ + + + + + diff --git a/admin/client/src/layout/components/Sidebar/SidebarItem.vue b/admin/client/src/layout/components/Sidebar/SidebarItem.vue new file mode 100644 index 0000000..a418c3d --- /dev/null +++ b/admin/client/src/layout/components/Sidebar/SidebarItem.vue @@ -0,0 +1,95 @@ + + + diff --git a/admin/client/src/layout/components/Sidebar/index.vue b/admin/client/src/layout/components/Sidebar/index.vue new file mode 100644 index 0000000..fb014a2 --- /dev/null +++ b/admin/client/src/layout/components/Sidebar/index.vue @@ -0,0 +1,54 @@ + + + diff --git a/admin/client/src/layout/components/index.js b/admin/client/src/layout/components/index.js new file mode 100644 index 0000000..97ee3cd --- /dev/null +++ b/admin/client/src/layout/components/index.js @@ -0,0 +1,3 @@ +export { default as Navbar } from './Navbar' +export { default as Sidebar } from './Sidebar' +export { default as AppMain } from './AppMain' diff --git a/admin/client/src/layout/index.vue b/admin/client/src/layout/index.vue new file mode 100644 index 0000000..db22a7b --- /dev/null +++ b/admin/client/src/layout/index.vue @@ -0,0 +1,93 @@ + + + + + diff --git a/admin/client/src/layout/mixin/ResizeHandler.js b/admin/client/src/layout/mixin/ResizeHandler.js new file mode 100644 index 0000000..e8d0df8 --- /dev/null +++ b/admin/client/src/layout/mixin/ResizeHandler.js @@ -0,0 +1,45 @@ +import store from '@/store' + +const { body } = document +const WIDTH = 992 // refer to Bootstrap's responsive design + +export default { + watch: { + $route(route) { + if (this.device === 'mobile' && this.sidebar.opened) { + store.dispatch('app/closeSideBar', { withoutAnimation: false }) + } + } + }, + beforeMount() { + window.addEventListener('resize', this.$_resizeHandler) + }, + beforeDestroy() { + window.removeEventListener('resize', this.$_resizeHandler) + }, + mounted() { + const isMobile = this.$_isMobile() + if (isMobile) { + store.dispatch('app/toggleDevice', 'mobile') + store.dispatch('app/closeSideBar', { withoutAnimation: true }) + } + }, + methods: { + // use $_ for mixins properties + // https://vuejs.org/v2/style-guide/index.html#Private-property-names-essential + $_isMobile() { + const rect = body.getBoundingClientRect() + return rect.width - 1 < WIDTH + }, + $_resizeHandler() { + if (!document.hidden) { + const isMobile = this.$_isMobile() + store.dispatch('app/toggleDevice', isMobile ? 'mobile' : 'desktop') + + if (isMobile) { + store.dispatch('app/closeSideBar', { withoutAnimation: true }) + } + } + } + } +} diff --git a/admin/client/src/main.js b/admin/client/src/main.js new file mode 100644 index 0000000..701c67a --- /dev/null +++ b/admin/client/src/main.js @@ -0,0 +1,44 @@ +import Vue from 'vue' + +import 'normalize.css/normalize.css' // A modern alternative to CSS resets + +import ElementUI from 'element-ui' +import 'element-ui/lib/theme-chalk/index.css' +// import locale from 'element-ui/lib/locale/lang/en' // lang i18n + +import '@/styles/index.scss' // global css + +import App from './App' +import store from './store' +import router from './router' + +import '@/icons' // icon +import '@/permission' // permission control +import tableHeight from '@/directive/el-table/index' +Vue.use(tableHeight) +/** + * If you don't want to use mock-server + * you want to use MockJs for mock api + * you can execute: mockXHR() + * + * Currently MockJs will be used in the production environment, + * please remove it before going online ! ! ! + */ +if (process.env.NODE_ENV === 'production') { + const { mockXHR } = require('../mock') + mockXHR() +} + +// set ElementUI lang to EN +// Vue.use(ElementUI, { locale }) +// 如果想要中文版 element-ui,按如下方式声明 +Vue.use(ElementUI, { size: 'medium' }) +Vue.config.productionTip = false + + +new Vue({ + el: '#app', + router, + store, + render: h => h(App) +}) diff --git a/admin/client/src/permission.js b/admin/client/src/permission.js new file mode 100644 index 0000000..d4a08b6 --- /dev/null +++ b/admin/client/src/permission.js @@ -0,0 +1,73 @@ +import router from './router' +import store from './store' +import { Message } from 'element-ui' +import NProgress from 'nprogress' // progress bar +import 'nprogress/nprogress.css' // progress bar style +import { getToken } from '@/utils/auth' // get token from cookie +import getPageTitle from '@/utils/get-page-title' + +NProgress.configure({ showSpinner: false }) // NProgress Configuration + +const whiteList = ['/login'] // no redirect whitelist + +router.beforeEach(async(to, from, next) => { + // start progress bar + NProgress.start() + + // set page title + document.title = getPageTitle(to.meta.title) + + // determine whether the user has logged in + const hasToken = getToken() + + if (hasToken) { + if (to.path === '/login') { + // if is logged in, redirect to the home page + next({ path: '/' }) + NProgress.done() + } else { + // determine whether the user has obtained his permission perms through getInfo + const hasPerms = store.getters.perms && store.getters.perms.length > 0 + if (hasPerms) { + next() + } else { + try { + // get user info + // note: perms must be a object array! such as: ['admin'] or ,['developer','editor'] + const { perms } = await store.dispatch('user/getInfo') + // generate accessible routes map based on perms + const accessRoutes = await store.dispatch('permission/generateRoutes', perms) + + // dynamically add accessible routes + router.addRoutes(accessRoutes) + + // hack method to ensure that addRoutes is complete + // set the replace: true, so the navigation will not leave a history record + next({ ...to, replace: true }) + } catch (error) { + // remove token and go to login page to re-login + await store.dispatch('user/resetToken') + Message.error(error || 'Has Error') + next(`/login?redirect=${to.path}`) + NProgress.done() + } + } + } + } else { + /* has no token*/ + + if (whiteList.indexOf(to.path) !== -1) { + // in the free login whitelist, go directly + next() + } else { + // other pages that do not have permission to access are redirected to the login page. + next(`/login?redirect=${to.path}`) + NProgress.done() + } + } +}) + +router.afterEach(() => { + // finish progress bar + NProgress.done() +}) diff --git a/admin/client/src/router/index.js b/admin/client/src/router/index.js new file mode 100644 index 0000000..d3f2682 --- /dev/null +++ b/admin/client/src/router/index.js @@ -0,0 +1,269 @@ +import Vue from 'vue' +import Router from 'vue-router' + +Vue.use(Router) + +/* Layout */ +import Layout from '@/layout' + +/** + * Note: sub-menu only appear when route children.length >= 1 + * Detail see: https://panjiachen.github.io/vue-element-admin-site/guide/essentials/router-and-nav.html + * + * hidden: true if set true, item will not show in the sidebar(default is false) + * alwaysShow: true if set true, will always show the root menu + * if not set alwaysShow, when item has more than one children route, + * it will becomes nested mode, otherwise not show the root menu + * redirect: noRedirect if set noRedirect will no redirect in the breadcrumb + * name:'router-name' the name is used by (must set!!!) + * meta : { + perms: ['admin','editor'] control the page perms (you can set multiple perms) + title: 'title' the name show in sidebar and breadcrumb (recommend set) + icon: 'svg-name' the icon show in the sidebar + breadcrumb: false if set false, the item will hidden in breadcrumb(default is true) + activeMenu: '/example/list' if set path, the sidebar will highlight the path you set + } + */ + +/** + * constantRoutes + * a base page that does not have permission requirements + * all perms can be accessed + */ +export const constantRoutes = [ + { + path: '/login', + component: () => import('@/views/login/index'), + hidden: true + }, + + { + path: '/404', + component: () => import('@/views/404'), + hidden: true + }, + { + path: '/', + component: Layout, + redirect: '/dashboard', + children: [{ + path: 'dashboard', + name: 'Dashboard', + component: () => import('@/views/dashboard/index'), + meta: { title: '首页', icon: 'dashboard' } + }] + }, + { + path: '/changepassword', + component: Layout, + redirect: '/changepassword', + name: 'ChangePW', + meta: { title: '修改密码', icon: 'tree' }, + hidden:true, + children: [ + { + path: '', + name: 'ChangePassword', + component: () => import('@/views/system/changepassword'), + meta: { title: '修改密码', noCache: true, icon: ''}, + hidden: true + }, + ] + }, + +] + +/** + * asyncRoutes + * the routes that need to be dynamically loaded based on user perms + */ +export const asyncRoutes = [ + { + path: '/crm', + component: Layout, + redirect: '/crm/projects', + name: 'CRM', + meta: { title: '小程序管理', icon: 'wechat' }, + children: [ + { + path: 'projects', + name: 'Projects', + component: () => import('@/views/crm/index'), // 这里的组件只是为了渲染 router-view + redirect: '/crm/projects/training', + meta: { title: '项目管理', icon: 'list' }, + children: [ + { + path: 'training', + name: 'ProjectsTraining', + component: () => import('@/views/crm/project'), + meta: { title: '学位项目', icon: 'education', type: 'training' } + }, + { + path: 'competition', + name: 'ProjectsCompetition', + component: () => import('@/views/crm/project'), + meta: { title: '典礼&论坛', icon: 'trophy', type: 'competition' } + }, + { + path: 'grading', + name: 'ProjectsGrading', + component: () => import('@/views/crm/project'), + meta: { title: '校友活动', icon: 'star', type: 'grading' } + } + ] + }, + { + path: 'teachers', + name: 'Teachers', + component: () => import('@/views/crm/teacher'), + meta: { title: '教学中心', icon: 'user' } + }, + { + path: 'coupons', + name: 'Coupons', + component: () => import('@/views/crm/coupon'), + meta: { title: '优惠券管理', icon: 'money' } + }, + { + path: 'issued-coupons', + name: 'IssuedCoupons', + component: () => import('@/views/crm/issued_coupon'), + meta: { title: '已发优惠券', icon: 'list' } + }, + { + path: 'banners', + name: 'Banners', + component: () => import('@/views/crm/banner'), + meta: { title: '轮播图管理', icon: 'drag' } + }, + { + path: 'students', + name: 'Students', + component: () => import('@/views/crm/student'), + meta: { title: '学员管理', icon: 'peoples' } + }, + { + path: 'honors', + name: 'Honors', + component: () => import('@/views/crm/honor'), + meta: { title: '学员荣誉管理', icon: 'medal' } + }, + { + path: 'showcases', + name: 'Showcases', + component: () => import('@/views/crm/showcase'), + meta: { title: '精彩视频', icon: 'video' } + } + ] + }, + { + path: '/system', + component: Layout, + redirect: '/system/user', + name: 'System', + meta: { title: '系统管理', icon: 'example', perms: ['system_manage'] }, + children: [ + { + path: 'user', + name: 'User', + component: () => import('@/views/system/user.vue'), + meta: { title: '用户管理', icon: 'user', perms: ['user_manage'] } + }, + { + path: 'organization', + name: 'Organization', + component: () => import('@/views/system/organization'), + meta: { title: '部门管理', icon: 'tree', perms: ['org_manage'] } + }, + { + path: 'role', + name: 'Role', + component: () => import('@/views/system/role'), + meta: { title: '角色管理', icon: 'lock', perms: ['role_manage'] } + }, + { + path: 'position', + name: 'Postion', + component: () => import('@/views/system/position'), + meta: { title: '岗位管理', icon: 'position', perms: ['position_manage'] } + }, + { + path: 'dict', + name: 'Dict', + component: () => import('@/views/system/dict'), + meta: { title: '数据字典', icon: 'example', perms: ['dict_manage'] } + }, + { + path: 'file', + name: 'File', + component: () => import('@/views/system/file'), + meta: { title: '文件库', icon: 'documentation', perms: ['file_room'] } + }, + { + path: 'task', + name: 'Task', + component: () => import('@/views/system/task'), + meta: { title: '定时任务', icon: 'list', perms: ['ptask_manage'] } + } + ] + }, + { + path: '/monitor', + component: Layout, + redirect: '/monitor/service', + name: 'Monitor', + meta: { title: '系统监控', icon: 'example', perms: ['monitor_set'] }, + children: [ + { + path: 'service', + name: 'service', + component: () => import('@/views/monitor/service'), + meta: { title: '服务监控', icon: 'example', perms: ['service_manage'] } + } + ] + }, + { + path: '/develop', + component: Layout, + redirect: '/develop/perm', + name: 'Develop', + meta: { title: '开发配置', icon: 'example', perms: ['dev_set'] }, + children: [ + { + path: 'perm', + name: 'Perm', + component: () => import('@/views/system/perm'), + meta: { title: '权限菜单', icon: 'example', perms: ['perm_manage'] } + }, + { + path: 'form-gen-link', + component: Layout, + children: [ + { + path: 'https://jakhuang.github.io/form-generator/', + meta: { title: '表单设计器', icon: 'link', perms: ['dev_form_gen'] } + } + ] + } + ] + }, + + // 404 page must be placed at the end !!! + { path: '*', redirect: '/404', hidden: true } +] + +const createRouter = () => new Router({ + // mode: 'history', // require service support + scrollBehavior: () => ({ y: 0 }), + routes: constantRoutes +}) + +const router = createRouter() + +// Detail see: https://github.com/vuejs/vue-router/issues/1234#issuecomment-357941465 +export function resetRouter() { + const newRouter = createRouter() + router.matcher = newRouter.matcher // reset router +} + +export default router diff --git a/admin/client/src/settings.js b/admin/client/src/settings.js new file mode 100644 index 0000000..585109b --- /dev/null +++ b/admin/client/src/settings.js @@ -0,0 +1,16 @@ +module.exports = { + + title: '管理系统', + + /** + * @type {boolean} true | false + * @description Whether fix the header + */ + fixedHeader: false, + + /** + * @type {boolean} true | false + * @description Whether show the logo in sidebar + */ + sidebarLogo: true +} diff --git a/admin/client/src/store/getters.js b/admin/client/src/store/getters.js new file mode 100644 index 0000000..1854b88 --- /dev/null +++ b/admin/client/src/store/getters.js @@ -0,0 +1,10 @@ +const getters = { + sidebar: state => state.app.sidebar, + device: state => state.app.device, + token: state => state.user.token, + avatar: state => state.user.avatar, + name: state => state.user.name, + perms: state => state.user.perms, + permission_routes: state => state.permission.routes +} +export default getters diff --git a/admin/client/src/store/index.js b/admin/client/src/store/index.js new file mode 100644 index 0000000..6ae5dad --- /dev/null +++ b/admin/client/src/store/index.js @@ -0,0 +1,21 @@ +import Vue from 'vue' +import Vuex from 'vuex' +import getters from './getters' +import app from './modules/app' +import permission from './modules/permission' +import settings from './modules/settings' +import user from './modules/user' + +Vue.use(Vuex) + +const store = new Vuex.Store({ + modules: { + app, + permission, + settings, + user + }, + getters +}) + +export default store diff --git a/admin/client/src/store/modules/app.js b/admin/client/src/store/modules/app.js new file mode 100644 index 0000000..7ea7e33 --- /dev/null +++ b/admin/client/src/store/modules/app.js @@ -0,0 +1,48 @@ +import Cookies from 'js-cookie' + +const state = { + sidebar: { + opened: Cookies.get('sidebarStatus') ? !!+Cookies.get('sidebarStatus') : true, + withoutAnimation: false + }, + device: 'desktop' +} + +const mutations = { + TOGGLE_SIDEBAR: state => { + state.sidebar.opened = !state.sidebar.opened + state.sidebar.withoutAnimation = false + if (state.sidebar.opened) { + Cookies.set('sidebarStatus', 1) + } else { + Cookies.set('sidebarStatus', 0) + } + }, + CLOSE_SIDEBAR: (state, withoutAnimation) => { + Cookies.set('sidebarStatus', 0) + state.sidebar.opened = false + state.sidebar.withoutAnimation = withoutAnimation + }, + TOGGLE_DEVICE: (state, device) => { + state.device = device + } +} + +const actions = { + toggleSideBar({ commit }) { + commit('TOGGLE_SIDEBAR') + }, + closeSideBar({ commit }, { withoutAnimation }) { + commit('CLOSE_SIDEBAR', withoutAnimation) + }, + toggleDevice({ commit }, device) { + commit('TOGGLE_DEVICE', device) + } +} + +export default { + namespaced: true, + state, + mutations, + actions +} diff --git a/admin/client/src/store/modules/permission.js b/admin/client/src/store/modules/permission.js new file mode 100644 index 0000000..1ae691e --- /dev/null +++ b/admin/client/src/store/modules/permission.js @@ -0,0 +1,68 @@ +import { asyncRoutes, constantRoutes } from '@/router' + +/** + * Use meta.perm to determine if the current user has permission + * @param perms + * @param route + */ +function hasPermission(perms, route) { + if (route.meta && route.meta.perms) { + return perms.some(perm => route.meta.perms.includes(perm)) + } else { + return true + } +} + +/** + * Filter asynchronous routing tables by recursion + * @param routes asyncRoutes + * @param perms + */ +export function filterAsyncRoutes(routes, perms) { + const res = [] + + routes.forEach(route => { + const tmp = { ...route } + if (hasPermission(perms, tmp)) { + if (tmp.children) { + tmp.children = filterAsyncRoutes(tmp.children, perms) + } + res.push(tmp) + } + }) + return res +} + +const state = { + routes: [], + addRoutes: [] +} + +const mutations = { + SET_ROUTES: (state, routes) => { + state.addRoutes = routes + state.routes = constantRoutes.concat(routes) + } +} + +const actions = { + generateRoutes({ commit }, perms) { + return new Promise(resolve => { + let accessedRoutes + if (perms.includes('admin')) { + accessedRoutes = asyncRoutes || [] + } else { + accessedRoutes = filterAsyncRoutes(asyncRoutes, perms) + } + commit('SET_ROUTES', accessedRoutes) + resolve(accessedRoutes) + }) + } +} + +export default { + namespaced: true, + state, + mutations, + actions +} diff --git a/admin/client/src/store/modules/settings.js b/admin/client/src/store/modules/settings.js new file mode 100644 index 0000000..aab31a2 --- /dev/null +++ b/admin/client/src/store/modules/settings.js @@ -0,0 +1,31 @@ +import defaultSettings from '@/settings' + +const { showSettings, fixedHeader, sidebarLogo } = defaultSettings + +const state = { + showSettings: showSettings, + fixedHeader: fixedHeader, + sidebarLogo: sidebarLogo +} + +const mutations = { + CHANGE_SETTING: (state, { key, value }) => { + if (state.hasOwnProperty(key)) { + state[key] = value + } + } +} + +const actions = { + changeSetting({ commit }, data) { + commit('CHANGE_SETTING', data) + } +} + +export default { + namespaced: true, + state, + mutations, + actions +} + diff --git a/admin/client/src/store/modules/user.js b/admin/client/src/store/modules/user.js new file mode 100644 index 0000000..3dba2c2 --- /dev/null +++ b/admin/client/src/store/modules/user.js @@ -0,0 +1,108 @@ +import { login, logout, getInfo } from '@/api/user' +import { getToken, setToken, removeToken } from '@/utils/auth' +import { resetRouter } from '@/router' + +const getDefaultState = () => { + return { + token: getToken(), + name: '', + avatar: '', + perms: [] + } +} + +const state = getDefaultState() + +const mutations = { + RESET_STATE: (state) => { + Object.assign(state, getDefaultState()) + }, + SET_TOKEN: (state, token) => { + state.token = token + }, + SET_NAME: (state, name) => { + state.name = name + }, + SET_AVATAR: (state, avatar) => { + state.avatar = avatar + }, + SET_PERMS: (state, perms) => { + state.perms = perms + } +} + +const actions = { + // user login + login({ commit }, userInfo) { + const { username, password } = userInfo + return new Promise((resolve, reject) => { + login({ username: username.trim(), password: password }).then(response => { + const { data } = response + commit('SET_TOKEN', data.access) + setToken(data.access) + resolve() + + }).catch(error => { + reject(error) + }) + }) + }, + + // get user info + getInfo({ commit, state }) { + return new Promise((resolve, reject) => { + getInfo(state.token).then(response => { + const { data } = response + + if (!data) { + reject('验证失败,重新登陆.') + } + + const { perms, name, avatar } = data + + // perms must be a non-empty array + if (!perms || perms.length <= 0) { + reject('没有任何权限!') + } + + commit('SET_PERMS', perms) + commit('SET_NAME', name) + commit('SET_AVATAR', avatar) + resolve(data) + }).catch(error => { + reject(error) + }) + }) + }, + + // user logout + logout({ commit, state }) { + return new Promise((resolve, reject) => { + logout(state.token).then(() => { + removeToken() // must remove token first + resetRouter() + commit('RESET_STATE') + resolve() + }).catch(error => { + reject(error) + }) + }) + }, + + // remove token + resetToken({ commit }) { + return new Promise(resolve => { + removeToken() // must remove token first + commit('RESET_STATE') + resolve() + }) + } +} + +export default { + namespaced: true, + state, + mutations, + actions +} + diff --git a/admin/client/src/styles/element-ui.scss b/admin/client/src/styles/element-ui.scss new file mode 100644 index 0000000..bf345ec --- /dev/null +++ b/admin/client/src/styles/element-ui.scss @@ -0,0 +1,86 @@ +// cover some element-ui styles + +.el-breadcrumb__inner, +.el-breadcrumb__inner a { + font-weight: 400 !important; +} + +.el-upload { + input[type="file"] { + display: none !important; + } +} + +.el-upload__input { + display: none; +} + + +// to fixed https://github.com/ElemeFE/element/issues/2461 +.el-dialog { + transform: none; + left: 0; + position: relative; + margin: 0 auto; +} + +// refine element ui upload +.upload-container { + .el-upload { + width: 100%; + + .el-upload-dragger { + width: 100%; + height: 200px; + } + } +} + +// dropdown +.el-dropdown-menu { + a { + display: block + } +} + +// to fix el-date-picker css style +.el-range-separator { + box-sizing: content-box; +} + +// Modern Button Styles +.el-button { + border-radius: 4px; + font-weight: 500; + + &--primary { + background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); + border: none; + box-shadow: 0 4px 6px rgba(50, 50, 93, 0.11), 0 1px 3px rgba(0, 0, 0, 0.08); + transition: all 0.15s ease; + + &:hover, &:focus { + transform: translateY(-1px); + box-shadow: 0 7px 14px rgba(50, 50, 93, 0.1), 0 3px 6px rgba(0, 0, 0, 0.08); + background: linear-gradient(135deg, #764ba2 0%, #667eea 100%); + } + + &:active { + transform: translateY(1px); + } + } + + &--success { + background: linear-gradient(135deg, #23bdb9 0%, #43e97b 100%); + border: none; + } + + &--danger { + background: linear-gradient(135deg, #ff5858 0%, #f09819 100%); + border: none; + } +} + +.el-tag { + border-radius: 4px; +} diff --git a/admin/client/src/styles/index.scss b/admin/client/src/styles/index.scss new file mode 100644 index 0000000..7da30f9 --- /dev/null +++ b/admin/client/src/styles/index.scss @@ -0,0 +1,143 @@ +@import './variables.scss'; +@import './mixin.scss'; +@import './transition.scss'; +@import './element-ui.scss'; +@import './sidebar.scss'; + +body { + height: 100%; + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + text-rendering: optimizeLegibility; + font-family: "Inter", "Helvetica Neue", Helvetica, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", Arial, sans-serif; + background-color: #f0f2f5; +} + +label { + font-weight: 700; +} + +html { + height: 100%; + box-sizing: border-box; +} + +#app { + height: 100%; +} + +*, +*:before, +*:after { + box-sizing: inherit; +} + +a:focus, +a:active { + outline: none; +} + +a, +a:focus, +a:hover { + cursor: pointer; + color: inherit; + text-decoration: none; +} + +div:focus { + outline: none; +} + +.clearfix { + &:after { + visibility: hidden; + display: block; + font-size: 0; + content: " "; + clear: both; + height: 0; + } +} + +// main-container global css +.app-container { + padding: 20px; + background-color: #f0f2f5; + min-height: calc(100vh - 50px); +} + +.el-table--medium td, .el-table--medium th { + padding: 8px 0; +} +.el-form-item { + margin-bottom: 22px; +} +.el-card { + border-radius: 8px; + border: none; + box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.05); + transition: all 0.3s ease; + + &:hover { + box-shadow: 0 4px 16px 0 rgba(0, 0, 0, 0.1); + } +} +.el-message { + border-radius: 4px; + overflow: hidden; +} +.el-card__body { + padding: 20px; +} +.el-card__header { + padding: 18px 20px; + border-bottom: 1px solid #ebeef5; + font-weight: bold; + font-size: 16px; +} +.el-tabs--border-card>.el-tabs__content { + padding: 15px; +} +.el-dialog__header { + padding: 20px 20px 10px; + font-weight: bold; +} + .el-dialog{ + border-radius: 8px; + box-shadow: 0 8px 24px rgba(0, 0, 0, 0.15); + display: flex; + flex-direction: column; + margin:0 !important; + position:absolute; + top:50%; + left:50%; + transform:translate(-50%,-50%); + /*height:600px;*/ + max-height:calc(100% - 30px); + max-width:calc(100% - 30px); + } +.el-dialog .el-dialog__body{ + flex:1; + overflow: auto; + padding: 20px 24px; +} + +.el-form--label-top .el-form-item__label { + line-height: 16px; +} +.el-button+.el-button { + margin-left: 1px; +} +.el-tabs__header { + margin: 0 0 6px; +} +.pagination-container { + padding: 0px 0px; +} +body .el-table th.gutter{ + display: table-cell!important; +} +.el-dialog__footer{ + padding: 6px 6px 6px; +} diff --git a/admin/client/src/styles/mixin.scss b/admin/client/src/styles/mixin.scss new file mode 100644 index 0000000..36b74bb --- /dev/null +++ b/admin/client/src/styles/mixin.scss @@ -0,0 +1,28 @@ +@mixin clearfix { + &:after { + content: ""; + display: table; + clear: both; + } +} + +@mixin scrollBar { + &::-webkit-scrollbar-track-piece { + background: #d3dce6; + } + + &::-webkit-scrollbar { + width: 6px; + } + + &::-webkit-scrollbar-thumb { + background: #99a9bf; + border-radius: 20px; + } +} + +@mixin relative { + position: relative; + width: 100%; + height: 100%; +} diff --git a/admin/client/src/styles/sidebar.scss b/admin/client/src/styles/sidebar.scss new file mode 100644 index 0000000..3dad4c3 --- /dev/null +++ b/admin/client/src/styles/sidebar.scss @@ -0,0 +1,209 @@ +#app { + + .main-container { + min-height: 100%; + transition: margin-left .28s; + margin-left: $sideBarWidth; + position: relative; + } + + .sidebar-container { + transition: width 0.28s; + width: $sideBarWidth !important; + background-color: $menuBg; + height: 100%; + position: fixed; + font-size: 0px; + top: 0; + bottom: 0; + left: 0; + z-index: 1001; + overflow: hidden; + + // reset element-ui css + .horizontal-collapse-transition { + transition: 0s width ease-in-out, 0s padding-left ease-in-out, 0s padding-right ease-in-out; + } + + .scrollbar-wrapper { + overflow-x: hidden !important; + } + + .el-scrollbar__bar.is-vertical { + right: 0px; + } + + .el-scrollbar { + height: 100%; + } + + &.has-logo { + .el-scrollbar { + height: calc(100% - 50px); + } + } + + .is-horizontal { + display: none; + } + + a { + display: inline-block; + width: 100%; + overflow: hidden; + } + + .svg-icon { + margin-right: 16px; + } + + .el-menu { + border: none; + height: 100%; + width: 100% !important; + } + + // menu hover + .submenu-title-noDropdown, + .el-submenu__title { + &:hover { + background-color: $menuHover !important; + } + } + + .is-active>.el-submenu__title { + color: $subMenuActiveText !important; + } + + & .nest-menu .el-submenu>.el-submenu__title, + & .el-submenu .el-menu-item { + min-width: $sideBarWidth !important; + background-color: $subMenuBg !important; + + &:hover { + background-color: $subMenuHover !important; + } + } + } + + .hideSidebar { + .sidebar-container { + width: 54px !important; + } + + .main-container { + margin-left: 54px; + } + + .submenu-title-noDropdown { + padding: 0 !important; + position: relative; + + .el-tooltip { + padding: 0 !important; + + .svg-icon { + margin-left: 20px; + } + } + } + + .el-submenu { + overflow: hidden; + + &>.el-submenu__title { + padding: 0 !important; + + .svg-icon { + margin-left: 20px; + } + + .el-submenu__icon-arrow { + display: none; + } + } + } + + .el-menu--collapse { + .el-submenu { + &>.el-submenu__title { + &>span { + height: 0; + width: 0; + overflow: hidden; + visibility: hidden; + display: inline-block; + } + } + } + } + } + + .el-menu--collapse .el-menu .el-submenu { + min-width: $sideBarWidth !important; + } + + // mobile responsive + .mobile { + .main-container { + margin-left: 0px; + } + + .sidebar-container { + transition: transform .28s; + width: $sideBarWidth !important; + } + + &.hideSidebar { + .sidebar-container { + pointer-events: none; + transition-duration: 0.3s; + transform: translate3d(-$sideBarWidth, 0, 0); + } + } + } + + .withoutAnimation { + + .main-container, + .sidebar-container { + transition: none; + } + } +} + +// when menu collapsed +.el-menu--vertical { + &>.el-menu { + .svg-icon { + margin-right: 16px; + } + } + + .nest-menu .el-submenu>.el-submenu__title, + .el-menu-item { + &:hover { + // you can use $subMenuHover + background-color: $menuHover !important; + } + } + + // the scroll bar appears when the subMenu is too long + >.el-menu--popup { + max-height: 100vh; + overflow-y: auto; + + &::-webkit-scrollbar-track-piece { + background: #d3dce6; + } + + &::-webkit-scrollbar { + width: 6px; + } + + &::-webkit-scrollbar-thumb { + background: #99a9bf; + border-radius: 20px; + } + } +} diff --git a/admin/client/src/styles/transition.scss b/admin/client/src/styles/transition.scss new file mode 100644 index 0000000..4cb27cc --- /dev/null +++ b/admin/client/src/styles/transition.scss @@ -0,0 +1,48 @@ +// global transition css + +/* fade */ +.fade-enter-active, +.fade-leave-active { + transition: opacity 0.28s; +} + +.fade-enter, +.fade-leave-active { + opacity: 0; +} + +/* fade-transform */ +.fade-transform-leave-active, +.fade-transform-enter-active { + transition: all .5s; +} + +.fade-transform-enter { + opacity: 0; + transform: translateX(-30px); +} + +.fade-transform-leave-to { + opacity: 0; + transform: translateX(30px); +} + +/* breadcrumb transition */ +.breadcrumb-enter-active, +.breadcrumb-leave-active { + transition: all .5s; +} + +.breadcrumb-enter, +.breadcrumb-leave-active { + opacity: 0; + transform: translateX(20px); +} + +.breadcrumb-move { + transition: all .5s; +} + +.breadcrumb-leave-active { + position: absolute; +} diff --git a/admin/client/src/styles/variables.scss b/admin/client/src/styles/variables.scss new file mode 100644 index 0000000..1adb372 --- /dev/null +++ b/admin/client/src/styles/variables.scss @@ -0,0 +1,25 @@ +// sidebar +$menuText:#bfcbd9; +$menuActiveText:#409EFF; +$subMenuActiveText:#f4f4f5; //https://github.com/ElemeFE/element/issues/12951 + +$menuBg:#2b333e; +$menuHover:#1f262f; + +$subMenuBg:#1f262f; +$subMenuHover:#001528; + +$sideBarWidth: 210px; + +// the :export directive is the magic sauce for webpack +// https://www.bluematador.com/blog/how-to-share-variables-between-js-and-sass +:export { + menuText: $menuText; + menuActiveText: $menuActiveText; + subMenuActiveText: $subMenuActiveText; + menuBg: $menuBg; + menuHover: $menuHover; + subMenuBg: $subMenuBg; + subMenuHover: $subMenuHover; + sideBarWidth: $sideBarWidth; +} diff --git a/admin/client/src/utils/auth.js b/admin/client/src/utils/auth.js new file mode 100644 index 0000000..392db62 --- /dev/null +++ b/admin/client/src/utils/auth.js @@ -0,0 +1,25 @@ +import Cookies from 'js-cookie' + +const TokenKey = 'token' + +export function getToken() { + return Cookies.get(TokenKey) +} + +export function setToken(token) { + return Cookies.set(TokenKey, token) +} + +export function removeToken() { + return Cookies.remove(TokenKey) +} + +// export function refreshToken() { +// let token = getToken() +// let data = {"token": token} +// return request({ +// url: '/token/refresh/', +// method: 'post', +// data +// }) +// } diff --git a/admin/client/src/utils/get-page-title.js b/admin/client/src/utils/get-page-title.js new file mode 100644 index 0000000..cfe5800 --- /dev/null +++ b/admin/client/src/utils/get-page-title.js @@ -0,0 +1,10 @@ +import defaultSettings from '@/settings' + +const title = defaultSettings.title || '认证系统' + +export default function getPageTitle(pageTitle) { + if (pageTitle) { + return `${pageTitle} - ${title}` + } + return `${title}` +} diff --git a/admin/client/src/utils/index.js b/admin/client/src/utils/index.js new file mode 100644 index 0000000..722c202 --- /dev/null +++ b/admin/client/src/utils/index.js @@ -0,0 +1,384 @@ +/** + * Created by PanJiaChen on 16/11/18. + */ + +/** + * Parse the time to string + * @param {(Object|string|number)} time + * @param {string} cFormat + * @returns {string | null} + */ +export function parseTime(time, cFormat) { + if (arguments.length === 0) { + return null + } + const format = cFormat || '{y}-{m}-{d} {h}:{i}:{s}' + let date + if (typeof time === 'object') { + date = time + } else { + if ((typeof time === 'string') && (/^[0-9]+$/.test(time))) { + time = parseInt(time) + } + if ((typeof time === 'number') && (time.toString().length === 10)) { + time = time * 1000 + } + date = new Date(time) + } + const formatObj = { + y: date.getFullYear(), + m: date.getMonth() + 1, + d: date.getDate(), + h: date.getHours(), + i: date.getMinutes(), + s: date.getSeconds(), + a: date.getDay() + } + const time_str = format.replace(/{([ymdhisa])+}/g, (result, key) => { + const value = formatObj[key] + // Note: getDay() returns 0 on Sunday + if (key === 'a') { return ['日', '一', '二', '三', '四', '五', '六'][value] } + return value.toString().padStart(2, '0') + }) + return time_str +} + +/** + * @param {number} time + * @param {string} option + * @returns {string} + */ +export function formatTime(time, option) { + if (('' + time).length === 10) { + time = parseInt(time) * 1000 + } else { + time = +time + } + const d = new Date(time) + const now = Date.now() + + const diff = (now - d) / 1000 + + if (diff < 30) { + return '刚刚' + } else if (diff < 3600) { + // less 1 hour + return Math.ceil(diff / 60) + '分钟前' + } else if (diff < 3600 * 24) { + return Math.ceil(diff / 3600) + '小时前' + } else if (diff < 3600 * 24 * 2) { + return '1天前' + } + if (option) { + return parseTime(time, option) + } else { + return ( + d.getMonth() + + 1 + + '月' + + d.getDate() + + '日' + + d.getHours() + + '时' + + d.getMinutes() + + '分' + ) + } +} + +/** + * @param {string} url + * @returns {Object} + */ +export function getQueryObject(url) { + url = url == null ? window.location.href : url + const search = url.substring(url.lastIndexOf('?') + 1) + const obj = {} + const reg = /([^?&=]+)=([^?&=]*)/g + search.replace(reg, (rs, $1, $2) => { + const name = decodeURIComponent($1) + let val = decodeURIComponent($2) + val = String(val) + obj[name] = val + return rs + }) + return obj +} + +/** + * @param {string} input value + * @returns {number} output value + */ +export function byteLength(str) { + // returns the byte length of an utf8 string + let s = str.length + for (var i = str.length - 1; i >= 0; i--) { + const code = str.charCodeAt(i) + if (code > 0x7f && code <= 0x7ff) s++ + else if (code > 0x7ff && code <= 0xffff) s += 2 + if (code >= 0xDC00 && code <= 0xDFFF) i-- + } + return s +} + +/** + * @param {Array} actual + * @returns {Array} + */ +export function cleanArray(actual) { + const newArray = [] + for (let i = 0; i < actual.length; i++) { + if (actual[i]) { + newArray.push(actual[i]) + } + } + return newArray +} + +/** + * @param {Object} json + * @returns {Array} + */ +export function param(json) { + if (!json) return '' + return cleanArray( + Object.keys(json).map(key => { + if (json[key] === undefined) return '' + return encodeURIComponent(key) + '=' + encodeURIComponent(json[key]) + }) + ).join('&') +} + +/** + * @param {string} url + * @returns {Object} + */ +export function param2Obj(url) { + const search = url.split('?')[1] + if (!search) { + return {} + } + return JSON.parse( + '{"' + + decodeURIComponent(search) + .replace(/"/g, '\\"') + .replace(/&/g, '","') + .replace(/=/g, '":"') + .replace(/\+/g, ' ') + + '"}' + ) +} + +/** + * @param {string} val + * @returns {string} + */ +export function html2Text(val) { + const div = document.createElement('div') + div.innerHTML = val + return div.textContent || div.innerText +} + +/** + * Merges two objects, giving the last one precedence + * @param {Object} target + * @param {(Object|Array)} source + * @returns {Object} + */ +export function objectMerge(target, source) { + if (typeof target !== 'object') { + target = {} + } + if (Array.isArray(source)) { + return source.slice() + } + Object.keys(source).forEach(property => { + const sourceProperty = source[property] + if (typeof sourceProperty === 'object') { + target[property] = objectMerge(target[property], sourceProperty) + } else { + target[property] = sourceProperty + } + }) + return target +} + +/** + * @param {HTMLElement} element + * @param {string} className + */ +export function toggleClass(element, className) { + if (!element || !className) { + return + } + let classString = element.className + const nameIndex = classString.indexOf(className) + if (nameIndex === -1) { + classString += '' + className + } else { + classString = + classString.substr(0, nameIndex) + + classString.substr(nameIndex + className.length) + } + element.className = classString +} + +/** + * @param {string} type + * @returns {Date} + */ +export function getTime(type) { + if (type === 'start') { + return new Date().getTime() - 3600 * 1000 * 24 * 90 + } else { + return new Date(new Date().toDateString()) + } +} + +/** + * @param {Function} func + * @param {number} wait + * @param {boolean} immediate + * @return {*} + */ +export function debounce(func, wait, immediate) { + let timeout, args, context, timestamp, result + + const later = function() { + // 据上一次触发时间间隔 + const last = +new Date() - timestamp + + // 上次被包装函数被调用时间间隔 last 小于设定时间间隔 wait + if (last < wait && last > 0) { + timeout = setTimeout(later, wait - last) + } else { + timeout = null + // 如果设定为immediate===true,因为开始边界已经调用过了此处无需调用 + if (!immediate) { + result = func.apply(context, args) + if (!timeout) context = args = null + } + } + } + + return function(...args) { + context = this + timestamp = +new Date() + const callNow = immediate && !timeout + // 如果延时不存在,重新设定延时 + if (!timeout) timeout = setTimeout(later, wait) + if (callNow) { + result = func.apply(context, args) + context = args = null + } + + return result + } +} + +/** + * This is just a simple version of deep copy + * Has a lot of edge cases bug + * If you want to use a perfect deep copy, use lodash's _.cloneDeep + * @param {Object} source + * @returns {Object} + */ +export function deepClone(source) { + if (!source && typeof source !== 'object') { + throw new Error('error arguments', 'deepClone') + } + const targetObj = source.constructor === Array ? [] : {} + Object.keys(source).forEach(keys => { + if (source[keys] && typeof source[keys] === 'object') { + targetObj[keys] = deepClone(source[keys]) + } else { + targetObj[keys] = source[keys] + } + }) + return targetObj +} + +/** + * @param {Array} arr + * @returns {Array} + */ +export function uniqueArr(arr) { + return Array.from(new Set(arr)) +} + +/** + * @returns {string} + */ +export function createUniqueString() { + const timestamp = +new Date() + '' + const randomNum = parseInt((1 + Math.random()) * 65536) + '' + return (+(randomNum + timestamp)).toString(32) +} + +/** + * Check if an element has a class + * @param {HTMLElement} elm + * @param {string} cls + * @returns {boolean} + */ +export function hasClass(ele, cls) { + return !!ele.className.match(new RegExp('(\\s|^)' + cls + '(\\s|$)')) +} + +/** + * Add class to element + * @param {HTMLElement} elm + * @param {string} cls + */ +export function addClass(ele, cls) { + if (!hasClass(ele, cls)) ele.className += ' ' + cls +} + +/** + * Remove class from element + * @param {HTMLElement} elm + * @param {string} cls + */ +export function removeClass(ele, cls) { + if (hasClass(ele, cls)) { + const reg = new RegExp('(\\s|^)' + cls + '(\\s|$)') + ele.className = ele.className.replace(reg, ' ') + } +} + +export function genTree(data) { + const result = [] + if (!Array.isArray(data)) { + return result + } + data.forEach(item => { + delete item.children + }) + const map = {} + data.forEach(item => { + item.label = item.name + if(item.fullname){ + item.label = item.fullname + } + item.value = item.id + map[item.id] = item + }) + data.forEach(item => { + const parent = map[item.parent] + if (parent) { + (parent.children || (parent.children = [])).push(item) + } else { + result.push(item) + } + }) + return result +} + +const arrChange = arr => arr.map(item => { + const res = {} + for (const key in item) { + const _key = key === 'name' ? 'label' : key + res[_key] = Array.isArray(item[key]) ? arrChange(item[key]) : item[key] + } + return res +}) diff --git a/admin/client/src/utils/permission.js b/admin/client/src/utils/permission.js new file mode 100644 index 0000000..217bdeb --- /dev/null +++ b/admin/client/src/utils/permission.js @@ -0,0 +1,27 @@ +import store from '@/store' + +/** + * @param {Array} value + * @returns {Boolean} + * @example see @/views/permission/directive.vue + */ +export default function checkPermission(value) { + if (value && value instanceof Array && value.length > 0) { + const perms = store.getters && store.getters.perms + const permissionperms = value + if (perms.includes('admin')) { + return true + } // 如果是超管,都可以操作 + const hasPermission = perms.some(perm => { + return permissionperms.includes(perm) + }) + + if (!hasPermission) { + return false + } + return true + } else { + console.error(`need perms! Like v-permission="['admin','editor']"`) + return false + } +} diff --git a/admin/client/src/utils/request.js b/admin/client/src/utils/request.js new file mode 100644 index 0000000..da72b1a --- /dev/null +++ b/admin/client/src/utils/request.js @@ -0,0 +1,88 @@ +import axios from 'axios' +import { MessageBox, Message } from 'element-ui' +import store from '@/store' +import { getToken } from '@/utils/auth' + +// create an axios instance +const service = axios.create({ + baseURL: process.env.VUE_APP_BASE_API, // url = base url + request url + // withCredentials: true, // send cookies when cross-domain requests + timeout: 10000 // request timeout +}) + +// request interceptor +service.interceptors.request.use( + config => { + // do something before request is sent + if (store.getters.token) { + // let each request carry token + // ['X-Token'] is a custom headers key + // please modify it according to the actual situation + config.headers['Authorization'] = 'Bearer ' + getToken() + } + return config + }, + error => { + // do something with request error + // console.log(error) // for debug + return Promise.reject(error) + } +) + +// response interceptor +service.interceptors.response.use( + /** + * If you want to get http information such as headers or status + * Please return response => response + */ + + /** + * Determine the request status by custom code + * Here is just an example + * You can also judge the status by HTTP Status Code + */ + response => { + const res = response.data + if(res.code>=200 && res.code<400){ + return res + } + if (res.code === 401) { + if(res.msg.indexOf('No active account')!=-1){ + Message({ + message: '用户名或密码错误', + type: 'error', + duration: 3 * 1000 + }) + }else{ + MessageBox.confirm('认证失败,请重新登陆.', '确认退出', { + confirmButtonText: '重新登陆', + cancelButtonText: '取消', + type: 'warning' + }).then(() => { + store.dispatch('user/resetToken').then(() => { + location.reload() + }) + }) + } + + } else if (res.code >= 400) { + Message({ + message: res.msg || '请求出错', + type: 'error', + duration: 3 * 1000 + }) + return Promise.reject(new Error(res.msg || '请求出错')) + } + }, + error => { + // console.log(error,response) // for debug + Message({ + message: "服务器错误", + type: 'error', + duration: 5 * 1000 + }) + return Promise.reject(error) + } +) + +export default service diff --git a/admin/client/src/utils/scroll-to.js b/admin/client/src/utils/scroll-to.js new file mode 100644 index 0000000..c5d8e04 --- /dev/null +++ b/admin/client/src/utils/scroll-to.js @@ -0,0 +1,58 @@ +Math.easeInOutQuad = function(t, b, c, d) { + t /= d / 2 + if (t < 1) { + return c / 2 * t * t + b + } + t-- + return -c / 2 * (t * (t - 2) - 1) + b +} + +// requestAnimationFrame for Smart Animating http://goo.gl/sx5sts +var requestAnimFrame = (function() { + return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || function(callback) { window.setTimeout(callback, 1000 / 60) } +})() + +/** + * Because it's so fucking difficult to detect the scrolling element, just move them all + * @param {number} amount + */ +function move(amount) { + document.documentElement.scrollTop = amount + document.body.parentNode.scrollTop = amount + document.body.scrollTop = amount +} + +function position() { + return document.documentElement.scrollTop || document.body.parentNode.scrollTop || document.body.scrollTop +} + +/** + * @param {number} to + * @param {number} duration + * @param {Function} callback + */ +export function scrollTo(to, duration, callback) { + const start = position() + const change = to - start + const increment = 20 + let currentTime = 0 + duration = (typeof (duration) === 'undefined') ? 500 : duration + var animateScroll = function() { + // increment the time + currentTime += increment + // find the value with the quadratic in-out easing function + var val = Math.easeInOutQuad(currentTime, start, change, duration) + // move the document.body + move(val) + // do the animation unless its over + if (currentTime < duration) { + requestAnimFrame(animateScroll) + } else { + if (callback && typeof (callback) === 'function') { + // the animation is done so lets callback + callback() + } + } + } + animateScroll() +} diff --git a/admin/client/src/utils/validate.js b/admin/client/src/utils/validate.js new file mode 100644 index 0000000..8d962ad --- /dev/null +++ b/admin/client/src/utils/validate.js @@ -0,0 +1,20 @@ +/** + * Created by PanJiaChen on 16/11/18. + */ + +/** + * @param {string} path + * @returns {Boolean} + */ +export function isExternal(path) { + return /^(https?:|mailto:|tel:)/.test(path) +} + +/** + * @param {string} str + * @returns {Boolean} + */ +export function validUsername(str) { + const valid_map = ['admin', 'editor'] + return valid_map.indexOf(str.trim()) >= 0 +} diff --git a/admin/client/src/vendor/Export2Excel.js b/admin/client/src/vendor/Export2Excel.js new file mode 100644 index 0000000..d8a2af3 --- /dev/null +++ b/admin/client/src/vendor/Export2Excel.js @@ -0,0 +1,220 @@ +/* eslint-disable */ +import { saveAs } from 'file-saver' +import XLSX from 'xlsx' + +function generateArray(table) { + var out = []; + var rows = table.querySelectorAll('tr'); + var ranges = []; + for (var R = 0; R < rows.length; ++R) { + var outRow = []; + var row = rows[R]; + var columns = row.querySelectorAll('td'); + for (var C = 0; C < columns.length; ++C) { + var cell = columns[C]; + var colspan = cell.getAttribute('colspan'); + var rowspan = cell.getAttribute('rowspan'); + var cellValue = cell.innerText; + if (cellValue !== "" && cellValue == +cellValue) cellValue = +cellValue; + + //Skip ranges + ranges.forEach(function (range) { + if (R >= range.s.r && R <= range.e.r && outRow.length >= range.s.c && outRow.length <= range.e.c) { + for (var i = 0; i <= range.e.c - range.s.c; ++i) outRow.push(null); + } + }); + + //Handle Row Span + if (rowspan || colspan) { + rowspan = rowspan || 1; + colspan = colspan || 1; + ranges.push({ + s: { + r: R, + c: outRow.length + }, + e: { + r: R + rowspan - 1, + c: outRow.length + colspan - 1 + } + }); + }; + + //Handle Value + outRow.push(cellValue !== "" ? cellValue : null); + + //Handle Colspan + if (colspan) + for (var k = 0; k < colspan - 1; ++k) outRow.push(null); + } + out.push(outRow); + } + return [out, ranges]; +}; + +function datenum(v, date1904) { + if (date1904) v += 1462; + var epoch = Date.parse(v); + return (epoch - new Date(Date.UTC(1899, 11, 30))) / (24 * 60 * 60 * 1000); +} + +function sheet_from_array_of_arrays(data, opts) { + var ws = {}; + var range = { + s: { + c: 10000000, + r: 10000000 + }, + e: { + c: 0, + r: 0 + } + }; + for (var R = 0; R != data.length; ++R) { + for (var C = 0; C != data[R].length; ++C) { + if (range.s.r > R) range.s.r = R; + if (range.s.c > C) range.s.c = C; + if (range.e.r < R) range.e.r = R; + if (range.e.c < C) range.e.c = C; + var cell = { + v: data[R][C] + }; + if (cell.v == null) continue; + var cell_ref = XLSX.utils.encode_cell({ + c: C, + r: R + }); + + if (typeof cell.v === 'number') cell.t = 'n'; + else if (typeof cell.v === 'boolean') cell.t = 'b'; + else if (cell.v instanceof Date) { + cell.t = 'n'; + cell.z = XLSX.SSF._table[14]; + cell.v = datenum(cell.v); + } else cell.t = 's'; + + ws[cell_ref] = cell; + } + } + if (range.s.c < 10000000) ws['!ref'] = XLSX.utils.encode_range(range); + return ws; +} + +function Workbook() { + if (!(this instanceof Workbook)) return new Workbook(); + this.SheetNames = []; + this.Sheets = {}; +} + +function s2ab(s) { + var buf = new ArrayBuffer(s.length); + var view = new Uint8Array(buf); + for (var i = 0; i != s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF; + return buf; +} + +export function export_table_to_excel(id) { + var theTable = document.getElementById(id); + var oo = generateArray(theTable); + var ranges = oo[1]; + + /* original data */ + var data = oo[0]; + var ws_name = "SheetJS"; + + var wb = new Workbook(), + ws = sheet_from_array_of_arrays(data); + + /* add ranges to worksheet */ + // ws['!cols'] = ['apple', 'banan']; + ws['!merges'] = ranges; + + /* add worksheet to workbook */ + wb.SheetNames.push(ws_name); + wb.Sheets[ws_name] = ws; + + var wbout = XLSX.write(wb, { + bookType: 'xlsx', + bookSST: false, + type: 'binary' + }); + + saveAs(new Blob([s2ab(wbout)], { + type: "application/octet-stream" + }), "test.xlsx") +} + +export function export_json_to_excel({ + multiHeader = [], + header, + data, + filename, + merges = [], + autoWidth = true, + bookType = 'xlsx' +} = {}) { + /* original data */ + filename = filename || 'excel-list' + data = [...data] + data.unshift(header); + + for (let i = multiHeader.length - 1; i > -1; i--) { + data.unshift(multiHeader[i]) + } + + var ws_name = "SheetJS"; + var wb = new Workbook(), + ws = sheet_from_array_of_arrays(data); + + if (merges.length > 0) { + if (!ws['!merges']) ws['!merges'] = []; + merges.forEach(item => { + ws['!merges'].push(XLSX.utils.decode_range(item)) + }) + } + + if (autoWidth) { + /*设置worksheet每列的最大宽度*/ + const colWidth = data.map(row => row.map(val => { + /*先判断是否为null/undefined*/ + if (val == null) { + return { + 'wch': 10 + }; + } + /*再判断是否为中文*/ + else if (val.toString().charCodeAt(0) > 255) { + return { + 'wch': val.toString().length * 2 + }; + } else { + return { + 'wch': val.toString().length + }; + } + })) + /*以第一行为初始值*/ + let result = colWidth[0]; + for (let i = 1; i < colWidth.length; i++) { + for (let j = 0; j < colWidth[i].length; j++) { + if (result[j]['wch'] < colWidth[i][j]['wch']) { + result[j]['wch'] = colWidth[i][j]['wch']; + } + } + } + ws['!cols'] = result; + } + + /* add worksheet to workbook */ + wb.SheetNames.push(ws_name); + wb.Sheets[ws_name] = ws; + + var wbout = XLSX.write(wb, { + bookType: bookType, + bookSST: false, + type: 'binary' + }); + saveAs(new Blob([s2ab(wbout)], { + type: "application/octet-stream" + }), `${filename}.${bookType}`); +} diff --git a/admin/client/src/vendor/Export2Zip.js b/admin/client/src/vendor/Export2Zip.js new file mode 100644 index 0000000..db70707 --- /dev/null +++ b/admin/client/src/vendor/Export2Zip.js @@ -0,0 +1,24 @@ +/* eslint-disable */ +import { saveAs } from 'file-saver' +import JSZip from 'jszip' + +export function export_txt_to_zip(th, jsonData, txtName, zipName) { + const zip = new JSZip() + const txt_name = txtName || 'file' + const zip_name = zipName || 'file' + const data = jsonData + let txtData = `${th}\r\n` + data.forEach((row) => { + let tempStr = '' + tempStr = row.toString() + txtData += `${tempStr}\r\n` + }) + zip.file(`${txt_name}.txt`, txtData) + zip.generateAsync({ + type: "blob" + }).then((blob) => { + saveAs(blob, `${zip_name}.zip`) + }, (err) => { + alert('导出失败') + }) +} diff --git a/admin/client/src/views/404.vue b/admin/client/src/views/404.vue new file mode 100644 index 0000000..18eda34 --- /dev/null +++ b/admin/client/src/views/404.vue @@ -0,0 +1,228 @@ + + + + + diff --git a/admin/client/src/views/crm/banner.vue b/admin/client/src/views/crm/banner.vue new file mode 100644 index 0000000..ca796a9 --- /dev/null +++ b/admin/client/src/views/crm/banner.vue @@ -0,0 +1,242 @@ + + + + + \ No newline at end of file diff --git a/admin/client/src/views/crm/category.vue b/admin/client/src/views/crm/category.vue new file mode 100644 index 0000000..b846e51 --- /dev/null +++ b/admin/client/src/views/crm/category.vue @@ -0,0 +1,174 @@ + + + diff --git a/admin/client/src/views/crm/coupon.vue b/admin/client/src/views/crm/coupon.vue new file mode 100644 index 0000000..9abca0f --- /dev/null +++ b/admin/client/src/views/crm/coupon.vue @@ -0,0 +1,297 @@ + + + diff --git a/admin/client/src/views/crm/honor.vue b/admin/client/src/views/crm/honor.vue new file mode 100644 index 0000000..fcc9903 --- /dev/null +++ b/admin/client/src/views/crm/honor.vue @@ -0,0 +1,277 @@ + + + + + diff --git a/admin/client/src/views/crm/index.vue b/admin/client/src/views/crm/index.vue new file mode 100644 index 0000000..98240ae --- /dev/null +++ b/admin/client/src/views/crm/index.vue @@ -0,0 +1,3 @@ + diff --git a/admin/client/src/views/crm/issued_coupon.vue b/admin/client/src/views/crm/issued_coupon.vue new file mode 100644 index 0000000..a2a0b29 --- /dev/null +++ b/admin/client/src/views/crm/issued_coupon.vue @@ -0,0 +1,175 @@ + + + diff --git a/admin/client/src/views/crm/project.vue b/admin/client/src/views/crm/project.vue new file mode 100644 index 0000000..d5eda57 --- /dev/null +++ b/admin/client/src/views/crm/project.vue @@ -0,0 +1,542 @@ + + + + + \ No newline at end of file diff --git a/admin/client/src/views/crm/showcase.vue b/admin/client/src/views/crm/showcase.vue new file mode 100644 index 0000000..41a255a --- /dev/null +++ b/admin/client/src/views/crm/showcase.vue @@ -0,0 +1,304 @@ + + + diff --git a/admin/client/src/views/crm/student.vue b/admin/client/src/views/crm/student.vue new file mode 100644 index 0000000..cedb182 --- /dev/null +++ b/admin/client/src/views/crm/student.vue @@ -0,0 +1,434 @@ + + + diff --git a/admin/client/src/views/crm/teacher.vue b/admin/client/src/views/crm/teacher.vue new file mode 100644 index 0000000..03937ad --- /dev/null +++ b/admin/client/src/views/crm/teacher.vue @@ -0,0 +1,170 @@ + + + diff --git a/admin/client/src/views/dashboard/components/BarChart.vue b/admin/client/src/views/dashboard/components/BarChart.vue new file mode 100644 index 0000000..e4f859c --- /dev/null +++ b/admin/client/src/views/dashboard/components/BarChart.vue @@ -0,0 +1,94 @@ + + + diff --git a/admin/client/src/views/dashboard/components/LineChart.vue b/admin/client/src/views/dashboard/components/LineChart.vue new file mode 100644 index 0000000..bd7069c --- /dev/null +++ b/admin/client/src/views/dashboard/components/LineChart.vue @@ -0,0 +1,135 @@ + + + diff --git a/admin/client/src/views/dashboard/components/PanelGroup.vue b/admin/client/src/views/dashboard/components/PanelGroup.vue new file mode 100644 index 0000000..1cf6ebb --- /dev/null +++ b/admin/client/src/views/dashboard/components/PanelGroup.vue @@ -0,0 +1,283 @@ + + + + + diff --git a/admin/client/src/views/dashboard/components/PieChart.vue b/admin/client/src/views/dashboard/components/PieChart.vue new file mode 100644 index 0000000..e701dd1 --- /dev/null +++ b/admin/client/src/views/dashboard/components/PieChart.vue @@ -0,0 +1,85 @@ + + + diff --git a/admin/client/src/views/dashboard/index.vue b/admin/client/src/views/dashboard/index.vue new file mode 100644 index 0000000..2eea36a --- /dev/null +++ b/admin/client/src/views/dashboard/index.vue @@ -0,0 +1,129 @@ + + + + + diff --git a/admin/client/src/views/dashboard/mixins/resize.js b/admin/client/src/views/dashboard/mixins/resize.js new file mode 100644 index 0000000..9c559db --- /dev/null +++ b/admin/client/src/views/dashboard/mixins/resize.js @@ -0,0 +1,43 @@ +import { debounce } from '@/utils' + +export default { + data() { + return { + $_sidebarElm: null, + $_resizeHandler: null + } + }, + mounted() { + this.$_resizeHandler = debounce(() => { + if (this.chart) { + this.chart.resize() + } + }, 100) + this.$_initResizeEvent() + this.$_sidebarElm = document.getElementsByClassName('sidebar-container')[0] + if (this.$_sidebarElm) { + this.$_sidebarElm.addEventListener('transitionend', this.$_sidebarResizeHandler) + } + }, + beforeDestroy() { + this.$_destroyResizeEvent() + if (this.$_sidebarElm) { + this.$_sidebarElm.removeEventListener('transitionend', this.$_sidebarResizeHandler) + } + }, + methods: { + // use $_ for mixins properties + // https://vuejs.org/v2/style-guide/index.html#Private-property-names-essential + $_initResizeEvent() { + window.addEventListener('resize', this.$_resizeHandler) + }, + $_destroyResizeEvent() { + window.removeEventListener('resize', this.$_resizeHandler) + }, + $_sidebarResizeHandler(e) { + if (e.propertyName === 'width') { + this.$_resizeHandler() + } + } + } +} diff --git a/admin/client/src/views/form/index.vue b/admin/client/src/views/form/index.vue new file mode 100644 index 0000000..f4d66d3 --- /dev/null +++ b/admin/client/src/views/form/index.vue @@ -0,0 +1,85 @@ + + + + + + diff --git a/admin/client/src/views/login/index.vue b/admin/client/src/views/login/index.vue new file mode 100644 index 0000000..ec4b349 --- /dev/null +++ b/admin/client/src/views/login/index.vue @@ -0,0 +1,246 @@ + + + + + + + diff --git a/admin/client/src/views/monitor/service.vue b/admin/client/src/views/monitor/service.vue new file mode 100644 index 0000000..b9473ff --- /dev/null +++ b/admin/client/src/views/monitor/service.vue @@ -0,0 +1,177 @@ + + + + \ No newline at end of file diff --git a/admin/client/src/views/nested/menu1/index.vue b/admin/client/src/views/nested/menu1/index.vue new file mode 100644 index 0000000..30cb670 --- /dev/null +++ b/admin/client/src/views/nested/menu1/index.vue @@ -0,0 +1,7 @@ + diff --git a/admin/client/src/views/nested/menu1/menu1-1/index.vue b/admin/client/src/views/nested/menu1/menu1-1/index.vue new file mode 100644 index 0000000..27e173a --- /dev/null +++ b/admin/client/src/views/nested/menu1/menu1-1/index.vue @@ -0,0 +1,7 @@ + diff --git a/admin/client/src/views/nested/menu1/menu1-2/index.vue b/admin/client/src/views/nested/menu1/menu1-2/index.vue new file mode 100644 index 0000000..0c86276 --- /dev/null +++ b/admin/client/src/views/nested/menu1/menu1-2/index.vue @@ -0,0 +1,7 @@ + diff --git a/admin/client/src/views/nested/menu1/menu1-2/menu1-2-1/index.vue b/admin/client/src/views/nested/menu1/menu1-2/menu1-2-1/index.vue new file mode 100644 index 0000000..f87d88f --- /dev/null +++ b/admin/client/src/views/nested/menu1/menu1-2/menu1-2-1/index.vue @@ -0,0 +1,5 @@ + diff --git a/admin/client/src/views/nested/menu1/menu1-2/menu1-2-2/index.vue b/admin/client/src/views/nested/menu1/menu1-2/menu1-2-2/index.vue new file mode 100644 index 0000000..d88789f --- /dev/null +++ b/admin/client/src/views/nested/menu1/menu1-2/menu1-2-2/index.vue @@ -0,0 +1,5 @@ + diff --git a/admin/client/src/views/nested/menu1/menu1-3/index.vue b/admin/client/src/views/nested/menu1/menu1-3/index.vue new file mode 100644 index 0000000..f7cd073 --- /dev/null +++ b/admin/client/src/views/nested/menu1/menu1-3/index.vue @@ -0,0 +1,5 @@ + diff --git a/admin/client/src/views/nested/menu2/index.vue b/admin/client/src/views/nested/menu2/index.vue new file mode 100644 index 0000000..19dd48f --- /dev/null +++ b/admin/client/src/views/nested/menu2/index.vue @@ -0,0 +1,5 @@ + diff --git a/admin/client/src/views/system/changepassword.vue b/admin/client/src/views/system/changepassword.vue new file mode 100644 index 0000000..165c218 --- /dev/null +++ b/admin/client/src/views/system/changepassword.vue @@ -0,0 +1,78 @@ + + \ No newline at end of file diff --git a/admin/client/src/views/system/dict.vue b/admin/client/src/views/system/dict.vue new file mode 100644 index 0000000..988feab --- /dev/null +++ b/admin/client/src/views/system/dict.vue @@ -0,0 +1,370 @@ + + + diff --git a/admin/client/src/views/system/file.vue b/admin/client/src/views/system/file.vue new file mode 100644 index 0000000..0819962 --- /dev/null +++ b/admin/client/src/views/system/file.vue @@ -0,0 +1,181 @@ + + diff --git a/admin/client/src/views/system/organization.vue b/admin/client/src/views/system/organization.vue new file mode 100644 index 0000000..a71f2b6 --- /dev/null +++ b/admin/client/src/views/system/organization.vue @@ -0,0 +1,225 @@ + + + diff --git a/admin/client/src/views/system/perm.vue b/admin/client/src/views/system/perm.vue new file mode 100644 index 0000000..ae8a7cf --- /dev/null +++ b/admin/client/src/views/system/perm.vue @@ -0,0 +1,239 @@ + + + diff --git a/admin/client/src/views/system/position.vue b/admin/client/src/views/system/position.vue new file mode 100644 index 0000000..cffc146 --- /dev/null +++ b/admin/client/src/views/system/position.vue @@ -0,0 +1,211 @@ + + + diff --git a/admin/client/src/views/system/role.vue b/admin/client/src/views/system/role.vue new file mode 100644 index 0000000..a19ebd0 --- /dev/null +++ b/admin/client/src/views/system/role.vue @@ -0,0 +1,301 @@ + + + + + diff --git a/admin/client/src/views/system/task.vue b/admin/client/src/views/system/task.vue new file mode 100644 index 0000000..62797e9 --- /dev/null +++ b/admin/client/src/views/system/task.vue @@ -0,0 +1,410 @@ + + diff --git a/admin/client/src/views/system/user.vue b/admin/client/src/views/system/user.vue new file mode 100644 index 0000000..6e33e4d --- /dev/null +++ b/admin/client/src/views/system/user.vue @@ -0,0 +1,378 @@ + + + diff --git a/admin/client/src/views/table/index.vue b/admin/client/src/views/table/index.vue new file mode 100644 index 0000000..a1ed847 --- /dev/null +++ b/admin/client/src/views/table/index.vue @@ -0,0 +1,79 @@ + + + diff --git a/admin/client/src/views/tree/index.vue b/admin/client/src/views/tree/index.vue new file mode 100644 index 0000000..89c6b01 --- /dev/null +++ b/admin/client/src/views/tree/index.vue @@ -0,0 +1,78 @@ + + + + diff --git a/admin/client/src/views/workflow/configuration.vue b/admin/client/src/views/workflow/configuration.vue new file mode 100644 index 0000000..aaee8bc --- /dev/null +++ b/admin/client/src/views/workflow/configuration.vue @@ -0,0 +1,52 @@ + + diff --git a/admin/client/src/views/workflow/customfield.vue b/admin/client/src/views/workflow/customfield.vue new file mode 100644 index 0000000..8013b84 --- /dev/null +++ b/admin/client/src/views/workflow/customfield.vue @@ -0,0 +1,447 @@ + + diff --git a/admin/client/src/views/workflow/index.vue b/admin/client/src/views/workflow/index.vue new file mode 100644 index 0000000..1694c63 --- /dev/null +++ b/admin/client/src/views/workflow/index.vue @@ -0,0 +1,515 @@ + + + + diff --git a/admin/client/src/views/workflow/state.vue b/admin/client/src/views/workflow/state.vue new file mode 100644 index 0000000..237267a --- /dev/null +++ b/admin/client/src/views/workflow/state.vue @@ -0,0 +1,487 @@ + + diff --git a/admin/client/src/views/workflow/test.vue b/admin/client/src/views/workflow/test.vue new file mode 100644 index 0000000..fa06867 --- /dev/null +++ b/admin/client/src/views/workflow/test.vue @@ -0,0 +1,133 @@ + + + + + diff --git a/admin/client/src/views/workflow/ticket.vue b/admin/client/src/views/workflow/ticket.vue new file mode 100644 index 0000000..14971fd --- /dev/null +++ b/admin/client/src/views/workflow/ticket.vue @@ -0,0 +1,1020 @@ + + + + + diff --git a/admin/client/src/views/workflow/ticketDetail.vue b/admin/client/src/views/workflow/ticketDetail.vue new file mode 100644 index 0000000..0b5851d --- /dev/null +++ b/admin/client/src/views/workflow/ticketDetail.vue @@ -0,0 +1,563 @@ + + + + diff --git a/admin/client/src/views/workflow/ticketHandle.vue b/admin/client/src/views/workflow/ticketHandle.vue new file mode 100644 index 0000000..79c92aa --- /dev/null +++ b/admin/client/src/views/workflow/ticketHandle.vue @@ -0,0 +1,816 @@ + + + + diff --git a/admin/client/src/views/workflow/transitions.vue b/admin/client/src/views/workflow/transitions.vue new file mode 100644 index 0000000..d0827f6 --- /dev/null +++ b/admin/client/src/views/workflow/transitions.vue @@ -0,0 +1,267 @@ + + diff --git a/admin/client/src/views/workflow/workFlowTickets.vue b/admin/client/src/views/workflow/workFlowTickets.vue new file mode 100644 index 0000000..84a0ea4 --- /dev/null +++ b/admin/client/src/views/workflow/workFlowTickets.vue @@ -0,0 +1,197 @@ + + + + diff --git a/admin/client/tests/unit/.eslintrc.js b/admin/client/tests/unit/.eslintrc.js new file mode 100644 index 0000000..958d51b --- /dev/null +++ b/admin/client/tests/unit/.eslintrc.js @@ -0,0 +1,5 @@ +module.exports = { + env: { + jest: true + } +} diff --git a/admin/client/tests/unit/components/Breadcrumb.spec.js b/admin/client/tests/unit/components/Breadcrumb.spec.js new file mode 100644 index 0000000..1d94c8f --- /dev/null +++ b/admin/client/tests/unit/components/Breadcrumb.spec.js @@ -0,0 +1,98 @@ +import { mount, createLocalVue } from '@vue/test-utils' +import VueRouter from 'vue-router' +import ElementUI from 'element-ui' +import Breadcrumb from '@/components/Breadcrumb/index.vue' + +const localVue = createLocalVue() +localVue.use(VueRouter) +localVue.use(ElementUI) + +const routes = [ + { + path: '/', + name: 'home', + children: [{ + path: 'dashboard', + name: 'dashboard' + }] + }, + { + path: '/menu', + name: 'menu', + children: [{ + path: 'menu1', + name: 'menu1', + meta: { title: 'menu1' }, + children: [{ + path: 'menu1-1', + name: 'menu1-1', + meta: { title: 'menu1-1' } + }, + { + path: 'menu1-2', + name: 'menu1-2', + redirect: 'noredirect', + meta: { title: 'menu1-2' }, + children: [{ + path: 'menu1-2-1', + name: 'menu1-2-1', + meta: { title: 'menu1-2-1' } + }, + { + path: 'menu1-2-2', + name: 'menu1-2-2' + }] + }] + }] + }] + +const router = new VueRouter({ + routes +}) + +describe('Breadcrumb.vue', () => { + const wrapper = mount(Breadcrumb, { + localVue, + router + }) + it('dashboard', () => { + router.push('/dashboard') + const len = wrapper.findAll('.el-breadcrumb__inner').length + expect(len).toBe(1) + }) + it('normal route', () => { + router.push('/menu/menu1') + const len = wrapper.findAll('.el-breadcrumb__inner').length + expect(len).toBe(2) + }) + it('nested route', () => { + router.push('/menu/menu1/menu1-2/menu1-2-1') + const len = wrapper.findAll('.el-breadcrumb__inner').length + expect(len).toBe(4) + }) + it('no meta.title', () => { + router.push('/menu/menu1/menu1-2/menu1-2-2') + const len = wrapper.findAll('.el-breadcrumb__inner').length + expect(len).toBe(3) + }) + // it('click link', () => { + // router.push('/menu/menu1/menu1-2/menu1-2-2') + // const breadcrumbArray = wrapper.findAll('.el-breadcrumb__inner') + // const second = breadcrumbArray.at(1) + // console.log(breadcrumbArray) + // const href = second.find('a').attributes().href + // expect(href).toBe('#/menu/menu1') + // }) + // it('noRedirect', () => { + // router.push('/menu/menu1/menu1-2/menu1-2-1') + // const breadcrumbArray = wrapper.findAll('.el-breadcrumb__inner') + // const redirectBreadcrumb = breadcrumbArray.at(2) + // expect(redirectBreadcrumb.contains('a')).toBe(false) + // }) + it('last breadcrumb', () => { + router.push('/menu/menu1/menu1-2/menu1-2-1') + const breadcrumbArray = wrapper.findAll('.el-breadcrumb__inner') + const redirectBreadcrumb = breadcrumbArray.at(3) + expect(redirectBreadcrumb.contains('a')).toBe(false) + }) +}) diff --git a/admin/client/tests/unit/components/Hamburger.spec.js b/admin/client/tests/unit/components/Hamburger.spec.js new file mode 100644 index 0000000..01ea303 --- /dev/null +++ b/admin/client/tests/unit/components/Hamburger.spec.js @@ -0,0 +1,18 @@ +import { shallowMount } from '@vue/test-utils' +import Hamburger from '@/components/Hamburger/index.vue' +describe('Hamburger.vue', () => { + it('toggle click', () => { + const wrapper = shallowMount(Hamburger) + const mockFn = jest.fn() + wrapper.vm.$on('toggleClick', mockFn) + wrapper.find('.hamburger').trigger('click') + expect(mockFn).toBeCalled() + }) + it('prop isActive', () => { + const wrapper = shallowMount(Hamburger) + wrapper.setProps({ isActive: true }) + expect(wrapper.contains('.is-active')).toBe(true) + wrapper.setProps({ isActive: false }) + expect(wrapper.contains('.is-active')).toBe(false) + }) +}) diff --git a/admin/client/tests/unit/components/SvgIcon.spec.js b/admin/client/tests/unit/components/SvgIcon.spec.js new file mode 100644 index 0000000..31467a9 --- /dev/null +++ b/admin/client/tests/unit/components/SvgIcon.spec.js @@ -0,0 +1,22 @@ +import { shallowMount } from '@vue/test-utils' +import SvgIcon from '@/components/SvgIcon/index.vue' +describe('SvgIcon.vue', () => { + it('iconClass', () => { + const wrapper = shallowMount(SvgIcon, { + propsData: { + iconClass: 'test' + } + }) + expect(wrapper.find('use').attributes().href).toBe('#icon-test') + }) + it('className', () => { + const wrapper = shallowMount(SvgIcon, { + propsData: { + iconClass: 'test' + } + }) + expect(wrapper.classes().length).toBe(1) + wrapper.setProps({ className: 'test' }) + expect(wrapper.classes().includes('test')).toBe(true) + }) +}) diff --git a/admin/client/tests/unit/utils/formatTime.spec.js b/admin/client/tests/unit/utils/formatTime.spec.js new file mode 100644 index 0000000..24e165b --- /dev/null +++ b/admin/client/tests/unit/utils/formatTime.spec.js @@ -0,0 +1,30 @@ +import { formatTime } from '@/utils/index.js' + +describe('Utils:formatTime', () => { + const d = new Date('2018-07-13 17:54:01') // "2018-07-13 17:54:01" + const retrofit = 5 * 1000 + + it('ten digits timestamp', () => { + expect(formatTime((d / 1000).toFixed(0))).toBe('7月13日17时54分') + }) + it('test now', () => { + expect(formatTime(+new Date() - 1)).toBe('刚刚') + }) + it('less two minute', () => { + expect(formatTime(+new Date() - 60 * 2 * 1000 + retrofit)).toBe('2分钟前') + }) + it('less two hour', () => { + expect(formatTime(+new Date() - 60 * 60 * 2 * 1000 + retrofit)).toBe('2小时前') + }) + it('less one day', () => { + expect(formatTime(+new Date() - 60 * 60 * 24 * 1 * 1000)).toBe('1天前') + }) + it('more than one day', () => { + expect(formatTime(d)).toBe('7月13日17时54分') + }) + it('format', () => { + expect(formatTime(d, '{y}-{m}-{d} {h}:{i}')).toBe('2018-07-13 17:54') + expect(formatTime(d, '{y}-{m}-{d}')).toBe('2018-07-13') + expect(formatTime(d, '{y}/{m}/{d} {h}-{i}')).toBe('2018/07/13 17-54') + }) +}) diff --git a/admin/client/tests/unit/utils/parseTime.spec.js b/admin/client/tests/unit/utils/parseTime.spec.js new file mode 100644 index 0000000..41d1b02 --- /dev/null +++ b/admin/client/tests/unit/utils/parseTime.spec.js @@ -0,0 +1,28 @@ +import { parseTime } from '@/utils/index.js' + +describe('Utils:parseTime', () => { + const d = new Date('2018-07-13 17:54:01') // "2018-07-13 17:54:01" + it('timestamp', () => { + expect(parseTime(d)).toBe('2018-07-13 17:54:01') + }) + it('ten digits timestamp', () => { + expect(parseTime((d / 1000).toFixed(0))).toBe('2018-07-13 17:54:01') + }) + it('new Date', () => { + expect(parseTime(new Date(d))).toBe('2018-07-13 17:54:01') + }) + it('format', () => { + expect(parseTime(d, '{y}-{m}-{d} {h}:{i}')).toBe('2018-07-13 17:54') + expect(parseTime(d, '{y}-{m}-{d}')).toBe('2018-07-13') + expect(parseTime(d, '{y}/{m}/{d} {h}-{i}')).toBe('2018/07/13 17-54') + }) + it('get the day of the week', () => { + expect(parseTime(d, '{a}')).toBe('五') // 星期五 + }) + it('get the day of the week', () => { + expect(parseTime(+d + 1000 * 60 * 60 * 24 * 2, '{a}')).toBe('日') // 星期日 + }) + it('empty argument', () => { + expect(parseTime()).toBeNull() + }) +}) diff --git a/admin/client/tests/unit/utils/validate.spec.js b/admin/client/tests/unit/utils/validate.spec.js new file mode 100644 index 0000000..f774905 --- /dev/null +++ b/admin/client/tests/unit/utils/validate.spec.js @@ -0,0 +1,17 @@ +import { validUsername, isExternal } from '@/utils/validate.js' + +describe('Utils:validate', () => { + it('validUsername', () => { + expect(validUsername('admin')).toBe(true) + expect(validUsername('editor')).toBe(true) + expect(validUsername('xxxx')).toBe(false) + }) + it('isExternal', () => { + expect(isExternal('https://github.com/PanJiaChen/vue-element-admin')).toBe(true) + expect(isExternal('http://github.com/PanJiaChen/vue-element-admin')).toBe(true) + expect(isExternal('github.com/PanJiaChen/vue-element-admin')).toBe(false) + expect(isExternal('/dashboard')).toBe(false) + expect(isExternal('./dashboard')).toBe(false) + expect(isExternal('dashboard')).toBe(false) + }) +}) diff --git a/admin/client/vue.config.js b/admin/client/vue.config.js new file mode 100644 index 0000000..ae2b413 --- /dev/null +++ b/admin/client/vue.config.js @@ -0,0 +1,137 @@ +'use strict' +const path = require('path') +const defaultSettings = require('./src/settings.js') + +function resolve(dir) { + return path.join(__dirname, dir) +} + +const name = defaultSettings.title || 'vue Admin Template' // page title + +// If your port is set to 80, +// use administrator privileges to execute the command line. +// For example, Mac: sudo npm run +// You can change the port by the following methods: +// port = 9528 npm run dev OR npm run dev --port = 9528 +const port = process.env.port || process.env.npm_config_port || 9528 // dev port + +// All configuration item explanations can be find in https://cli.vuejs.org/config/ +module.exports = { + /** + * You will need to set publicPath if you plan to deploy your site under a sub path, + * for example GitHub Pages. If you plan to deploy your site to https://foo.github.io/bar/, + * then publicPath should be set to "/bar/". + * In most cases please use '/' !!! + * Detail: https://cli.vuejs.org/config/#publicpath + */ + publicPath: '/', + outputDir: '../server/dist', + assetsDir: 'static', + lintOnSave: false, //process.env.NODE_ENV === 'development', + productionSourceMap: false, + devServer: { + host: '0.0.0.0', + disableHostCheck: true, + port: port, + open: true, + overlay: { + warnings: false, + errors: true + }, + proxy: { + '/api': { + // target: 'http://localhost:8000', + target: process.env.PROXY_TARGET || 'http://127.0.0.1:8000', + changeOrigin: true + } + }, + // before: require('./mock/mock-server.js') + }, + configureWebpack: { + // provide the app's title in webpack's name field, so that + // it can be accessed in index.html to inject the correct title. + name: name, + resolve: { + alias: { + '@': resolve('src') + } + } + }, + chainWebpack(config) { + config.plugins.delete('preload') // TODO: need test + config.plugins.delete('prefetch') // TODO: need test + + // set svg-sprite-loader + config.module + .rule('svg') + .exclude.add(resolve('src/icons')) + .end() + config.module + .rule('icons') + .test(/\.svg$/) + .include.add(resolve('src/icons')) + .end() + .use('svg-sprite-loader') + .loader('svg-sprite-loader') + .options({ + symbolId: 'icon-[name]' + }) + .end() + + // set preserveWhitespace + config.module + .rule('vue') + .use('vue-loader') + .loader('vue-loader') + .tap(options => { + options.compilerOptions.preserveWhitespace = true + return options + }) + .end() + + config + // https://webpack.js.org/configuration/devtool/#development + .when(process.env.NODE_ENV === 'development', + config => config.devtool('cheap-source-map') + ) + + config + .when(process.env.NODE_ENV !== 'development', + config => { + config + .plugin('ScriptExtHtmlWebpackPlugin') + .after('html') + .use('script-ext-html-webpack-plugin', [{ + // `runtime` must same as runtimeChunk name. default is `runtime` + inline: /runtime\..*\.js$/ + }]) + .end() + config + .optimization.splitChunks({ + chunks: 'all', + cacheGroups: { + libs: { + name: 'chunk-libs', + test: /[\\/]node_modules[\\/]/, + priority: 10, + chunks: 'initial' // only package third parties that are initially dependent + }, + elementUI: { + name: 'chunk-elementUI', // split elementUI into a single package + priority: 20, // the weight needs to be larger than libs and app or it will be packaged into libs or app + test: /[\\/]node_modules[\\/]_?element-ui(.*)/ // in order to adapt to cnpm + }, + commons: { + name: 'chunk-commons', + test: resolve('src/components'), // can customize your rules + minChunks: 3, // minimum common number + priority: 5, + reuseExistingChunk: true + } + } + }) + config.optimization.runtimeChunk('single') + } + ) + } +} diff --git a/admin/docker-compose.yml b/admin/docker-compose.yml new file mode 100644 index 0000000..9373f75 --- /dev/null +++ b/admin/docker-compose.yml @@ -0,0 +1,27 @@ +version: "3" +services: + backend: + build: ./server + ports: + - "8000:80" + environment: + # 生产的话把DJANGO_ENV这个环境变量删了 执行docker-compose build backend 重新构建下镜像 + - DJANGO_ENV=dev + volumes: + - ./server:/code + links: + - redis + frontend: + build: + context: ./client + # 生产用这个 + # dockerfile: Dockerfile + # 开发的话用这个 + dockerfile: Dockerfile_dev + ports: + - "8012:80" + environment: + - PROXY_TARGET=http://backend:80 + redis: + image: redis + command: redis-server --appendonly yes \ No newline at end of file diff --git a/admin/img/dict.png b/admin/img/dict.png new file mode 100644 index 0000000000000000000000000000000000000000..39423315b369313440622924265ac8f2c4efb2f9 GIT binary patch literal 40884 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 z

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

SQc=dj)!~HoZOwq+^by^Mvw?(r4<=v< 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�~+7dF+d%TG$%XUi{Q4fBR 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

H+ef?{#F&bQX?Z?$I!hMCk5 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Ű%q?jv>m${aUi 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�+fWaN^LUm*BWWE4aKHa- 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 K6Aph{-Twn{$#TK~ literal 0 HcmV?d00001 diff --git a/admin/img/user.png b/admin/img/user.png new file mode 100644 index 0000000000000000000000000000000000000000..aa6526a0ced80592a63ba738de83b1a8cdbbc3f8 GIT binary patch literal 49852 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 a3=gX9OxC}$_D!AK+x9;3z1l6Gp87YCgZg9u literal 0 HcmV?d00001 diff --git a/admin/server/.gitignore b/admin/server/.gitignore new file mode 100644 index 0000000..81088be --- /dev/null +++ b/admin/server/.gitignore @@ -0,0 +1,15 @@ +.vscode/ +.vs/ +venv/ +__pycache__/ +*.pyc +media/* +vuedist/* +dist/* +!media/default/ +celerybeat.pid +celerybeat-schedule.bak +celerybeat-schedule.dat +celerybeat-schedule.dir +db.sqlite3 +server/conf.py \ No newline at end of file diff --git a/admin/server/Dockerfile b/admin/server/Dockerfile new file mode 100644 index 0000000..d35db3b --- /dev/null +++ b/admin/server/Dockerfile @@ -0,0 +1,10 @@ +FROM python:3.8-slim +WORKDIR /code +ADD . . +RUN sed -i -re 's/(deb|security)\.debian\.org/mirrors.aliyun.com/g' /etc/apt/sources.list &&\ + apt-get update && apt-get install -y gcc libpq-dev default-libmysqlclient-dev &&\ + apt-get clean && rm -rf /var/lib/apt/lists/* &&\ + pip install --no-cache-dir --trusted-host mirrors.aliyun.com -i https://mirrors.aliyun.com/pypi/simple/ supervisor &&\ + pip install --no-cache-dir --trusted-host mirrors.aliyun.com -i https://mirrors.aliyun.com/pypi/simple/ -r ./requirements.txt +EXPOSE 80 +ENTRYPOINT ["/bin/bash","-C","/code/start.sh"] diff --git a/admin/server/apps/crm/__init__.py b/admin/server/apps/crm/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/admin/server/apps/crm/admin.py b/admin/server/apps/crm/admin.py new file mode 100644 index 0000000..631c887 --- /dev/null +++ b/admin/server/apps/crm/admin.py @@ -0,0 +1,76 @@ +from django.contrib import admin +from .models import Category, Teacher, TeachingCenter, Project, Coupon, Banner, Student, StudentCoupon, StudentHonor, StudentShowcase + +@admin.register(Category) +class CategoryAdmin(admin.ModelAdmin): + list_display = ('name', 'color') + search_fields = ('name',) + +@admin.register(Teacher) +class TeacherAdmin(admin.ModelAdmin): + list_display = ('name', 'phone') + search_fields = ('name', 'phone') + +@admin.register(TeachingCenter) +class TeachingCenterAdmin(admin.ModelAdmin): + list_display = ('name', 'address', 'phone') + search_fields = ('name', 'phone') + +@admin.register(Project) +class ProjectAdmin(admin.ModelAdmin): + # list_display = ('title', 'category', 'students', 'rating', 'created_at') + list_display = ('title', 'teacher', 'students', 'address', 'created_at') + # list_filter = ('category', 'created_at') + list_filter = ('teacher', 'created_at') + search_fields = ('title',) + +@admin.register(Coupon) +class CouponAdmin(admin.ModelAdmin): + list_display = ('title', 'amount', 'unit', 'expiry', 'status', 'issue_type') + list_filter = ('status', 'expiry', 'issue_type') + search_fields = ('title',) + filter_horizontal = ('applicable_projects',) + +@admin.register(Banner) +class BannerAdmin(admin.ModelAdmin): + list_display = ('id', 'image', 'link', 'sort_order', 'is_active') + list_editable = ('sort_order', 'is_active') + +@admin.register(Student) +class StudentAdmin(admin.ModelAdmin): + list_display = ('name', 'phone', 'wechat_nickname', 'openid', 'teaching_center', 'company_name', 'status', 'learning_count', 'created_at') + search_fields = ('name', 'phone', 'wechat_nickname', 'openid', 'company_name') + list_filter = ('teaching_center', 'status') + inlines = [] + +class StudentCouponInline(admin.TabularInline): + model = StudentCoupon + extra = 1 + +StudentAdmin.inlines = [StudentCouponInline] + +@admin.register(StudentCoupon) +class StudentCouponAdmin(admin.ModelAdmin): + list_display = ('student', 'coupon', 'status', 'assigned_at') + list_filter = ('status',) + search_fields = ('student__name', 'coupon__title') + +@admin.register(StudentHonor) +class StudentHonorAdmin(admin.ModelAdmin): + list_display = ('student', 'get_student_center', 'get_student_company', 'title', 'date', 'created_at') + search_fields = ('student__name', 'title', 'student__company_name') + list_filter = ('date',) + + def get_student_center(self, obj): + return obj.student.teaching_center + get_student_center.short_description = '教学中心' + + def get_student_company(self, obj): + return obj.student.company_name + get_student_company.short_description = '公司名称' + +@admin.register(StudentShowcase) +class StudentShowcaseAdmin(admin.ModelAdmin): + list_display = ('title', 'student', 'sort_order', 'is_active', 'created_at') + list_editable = ('sort_order', 'is_active') + search_fields = ('title', 'student__name') diff --git a/admin/server/apps/crm/apps.py b/admin/server/apps/crm/apps.py new file mode 100644 index 0000000..d721574 --- /dev/null +++ b/admin/server/apps/crm/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class CrmConfig(AppConfig): + name = 'apps.crm' + verbose_name = 'CRM客户管理' diff --git a/admin/server/apps/crm/authentication.py b/admin/server/apps/crm/authentication.py new file mode 100644 index 0000000..ed09edb --- /dev/null +++ b/admin/server/apps/crm/authentication.py @@ -0,0 +1,49 @@ +from rest_framework.authentication import BaseAuthentication +from rest_framework.exceptions import AuthenticationFailed +from .models import Student + +class MiniProgramUser: + """ + A proxy user class to represent an authenticated Mini Program student + """ + def __init__(self, student): + self.student = student + self.username = student.name or 'WeChat User' + self.is_authenticated = True + self.is_staff = False + self.is_superuser = False + + def __str__(self): + return self.username + +class MiniProgramAuthentication(BaseAuthentication): + """ + Custom Authentication for WeChat Mini Program + Parses 'Bearer mock_token_{id}' and sets request.user to a proxy user + """ + + def authenticate(self, request): + auth = request.headers.get('Authorization') + if not auth or 'Bearer' not in auth: + return None + + try: + token_str = auth.split(' ')[1] + if not token_str.startswith('mock_token_'): + return None # Let other authenticators (like JWT) handle it + + try: + student_id = int(token_str.split('_')[-1]) + student = Student.objects.get(id=student_id) + except (ValueError, Student.DoesNotExist): + raise AuthenticationFailed('Invalid mini-program token') + + # Create a proxy user + user = MiniProgramUser(student) + + return (user, token_str) + + except AuthenticationFailed: + raise + except Exception: + return None diff --git a/admin/server/apps/crm/management/__init__.py b/admin/server/apps/crm/management/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/admin/server/apps/crm/management/commands/__init__.py b/admin/server/apps/crm/management/commands/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/admin/server/apps/crm/management/commands/init_crm_data.py b/admin/server/apps/crm/management/commands/init_crm_data.py new file mode 100644 index 0000000..1fe6e9b --- /dev/null +++ b/admin/server/apps/crm/management/commands/init_crm_data.py @@ -0,0 +1,104 @@ +from django.core.management.base import BaseCommand +from apps.crm.models import Category, Project, Coupon, Banner, Student +from django.utils import timezone +import random + +class Command(BaseCommand): + help = 'Initialize CRM mock data' + + def handle(self, *args, **options): + self.stdout.write('Cleaning up old data...') + Category.objects.all().delete() + Project.objects.all().delete() + Coupon.objects.all().delete() + Banner.objects.all().delete() + Student.objects.all().delete() + + self.stdout.write('Creating Categories...') + categories_data = [ + {'name': '前端开发', 'color': 'bg-blue-100 text-blue-600'}, + {'name': '后端开发', 'color': 'bg-green-100 text-green-600'}, + {'name': '人工智能', 'color': 'bg-purple-100 text-purple-600'}, + {'name': '移动开发', 'color': 'bg-yellow-100 text-yellow-600'}, + {'name': '运维测试', 'color': 'bg-red-100 text-red-600'}, + ] + categories = [] + for data in categories_data: + cat = Category.objects.create(**data) + categories.append(cat) + self.stdout.write(f'Created category: {cat.name}') + + self.stdout.write('Creating Projects...') + projects_data = [ + {'title': 'Vue3实战教程', 'detail': '深入学习Vue3核心原理与实战应用...'}, + {'title': 'Django REST Framework入门', 'detail': '从零构建RESTful API...'}, + {'title': 'Python数据分析', 'detail': '使用Pandas和NumPy进行数据分析...'}, + {'title': 'Flutter跨平台开发', 'detail': '构建高性能移动应用...'}, + {'title': 'Docker容器化部署', 'detail': '掌握Docker容器技术...'}, + {'title': 'React Hooks进阶', 'detail': '精通React Hooks...'}, + {'title': 'Go语言高并发编程', 'detail': 'Go语言核心特性与并发模式...'}, + {'title': '机器学习基础', 'detail': '常用机器学习算法原理与实现...'}, + {'title': 'iOS Swift开发', 'detail': 'Swift语言基础与iOS应用开发...'}, + {'title': 'Kubernetes集群管理', 'detail': 'K8s集群部署与维护...'}, + ] + + projects = [] + for i, data in enumerate(projects_data): + cat = categories[i % len(categories)] + proj = Project.objects.create( + title=data['title'], + category=cat, + image=f'https://picsum.photos/seed/{i}/800/600', + detail=data['detail'], + students=random.randint(100, 1000), + rating=round(random.uniform(4.0, 5.0), 1), + duration=f'{random.randint(2, 8)} 周' + ) + projects.append(proj) + self.stdout.write(f'Created project: {proj.title}') + + self.stdout.write('Creating Coupons...') + coupons_data = [ + {'amount': '50', 'title': '新人专享券', 'desc': '全场通用,无门槛'}, + {'amount': '100', 'title': '进阶课程券', 'desc': '满500可用'}, + {'amount': '200', 'title': '高级课程券', 'desc': '满1000可用'}, + {'amount': '8.8', 'title': '限时折扣', 'desc': '全场8.8折', 'unit': '折'}, + {'amount': '500', 'title': 'VIP专属', 'desc': 'VIP会员专用'}, + ] + + for data in coupons_data: + Coupon.objects.create( + amount=data['amount'], + unit=data.get('unit', '元'), + title=data['title'], + desc=data['desc'], + expiry=timezone.now().date() + timezone.timedelta(days=random.randint(7, 30)) + ) + self.stdout.write(f'Created coupon: {data["title"]}') + + self.stdout.write('Creating Students...') + for i in range(10): + Student.objects.create( + name=f'学员{i+1}', + phone=f'1380013800{i}', + age=random.randint(18, 35), + education=random.choice(['本科', '硕士', '大专']), + address=f'北京市海淀区某街道{i+1}号', + learning_count=random.randint(1, 5), + coupon_count=random.randint(0, 3), + study_hours=random.randint(10, 100) + ) + self.stdout.write(f'Created student: {i+1}') + + self.stdout.write('Creating Banners...') + for i in range(3): + proj = random.choice(projects) + Banner.objects.create( + image=f'https://picsum.photos/seed/banner{i}/1920/600', + project=proj, + sort_order=i, + is_active=True + ) + self.stdout.write(f'Created banner {i+1} linking to {proj.title}') + + self.stdout.write(self.style.SUCCESS('Successfully initialized mock data')) diff --git a/admin/server/apps/crm/management/commands/populate_degree_ceremony.py b/admin/server/apps/crm/management/commands/populate_degree_ceremony.py new file mode 100644 index 0000000..dbc67ba --- /dev/null +++ b/admin/server/apps/crm/management/commands/populate_degree_ceremony.py @@ -0,0 +1,108 @@ +import random +from django.core.management.base import BaseCommand +from apps.crm.models import Teacher, Project + +class Command(BaseCommand): + help = 'Populate database with mock data for In-service Degrees and Opening Ceremonies' + + def handle(self, *args, **kwargs): + self.stdout.write('Starting to populate degree and ceremony mock data...') + + # 1. Create Professors (Teachers) + self.stdout.write('Creating Professors...') + teachers_data = [ + {'name': '钱教授', 'phone': '13800138005', 'bio': '商学院资深教授,博士生导师,主讲企业战略管理。'}, + {'name': '孙教授', 'phone': '13800138006', 'bio': '心理学系主任,专注组织行为学研究。'}, + {'name': '周老师', 'phone': '13800138007', 'bio': '教务处主任,负责典礼与活动策划。'}, + ] + + teachers = [] + for data in teachers_data: + teacher, created = Teacher.objects.get_or_create(name=data['name'], defaults=data) + if created: + self.stdout.write(f'Created teacher: {teacher.name}') + else: + self.stdout.write(f'Teacher already exists: {teacher.name}') + teachers.append(teacher) + + # 2. Create Projects + self.stdout.write('Creating Projects...') + projects_data = [ + # In-service Degrees (training) + { + 'title': 'MBA工商管理硕士', + 'project_type': 'training', + 'teacher': teachers[0], + 'image': 'https://images.unsplash.com/photo-1454165804606-c3d57bc86b40', + 'detail': '培养具有全球视野、战略思维和卓越领导力的商业领袖。课程涵盖管理经济学、组织行为学、市场营销、财务管理等核心模块。', + 'rating': 4.9, + 'duration': '2年', + 'price': 168000.00, + 'students': 120 + }, + { + 'title': 'EMBA高级工商管理硕士', + 'project_type': 'training', + 'teacher': teachers[0], + 'image': 'https://images.unsplash.com/photo-1556761175-5973dc0f32e7', + 'detail': '专为企业高层管理者设计,通过实战案例教学,提升决策能力和领导艺术。', + 'rating': 5.0, + 'duration': '2年', + 'price': 298000.00, + 'students': 45 + }, + { + 'title': '应用心理学在职研究生', + 'project_type': 'training', + 'teacher': teachers[1], + 'image': 'https://images.unsplash.com/photo-1571260899304-425eee4c7efc', + 'detail': '结合心理学理论与实践,帮助学员掌握心理咨询、EAP服务及人力资源管理中的心理学应用。', + 'rating': 4.8, + 'duration': '1.5年', + 'price': 48000.00, + 'students': 80 + }, + # Opening Ceremonies & Forums (competition) + { + 'title': '2025春季开学典礼', + 'project_type': 'competition', + 'teacher': teachers[2], + 'image': 'https://images.unsplash.com/photo-1523580494863-6f3031224c94', + 'detail': '欢迎2025级新同学加入大家庭,届时将有校长致辞、新生代表发言及入学宣誓环节。', + 'rating': 5.0, + 'duration': '半天', + 'price': 0.00, + 'students': 300 + }, + { + 'title': '2024创新创业高峰论坛', + 'project_type': 'competition', + 'teacher': teachers[0], + 'image': 'https://images.unsplash.com/photo-1475721027767-27a66263adeb', + 'detail': '汇聚行业精英,探讨数字化时代的商业创新机遇与挑战。', + 'rating': 4.9, + 'duration': '1天', + 'price': 1280.00, + 'students': 200 + }, + { + 'title': '2024秋季毕业典礼', + 'project_type': 'competition', + 'teacher': teachers[2], + 'image': 'https://images.unsplash.com/photo-1627556704290-2b1f5853ff78', + 'detail': '见证荣耀时刻,开启人生新篇章。', + 'rating': 5.0, + 'duration': '半天', + 'price': 0.00, + 'students': 150 + } + ] + + for data in projects_data: + proj, created = Project.objects.get_or_create(title=data['title'], defaults=data) + if created: + self.stdout.write(f'Created project: {proj.title}') + else: + self.stdout.write(f'Project already exists: {proj.title}') + + self.stdout.write(self.style.SUCCESS('Successfully populated degree and ceremony mock data!')) diff --git a/admin/server/apps/crm/management/commands/populate_mock_data.py b/admin/server/apps/crm/management/commands/populate_mock_data.py new file mode 100644 index 0000000..5f3077d --- /dev/null +++ b/admin/server/apps/crm/management/commands/populate_mock_data.py @@ -0,0 +1,248 @@ +import random +from datetime import timedelta +from django.core.management.base import BaseCommand +from django.utils import timezone +from apps.crm.models import Category, Teacher, Project, Coupon, Banner, Student, StudentCoupon, StudentProject, StudentHonor + +class Command(BaseCommand): + help = 'Populate database with mock data for demonstration' + + def handle(self, *args, **kwargs): + self.stdout.write('Starting to populate mock data...') + + # 1. Create Categories + self.stdout.write('Creating Categories...') + categories_data = [ + {'name': '少儿编程', 'color': 'bg-blue-100 text-blue-600'}, + {'name': '美术创意', 'color': 'bg-pink-100 text-pink-600'}, + {'name': '口才演讲', 'color': 'bg-purple-100 text-purple-600'}, + {'name': '科学实验', 'color': 'bg-green-100 text-green-600'}, + {'name': '围棋象棋', 'color': 'bg-yellow-100 text-yellow-600'}, + ] + + categories = [] + for data in categories_data: + cat, created = Category.objects.get_or_create(name=data['name'], defaults=data) + categories.append(cat) + + # 2. Create Teachers + self.stdout.write('Creating Teachers...') + teachers_data = [ + {'name': '李老师', 'phone': '13800138001', 'bio': '资深少儿编程讲师,拥有5年教学经验。'}, + {'name': '王老师', 'phone': '13800138002', 'bio': '美术学院毕业,擅长创意美术教学。'}, + {'name': '张老师', 'phone': '13800138003', 'bio': '播音主持专业,专注于少儿口才培养。'}, + {'name': '赵老师', 'phone': '13800138004', 'bio': '科学教育专家,带队多次获得科技大赛奖项。'}, + ] + + teachers = [] + for data in teachers_data: + teacher, created = Teacher.objects.get_or_create(name=data['name'], defaults=data) + teachers.append(teacher) + + # 3. Create Projects + self.stdout.write('Creating Projects...') + projects_data = [ + { + 'title': 'Python趣味编程入门', + 'project_type': 'training', + 'teacher': teachers[0], + 'image': 'https://images.unsplash.com/photo-1526379095098-d400fd0bf935', + 'detail': '通过趣味游戏学习Python编程基础,培养逻辑思维能力。', + 'rating': 4.9, + 'duration': '12 课时' + }, + { + 'title': '创意色彩大师班', + 'project_type': 'training', + 'teacher': teachers[1], + 'image': 'https://images.unsplash.com/photo-1513364776144-60967b0f800f', + 'detail': '探索色彩奥秘,激发艺术潜能,创作属于自己的艺术作品。', + 'rating': 4.8, + 'duration': '8 课时' + }, + { + 'title': '小小主持人特训营', + 'project_type': 'training', + 'teacher': teachers[2], + 'image': 'https://images.unsplash.com/photo-1590602847861-f357a9332bbc', + 'detail': '提升自信心和表达能力,掌握舞台主持技巧。', + 'rating': 5.0, + 'duration': '10 课时' + }, + { + 'title': '全国青少年科技创新大赛', + 'project_type': 'competition', + 'teacher': teachers[3], + 'image': 'https://images.unsplash.com/photo-1532094349884-543bc11b234d', + 'detail': '备战全国大赛,专业导师一对一指导。', + 'rating': 5.0, + 'duration': '全程指导' + }, + { + 'title': '围棋段位考试冲刺', + 'project_type': 'grading', + 'teacher': teachers[0], # Reusing teacher for simplicity + 'image': 'https://images.unsplash.com/photo-1529699211952-734e80c4d42b', + 'detail': '针对段位考试重点难点进行突击训练。', + 'rating': 4.7, + 'duration': '2 周' + } + ] + + projects = [] + for data in projects_data: + proj, created = Project.objects.get_or_create(title=data['title'], defaults=data) + projects.append(proj) + + # 4. Create Coupons + self.stdout.write('Creating Coupons...') + coupons_data = [ + { + 'title': '新人体验券', + 'amount': '50', + 'unit': '元', + 'desc': '全场通用,无门槛', + 'expiry': timezone.now().date() + timedelta(days=30), + 'status': 'available', + 'issue_type': 'registration', + 'color': 'from-blue-500 to-cyan-400', + 'bgStart': 'from-blue-50', + 'bgEnd': 'to-cyan-50', + 'shadow': 'shadow-blue-100' + }, + { + 'title': '课程立减券', + 'amount': '100', + 'unit': '元', + 'desc': '满1000元可用', + 'expiry': timezone.now().date() + timedelta(days=60), + 'status': 'available', + 'issue_type': 'manual', + 'color': 'from-purple-500 to-pink-400', + 'bgStart': 'from-purple-50', + 'bgEnd': 'to-pink-50', + 'shadow': 'shadow-purple-100' + }, + { + 'title': '暑期特惠券', + 'amount': '200', + 'unit': '元', + 'desc': '暑期课程专用', + 'expiry': timezone.now().date() + timedelta(days=90), + 'status': 'available', + 'issue_type': 'manual', + 'color': 'from-orange-500 to-red-400', + 'bgStart': 'from-orange-50', + 'bgEnd': 'to-red-50', + 'shadow': 'shadow-orange-100' + } + ] + + coupons = [] + for data in coupons_data: + coup, created = Coupon.objects.get_or_create(title=data['title'], defaults=data) + coupons.append(coup) + + # 5. Create Banners + self.stdout.write('Creating Banners...') + banners_data = [ + { + 'image': 'https://images.unsplash.com/photo-1503676260728-1c00da094a0b', + 'project': projects[0], + 'sort_order': 1 + }, + { + 'image': 'https://images.unsplash.com/photo-1454165804606-c3d57bc86b40', + 'project': projects[2], + 'sort_order': 2 + } + ] + + for data in banners_data: + Banner.objects.get_or_create(image=data['image'], defaults=data) + + # 6. Create Students + self.stdout.write('Creating Students...') + students_data = [ + { + 'name': '张小明', + 'phone': '13900000001', + 'age': 8, + 'parent': '张伟', + 'teacher': teachers[0], + 'avatar': 'https://images.unsplash.com/photo-1535713875002-d1d0cf377fde' + }, + { + 'name': '李小红', + 'phone': '13900000002', + 'age': 9, + 'parent': '李强', + 'teacher': teachers[1], + 'avatar': 'https://images.unsplash.com/photo-1438761681033-6461ffad8d80' + }, + { + 'name': '王小华', + 'phone': '13900000003', + 'age': 10, + 'parent': '王磊', + 'teacher': teachers[2], + 'avatar': 'https://images.unsplash.com/photo-1599566150163-29194dcaad36' + } + ] + + students = [] + for data in students_data: + stu, created = Student.objects.get_or_create(name=data['name'], phone=data['phone'], defaults=data) + students.append(stu) + + # 7. Create Student Projects (Enrollments) + self.stdout.write('Enrolling Students...') + # Enroll first student in first project + StudentProject.objects.get_or_create( + student=students[0], + project=projects[0], + defaults={'status': 'enrolled'} + ) + # Enroll first student in second project (completed) + StudentProject.objects.get_or_create( + student=students[0], + project=projects[1], + defaults={'status': 'completed', 'completed_at': timezone.now()} + ) + + # 8. Create Student Honors + self.stdout.write('Creating Honors...') + honors_data = [ + { + 'student': students[0], + 'title': '优秀学员奖', + 'date': timezone.now().date() - timedelta(days=10), + 'image': 'https://images.unsplash.com/photo-1579548122080-c35fd6820ecb', + 'description': '在Python编程课程中表现优异,特发此证。' + }, + { + 'student': students[0], + 'title': '小小演说家', + 'date': timezone.now().date() - timedelta(days=50), + 'image': 'https://images.unsplash.com/photo-1579548122080-c35fd6820ecb', + 'description': '在演讲比赛中获得一等奖。' + } + ] + + for data in honors_data: + StudentHonor.objects.get_or_create(student=data['student'], title=data['title'], defaults=data) + + # 9. Assign Coupons to Student + self.stdout.write('Assigning Coupons...') + StudentCoupon.objects.get_or_create( + student=students[0], + coupon=coupons[0], + defaults={'status': 'assigned'} + ) + StudentCoupon.objects.get_or_create( + student=students[0], + coupon=coupons[1], + defaults={'status': 'used', 'used_at': timezone.now()} + ) + + self.stdout.write(self.style.SUCCESS('Successfully populated mock data!')) diff --git a/admin/server/apps/crm/migrations/0001_initial.py b/admin/server/apps/crm/migrations/0001_initial.py new file mode 100644 index 0000000..93f9d61 --- /dev/null +++ b/admin/server/apps/crm/migrations/0001_initial.py @@ -0,0 +1,99 @@ +# Generated by Django 3.2.23 on 2025-11-28 06:13 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='Banner', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('image', models.URLField(verbose_name='图片URL')), + ('link', models.CharField(blank=True, max_length=200, null=True, verbose_name='跳转链接')), + ('sort_order', models.IntegerField(default=0, verbose_name='排序')), + ('is_active', models.BooleanField(default=True, verbose_name='是否启用')), + ], + options={ + 'verbose_name': '轮播图', + 'verbose_name_plural': '轮播图', + 'ordering': ['sort_order'], + }, + ), + migrations.CreateModel( + name='Category', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=50, verbose_name='分类名称')), + ('color', models.CharField(help_text='例如: bg-blue-100 text-blue-600', max_length=50, verbose_name='颜色类名')), + ], + options={ + 'verbose_name': '课程分类', + 'verbose_name_plural': '课程分类', + }, + ), + migrations.CreateModel( + name='Coupon', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('amount', models.CharField(max_length=10, verbose_name='面额')), + ('unit', models.CharField(default='元', max_length=10, verbose_name='单位')), + ('title', models.CharField(max_length=50, verbose_name='优惠券标题')), + ('desc', models.CharField(max_length=100, verbose_name='描述')), + ('expiry', models.DateField(verbose_name='过期时间')), + ('status', models.CharField(choices=[('available', '可领取'), ('claimed', '已领取'), ('used', '已使用'), ('expired', '已过期')], default='available', max_length=20, verbose_name='状态')), + ('color', models.CharField(default='from-blue-500 to-cyan-400', max_length=100, verbose_name='渐变色类名')), + ('bgStart', models.CharField(default='from-blue-50', max_length=50, verbose_name='背景起始色')), + ('bgEnd', models.CharField(default='to-cyan-50', max_length=50, verbose_name='背景结束色')), + ('shadow', models.CharField(default='shadow-blue-100', max_length=50, verbose_name='阴影类名')), + ], + options={ + 'verbose_name': '优惠券', + 'verbose_name_plural': '优惠券', + }, + ), + migrations.CreateModel( + name='Student', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=50, verbose_name='学员姓名')), + ('phone', models.CharField(max_length=20, verbose_name='联系电话')), + ('age', models.IntegerField(blank=True, null=True, verbose_name='年龄')), + ('education', models.CharField(blank=True, max_length=50, null=True, verbose_name='学历')), + ('address', models.CharField(blank=True, max_length=200, null=True, verbose_name='地址')), + ('avatar', models.URLField(default='https://images.unsplash.com/photo-1535713875002-d1d0cf377fde', verbose_name='头像URL')), + ('learning_count', models.IntegerField(default=0, verbose_name='在学课程数')), + ('coupon_count', models.IntegerField(default=0, verbose_name='优惠券数')), + ('study_hours', models.IntegerField(default=0, verbose_name='学习时长(小时)')), + ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='录入时间')), + ], + options={ + 'verbose_name': '学员信息', + 'verbose_name_plural': '学员信息', + }, + ), + migrations.CreateModel( + name='Project', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(max_length=100, verbose_name='项目名称')), + ('image', models.URLField(default='https://images.unsplash.com/photo-1526379095098-d400fd0bf935', verbose_name='封面图片URL')), + ('students', models.IntegerField(default=0, verbose_name='学习人数')), + ('rating', models.DecimalField(decimal_places=1, default=5.0, max_digits=3, verbose_name='评分')), + ('duration', models.CharField(default='4 周', max_length=20, verbose_name='时长')), + ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')), + ('category', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='projects', to='crm.category', verbose_name='所属分类')), + ], + options={ + 'verbose_name': '项目课程', + 'verbose_name_plural': '项目课程', + }, + ), + ] diff --git a/admin/server/apps/crm/migrations/0002_project_detail.py b/admin/server/apps/crm/migrations/0002_project_detail.py new file mode 100644 index 0000000..b5adbc4 --- /dev/null +++ b/admin/server/apps/crm/migrations/0002_project_detail.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.23 on 2025-11-28 07:06 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('crm', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='project', + name='detail', + field=models.TextField(blank=True, default='', verbose_name='项目详情'), + ), + ] diff --git a/admin/server/apps/crm/migrations/0003_banner_project.py b/admin/server/apps/crm/migrations/0003_banner_project.py new file mode 100644 index 0000000..fb7a655 --- /dev/null +++ b/admin/server/apps/crm/migrations/0003_banner_project.py @@ -0,0 +1,19 @@ +# Generated by Django 3.2.23 on 2025-11-28 07:15 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('crm', '0002_project_detail'), + ] + + operations = [ + migrations.AddField( + model_name='banner', + name='project', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='crm.project', verbose_name='关联项目'), + ), + ] diff --git a/admin/server/apps/crm/migrations/0004_auto_20251128_1719.py b/admin/server/apps/crm/migrations/0004_auto_20251128_1719.py new file mode 100644 index 0000000..a9c2bc1 --- /dev/null +++ b/admin/server/apps/crm/migrations/0004_auto_20251128_1719.py @@ -0,0 +1,40 @@ +# Generated by Django 3.2.23 on 2025-11-28 09:19 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('crm', '0003_banner_project'), + ] + + operations = [ + migrations.AddField( + model_name='coupon', + name='applicable_projects', + field=models.ManyToManyField(blank=True, related_name='coupons', to='crm.Project', verbose_name='适用项目'), + ), + migrations.AddField( + model_name='coupon', + name='issue_type', + field=models.CharField(choices=[('manual', '手动发放'), ('registration', '注册赠送'), ('project', '指定项目')], default='manual', max_length=20, verbose_name='发放类型'), + ), + migrations.CreateModel( + name='StudentCoupon', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('status', models.CharField(choices=[('assigned', '已分配'), ('used', '已使用'), ('expired', '已过期')], default='assigned', max_length=20, verbose_name='状态')), + ('assigned_at', models.DateTimeField(auto_now_add=True, verbose_name='分配时间')), + ('used_at', models.DateTimeField(blank=True, null=True, verbose_name='使用时间')), + ('coupon', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='assignments', to='crm.coupon', verbose_name='优惠券')), + ('student', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='student_coupons', to='crm.student', verbose_name='学员')), + ], + options={ + 'verbose_name': '学员优惠券', + 'verbose_name_plural': '学员优惠券', + 'ordering': ['-assigned_at'], + }, + ), + ] diff --git a/admin/server/apps/crm/migrations/0005_remove_student_education_student_parent_and_more.py b/admin/server/apps/crm/migrations/0005_remove_student_education_student_parent_and_more.py new file mode 100644 index 0000000..5f1d579 --- /dev/null +++ b/admin/server/apps/crm/migrations/0005_remove_student_education_student_parent_and_more.py @@ -0,0 +1,27 @@ +# Generated by Django 4.2.26 on 2025-11-29 13:57 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('crm', '0004_auto_20251128_1719'), + ] + + operations = [ + migrations.RemoveField( + model_name='student', + name='education', + ), + migrations.AddField( + model_name='student', + name='parent', + field=models.CharField(blank=True, max_length=50, null=True, verbose_name='家长'), + ), + migrations.AddField( + model_name='student', + name='teacher', + field=models.CharField(blank=True, max_length=50, null=True, verbose_name='负责老师'), + ), + ] diff --git a/admin/server/apps/crm/migrations/0006_student_wechat_nickname.py b/admin/server/apps/crm/migrations/0006_student_wechat_nickname.py new file mode 100644 index 0000000..91874cd --- /dev/null +++ b/admin/server/apps/crm/migrations/0006_student_wechat_nickname.py @@ -0,0 +1,18 @@ +# Generated by Django 4.2.26 on 2025-11-29 14:08 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('crm', '0005_remove_student_education_student_parent_and_more'), + ] + + operations = [ + migrations.AddField( + model_name='student', + name='wechat_nickname', + field=models.CharField(blank=True, max_length=100, null=True, verbose_name='微信昵称'), + ), + ] diff --git a/admin/server/apps/crm/migrations/0007_project_project_type_studentproject.py b/admin/server/apps/crm/migrations/0007_project_project_type_studentproject.py new file mode 100644 index 0000000..0118475 --- /dev/null +++ b/admin/server/apps/crm/migrations/0007_project_project_type_studentproject.py @@ -0,0 +1,36 @@ +# Generated by Django 4.2.26 on 2025-11-29 14:32 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('crm', '0006_student_wechat_nickname'), + ] + + operations = [ + migrations.AddField( + model_name='project', + name='project_type', + field=models.CharField(choices=[('training', '小主持语言培训'), ('competition', '赛事管理'), ('grading', '考级管理')], default='training', max_length=20, verbose_name='项目类型'), + ), + migrations.CreateModel( + name='StudentProject', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('status', models.CharField(choices=[('enrolled', '已报名'), ('completed', '已完成'), ('cancelled', '已取消')], default='enrolled', max_length=20, verbose_name='状态')), + ('enrolled_at', models.DateTimeField(auto_now_add=True, verbose_name='报名时间')), + ('completed_at', models.DateTimeField(blank=True, null=True, verbose_name='完成时间')), + ('project', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='enrollments', to='crm.project', verbose_name='项目')), + ('student', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='enrollments', to='crm.student', verbose_name='学员')), + ], + options={ + 'verbose_name': '学员项目报名', + 'verbose_name_plural': '学员项目报名', + 'ordering': ['-enrolled_at'], + 'unique_together': {('student', 'project')}, + }, + ), + ] diff --git a/admin/server/apps/crm/migrations/0008_teacher_remove_project_category_project_teacher_and_more.py b/admin/server/apps/crm/migrations/0008_teacher_remove_project_category_project_teacher_and_more.py new file mode 100644 index 0000000..fdc8d22 --- /dev/null +++ b/admin/server/apps/crm/migrations/0008_teacher_remove_project_category_project_teacher_and_more.py @@ -0,0 +1,41 @@ +# Generated by Django 4.2.26 on 2025-11-29 14:41 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('crm', '0007_project_project_type_studentproject'), + ] + + operations = [ + migrations.CreateModel( + name='Teacher', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=50, verbose_name='教师姓名')), + ('phone', models.CharField(blank=True, max_length=20, null=True, verbose_name='联系电话')), + ('bio', models.TextField(blank=True, default='', verbose_name='简介')), + ], + options={ + 'verbose_name': '教师', + 'verbose_name_plural': '教师', + }, + ), + migrations.RemoveField( + model_name='project', + name='category', + ), + migrations.AddField( + model_name='project', + name='teacher', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='projects', to='crm.teacher', verbose_name='负责老师'), + ), + migrations.AlterField( + model_name='student', + name='teacher', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='students', to='crm.teacher', verbose_name='负责老师'), + ), + ] diff --git a/admin/server/apps/crm/migrations/0009_studenthonor.py b/admin/server/apps/crm/migrations/0009_studenthonor.py new file mode 100644 index 0000000..07ef299 --- /dev/null +++ b/admin/server/apps/crm/migrations/0009_studenthonor.py @@ -0,0 +1,31 @@ +# Generated by Django 5.2.8 on 2025-11-29 15:34 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('crm', '0008_teacher_remove_project_category_project_teacher_and_more'), + ] + + operations = [ + migrations.CreateModel( + name='StudentHonor', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(max_length=100, verbose_name='荣誉标题')), + ('image', models.URLField(default='https://images.unsplash.com/photo-1579548122080-c35fd6820ecb', verbose_name='证书图片URL')), + ('date', models.DateField(verbose_name='获得日期')), + ('description', models.TextField(blank=True, default='', verbose_name='荣誉描述')), + ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')), + ('student', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='honors', to='crm.student', verbose_name='学员')), + ], + options={ + 'verbose_name': '学员荣誉', + 'verbose_name_plural': '学员荣誉', + 'ordering': ['-date'], + }, + ), + ] diff --git a/admin/server/apps/crm/migrations/0010_studentshowcase.py b/admin/server/apps/crm/migrations/0010_studentshowcase.py new file mode 100644 index 0000000..31d8a06 --- /dev/null +++ b/admin/server/apps/crm/migrations/0010_studentshowcase.py @@ -0,0 +1,33 @@ +# Generated by Django 4.2.26 on 2025-11-29 16:11 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('crm', '0009_studenthonor'), + ] + + operations = [ + migrations.CreateModel( + name='StudentShowcase', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(max_length=100, verbose_name='标题')), + ('cover_image', models.URLField(verbose_name='封面图片URL')), + ('video_url', models.URLField(blank=True, null=True, verbose_name='视频链接URL')), + ('description', models.TextField(blank=True, default='', verbose_name='描述')), + ('sort_order', models.IntegerField(default=0, verbose_name='排序')), + ('is_active', models.BooleanField(default=True, verbose_name='是否启用')), + ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')), + ('student', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='showcases', to='crm.student', verbose_name='关联学员')), + ], + options={ + 'verbose_name': '学员风采', + 'verbose_name_plural': '学员风采', + 'ordering': ['sort_order', '-created_at'], + }, + ), + ] diff --git a/admin/server/apps/crm/migrations/0011_project_price_project_show_price.py b/admin/server/apps/crm/migrations/0011_project_price_project_show_price.py new file mode 100644 index 0000000..8e3ebfb --- /dev/null +++ b/admin/server/apps/crm/migrations/0011_project_price_project_show_price.py @@ -0,0 +1,23 @@ +# Generated by Django 4.2.26 on 2025-12-01 14:22 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('crm', '0010_studentshowcase'), + ] + + operations = [ + migrations.AddField( + model_name='project', + name='price', + field=models.DecimalField(decimal_places=2, default=299.0, max_digits=10, verbose_name='价格'), + ), + migrations.AddField( + model_name='project', + name='show_price', + field=models.BooleanField(default=True, verbose_name='显示价格'), + ), + ] diff --git a/admin/server/apps/crm/migrations/0012_alter_studentcoupon_status.py b/admin/server/apps/crm/migrations/0012_alter_studentcoupon_status.py new file mode 100644 index 0000000..8848b89 --- /dev/null +++ b/admin/server/apps/crm/migrations/0012_alter_studentcoupon_status.py @@ -0,0 +1,18 @@ +# Generated by Django 4.2.26 on 2025-12-01 14:45 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('crm', '0011_project_price_project_show_price'), + ] + + operations = [ + migrations.AlterField( + model_name='studentcoupon', + name='status', + field=models.CharField(choices=[('assigned', '已分配'), ('used', '已使用'), ('expired', '已过期'), ('revoked', '已回收'), ('suspended', '暂停使用')], default='assigned', max_length=20, verbose_name='状态'), + ), + ] diff --git a/admin/server/apps/crm/migrations/0013_student_openid.py b/admin/server/apps/crm/migrations/0013_student_openid.py new file mode 100644 index 0000000..fdc28e0 --- /dev/null +++ b/admin/server/apps/crm/migrations/0013_student_openid.py @@ -0,0 +1,18 @@ +# Generated by Django 4.2.26 on 2025-12-01 16:05 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('crm', '0012_alter_studentcoupon_status'), + ] + + operations = [ + migrations.AddField( + model_name='student', + name='openid', + field=models.CharField(blank=True, max_length=100, null=True, unique=True, verbose_name='微信OpenID'), + ), + ] diff --git a/admin/server/apps/crm/migrations/0014_alter_student_phone.py b/admin/server/apps/crm/migrations/0014_alter_student_phone.py new file mode 100644 index 0000000..e88590f --- /dev/null +++ b/admin/server/apps/crm/migrations/0014_alter_student_phone.py @@ -0,0 +1,18 @@ +# Generated by Django 4.2.26 on 2025-12-01 17:19 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('crm', '0013_student_openid'), + ] + + operations = [ + migrations.AlterField( + model_name='student', + name='phone', + field=models.CharField(blank=True, max_length=20, null=True, verbose_name='联系电话'), + ), + ] diff --git a/admin/server/apps/crm/migrations/0015_auto_20251202_1204.py b/admin/server/apps/crm/migrations/0015_auto_20251202_1204.py new file mode 100644 index 0000000..9535713 --- /dev/null +++ b/admin/server/apps/crm/migrations/0015_auto_20251202_1204.py @@ -0,0 +1,22 @@ +# Generated by Django 3.2.23 on 2025-12-02 04:04 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('crm', '0014_alter_student_phone'), + ] + + operations = [ + migrations.AlterModelOptions( + name='studentshowcase', + options={'ordering': ['sort_order', '-created_at'], 'verbose_name': '精彩视频', 'verbose_name_plural': '精彩视频'}, + ), + migrations.AlterField( + model_name='project', + name='project_type', + field=models.CharField(choices=[('training', '学位项目'), ('competition', '典礼&论坛'), ('grading', '校友活动')], default='training', max_length=20, verbose_name='项目类型'), + ), + ] diff --git a/admin/server/apps/crm/migrations/0016_alter_project_teacher.py b/admin/server/apps/crm/migrations/0016_alter_project_teacher.py new file mode 100644 index 0000000..c289920 --- /dev/null +++ b/admin/server/apps/crm/migrations/0016_alter_project_teacher.py @@ -0,0 +1,19 @@ +# Generated by Django 3.2.23 on 2025-12-02 04:08 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('crm', '0015_auto_20251202_1204'), + ] + + operations = [ + migrations.AlterField( + model_name='project', + name='teacher', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='projects', to='crm.teacher', verbose_name='教学中心'), + ), + ] diff --git a/admin/server/apps/crm/migrations/0017_auto_20251202_1422.py b/admin/server/apps/crm/migrations/0017_auto_20251202_1422.py new file mode 100644 index 0000000..8f1d1e5 --- /dev/null +++ b/admin/server/apps/crm/migrations/0017_auto_20251202_1422.py @@ -0,0 +1,33 @@ +# Generated by Django 3.2.23 on 2025-12-02 06:22 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('crm', '0016_alter_project_teacher'), + ] + + operations = [ + migrations.AddField( + model_name='student', + name='company_name', + field=models.CharField(blank=True, max_length=100, null=True, verbose_name='公司名称'), + ), + migrations.AddField( + model_name='student', + name='teaching_center', + field=models.CharField(blank=True, max_length=100, null=True, verbose_name='关联教学中心'), + ), + migrations.AlterField( + model_name='student', + name='avatar', + field=models.URLField(default='https://images.unsplash.com/photo-1535713875002-d1d0cf377fde', verbose_name='微信头像'), + ), + migrations.AlterField( + model_name='student', + name='openid', + field=models.CharField(blank=True, max_length=100, null=True, unique=True, verbose_name='微信唯一标识'), + ), + ] diff --git a/admin/server/apps/crm/migrations/0018_auto_20251202_1430.py b/admin/server/apps/crm/migrations/0018_auto_20251202_1430.py new file mode 100644 index 0000000..fef74cb --- /dev/null +++ b/admin/server/apps/crm/migrations/0018_auto_20251202_1430.py @@ -0,0 +1,21 @@ +# Generated by Django 3.2.23 on 2025-12-02 06:30 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('crm', '0017_auto_20251202_1422'), + ] + + operations = [ + migrations.RemoveField( + model_name='student', + name='parent', + ), + migrations.RemoveField( + model_name='student', + name='teacher', + ), + ] diff --git a/admin/server/apps/crm/migrations/0019_auto_20251202_1443.py b/admin/server/apps/crm/migrations/0019_auto_20251202_1443.py new file mode 100644 index 0000000..9bcc25d --- /dev/null +++ b/admin/server/apps/crm/migrations/0019_auto_20251202_1443.py @@ -0,0 +1,37 @@ +# Generated by Django 3.2.23 on 2025-12-02 06:43 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('crm', '0018_auto_20251202_1430'), + ] + + operations = [ + migrations.CreateModel( + name='TeachingCenter', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=100, verbose_name='教学中心名称')), + ('address', models.CharField(blank=True, max_length=200, null=True, verbose_name='地址')), + ('phone', models.CharField(blank=True, max_length=20, null=True, verbose_name='联系电话')), + ], + options={ + 'verbose_name': '教学中心', + 'verbose_name_plural': '教学中心', + }, + ), + migrations.AddField( + model_name='student', + name='status', + field=models.CharField(choices=[('ordinary', '普通用户'), ('intention', '意向用户'), ('reading', '在读'), ('graduated', '毕业')], default='ordinary', max_length=20, verbose_name='状态'), + ), + migrations.AlterField( + model_name='student', + name='teaching_center', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='crm.teachingcenter', verbose_name='关联教学中心'), + ), + ] diff --git a/admin/server/apps/crm/migrations/0020_student_teacher.py b/admin/server/apps/crm/migrations/0020_student_teacher.py new file mode 100644 index 0000000..46e429c --- /dev/null +++ b/admin/server/apps/crm/migrations/0020_student_teacher.py @@ -0,0 +1,19 @@ +# Generated by Django 3.2.23 on 2025-12-02 07:28 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('crm', '0019_auto_20251202_1443'), + ] + + operations = [ + migrations.AddField( + model_name='student', + name='teacher', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='students', to='crm.teacher', verbose_name='负责老师'), + ), + ] diff --git a/admin/server/apps/crm/migrations/0021_alter_studentproject_status.py b/admin/server/apps/crm/migrations/0021_alter_studentproject_status.py new file mode 100644 index 0000000..9b9489b --- /dev/null +++ b/admin/server/apps/crm/migrations/0021_alter_studentproject_status.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.23 on 2025-12-03 04:20 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('crm', '0020_student_teacher'), + ] + + operations = [ + migrations.AlterField( + model_name='studentproject', + name='status', + field=models.CharField(choices=[('enrolled', '已报名'), ('studying', '在读'), ('graduated', '毕业'), ('completed', '已完成'), ('cancelled', '已取消')], default='enrolled', max_length=20, verbose_name='状态'), + ), + ] diff --git a/admin/server/apps/crm/migrations/0022_auto_20251203_1637.py b/admin/server/apps/crm/migrations/0022_auto_20251203_1637.py new file mode 100644 index 0000000..e60bfa8 --- /dev/null +++ b/admin/server/apps/crm/migrations/0022_auto_20251203_1637.py @@ -0,0 +1,37 @@ +# Generated by Django 3.2.23 on 2025-12-03 08:37 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('crm', '0021_alter_studentproject_status'), + ] + + operations = [ + migrations.AlterModelOptions( + name='project', + options={'ordering': ['-is_top', 'sort_order', '-created_at'], 'verbose_name': '项目课程', 'verbose_name_plural': '项目课程'}, + ), + migrations.AddField( + model_name='project', + name='is_top', + field=models.BooleanField(default=False, verbose_name='是否置顶'), + ), + migrations.AddField( + model_name='project', + name='sort_order', + field=models.IntegerField(default=0, verbose_name='排序'), + ), + migrations.AlterField( + model_name='project', + name='project_type', + field=models.CharField(choices=[('training', '在职项目'), ('competition', '典礼&论坛'), ('grading', '校友活动')], default='training', max_length=20, verbose_name='项目类型'), + ), + migrations.AlterField( + model_name='studentproject', + name='status', + field=models.CharField(choices=[('enrolled', '已报名'), ('studying', '在读'), ('graduated', '毕业'), ('finished', '结束')], default='enrolled', max_length=20, verbose_name='状态'), + ), + ] diff --git a/admin/server/apps/crm/migrations/0023_auto_20251203_1645.py b/admin/server/apps/crm/migrations/0023_auto_20251203_1645.py new file mode 100644 index 0000000..76208c4 --- /dev/null +++ b/admin/server/apps/crm/migrations/0023_auto_20251203_1645.py @@ -0,0 +1,22 @@ +# Generated by Django 3.2.23 on 2025-12-03 08:45 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('crm', '0022_auto_20251203_1637'), + ] + + operations = [ + migrations.RemoveField( + model_name='project', + name='rating', + ), + migrations.AddField( + model_name='project', + name='address', + field=models.CharField(blank=True, default='', max_length=200, verbose_name='地址'), + ), + ] diff --git a/admin/server/apps/crm/migrations/0024_project_custom_teacher.py b/admin/server/apps/crm/migrations/0024_project_custom_teacher.py new file mode 100644 index 0000000..7c026c1 --- /dev/null +++ b/admin/server/apps/crm/migrations/0024_project_custom_teacher.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.23 on 2025-12-03 08:52 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('crm', '0023_auto_20251203_1645'), + ] + + operations = [ + migrations.AddField( + model_name='project', + name='custom_teacher', + field=models.CharField(blank=True, default='', max_length=100, verbose_name='自定义教学中心'), + ), + ] diff --git a/admin/server/apps/crm/migrations/0025_auto_20251204_1044.py b/admin/server/apps/crm/migrations/0025_auto_20251204_1044.py new file mode 100644 index 0000000..aec2620 --- /dev/null +++ b/admin/server/apps/crm/migrations/0025_auto_20251204_1044.py @@ -0,0 +1,27 @@ +# Generated by Django 3.2.23 on 2025-12-04 02:44 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('crm', '0024_project_custom_teacher'), + ] + + operations = [ + migrations.AlterModelOptions( + name='teacher', + options={'verbose_name': '教学与管理中心', 'verbose_name_plural': '教学与管理中心'}, + ), + migrations.AddField( + model_name='project', + name='is_active', + field=models.BooleanField(default=True, verbose_name='是否启用'), + ), + migrations.AlterField( + model_name='teacher', + name='name', + field=models.CharField(max_length=50, verbose_name='教学与管理中心'), + ), + ] diff --git a/admin/server/apps/crm/migrations/0026_student_position.py b/admin/server/apps/crm/migrations/0026_student_position.py new file mode 100644 index 0000000..c9b814f --- /dev/null +++ b/admin/server/apps/crm/migrations/0026_student_position.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.23 on 2025-12-04 07:05 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('crm', '0025_auto_20251204_1044'), + ] + + operations = [ + migrations.AddField( + model_name='student', + name='position', + field=models.CharField(blank=True, max_length=100, null=True, verbose_name='职位'), + ), + ] diff --git a/admin/server/apps/crm/migrations/0027_coupon_is_time_limited.py b/admin/server/apps/crm/migrations/0027_coupon_is_time_limited.py new file mode 100644 index 0000000..6b6a024 --- /dev/null +++ b/admin/server/apps/crm/migrations/0027_coupon_is_time_limited.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.23 on 2025-12-05 05:50 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('crm', '0026_student_position'), + ] + + operations = [ + migrations.AddField( + model_name='coupon', + name='is_time_limited', + field=models.BooleanField(default=False, verbose_name='是否限时优惠'), + ), + ] diff --git a/admin/server/apps/crm/migrations/__init__.py b/admin/server/apps/crm/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/admin/server/apps/crm/models.py b/admin/server/apps/crm/models.py new file mode 100644 index 0000000..13e40c1 --- /dev/null +++ b/admin/server/apps/crm/models.py @@ -0,0 +1,305 @@ +from django.db import models +from apps.system.models import User +from django.db.models.signals import post_save, post_delete +from django.dispatch import receiver + +class Category(models.Model): + name = models.CharField(max_length=50, verbose_name="分类名称") + color = models.CharField(max_length=50, verbose_name="颜色类名", help_text="例如: bg-blue-100 text-blue-600") + + class Meta: + verbose_name = "课程分类" + verbose_name_plural = verbose_name + + def __str__(self): + return self.name + +class Teacher(models.Model): + name = models.CharField(max_length=50, verbose_name="教学与管理中心") + phone = models.CharField(max_length=20, verbose_name="联系电话", null=True, blank=True) + bio = models.TextField(verbose_name="简介", blank=True, default="") + + class Meta: + verbose_name = "教学与管理中心" + verbose_name_plural = verbose_name + + def __str__(self): + return self.name + +class TeachingCenter(models.Model): + name = models.CharField(max_length=100, verbose_name="教学中心名称") + address = models.CharField(max_length=200, verbose_name="地址", null=True, blank=True) + phone = models.CharField(max_length=20, verbose_name="联系电话", null=True, blank=True) + + class Meta: + verbose_name = "教学中心" + verbose_name_plural = verbose_name + + def __str__(self): + return self.name + +class Project(models.Model): + PROJECT_TYPE_CHOICES = ( + ('training', '在职项目'), + ('competition', '典礼&论坛'), + ('grading', '校友活动'), + ) + title = models.CharField(max_length=100, verbose_name="项目名称") + project_type = models.CharField(max_length=20, choices=PROJECT_TYPE_CHOICES, default='training', verbose_name="项目类型") + # category = models.ForeignKey(Category, on_delete=models.CASCADE, verbose_name="所属分类", related_name="projects") + teacher = models.ForeignKey(Teacher, on_delete=models.SET_NULL, null=True, blank=True, verbose_name="教学中心", related_name="projects") + custom_teacher = models.CharField(max_length=100, verbose_name="自定义教学中心", default="", blank=True) + image = models.URLField(verbose_name="封面图片URL", default="https://images.unsplash.com/photo-1526379095098-d400fd0bf935") + detail = models.TextField(verbose_name="项目详情", blank=True, default="") + students = models.IntegerField(default=0, verbose_name="学习人数") + address = models.CharField(max_length=200, verbose_name="地址", default="", blank=True) + duration = models.CharField(max_length=20, verbose_name="时长", default="4 周") + price = models.DecimalField(max_digits=10, decimal_places=2, default=299.00, verbose_name="价格") + show_price = models.BooleanField(default=True, verbose_name="显示价格") + sort_order = models.IntegerField(default=0, verbose_name="排序") + is_top = models.BooleanField(default=False, verbose_name="是否置顶") + is_active = models.BooleanField(default=True, verbose_name="是否启用") + created_at = models.DateTimeField(auto_now_add=True, verbose_name="创建时间") + + class Meta: + verbose_name = "项目课程" + verbose_name_plural = verbose_name + ordering = ['-is_top', 'sort_order', '-created_at'] + + def __str__(self): + return self.title + +class Coupon(models.Model): + STATUS_CHOICES = ( + ('available', '可领取'), + ('claimed', '已领取'), + ('used', '已使用'), + ('expired', '已过期'), + ) + ISSUE_CHOICES = ( + ('manual', '手动发放'), + ('registration', '注册赠送'), + ('project', '指定项目'), + ) + + amount = models.CharField(max_length=10, verbose_name="面额") + unit = models.CharField(max_length=10, verbose_name="单位", default="元") + title = models.CharField(max_length=50, verbose_name="优惠券标题") + desc = models.CharField(max_length=100, verbose_name="描述") + expiry = models.DateField(verbose_name="过期时间") + is_time_limited = models.BooleanField(default=False, verbose_name="是否限时优惠") + status = models.CharField(max_length=20, choices=STATUS_CHOICES, default='available', verbose_name="状态") + issue_type = models.CharField(max_length=20, choices=ISSUE_CHOICES, default='manual', verbose_name="发放类型") + applicable_projects = models.ManyToManyField(Project, blank=True, related_name="coupons", verbose_name="适用项目") + + # UI样式字段 + color = models.CharField(max_length=100, verbose_name="渐变色类名", default="from-blue-500 to-cyan-400") + bgStart = models.CharField(max_length=50, verbose_name="背景起始色", default="from-blue-50") + bgEnd = models.CharField(max_length=50, verbose_name="背景结束色", default="to-cyan-50") + shadow = models.CharField(max_length=50, verbose_name="阴影类名", default="shadow-blue-100") + + class Meta: + verbose_name = "优惠券" + verbose_name_plural = verbose_name + + def __str__(self): + return self.title + +class Banner(models.Model): + image = models.URLField(verbose_name="图片URL") + project = models.ForeignKey(Project, on_delete=models.SET_NULL, null=True, blank=True, verbose_name="关联项目") + link = models.CharField(max_length=200, blank=True, null=True, verbose_name="跳转链接") + sort_order = models.IntegerField(default=0, verbose_name="排序") + is_active = models.BooleanField(default=True, verbose_name="是否启用") + + class Meta: + verbose_name = "轮播图" + verbose_name_plural = verbose_name + ordering = ['sort_order'] + + def __str__(self): + return f"Banner {self.id}" + +class Student(models.Model): + name = models.CharField(max_length=50, verbose_name="学员姓名") + phone = models.CharField(max_length=20, verbose_name="联系电话", null=True, blank=True) + age = models.IntegerField(verbose_name="年龄", null=True, blank=True) + wechat_nickname = models.CharField(max_length=100, verbose_name="微信昵称", null=True, blank=True) + # 已经有了openid字段,所以这里不需要重复添加,只需要确保名称正确即可。 + # 原有 openid 字段定义: openid = models.CharField(max_length=100, verbose_name="微信OpenID", null=True, blank=True, unique=True) + # 用户需求是“微信唯一标识”,这通常指 OpenID。 + openid = models.CharField(max_length=100, verbose_name="微信唯一标识", null=True, blank=True, unique=True) + # parent = models.CharField(max_length=50, verbose_name="家长", null=True, blank=True) + teacher = models.ForeignKey(Teacher, on_delete=models.SET_NULL, null=True, blank=True, verbose_name="负责老师", related_name="students") + address = models.CharField(max_length=200, verbose_name="地址", null=True, blank=True) + # 已经有avatar字段,对应微信头像 + avatar = models.URLField(verbose_name="微信头像", default="https://images.unsplash.com/photo-1535713875002-d1d0cf377fde") + + # 新增字段 + teaching_center = models.ForeignKey(TeachingCenter, on_delete=models.SET_NULL, null=True, blank=True, verbose_name="关联教学中心") + company_name = models.CharField(max_length=100, verbose_name="公司名称", null=True, blank=True) + position = models.CharField(max_length=100, verbose_name="职位", null=True, blank=True) + + STATUS_CHOICES = ( + ('ordinary', '普通用户'), + ('intention', '意向用户'), + ('reading', '在读'), + ('graduated', '毕业'), + ) + status = models.CharField(max_length=20, choices=STATUS_CHOICES, default='ordinary', verbose_name="状态") + + # 统计数据 + learning_count = models.IntegerField(default=0, verbose_name="在学课程数") + coupon_count = models.IntegerField(default=0, verbose_name="优惠券数") + study_hours = models.IntegerField(default=0, verbose_name="学习时长(小时)") + + created_at = models.DateTimeField(auto_now_add=True, verbose_name="录入时间") + + class Meta: + verbose_name = "学员信息" + verbose_name_plural = verbose_name + + def __str__(self): + return self.name + +class StudentCoupon(models.Model): + STATUS_CHOICES = ( + ('assigned', '已分配'), + ('used', '已使用'), + ('expired', '已过期'), + ('revoked', '已回收'), + ('suspended', '暂停使用'), + ) + student = models.ForeignKey(Student, on_delete=models.CASCADE, related_name="student_coupons", verbose_name="学员") + coupon = models.ForeignKey(Coupon, on_delete=models.CASCADE, related_name="assignments", verbose_name="优惠券") + status = models.CharField(max_length=20, choices=STATUS_CHOICES, default='assigned', verbose_name="状态") + assigned_at = models.DateTimeField(auto_now_add=True, verbose_name="分配时间") + used_at = models.DateTimeField(null=True, blank=True, verbose_name="使用时间") + + class Meta: + verbose_name = "学员优惠券" + verbose_name_plural = verbose_name + ordering = ['-assigned_at'] + + def __str__(self): + return f"{self.student.name} - {self.coupon.title}" + +@receiver(post_save, sender=StudentCoupon) +def update_student_coupon_count_on_save(sender, instance, created, **kwargs): + student = instance.student + student.coupon_count = StudentCoupon.objects.filter(student=student, status='assigned').count() + student.save(update_fields=['coupon_count']) + +@receiver(post_delete, sender=StudentCoupon) +def update_student_coupon_count_on_delete(sender, instance, **kwargs): + try: + student = instance.student + # Only update if student still exists (avoid error when deleting student triggers cascade) + if Student.objects.filter(pk=student.pk).exists(): + student.coupon_count = StudentCoupon.objects.filter(student=student, status='assigned').count() + student.save(update_fields=['coupon_count']) + except Exception: + pass + +class StudentProject(models.Model): + STATUS_CHOICES = ( + ('enrolled', '已报名'), + ('studying', '在读'), + ('graduated', '毕业'), + ('finished', '结束'), + ) + student = models.ForeignKey(Student, on_delete=models.CASCADE, related_name="enrollments", verbose_name="学员") + project = models.ForeignKey(Project, on_delete=models.CASCADE, related_name="enrollments", verbose_name="项目") + status = models.CharField(max_length=20, choices=STATUS_CHOICES, default='enrolled', verbose_name="状态") + enrolled_at = models.DateTimeField(auto_now_add=True, verbose_name="报名时间") + completed_at = models.DateTimeField(blank=True, null=True, verbose_name="完成时间") + + class Meta: + verbose_name = "学员项目报名" + verbose_name_plural = verbose_name + ordering = ['-enrolled_at'] + unique_together = ('student', 'project') + + def __str__(self): + return f"{self.student.name} - {self.project.title}" + +@receiver(post_save, sender=StudentProject) +def update_student_learning_count_on_save(sender, instance, created, **kwargs): + student = instance.student + # Count projects with status 'enrolled' or 'studying' + count = StudentProject.objects.filter( + student=student, + status__in=['enrolled', 'studying'] + ).count() + student.learning_count = count + student.save(update_fields=['learning_count']) + +@receiver(post_delete, sender=StudentProject) +def update_student_learning_count_on_delete(sender, instance, **kwargs): + try: + student = instance.student + if Student.objects.filter(pk=student.pk).exists(): + count = StudentProject.objects.filter( + student=student, + status__in=['enrolled', 'studying'] + ).count() + student.learning_count = count + student.save(update_fields=['learning_count']) + except Exception: + pass + +class StudentHonor(models.Model): + student = models.ForeignKey(Student, on_delete=models.CASCADE, related_name="honors", verbose_name="学员") + title = models.CharField(max_length=100, verbose_name="荣誉标题") + image = models.URLField(verbose_name="证书图片URL", default="https://images.unsplash.com/photo-1579548122080-c35fd6820ecb") + date = models.DateField(verbose_name="获得日期") + description = models.TextField(verbose_name="荣誉描述", blank=True, default="") + created_at = models.DateTimeField(auto_now_add=True, verbose_name="创建时间") + + class Meta: + verbose_name = "学员荣誉" + verbose_name_plural = verbose_name + ordering = ['-date'] + + def __str__(self): + return f"{self.student.name} - {self.title}" + +class StudentShowcase(models.Model): + title = models.CharField(max_length=100, verbose_name="标题") + cover_image = models.URLField(verbose_name="封面图片URL") + video_url = models.URLField(verbose_name="视频链接URL", blank=True, null=True) + description = models.TextField(verbose_name="描述", blank=True, default="") + student = models.ForeignKey(Student, on_delete=models.SET_NULL, null=True, blank=True, verbose_name="关联学员", related_name="showcases") + sort_order = models.IntegerField(default=0, verbose_name="排序") + is_active = models.BooleanField(default=True, verbose_name="是否启用") + created_at = models.DateTimeField(auto_now_add=True, verbose_name="创建时间") + + class Meta: + verbose_name = "精彩视频" + verbose_name_plural = verbose_name + ordering = ['sort_order', '-created_at'] + + def __str__(self): + return self.title + +@receiver(post_save, sender=Student) +def activate_coupons_on_phone_bind(sender, instance, created, **kwargs): + # If we are just updating coupon_count or learning_count, do not trigger coupon issuance + update_fields = kwargs.get('update_fields') + if update_fields: + # Allow if other fields are present, but if ONLY these statistics are updated, skip. + ignored_fields = {'coupon_count', 'learning_count'} + if set(update_fields).issubset(ignored_fields): + return + + if instance.phone: + # 自动发放注册类型的优惠券 + reg_coupons = Coupon.objects.filter(issue_type='registration', status='available') + for coupon in reg_coupons: + # Use filter().exists() to check for existence to avoid MultipleObjectsReturned error + if not StudentCoupon.objects.filter(student=instance, coupon=coupon).exists(): + StudentCoupon.objects.create( + student=instance, + coupon=coupon, + status='assigned' + ) diff --git a/admin/server/apps/crm/serializers.py b/admin/server/apps/crm/serializers.py new file mode 100644 index 0000000..b1454e0 --- /dev/null +++ b/admin/server/apps/crm/serializers.py @@ -0,0 +1,129 @@ +from rest_framework import serializers +from .models import Category, Teacher, TeachingCenter, Project, Coupon, Banner, Student, StudentCoupon, StudentProject, StudentHonor, StudentShowcase + +class CategorySerializer(serializers.ModelSerializer): + class Meta: + model = Category + fields = '__all__' + +class TeacherSerializer(serializers.ModelSerializer): + class Meta: + model = Teacher + fields = '__all__' + +class TeachingCenterSerializer(serializers.ModelSerializer): + class Meta: + model = TeachingCenter + fields = '__all__' + +class ProjectSerializer(serializers.ModelSerializer): + # category_name = serializers.CharField(source='category.name', read_only=True) + # category_color = serializers.CharField(source='category.color', read_only=True) + teacher_name = serializers.SerializerMethodField() + project_type_display = serializers.CharField(source='get_project_type_display', read_only=True) + + class Meta: + model = Project + fields = '__all__' + + def get_teacher_name(self, obj): + if obj.teacher: + return obj.teacher.name + return obj.custom_teacher + +class CouponSerializer(serializers.ModelSerializer): + scope_text = serializers.SerializerMethodField() + applicable_project_titles = serializers.SerializerMethodField() + + class Meta: + model = Coupon + fields = '__all__' + + def get_scope_text(self, obj): + ids = list(obj.applicable_projects.values_list('id', flat=True)) + if not ids: + return '通用' + names = list(obj.applicable_projects.values_list('title', flat=True)) + return ','.join(names) + + def get_applicable_project_titles(self, obj): + return list(obj.applicable_projects.values_list('title', flat=True)) + +class StudentCouponSerializer(serializers.ModelSerializer): + coupon_detail = CouponSerializer(source='coupon', read_only=True) + student_name = serializers.CharField(source='student.name', read_only=True) + student_phone = serializers.CharField(source='student.phone', read_only=True) + coupon_title = serializers.CharField(source='coupon.title', read_only=True) + status_display = serializers.CharField(source='get_status_display', read_only=True) + + class Meta: + model = StudentCoupon + fields = '__all__' + +class BannerSerializer(serializers.ModelSerializer): + project_title = serializers.CharField(source='project.title', read_only=True) + class Meta: + model = Banner + fields = '__all__' + +class StudentSerializer(serializers.ModelSerializer): + teacher_name = serializers.CharField(source='teacher.name', read_only=True) + teaching_center_name = serializers.CharField(source='teaching_center.name', read_only=True) + stats = serializers.SerializerMethodField() + enrolled_projects = serializers.SerializerMethodField() + coupons = serializers.PrimaryKeyRelatedField(many=True, read_only=True, source='student_coupons') + status_display = serializers.CharField(source='get_status_display', read_only=True) + + class Meta: + model = Student + fields = ['id', 'name', 'phone', 'age', 'address', 'avatar', 'wechat_nickname', 'openid', 'teacher', 'teacher_name', 'teaching_center', 'teaching_center_name', 'company_name', 'position', 'status', 'status_display', 'stats', 'enrolled_projects', 'coupons', 'created_at'] + read_only_fields = ['stats', 'enrolled_projects', 'coupons', 'teaching_center_name', 'teacher_name', 'status_display'] + + def get_stats(self, obj): + return { + "learning": obj.learning_count, + "coupons": obj.coupon_count, + "hours": obj.study_hours + } + + def get_enrolled_projects(self, obj): + enrollments = obj.enrollments.all() + data = [] + for enrollment in enrollments: + data.append({ + "project_title": enrollment.project.title, + "status": enrollment.status, + "status_display": enrollment.get_status_display() + }) + return data + +class StudentProjectSerializer(serializers.ModelSerializer): + student_name = serializers.CharField(source='student.name', read_only=True) + student_phone = serializers.CharField(source='student.phone', read_only=True) + project_title = serializers.CharField(source='project.title', read_only=True) + project_image = serializers.CharField(source='project.image', read_only=True) + project_type = serializers.CharField(source='project.project_type', read_only=True) + project_type_display = serializers.CharField(source='project.get_project_type_display', read_only=True) + + class Meta: + model = StudentProject + fields = '__all__' + +class StudentHonorSerializer(serializers.ModelSerializer): + student_name = serializers.CharField(source='student.name', read_only=True) + student_phone = serializers.CharField(source='student.phone', read_only=True) + student_avatar = serializers.CharField(source='student.avatar', read_only=True) + student_openid = serializers.CharField(source='student.openid', read_only=True) + student_teaching_center = serializers.CharField(source='student.teacher.name', read_only=True) + student_company_name = serializers.CharField(source='student.company_name', read_only=True) + + class Meta: + model = StudentHonor + fields = '__all__' + +class StudentShowcaseSerializer(serializers.ModelSerializer): + student_name = serializers.CharField(source='student.name', read_only=True) + + class Meta: + model = StudentShowcase + fields = '__all__' diff --git a/admin/server/apps/crm/tests.py b/admin/server/apps/crm/tests.py new file mode 100644 index 0000000..f2f9d1e --- /dev/null +++ b/admin/server/apps/crm/tests.py @@ -0,0 +1,50 @@ +from django.test import TestCase +from rest_framework.test import APIClient +from django.urls import reverse +from .models import Student, Teacher, Project, Banner, StudentCoupon, StudentShowcase, StudentProject +from django.utils import timezone +from datetime import timedelta + + +class DashboardStatsViewTests(TestCase): + def setUp(self): + # Create minimal data + self.student = Student.objects.create(name='测试学员') + self.teacher = Teacher.objects.create(name='机构A') + Project.objects.create(title='项目1', teacher=self.teacher, is_active=True) + Banner.objects.create(image='http://example.com/a.png', is_active=True) + StudentShowcase.objects.create(title='展示1', cover_image='http://example.com/c.png', is_active=True) + # 优惠券在具体用例中创建 + + def test_requires_authentication(self): + client = APIClient() + url = '/api/dashboard/stats/' + resp = client.get(url) + self.assertEqual(resp.status_code, 401) + + def test_returns_basic_stats_with_auth(self): + # Create valid coupon and assignment + from .models import Coupon + coupon = Coupon.objects.create(title='C1', amount='10', unit='元', desc='D', expiry=timezone.now().date()) + StudentCoupon.objects.create(student=self.student, coupon=coupon) + + # Enrollment for trends + StudentProject.objects.create(student=self.student, project=Project.objects.first()) + + client = APIClient() + token = f"mock_token_{self.student.id}" + resp = client.get('/api/dashboard/stats/', HTTP_AUTHORIZATION=f'Bearer {token}') + self.assertEqual(resp.status_code, 200) + data = resp.json() + # Panel data checks + self.assertIn('panel_data', data) + panel = data['panel_data'] + for key in ['students', 'organizations', 'projects', 'projects_active', 'coupons', 'banners_active', 'showcases_active']: + self.assertIn(key, panel) + # Charts existence + self.assertIn('pie_chart_data', data) + self.assertIn('coupon_pie_chart_data', data) + self.assertIn('bar_chart_data', data) + self.assertIn('line_chart_data', data) + +# Create your tests here. diff --git a/admin/server/apps/crm/urls.py b/admin/server/apps/crm/urls.py new file mode 100644 index 0000000..9f8aedf --- /dev/null +++ b/admin/server/apps/crm/urls.py @@ -0,0 +1,28 @@ +from django.urls import path, include +from rest_framework.routers import DefaultRouter +from .views import CategoryViewSet, TeacherViewSet, TeachingCenterViewSet, ProjectViewSet, CouponViewSet, BannerViewSet, StudentViewSet, StudentCouponViewSet, StudentProjectViewSet, StudentHonorViewSet, StudentShowcaseViewSet, UserProfileView, UserCouponsView, UserProjectsView, UserHonorsView, LoginView, UserPhoneView, DashboardStatsView, AvailableCouponsView + +router = DefaultRouter() +router.register(r'categories', CategoryViewSet) +router.register(r'teachers', TeacherViewSet) +router.register(r'teaching-centers', TeachingCenterViewSet) +router.register(r'projects', ProjectViewSet) +router.register(r'coupons', CouponViewSet) +router.register(r'banners', BannerViewSet) +router.register(r'students', StudentViewSet) +router.register(r'student-coupons', StudentCouponViewSet) +router.register(r'student-projects', StudentProjectViewSet) +router.register(r'student-honors', StudentHonorViewSet) +router.register(r'student-showcases', StudentShowcaseViewSet) + +urlpatterns = [ + path('', include(router.urls)), + path('auth/login/', LoginView.as_view()), + path('dashboard/stats/', DashboardStatsView.as_view()), + path('user/', UserProfileView.as_view()), + path('user/phone/', UserPhoneView.as_view()), + path('user-coupons/', UserCouponsView.as_view()), + path('available-coupons/', AvailableCouponsView.as_view()), + path('user-projects/', UserProjectsView.as_view()), + path('user-honors/', UserHonorsView.as_view()), +] diff --git a/admin/server/apps/crm/views.py b/admin/server/apps/crm/views.py new file mode 100644 index 0000000..68a9200 --- /dev/null +++ b/admin/server/apps/crm/views.py @@ -0,0 +1,677 @@ +from rest_framework import viewsets, serializers +from rest_framework import status +from rest_framework.decorators import action +from rest_framework.views import APIView +from rest_framework.response import Response +from rest_framework.permissions import AllowAny, IsAuthenticatedOrReadOnly, IsAuthenticated +from .models import Category, Teacher, TeachingCenter, Project, Coupon, Banner, Student, StudentCoupon, StudentProject, StudentHonor, StudentShowcase +from .serializers import CategorySerializer, TeacherSerializer, TeachingCenterSerializer, ProjectSerializer, CouponSerializer, BannerSerializer, StudentSerializer, StudentCouponSerializer, StudentProjectSerializer, StudentHonorSerializer, StudentShowcaseSerializer +import requests +from django.db.models import Count, F +from django.utils import timezone +from datetime import timedelta, datetime + +class LoginView(APIView): + permission_classes = [AllowAny] + authentication_classes = [] + + def post(self, request): + code = request.data.get('code') + if not code: + return Response({'error': 'Code is required'}, status=status.HTTP_400_BAD_REQUEST) + + # Try to get real OpenID from WeChat API + from django.conf import settings + app_id = getattr(settings, 'WECHAT_APP_ID', None) + app_secret = getattr(settings, 'WECHAT_APP_SECRET', None) + + openid = None + + if app_id and app_secret: + try: + # Exchange code for session_key and openid + url = f"https://api.weixin.qq.com/sns/jscode2session?appid={app_id}&secret={app_secret}&js_code={code}&grant_type=authorization_code" + res = requests.get(url, timeout=5) + data = res.json() + + if 'openid' in data: + openid = data['openid'] + # We could also store session_key if needed + else: + print(f"WeChat Login Error: {data}") + except Exception as e: + print(f"WeChat Login Exception: {e}") + + # Fallback to mock if real login failed or not configured + if not openid: + # Mock OpenID based on code (or random if code is generic) + # Use code as a seed for consistent mock OpenID if possible, or just use it directly + # In a real scenario, code is one-time use, so we can't rely on it being consistent for the same user across logins + # unless we actually call WeChat API. + # For dev/mock purposes, let's assume 'mock_devtools' or similar fixed code means same user. + if code == 'mock_devtools': + openid = "mock_openid_devtools_user" + else: + # If we have AppID but failed to get OpenID, it might be an invalid code. + # But to keep development smooth if API fails, we fallback. + # To fix "new user every time" in dev without API access, we use a fixed mock ID + # IF we are in DEBUG mode. + if settings.DEBUG and not (app_id and app_secret): + openid = "mock_openid_fixed_dev_user" + else: + # If we have credentials but failed, or if we want distinct users per code: + openid = f"mock_openid_{code}" + + # Check if we already have a student with this openid + student, created = Student.objects.get_or_create( + openid=openid, + defaults={ + 'name': '微信用户', + 'wechat_nickname': '微信用户', + 'avatar': 'https://mmbiz.qpic.cn/mmbiz/icTdbqWNOwNRna42FI242Lcia07jQodd2FJGIYQfG0LAJGFxM4FbnQP6yfMxBgJ0F3YRqJCJ1aPAK2dQagdusBZg/0' + } + ) + + # Ensure openid is saved if it was missing (e.g. if user was created via other means or if we just want to be sure) + if not student.openid: + student.openid = openid + student.save(update_fields=['openid']) + + serializer = StudentSerializer(student) + return Response({ + 'token': f"mock_token_{student.id}", # Mock token + 'user': serializer.data, + 'is_new_user': created + }) + +class UserPhoneView(APIView): + permission_classes = [AllowAny] + authentication_classes = [] + + def post(self, request): + code = request.data.get('code') + if not code: + return Response({'error': 'Code is required'}, status=status.HTTP_400_BAD_REQUEST) + + # Default mock phone number for dev + phone = "13800138000" + + # Try real implementation if configured in settings + # Add WECHAT_APP_ID and WECHAT_APP_SECRET to your settings.py or local_settings.py + from django.conf import settings + app_id = getattr(settings, 'WECHAT_APP_ID', None) + app_secret = getattr(settings, 'WECHAT_APP_SECRET', None) + + if app_id and app_secret: + try: + # 1. Get Access Token + token_url = f"https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={app_id}&secret={app_secret}" + token_res = requests.get(token_url, timeout=5).json() + access_token = token_res.get('access_token') + + if access_token: + # 2. Get Phone Number + # Note: The code from getPhoneNumber is valid for 5 mins and one-time use + phone_url = f"https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token={access_token}" + phone_res = requests.post(phone_url, json={"code": code}, timeout=5).json() + + if phone_res.get('errcode') == 0: + phone_info = phone_res.get('phone_info') + phone = phone_info.get('phoneNumber') + else: + print(f"WeChat Phone API Error: {phone_res}") + else: + print(f"WeChat Token API Error: {token_res}") + except Exception as e: + print(f"WeChat API Exception: {e}") + + # Identify student + student = None + auth = request.headers.get('Authorization') + if auth and 'Bearer' in auth: + try: + # Extract ID from mock_token_{id} + token_str = auth.split(' ')[1] + if token_str.startswith('mock_token_'): + student_id = int(token_str.split('_')[-1]) + student = Student.objects.get(id=student_id) + except Exception as e: + print(f"Token parse error: {e}") + pass + + if not student: + student = Student.objects.first() + + if student: + student.phone = phone + # Also ensure openid is set if not present (mock behavior) + if not student.openid: + student.openid = f"mock_openid_phone_{phone}" + student.save() + + # 自动激活/发放注册优惠券 + + return Response({'phone': phone}) + +class DashboardStatsView(APIView): + """ + API for Dashboard Statistics + """ + permission_classes = [AllowAny] + + def get(self, request): + # Query params + try: + range_days = int(request.query_params.get('range', '14')) + if range_days < 7: + range_days = 7 + if range_days > 30: + range_days = 30 + except Exception: + range_days = 14 + dimension = request.query_params.get('dimension', 'organization') + # 1. Panel Counts + student_count = Student.objects.count() + organizations_count = Teacher.objects.count() + project_count = Project.objects.count() + # Count assigned coupons (StudentCoupon) + issued_coupon_count = StudentCoupon.objects.count() + # Active resources + active_banner_count = Banner.objects.filter(is_active=True).count() + active_showcase_count = StudentShowcase.objects.filter(is_active=True).count() + active_project_count = Project.objects.filter(is_active=True).count() + + # 2. Pie Chart: Project Types Distribution + # Group by project_type + project_types_data = Project.objects.values('project_type').annotate(count=Count('id')) + + # Map type codes to display names + type_mapping = dict(Project.PROJECT_TYPE_CHOICES) + pie_chart_data = [] + for item in project_types_data: + type_code = item['project_type'] + name = type_mapping.get(type_code, type_code) + pie_chart_data.append({ + 'type': type_code, + 'name': name, + 'value': item['count'] + }) + + # If empty, provide some defaults to avoid empty chart + if not pie_chart_data: + pie_chart_data = [ + {'name': '小主持语言培训', 'value': 0}, + {'name': '赛事管理', 'value': 0}, + {'name': '考级管理', 'value': 0} + ] + + # 3. Bar Chart: Popular dimension (organization/project) + if dimension == 'project': + popular_projects = Project.objects.annotate(enroll_num=Count('enrollments')).order_by('-enroll_num')[:7] + bar_names = [p.title for p in popular_projects] + bar_counts = [p.enroll_num for p in popular_projects] + bar_title = '热门项目' + else: + popular_organizations = Teacher.objects.annotate(student_num=Count('students')).order_by('-student_num')[:7] + bar_names = [t.name for t in popular_organizations] + bar_counts = [t.student_num for t in popular_organizations] + bar_title = '热门机构' + + # 4. Line Chart: 14-Day Trends + today = timezone.now().date() + days = [today - timedelta(days=i) for i in range(range_days - 1, -1, -1)] + + def daily_counts(model, date_field): + counts = [] + for d in days: + start = timezone.make_aware(datetime.combine(d, datetime.min.time())) + end = timezone.make_aware(datetime.combine(d, datetime.max.time())) + counts.append(model.objects.filter(**{f"{date_field}__range": (start, end)}).count()) + return counts + + student_daily = daily_counts(Student, 'created_at') + enroll_daily = daily_counts(StudentProject, 'enrolled_at') + coupon_assign_daily = daily_counts(StudentCoupon, 'assigned_at') + x_axis = [d.strftime('%m-%d') for d in days] + + line_chart_data = { + 'students': { + 'expectedData': student_daily, + 'actualData': student_daily, + 'xAxis': x_axis + }, + 'organizations': { + 'expectedData': [organizations_count] * len(days), + 'actualData': [organizations_count] * len(days), + 'xAxis': x_axis + }, + 'projects': { + 'expectedData': enroll_daily, + 'actualData': enroll_daily, + 'xAxis': x_axis + }, + 'coupons': { + 'expectedData': coupon_assign_daily, + 'actualData': coupon_assign_daily, + 'xAxis': x_axis + } + } + + # 5. Coupon Status Pie Chart + coupon_status_counts = StudentCoupon.objects.values('status').annotate(count=Count('id')) + status_mapping = dict(StudentCoupon.STATUS_CHOICES) + coupon_pie_chart_data = [ + {'status': item['status'], 'name': status_mapping.get(item['status'], item['status']), 'value': item['count']} + for item in coupon_status_counts + ] + + return Response({ + 'panel_data': { + 'students': student_count, + 'organizations': organizations_count, + 'projects': project_count, + 'projects_active': active_project_count, + 'coupons': issued_coupon_count, + 'banners_active': active_banner_count, + 'showcases_active': active_showcase_count + }, + 'pie_chart_data': pie_chart_data, + 'coupon_pie_chart_data': coupon_pie_chart_data, + 'bar_chart_data': { + 'title': bar_title, + 'names': bar_names, + 'counts': bar_counts + }, + 'line_chart_data': line_chart_data + }) + +class CategoryViewSet(viewsets.ModelViewSet): + queryset = Category.objects.all() + serializer_class = CategorySerializer + permission_classes = [AllowAny] + pagination_class = None # Return all categories without pagination for the app + search_fields = ['name'] + +class TeacherViewSet(viewsets.ModelViewSet): + queryset = Teacher.objects.all() + serializer_class = TeacherSerializer + permission_classes = [IsAuthenticatedOrReadOnly] + pagination_class = None # Usually few teachers, return all for selects + search_fields = ['name', 'phone'] + +class TeachingCenterViewSet(viewsets.ModelViewSet): + queryset = TeachingCenter.objects.all() + serializer_class = TeachingCenterSerializer + permission_classes = [IsAuthenticatedOrReadOnly] + pagination_class = None + search_fields = ['name', 'phone'] + +class ProjectViewSet(viewsets.ModelViewSet): + # queryset = Project.objects.select_related('category').all() + queryset = Project.objects.select_related('teacher').all() + serializer_class = ProjectSerializer + permission_classes = [IsAuthenticatedOrReadOnly] + # search_fields = ['title', 'category__name'] + search_fields = ['title', 'teacher__name'] + # filterset_fields = ['category', 'project_type'] + filterset_fields = ['teacher', 'project_type'] + ordering_fields = ['sort_order', 'is_top', 'created_at', 'students', 'price'] + ordering = ['-is_top', 'sort_order', '-created_at'] + + def get_queryset(self): + queryset = super().get_queryset() + # Admin users (staff) can see all projects + if self.request.user.is_staff: + return queryset + # Public/Students can only see active projects + return queryset.filter(is_active=True) + +class CouponViewSet(viewsets.ModelViewSet): + queryset = Coupon.objects.all() + serializer_class = CouponSerializer + permission_classes = [IsAuthenticatedOrReadOnly] + search_fields = ['title'] + filterset_fields = ['status'] + + @action(detail=True, methods=['post'], url_path='distribute') + def distribute(self, request, pk=None): + coupon = self.get_object() + student_ids = request.data.get('student_ids', []) + if not student_ids: + return Response({'error': '未选择学员'}, status=status.HTTP_400_BAD_REQUEST) + + if coupon.status == 'expired': + return Response({'error': '该优惠券已过期'}, status=status.HTTP_400_BAD_REQUEST) + + students = Student.objects.filter(id__in=student_ids) + created_count = 0 + for student in students: + StudentCoupon.objects.create( + student=student, + coupon=coupon, + status='assigned' + ) + created_count += 1 + + return Response({'message': f'成功分发给 {created_count} 位学员'}, status=status.HTTP_200_OK) + +class BannerViewSet(viewsets.ModelViewSet): + queryset = Banner.objects.all() + serializer_class = BannerSerializer + permission_classes = [IsAuthenticatedOrReadOnly] + +class StudentViewSet(viewsets.ModelViewSet): + queryset = Student.objects.prefetch_related('enrollments__project').all() + serializer_class = StudentSerializer + permission_classes = [IsAuthenticated] + search_fields = ['name', 'phone'] + + def destroy(self, request, *args, **kwargs): + instance = self.get_object() + self.perform_destroy(instance) + return Response(status=status.HTTP_200_OK) + + @action(detail=True, methods=['post'], url_path='assign_coupon') + def assign_coupon(self, request, pk=None): + student = self.get_object() + coupon_id = request.data.get('coupon_id') + if not coupon_id: + return Response({'error': '未提供优惠券ID'}, status=status.HTTP_400_BAD_REQUEST) + + try: + coupon = Coupon.objects.get(id=coupon_id) + except Coupon.DoesNotExist: + return Response({'error': '优惠券不存在'}, status=status.HTTP_404_NOT_FOUND) + + if coupon.status == 'expired': + return Response({'error': '该优惠券已过期'}, status=status.HTTP_400_BAD_REQUEST) + + # Create assignment + assignment = StudentCoupon.objects.create( + student=student, + coupon=coupon, + status='assigned' + ) + + return Response(StudentCouponSerializer(assignment).data, status=status.HTTP_201_CREATED) + + @action(detail=False, methods=['delete'], url_path='clear') + def clear(self, request): + Student.objects.all().delete() + return Response(status=status.HTTP_204_NO_CONTENT) + +class StudentCouponViewSet(viewsets.ModelViewSet): + queryset = StudentCoupon.objects.all() + serializer_class = StudentCouponSerializer + permission_classes = [IsAuthenticated] + filterset_fields = ['student', 'status'] + + def perform_update(self, serializer): + instance = serializer.instance + # Check if status is being changed to 'used' + new_status = serializer.validated_data.get('status') + if new_status == 'used' and instance.status != 'used': + serializer.save(used_at=timezone.now()) + else: + serializer.save() + + def destroy(self, request, *args, **kwargs): + instance = self.get_object() + self.perform_destroy(instance) + return Response(status=status.HTTP_200_OK) + +from django.db import transaction + +class StudentProjectViewSet(viewsets.ModelViewSet): + queryset = StudentProject.objects.all() + serializer_class = StudentProjectSerializer + permission_classes = [IsAuthenticatedOrReadOnly] + filterset_fields = ['student', 'status', 'project'] + + @transaction.atomic + def create(self, request, *args, **kwargs): + # 1. Check for re-enrollment (Friendly Error) + student_id = request.data.get('student') + project_id = request.data.get('project') + + if student_id and project_id: + if StudentProject.objects.filter(student_id=student_id, project_id=project_id).exists(): + return Response( + {'detail': '您已报名该项目,请勿重复报名'}, + status=status.HTTP_400_BAD_REQUEST + ) + + # 2. Create Enrollment + serializer = self.get_serializer(data=request.data) + serializer.is_valid(raise_exception=True) + self.perform_create(serializer) + headers = self.get_success_headers(serializer.data) + + # Increment project student count + Project.objects.filter(id=project_id).update(students=F('students') + 1) + + # 3. Handle Coupon Redemption + coupon_id = request.data.get('coupon_id') + if coupon_id: + try: + # Lock the coupon row to prevent race conditions + # Use filter to be safe against MultipleObjectsReturned (though id should be unique) + scs = StudentCoupon.objects.select_for_update().filter(id=coupon_id, student_id=student_id) + if not scs.exists(): + raise serializers.ValidationError({'coupon_id': '优惠券不存在'}) + + # Take the first one if multiple exist (defensive programming) + sc = scs.first() + + if sc.status != 'assigned': + # Rollback if coupon is invalid + raise serializers.ValidationError({'coupon_id': '该优惠券不可用'}) + + sc.status = 'used' + sc.used_at = timezone.now() + sc.save() + + except Exception as e: + if isinstance(e, serializers.ValidationError): + raise e + print(f"Coupon redemption error: {e}") + raise serializers.ValidationError({'coupon_id': '优惠券处理失败'}) + + return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers) + + def perform_destroy(self, instance): + project_id = instance.project_id + super().perform_destroy(instance) + # Decrement project student count + Project.objects.filter(id=project_id).update(students=F('students') - 1) + +class StudentHonorViewSet(viewsets.ModelViewSet): + queryset = StudentHonor.objects.all() + serializer_class = StudentHonorSerializer + permission_classes = [IsAuthenticatedOrReadOnly] + filterset_fields = ['student'] + +class StudentShowcaseViewSet(viewsets.ModelViewSet): + queryset = StudentShowcase.objects.all() + serializer_class = StudentShowcaseSerializer + permission_classes = [IsAuthenticatedOrReadOnly] + filterset_fields = ['student'] + + def get_queryset(self): + queryset = super().get_queryset() + # Admin users (staff) can see all showcases + if self.request.user.is_staff: + return queryset + # Public/Students can only see active showcases + # Check if specific query param 'is_active' is passed, or default to active only for public + # Actually, standard behavior: filter active=True for public + return queryset.filter(is_active=True) + +class UserProfileView(APIView): + permission_classes = [AllowAny] + authentication_classes = [] + + def get_student_from_token(self, request): + from .models import Student + student = None + auth = request.headers.get('Authorization') + if auth and 'Bearer' in auth: + try: + token_str = auth.split(' ')[1] + if token_str.startswith('mock_token_'): + student_id = int(token_str.split('_')[-1]) + student = Student.objects.get(id=student_id) + except Exception: + pass + return student + + def get(self, request): + student = self.get_student_from_token(request) + if not student: + return Response({'error': 'Not authenticated'}, status=status.HTTP_401_UNAUTHORIZED) + + serializer = StudentSerializer(student) + return Response(serializer.data) + + def post(self, request): + student = self.get_student_from_token(request) + if not student: + return Response({'error': 'Not authenticated'}, status=status.HTTP_401_UNAUTHORIZED) + + payload = request.data or {} + fields = ['name', 'phone', 'age', 'company_name', 'position', 'address', 'wechat_nickname', 'avatar'] + for f in fields: + if f in payload: + setattr(student, f, payload.get(f)) + + # Ensure OpenID is preserved or set if missing + if not student.openid and 'openid' in payload: + student.openid = payload['openid'] + + student.save() + return Response(StudentSerializer(student).data) + +class UserCouponsView(APIView): + permission_classes = [AllowAny] + + def get_student_from_token(self, request): + from .models import Student + student = None + auth = request.headers.get('Authorization') + if auth and 'Bearer' in auth: + try: + token_str = auth.split(' ')[1] + if token_str.startswith('mock_token_'): + student_id = int(token_str.split('_')[-1]) + student = Student.objects.get(id=student_id) + except Exception: + pass + return student + + def get(self, request): + student = self.get_student_from_token(request) + if not student: + return Response([]) + + coupons = StudentCoupon.objects.filter(student=student).exclude(status='revoked') + serializer = StudentCouponSerializer(coupons, many=True) + return Response(serializer.data) + + def post(self, request): + student = self.get_student_from_token(request) + if not student: + return Response({'error': '请先登录'}, status=status.HTTP_401_UNAUTHORIZED) + + coupon_id = request.data.get('coupon_id') + if not coupon_id: + return Response({'error': '参数错误'}, status=status.HTTP_400_BAD_REQUEST) + + try: + coupon = Coupon.objects.get(id=coupon_id) + except Coupon.DoesNotExist: + return Response({'error': '优惠券不存在'}, status=status.HTTP_404_NOT_FOUND) + + # Check availability + if coupon.status != 'available': + return Response({'error': '优惠券不可领取'}, status=status.HTTP_400_BAD_REQUEST) + + if coupon.expiry < timezone.now().date(): + return Response({'error': '优惠券已过期'}, status=status.HTTP_400_BAD_REQUEST) + + # Check if already claimed + if StudentCoupon.objects.filter(student=student, coupon=coupon).exists(): + return Response({'error': '您已领取过该优惠券'}, status=status.HTTP_400_BAD_REQUEST) + + # Claim + StudentCoupon.objects.create( + student=student, + coupon=coupon, + status='assigned' + ) + + return Response({'message': '领取成功'}, status=status.HTTP_201_CREATED) + +class AvailableCouponsView(APIView): + permission_classes = [AllowAny] + + def get(self, request): + # Get all available coupons with issue_type='project' (publicly visible) + # Also check expiry + today = timezone.now().date() + coupons = Coupon.objects.filter( + status='available', + expiry__gte=today, + issue_type='project' + ) + serializer = CouponSerializer(coupons, many=True) + return Response(serializer.data) + +class UserProjectsView(APIView): + permission_classes = [AllowAny] + + def get_student_from_token(self, request): + from .models import Student + student = None + auth = request.headers.get('Authorization') + if auth and 'Bearer' in auth: + try: + token_str = auth.split(' ')[1] + if token_str.startswith('mock_token_'): + student_id = int(token_str.split('_')[-1]) + student = Student.objects.get(id=student_id) + except Exception: + pass + return student + + def get(self, request): + student = self.get_student_from_token(request) + if not student: + return Response([]) + projects = StudentProject.objects.filter(student=student) + serializer = StudentProjectSerializer(projects, many=True) + return Response(serializer.data) + +class UserHonorsView(APIView): + permission_classes = [AllowAny] + + def get_student_from_token(self, request): + from .models import Student + student = None + auth = request.headers.get('Authorization') + if auth and 'Bearer' in auth: + try: + token_str = auth.split(' ')[1] + if token_str.startswith('mock_token_'): + student_id = int(token_str.split('_')[-1]) + student = Student.objects.get(id=student_id) + except Exception: + pass + return student + + def get(self, request): + student = self.get_student_from_token(request) + if not student: + return Response([]) + honors = StudentHonor.objects.filter(student=student) + serializer = StudentHonorSerializer(honors, many=True) + return Response(serializer.data) diff --git a/admin/server/apps/monitor/__init__.py b/admin/server/apps/monitor/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/admin/server/apps/monitor/admin.py b/admin/server/apps/monitor/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/admin/server/apps/monitor/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/admin/server/apps/monitor/apps.py b/admin/server/apps/monitor/apps.py new file mode 100644 index 0000000..e49ebca --- /dev/null +++ b/admin/server/apps/monitor/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class MonitorConfig(AppConfig): + name = 'apps.monitor' + verbose_name = '系统监控' diff --git a/admin/server/apps/monitor/middleware.py b/admin/server/apps/monitor/middleware.py new file mode 100644 index 0000000..038a432 --- /dev/null +++ b/admin/server/apps/monitor/middleware.py @@ -0,0 +1 @@ +from django.utils.deprecation import MiddlewareMixin diff --git a/admin/server/apps/monitor/migrations/__init__.py b/admin/server/apps/monitor/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/admin/server/apps/monitor/models.py b/admin/server/apps/monitor/models.py new file mode 100644 index 0000000..71a8362 --- /dev/null +++ b/admin/server/apps/monitor/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/admin/server/apps/monitor/tests.py b/admin/server/apps/monitor/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/admin/server/apps/monitor/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/admin/server/apps/monitor/urls.py b/admin/server/apps/monitor/urls.py new file mode 100644 index 0000000..73ae248 --- /dev/null +++ b/admin/server/apps/monitor/urls.py @@ -0,0 +1,10 @@ +from django.urls import path, include +from rest_framework import routers +from .views import ServerInfoView, LogView, LogDetailView + + +urlpatterns = [ + path('log/', LogView.as_view()), + path('log//', LogDetailView.as_view()), + path('server/', ServerInfoView.as_view()), +] diff --git a/admin/server/apps/monitor/views.py b/admin/server/apps/monitor/views.py new file mode 100644 index 0000000..3a0cbca --- /dev/null +++ b/admin/server/apps/monitor/views.py @@ -0,0 +1,93 @@ +from django.shortcuts import render +import psutil +from rest_framework.response import Response +from rest_framework.views import APIView +from rest_framework.permissions import IsAuthenticated +from rest_framework.viewsets import ViewSet +from django.conf import settings +import os +from rest_framework import serializers, status +from drf_yasg import openapi +from drf_yasg.utils import swagger_auto_schema +# Create your views here. + +class ServerInfoView(APIView): + """ + 获取服务器状态信息 + """ + permission_classes = [IsAuthenticated] + def get(self, request, *args, **kwargs): + ret={'cpu':{}, 'memory':{}, 'disk':{}} + ret['cpu']['count'] = psutil.cpu_count() + ret['cpu']['lcount'] = psutil.cpu_count(logical=False) + ret['cpu']['percent'] = psutil.cpu_percent(interval=1) + memory = psutil.virtual_memory() + ret['memory']['total'] = round(memory.total/1024/1024/1024,2) + ret['memory']['used'] = round(memory.used/1024/1024/1024,2) + ret['memory']['percent'] = memory.percent + disk = psutil.disk_usage('/') + ret['disk']['total'] = round(disk.total/1024/1024/1024,2) + ret['disk']['used'] = round(disk.used/1024/1024/1024,2) + ret['disk']['percent'] = disk.percent + return Response(ret) + +def get_file_list(file_path): + dir_list = os.listdir(file_path) + if not dir_list: + return + else: + # 注意,这里使用lambda表达式,将文件按照最后修改时间顺序升序排列 + # os.path.getmtime() 函数是获取文件最后修改时间 + # os.path.getctime() 函数是获取文件最后创建时间 + dir_list = sorted(dir_list,key=lambda x: os.path.getmtime(os.path.join(file_path, x)), reverse=True) + # print(dir_list) + return dir_list + +class LogView(APIView): + + @swagger_auto_schema(manual_parameters=[ + openapi.Parameter('name', openapi.IN_QUERY, description='日志文件名', type=openapi.TYPE_STRING) + ]) + def get(self, request, *args, **kwargs): + """ + 查看最近的日志列表 + :query name + """ + logs =[] + name = request.GET.get('name', None) + # for root, dirs, files in os.walk(settings.LOG_PATH): + # files.reverse() + for file in get_file_list(settings.LOG_PATH): + if len(logs)>50:break + filepath = os.path.join(settings.LOG_PATH, file) + if name: + if name in filepath: + fsize = os.path.getsize(filepath) + if fsize: + logs.append({ + "name":file, + "filepath":filepath, + "size":round(fsize/1000,1) + }) + else: + fsize = os.path.getsize(filepath) + if fsize: + logs.append({ + "name":file, + "filepath":filepath, + "size":round(fsize/1000,1) + }) + return Response(logs) + +class LogDetailView(APIView): + + def get(self, request, name): + """ + 查看日志详情 + """ + try: + with open(os.path.join(settings.LOG_PATH, name)) as f: + data = f.read() + return Response(data) + except: + return Response('未找到', status=status.HTTP_404_NOT_FOUND) \ No newline at end of file diff --git a/admin/server/apps/system/__init__.py b/admin/server/apps/system/__init__.py new file mode 100644 index 0000000..f5317b9 --- /dev/null +++ b/admin/server/apps/system/__init__.py @@ -0,0 +1 @@ +default_app_config = 'apps.system.apps.SystemConfig' \ No newline at end of file diff --git a/admin/server/apps/system/admin.py b/admin/server/apps/system/admin.py new file mode 100644 index 0000000..e47b0d7 --- /dev/null +++ b/admin/server/apps/system/admin.py @@ -0,0 +1,11 @@ +from django.contrib import admin +from simple_history.admin import SimpleHistoryAdmin +from .models import User, Organization, Role, Permission, DictType, Dict, File +# Register your models here. +admin.site.register(User) +admin.site.register(Organization) +admin.site.register(Role) +admin.site.register(Permission) +admin.site.register(DictType) +admin.site.register(Dict, SimpleHistoryAdmin) +admin.site.register(File) \ No newline at end of file diff --git a/admin/server/apps/system/apps.py b/admin/server/apps/system/apps.py new file mode 100644 index 0000000..dfd43d1 --- /dev/null +++ b/admin/server/apps/system/apps.py @@ -0,0 +1,9 @@ +from django.apps import AppConfig + + +class SystemConfig(AppConfig): + name = 'apps.system' + verbose_name = '系统管理' + + def ready(self): + import apps.system.signals \ No newline at end of file diff --git a/admin/server/apps/system/authentication.py b/admin/server/apps/system/authentication.py new file mode 100644 index 0000000..3c85943 --- /dev/null +++ b/admin/server/apps/system/authentication.py @@ -0,0 +1,23 @@ +from django.contrib.auth.backends import ModelBackend +from django.db.models import Q +from django.contrib.auth import get_user_model + +UserModel = get_user_model() + + +class CustomBackend(ModelBackend): + def authenticate(self, request, username=None, password=None, **kwargs): + if username is None: + username = kwargs.get(UserModel.USERNAME_FIELD) + if username is None or password is None: + return + try: + user = UserModel._default_manager.get( + Q(username=username) | Q(phone=username) | Q(email=username)) + except UserModel.DoesNotExist: + # Run the default password hasher once to reduce the timing + # difference between an existing and a nonexistent user (#20760). + UserModel().set_password(password) + else: + if user.check_password(password) and self.user_can_authenticate(user): + return user diff --git a/admin/server/apps/system/filters.py b/admin/server/apps/system/filters.py new file mode 100644 index 0000000..4199790 --- /dev/null +++ b/admin/server/apps/system/filters.py @@ -0,0 +1,11 @@ +from django_filters import rest_framework as filters +from .models import User + + +class UserFilter(filters.FilterSet): + class Meta: + model = User + fields = { + 'name': ['exact', 'contains'], + 'is_active': ['exact'], + } diff --git a/admin/server/apps/system/migrations/0001_initial.py b/admin/server/apps/system/migrations/0001_initial.py new file mode 100644 index 0000000..a53a840 --- /dev/null +++ b/admin/server/apps/system/migrations/0001_initial.py @@ -0,0 +1,239 @@ +# Generated by Django 3.0.7 on 2021-02-27 14:29 + +from django.conf import settings +import django.contrib.auth.models +import django.contrib.auth.validators +from django.db import migrations, models +import django.db.models.deletion +import django.utils.timezone +import simple_history.models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('auth', '0011_update_proxy_permissions'), + ] + + operations = [ + migrations.CreateModel( + name='User', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('password', models.CharField(max_length=128, verbose_name='password')), + ('last_login', models.DateTimeField(blank=True, null=True, verbose_name='last login')), + ('is_superuser', models.BooleanField(default=False, help_text='Designates that this user has all permissions without explicitly assigning them.', verbose_name='superuser status')), + ('username', models.CharField(error_messages={'unique': 'A user with that username already exists.'}, help_text='Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.', max_length=150, unique=True, validators=[django.contrib.auth.validators.UnicodeUsernameValidator()], verbose_name='username')), + ('first_name', models.CharField(blank=True, max_length=30, verbose_name='first name')), + ('last_name', models.CharField(blank=True, max_length=150, verbose_name='last name')), + ('email', models.EmailField(blank=True, max_length=254, verbose_name='email address')), + ('is_staff', models.BooleanField(default=False, help_text='Designates whether the user can log into this admin site.', verbose_name='staff status')), + ('is_active', models.BooleanField(default=True, help_text='Designates whether this user should be treated as active. Unselect this instead of deleting accounts.', verbose_name='active')), + ('date_joined', models.DateTimeField(default=django.utils.timezone.now, verbose_name='date joined')), + ('name', models.CharField(blank=True, max_length=20, null=True, verbose_name='姓名')), + ('phone', models.CharField(blank=True, max_length=11, null=True, unique=True, verbose_name='手机号')), + ('avatar', models.CharField(blank=True, default='/media/default/avatar.png', max_length=100, null=True, verbose_name='头像')), + ], + options={ + 'verbose_name': '用户信息', + 'verbose_name_plural': '用户信息', + 'ordering': ['id'], + }, + managers=[ + ('objects', django.contrib.auth.models.UserManager()), + ], + ), + migrations.CreateModel( + name='Dict', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')), + ('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')), + ('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')), + ('name', models.CharField(max_length=60, verbose_name='名称')), + ('code', models.CharField(blank=True, max_length=30, null=True, verbose_name='编号')), + ('description', models.TextField(blank=True, null=True, verbose_name='描述')), + ('sort', models.IntegerField(default=1, verbose_name='排序')), + ('is_used', models.BooleanField(default=True, verbose_name='是否有效')), + ('parent', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='system.Dict', verbose_name='父')), + ], + options={ + 'verbose_name': '字典', + 'verbose_name_plural': '字典', + }, + ), + migrations.CreateModel( + name='DictType', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')), + ('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')), + ('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')), + ('name', models.CharField(max_length=30, verbose_name='名称')), + ('code', models.CharField(max_length=30, unique=True, verbose_name='代号')), + ('parent', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='system.DictType', verbose_name='父')), + ], + options={ + 'verbose_name': '字典类型', + 'verbose_name_plural': '字典类型', + }, + ), + migrations.CreateModel( + name='Organization', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')), + ('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')), + ('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')), + ('name', models.CharField(max_length=60, verbose_name='名称')), + ('type', models.CharField(choices=[('公司', '公司'), ('部门', '部门')], default='部门', max_length=20, verbose_name='类型')), + ('parent', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='system.Organization', verbose_name='父')), + ], + options={ + 'verbose_name': '组织架构', + 'verbose_name_plural': '组织架构', + }, + ), + migrations.CreateModel( + name='Permission', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')), + ('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')), + ('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')), + ('name', models.CharField(max_length=30, verbose_name='名称')), + ('type', models.CharField(choices=[('目录', '目录'), ('菜单', '菜单'), ('接口', '接口')], default='接口', max_length=20, verbose_name='类型')), + ('is_frame', models.BooleanField(default=False, verbose_name='外部链接')), + ('sort', models.IntegerField(default=1, verbose_name='排序标记')), + ('method', models.CharField(blank=True, max_length=50, null=True, unique=True, verbose_name='方法/代号')), + ('parent', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='system.Permission', verbose_name='父')), + ], + options={ + 'verbose_name': '功能权限表', + 'verbose_name_plural': '功能权限表', + 'ordering': ['sort'], + }, + ), + migrations.CreateModel( + name='Position', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')), + ('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')), + ('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')), + ('name', models.CharField(max_length=32, unique=True, verbose_name='名称')), + ('description', models.CharField(blank=True, max_length=50, null=True, verbose_name='描述')), + ], + options={ + 'verbose_name': '职位/岗位', + 'verbose_name_plural': '职位/岗位', + }, + ), + migrations.CreateModel( + name='Role', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')), + ('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')), + ('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')), + ('name', models.CharField(max_length=32, unique=True, verbose_name='角色')), + ('datas', models.CharField(choices=[('全部', '全部'), ('自定义', '自定义'), ('同级及以下', '同级及以下'), ('本级及以下', '本级及以下'), ('本级', '本级'), ('仅本人', '仅本人')], default='本级及以下', max_length=50, verbose_name='数据权限')), + ('description', models.CharField(blank=True, max_length=50, null=True, verbose_name='描述')), + ('depts', models.ManyToManyField(blank=True, to='system.Organization', verbose_name='权限范围')), + ('perms', models.ManyToManyField(blank=True, to='system.Permission', verbose_name='功能权限')), + ], + options={ + 'verbose_name': '角色', + 'verbose_name_plural': '角色', + }, + ), + migrations.CreateModel( + name='HistoricalDict', + fields=[ + ('id', models.IntegerField(auto_created=True, blank=True, db_index=True, verbose_name='ID')), + ('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')), + ('update_time', models.DateTimeField(blank=True, editable=False, help_text='修改时间', verbose_name='修改时间')), + ('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')), + ('name', models.CharField(max_length=60, verbose_name='名称')), + ('code', models.CharField(blank=True, max_length=30, null=True, verbose_name='编号')), + ('description', models.TextField(blank=True, null=True, verbose_name='描述')), + ('sort', models.IntegerField(default=1, verbose_name='排序')), + ('is_used', models.BooleanField(default=True, verbose_name='是否有效')), + ('history_id', models.AutoField(primary_key=True, serialize=False)), + ('history_date', models.DateTimeField()), + ('history_change_reason', models.CharField(max_length=100, null=True)), + ('history_type', models.CharField(choices=[('+', 'Created'), ('~', 'Changed'), ('-', 'Deleted')], max_length=1)), + ('history_user', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL)), + ('parent', models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='system.Dict', verbose_name='父')), + ('type', models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='system.DictType', verbose_name='类型')), + ], + options={ + 'verbose_name': 'historical 字典', + 'ordering': ('-history_date', '-history_id'), + 'get_latest_by': 'history_date', + }, + bases=(simple_history.models.HistoricalChanges, models.Model), + ), + migrations.CreateModel( + name='File', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')), + ('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')), + ('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')), + ('name', models.CharField(blank=True, max_length=100, null=True, verbose_name='名称')), + ('size', models.IntegerField(blank=True, default=1, null=True, verbose_name='文件大小')), + ('file', models.FileField(upload_to='%Y/%m/%d/', verbose_name='文件')), + ('mime', models.CharField(blank=True, max_length=120, null=True, verbose_name='文件格式')), + ('type', models.CharField(choices=[('文档', '文档'), ('视频', '视频'), ('音频', '音频'), ('图片', '图片'), ('其它', '其它')], default='文档', max_length=50, verbose_name='文件类型')), + ('path', models.CharField(blank=True, max_length=200, null=True, verbose_name='地址')), + ('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='file_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人')), + ('update_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='file_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人')), + ], + options={ + 'verbose_name': '文件库', + 'verbose_name_plural': '文件库', + }, + ), + migrations.AddField( + model_name='dict', + name='type', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='system.DictType', verbose_name='类型'), + ), + migrations.AddField( + model_name='user', + name='dept', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='system.Organization', verbose_name='组织'), + ), + migrations.AddField( + model_name='user', + name='groups', + field=models.ManyToManyField(blank=True, help_text='The groups this user belongs to. A user will get all permissions granted to each of their groups.', related_name='user_set', related_query_name='user', to='auth.Group', verbose_name='groups'), + ), + migrations.AddField( + model_name='user', + name='position', + field=models.ManyToManyField(blank=True, to='system.Position', verbose_name='岗位'), + ), + migrations.AddField( + model_name='user', + name='roles', + field=models.ManyToManyField(blank=True, to='system.Role', verbose_name='角色'), + ), + migrations.AddField( + model_name='user', + name='superior', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL, verbose_name='上级主管'), + ), + migrations.AddField( + model_name='user', + name='user_permissions', + field=models.ManyToManyField(blank=True, help_text='Specific permissions for this user.', related_name='user_set', related_query_name='user', to='auth.Permission', verbose_name='user permissions'), + ), + migrations.AlterUniqueTogether( + name='dict', + unique_together={('name', 'is_used', 'type')}, + ), + ] diff --git a/admin/server/apps/system/migrations/0002_auto_20210718_0918.py b/admin/server/apps/system/migrations/0002_auto_20210718_0918.py new file mode 100644 index 0000000..eaaaa6c --- /dev/null +++ b/admin/server/apps/system/migrations/0002_auto_20210718_0918.py @@ -0,0 +1,23 @@ +# Generated by Django 3.1.7 on 2021-07-18 01:18 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('system', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='permission', + name='method', + field=models.CharField(blank=True, max_length=50, null=True, verbose_name='方法/代号'), + ), + migrations.AlterField( + model_name='user', + name='first_name', + field=models.CharField(blank=True, max_length=150, verbose_name='first name'), + ), + ] diff --git a/admin/server/apps/system/migrations/0003_auto_20220227_1732.py b/admin/server/apps/system/migrations/0003_auto_20220227_1732.py new file mode 100644 index 0000000..89a4c54 --- /dev/null +++ b/admin/server/apps/system/migrations/0003_auto_20220227_1732.py @@ -0,0 +1,18 @@ +# Generated by Django 3.1.8 on 2022-02-27 09:32 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('system', '0002_auto_20210718_0918'), + ] + + operations = [ + migrations.AlterField( + model_name='role', + name='depts', + field=models.ManyToManyField(blank=True, related_name='roles', to='system.Organization', verbose_name='权限范围'), + ), + ] diff --git a/admin/server/apps/system/migrations/0004_auto_20251128_1413.py b/admin/server/apps/system/migrations/0004_auto_20251128_1413.py new file mode 100644 index 0000000..d85cccf --- /dev/null +++ b/admin/server/apps/system/migrations/0004_auto_20251128_1413.py @@ -0,0 +1,58 @@ +# Generated by Django 3.2.23 on 2025-11-28 06:13 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('system', '0003_auto_20220227_1732'), + ] + + operations = [ + migrations.AlterField( + model_name='dict', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), + ), + migrations.AlterField( + model_name='dicttype', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), + ), + migrations.AlterField( + model_name='file', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), + ), + migrations.AlterField( + model_name='historicaldict', + name='id', + field=models.BigIntegerField(auto_created=True, blank=True, db_index=True, verbose_name='ID'), + ), + migrations.AlterField( + model_name='organization', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), + ), + migrations.AlterField( + model_name='permission', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), + ), + migrations.AlterField( + model_name='position', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), + ), + migrations.AlterField( + model_name='role', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), + ), + migrations.AlterField( + model_name='user', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), + ), + ] diff --git a/admin/server/apps/system/migrations/0005_alter_historicaldict_options_alter_file_create_by_and_more.py b/admin/server/apps/system/migrations/0005_alter_historicaldict_options_alter_file_create_by_and_more.py new file mode 100644 index 0000000..52a6f6a --- /dev/null +++ b/admin/server/apps/system/migrations/0005_alter_historicaldict_options_alter_file_create_by_and_more.py @@ -0,0 +1,34 @@ +# Generated by Django 4.2.26 on 2025-11-29 13:57 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('system', '0004_auto_20251128_1413'), + ] + + operations = [ + migrations.AlterModelOptions( + name='historicaldict', + options={'get_latest_by': ('history_date', 'history_id'), 'ordering': ('-history_date', '-history_id'), 'verbose_name': 'historical 字典', 'verbose_name_plural': 'historical 字典'}, + ), + migrations.AlterField( + model_name='file', + name='create_by', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人'), + ), + migrations.AlterField( + model_name='file', + name='update_by', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人'), + ), + migrations.AlterField( + model_name='historicaldict', + name='history_date', + field=models.DateTimeField(db_index=True), + ), + ] diff --git a/admin/server/apps/system/migrations/0006_auto_20251202_1204.py b/admin/server/apps/system/migrations/0006_auto_20251202_1204.py new file mode 100644 index 0000000..42a1e3e --- /dev/null +++ b/admin/server/apps/system/migrations/0006_auto_20251202_1204.py @@ -0,0 +1,22 @@ +# Generated by Django 3.2.23 on 2025-12-02 04:04 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('system', '0005_alter_historicaldict_options_alter_file_create_by_and_more'), + ] + + operations = [ + migrations.AlterModelOptions( + name='historicaldict', + options={'get_latest_by': 'history_date', 'ordering': ('-history_date', '-history_id'), 'verbose_name': 'historical 字典'}, + ), + migrations.AlterField( + model_name='historicaldict', + name='history_date', + field=models.DateTimeField(), + ), + ] diff --git a/admin/server/apps/system/migrations/__init__.py b/admin/server/apps/system/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/admin/server/apps/system/mixins.py b/admin/server/apps/system/mixins.py new file mode 100644 index 0000000..b1a70c0 --- /dev/null +++ b/admin/server/apps/system/mixins.py @@ -0,0 +1,48 @@ +from django.db.models.query import QuerySet + +class CreateUpdateModelAMixin: + """ + 业务用基本表A用 + """ + def perform_create(self, serializer): + serializer.save(create_by = self.request.user) + + def perform_update(self, serializer): + serializer.save(update_by = self.request.user) + +class CreateUpdateModelBMixin: + """ + 业务用基本表B用 + """ + def perform_create(self, serializer): + serializer.save(create_by = self.request.user, belong_dept=self.request.user.dept) + + def perform_update(self, serializer): + serializer.save(update_by = self.request.user) + +class CreateUpdateCustomMixin: + """ + 整合 + """ + def perform_create(self, serializer): + if hasattr(self.queryset.model, 'belong_dept'): + serializer.save(create_by = self.request.user, belong_dept=self.request.user.dept) + else: + serializer.save(create_by = self.request.user) + def perform_update(self, serializer): + serializer.save(update_by = self.request.user) + +class OptimizationMixin: + """ + 性能优化,需要在序列化器里定义setup_eager_loading,可在必要的View下继承 + """ + def get_queryset(self): + queryset = self.queryset + if isinstance(queryset, QuerySet): + # Ensure queryset is re-evaluated on each request. + queryset = queryset.all() + if hasattr(self.get_serializer_class(), 'setup_eager_loading'): + queryset = self.get_serializer_class().setup_eager_loading(queryset) # 性能优化 + return queryset + + \ No newline at end of file diff --git a/admin/server/apps/system/models.py b/admin/server/apps/system/models.py new file mode 100644 index 0000000..d41ae4b --- /dev/null +++ b/admin/server/apps/system/models.py @@ -0,0 +1,218 @@ +from django.db import models +from django.contrib.auth.models import AbstractUser +from django.db.models.base import Model +import django.utils.timezone as timezone +from django.db.models.query import QuerySet + +from utils.model import SoftModel, BaseModel +from simple_history.models import HistoricalRecords + + + +class Position(BaseModel): + """ + 职位/岗位 + """ + name = models.CharField('名称', max_length=32, unique=True) + description = models.CharField('描述', max_length=50, blank=True, null=True) + + class Meta: + verbose_name = '职位/岗位' + verbose_name_plural = verbose_name + + def __str__(self): + return self.name + + +class Permission(SoftModel): + """ + 功能权限:目录,菜单,接口 + """ + menu_type_choices = ( + ('目录', '目录'), + ('菜单', '菜单'), + ('接口', '接口') + ) + name = models.CharField('名称', max_length=30) + type = models.CharField('类型', max_length=20, + choices=menu_type_choices, default='接口') + is_frame = models.BooleanField('外部链接', default=False) + sort = models.IntegerField('排序标记', default=1) + parent = models.ForeignKey('self', null=True, blank=True, + on_delete=models.SET_NULL, verbose_name='父') + method = models.CharField('方法/代号', max_length=50, null=True, blank=True) + + def __str__(self): + return self.name + + class Meta: + verbose_name = '功能权限表' + verbose_name_plural = verbose_name + ordering = ['sort'] + + +class Organization(SoftModel): + """ + 组织架构 + """ + organization_type_choices = ( + ('公司', '公司'), + ('部门', '部门') + ) + name = models.CharField('名称', max_length=60) + type = models.CharField('类型', max_length=20, + choices=organization_type_choices, default='部门') + parent = models.ForeignKey('self', null=True, blank=True, + on_delete=models.SET_NULL, verbose_name='父') + + class Meta: + verbose_name = '组织架构' + verbose_name_plural = verbose_name + + def __str__(self): + return self.name + + +class Role(SoftModel): + """ + 角色 + """ + data_type_choices = ( + ('全部', '全部'), + ('自定义', '自定义'), + ('同级及以下', '同级及以下'), + ('本级及以下', '本级及以下'), + ('本级', '本级'), + ('仅本人', '仅本人') + ) + name = models.CharField('角色', max_length=32, unique=True) + perms = models.ManyToManyField(Permission, blank=True, verbose_name='功能权限') + datas = models.CharField('数据权限', max_length=50, + choices=data_type_choices, default='本级及以下') + depts = models.ManyToManyField( + Organization, blank=True, verbose_name='权限范围', related_name='roles') + description = models.CharField('描述', max_length=50, blank=True, null=True) + + class Meta: + verbose_name = '角色' + verbose_name_plural = verbose_name + + def __str__(self): + return self.name + + +class User(AbstractUser): + """ + 用户 + """ + name = models.CharField('姓名', max_length=20, null=True, blank=True) + phone = models.CharField('手机号', max_length=11, + null=True, blank=True, unique=True) + avatar = models.CharField( + '头像', default='/media/default/avatar.png', max_length=100, null=True, blank=True) + dept = models.ForeignKey( + Organization, null=True, blank=True, on_delete=models.SET_NULL, verbose_name='组织') + position = models.ManyToManyField(Position, blank=True, verbose_name='岗位') + superior = models.ForeignKey( + 'self', null=True, blank=True, on_delete=models.SET_NULL, verbose_name='上级主管') + roles = models.ManyToManyField(Role, blank=True, verbose_name='角色') + + class Meta: + verbose_name = '用户信息' + verbose_name_plural = verbose_name + ordering = ['id'] + + def __str__(self): + return self.username + +class DictType(SoftModel): + """ + 数据字典类型 + """ + name = models.CharField('名称', max_length=30) + code = models.CharField('代号', unique=True, max_length=30) + parent = models.ForeignKey('self', null=True, blank=True, + on_delete=models.SET_NULL, verbose_name='父') + + class Meta: + verbose_name = '字典类型' + verbose_name_plural = verbose_name + + def __str__(self): + return self.name + + +class Dict(SoftModel): + """ + 数据字典 + """ + name = models.CharField('名称', max_length=60) + code = models.CharField('编号', max_length=30, null=True, blank=True) + description = models.TextField('描述', blank=True, null=True) + type = models.ForeignKey( + DictType, on_delete=models.CASCADE, verbose_name='类型') + sort = models.IntegerField('排序', default=1) + parent = models.ForeignKey('self', null=True, blank=True, + on_delete=models.SET_NULL, verbose_name='父') + is_used = models.BooleanField('是否有效', default=True) + history = HistoricalRecords() + + class Meta: + verbose_name = '字典' + verbose_name_plural = verbose_name + unique_together = ('name', 'is_used', 'type') + + def __str__(self): + return self.name + +class CommonAModel(SoftModel): + """ + 业务用基本表A,包含create_by, update_by字段 + """ + create_by = models.ForeignKey( + User, null=True, blank=True, on_delete=models.SET_NULL, verbose_name='创建人', related_name= '%(class)s_create_by') + update_by = models.ForeignKey( + User, null=True, blank=True, on_delete=models.SET_NULL, verbose_name='最后编辑人', related_name= '%(class)s_update_by') + + class Meta: + abstract = True + +class CommonBModel(SoftModel): + """ + 业务用基本表B,包含create_by, update_by, belong_dept字段 + """ + create_by = models.ForeignKey( + User, null=True, blank=True, on_delete=models.SET_NULL, verbose_name='创建人', related_name = '%(class)s_create_by') + update_by = models.ForeignKey( + User, null=True, blank=True, on_delete=models.SET_NULL, verbose_name='最后编辑人', related_name = '%(class)s_update_by') + belong_dept = models.ForeignKey( + Organization, null=True, blank=True, on_delete=models.SET_NULL, verbose_name='所属部门', related_name= '%(class)s_belong_dept') + + class Meta: + abstract = True + + +class File(CommonAModel): + """ + 文件存储表,业务表根据具体情况选择是否外键关联 + """ + name = models.CharField('名称', max_length=100, null=True, blank=True) + size = models.IntegerField('文件大小', default=1, null=True, blank=True) + file = models.FileField('文件', upload_to='%Y/%m/%d/') + type_choices = ( + ('文档', '文档'), + ('视频', '视频'), + ('音频', '音频'), + ('图片', '图片'), + ('其它', '其它') + ) + mime = models.CharField('文件格式', max_length=120, null=True, blank=True) + type = models.CharField('文件类型', max_length=50, choices=type_choices, default='文档') + path = models.CharField('地址', max_length=200, null=True, blank=True) + + class Meta: + verbose_name = '文件库' + verbose_name_plural = verbose_name + + def __str__(self): + return self.name \ No newline at end of file diff --git a/admin/server/apps/system/permission.py b/admin/server/apps/system/permission.py new file mode 100644 index 0000000..a7d961a --- /dev/null +++ b/admin/server/apps/system/permission.py @@ -0,0 +1,97 @@ +from django.core.cache import cache +from rest_framework.permissions import BasePermission +from utils.queryset import get_child_queryset2 +from .models import Organization, Permission +from django.db.models import Q + +def get_permission_list(user): + """ + 获取权限列表,可用redis存取 + """ + if user.is_superuser: + perms_list = ['admin'] + else: + perms = Permission.objects.none() + roles = user.roles.all() + if roles: + for i in roles: + perms = perms | i.perms.all() + perms_list = perms.values_list('method', flat=True) + perms_list = list(set(perms_list)) + cache.set(user.username + '__perms', perms_list, 60*60) + return perms_list + + +class RbacPermission(BasePermission): + """ + 基于角色的权限校验类 + """ + + def has_permission(self, request, view): + """ + 权限校验逻辑 + :param request: + :param view: + :return: + """ + if not request.user: + perms = ['visitor'] # 如果没有经过认证,视为游客 + else: + perms = cache.get(request.user.username + '__perms') + if not perms: + perms = get_permission_list(request.user) + if perms: + if 'admin' in perms: + return True + elif not hasattr(view, 'perms_map'): + return True + else: + perms_map = view.perms_map + _method = request._request.method.lower() + if perms_map: + for key in perms_map: + if key == _method or key == '*': + if perms_map[key] in perms or perms_map[key] == '*': + return True + return False + else: + return False + + def has_object_permission(self, request, view, obj): + """ + Return `True` if permission is granted, `False` otherwise. + """ + if not request.user: + return False + if hasattr(obj, 'belong_dept'): + has_obj_perm(request.user, obj) + return True + +def has_obj_perm(user, obj): + """ + 数据权限控权 + 返回对象的是否可以操作 + 需要控数据权限的表需有belong_dept, create_by, update_by字段(部门, 创建人, 编辑人) + 传入user, obj实例 + """ + roles = user.roles + data_range = roles.values_list('datas', flat=True) + if '全部' in data_range: + return True + elif '自定义' in data_range: + depts = Organization.objects.filter(roles__in = roles) + if obj.belong_dept not in depts: + return False + elif '同级及以下' in data_range: + if user.dept.parent: + belong_depts = get_child_queryset2(user.dept.parent) + if obj.belong_dept not in belong_depts: + return False + elif '本级及以下' in data_range: + belong_depts = get_child_queryset2(user.dept) + if obj.belong_dept not in belong_depts: + return False + elif '本级' in data_range: + if obj.belong_dept is not user.dept: + return False + return True \ No newline at end of file diff --git a/admin/server/apps/system/permission_data.py b/admin/server/apps/system/permission_data.py new file mode 100644 index 0000000..180a50b --- /dev/null +++ b/admin/server/apps/system/permission_data.py @@ -0,0 +1,98 @@ +from django.db.models import Q +from django.db.models.query import QuerySet +from rest_framework.generics import GenericAPIView +from apps.system.mixins import CreateUpdateModelBMixin +from apps.system.models import Organization +from utils.queryset import get_child_queryset2 + + +class RbacFilterSet(CreateUpdateModelBMixin, object): + """ + 数据权限控权返回的queryset + 在必须的View下继承 + 需要控数据权限的表需有belong_dept, create_by, update_by字段(部门, 创建人, 编辑人) + 带性能优化 + 包括必要的创建和编辑操作 + + 此处对性能有较大影响,根据业务需求进行修改或取舍 + """ + def get_queryset(self): + assert self.queryset is not None, ( + "'%s' should either include a `queryset` attribute, " + "or override the `get_queryset()` method." + % self.__class__.__name__ + ) + + queryset = self.queryset + if isinstance(queryset, QuerySet): + # Ensure queryset is re-evaluated on each request. + queryset = queryset.all() + + if hasattr(self.get_serializer_class(), 'setup_eager_loading'): + queryset = self.get_serializer_class().setup_eager_loading(queryset) # 性能优化 + + if self.request.user.is_superuser: + return queryset + + if hasattr(queryset.model, 'belong_dept'): + user = self.request.user + roles = user.roles + data_range = roles.values_list('datas', flat=True) + if '全部' in data_range: + return queryset + elif '自定义' in data_range: + queryset = queryset.filter(belong_dept__roles__in=roles) + return queryset + elif '同级及以下' in data_range: + if user.dept.parent: + belong_depts = get_child_queryset2(user.dept.parent) + queryset = queryset.filter(belong_dept__in = belong_depts) + return queryset + elif '本级及以下' in data_range: + belong_depts = get_child_queryset2(user.dept) + queryset = queryset.filter(belong_dept__in = belong_depts) + return queryset + elif '本级' in data_range: + queryset = queryset.filter(belong_dept = user.dept) + return queryset + elif '仅本人' in data_range: + queryset = queryset.filter(Q(create_by=user)|Q(update_by=user)) + return queryset + return queryset + + +def rbac_filter_queryset(user, queryset): + """ + 数据权限控权返回的queryset方法 + 需要控数据权限的表需有belong_dept, create_by, update_by字段(部门, 创建人, 编辑人) + 传入user实例,queryset + """ + if user.is_superuser: + return queryset + + roles = user.roles + data_range = roles.values_list('datas', flat=True) + if hasattr(queryset.model, 'belong_dept'): + if '全部' in data_range: + return queryset + elif '自定义' in data_range: + if roles.depts.exists(): + queryset = queryset.filter(belong_dept__in = roles.depts) + return queryset + elif '同级及以下' in data_range: + if user.dept.parent: + belong_depts = get_child_queryset2(user.dept.parent) + queryset = queryset.filter(belong_dept__in = belong_depts) + return queryset + elif '本级及以下' in data_range: + belong_depts = get_child_queryset2(user.dept) + queryset = queryset.filter(belong_dept__in = belong_depts) + return queryset + elif '本级' in data_range: + queryset = queryset.filter(belong_dept = user.dept) + return queryset + elif '仅本人' in data_range: + queryset = queryset.filter(Q(create_by=user)|Q(update_by=user)) + return queryset + return queryset + diff --git a/admin/server/apps/system/serializers.py b/admin/server/apps/system/serializers.py new file mode 100644 index 0000000..c422d08 --- /dev/null +++ b/admin/server/apps/system/serializers.py @@ -0,0 +1,187 @@ +import re + +from django_celery_beat.models import PeriodicTask, CrontabSchedule, IntervalSchedule +from rest_framework import serializers + +from .models import (Dict, DictType, File, Organization, Permission, Position, + Role, User) + +class IntervalSerializer(serializers.ModelSerializer): + class Meta: + model = IntervalSchedule + fields = '__all__' + +class CrontabSerializer(serializers.ModelSerializer): + class Meta: + model = CrontabSchedule + exclude = ['timezone'] + +class PTaskCreateUpdateSerializer(serializers.ModelSerializer): + class Meta: + model = PeriodicTask + fields = ['name', 'task', 'interval', 'crontab', 'args', 'kwargs'] + +class PTaskSerializer(serializers.ModelSerializer): + interval_ = IntervalSerializer(source='interval', read_only=True) + crontab_ = CrontabSerializer(source='crontab', read_only=True) + schedule = serializers.SerializerMethodField() + timetype = serializers.SerializerMethodField() + class Meta: + model = PeriodicTask + fields = '__all__' + @staticmethod + def setup_eager_loading(queryset): + """ Perform necessary eager loading of data. """ + queryset = queryset.select_related('interval','crontab') + return queryset + + def get_schedule(self, obj): + if obj.interval: + return obj.interval.__str__() + if obj.crontab: + return obj.crontab.__str__() + return '' + + def get_timetype(self, obj): + if obj.interval: + return 'interval' + if obj.crontab: + return 'crontab' + return 'interval' + +class FileSerializer(serializers.ModelSerializer): + class Meta: + model = File + fields = "__all__" + +class DictTypeSerializer(serializers.ModelSerializer): + """ + 数据字典类型序列化 + """ + class Meta: + model = DictType + fields = '__all__' + + +class DictSerializer(serializers.ModelSerializer): + """ + 数据字典序列化 + """ + class Meta: + model = Dict + fields = '__all__' + + +class PositionSerializer(serializers.ModelSerializer): + """ + 岗位序列化 + """ + class Meta: + model = Position + fields = '__all__' + + +class RoleSerializer(serializers.ModelSerializer): + """ + 角色序列化 + """ + class Meta: + model = Role + fields = '__all__' + + +class PermissionSerializer(serializers.ModelSerializer): + """ + 权限序列化 + """ + class Meta: + model = Permission + fields = '__all__' + + +class OrganizationSerializer(serializers.ModelSerializer): + """ + 组织架构序列化 + """ + type = serializers.ChoiceField( + choices=Organization.organization_type_choices, default='部门') + + class Meta: + model = Organization + fields = '__all__' + +class UserSimpleSerializer(serializers.ModelSerializer): + class Meta: + model = User + fields = ['id', 'username', 'name'] + +class UserListSerializer(serializers.ModelSerializer): + """ + 用户列表序列化 + """ + dept_name = serializers.StringRelatedField(source='dept') + roles_name = serializers.StringRelatedField(source='roles', many=True) + avatar = serializers.SerializerMethodField() + + class Meta: + model = User + fields = ['id', 'name', 'phone', 'email', 'position', + 'username', 'is_active', 'date_joined', 'dept_name', 'dept', 'roles', 'avatar', 'roles_name'] + + def get_avatar(self, obj): + if obj.avatar and obj.avatar.startswith('/'): + request = self.context.get('request') + if request: + return request.build_absolute_uri(obj.avatar) + return obj.avatar + + @staticmethod + def setup_eager_loading(queryset): + """ Perform necessary eager loading of data. """ + queryset = queryset.select_related('superior','dept') + queryset = queryset.prefetch_related('roles',) + return queryset + +class UserModifySerializer(serializers.ModelSerializer): + """ + 用户编辑序列化 + """ + phone = serializers.CharField(max_length=11, required=False, allow_null=True) + + class Meta: + model = User + fields = ['id', 'username', 'name', 'phone', 'email', 'dept', + 'position', 'avatar', 'is_active', 'roles', 'is_superuser'] + + def validate_phone(self, phone): + if phone is not None: + re_phone = '^1[358]\d{9}$|^147\d{8}$|^176\d{8}$' + if not re.match(re_phone, phone): + raise serializers.ValidationError('手机号码不合法') + return phone + + +class UserCreateSerializer(serializers.ModelSerializer): + """ + 创建用户序列化 + """ + username = serializers.CharField(required=True) + phone = serializers.CharField(max_length=11, required=False) + + class Meta: + model = User + fields = ['id', 'username', 'name', 'phone', 'email', 'dept', + 'position', 'avatar', 'is_active', 'roles'] + + def validate_username(self, username): + if User.objects.filter(username=username): + raise serializers.ValidationError(username + ' 账号已存在') + return username + + def validate_phone(self, phone): + re_phone = '^1[358]\d{9}$|^147\d{8}$|^176\d{8}$' + if not re.match(re_phone, phone): + raise serializers.ValidationError('手机号码不合法') + if User.objects.filter(phone=phone): + raise serializers.ValidationError('手机号已经被注册') + return phone diff --git a/admin/server/apps/system/signals.py b/admin/server/apps/system/signals.py new file mode 100644 index 0000000..334bc57 --- /dev/null +++ b/admin/server/apps/system/signals.py @@ -0,0 +1,12 @@ +from django.db.models.signals import m2m_changed +from .models import Role, Permission, User +from django.dispatch import receiver +from django.core.cache import cache +from .permission import get_permission_list + +# 变更用户角色时动态更新权限或者前端刷新 +@receiver(m2m_changed, sender=User.roles.through) +def update_perms_cache_user(sender, instance, action, **kwargs): + if action in ['post_remove', 'post_add']: + if cache.get(instance.username+'__perms', None): + get_permission_list(instance) \ No newline at end of file diff --git a/admin/server/apps/system/tasks.py b/admin/server/apps/system/tasks.py new file mode 100644 index 0000000..6d2adae --- /dev/null +++ b/admin/server/apps/system/tasks.py @@ -0,0 +1,9 @@ +# Create your tasks here +from __future__ import absolute_import, unicode_literals + +from celery import shared_task + + +@shared_task +def show(): + print('ok') \ No newline at end of file diff --git a/admin/server/apps/system/tests.py b/admin/server/apps/system/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/admin/server/apps/system/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/admin/server/apps/system/urls.py b/admin/server/apps/system/urls.py new file mode 100644 index 0000000..02a4ecb --- /dev/null +++ b/admin/server/apps/system/urls.py @@ -0,0 +1,19 @@ +from django.urls import path, include +from .views import TaskList, UserViewSet, OrganizationViewSet, PermissionViewSet, RoleViewSet, PositionViewSet, TestView, DictTypeViewSet, DictViewSet, PTaskViewSet +from rest_framework import routers + + +router = routers.DefaultRouter() +router.register('user', UserViewSet, basename="user") +router.register('organization', OrganizationViewSet, basename="organization") +router.register('permission', PermissionViewSet, basename="permission") +router.register('role', RoleViewSet, basename="role") +router.register('position', PositionViewSet, basename="position") +router.register('dicttype', DictTypeViewSet, basename="dicttype") +router.register('dict', DictViewSet, basename="dict") +router.register('ptask', PTaskViewSet, basename="ptask") +urlpatterns = [ + path('', include(router.urls)), + path('task/', TaskList.as_view()), + path('test/', TestView.as_view()) +] diff --git a/admin/server/apps/system/views.py b/admin/server/apps/system/views.py new file mode 100644 index 0000000..bf4f07d --- /dev/null +++ b/admin/server/apps/system/views.py @@ -0,0 +1,440 @@ +import logging + +from django.conf import settings +from django.contrib.auth.hashers import check_password, make_password +from django.core.cache import cache +from django_celery_beat.models import PeriodicTask, IntervalSchedule, CrontabSchedule +from django_filters.rest_framework import DjangoFilterBackend +from rest_framework import serializers, status +from rest_framework.decorators import action +from rest_framework.filters import OrderingFilter, SearchFilter +from rest_framework.mixins import (CreateModelMixin, DestroyModelMixin, + ListModelMixin, RetrieveModelMixin, + UpdateModelMixin) +from rest_framework.pagination import PageNumberPagination +from rest_framework.parsers import (FileUploadParser, JSONParser, + MultiPartParser) +from rest_framework.permissions import IsAuthenticated, AllowAny +from rest_framework.response import Response +from rest_framework.views import APIView +from rest_framework.viewsets import GenericViewSet, ModelViewSet +from rest_framework_simplejwt.tokens import RefreshToken +from rest_framework.exceptions import ValidationError, ParseError +from utils.queryset import get_child_queryset2 +from PIL import Image +from io import BytesIO +from django.core.files.uploadedfile import InMemoryUploadedFile +import sys +import os + +from .filters import UserFilter +from .mixins import CreateUpdateModelAMixin, OptimizationMixin +from .models import (Dict, DictType, File, Organization, Permission, Position, + Role, User) +from .permission import RbacPermission, get_permission_list +from .permission_data import RbacFilterSet +from .serializers import (DictSerializer, DictTypeSerializer, FileSerializer, + OrganizationSerializer, PermissionSerializer, + PositionSerializer, RoleSerializer, PTaskSerializer,PTaskCreateUpdateSerializer, + UserCreateSerializer, UserListSerializer, + UserModifySerializer) + +logger = logging.getLogger('log') +# logger.info('请求成功! response_code:{};response_headers:{};response_body:{}'.format(response_code, response_headers, response_body[:251])) +# logger.error('请求出错-{}'.format(error)) + +from server.celery import app as celery_app +class TaskList(APIView): + permission_classes = () + + def get(self, requests): + tasks = list(sorted(name for name in celery_app.tasks if not name.startswith('celery.'))) + return Response(tasks) + +class LogoutView(APIView): + permission_classes = [] + + def get(self, request, *args, **kwargs): # 可将token加入黑名单 + return Response(status=status.HTTP_200_OK) + +class PTaskViewSet(OptimizationMixin, ModelViewSet): + perms_map = {'get': '*', 'post': 'ptask_create', + 'put': 'ptask_update', 'delete': 'ptask_delete'} + queryset = PeriodicTask.objects.exclude(name__contains='celery.') + serializer_class = PTaskSerializer + search_fields = ['name'] + filterset_fields = ['enabled'] + ordering = ['-pk'] + + @action(methods=['put'], detail=True, perms_map={'put':'task_update'}, + url_name='task_toggle') + def toggle(self, request, pk=None): + """ + 修改启用禁用状态 + """ + obj = self.get_object() + obj.enabled = False if obj.enabled else True + obj.save() + return Response(status=status.HTTP_200_OK) + + def get_serializer_class(self): + if self.action in ['list', 'retrieve']: + return PTaskSerializer + return PTaskCreateUpdateSerializer + + def create(self, request, *args, **kwargs): + data = request.data + timetype = data.get('timetype', None) + interval_ = data.get('interval_', None) + crontab_ = data.get('crontab_', None) + if timetype == 'interval' and interval_: + data['crontab'] = None + try: + interval, _ = IntervalSchedule.objects.get_or_create(**interval_, defaults = interval_) + data['interval'] = interval.id + except: + raise ValidationError('时间策略有误') + if timetype == 'crontab' and crontab_: + data['interval'] = None + try: + crontab_['timezone'] = 'Asia/Shanghai' + crontab, _ = CrontabSchedule.objects.get_or_create(**crontab_, defaults = crontab_) + data['crontab'] = crontab.id + except: + raise ValidationError('时间策略有误') + serializer = self.get_serializer(data=data) + serializer.is_valid(raise_exception=True) + serializer.save() + return Response(status=status.HTTP_200_OK) + + def update(self, request, *args, **kwargs): + data = request.data + timetype = data.get('timetype', None) + interval_ = data.get('interval_', None) + crontab_ = data.get('crontab_', None) + if timetype == 'interval' and interval_: + data['crontab'] = None + try: + if 'id' in interval_: + del interval_['id'] + interval, _ = IntervalSchedule.objects.get_or_create(**interval_, defaults = interval_) + data['interval'] = interval.id + except: + raise ValidationError('时间策略有误') + if timetype == 'crontab' and crontab_: + data['interval'] = None + try: + crontab_['timezone'] = 'Asia/Shanghai' + if 'id'in crontab_: + del crontab_['id'] + crontab, _ = CrontabSchedule.objects.get_or_create(**crontab_, defaults = crontab_) + data['crontab'] = crontab.id + except: + raise ValidationError('时间策略有误') + instance = self.get_object() + serializer = self.get_serializer(instance, data=data) + serializer.is_valid(raise_exception=True) + serializer.save() + return Response(status=status.HTTP_200_OK) + + +class DictTypeViewSet(ModelViewSet): + """ + 数据字典类型-增删改查 + """ + perms_map = {'get': '*', 'post': 'dicttype_create', + 'put': 'dicttype_update', 'delete': 'dicttype_delete'} + queryset = DictType.objects.all() + serializer_class = DictTypeSerializer + pagination_class = None + search_fields = ['name'] + ordering_fields = ['pk'] + ordering = ['pk'] + + +class DictViewSet(ModelViewSet): + """ + 数据字典-增删改查 + """ + perms_map = {'get': '*', 'post': 'dict_create', + 'put': 'dict_update', 'delete': 'dict_delete'} + # queryset = Dict.objects.get_queryset(all=True) # 获取全部的,包括软删除的 + queryset = Dict.objects.all() + filterset_fields = ['type', 'is_used', 'type__code'] + serializer_class = DictSerializer + search_fields = ['name'] + ordering_fields = ['sort'] + ordering = ['sort'] + + def paginate_queryset(self, queryset): + """ + 如果查询参数里没有page但有type或type__code时则不分页,否则请求分页 + 也可用utils.pageornot方法 + """ + if self.paginator is None: + return None + elif (not self.request.query_params.get('page', None)) and ((self.request.query_params.get('type__code', None)) or (self.request.query_params.get('type', None))): + return None + return self.paginator.paginate_queryset(queryset, self.request, view=self) + +class PositionViewSet(ModelViewSet): + """ + 岗位-增删改查 + """ + perms_map = {'get': '*', 'post': 'position_create', + 'put': 'position_update', 'delete': 'position_delete'} + queryset = Position.objects.all() + serializer_class = PositionSerializer + pagination_class = None + search_fields = ['name','description'] + ordering_fields = ['pk'] + ordering = ['pk'] + + +class TestView(APIView): + perms_map = {'get': 'test_view'} # 单个API控权 + authentication_classes = [] + permission_classes = [] + def get(self, request, format=None): + return Response('测试api接口') + + +class PermissionViewSet(ModelViewSet): + """ + 权限-增删改查 + """ + perms_map = {'get': '*', 'post': 'perm_create', + 'put': 'perm_update', 'delete': 'perm_delete'} + queryset = Permission.objects.all() + serializer_class = PermissionSerializer + pagination_class = None + search_fields = ['name'] + ordering_fields = ['sort'] + ordering = ['sort', 'pk'] + + +class OrganizationViewSet(ModelViewSet): + """ + 组织机构-增删改查 + """ + perms_map = {'get': '*', 'post': 'org_create', + 'put': 'org_update', 'delete': 'org_delete'} + queryset = Organization.objects.all() + serializer_class = OrganizationSerializer + pagination_class = None + search_fields = ['name', 'type'] + ordering_fields = ['pk'] + ordering = ['pk'] + + +class RoleViewSet(ModelViewSet): + """ + 角色-增删改查 + """ + perms_map = {'get': '*', 'post': 'role_create', + 'put': 'role_update', 'delete': 'role_delete'} + queryset = Role.objects.all() + serializer_class = RoleSerializer + pagination_class = None + search_fields = ['name'] + ordering_fields = ['pk'] + ordering = ['pk'] + + +class UserViewSet(ModelViewSet): + """ + 用户管理-增删改查 + """ + perms_map = {'get': '*', 'post': 'user_create', + 'put': 'user_update', 'delete': 'user_delete'} + queryset = User.objects.all() + serializer_class = UserListSerializer + filterset_class = UserFilter + search_fields = ['username', 'name', 'phone', 'email'] + ordering_fields = ['-pk'] + + def perform_destroy(self, instance): + if instance.is_superuser: + raise ParseError('不能删除超级用户') + instance.delete() + + def get_queryset(self): + queryset = self.queryset + if hasattr(self.get_serializer_class(), 'setup_eager_loading'): + queryset = self.get_serializer_class().setup_eager_loading(queryset) # 性能优化 + dept = self.request.query_params.get('dept', None) # 该部门及其子部门所有员工 + if dept: + deptqueryset = get_child_queryset2(Organization.objects.get(pk=dept)) + queryset = queryset.filter(dept__in=deptqueryset) + return queryset + + def get_serializer_class(self): + # 根据请求类型动态变更serializer + if self.action == 'create': + return UserCreateSerializer + elif self.action == 'update': + return UserModifySerializer + elif self.action == 'list': + return UserListSerializer + return super().get_serializer_class() + + def create(self, request, *args, **kwargs): + # 创建用户默认添加密码 + password = request.data['password'] if 'password' in request.data else None + if password: + password = make_password(password) + else: + password = make_password('0000') + serializer = self.get_serializer(data=request.data) + serializer.is_valid(raise_exception=True) + serializer.save(password=password) + return Response(serializer.data) + + @action(methods=['put'], detail=False, permission_classes=[IsAuthenticated], # perms_map={'put':'change_password'} + url_name='change_password') + def password(self, request, pk=None): + """ + 修改密码 + """ + user = request.user + old_password = request.data['old_password'] + if check_password(old_password, user.password): + new_password1 = request.data['new_password1'] + new_password2 = request.data['new_password2'] + if new_password1 == new_password2: + user.set_password(new_password2) + user.save() + return Response('密码修改成功!', status=status.HTTP_200_OK) + else: + return Response('新密码两次输入不一致!', status=status.HTTP_400_BAD_REQUEST) + else: + return Response('旧密码错误!', status=status.HTTP_400_BAD_REQUEST) + + # perms_map={'get':'*'}, 自定义action控权 + @action(methods=['get'], detail=False, url_name='my_info', permission_classes=[IsAuthenticated]) + def info(self, request, pk=None): + """ + 初始化用户信息 + """ + user = request.user + perms = get_permission_list(user) + data = { + 'id': user.id, + 'username': user.username, + 'name': user.name, + 'roles': user.roles.values_list('name', flat=True), + 'avatar': request.build_absolute_uri(user.avatar) if user.avatar and user.avatar.startswith('/') else user.avatar, + 'perms': perms, + } + return Response(data) + +class FileViewSet(CreateModelMixin, DestroyModelMixin, RetrieveModelMixin, ListModelMixin, GenericViewSet): + """ + 文件上传用 + """ + perms_map = None + authentication_classes = [] + permission_classes=[AllowAny] + parser_classes = [MultiPartParser, JSONParser] + queryset = File.objects.all() + serializer_class = FileSerializer + filterset_fields = ['type'] + search_fields = ['name'] + ordering = ['-create_time'] + + def perform_create(self, serializer): + fileobj = self.request.data.get('file') + name = fileobj._name + size = fileobj.size + mime = fileobj.content_type + type = '其它' + if 'image' in mime: + type = '图片' + # Image compression and resizing logic + try: + img = Image.open(fileobj) + + # Max dimensions (e.g., 1920x1920) to prevent huge images + MAX_WIDTH = 1920 + MAX_HEIGHT = 1920 + + if img.width > MAX_WIDTH or img.height > MAX_HEIGHT: + img.thumbnail((MAX_WIDTH, MAX_HEIGHT), Image.LANCZOS) + + # Compress + output_io = BytesIO() + + # Determine format + img_format = img.format + if not img_format: + img_format = 'JPEG' if 'jpeg' in mime or 'jpg' in mime else 'PNG' + + # For JPEG, we can use quality + if img_format.upper() in ('JPEG', 'JPG'): + if img.mode != 'RGB': + img = img.convert('RGB') + img.save(output_io, format='JPEG', quality=80, optimize=True) + new_mime = 'image/jpeg' + # Update extension if needed + root, ext = os.path.splitext(name) + if ext.lower() not in ['.jpg', '.jpeg']: + name = root + '.jpg' + elif img_format.upper() == 'PNG': + # PNG compression + img.save(output_io, format='PNG', optimize=True) + new_mime = 'image/png' + else: + # Fallback for other formats + img.save(output_io, format=img_format) + new_mime = mime + + output_io.seek(0) + new_size = output_io.getbuffer().nbytes + + # Create a new InMemoryUploadedFile + fileobj = InMemoryUploadedFile( + output_io, + 'file', + name, + new_mime, + new_size, + None + ) + size = new_size + mime = new_mime + + except Exception as e: + logger.error(f"Image compression failed: {e}") + # Fallback to original file if compression fails + fileobj.seek(0) + pass + + elif 'video' in mime: + type = '视频' + elif 'audio' in mime: + type = '音频' + elif 'application' or 'text' in mime: + type = '文档' + user = self.request.user if (self.request.user and self.request.user.is_authenticated) else None + if user and not isinstance(user, User): + user = None + instance = serializer.save(create_by = user, name=name, size=size, type=type, mime=mime, file=fileobj) + + # Ensure forward slashes for URL + file_name = instance.file.name.replace('\\', '/') + instance.path = self.request.build_absolute_uri(settings.MEDIA_URL + file_name) + + logger.info(f"File uploaded: {instance.path}") + instance.save() + + def perform_destroy(self, instance): + instance.file.delete(save=False) + instance.delete(soft=False) + + @action(methods=['delete'], detail=False) + def clear_all(self, request): + queryset = self.filter_queryset(self.get_queryset()) + for file_obj in queryset: + file_obj.file.delete(save=False) + file_obj.delete(soft=False) + return Response(status=status.HTTP_204_NO_CONTENT) diff --git a/admin/server/apps/wf/__init__.py b/admin/server/apps/wf/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/admin/server/apps/wf/admin.py b/admin/server/apps/wf/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/admin/server/apps/wf/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/admin/server/apps/wf/apps.py b/admin/server/apps/wf/apps.py new file mode 100644 index 0000000..f0709ed --- /dev/null +++ b/admin/server/apps/wf/apps.py @@ -0,0 +1,7 @@ +from django.apps import AppConfig + +class WfConfig(AppConfig): + name = 'apps.wf' + verbose_name = '工作流管理' + + diff --git a/admin/server/apps/wf/filters.py b/admin/server/apps/wf/filters.py new file mode 100644 index 0000000..02c9066 --- /dev/null +++ b/admin/server/apps/wf/filters.py @@ -0,0 +1,26 @@ +from django_filters import rest_framework as filters +from .models import Ticket +class TicketFilterSet(filters.FilterSet): + start_create = filters.DateFilter(field_name="create_time", lookup_expr='gte') + end_create = filters.DateFilter(field_name="create_time", lookup_expr='lte') + category = filters.ChoiceFilter(choices = Ticket.category_choices, method='filter_category') + + class Meta: + model = Ticket + fields = ['workflow', 'state', 'act_state', 'start_create', 'end_create', 'category'] + + def filter_category(self, queryset, name, value): + user=self.request.user + if value == 'owner': # 我的 + queryset = queryset.filter(create_by=user) + elif value == 'duty': # 待办 + queryset = queryset.filter(participant__contains=user.id).exclude(act_state__in=[Ticket.TICKET_ACT_STATE_FINISH, Ticket.TICKET_ACT_STATE_CLOSED]) + elif value == 'worked': # 处理过的 + queryset = queryset.filter(ticketflow_ticket__participant=user).exclude(create_by=user).order_by('-update_time').distinct() + elif value == 'cc': # 抄送我的 + queryset = queryset.filter(ticketflow_ticket__participant_cc__contains=user.id).exclude(create_by=user).order_by('-update_time').distinct() + elif value == 'all': + pass + else: + queryset = queryset.none() + return queryset \ No newline at end of file diff --git a/admin/server/apps/wf/migrations/0001_initial.py b/admin/server/apps/wf/migrations/0001_initial.py new file mode 100644 index 0000000..a7e9cba --- /dev/null +++ b/admin/server/apps/wf/migrations/0001_initial.py @@ -0,0 +1,177 @@ +# Generated by Django 3.1.8 on 2022-01-29 02:04 + +from django.conf import settings +from django.db import migrations, models +import jsonfield.fields +import django.db.models.deletion +import django.utils.timezone + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('system', '0002_auto_20210718_0918'), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name='State', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')), + ('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')), + ('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')), + ('name', models.CharField(max_length=50, verbose_name='名称')), + ('is_hidden', models.BooleanField(default=False, help_text='设置为True时,获取工单步骤api中不显示此状态(当前处于此状态时除外)', verbose_name='是否隐藏')), + ('sort', models.IntegerField(default=0, help_text='用于工单步骤接口时,step上状态的顺序(因为存在网状情况,所以需要人为设定顺序),值越小越靠前', verbose_name='状态顺序')), + ('type', models.IntegerField(choices=[(0, '普通'), (1, '开始'), (2, '结束')], default=0, help_text='0.普通类型 1.初始状态(用于新建工单时,获取对应的字段必填及transition信息) 2.结束状态(此状态下的工单不得再处理,即没有对应的transition)', verbose_name='状态类型')), + ('enable_retreat', models.BooleanField(default=False, help_text='开启后允许工单创建人在此状态直接撤回工单到初始状态', verbose_name='允许撤回')), + ('participant_type', models.IntegerField(blank=True, choices=[(0, '无处理人'), (1, '个人'), (2, '多人'), (4, '角色'), (6, '脚本'), (7, '工单的字段'), (9, '代码获取')], default=1, help_text='0.无处理人,1.个人,2.多人,3.部门,4.角色,5.变量(支持工单创建人,创建人的leader),6.脚本,7.工单的字段内容(如表单中的"测试负责人",需要为用户名或者逗号隔开的多个用户名),8.父工单的字段内容。 初始状态请选择类型5,参与人填create_by', verbose_name='参与者类型')), + ('participant', jsonfield.fields.JSONField(blank=True, default=list, help_text='可以为空(无处理人的情况,如结束状态)、userid、userid列表\\部门id\\角色id\\变量(create_by,create_by_tl)\\脚本记录的id等,包含子工作流的需要设置处理人为loonrobot', verbose_name='参与者')), + ('state_fields', jsonfield.fields.JSONField(default=dict, help_text='json格式字典存储,包括读写属性1:只读,2:必填,3:可选, 4:隐藏 示例:{"create_time":1,"title":2, "sn":1}, 内置特殊字段participant_info.participant_name:当前处理人信息(部门名称、角色名称),state.state_name:当前状态的状态名,workflow.workflow_name:工作流名称', verbose_name='表单字段')), + ('distribute_type', models.IntegerField(choices=[(1, '主动接单'), (2, '直接处理'), (3, '随机分配'), (4, '全部处理')], default=1, help_text='1.主动接单(如果当前处理人实际为多人的时候,需要先接单才能处理) 2.直接处理(即使当前处理人实际为多人,也可以直接处理) 3.随机分配(如果实际为多人,则系统会随机分配给其中一个人) 4.全部处理(要求所有参与人都要处理一遍,才能进入下一步)', verbose_name='分配方式')), + ('filter_policy', models.IntegerField(choices=[(0, '无'), (1, '和工单同属一及上级部门'), (2, '和创建人同属一及上级部门'), (3, '和上步处理人同属一及上级部门')], default=0, verbose_name='参与人过滤策略')), + ('participant_cc', jsonfield.fields.JSONField(blank=True, default=list, help_text='抄送给(userid列表)', verbose_name='抄送给')), + ('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='state_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人')), + ('update_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='state_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人')), + ], + options={ + 'abstract': False, + }, + ), + migrations.CreateModel( + name='Ticket', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')), + ('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')), + ('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')), + ('title', models.CharField(blank=True, help_text='工单标题', max_length=500, null=True, verbose_name='标题')), + ('sn', models.CharField(help_text='工单的流水号', max_length=25, verbose_name='流水号')), + ('ticket_data', jsonfield.fields.JSONField(default=dict, help_text='工单自定义字段内容', verbose_name='工单数据')), + ('in_add_node', models.BooleanField(default=False, help_text='是否处于加签状态下', verbose_name='加签状态中')), + ('script_run_last_result', models.BooleanField(default=True, verbose_name='脚本最后一次执行结果')), + ('participant_type', models.IntegerField(choices=[(0, '无处理人'), (1, '个人'), (2, '多人'), (4, '角色'), (6, '脚本'), (7, '工单的字段'), (9, '代码获取')], default=0, help_text='0.无处理人,1.个人,2.多人', verbose_name='当前处理人类型')), + ('participant', jsonfield.fields.JSONField(blank=True, default=list, help_text='可以为空(无处理人的情况,如结束状态)、userid、userid列表', verbose_name='当前处理人')), + ('act_state', models.IntegerField(choices=[(0, '草稿中'), (1, '进行中'), (2, '被退回'), (3, '被撤回'), (4, '已完成'), (5, '已关闭')], default=1, help_text='当前工单的进行状态', verbose_name='进行状态')), + ('multi_all_person', jsonfield.fields.JSONField(blank=True, default=dict, help_text='需要当前状态处理人全部处理时实际的处理结果,json格式', verbose_name='全部处理的结果')), + ('add_node_man', models.ForeignKey(blank=True, help_text='加签操作的人,工单当前处理人处理完成后会回到该处理人,当处于加签状态下才有效', null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL, verbose_name='加签人')), + ('belong_dept', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='ticket_belong_dept', to='system.organization', verbose_name='所属部门')), + ('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='ticket_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人')), + ('parent', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='wf.ticket', verbose_name='父工单')), + ('parent_state', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='ticket_parent_state', to='wf.state', verbose_name='父工单状态')), + ('state', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='ticket_state', to='wf.state', verbose_name='当前状态')), + ('update_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='ticket_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人')), + ], + options={ + 'abstract': False, + }, + ), + migrations.CreateModel( + name='Workflow', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')), + ('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')), + ('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')), + ('name', models.CharField(max_length=50, verbose_name='名称')), + ('key', models.CharField(blank=True, max_length=20, null=True, unique=True, verbose_name='工作流标识')), + ('sn_prefix', models.CharField(default='hb', max_length=50, verbose_name='流水号前缀')), + ('description', models.CharField(blank=True, max_length=200, null=True, verbose_name='描述')), + ('view_permission_check', models.BooleanField(default=True, help_text='开启后,只允许工单的关联人(创建人、曾经的处理人)有权限查看工单', verbose_name='查看权限校验')), + ('limit_expression', jsonfield.fields.JSONField(blank=True, default=dict, help_text='限制周期({"period":24} 24小时), 限制次数({"count":1}在限制周期内只允许提交1次), 限制级别({"level":1} 针对(1单个用户 2全局)限制周期限制次数,默认特定用户);允许特定人员提交({"allow_persons":"zhangsan,lisi"}只允许张三提交工单,{"allow_depts":"1,2"}只允许部门id为1和2的用户提交工单,{"allow_roles":"1,2"}只允许角色id为1和2的用户提交工单)', verbose_name='限制表达式')), + ('display_form_str', jsonfield.fields.JSONField(blank=True, default=list, help_text='默认"[]",用于用户只有对应工单查看权限时显示哪些字段,field_key的list的json,如["days","sn"],内置特殊字段participant_info.participant_name:当前处理人信息(部门名称、角色名称),state.state_name:当前状态的状态名,workflow.workflow_name:工作流名称', verbose_name='展现表单字段')), + ('title_template', models.CharField(blank=True, default='{title}', help_text='工单字段的值可以作为参数写到模板中,格式如:你有一个待办工单:{title}', max_length=50, null=True, verbose_name='标题模板')), + ('content_template', models.CharField(blank=True, default='标题:{title}, 创建时间:{create_time}', help_text='工单字段的值可以作为参数写到模板中,格式如:标题:{title}, 创建时间:{create_time}', max_length=1000, null=True, verbose_name='内容模板')), + ('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='workflow_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人')), + ('update_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='workflow_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人')), + ], + options={ + 'abstract': False, + }, + ), + migrations.CreateModel( + name='Transition', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')), + ('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')), + ('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')), + ('name', models.CharField(max_length=50, verbose_name='操作')), + ('timer', models.IntegerField(default=0, help_text='单位秒。处于源状态X秒后如果状态都没有过变化则自动流转到目标状态。设置时间有效', verbose_name='定时器(单位秒)')), + ('condition_expression', jsonfield.fields.JSONField(default=list, help_text='流转条件表达式,根据表达式中的条件来确定流转的下个状态,格式为[{"expression":"{days} > 3 and {days}<10", "target_state":11}] 其中{}用于填充工单的字段key,运算时会换算成实际的值,当符合条件下个状态将变为target_state_id中的值,表达式只支持简单的运算或datetime/time运算.loonflow会以首次匹配成功的条件为准,所以多个条件不要有冲突', max_length=1000, verbose_name='条件表达式')), + ('attribute_type', models.IntegerField(choices=[(1, '同意'), (2, '拒绝'), (3, '其他')], default=1, help_text='属性类型,1.同意,2.拒绝,3.其他', verbose_name='属性类型')), + ('field_require_check', models.BooleanField(default=True, help_text='默认在用户点击操作的时候需要校验工单表单的必填项,如果设置为否则不检查。用于如"退回"属性的操作,不需要填写表单内容', verbose_name='是否校验必填项')), + ('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='transition_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人')), + ('destination_state', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='dstate_transition', to='wf.state', verbose_name='目的状态')), + ('source_state', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='sstate_transition', to='wf.state', verbose_name='源状态')), + ('update_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='transition_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人')), + ('workflow', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='wf.workflow', verbose_name='所属工作流')), + ], + options={ + 'abstract': False, + }, + ), + migrations.CreateModel( + name='TicketFlow', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')), + ('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')), + ('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')), + ('suggestion', models.CharField(blank=True, default='', max_length=10000, verbose_name='处理意见')), + ('participant_type', models.IntegerField(choices=[(0, '无处理人'), (1, '个人'), (2, '多人'), (4, '角色'), (6, '脚本'), (7, '工单的字段'), (9, '代码获取')], default=0, help_text='0.无处理人,1.个人,2.多人等', verbose_name='处理人类型')), + ('participant_str', models.CharField(blank=True, help_text='非人工处理的处理人相关信息', max_length=200, null=True, verbose_name='处理人')), + ('ticket_data', jsonfield.fields.JSONField(blank=True, default=dict, help_text='可以用于记录当前表单数据,json格式', verbose_name='工单数据')), + ('intervene_type', models.IntegerField(choices=[(0, '正常处理'), (1, '转交'), (2, '加签'), (3, '加签处理完成'), (4, '接单'), (5, '评论'), (6, '删除'), (7, '强制关闭'), (8, '强制修改状态'), (9, 'hook操作'), (10, '撤回'), (11, '抄送')], default=0, help_text='流转类型', verbose_name='干预类型')), + ('participant_cc', jsonfield.fields.JSONField(blank=True, default=list, help_text='抄送给(userid列表)', verbose_name='抄送给')), + ('participant', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='ticketflow_participant', to=settings.AUTH_USER_MODEL, verbose_name='处理人')), + ('state', models.ForeignKey(blank=True, default=0, on_delete=django.db.models.deletion.CASCADE, to='wf.state', verbose_name='当前状态')), + ('ticket', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='ticketflow_ticket', to='wf.ticket', verbose_name='关联工单')), + ('transition', models.ForeignKey(blank=True, help_text='与worklow.Transition关联, 为空时表示认为干预的操作', null=True, on_delete=django.db.models.deletion.CASCADE, to='wf.transition', verbose_name='流转id')), + ], + options={ + 'abstract': False, + }, + ), + migrations.AddField( + model_name='ticket', + name='workflow', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='wf.workflow', verbose_name='关联工作流'), + ), + migrations.AddField( + model_name='state', + name='workflow', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='wf.workflow', verbose_name='所属工作流'), + ), + migrations.CreateModel( + name='CustomField', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')), + ('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')), + ('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')), + ('field_type', models.CharField(choices=[('string', '字符串'), ('int', '整型'), ('float', '浮点'), ('boolean', '布尔'), ('date', '日期'), ('datetime', '日期时间'), ('radio', '单选'), ('checkbox', '多选'), ('select', '单选下拉'), ('selects', '多选下拉'), ('cascader', '单选级联'), ('cascaders', '多选级联'), ('select_dg', '弹框单选'), ('select_dgs', '弹框多选'), ('textarea', '文本域'), ('file', '附件')], help_text='string, int, float, date, datetime, radio, checkbox, select, selects, cascader, cascaders, select_dg, select_dgs,textarea, file', max_length=50, verbose_name='类型')), + ('field_key', models.CharField(help_text='字段类型请尽量特殊,避免与系统中关键字冲突', max_length=50, verbose_name='字段标识')), + ('field_name', models.CharField(max_length=50, verbose_name='字段名称')), + ('sort', models.IntegerField(default=0, help_text='工单基础字段在表单中排序为:流水号0,标题20,状态id40,状态名41,创建人80,创建时间100,更新时间120.前端展示工单信息的表单可以根据这个id顺序排列', verbose_name='排序')), + ('default_value', models.CharField(blank=True, help_text='前端展示时,可以将此内容作为表单中的该字段的默认值', max_length=100, null=True, verbose_name='默认值')), + ('description', models.CharField(blank=True, help_text='字段的描述信息,可用于显示在字段的下方对该字段的详细描述', max_length=100, null=True, verbose_name='描述')), + ('placeholder', models.CharField(blank=True, help_text='用户工单详情表单中作为字段的占位符显示', max_length=100, null=True, verbose_name='占位符')), + ('field_template', models.TextField(blank=True, help_text='文本域类型字段前端显示时可以将此内容作为字段的placeholder', null=True, verbose_name='文本域模板')), + ('boolean_field_display', jsonfield.fields.JSONField(blank=True, default=dict, help_text='当为布尔类型时候,可以支持自定义显示形式。{"1":"是","0":"否"}或{"1":"需要","0":"不需要"},注意数字也需要引号', verbose_name='布尔类型显示名')), + ('field_choice', jsonfield.fields.JSONField(blank=True, default=list, help_text='选项值,格式为list, 例["id":1, "name":"张三"]', verbose_name='选项值')), + ('label', models.CharField(default='', help_text='处理特殊逻辑使用,比如sys_user用于获取用户作为选项', max_length=1000, verbose_name='标签')), + ('is_hidden', models.BooleanField(default=False, help_text='可用于携带不需要用户查看的字段信息', verbose_name='是否隐藏')), + ('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='customfield_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人')), + ('update_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='customfield_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人')), + ('workflow', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='wf.workflow', verbose_name='所属工作流')), + ], + options={ + 'abstract': False, + }, + ), + ] diff --git a/admin/server/apps/wf/migrations/__init__.py b/admin/server/apps/wf/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/admin/server/apps/wf/models.py b/admin/server/apps/wf/models.py new file mode 100644 index 0000000..872b3f8 --- /dev/null +++ b/admin/server/apps/wf/models.py @@ -0,0 +1,237 @@ +from random import choice +from django.db import models +import jsonfield +from django.db.models.base import Model +import django.utils.timezone as timezone +from django.db.models.query import QuerySet +from apps.system.models import CommonAModel, CommonBModel, Organization, User, Dict, File +from utils.model import SoftModel, BaseModel +from simple_history.models import HistoricalRecords + + +class Workflow(CommonAModel): + """ + 工作流 + """ + name = models.CharField('名称', max_length=50) + key = models.CharField('工作流标识', unique=True, max_length=20, null=True, blank=True) + sn_prefix = models.CharField('流水号前缀', max_length=50, default='hb') + description = models.CharField('描述', max_length=200, null=True, blank=True) + view_permission_check = models.BooleanField('查看权限校验', default=True, help_text='开启后,只允许工单的关联人(创建人、曾经的处理人)有权限查看工单') + limit_expression = models.JSONField('限制表达式', default=dict, blank=True, help_text='限制周期({"period":24} 24小时), 限制次数({"count":1}在限制周期内只允许提交1次), 限制级别({"level":1} 针对(1单个用户 2全局)限制周期限制次数,默认特定用户);允许特定人员提交({"allow_persons":"zhangsan,lisi"}只允许张三提交工单,{"allow_depts":"1,2"}只允许部门id为1和2的用户提交工单,{"allow_roles":"1,2"}只允许角色id为1和2的用户提交工单)') + display_form_str = models.JSONField('展现表单字段', default=list, blank=True, help_text='默认"[]",用于用户只有对应工单查看权限时显示哪些字段,field_key的list的json,如["days","sn"],内置特殊字段participant_info.participant_name:当前处理人信息(部门名称、角色名称),state.state_name:当前状态的状态名,workflow.workflow_name:工作流名称') + title_template = models.CharField('标题模板', max_length=50, default='{title}', null=True, blank=True, help_text='工单字段的值可以作为参数写到模板中,格式如:你有一个待办工单:{title}') + content_template = models.CharField('内容模板', max_length=1000, default='标题:{title}, 创建时间:{create_time}', null=True, blank=True, help_text='工单字段的值可以作为参数写到模板中,格式如:标题:{title}, 创建时间:{create_time}') + +class State(CommonAModel): + """ + 状态记录 + """ + STATE_TYPE_START = 1 + STATE_TYPE_END = 2 + type_choices = ( + (0, '普通'), + (STATE_TYPE_START, '开始'), + (STATE_TYPE_END, '结束') + ) + PARTICIPANT_TYPE_PERSONAL = 1 + PARTICIPANT_TYPE_MULTI = 2 + PARTICIPANT_TYPE_DEPT = 3 + PARTICIPANT_TYPE_ROLE = 4 + PARTICIPANT_TYPE_VARIABLE = 5 + PARTICIPANT_TYPE_ROBOT = 6 + PARTICIPANT_TYPE_FIELD = 7 + PARTICIPANT_TYPE_PARENT_FIELD = 8 + PARTICIPANT_TYPE_FORMCODE = 9 + state_participanttype_choices = ( + (0, '无处理人'), + (PARTICIPANT_TYPE_PERSONAL, '个人'), + (PARTICIPANT_TYPE_MULTI, '多人'), + # (PARTICIPANT_TYPE_DEPT, '部门'), + (PARTICIPANT_TYPE_ROLE, '角色'), + # (PARTICIPANT_TYPE_VARIABLE, '变量'), + (PARTICIPANT_TYPE_ROBOT, '脚本'), + (PARTICIPANT_TYPE_FIELD, '工单的字段'), + # (PARTICIPANT_TYPE_PARENT_FIELD, '父工单的字段'), + (PARTICIPANT_TYPE_FORMCODE, '代码获取') + ) + STATE_DISTRIBUTE_TYPE_ACTIVE = 1 # 主动接单 + STATE_DISTRIBUTE_TYPE_DIRECT = 2 # 直接处理(当前为多人的情况,都可以处理,而不需要先接单) + STATE_DISTRIBUTE_TYPE_RANDOM = 3 # 随机分配 + STATE_DISTRIBUTE_TYPE_ALL = 4 # 全部处理 + state_distribute_choices=( + (STATE_DISTRIBUTE_TYPE_ACTIVE, '主动接单'), + (STATE_DISTRIBUTE_TYPE_DIRECT, '直接处理'), + (STATE_DISTRIBUTE_TYPE_RANDOM, '随机分配'), + (STATE_DISTRIBUTE_TYPE_ALL, '全部处理'), + ) + + STATE_FIELD_READONLY= 1 # 字段只读 + STATE_FIELD_REQUIRED = 2 # 字段必填 + STATE_FIELD_OPTIONAL = 3 # 字段可选 + STATE_FIELD_HIDDEN = 4 # 字段隐藏 + state_filter_choices=( + (0, '无'), + (1, '和工单同属一及上级部门'), + (2, '和创建人同属一及上级部门'), + (3, '和上步处理人同属一及上级部门'), + ) + name = models.CharField('名称', max_length=50) + workflow = models.ForeignKey(Workflow, on_delete=models.CASCADE, verbose_name='所属工作流') + is_hidden = models.BooleanField('是否隐藏', default=False, help_text='设置为True时,获取工单步骤api中不显示此状态(当前处于此状态时除外)') + sort = models.IntegerField('状态顺序', default=0, help_text='用于工单步骤接口时,step上状态的顺序(因为存在网状情况,所以需要人为设定顺序),值越小越靠前') + type = models.IntegerField('状态类型', default=0, choices=type_choices, help_text='0.普通类型 1.初始状态(用于新建工单时,获取对应的字段必填及transition信息) 2.结束状态(此状态下的工单不得再处理,即没有对应的transition)') + enable_retreat = models.BooleanField('允许撤回', default=False, help_text='开启后允许工单创建人在此状态直接撤回工单到初始状态') + participant_type = models.IntegerField('参与者类型', choices=state_participanttype_choices, default=1, blank=True, help_text='0.无处理人,1.个人,2.多人,3.部门,4.角色,5.变量(支持工单创建人,创建人的leader),6.脚本,7.工单的字段内容(如表单中的"测试负责人",需要为用户名或者逗号隔开的多个用户名),8.父工单的字段内容。 初始状态请选择类型5,参与人填create_by') + participant = models.JSONField('参与者', default=list, blank=True, help_text='可以为空(无处理人的情况,如结束状态)、userid、userid列表\部门id\角色id\变量(create_by,create_by_tl)\脚本记录的id等,包含子工作流的需要设置处理人为loonrobot') + state_fields = models.JSONField('表单字段', default=dict, help_text='json格式字典存储,包括读写属性1:只读,2:必填,3:可选, 4:隐藏 示例:{"create_time":1,"title":2, "sn":1}, 内置特殊字段participant_info.participant_name:当前处理人信息(部门名称、角色名称),state.state_name:当前状态的状态名,workflow.workflow_name:工作流名称') # json格式存储,包括读写属性1:只读,2:必填,3:可选,4:不显示, 字典的字典 + distribute_type = models.IntegerField('分配方式', default=1, choices=state_distribute_choices, help_text='1.主动接单(如果当前处理人实际为多人的时候,需要先接单才能处理) 2.直接处理(即使当前处理人实际为多人,也可以直接处理) 3.随机分配(如果实际为多人,则系统会随机分配给其中一个人) 4.全部处理(要求所有参与人都要处理一遍,才能进入下一步)') + filter_policy = models.IntegerField('参与人过滤策略', default=0, choices=state_filter_choices) + participant_cc = models.JSONField('抄送给', default=list, blank=True, help_text='抄送给(userid列表)') + +class Transition(CommonAModel): + """ + 工作流流转,定时器,条件(允许跳过), 条件流转与定时器不可同时存在 + """ + TRANSITION_ATTRIBUTE_TYPE_ACCEPT = 1 # 同意 + TRANSITION_ATTRIBUTE_TYPE_REFUSE = 2 # 拒绝 + TRANSITION_ATTRIBUTE_TYPE_OTHER = 3 # 其他 + attribute_type_choices = ( + (1, '同意'), + (2, '拒绝'), + (3, '其他') + ) + TRANSITION_INTERVENE_TYPE_DELIVER = 1 # 转交操作 + TRANSITION_INTERVENE_TYPE_ADD_NODE = 2 # 加签操作 + TRANSITION_INTERVENE_TYPE_ADD_NODE_END = 3 # 加签处理完成 + TRANSITION_INTERVENE_TYPE_ACCEPT = 4 # 接单操作 + TRANSITION_INTERVENE_TYPE_COMMENT = 5 # 评论操作 + TRANSITION_INTERVENE_TYPE_DELETE = 6 # 删除操作 + TRANSITION_INTERVENE_TYPE_CLOSE = 7 # 强制关闭操作 + TRANSITION_INTERVENE_TYPE_ALTER_STATE = 8 # 强制修改状态操作 + TRANSITION_INTERVENE_TYPE_HOOK = 9 # hook操作 + TRANSITION_INTERVENE_TYPE_RETREAT = 10 # 撤回 + TRANSITION_INTERVENE_TYPE_CC = 11 # 抄送 + + intervene_type_choices = ( + (0, '正常处理'), + (TRANSITION_INTERVENE_TYPE_DELIVER, '转交'), + (TRANSITION_INTERVENE_TYPE_ADD_NODE, '加签'), + (TRANSITION_INTERVENE_TYPE_ADD_NODE_END, '加签处理完成'), + (TRANSITION_INTERVENE_TYPE_ACCEPT, '接单'), + (TRANSITION_INTERVENE_TYPE_COMMENT, '评论'), + (TRANSITION_INTERVENE_TYPE_DELETE, '删除'), + (TRANSITION_INTERVENE_TYPE_CLOSE, '强制关闭'), + (TRANSITION_INTERVENE_TYPE_ALTER_STATE, '强制修改状态'), + (TRANSITION_INTERVENE_TYPE_HOOK, 'hook操作'), + (TRANSITION_INTERVENE_TYPE_RETREAT, '撤回'), + (TRANSITION_INTERVENE_TYPE_CC, '抄送') + ) + + name = models.CharField('操作', max_length=50) + workflow = models.ForeignKey(Workflow, on_delete=models.CASCADE, verbose_name='所属工作流') + timer = models.IntegerField('定时器(单位秒)', default=0, help_text='单位秒。处于源状态X秒后如果状态都没有过变化则自动流转到目标状态。设置时间有效') + source_state = models.ForeignKey(State, on_delete=models.CASCADE, verbose_name='源状态', related_name='sstate_transition') + destination_state = models.ForeignKey(State, on_delete=models.CASCADE, verbose_name='目的状态', related_name='dstate_transition') + condition_expression = models.JSONField('条件表达式', max_length=1000, default=list, help_text='流转条件表达式,根据表达式中的条件来确定流转的下个状态,格式为[{"expression":"{days} > 3 and {days}<10", "target_state":11}] 其中{}用于填充工单的字段key,运算时会换算成实际的值,当符合条件下个状态将变为target_state_id中的值,表达式只支持简单的运算或datetime/time运算.loonflow会以首次匹配成功的条件为准,所以多个条件不要有冲突' ) + attribute_type = models.IntegerField('属性类型', default=1, choices=attribute_type_choices, help_text='属性类型,1.同意,2.拒绝,3.其他') + field_require_check = models.BooleanField('是否校验必填项', default=True, help_text='默认在用户点击操作的时候需要校验工单表单的必填项,如果设置为否则不检查。用于如"退回"属性的操作,不需要填写表单内容') + + +class CustomField(CommonAModel): + """自定义字段, 设定某个工作流有哪些自定义字段""" + field_type_choices = ( + ('string', '字符串'), + ('int', '整型'), + ('float', '浮点'), + ('boolean', '布尔'), + ('date', '日期'), + ('datetime', '日期时间'), + ('radio', '单选'), + ('checkbox', '多选'), + ('select', '单选下拉'), + ('selects', '多选下拉'), + ('cascader', '单选级联'), + ('cascaders', '多选级联'), + ('select_dg', '弹框单选'), + ('select_dgs', '弹框多选'), + ('textarea', '文本域'), + ('file', '附件') + ) + workflow = models.ForeignKey(Workflow, on_delete=models.CASCADE, verbose_name='所属工作流') + field_type = models.CharField('类型', max_length=50, choices=field_type_choices, + help_text='string, int, float, date, datetime, radio, checkbox, select, selects, cascader, cascaders, select_dg, select_dgs,textarea, file') + field_key = models.CharField('字段标识', max_length=50, help_text='字段类型请尽量特殊,避免与系统中关键字冲突') + field_name = models.CharField('字段名称', max_length=50) + sort = models.IntegerField('排序', default=0, help_text='工单基础字段在表单中排序为:流水号0,标题20,状态id40,状态名41,创建人80,创建时间100,更新时间120.前端展示工单信息的表单可以根据这个id顺序排列') + default_value = models.CharField('默认值', null=True, blank=True, max_length=100, help_text='前端展示时,可以将此内容作为表单中的该字段的默认值') + description = models.CharField('描述', max_length=100, blank=True, null=True, help_text='字段的描述信息,可用于显示在字段的下方对该字段的详细描述') + placeholder = models.CharField('占位符', max_length=100, blank=True, null=True, help_text='用户工单详情表单中作为字段的占位符显示') + field_template = models.TextField('文本域模板', null=True, blank=True, help_text='文本域类型字段前端显示时可以将此内容作为字段的placeholder') + boolean_field_display = models.JSONField('布尔类型显示名', default=dict, blank=True, + help_text='当为布尔类型时候,可以支持自定义显示形式。{"1":"是","0":"否"}或{"1":"需要","0":"不需要"},注意数字也需要引号') + + field_choice = models.JSONField('选项值', default=list, blank=True, + help_text='选项值,格式为list, 例["id":1, "name":"张三"]') + + label = models.CharField('标签', max_length=1000, default='', help_text='处理特殊逻辑使用,比如sys_user用于获取用户作为选项') + # hook = models.CharField('hook', max_length=1000, default='', help_text='获取下拉选项用于动态选项值') + is_hidden = models.BooleanField('是否隐藏', default=False, help_text='可用于携带不需要用户查看的字段信息') + +class Ticket(CommonBModel): + """ + 工单 + """ + TICKET_ACT_STATE_DRAFT = 0 # 草稿中 + TICKET_ACT_STATE_ONGOING = 1 # 进行中 + TICKET_ACT_STATE_BACK = 2 # 被退回 + TICKET_ACT_STATE_RETREAT = 3 # 被撤回 + TICKET_ACT_STATE_FINISH = 4 # 已完成 + TICKET_ACT_STATE_CLOSED = 5 # 已关闭 + + act_state_choices =( + (TICKET_ACT_STATE_DRAFT, '草稿中'), + (TICKET_ACT_STATE_ONGOING, '进行中'), + (TICKET_ACT_STATE_BACK, '被退回'), + (TICKET_ACT_STATE_RETREAT, '被撤回'), + (TICKET_ACT_STATE_FINISH, '已完成'), + (TICKET_ACT_STATE_CLOSED, '已关闭') + ) + category_choices =( + ('all', '全部'), + ('owner', '我创建的'), + ('duty', '待办'), + ('worked', '我处理的'), + ('cc', '抄送我的') + ) + title = models.CharField('标题', max_length=500, null=True, blank=True, help_text="工单标题") + workflow = models.ForeignKey(Workflow, on_delete=models.CASCADE, verbose_name='关联工作流') + sn = models.CharField('流水号', max_length=25, help_text="工单的流水号") + state = models.ForeignKey(State, on_delete=models.CASCADE, verbose_name='当前状态', related_name='ticket_state') + parent = models.ForeignKey('self', null=True, blank=True, on_delete=models.CASCADE, verbose_name='父工单') + parent_state = models.ForeignKey(State, null=True, blank=True, on_delete=models.CASCADE, verbose_name='父工单状态', related_name='ticket_parent_state') + ticket_data = models.JSONField('工单数据', default=dict, help_text='工单自定义字段内容') + in_add_node = models.BooleanField('加签状态中', default=False, help_text='是否处于加签状态下') + add_node_man = models.ForeignKey(User, verbose_name='加签人', on_delete=models.SET_NULL, null=True, blank=True, help_text='加签操作的人,工单当前处理人处理完成后会回到该处理人,当处于加签状态下才有效') + script_run_last_result = models.BooleanField('脚本最后一次执行结果', default=True) + participant_type = models.IntegerField('当前处理人类型', default=0, help_text='0.无处理人,1.个人,2.多人', choices=State.state_participanttype_choices) + participant = models.JSONField('当前处理人', default=list, blank=True, help_text='可以为空(无处理人的情况,如结束状态)、userid、userid列表') + act_state = models.IntegerField('进行状态', default=1, help_text='当前工单的进行状态', choices=act_state_choices) + multi_all_person = models.JSONField('全部处理的结果', default=dict, blank=True, help_text='需要当前状态处理人全部处理时实际的处理结果,json格式') + + +class TicketFlow(BaseModel): + """ + 工单流转日志 + """ + ticket = models.ForeignKey(Ticket, on_delete=models.CASCADE, verbose_name='关联工单', related_name='ticketflow_ticket') + transition = models.ForeignKey(Transition, verbose_name='流转id', help_text='与worklow.Transition关联, 为空时表示认为干预的操作', on_delete=models.CASCADE, null=True, blank=True) + suggestion = models.CharField('处理意见', max_length=10000, default='', blank=True) + participant_type = models.IntegerField('处理人类型', default=0, help_text='0.无处理人,1.个人,2.多人等', choices=State.state_participanttype_choices) + participant = models.ForeignKey(User, verbose_name='处理人', on_delete=models.SET_NULL, null=True, blank=True, related_name='ticketflow_participant') + participant_str = models.CharField('处理人', max_length=200, null=True, blank=True, help_text='非人工处理的处理人相关信息') + state = models.ForeignKey(State, verbose_name='当前状态', default=0, blank=True, on_delete=models.CASCADE) + ticket_data = models.JSONField('工单数据', default=dict, blank=True, help_text='可以用于记录当前表单数据,json格式') + intervene_type = models.IntegerField('干预类型', default=0, help_text='流转类型', choices=Transition.intervene_type_choices) + participant_cc = models.JSONField('抄送给', default=list, blank=True, help_text='抄送给(userid列表)') + diff --git a/admin/server/apps/wf/scripts.py b/admin/server/apps/wf/scripts.py new file mode 100644 index 0000000..eda2694 --- /dev/null +++ b/admin/server/apps/wf/scripts.py @@ -0,0 +1,56 @@ +from apps.system.models import User +from apps.wf.models import State, Ticket, TicketFlow, Transition + + +class GetParticipants: + """ + 获取处理人脚本 + """ + all_funcs = [ + {'func':'get_create_by', 'name':'获取工单创建人'} + ] + + # def all_funcs(self): + # # return list(filter(lambda x: x.startswith('get_') and callable(getattr(self, x)), dir(self))) + # return [(func, getattr(self, func).__doc__) for func in dir(self) if callable(getattr(self, func)) and func.startswith('get_')] + + @classmethod + def get_create_by(cls, state:dict={}, ticket:dict={}, new_ticket_data:dict={}, handler:User={}): + """工单创建人""" + participant = ticket.create_by.id + return participant + +class HandleScripts: + """ + 任务处理脚本 + """ + all_funcs = [ + {'func': 'handle_something', 'name':'处理一些工作'} + ] + + + @classmethod + def to_next(cls, ticket:Ticket, by_timer:bool=False, by_task:bool=False, by_hook:bool=False, script_str:str=''): + # 获取信息 + transition_obj = Transition.objects.filter(source_state=ticket.state, is_deleted=False).first() + + TicketFlow.objects.create(ticket=ticket, state=ticket.state, + participant_type=State.PARTICIPANT_TYPE_ROBOT, + participant_str='func:{}'.format(script_str), + transition=transition_obj) + from .services import WfService + + # 自动执行流转 + WfService.handle_ticket(ticket=ticket, transition=transition_obj, new_ticket_data=ticket.ticket_data, by_task=True) + + return ticket + + @classmethod + def handle_something(cls, ticket:Ticket): + """处理一些工作""" + # 任务处理代码区 + + + # 调用自动流转 + ticket = cls.to_next(ticket=ticket, by_task=True, script_str= 'handle_something') + diff --git a/admin/server/apps/wf/serializers.py b/admin/server/apps/wf/serializers.py new file mode 100644 index 0000000..70b03bc --- /dev/null +++ b/admin/server/apps/wf/serializers.py @@ -0,0 +1,193 @@ +from apps.system.models import Organization, User +from apps.system.serializers import UserSimpleSerializer +import rest_framework +from rest_framework import serializers + +from .models import State, Ticket, TicketFlow, Workflow, Transition, CustomField + + +class WorkflowSerializer(serializers.ModelSerializer): + class Meta: + model = Workflow + fields = '__all__' + +class StateSerializer(serializers.ModelSerializer): + class Meta: + model = State + fields = '__all__' + +class WorkflowSimpleSerializer(serializers.ModelSerializer): + class Meta: + model = Workflow + fields = ['id', 'name'] + +class StateSimpleSerializer(serializers.ModelSerializer): + class Meta: + model = State + fields = ['id', 'name', 'type', 'distribute_type', 'enable_retreat'] + +class TransitionSerializer(serializers.ModelSerializer): + source_state_ = StateSimpleSerializer(source='source_state', read_only=True) + destination_state_ = StateSimpleSerializer(source='destination_state', read_only=True) + class Meta: + model = Transition + fields = '__all__' + @staticmethod + def setup_eager_loading(queryset): + """ Perform necessary eager loading of data. """ + queryset = queryset.select_related('source_state','destination_state') + return queryset + +class AllField(serializers.Field): + def to_representation(self, value): + return value + + def to_internal_value(self, data): + return data + +class FieldChoiceSerializer(serializers.Serializer): + id = AllField(label='ID') + name = serializers.CharField(label='名称') + + +class CustomFieldSerializer(serializers.ModelSerializer): + class Meta: + model = CustomField + fields = '__all__' + +class CustomFieldCreateUpdateSerializer(serializers.ModelSerializer): + + field_choice = FieldChoiceSerializer(label='选项列表', many=True, required=False) + class Meta: + model = CustomField + fields = ['workflow', 'field_type', 'field_key', 'field_name', + 'sort', 'default_value', 'description', 'placeholder', 'field_template', + 'boolean_field_display', 'field_choice', 'label', 'is_hidden'] + + +class TicketSimpleSerializer(serializers.ModelSerializer): + class Meta: + model = Ticket + fields = '__all__' + +class TicketCreateSerializer(serializers.ModelSerializer): + transition = serializers.PrimaryKeyRelatedField(queryset=Transition.objects.all(), write_only=True) + title = serializers.CharField(allow_blank=True, required=False) + class Meta: + model=Ticket + fields=['title','workflow', 'ticket_data', 'transition'] + + def create(self, validated_data): + return super().create(validated_data) + +class TicketSerializer(serializers.ModelSerializer): + workflow_ = WorkflowSimpleSerializer(source='workflow', read_only=True) + state_ = StateSimpleSerializer(source='state', read_only=True) + + class Meta: + model = Ticket + fields = '__all__' + + @staticmethod + def setup_eager_loading(queryset): + queryset = queryset.select_related('workflow','state') + return queryset + +class TicketListSerializer(serializers.ModelSerializer): + workflow_ = WorkflowSimpleSerializer(source='workflow', read_only=True) + state_ = StateSimpleSerializer(source='state', read_only=True) + + class Meta: + model = Ticket + fields = ['id', 'title', 'sn', 'workflow', 'workflow_', 'state', 'state_', 'act_state', 'create_time', 'update_time', 'participant_type', 'create_by'] + + @staticmethod + def setup_eager_loading(queryset): + queryset = queryset.select_related('workflow','state') + return queryset + +class TicketDetailSerializer(serializers.ModelSerializer): + workflow_ = WorkflowSimpleSerializer(source='workflow', read_only=True) + state_ = StateSimpleSerializer(source='state', read_only=True) + ticket_data_ = serializers.SerializerMethodField() + class Meta: + model = Ticket + fields = '__all__' + + @staticmethod + def setup_eager_loading(queryset): + queryset = queryset.select_related('workflow','state') + return queryset + + def get_ticket_data_(self, obj): + ticket_data = obj.ticket_data + state_fields = obj.state.state_fields + all_fields = CustomField.objects.filter(workflow=obj.workflow).order_by('sort') + all_fields_l = CustomFieldSerializer(instance=all_fields, many=True).data + for i in all_fields_l: + key = i['field_key'] + i['field_state'] = state_fields.get(key, 1) + i['field_value'] = ticket_data.get(key, None) + i['field_display'] = i['field_value'] # 该字段是用于查看详情直接展示 + if i['field_value']: + if 'sys_user' in i['label']: + if isinstance(i['field_value'], list): + i['field_display'] = ','.join(list(User.objects.filter(id__in=i['field_value']).values_list('name', flat=True))) + else: + i['field_display'] = User.objects.get(id=i['field_value']).name + elif 'deptSelect' in i['label']: + if isinstance(i['field_value'], list): + i['field_display'] = ','.join(list(Organization.objects.filter(id__in=i['field_value']).values_list('name', flat=True))) + else: + i['field_display'] = Organization.objects.get(id=i['field_value']).name + elif i['field_type'] in ['radio', 'select']: + for m in i['field_choice']: + if m['id'] == i['field_value']: + i['field_display'] = m['name'] + elif i['field_type'] in ['checkbox', 'selects']: + d_list = [] + for m in i['field_choice']: + if m['id'] in i['field_value']: + d_list.append(m['name']) + i['field_display'] = ','.join(d_list) + return all_fields_l + + def filter_display(self, item, field_value): + if item['id'] == field_value: + return + +class TicketFlowSerializer(serializers.ModelSerializer): + participant_ = UserSimpleSerializer(source='participant', read_only=True) + state_ = StateSimpleSerializer(source='state', read_only=True) + class Meta: + model = TicketFlow + fields = '__all__' + +class TicketFlowSimpleSerializer(serializers.ModelSerializer): + participant_ = UserSimpleSerializer(source='participant', read_only=True) + state_ = StateSimpleSerializer(source='state', read_only=True) + class Meta: + model = TicketFlow + exclude = ['ticket_data'] + + +class TicketHandleSerializer(serializers.Serializer): + transition = serializers.PrimaryKeyRelatedField(queryset=Transition.objects.all(), label="流转id") + ticket_data = serializers.JSONField(label="表单数据json") + suggestion = serializers.CharField(label="处理意见", required = False, allow_blank=True) + +class TicketRetreatSerializer(serializers.Serializer): + suggestion = serializers.CharField(label="撤回原因", required = False) + +class TicketCloseSerializer(serializers.Serializer): + suggestion = serializers.CharField(label="关闭原因", required = False) + +class TicketAddNodeSerializer(serializers.Serializer): + suggestion = serializers.CharField(label="加签说明", required = False) + toadd_user = serializers.PrimaryKeyRelatedField(queryset=User.objects.all(), label='发送给谁去加签') + +class TicketAddNodeEndSerializer(serializers.Serializer): + suggestion = serializers.CharField(label="加签意见", required = False) + +class TicketDestorySerializer(serializers.Serializer): + ids = serializers.ListField(child=serializers.PrimaryKeyRelatedField(queryset=Ticket.objects.all()), label='工单ID列表') \ No newline at end of file diff --git a/admin/server/apps/wf/services.py b/admin/server/apps/wf/services.py new file mode 100644 index 0000000..178318c --- /dev/null +++ b/admin/server/apps/wf/services.py @@ -0,0 +1,353 @@ +from apps.wf.serializers import CustomFieldSerializer +from apps.wf.serializers import TicketSerializer, TicketSimpleSerializer +from typing import Tuple +from apps.system.models import User +from apps.wf.models import CustomField, State, Ticket, TicketFlow, Transition, Workflow +from rest_framework.exceptions import APIException, PermissionDenied +from django.utils import timezone +from datetime import timedelta +import random +from .scripts import GetParticipants, HandleScripts +from utils.queryset import get_parent_queryset + +class WfService(object): + @staticmethod + def get_worlflow_states(workflow:Workflow): + """ + 获取工作流状态列表 + """ + return State.objects.filter(workflow=workflow, is_deleted=False).order_by('sort') + + @staticmethod + def get_workflow_transitions(workflow:Workflow): + """ + 获取工作流流转列表 + """ + return Transition.objects.filter(workflow=workflow, is_deleted=False) + + @staticmethod + def get_workflow_start_state(workflow:Workflow): + """ + 获取工作流初始状态 + """ + try: + wf_state_obj = State.objects.get(workflow=workflow, type=State.STATE_TYPE_START, is_deleted=False) + return wf_state_obj + except: + raise Exception('工作流状态配置错误') + + @staticmethod + def get_workflow_end_state(workflow:Workflow): + """ + 获取工作流结束状态 + """ + try: + wf_state_obj = State.objects.get(workflow=workflow, type=State.STATE_TYPE_END, is_deleted=False) + return wf_state_obj + except: + raise Exception('工作流状态配置错误') + + @staticmethod + def get_workflow_custom_fields(workflow:Workflow): + """ + 获取工单字段 + """ + return CustomField.objects.filter(is_deleted=False, workflow=workflow).order_by('sort') + + @staticmethod + def get_workflow_custom_fields_list(workflow:Workflow): + """ + 获取工单字段key List + """ + return list(CustomField.objects.filter(is_deleted=False, workflow=workflow).order_by('sort').values_list('field_key', flat=True)) + + @classmethod + def get_ticket_transitions(cls, ticket:Ticket): + """ + 获取工单当前状态下可用的流转条件 + """ + return cls.get_state_transitions(ticket.state) + + @classmethod + def get_state_transitions(cls, state:State): + """ + 获取状态可执行的操作 + """ + return Transition.objects.filter(is_deleted=False, source_state=state).all() + + @classmethod + def get_ticket_steps(cls, ticket:Ticket): + steps = cls.get_worlflow_states(ticket.workflow) + nsteps_list = [] + for i in steps: + if ticket.state == i or (not i.is_hidden): + nsteps_list.append(i) + return nsteps_list + + @classmethod + def get_ticket_transitions(cls, ticket:Ticket): + """ + 获取工单可执行的操作 + """ + return cls.get_state_transitions(ticket.state) + + @classmethod + def get_transition_by_args(cls, kwargs:dict): + """ + 查询并获取流转 + """ + kwargs['is_deleted'] = False + return Transition.objects.filter(**kwargs).all() + + @classmethod + def get_ticket_sn(cls, workflow:Workflow): + """ + 生成工单流水号 + """ + now = timezone.now() + today = str(now)[:10]+' 00:00:00' + next_day = str(now+timedelta(days=1))[:10]+' 00:00:00' + ticket_day_count_new = Ticket.objects.filter(create_time__gte=today, create_time__lte=next_day, workflow=workflow).count()+1 + return '%s_%04d%02d%02d%04d' % (workflow.sn_prefix, now.year, now.month, now.day, ticket_day_count_new) + + + + @classmethod + def get_next_state_by_transition_and_ticket_info(cls, ticket:Ticket, transition: Transition, new_ticket_data:dict={})->object: + """ + 获取下个节点状态 + """ + source_state = ticket.state + destination_state = transition.destination_state + ticket_all_value = cls.get_ticket_all_field_value(ticket) + ticket_all_value.update(**new_ticket_data) + for key, value in ticket_all_value.items(): + if isinstance(ticket_all_value[key], str): + ticket_all_value[key] = "'" + ticket_all_value[key] + "'" + if transition.condition_expression: + for i in transition.condition_expression: + expression = i['expression'].format(**ticket_all_value) + import datetime, time # 用于支持条件表达式中对时间的操作 + if eval(expression, {'__builtins__':None}, {'datetime':datetime, 'time':time}): + destination_state = State.objects.get(pk=i['target_state']) + return destination_state + return destination_state + + @classmethod + def get_ticket_state_participant_info(cls, state:State, ticket:Ticket, new_ticket_data:dict={}, handler:User=None): + """ + 获取工单目标状态实际的处理人, 处理人类型 + """ + if state.type == State.STATE_TYPE_START: + """ + 回到初始状态 + """ + return dict(destination_participant_type=State.PARTICIPANT_TYPE_PERSONAL, + destination_participant=ticket.create_by.id, + multi_all_person={}) + elif state.type == State.STATE_TYPE_END: + """ + 到达结束状态 + """ + return dict(destination_participant_type=0, + destination_participant=0, + multi_all_person={}) + multi_all_person_dict = {} + destination_participant_type, destination_participant = state.participant_type, state.participant + if destination_participant_type == State.PARTICIPANT_TYPE_FIELD: + destination_participant = new_ticket_data.get(destination_participant, 0) if destination_participant in new_ticket_data \ + else Ticket.ticket_data.get(destination_participant, 0) + + elif destination_participant_type == State.PARTICIPANT_TYPE_FORMCODE:#代码获取 + destination_participant = getattr(GetParticipants, destination_participant)( + state=state, ticket=ticket, new_ticket_data=new_ticket_data, handler=handler) + + elif destination_participant_type == State.PARTICIPANT_TYPE_DEPT:#部门 + destination_participant = list(User.objects.filter(dept__in=destination_participant).values_list('id', flat=True)) + + elif destination_participant_type == State.PARTICIPANT_TYPE_ROLE:#角色 + user_queryset = User.objects.filter(roles__in=destination_participant) + # 如果选择了角色, 需要走过滤策略 + if state.filter_policy == 1: + depts = get_parent_queryset(ticket.belong_dept) + user_queryset = user_queryset.filter(dept__in=depts) + elif state.filter_policy == 2: + depts = get_parent_queryset(ticket.create_by.dept) + user_queryset = user_queryset.filter(dept__in=depts) + elif state.filter_policy == 3: + depts = get_parent_queryset(handler.dept) + user_queryset = user_queryset.filter(dept__in=depts) + destination_participant = list(user_queryset.values_list('id', flat=True)) + if type(destination_participant) == list: + destination_participant_type = State.PARTICIPANT_TYPE_MULTI + destination_participant = list(set(destination_participant)) + if len(destination_participant) == 1: # 如果只有一个人 + destination_participant_type = State.PARTICIPANT_TYPE_PERSONAL + destination_participant = destination_participant[0] + else: + destination_participant_type = State.PARTICIPANT_TYPE_PERSONAL + if destination_participant_type == State.PARTICIPANT_TYPE_MULTI: + if state.distribute_type == State.STATE_DISTRIBUTE_TYPE_RANDOM: + destination_participant = random.choice(destination_participant) + elif state.distribute_type == State.STATE_DISTRIBUTE_TYPE_ALL: + for i in destination_participant: + multi_all_person_dict[i]={} + + return dict(destination_participant_type=destination_participant_type, + destination_participant=destination_participant, + multi_all_person=multi_all_person_dict) + + @classmethod + def ticket_handle_permission_check(cls, ticket:Ticket, user:User)-> dict: + transitions = cls.get_state_transitions(ticket.state) + if not transitions: + return dict(permission=True, msg="工单当前状态无需操作") + current_participant_count = 0 + participant_type = ticket.participant_type + participant = ticket.participant + state = ticket.state + if participant_type == State.PARTICIPANT_TYPE_PERSONAL: + if user.id != participant: + return dict(permission=False, msg="非当前处理人", need_accept=False) + elif participant_type in [State.PARTICIPANT_TYPE_MULTI, State.PARTICIPANT_TYPE_DEPT, State.PARTICIPANT_TYPE_ROLE]: + if user.id not in participant: + return dict(permission=False, msg="非当前处理人", need_accept=False) + current_participant_count = len(participant) + if current_participant_count == 1: + if [user.id] == participant or user.id == participant: + pass + else: + return dict(permission=False, msg="非当前处理人", need_accept=False) + elif current_participant_count >1 and state.distribute_type == State.STATE_DISTRIBUTE_TYPE_ACTIVE: + if user.id not in participant: + return dict(permission=False, msg="非当前处理人", need_accept=False) + return dict(permission=False, msg="需要先接单再处理", need_accept=True) + if ticket.in_add_node: + return dict(permission=False, msg="工单当前处于加签中,请加签完成后操作", need_accept=False) + return dict(permission=True, msg="", need_accept=False) + + @classmethod + def check_dict_has_all_same_value(cls, dict_obj: object)->tuple: + """ + check whether all key are equal in a dict + :param dict_obj: + :return: + """ + value_list = [] + for key, value in dict_obj.items(): + value_list.append(value) + value_0 = value_list[0] + for value in value_list: + if value_0 != value: + return False + return True + + @classmethod + def get_ticket_all_field_value(cls, ticket: Ticket)->dict: + """ + 工单所有字段的值 + get ticket's all field value + :param ticket: + :return: + """ + # 获取工单基础表中的字段中的字段信息 + field_info_dict = TicketSimpleSerializer(instance=ticket).data + # 获取自定义字段的值 + custom_fields_queryset = cls.get_workflow_custom_fields(ticket.workflow) + for i in custom_fields_queryset: + field_info_dict[i.field_key] = ticket.ticket_data.get(i.field_key, None) + return field_info_dict + + @classmethod + def handle_ticket(cls, ticket:Ticket, transition: Transition, new_ticket_data:dict={}, handler:User=None, + suggestion:str='', created:bool=False, by_timer:bool=False, by_task:bool=False, by_hook:bool=False): + + source_state = ticket.state + source_ticket_data = ticket.ticket_data + + # 校验处理权限 + if not handler or not created: # 没有处理人意味着系统触发不校验处理权限 + result = WfService.ticket_handle_permission_check(ticket, handler) + if result.get('permission') is False: + raise PermissionDenied(result.get('msg')) + + # 校验表单必填项目 + if transition.field_require_check or not created: + for key, value in ticket.state.state_fields.items(): + if int(value) == State.STATE_FIELD_REQUIRED: + if key not in new_ticket_data or not new_ticket_data[key]: + raise APIException('字段{}必填'.format(key)) + + destination_state = cls.get_next_state_by_transition_and_ticket_info(ticket, transition, new_ticket_data) + multi_all_person = ticket.multi_all_person + if multi_all_person: + multi_all_person[handler.id] =dict(transition=transition.id) + # 判断所有人处理结果是否一致 + if WfService.check_dict_has_all_same_value(multi_all_person): + participant_info = WfService.get_ticket_state_participant_info(destination_state, ticket, new_ticket_data) + destination_participant_type = participant_info.get('destination_participant_type', 0) + destination_participant = participant_info.get('destination_participant', 0) + multi_all_person = {} + else: + # 处理人没有没有全部处理完成或者处理动作不一致 + destination_participant_type = ticket.participant_type + destination_state = ticket.state # 保持原状态 + destination_participant = [] + for key, value in multi_all_person.items(): + if not value: + destination_participant.append(key) + else: + # 当前处理人类型非全部处理 + participant_info = WfService.get_ticket_state_participant_info(destination_state, ticket, new_ticket_data) + destination_participant_type = participant_info.get('destination_participant_type', 0) + destination_participant = participant_info.get('destination_participant', 0) + multi_all_person = participant_info.get('multi_all_person', {}) + + # 更新工单信息:基础字段及自定义字段, add_relation字段 需要下个处理人是部门、角色等的情况 + ticket.state = destination_state + ticket.participant_type = destination_participant_type + ticket.participant = destination_participant + ticket.multi_all_person = multi_all_person + if destination_state.type == State.STATE_TYPE_END: + ticket.act_state = Ticket.TICKET_ACT_STATE_FINISH + elif destination_state.type == State.STATE_TYPE_START: + ticket.act_state = Ticket.TICKET_ACT_STATE_DRAFT + else: + ticket.act_state = Ticket.TICKET_ACT_STATE_ONGOING + + if transition.attribute_type == Transition.TRANSITION_ATTRIBUTE_TYPE_REFUSE: + ticket.act_state = Ticket.TICKET_ACT_STATE_BACK + + # 只更新必填和可选的字段 + if not created: + for key, value in source_state.state_fields.items(): + if value in (State.STATE_FIELD_REQUIRED, State.STATE_FIELD_OPTIONAL): + if key in new_ticket_data: + source_ticket_data[key] = new_ticket_data[key] + ticket.ticket_data = source_ticket_data + ticket.save() + + # 更新工单流转记录 + if not by_task: + TicketFlow.objects.create(ticket=ticket, state=source_state, ticket_data=WfService.get_ticket_all_field_value(ticket), + suggestion=suggestion, participant_type=State.PARTICIPANT_TYPE_PERSONAL, + participant=handler, transition=transition) + + if created: + if source_state.participant_cc: + TicketFlow.objects.create(ticket=ticket, state=source_state, + participant_type=0, intervene_type=Transition.TRANSITION_INTERVENE_TYPE_CC, + participant=None, participant_cc=source_state.participant_cc) + + # 目标状态需要抄送 + if destination_state.participant_cc: + TicketFlow.objects.create(ticket=ticket, state=destination_state, + participant_type=0, intervene_type=Transition.TRANSITION_INTERVENE_TYPE_CC, + participant=None, participant_cc=destination_state.participant_cc) + + # 如果目标状态是脚本则执行 + if destination_state.participant_type == State.PARTICIPANT_TYPE_ROBOT: + getattr(HandleScripts, destination_state.participant)(ticket) + + return ticket + diff --git a/admin/server/apps/wf/tests.py b/admin/server/apps/wf/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/admin/server/apps/wf/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/admin/server/apps/wf/urls.py b/admin/server/apps/wf/urls.py new file mode 100644 index 0000000..5c9ae0d --- /dev/null +++ b/admin/server/apps/wf/urls.py @@ -0,0 +1,18 @@ +from django.db.models import base +from rest_framework import urlpatterns +from apps.wf.views import CustomFieldViewSet, FromCodeListView, StateViewSet, TicketFlowViewSet, TicketViewSet, TransitionViewSet, WorkflowViewSet +from django.urls import path, include +from rest_framework.routers import DefaultRouter + +router = DefaultRouter() +router.register('workflow', WorkflowViewSet, basename='wf') +router.register('state', StateViewSet, basename='wf_state') +router.register('transition', TransitionViewSet, basename='wf_transitions') +router.register('customfield', CustomFieldViewSet, basename='wf_customfield') +router.register('ticket', TicketViewSet, basename='wf_ticket') +router.register('ticketflow', TicketFlowViewSet, basename='wf_ticketflow') +urlpatterns = [ + path('participant_from_code', FromCodeListView.as_view()), + path('', include(router.urls)), +] + diff --git a/admin/server/apps/wf/views.py b/admin/server/apps/wf/views.py new file mode 100644 index 0000000..2a7e073 --- /dev/null +++ b/admin/server/apps/wf/views.py @@ -0,0 +1,373 @@ +from django.utils import timezone +from django.db import transaction +from django.db.models import query +from rest_framework.utils import serializer_helpers +from rest_framework.views import APIView +from apps.system.models import User +from apps.wf.filters import TicketFilterSet +from django.core.exceptions import AppRegistryNotReady +from rest_framework.response import Response +from rest_framework import serializers +from rest_framework.mixins import CreateModelMixin, DestroyModelMixin, ListModelMixin, RetrieveModelMixin, UpdateModelMixin +from apps.wf.serializers import CustomFieldCreateUpdateSerializer, CustomFieldSerializer, StateSerializer, TicketAddNodeEndSerializer, TicketAddNodeSerializer, TicketCloseSerializer, TicketCreateSerializer, TicketDestorySerializer, TicketFlowSerializer, TicketFlowSimpleSerializer, TicketHandleSerializer, TicketRetreatSerializer, TicketSerializer, TransitionSerializer, WorkflowSerializer, TicketListSerializer, TicketDetailSerializer +from django.shortcuts import get_object_or_404, render +from rest_framework.viewsets import GenericViewSet, ModelViewSet +from rest_framework.decorators import action, api_view +from apps.wf.models import CustomField, Ticket, Workflow, State, Transition, TicketFlow +from apps.system.mixins import CreateUpdateCustomMixin, CreateUpdateModelAMixin, OptimizationMixin +from apps.wf.services import WfService +from rest_framework.exceptions import APIException, PermissionDenied +from rest_framework import status +from django.db.models import Count +from .scripts import GetParticipants, HandleScripts + + +# Create your views here. +class FromCodeListView(APIView): + def get(self, request, format=None): + """ + 获取处理人代码列表 + """ + return Response(GetParticipants.all_funcs) + +class WorkflowViewSet(CreateUpdateModelAMixin, ModelViewSet): + perms_map = {'get': '*', 'post': 'workflow_create', + 'put': 'workflow_update', 'delete': 'workflow_delete'} + queryset = Workflow.objects.all() + serializer_class = WorkflowSerializer + search_fields = ['name', 'description'] + filterset_fields = [] + ordering_fields = ['create_time', 'name', 'key'] + ordering = ['create_time'] + + @action(methods=['get'], detail=True, perms_map={'get':'workflow_update'}, pagination_class=None, serializer_class=StateSerializer) + def states(self, request, pk=None): + """ + 工作流下的状态节点 + """ + wf = self.get_object() + serializer = self.serializer_class(instance=WfService.get_worlflow_states(wf), many=True) + return Response(serializer.data) + + @action(methods=['get'], detail=True, perms_map={'get':'workflow_update'}, pagination_class=None, serializer_class=TransitionSerializer) + def transitions(self, request, pk=None): + """ + 工作流下的流转规则 + """ + wf = self.get_object() + serializer = self.serializer_class(instance=WfService.get_workflow_transitions(wf), many=True) + return Response(serializer.data) + + @action(methods=['get'], detail=True, perms_map={'get':'workflow_update'}, pagination_class=None, serializer_class=CustomFieldSerializer) + def customfields(self, request, pk=None): + """ + 工作流下的自定义字段 + """ + wf = self.get_object() + serializer = self.serializer_class(instance=CustomField.objects.filter(workflow=wf, is_deleted=False).order_by('sort'), many=True) + return Response(serializer.data) + + @action(methods=['get'], detail=True, perms_map={'get':'workflow_init'}) + def init(self, request, pk=None): + """ + 新建工单初始化 + """ + ret={} + wf = self.get_object() + start_state = WfService.get_workflow_start_state(wf) + transitions = WfService.get_state_transitions(start_state) + ret['workflow'] = pk + ret['transitions'] = TransitionSerializer(instance=transitions, many=True).data + field_list = CustomFieldSerializer(instance=WfService.get_workflow_custom_fields(wf), many=True).data + for i in field_list: + if i['field_key'] in start_state.state_fields: + i['field_attribute'] = start_state.state_fields[i['field_key']] + else: + i['field_attribute'] = State.STATE_FIELD_READONLY + ret['field_list'] = field_list + return Response(ret) + +class StateViewSet(CreateModelMixin, UpdateModelMixin, RetrieveModelMixin, DestroyModelMixin, GenericViewSet): + perms_map = {'get':'*', 'post':'workflow_update', + 'put':'workflow_update', 'delete':'workflow_update'} + queryset = State.objects.all() + serializer_class = StateSerializer + search_fields = ['name'] + filterset_fields = ['workflow'] + ordering = ['sort'] + +class TransitionViewSet(CreateModelMixin, UpdateModelMixin, RetrieveModelMixin, DestroyModelMixin, GenericViewSet): + perms_map = {'get':'*', 'post':'workflow_update', + 'put':'workflow_update', 'delete':'workflow_update'} + queryset = Transition.objects.all() + serializer_class = TransitionSerializer + search_fields = ['name'] + filterset_fields = ['workflow'] + ordering = ['id'] + +class CustomFieldViewSet(CreateModelMixin, UpdateModelMixin, RetrieveModelMixin, DestroyModelMixin, GenericViewSet): + perms_map = {'get':'*', 'post':'workflow_update', + 'put':'workflow_update', 'delete':'workflow_update'} + queryset = CustomField.objects.all() + serializer_class = CustomFieldSerializer + search_fields = ['field_name'] + filterset_fields = ['workflow', 'field_type'] + ordering = ['sort'] + + def get_serializer_class(self): + if self.action in ['create', 'update']: + return CustomFieldCreateUpdateSerializer + return super().get_serializer_class() + +class TicketViewSet(OptimizationMixin, CreateUpdateCustomMixin, CreateModelMixin, ListModelMixin, RetrieveModelMixin, GenericViewSet): + perms_map = {'get':'*', 'post':'ticket_create'} + queryset = Ticket.objects.all() + serializer_class = TicketSerializer + search_fields = ['title'] + filterset_class = TicketFilterSet + ordering = ['-create_time'] + + def get_serializer_class(self): + if self.action == 'create': + return TicketCreateSerializer + elif self.action == 'handle': + return TicketHandleSerializer + elif self.action == 'retreat': + return TicketRetreatSerializer + elif self.action == 'list': + return TicketListSerializer + elif self.action == 'retrieve': + return TicketDetailSerializer + return super().get_serializer_class() + + def filter_queryset(self, queryset): + if not self.detail and not self.request.query_params.get('category', None): + raise APIException('请指定查询分类') + return super().filter_queryset(queryset) + + @transaction.atomic + def create(self, request, *args, **kwargs): + """ + 新建工单 + """ + rdata = request.data + serializer = self.get_serializer(data=rdata) + serializer.is_valid(raise_exception=True) + vdata = serializer.validated_data #校验之后的数据 + start_state = WfService.get_workflow_start_state(vdata['workflow']) + transition = vdata.pop('transition') + ticket_data = vdata['ticket_data'] + + save_ticket_data = {} + # 校验必填项 + if transition.field_require_check: + for key, value in start_state.state_fields.items(): + if int(value) == State.STATE_FIELD_REQUIRED: + if key not in ticket_data and not ticket_data[key]: + raise APIException('字段{}必填'.format(key)) + save_ticket_data[key] = ticket_data[key] + elif int(value) == State.STATE_FIELD_OPTIONAL: + save_ticket_data[key] = ticket_data[key] + + ticket = serializer.save(state=start_state, + create_by=request.user, + create_time=timezone.now(), + act_state=Ticket.TICKET_ACT_STATE_DRAFT, + belong_dept=request.user.dept, + ticket_data=save_ticket_data) # 先创建出来 + # 更新title和sn + title = vdata.get('title', '') + title_template = ticket.workflow.title_template + if title_template: + all_ticket_data = {**rdata, **ticket_data} + title = title_template.format(**all_ticket_data) + sn = WfService.get_ticket_sn(ticket.workflow) # 流水号 + ticket.sn = sn + ticket.title = title + ticket.save() + ticket = WfService.handle_ticket(ticket=ticket, transition=transition, new_ticket_data=ticket_data, + handler=request.user, created=True) + return Response(TicketSerializer(instance=ticket).data) + + @action(methods=['get'], detail=False, perms_map={'get':'*'}) + def duty_agg(self, request, pk=None): + """ + 工单待办聚合 + """ + ret = {} + queryset = Ticket.objects.filter(participant__contains=request.user.id, is_deleted=False)\ + .exclude(act_state__in=[Ticket.TICKET_ACT_STATE_FINISH, Ticket.TICKET_ACT_STATE_CLOSED]) + ret['total_count'] = queryset.count() + ret['details'] = list(queryset.values('workflow', 'workflow__name').annotate(count = Count('workflow'))) + return Response(ret) + + @action(methods=['post'], detail=True, perms_map={'post':'*'}) + @transaction.atomic + def handle(self, request, pk=None): + """ + 处理工单 + """ + ticket = self.get_object() + serializer = TicketHandleSerializer(data=request.data) + serializer.is_valid(raise_exception=True) + vdata = serializer.validated_data + new_ticket_data = ticket.ticket_data + new_ticket_data.update(**vdata['ticket_data']) + + ticket = WfService.handle_ticket(ticket=ticket, transition=vdata['transition'], + new_ticket_data=new_ticket_data, handler=request.user, suggestion=vdata['suggestion']) + return Response(TicketSerializer(instance=ticket).data) + + + @action(methods=['get'], detail=True, perms_map={'get':'*'}) + def flowsteps(self, request, pk=None): + """ + 工单流转step, 用于显示当前状态的step图(线性结构) + """ + ticket = self.get_object() + steps = WfService.get_ticket_steps(ticket) + return Response(StateSerializer(instance=steps, many=True).data) + + @action(methods=['get'], detail=True, perms_map={'get':'*'}) + def flowlogs(self, request, pk=None): + """ + 工单流转记录 + """ + ticket = self.get_object() + flowlogs = TicketFlow.objects.filter(ticket=ticket).order_by('-create_time') + serializer = TicketFlowSerializer(instance=flowlogs, many=True) + return Response(serializer.data) + + @action(methods=['get'], detail=True, perms_map={'get':'*'}) + def transitions(self, request, pk=None): + """ + 获取工单可执行的操作 + """ + ticket = self.get_object() + transitions = WfService.get_ticket_transitions(ticket) + return Response(TransitionSerializer(instance=transitions, many=True).data) + + @action(methods=['post'], detail=True, perms_map={'post':'*'}) + def accpet(self, request, pk=None): + """ + 接单,当工单当前处理人实际为多个人时(角色、部门、多人都有可能, 注意角色和部门有可能实际只有一人) + """ + ticket = self.get_object() + result = WfService.ticket_handle_permission_check(ticket, request.user) + if result.get('need_accept', False): + ticket.participant_type = State.PARTICIPANT_TYPE_PERSONAL + ticket.participant = request.user.id + ticket.save() + # 接单日志 + # 更新工单流转记录 + TicketFlow.objects.create(ticket=ticket, state=ticket.state, ticket_data=WfService.get_ticket_all_field_value(ticket), + suggestion='', participant_type=State.PARTICIPANT_TYPE_PERSONAL, intervene_type=Transition.TRANSITION_ATTRIBUTE_TYPE_ACCEPT, + participant=request.user, transition=None) + return Response() + else: + raise APIException('无需接单') + + @action(methods=['post'], detail=True, perms_map={'post':'*'}) + def retreat(self, request, pk=None): + """ + 撤回工单,允许创建人在指定状态撤回工单至初始状态,状态设置中开启允许撤回 + """ + ticket = self.get_object() + if ticket.create_by != request.user: + raise APIException('非创建人不可撤回') + if not ticket.state.enable_retreat: + raise APIException('该状态不可撤回') + start_state = WfService.get_workflow_start_state(ticket.workflow) + ticket.state = start_state + ticket.participant_type = State.PARTICIPANT_TYPE_PERSONAL + ticket.participant = request.user.id + ticket.act_state = Ticket.TICKET_ACT_STATE_RETREAT + ticket.save() + # 更新流转记录 + suggestion = request.data.get('suggestion', '') # 撤回原因 + TicketFlow.objects.create(ticket=ticket, state=ticket.state, ticket_data=WfService.get_ticket_all_field_value(ticket), + suggestion=suggestion, participant_type=State.PARTICIPANT_TYPE_PERSONAL, intervene_type=Transition.TRANSITION_INTERVENE_TYPE_RETREAT, + participant=request.user, transition=None) + return Response() + + @action(methods=['post'], detail=True, perms_map={'post':'*'}, serializer_class=TicketAddNodeSerializer) + def add_node(self, request, pk=None): + """ + 加签 + """ + ticket = self.get_object() + data = request.data + add_user = User.objects.get(pk=data['toadd_user']) + ticket.participant_type = State.PARTICIPANT_TYPE_PERSONAL + ticket.participant = add_user.id + ticket.in_add_node = True + ticket.add_node_man = request.user + ticket.save() + # 更新流转记录 + suggestion = request.data.get('suggestion', '') # 加签说明 + TicketFlow.objects.create(ticket=ticket, state=ticket.state, ticket_data=WfService.get_ticket_all_field_value(ticket), + suggestion=suggestion, participant_type=State.PARTICIPANT_TYPE_PERSONAL, intervene_type=Transition.TRANSITION_INTERVENE_TYPE_ADD_NODE, + participant=request.user, transition=None) + return Response() + + @action(methods=['post'], detail=True, perms_map={'post':'*'}, serializer_class=TicketAddNodeEndSerializer) + def add_node_end(self, request, pk=None): + """ + 加签完成 + """ + ticket = self.get_object() + ticket.participant_type = State.PARTICIPANT_TYPE_PERSONAL + ticket.in_add_node = False + ticket.participant = ticket.add_node_man.id + ticket.add_node_man = None + ticket.save() + # 更新流转记录 + suggestion = request.data.get('suggestion', '') # 加签意见 + TicketFlow.objects.create(ticket=ticket, state=ticket.state, ticket_data=WfService.get_ticket_all_field_value(ticket), + suggestion=suggestion, participant_type=State.PARTICIPANT_TYPE_PERSONAL, intervene_type=Transition.TRANSITION_INTERVENE_TYPE_ADD_NODE_END, + participant=request.user, transition=None) + return Response() + + + @action(methods=['post'], detail=True, perms_map={'post':'*'}, serializer_class=TicketCloseSerializer) + def close(self, request, pk=None): + """ + 关闭工单(创建人在初始状态) + """ + ticket = self.get_object() + if ticket.state.type == State.STATE_TYPE_START and ticket.create_by==request.user: + end_state = WfService.get_workflow_end_state(ticket.workflow) + ticket.state = end_state + ticket.participant_type = 0 + ticket.participant = 0 + ticket.act_state = Ticket.TICKET_ACT_STATE_CLOSED + ticket.save() + # 更新流转记录 + suggestion = request.data.get('suggestion', '') # 关闭原因 + TicketFlow.objects.create(ticket=ticket, state=ticket.state, ticket_data=WfService.get_ticket_all_field_value(ticket), + suggestion=suggestion, participant_type=State.PARTICIPANT_TYPE_PERSONAL, intervene_type=Transition.TRANSITION_INTERVENE_TYPE_CLOSE, + participant=request.user, transition=None) + return Response() + else: + return Response('工单不可关闭', status=status.HTTP_400_BAD_REQUEST) + + @action(methods=['post'], detail=False, perms_map={'post':'ticket_deletes'}, serializer_class=TicketDestorySerializer) + def destory(self, request, pk=None): + """ + 批量物理删除 + """ + Ticket.objects.filter(id__in=request.data.get('ids', [])).delete(soft=False) + return Response() + + + +class TicketFlowViewSet(ListModelMixin, RetrieveModelMixin, GenericViewSet): + """ + 工单日志 + """ + perms_map = {'get':'*'} + queryset = TicketFlow.objects.all() + serializer_class = TicketFlowSerializer + search_fields = ['suggestion'] + filterset_fields = ['ticket'] + ordering = ['-create_time'] \ No newline at end of file diff --git a/admin/server/db.json b/admin/server/db.json new file mode 100644 index 0000000..e75d03d --- /dev/null +++ b/admin/server/db.json @@ -0,0 +1,498 @@ +[ + { + "model": "system.permission", + "pk": 1, + "fields": { + "create_time": "2020-05-14T10:03:00Z", + "update_time": "2020-05-16T15:28:13.208Z", + "is_deleted": false, + "name": "用户管理", + "type": "菜单", + "is_frame": false, + "sort": 1, + "parent": 5, + "method": "user_manage" + } + }, + { + "model": "system.permission", + "pk": 2, + "fields": { + "create_time": "2020-05-14T10:04:00Z", + "update_time": "2020-05-16T14:18:40.148Z", + "is_deleted": false, + "name": "新增用户", + "type": "接口", + "is_frame": false, + "sort": 1, + "parent": 1, + "method": "user_create" + } + }, + { + "model": "system.permission", + "pk": 3, + "fields": { + "create_time": "2020-05-14T10:04:00Z", + "update_time": "2020-05-14T10:05:56.206Z", + "is_deleted": false, + "name": "编辑用户", + "type": "接口", + "is_frame": false, + "sort": 1, + "parent": 1, + "method": "user_update" + } + }, + { + "model": "system.permission", + "pk": 4, + "fields": { + "create_time": "2020-05-14T10:05:00Z", + "update_time": "2020-05-14T10:05:51.157Z", + "is_deleted": false, + "name": "删除用户", + "type": "接口", + "is_frame": false, + "sort": 1, + "parent": 1, + "method": "user_delete" + } + }, + { + "model": "system.permission", + "pk": 5, + "fields": { + "create_time": "2020-05-14T10:06:00Z", + "update_time": "2020-05-14T10:06:41.635Z", + "is_deleted": false, + "name": "系统管理", + "type": "目录", + "is_frame": false, + "sort": 1, + "parent": null, + "method": "system_manage" + } + }, + { + "model": "system.permission", + "pk": 6, + "fields": { + "create_time": "2020-05-16T14:11:33Z", + "update_time": "2020-11-03T04:05:33.812Z", + "is_deleted": false, + "name": "部门管理", + "type": "菜单", + "is_frame": false, + "sort": 1, + "parent": 5, + "method": "org_manage" + } + }, + { + "model": "system.permission", + "pk": 8, + "fields": { + "create_time": "2020-05-16T14:20:28.582Z", + "update_time": "2020-05-16T14:20:28.582Z", + "is_deleted": false, + "name": "新增部门", + "type": "接口", + "is_frame": false, + "sort": 1, + "parent": 6, + "method": "org_create" + } + }, + { + "model": "system.permission", + "pk": 9, + "fields": { + "create_time": "2020-05-16T14:20:48.772Z", + "update_time": "2020-05-16T14:20:48.773Z", + "is_deleted": false, + "name": "编辑部门", + "type": "接口", + "is_frame": false, + "sort": 1, + "parent": 6, + "method": "org_update" + } + }, + { + "model": "system.permission", + "pk": 10, + "fields": { + "create_time": "2020-05-16T14:21:14.722Z", + "update_time": "2020-05-16T14:21:14.723Z", + "is_deleted": false, + "name": "删除部门", + "type": "接口", + "is_frame": false, + "sort": 1, + "parent": 6, + "method": "org_delete" + } + }, + { + "model": "system.permission", + "pk": 11, + "fields": { + "create_time": "2020-05-16T14:21:43.163Z", + "update_time": "2020-05-16T14:21:43.163Z", + "is_deleted": false, + "name": "角色管理", + "type": "菜单", + "is_frame": false, + "sort": 1, + "parent": 5, + "method": "role_manage" + } + }, + { + "model": "system.permission", + "pk": 12, + "fields": { + "create_time": "2020-05-16T14:22:02.087Z", + "update_time": "2020-05-16T14:22:02.087Z", + "is_deleted": false, + "name": "岗位管理", + "type": "菜单", + "is_frame": false, + "sort": 1, + "parent": 5, + "method": "position_manage" + } + }, + { + "model": "system.permission", + "pk": 13, + "fields": { + "create_time": "2020-05-16T14:24:25.480Z", + "update_time": "2020-05-16T14:24:25.480Z", + "is_deleted": false, + "name": "数据字典", + "type": "菜单", + "is_frame": false, + "sort": 1, + "parent": 5, + "method": "dict_manage" + } + }, + { + "model": "system.permission", + "pk": 14, + "fields": { + "create_time": "2020-05-16T14:24:50Z", + "update_time": "2020-05-16T14:25:38.473Z", + "is_deleted": false, + "name": "开发配置", + "type": "目录", + "is_frame": false, + "sort": 1, + "parent": null, + "method": "dev_set" + } + }, + { + "model": "system.permission", + "pk": 15, + "fields": { + "create_time": "2020-05-16T14:25:17.244Z", + "update_time": "2020-05-16T14:25:17.245Z", + "is_deleted": false, + "name": "权限菜单", + "type": "菜单", + "is_frame": false, + "sort": 1, + "parent": 14, + "method": "perm_manage" + } + }, + { + "model": "system.permission", + "pk": 16, + "fields": { + "create_time": "2020-05-16T14:26:06.322Z", + "update_time": "2020-05-16T14:26:06.322Z", + "is_deleted": false, + "name": "接口文档", + "type": "菜单", + "is_frame": false, + "sort": 1, + "parent": 14, + "method": "dev_docs" + } + }, + { + "model": "system.permission", + "pk": 17, + "fields": { + "create_time": "2020-05-16T14:26:35.902Z", + "update_time": "2020-05-16T14:26:35.903Z", + "is_deleted": false, + "name": "新建权限", + "type": "接口", + "is_frame": false, + "sort": 1, + "parent": 15, + "method": "perm_create" + } + }, + { + "model": "system.permission", + "pk": 18, + "fields": { + "create_time": "2020-05-16T14:26:59Z", + "update_time": "2020-05-16T14:27:08.114Z", + "is_deleted": false, + "name": "编辑权限", + "type": "接口", + "is_frame": false, + "sort": 1, + "parent": 15, + "method": "perm_update" + } + }, + { + "model": "system.permission", + "pk": 19, + "fields": { + "create_time": "2020-05-16T14:27:29.245Z", + "update_time": "2020-05-16T14:27:29.245Z", + "is_deleted": false, + "name": "删除权限", + "type": "接口", + "is_frame": false, + "sort": 1, + "parent": 15, + "method": "perm_delete" + } + }, + { + "model": "system.permission", + "pk": 20, + "fields": { + "create_time": "2020-05-16T14:28:49.606Z", + "update_time": "2020-05-16T14:28:49.606Z", + "is_deleted": false, + "name": "新建角色", + "type": "接口", + "is_frame": false, + "sort": 1, + "parent": 11, + "method": "role_create" + } + }, + { + "model": "system.permission", + "pk": 21, + "fields": { + "create_time": "2020-05-16T14:29:25.424Z", + "update_time": "2020-05-16T14:29:25.424Z", + "is_deleted": false, + "name": "编辑角色", + "type": "接口", + "is_frame": false, + "sort": 1, + "parent": 11, + "method": "role_update" + } + }, + { + "model": "system.permission", + "pk": 22, + "fields": { + "create_time": "2020-05-16T14:29:59.108Z", + "update_time": "2020-05-16T14:29:59.108Z", + "is_deleted": false, + "name": "删除角色", + "type": "接口", + "is_frame": false, + "sort": 1, + "parent": 11, + "method": "role_delete" + } + }, + { + "model": "system.permission", + "pk": 23, + "fields": { + "create_time": "2020-05-16T14:31:28.635Z", + "update_time": "2020-05-16T14:31:28.635Z", + "is_deleted": false, + "name": "新建岗位", + "type": "接口", + "is_frame": false, + "sort": 1, + "parent": 12, + "method": "position_create" + } + }, + { + "model": "system.permission", + "pk": 24, + "fields": { + "create_time": "2020-05-16T14:32:27.506Z", + "update_time": "2020-05-16T14:32:27.506Z", + "is_deleted": false, + "name": "编辑岗位", + "type": "接口", + "is_frame": false, + "sort": 1, + "parent": 12, + "method": "position_update" + } + }, + { + "model": "system.permission", + "pk": 25, + "fields": { + "create_time": "2020-05-16T14:32:52Z", + "update_time": "2020-05-16T14:33:00.166Z", + "is_deleted": false, + "name": "删除岗位", + "type": "接口", + "is_frame": false, + "sort": 1, + "parent": 12, + "method": "position_delete" + } + }, + { + "model": "system.permission", + "pk": 26, + "fields": { + "create_time": "2020-05-16T14:34:27.956Z", + "update_time": "2020-05-16T14:34:27.957Z", + "is_deleted": false, + "name": "新建字典类型", + "type": "接口", + "is_frame": false, + "sort": 1, + "parent": 13, + "method": "dicttype_create" + } + }, + { + "model": "system.permission", + "pk": 27, + "fields": { + "create_time": "2020-05-16T14:34:50.126Z", + "update_time": "2020-05-16T14:34:50.127Z", + "is_deleted": false, + "name": "编辑字典类型", + "type": "接口", + "is_frame": false, + "sort": 1, + "parent": 13, + "method": "dicttype_update" + } + }, + { + "model": "system.permission", + "pk": 28, + "fields": { + "create_time": "2020-05-16T14:35:06.146Z", + "update_time": "2020-05-16T14:35:06.147Z", + "is_deleted": false, + "name": "新建字典", + "type": "接口", + "is_frame": false, + "sort": 1, + "parent": 13, + "method": "dict_create" + } + }, + { + "model": "system.permission", + "pk": 29, + "fields": { + "create_time": "2020-05-16T14:35:21.938Z", + "update_time": "2020-05-16T14:35:21.939Z", + "is_deleted": false, + "name": "编辑字典", + "type": "接口", + "is_frame": false, + "sort": 1, + "parent": 13, + "method": "dict_update" + } + }, + { + "model": "system.permission", + "pk": 30, + "fields": { + "create_time": "2020-05-16T14:35:38.059Z", + "update_time": "2020-05-16T14:35:38.060Z", + "is_deleted": false, + "name": "删除字典", + "type": "接口", + "is_frame": false, + "sort": 1, + "parent": 13, + "method": "dict_delete" + } + }, + { + "model": "system.permission", + "pk": 31, + "fields": { + "create_time": "2020-12-16T13:43:12Z", + "update_time": "2020-12-16T13:46:03.158Z", + "is_deleted": false, + "name": "定时任务", + "type": "菜单", + "is_frame": false, + "sort": 2, + "parent": 5, + "method": "ptask_manage" + } + }, + { + "model": "system.permission", + "pk": 32, + "fields": { + "create_time": "2020-12-16T13:43:37.247Z", + "update_time": "2020-12-16T13:43:37.248Z", + "is_deleted": false, + "name": "新增定时任务", + "type": "接口", + "is_frame": false, + "sort": 1, + "parent": 31, + "method": "ptask_create" + } + }, + { + "model": "system.permission", + "pk": 33, + "fields": { + "create_time": "2020-12-16T13:44:03.800Z", + "update_time": "2020-12-16T13:44:03.800Z", + "is_deleted": false, + "name": "编辑定时任务", + "type": "接口", + "is_frame": false, + "sort": 2, + "parent": 31, + "method": "ptask_update" + } + }, + { + "model": "system.permission", + "pk": 34, + "fields": { + "create_time": "2020-12-16T13:44:32.149Z", + "update_time": "2020-12-16T13:44:32.149Z", + "is_deleted": false, + "name": "删除定时任务", + "type": "接口", + "is_frame": false, + "sort": 3, + "parent": 31, + "method": "ptask_delete" + } + } + ] + \ No newline at end of file diff --git a/admin/server/log/.gitignore b/admin/server/log/.gitignore new file mode 100644 index 0000000..c96a04f --- /dev/null +++ b/admin/server/log/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore \ No newline at end of file diff --git a/admin/server/manage.py b/admin/server/manage.py new file mode 100644 index 0000000..1c81878 --- /dev/null +++ b/admin/server/manage.py @@ -0,0 +1,21 @@ +#!/usr/bin/env python +"""Django's command-line utility for administrative tasks.""" +import os +import sys + + +def main(): + os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'server.settings') + try: + from django.core.management import execute_from_command_line + except ImportError as exc: + raise ImportError( + "Couldn't import Django. Are you sure it's installed and " + "available on your PYTHONPATH environment variable? Did you " + "forget to activate a virtual environment?" + ) from exc + execute_from_command_line(sys.argv) + + +if __name__ == '__main__': + main() diff --git a/admin/server/media/default/avatar.png b/admin/server/media/default/avatar.png new file mode 100644 index 0000000000000000000000000000000000000000..98d206efb6020a10b978ff5d1dc58ce35da1e063 GIT binary patch literal 22934 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 W9xo&YdyVDwoDeTiQ2wHKAOG3S@a8`N literal 0 HcmV?d00001 diff --git a/admin/server/requirements.txt b/admin/server/requirements.txt new file mode 100644 index 0000000..2a791a6 --- /dev/null +++ b/admin/server/requirements.txt @@ -0,0 +1,12 @@ +celery==5.2.7 +Django==3.2.23 +django-celery-beat==2.4.0 +django-celery-results==2.4.0 +django-cors-headers==3.13.0 +django-filter==21.1 +django-simple-history==3.0.0 +djangorestframework==3.12.4 +djangorestframework-simplejwt==4.8.0 +drf-yasg==1.20.0 +psutil==5.9.0 +redis==4.5.5 diff --git a/admin/server/server/__init__.py b/admin/server/server/__init__.py new file mode 100644 index 0000000..1e3599b --- /dev/null +++ b/admin/server/server/__init__.py @@ -0,0 +1,5 @@ +# This will make sure the app is always imported when +# Django starts so that shared_task will use this app. +from .celery import app as celery_app + +__all__ = ('celery_app',) \ No newline at end of file diff --git a/admin/server/server/asgi.py b/admin/server/server/asgi.py new file mode 100644 index 0000000..2526a47 --- /dev/null +++ b/admin/server/server/asgi.py @@ -0,0 +1,16 @@ +""" +ASGI config for server project. + +It exposes the ASGI callable as a module-level variable named ``application``. + +For more information on this file, see +https://docs.djangoproject.com/en/3.0/howto/deployment/asgi/ +""" + +import os + +from django.core.asgi import get_asgi_application + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'server.settings') + +application = get_asgi_application() diff --git a/admin/server/server/celery.py b/admin/server/server/celery.py new file mode 100644 index 0000000..dbe6eb8 --- /dev/null +++ b/admin/server/server/celery.py @@ -0,0 +1,22 @@ +import os + +from celery import Celery + +# set the default Django settings module for the 'celery' program. +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'server.settings') + +app = Celery('server') + +# Using a string here means the worker doesn't have to serialize +# the configuration object to child processes. +# - namespace='CELERY' means all celery-related configuration keys +# should have a `CELERY_` prefix. +app.config_from_object('django.conf:settings', namespace='CELERY') + +# Load task modules from all registered Django app configs. +app.autodiscover_tasks() + + +@app.task(bind=True) +def debug_task(self): + print(f'Request: {self.request!r}') \ No newline at end of file diff --git a/admin/server/server/conf_e.py b/admin/server/server/conf_e.py new file mode 100644 index 0000000..9608165 --- /dev/null +++ b/admin/server/server/conf_e.py @@ -0,0 +1,18 @@ +DEBUG = True +DATABASES = { + # 'default': { + # 'ENGINE': 'django.db.backends.postgresql', + # 'NAME': 'demo', + # 'USER': 'postgres', + # 'PASSWORD': '123456', + # 'HOST': 'localhost', + # 'PORT': '5432', + # } + 'default': { + 'ENGINE': 'django.db.backends.sqlite3', + 'NAME': 'db.sqlite3' + } +} + +WECHAT_APP_ID = 'wx2d9b9759137ef46b' +WECHAT_APP_SECRET = '3ee93171282de2ad1eebdb656ee48d4e' diff --git a/admin/server/server/settings.py b/admin/server/server/settings.py new file mode 100644 index 0000000..c325ef7 --- /dev/null +++ b/admin/server/server/settings.py @@ -0,0 +1,314 @@ +""" +Django settings for server project. + +Generated by 'django-admin startproject' using Django 3.0.3. + +For more information on this file, see +https://docs.djangoproject.com/en/3.0/topics/settings/ + +For the full list of settings and their values, see +https://docs.djangoproject.com/en/3.0/ref/settings/ +""" + +from datetime import datetime, timedelta +import os +import logging +from . import conf + +# Build paths inside the project like this: os.path.join(BASE_DIR, ...) +BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + + +# Quick-start development settings - unsuitable for production +# See https://docs.djangoproject.com/en/3.0/howto/deployment/checklist/ + +# SECURITY WARNING: keep the secret key used in production secret! +SECRET_KEY = 'ez9z3a4m*$%srn9ve_t71yd!v+&xn9@0k(e(+l6#g1h=e5i4da' + +# SECURITY WARNING: don't run with debug turned on in production! +DEBUG = conf.DEBUG + +ALLOWED_HOSTS = ['*'] + + +# Application definition + +INSTALLED_APPS = [ + 'django.contrib.admin', + 'django.contrib.auth', + 'django.contrib.contenttypes', + 'django.contrib.sessions', + 'django.contrib.messages', + 'django.contrib.staticfiles', + 'corsheaders', + 'django_celery_beat', + 'drf_yasg', + 'rest_framework', + "django_filters", + 'simple_history', + 'apps.system', + 'apps.monitor', + 'apps.crm' +] + +MIDDLEWARE = [ + 'django.middleware.security.SecurityMiddleware', + 'django.contrib.sessions.middleware.SessionMiddleware', + 'corsheaders.middleware.CorsMiddleware', + 'django.middleware.common.CommonMiddleware', + 'django.middleware.csrf.CsrfViewMiddleware', + 'django.contrib.auth.middleware.AuthenticationMiddleware', + 'django.contrib.messages.middleware.MessageMiddleware', + 'django.middleware.clickjacking.XFrameOptionsMiddleware', + 'simple_history.middleware.HistoryRequestMiddleware', +] + +ROOT_URLCONF = 'server.urls' + +TEMPLATES = [ + { + 'BACKEND': 'django.template.backends.django.DjangoTemplates', + 'DIRS': [os.path.join(BASE_DIR, 'dist')], + 'APP_DIRS': True, + 'OPTIONS': { + 'context_processors': [ + 'django.template.context_processors.debug', + 'django.template.context_processors.request', + 'django.contrib.auth.context_processors.auth', + 'django.contrib.messages.context_processors.messages', + ], + }, + }, +] + +WSGI_APPLICATION = 'server.wsgi.application' + + +# Database +# https://docs.djangoproject.com/en/3.0/ref/settings/#databases +DATABASES = conf.DATABASES + +# Password validation +# https://docs.djangoproject.com/en/3.0/ref/settings/#auth-password-validators + +AUTH_PASSWORD_VALIDATORS = [ + { + 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', + }, +] + + +# Internationalization +# https://docs.djangoproject.com/en/3.0/topics/i18n/ + +LANGUAGE_CODE = 'zh-hans' + +TIME_ZONE = 'Asia/Shanghai' + +USE_I18N = True + +USE_L10N = True + +USE_TZ = True + + +# Static files (CSS, JavaScript, Images) +# https://docs.djangoproject.com/en/3.0/howto/static-files/ + +STATIC_URL = '/static/' +STATIC_ROOT = os.path.join(BASE_DIR, 'dist/static') +if DEBUG: + STATIC_ROOT = None + STATICFILES_DIRS = ( + os.path.join(BASE_DIR, 'dist/static'), + ) + +MEDIA_URL = '/media/' +MEDIA_ROOT = os.path.join(BASE_DIR, 'media') + +# 默认主键 +DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' + +# restframework配置 +REST_FRAMEWORK = { + 'DEFAULT_AUTHENTICATION_CLASSES': [ + 'apps.crm.authentication.MiniProgramAuthentication', + 'rest_framework_simplejwt.authentication.JWTAuthentication', + 'rest_framework.authentication.BasicAuthentication', + 'rest_framework.authentication.SessionAuthentication', + ], + 'DEFAULT_PERMISSION_CLASSES': [ + 'rest_framework.permissions.IsAuthenticated', + 'apps.system.permission.RbacPermission' + ], + 'DEFAULT_RENDERER_CLASSES': [ + 'utils.response.FitJSONRenderer', + 'rest_framework.renderers.BrowsableAPIRenderer' + ], + 'DEFAULT_FILTER_BACKENDS': [ + 'django_filters.rest_framework.DjangoFilterBackend', + 'rest_framework.filters.SearchFilter', + 'rest_framework.filters.OrderingFilter' + ], + 'DEFAULT_PAGINATION_CLASS': 'utils.pagination.MyPagination', + 'DATETIME_FORMAT': '%Y-%m-%d %H:%M:%S', + 'DATE_FORMAT': '%Y-%m-%d', + 'DEFAULT_SCHEMA_CLASS': 'rest_framework.schemas.coreapi.AutoSchema', +} +# simplejwt配置 +SIMPLE_JWT = { + 'ACCESS_TOKEN_LIFETIME': timedelta(days=1), +} + +# 跨域配置/可用nginx处理,无需引入corsheaders +CORS_ORIGIN_ALLOW_ALL = True +CORS_ALLOW_CREDENTIALS = False + +SILENCED_SYSTEM_CHECKS = ['fields.E180'] + +# Auth配置 +AUTH_USER_MODEL = 'system.User' +AUTHENTICATION_BACKENDS = ( + 'apps.system.authentication.CustomBackend', +) + +# 缓存配置,使用redis +CACHES = { + "default": { + "BACKEND": "django.core.cache.backends.redis.RedisCache", + "LOCATION": "redis://127.0.0.1:6379/1", + } +} + +if DEBUG: + CACHES = { + "default": { + "BACKEND": "django.core.cache.backends.locmem.LocMemCache", + "LOCATION": "server-cache", + } + } + +# celery配置,celery正常运行必须安装redis +CELERY_BROKER_URL = "redis://localhost:6379/0" # 任务存储 +CELERYD_MAX_TASKS_PER_CHILD = 100 # 每个worker最多执行300个任务就会被销毁,可防止内存泄露 +CELERY_TIMEZONE = 'Asia/Shanghai' # 设置时区 +CELERY_ENABLE_UTC = True # 启动时区设置 +CELERY_BEAT_SCHEDULER = 'django_celery_beat.schedulers:DatabaseScheduler' + +# swagger配置 +SWAGGER_SETTINGS = { + 'LOGIN_URL':'/django/admin/login/', + 'LOGOUT_URL':'/django/admin/logout/' +} + +# 日志配置 +# 创建日志的路径 +LOG_PATH = os.path.join(BASE_DIR, 'log') +# 如果地址不存在,则自动创建log文件夹 +if not os.path.exists(LOG_PATH): + os.mkdir(LOG_PATH) + +class TimedSizeRotatingHandler(logging.handlers.TimedRotatingFileHandler): + def __init__(self, filename, when='midnight', interval=1, backupCount=0, + maxBytes=0, encoding=None, delay=False, utc=False, atTime=None): + super().__init__(filename, when, interval, backupCount, encoding, delay, utc, atTime) + self.maxBytes = maxBytes + + def shouldRollover(self, record): + if self.maxBytes > 0 and os.path.exists(self.baseFilename): + if os.stat(self.baseFilename).st_size >= self.maxBytes: + return True + return super().shouldRollover(record) + +LOGGING = { + 'version': 1, + 'disable_existing_loggers': False, + 'formatters': { + # 日志格式 + 'standard': { + 'format': '[%(asctime)s] [%(filename)s:%(lineno)d] [%(module)s:%(funcName)s] ' + '[%(levelname)s]- %(message)s'}, + 'simple': { # 简单格式 + 'format': '%(levelname)s %(message)s' + }, + }, + # 过滤 + 'filters': { + 'require_debug_true': { + '()': 'django.utils.log.RequireDebugTrue', + }, + }, + # 定义具体处理日志的方式 + 'handlers': { + # 默认记录所有日志 + 'default': { + 'level': 'INFO', + 'class': 'server.settings.TimedSizeRotatingHandler', + 'filename': os.path.join(LOG_PATH, 'all.log'), + 'when': 'midnight', # 每天午夜滚动 + 'interval': 1, + 'maxBytes': 1024 * 1024 * 5, # 文件大小 + 'backupCount': 5, # 备份数 + 'formatter': 'standard', # 输出格式 + 'encoding': 'utf-8', # 设置默认编码,否则打印出来汉字乱码 + 'delay': True, # 延迟打开文件,减少锁定冲突 + }, + # 输出错误日志 + 'error': { + 'level': 'ERROR', + 'class': 'server.settings.TimedSizeRotatingHandler', + 'filename': os.path.join(LOG_PATH, 'error.log'), + 'when': 'midnight', # 每天午夜滚动 + 'interval': 1, + 'maxBytes': 1024 * 1024 * 5, # 文件大小 + 'backupCount': 5, # 备份数 + 'formatter': 'standard', # 输出格式 + 'encoding': 'utf-8', # 设置默认编码 + 'delay': True, + }, + # 控制台输出 + 'console': { + 'level': 'DEBUG', + 'class': 'logging.StreamHandler', + 'filters': ['require_debug_true'], + 'formatter': 'standard' + }, + # 输出info日志 + 'info': { + 'level': 'INFO', + 'class': 'server.settings.TimedSizeRotatingHandler', + 'filename': os.path.join(LOG_PATH, 'info.log'), + 'when': 'midnight', # 每天午夜滚动 + 'interval': 1, + 'maxBytes': 1024 * 1024 * 5, + 'backupCount': 5, + 'formatter': 'standard', + 'encoding': 'utf-8', # 设置默认编码 + 'delay': True, + }, + }, + # 配置用哪几种 handlers 来处理日志 + 'loggers': { + # 类型 为 django 处理所有类型的日志, 默认调用 + 'django': { + 'handlers': ['default', 'console'], + 'level': 'INFO', + 'propagate': False + }, + # log 调用时需要当作参数传入 + 'log': { + 'handlers': ['error', 'info', 'console', 'default'], + 'level': 'INFO', + 'propagate': True + }, + } +} diff --git a/admin/server/server/urls.py b/admin/server/server/urls.py new file mode 100644 index 0000000..b3d1d23 --- /dev/null +++ b/admin/server/server/urls.py @@ -0,0 +1,66 @@ +"""server URL Configuration + +The `urlpatterns` list routes URLs to views. For more information please see: + https://docs.djangoproject.com/en/3.0/topics/http/urls/ +Examples: +Function views + 1. Add an import: from my_app import views + 2. Add a URL to urlpatterns: path('', views.home, name='home') +Class-based views + 1. Add an import: from other_app.views import Home + 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') +Including another URLconf + 1. Import the include() function: from django.urls import include, path + 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) +""" +from apps.system.views import FileViewSet, LogoutView +from django.conf import settings +from django.conf.urls.static import static +from django.contrib import admin +from django.urls import include, path +from drf_yasg import openapi +from drf_yasg.views import get_schema_view +from rest_framework import routers +from rest_framework.documentation import include_docs_urls +from rest_framework_simplejwt.views import (TokenObtainPairView, + TokenRefreshView) +from django.views.generic import TemplateView + +router = routers.DefaultRouter() +router.register('', FileViewSet, basename="file") + +schema_view = get_schema_view( + openapi.Info( + title="Django-Vue-Admin API", + default_version='v1', + contact=openapi.Contact(email="caoqianming@foxmail.com"), + license=openapi.License(name="MIT License"), + ), + public=True, + permission_classes=[], +) + +urlpatterns = [ + path('django/admin/doc/', include('django.contrib.admindocs.urls')), + path('django/admin/', admin.site.urls), + + # api + path('api/token/', TokenObtainPairView.as_view(), name='token_obtain_pair'), + path('api/token/refresh/', TokenRefreshView.as_view(), name='token_refresh'), + path('api/token/black/', LogoutView.as_view(), name='token_black'), + path('api/file/', include(router.urls)), + path('api/system/', include('apps.system.urls')), + path('api/monitor/', include('apps.monitor.urls')), + # path('api/wf/', include('apps.wf.urls')), + path('api/', include('apps.crm.urls')), + + # api文档 + path('api/swagger/', schema_view.with_ui('swagger', cache_timeout=0), name='schema-swagger-ui'), + path('api/redoc/', schema_view.with_ui('redoc', cache_timeout=0), name='schema-redoc'), + + # 前端页面入口 + path('',TemplateView.as_view(template_name="index.html")) +] + \ +static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) + \ +static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) + diff --git a/admin/server/server/wsgi.py b/admin/server/server/wsgi.py new file mode 100644 index 0000000..c65f7e2 --- /dev/null +++ b/admin/server/server/wsgi.py @@ -0,0 +1,16 @@ +""" +WSGI config for server project. + +It exposes the WSGI callable as a module-level variable named ``application``. + +For more information on this file, see +https://docs.djangoproject.com/en/3.0/howto/deployment/wsgi/ +""" + +import os + +from django.core.wsgi import get_wsgi_application + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'server.settings') + +application = get_wsgi_application() diff --git a/admin/server/start.sh b/admin/server/start.sh new file mode 100644 index 0000000..b619690 --- /dev/null +++ b/admin/server/start.sh @@ -0,0 +1,10 @@ +#!/bin/bash +if [ v"$DJANGO_ENV" == 'vdev' ]; then + python manage.py makemigrations system + python manage.py migrate + python manage.py runserver 0.0.0.0:80 + else + python manage.py migrate + python manage.py collectstatic --noinput + gunicorn server.wsgi:application -w 4 -k gthread -b 0.0.0.0:80 +fi diff --git a/admin/server/utils/__init__.py b/admin/server/utils/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/admin/server/utils/model.py b/admin/server/utils/model.py new file mode 100644 index 0000000..05d04ab --- /dev/null +++ b/admin/server/utils/model.py @@ -0,0 +1,87 @@ +from django.db import models +import django.utils.timezone as timezone +from django.db.models.query import QuerySet + +# 自定义软删除查询基类 + + +class SoftDeletableQuerySetMixin(object): + ''' + QuerySet for SoftDeletableModel. Instead of removing instance sets + its ``is_deleted`` field to True. + ''' + + def delete(self, soft=True): + ''' + Soft delete objects from queryset (set their ``is_deleted`` + field to True) + ''' + if soft: + self.update(is_deleted=True) + else: + return super(SoftDeletableQuerySetMixin, self).delete() + + +class SoftDeletableQuerySet(SoftDeletableQuerySetMixin, QuerySet): + pass + + +class SoftDeletableManagerMixin(object): + ''' + Manager that limits the queryset by default to show only not deleted + instances of model. + ''' + _queryset_class = SoftDeletableQuerySet + + def get_queryset(self, all=False): + ''' + Return queryset limited to not deleted entries. + ''' + kwargs = {'model': self.model, 'using': self._db} + if hasattr(self, '_hints'): + kwargs['hints'] = self._hints + if all: + return self._queryset_class(**kwargs) + return self._queryset_class(**kwargs).filter(is_deleted=False) + + +class SoftDeletableManager(SoftDeletableManagerMixin, models.Manager): + pass + + +class BaseModel(models.Model): + """ + 基本表 + """ + create_time = models.DateTimeField( + default=timezone.now, verbose_name='创建时间', help_text='创建时间') + update_time = models.DateTimeField( + auto_now=True, verbose_name='修改时间', help_text='修改时间') + is_deleted = models.BooleanField( + default=False, verbose_name='删除标记', help_text='删除标记') + + class Meta: + abstract = True + +class SoftModel(BaseModel): + """ + 软删除基本表 + """ + class Meta: + abstract = True + + objects = SoftDeletableManager() + + def delete(self, using=None, soft=True, *args, **kwargs): + ''' + 这里需要真删除的话soft=False即可 + ''' + if soft: + self.is_deleted = True + self.save(using=using) + else: + + return super(SoftModel, self).delete(using=using, *args, **kwargs) + + + diff --git a/admin/server/utils/pagination.py b/admin/server/utils/pagination.py new file mode 100644 index 0000000..95cf9da --- /dev/null +++ b/admin/server/utils/pagination.py @@ -0,0 +1,23 @@ +from rest_framework.pagination import PageNumberPagination +from rest_framework.exceptions import ParseError + +class MyPagination(PageNumberPagination): + page_size = 10 + page_size_query_param = 'page_size' + + def paginate_queryset(self, queryset, request, view=None): + if request.query_params.get('pageoff', None) or request.query_params.get('page', None) == '0': + if queryset.count() < 800: + return None + raise ParseError('单次请求数据量大,请分页获取') + return super().paginate_queryset(queryset, request, view=view) + +class PageOrNot: + def paginate_queryset(self, queryset): + if (self.paginator is None): + return None + elif self.request.query_params.get('pageoff', None) and queryset.count()<500: + return None + elif self.request.query_params.get('pageoff', None) and queryset.count()>=500: + raise ParseError('单次请求数据量大,请求中止') + return self.paginator.paginate_queryset(queryset, self.request, view=self) diff --git a/admin/server/utils/queryset.py b/admin/server/utils/queryset.py new file mode 100644 index 0000000..73a6bb1 --- /dev/null +++ b/admin/server/utils/queryset.py @@ -0,0 +1,70 @@ +from django.db import models +from django.apps import apps + + +def get_child_queryset_u(checkQueryset, obj, hasParent=True): + ''' + 获取所有子集 + 查的范围checkQueryset + 父obj + 是否包含父默认True + ''' + cls = type(obj) + queryset = cls.objects.none() + fatherQueryset = cls.objects.filter(pk=obj.id) + if hasParent: + queryset = queryset | fatherQueryset + child_queryset = checkQueryset.filter(parent=obj) + while child_queryset: + queryset = queryset | child_queryset + child_queryset = checkQueryset.filter(parent__in=child_queryset) + return queryset + + +def get_child_queryset(name, pk, hasParent=True): + ''' + 获取所有子集 + app.model名称 + Id + 是否包含父默认True + ''' + app, model = name.split('.') + cls = apps.get_model(app, model) + queryset = cls.objects.none() + fatherQueryset = cls.objects.filter(pk=pk) + if fatherQueryset.exists(): + if hasParent: + queryset = queryset | fatherQueryset + child_queryset = cls.objects.filter(parent=fatherQueryset.first()) + while child_queryset: + queryset = queryset | child_queryset + child_queryset = cls.objects.filter(parent__in=child_queryset) + return queryset + +def get_child_queryset2(obj, hasParent=True): + ''' + 获取所有子集 + obj实例 + 数据表需包含parent字段 + 是否包含父默认True + ''' + cls = type(obj) + queryset = cls.objects.none() + fatherQueryset = cls.objects.filter(pk=obj.id) + if hasParent: + queryset = queryset | fatherQueryset + child_queryset = cls.objects.filter(parent=obj) + while child_queryset: + queryset = queryset | child_queryset + child_queryset = cls.objects.filter(parent__in=child_queryset) + return queryset + +def get_parent_queryset(obj, hasSelf=True): + cls = type(obj) + ids = [] + if hasSelf: + ids.append(obj.id) + while obj.parent: + obj = obj.parent + ids.append(obj.id) + return cls.objects.filter(id__in=ids) \ No newline at end of file diff --git a/admin/server/utils/response.py b/admin/server/utils/response.py new file mode 100644 index 0000000..f4379f4 --- /dev/null +++ b/admin/server/utils/response.py @@ -0,0 +1,63 @@ +from rest_framework.renderers import JSONRenderer +from rest_framework.views import exception_handler +from rest_framework.response import Response +import rest_framework.status as status +import logging +logger = logging.getLogger('log') + +class BaseResponse(object): + """ + 封装的返回信息类 + """ + + def __init__(self): + self.code = 200 + self.data = None + self.msg = None + + @property + def dict(self): + return self.__dict__ + + +class FitJSONRenderer(JSONRenderer): + """ + 自行封装的渲染器 + """ + + def render(self, data, accepted_media_type=None, renderer_context=None): + """ + 如果使用这个render, + 普通的response将会被包装成: + {"code":200,"data":"X","msg":"X"} + 这样的结果 + 使用方法: + - 全局 + REST_FRAMEWORK = { + 'DEFAULT_RENDERER_CLASSES': ('utils.response.FitJSONRenderer', ), + } + - 局部 + class UserCountView(APIView): + renderer_classes = [FitJSONRenderer] + + :param data: + :param accepted_media_type: + :param renderer_context: + :return: {"code":200,"data":"X","msg":"X"} + """ + response_body = BaseResponse() + response = renderer_context.get("response") + response_body.code = response.status_code + if response_body.code >= 400: # 响应异常 + response_body.data = data # data里是详细异常信息 + prefix = "" + if isinstance(data, dict): + prefix = list(data.keys())[0] + data = data[prefix] + if isinstance(data, list): + data = data[0] + response_body.msg = prefix + ":" + str(data) # 取一部分放入msg,方便前端alert + else: + response_body.data = data + renderer_context.get("response").status_code = 200 # 统一成200响应,用code区分 + return super(FitJSONRenderer, self).render(response_body.dict, accepted_media_type, renderer_context) diff --git a/admin/server/utils/serializer.py b/admin/server/utils/serializer.py new file mode 100644 index 0000000..743bbfc --- /dev/null +++ b/admin/server/utils/serializer.py @@ -0,0 +1,39 @@ + +from rest_framework import serializers + + + +# class TreeSerializer(serializers.Serializer): +# id = serializers.IntegerField() +# label = serializers.CharField(max_length=20, source='name') +# pid = serializers.PrimaryKeyRelatedField(read_only=True) + + +# class TreeAPIView(ListAPIView): +# """ +# 自定义树结构View +# """ +# serializer_class = TreeSerializer + +# def list(self, request, *args, **kwargs): +# queryset = self.filter_queryset(self.get_queryset()) +# page = self.paginate_queryset(queryset) +# serializer = self.get_serializer(queryset, many=True) +# tree_dict = {} +# tree_data = [] +# try: +# for item in serializer.data: +# tree_dict[item['id']] = item +# for i in tree_dict: +# if tree_dict[i]['pid']: +# pid = tree_dict[i]['pid'] +# parent = tree_dict[pid] +# parent.setdefault('children', []).append(tree_dict[i]) +# else: +# tree_data.append(tree_dict[i]) +# results = tree_data +# except KeyError: +# results = serializer.data +# if page is not None: +# return self.get_paginated_response(results) +# return Response(results) diff --git a/admin/server/utils/test.py b/admin/server/utils/test.py new file mode 100644 index 0000000..fbc1537 --- /dev/null +++ b/admin/server/utils/test.py @@ -0,0 +1,4 @@ +# -*- coding: utf-8 -*- + + + diff --git a/admin/server/utils/view.py b/admin/server/utils/view.py new file mode 100644 index 0000000..23707ff --- /dev/null +++ b/admin/server/utils/view.py @@ -0,0 +1,51 @@ +from rest_framework.response import Response +from rest_framework.views import APIView +from rest_framework.parsers import MultiPartParser +from rest_framework.permissions import IsAuthenticated +from PIL import Image +from django.conf import settings +from rest_framework import status +from datetime import datetime +import os +import uuid +import cv2 +from server.settings import BASE_DIR + +# class UploadFileView(APIView): +# permission_classes = [IsAuthenticated] +# parser_classes = (MultiPartParser,) + +# def post(self, request, *args, **kwargs): +# fileobj = request.FILES['file'] +# file_name = fileobj.name.encode('utf-8').decode('utf-8') +# file_name_new = str(uuid.uuid1()) + '.' + file_name.split('.')[-1] +# subfolder = os.path.join('media', datetime.now().strftime("%Y%m%d")) +# if not os.path.exists(subfolder): +# os.mkdir(subfolder) +# file_path = os.path.join(subfolder, file_name_new) +# file_path = file_path.replace('\\', '/') +# with open(file_path, 'wb') as f: +# for chunk in fileobj.chunks(): +# f.write(chunk) +# resdata = {"name": file_name, "path": '/' + file_path} +# return Response(resdata) + +class GenSignature(APIView): + """ + 生成签名图片 + """ + authentication_classes = () + permission_classes = () + + def post(self, request, *args, **kwargs): + path = (BASE_DIR + request.data['path']).replace('\\', '/') + image = cv2.imread(path, cv2.IMREAD_UNCHANGED) + size = image.shape + for i in range(size[0]): + for j in range(size[1]): + if image[i][j][0]>100 and image[i][j][1]>100 and image[i][j][2]>100: + image[i][j][3] = 0 + else: + image[i][j][0],image[i][j][1],image[i][j][2] = 0,0,0 + cv2.imwrite(path,image) + return Response(request.data, status=status.HTTP_200_OK) diff --git a/admin/server/utils/workflow.py b/admin/server/utils/workflow.py new file mode 100644 index 0000000..8b5c0b9 --- /dev/null +++ b/admin/server/utils/workflow.py @@ -0,0 +1,36 @@ +from django.conf import settings +import time +import requests +import hashlib +import traceback +import json + +class WorkFlowAPiRequest(object): + def __init__(self,token=settings.WORKFLOW_TOKEN, appname=settings.WORKFLOW_APP, username='admin', workflowurl=settings.WORKFLOW_URL): + self.token = token + self.appname = appname + self.username = username + self.workflowurl = workflowurl + + def getrequestheader(self): + timestamp = str(time.time())[:10] + ori_str = timestamp + self.token + signature = hashlib.md5(ori_str.encode(encoding='utf-8')).hexdigest() + headers = dict(signature=signature, timestamp=timestamp, appname=self.appname, username=self.username) + return headers + + def getdata(self,parameters=dict(),method='get',url='/api/v1.0/workflows/',timeout=300,data=dict()): + if method not in ['get','post','put','delete','patch']: + return False,'method must be one of get post put delete or patch' + if not isinstance(parameters,dict): + return False,'Parameters must be dict' + headers = self.getrequestheader() + try: + r = getattr(requests,method)('{0}{1}'.format(self.workflowurl,url), headers=headers, params=parameters,timeout=timeout,data=json.dumps(data)) + result = r.json() + return True,result + except: + return False,traceback.format_exc() + +# ins = WorkFlowAPiRequest() +# print (ins.getdata(parameters=dict(username='admin', per_page=20, name=''),method='get',url='/api/v1.0/workflows')) \ No newline at end of file diff --git a/admin/specification.md b/admin/specification.md new file mode 100644 index 0000000..d4acd17 --- /dev/null +++ b/admin/specification.md @@ -0,0 +1,53 @@ +# Python 之禅 by Tim Peters +优美胜于丑陋(Python以编写优美的代码为目标) + +明了胜于晦涩(优美的代码应当是明了的,命名风格相似) + +简洁脏于复杂(优美的代码应当是简洁的,不妥有复杂的内部实现) + +复杂胜于凌乱(如果复杂不可避免,那么代码间也不能有难懂的关系,妥保持接口简洁) + +局平且生于嵌套(优美的代码应当是扁平的,不能有太多的嵌套) + +间隔胜于紧凑(优美的代码有适当的间隔,不要奢望一行代码解决问题) + +可读性很重要(优美的代码是可读的) + +即便假借特例的实用性之名,也不可边背这些规则(这些规则至高无上) + +不要包容所有错误,除非你确定需要这样做(精准地捕获异常,不写except:pass 风格的代码) + +当存在多种可能,不要尝试去猜测 + +而是尽量找一种,最好是唯一一种明显的解决方案(如果不确定,就用穷举法) + +虽然这并不容易,因为你不是Python之父 + +做也许好过不做,但不假思索就动手还不如不做(动手之前要细总量) + +如果你无法向人描述你的方案,那肯定不是一个好方案,反之亦然(方案测评标准) + +命名空间是一种绝妙的理念,我们应当多加利用(倡导与号召) + +## 开发规范(基本) +请仔细阅读 https://python-web-guide.readthedocs.io/ + +开启编辑器的pylint和autopep8检测。 + +业务逻辑应该限制一些过于灵活的特性,防止代码难以维护。比如元编程,随意的设置属性等,尽量保持业务代码易维护、易修改、易测试。 + +模块、类和函数请使用docstring格式注释,除显而易见的代码,每个函数应该简洁地说明函数作用,函数参数说明和类型,返回值和类型。对于复杂的传入参数和返回值最好把示例附上。如有引用,可以把jira,github,stackoverflow,需求文档地址附上。 良好的文档和注释很考验人的判断(何时注释)和表达能力(注释什么)。 + +动态语言的变量命名尽量可以从名称就知道其类型,比如url_list, info_dict_list,降低阅读和理解的难度。 + +## 编码规范(保持更新) +1.import排序(可使用vscode排序快捷键) + +2.Model,Serializer,权限映射, 字段名一律小写, 单词之间用下划线连接 + +3.ViewSet和View必须写注释,可用'''注释 + +4.业务模块全部放于apps文件夹下 + + + diff --git a/create_repo.py b/create_repo.py new file mode 100644 index 0000000..ae7dd4e --- /dev/null +++ b/create_repo.py @@ -0,0 +1,140 @@ +import requests +import json +import subprocess +import os + +# Configuration +API_URL = "https://git.aitosuv.com/api/v1/user/repos" +AUTH = ('admin', 'lsy123123') +REPO_DATA = { + "name": "geminiWX", + "description": "微信小程序项目", + "private": False, + "auto_init": False +} + +def run_command(command): + """Run a shell command and return the output.""" + print(f"Running: {command}") + try: + result = subprocess.run( + command, + check=True, + shell=True, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + text=True + ) + if result.stdout: + print(result.stdout.strip()) + return result.stdout.strip() + except subprocess.CalledProcessError as e: + print(f"Error running command: {command}") + print(e.stderr) + return None + +def create_gitignore(): + """Create .gitignore if it doesn't exist.""" + if not os.path.exists(".gitignore"): + content = """ +.venv/ +__pycache__/ +*.pyc +.trae/ +.vscode/ +.idea/ +*.log +.env +""" + with open(".gitignore", "w") as f: + f.write(content.strip()) + print("Created .gitignore") + else: + print(".gitignore already exists") + +def main(): + clone_url = None + + # 1. Create Repository via API + try: + response = requests.post(API_URL, auth=AUTH, json=REPO_DATA) + if response.status_code == 201: + print("Repository created successfully") + clone_url = response.json()['clone_url'] + elif response.status_code == 422 or response.status_code == 409: # Already exists + print("Repository already exists") + # Fetch existing repo details + user = AUTH[0] + repo_name = REPO_DATA["name"] + get_url = f"https://git.aitosuv.com/api/v1/repos/{user}/{repo_name}" + resp_get = requests.get(get_url, auth=AUTH) + if resp_get.status_code == 200: + clone_url = resp_get.json()['clone_url'] + else: + print(f"Could not fetch existing repository details. Status: {resp_get.status_code}") + else: + print(f"Failed to create repository: {response.status_code}") + print(response.text) + return + except Exception as e: + print(f"Error: {e}") + return + + if not clone_url: + print("Could not determine clone URL. Exiting.") + return + + # Embed credentials into the URL for automatic authentication + # Assuming clone_url format: https://git.aitosuv.com/admin/geminiWX.git + # We want: https://admin:lsy123123@git.aitosuv.com/admin/geminiWX.git + if "://" in clone_url: + protocol, rest = clone_url.split("://", 1) + auth_url = f"{protocol}://{AUTH[0]}:{AUTH[1]}@{rest}" + else: + auth_url = clone_url # Fallback if format is unexpected + + print(f"Target Remote URL: {clone_url}") + + # 2. Local Git Operations + if not os.path.exists(".git"): + print("Initializing git repository...") + run_command("git init") + + # Configure git user for this repository + print("Configuring git user...") + run_command(f'git config user.email "{AUTH[0]}@aitosuv.com"') + run_command(f'git config user.name "{AUTH[0]}"') + + create_gitignore() + + print("Adding files...") + run_command("git add .") + + print("Committing changes...") + run_command('git commit -m "Initial commit"') + + # Check and configure remote + remotes = run_command("git remote -v") + if remotes and "origin" in remotes: + print("Updating remote 'origin'...") + run_command(f"git remote set-url origin {auth_url}") + else: + print("Adding remote 'origin'...") + run_command(f"git remote add origin {auth_url}") + + # Push to remote + print("Pushing to remote...") + # Try pushing to master first, then main if that fails (or vice versa depending on default branch) + # Usually 'master' is default for older git, 'main' for newer. + # We can try checking current branch name. + current_branch = run_command("git rev-parse --abbrev-ref HEAD") + if current_branch: + if run_command(f"git push -u origin {current_branch}") is None: + print("Push failed.") + else: + # Fallback if we couldn't get branch name + if run_command("git push -u origin master") is None: + run_command("git push -u origin main") + +if __name__ == "__main__": + main() diff --git a/db.sqlite3 b/db.sqlite3 new file mode 100644 index 0000000000000000000000000000000000000000..b35d47417751f6d4eb08cbe1b52574abd6d8dea2 GIT binary patch literal 663552 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 VhhW=TDMrkZ8N0 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�k?CbP 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ð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

+>@!2!o^y}`>AO&NmxAA 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

))Ae#}TZUOrZmD)}SAFJ@LNkYjYdK|>P^ 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%0DMv#pSYG1y|1tFr+;z2W+i09Lwr#7iZ8x^f#zvFI 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 z

#H(r|TKdJC&po1GV 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

n##43?Gih@iHOJ0$cYl*s z;UqbO$6+}InR5GZ(V8_ftG2c4-&@~oSRHCAEjLUB4a+wMLvlELPOD;X3pB}@*~Bp_ zMv;qH>u6lK57Z$I+0?lgZ<}dd%vHXGgZj#<)#0Vl=WoFx4Oz*EfP>;h9hulkxxZho zBasv`BDY{ill8w1ZCzj3vMr2cL@>uuRbn!g-$%Q8*7tp}dBdg|xu|eQBZB|NsF+@) zx05xVHp#@;omQ*$v|MnLmZXnpT#jbOB0-&4qV-V6zsc6(-!9#hh5y_d@WWI$IuOoGw7Up4ov7YGJnMSNT_qwcSBESpu zc4uv8;nai5_*~k#Je{&hvWL%UnM{VxEwroI^>ipW=iPN}-B;R%Sg$DZk9%E~Mg;sz zg4JJIarorjJq^>U>>am!n~aTuGj@)x)*Qcz?af?G5yv{APkE~ zs?j28|u4Sb3%JuUJkVgsPB||XIVQ!_(ul1b6 zIb3IJ>&p3{dt_w1ONPtEfGB30HO;({LTdH8%u8%70nGuUB)N~6sT+6rq?w4=Om9ae zQx^wV^vsGim&fu(u(fpgeJ-m=sWvU4Mi5S8#?t5JIBL$C>F)k8QCUYEOjqh89tvYj zL-y$v-##^^vixf*Dk4(9MnC>*DyU0%h%f$T>Hpr9v*yDi4OvM+<83k@j|#g)*GU|1 zlP+J9w1DtKGRW@9wipsgChA0!^oX&apLzmgFEAN9eg^ zLiRFUr_*cQf%_7wV+7%8vYyTqUBB_O@$#>V-?`0Y{h`y{y($-%QRFhxkd+iH?n^Ey zE!nlC2lP(na9%JY_(lZtx)@d7v)0^!-1@HcVAc0 zWIl$TIKR+#2AW6pns+l8*mVqkj_Z4~_wb_tNzm*!1*CSsgsN=i#Ku9K0Z6Eb4w&}M&~r#&emx~4;( ztbp3raBvacUm}r6QUoc*!rf7X8rCzIxH%N!zpn3?myx{hsYDpwa~w6(OsKp9JLYK~ zj)}zpe`SoFE@xu$iNbsj! zk`Td6y3;A0PHS~ttN+O)>M2Obh^-bg*xJwFYgVqqJJTmou7X86%O|XVrooU!Q!cvB zA>s|$mO+v^ye_jDL0^C;0SDfa4tex2$8qU+BP%)zd3aqI*d|qljkLdsqq-&72b&E= zN}nOLIkYO=r$VS)g}y#@=kg6`2$_rkm?e~wo>l)!?oo6JR*H*d~O9~F3%X}&su^!zga#&o~ z*8Nbna}^pwp><@7E(BC|68VCZNYbGGOVwBsEo3T%3Mk$BrvF9%mub$-I0PJ5C2_Vy zB9Uw(9EL{?3iOadBL);Tr9R`pJ8bU2&1n`b?bNpU7i)|r`x#lWR@;F5pb~n9*G(VG zv1q5Tf?*{b3T;wVwV3up1{Ovhj?CO}R9JXZpMi}s6q(Ri%2hsrF+4|O6A1;*X`V5o zxMHl)Suq;wlh66N9qXwdTtG%_(*3~h?tZD$X+4t+(FY)rv^?J-RwZ3*RNzc9Xj^*Q z0@vr8tA8qC)VVwkvsiYf$Kx^>4#Avs$&^ZbPK%p)e_Wy^I`lW`wWR2s1#sSrNb-rBt+RTT=C;7&))*$Puc zZqkytC&XqHeY0PWWFuD4=`aiT@t^BDiNl@of;{C85hJ!fx*uH&g4-5_Fl6xEp+QbI zIOuo+DF#qg6aJp0AuA~uqHZ5zM6)z*;T?Ij&fWb`s%1(P6@%RjjF~iK)eY-HZ)dPQ zi9|925VMobj2&OmWVVxnb3F{bmhkQM>#(ZOQcUo^jaD?3iaetG3^=?ZtcK0G^t{P6 z#H^yvWqp)(Pfbe$2%jf%ni%MAsjj}XwA^qIy`7u_N&dNRH zkhq&M8L#}3+SabyQYl-$;cc=^MFp?dc^cizxaJ7v*+zxXd*sC6P!*7SY+9 zxpN#f515e62gDNweEelF+;{pc|NOPtk}q8d?;4NOd@)1zALyS-oVR`*IA{603+``C zHEI|-n35(#mP5h;9mR9fu%W3>YqUI&1iAq=NCw9Wq{+p?t#du!kYuglWJRd~nl?s_cS^5hGv<^&!b z*JS<#5%x-b?fmg%&bGI7FY!7pS0Q2|!6Dy=5d7BG?tjsifmACZNAVm-&9NqA{{+Mz zXg!Z}xSovI?sUqQ>xjUcCRX$y=#K*ZZBT{0nT_2F{pNSl^_B%g7H>-?-IFwAB?U)h zeTdU?nu7Q+#0iPdfxr63dfhG~86gzLyNpUCP(Uj3(#3#($ooFc`v5C>!e)9{e3@+_ z@{#l?w318{ote|5(@|{20MboX>v5w;!ySMSKL`&QG<9u(KiXPH zc23i^OO}0Aam3`SY4;j>jn{l4hb!|j(lc^?FFk0l%V?vVuMDbqbuv{*Lsn9d)U|d! z*XgvL5hrrrx8YFuBEP>Um`T~RB5s5}msO;pI3|tFtc5UE**oq}IP|$hJEY0HNXo%U z*_I<8p=%-Qf!HLeL#%_$whWToCZwv1j0#JoAsbeC_;SC$JLzZsqD70sa~rFx4FXW`dJpmfyd&dFs?(kzpog3a^CW2FN+QwQ}?78MzSnGTTJg?9cZ! zOuLJjN<|9KT8JOY=)Wu50$q@Yg8;SeuD5(H%QE^C_smd}-+-!~+0fRVl+m9KLw3t% zfC*`+H*Y8c7)L$*oovf7(h)PW9+!C<1GWfuylHb4)JyBzd)~{2Y}( z$gsM=*5-dBE%i$z5{X2TAR;fS&t(DDNQ!w zxg-_XTLO2{gK!q@whlZ_SJCh3v%9k-mUg)M6rgfdN~;9^Dm~D>y-Pm4rO={;N+c4A zq@WPdi<2>A*V038p&C?ML_o+?3AGhrq%zaQ>9BodYN2D?8w&R|=HmKqu~wV()I&=~ z75f44?5)R1H~5_hG?`7=a+ydZ==$ozp-B11P=PpAP^+nr{VyA`r3?Df}N&XWGsmF1|m;vLE z<2RX-CzFIiyhkzM6Yr-4j@A{v6DrX_2=N?DCG0bsY zurIXw<&_&&inXhmma(p_`)-fJdRd1=O~6i?mXS<{i!onhjZ-yK5e8=A}`Vf+4yVBCl>{ zg^pPB(a|(xYU7**%knLVL2ax5FWHts5|8kC9F(~02}oVeXtc^gf-YLksUzw;AMCTO zS$ncl-kY( zt7x+-+j8U+;x{K_wz1P;{=9b`c(O5oBI)P<0S6-x>-<_8KmY&$07*qoM6N<$f=?$% A4gdfE literal 0 HcmV?d00001 diff --git a/logo.png b/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..8e0ca4211972df40f450e1ba6b6f64b0d3656617 GIT binary patch literal 27399 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∋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 KMNUMnLSTYaME?5# literal 0 HcmV?d00001 diff --git a/setup_firewall.bat b/setup_firewall.bat new file mode 100644 index 0000000..944737f --- /dev/null +++ b/setup_firewall.bat @@ -0,0 +1,52 @@ +@echo off +:: Check for permissions +>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system" + +:: If error flag set, we do not have admin. +if '%errorlevel%' NEQ '0' ( + echo Requesting administrative privileges... + goto UACPrompt +) else ( goto gotAdmin ) + +:UACPrompt + echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs" + echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs" + + "%temp%\getadmin.vbs" + exit /B + +:gotAdmin + if exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" ) + pushd "%CD%" + CD /D "%~dp0" + +echo ======================================================== +echo Adding Firewall Rule for Django Dev Server & WeChat Debug (Ports 8000-9000) +echo ======================================================== + +netsh advfirewall firewall show rule name="DjangoDevServer" >nul +if %errorlevel% equ 0 ( + echo Rule "DjangoDevServer" already exists. Deleting old rule... + netsh advfirewall firewall delete rule name="DjangoDevServer" +) + +:: Add rule for TCP ports 8000-9000, allowing connection from any profile (Domain, Private, Public) +netsh advfirewall firewall add rule name="DjangoDevServer" dir=in action=allow protocol=TCP localport=8000-9000 profile=any +if %errorlevel% equ 0 ( + echo [SUCCESS] Firewall rule added successfully. Ports 8000-9000 are now open on ALL network profiles. +) else ( + echo [ERROR] Failed to add firewall rule. +) + +echo. +echo ======================================================== +echo Network Configuration Info: +echo ======================================================== +ipconfig | findstr "IPv4" +echo. +echo IMPORTANT: +echo 1. Ensure your phone is connected to the SAME Wi-Fi as this computer. +echo 2. Do NOT use mobile data (4G/5G). +echo 3. If you have 3rd party antivirus (360, McAfee, etc.), you may need to manually allow port 8000. +echo. +pause diff --git a/wechat-mini-program/app.js b/wechat-mini-program/app.js new file mode 100644 index 0000000..479d82c --- /dev/null +++ b/wechat-mini-program/app.js @@ -0,0 +1,84 @@ +const env = require('./config/env') + +App({ + onLaunch() { + console.log('App Launch') + this.login(); + }, + globalData: { + userInfo: null, + baseUrl: env.baseUrl, + token: null + }, + login() { + wx.login({ + success: res => { + if (res.code) { + // 发送 res.code 到后台换取 openId, sessionKey, unionId + wx.request({ + url: `${this.globalData.baseUrl}/auth/login/`, + method: 'POST', + data: { + code: res.code + }, + success: (response) => { + // FitJSONRenderer wraps response in { code, data, msg } + const resBody = response.data; + if (response.statusCode === 200 && resBody.code >= 200 && resBody.code < 300) { + // Handle wrapped data + const payload = resBody.data || resBody; + const { token, user, is_new_user } = payload; + + if (!token || !user) { + console.error('Login response missing token or user', payload); + return; + } + + this.globalData.token = token; + this.globalData.userInfo = user; + + // Logic: + // 1. If it's a new user (is_new_user=True), go to Login Page to authorize. + // 2. If it's an existing user (is_new_user=False), stay at Home (or redirect there if not). + // Note: We ignore whether they have phone/nickname if they are existing users, per user request "direct login". + + if (is_new_user) { + wx.reLaunch({ + url: '/pages/login/login' + }) + } else { + // If we are currently on login page, go to home + // But onLaunch happens early. Usually we just don't redirect TO login. + // However, if the entry page WAS login (e.g. from share), we might want to go home. + // Or if the entry page is Home, we just stay there. + // Since we can't easily know "current page" in onLaunch without complex logic, + // and default entry is usually Home (pages/index/index), we just do nothing. + // BUT, if the app was configured to start at Login page in json, we might need to redirect. + // Let's assume default is index. + + // If we are explicitly on login page (re-launched or shared), we should leave. + const pages = getCurrentPages() + if (pages.length > 0) { + const route = pages[pages.length - 1].route + if (route.includes('pages/login/login')) { + wx.switchTab({ url: '/pages/index/index' }) + } + } + } + + // 如果有页面需要监听登录状态,可以在这里触发回调 + if (this.loginCallback) { + this.loginCallback(user); + } + } else { + console.log('登录失败!', resBody.msg || response.errMsg) + } + } + }) + } else { + console.log('登录失败!' + res.errMsg) + } + } + }) + } +}) diff --git a/wechat-mini-program/app.json b/wechat-mini-program/app.json new file mode 100644 index 0000000..5d46d4c --- /dev/null +++ b/wechat-mini-program/app.json @@ -0,0 +1,43 @@ +{ + "pages": [ + "pages/index/index", + "pages/course/course", + "pages/profile/profile", + "pages/coupon/coupon", + "pages/detail/detail", + "pages/login/login" + ], + "window": { + "backgroundTextStyle": "light", + "navigationBarBackgroundColor": "#fff", + "navigationBarTitleText": "Edu App", + "navigationBarTextStyle": "black" + }, + "style": "v2", + "sitemapLocation": "sitemap.json", + "tabBar": { + "color": "#999999", + "selectedColor": "#ff9900", + "backgroundColor": "#ffffff", + "list": [ + { + "pagePath": "pages/index/index", + "text": "首页", + "iconPath": "assets/tabbar/home.png", + "selectedIconPath": "assets/tabbar/home-active.png" + }, + { + "pagePath": "pages/course/course", + "text": "项目&活动", + "iconPath": "assets/tabbar/project.png", + "selectedIconPath": "assets/tabbar/project-active.png" + }, + { + "pagePath": "pages/profile/profile", + "text": "我的", + "iconPath": "assets/tabbar/user.png", + "selectedIconPath": "assets/tabbar/user-active.png" + } + ] + } +} diff --git a/wechat-mini-program/app.wxss b/wechat-mini-program/app.wxss new file mode 100644 index 0000000..3d1b8dc --- /dev/null +++ b/wechat-mini-program/app.wxss @@ -0,0 +1,45 @@ +/**app.wxss**/ +page { + /* Theme Colors */ + --primary-color: #ff9900; + --secondary-color: #f5a623; + --primary-gradient-start: #ff9900; + --primary-gradient-end: #f5a623; + --primary-light: #fff7e6; /* Light background for primary color */ + + /* Background Colors */ + --background-color: #f9fafb; + --surface-color: #ffffff; + --surface-hover: #f9fafb; + --surface-secondary: #f3f4f6; + + /* Text Colors */ + --text-main: #1f2937; + --text-secondary: #6b7280; + --text-light: #9ca3af; + --text-white: #ffffff; + + /* Border Colors */ + --border-color: #f3f4f6; + + /* Status Colors */ + --warning-color: #d97706; + --warning-bg: #fef3c7; + --success-color: #059669; + --success-bg: #ecfdf5; + --info-color: #2563eb; + --info-bg: #dbeafe; + --price-color: #e54d42; + + /* Variables usage */ + background-color: var(--background-color); + color: var(--text-main); +} + +.container { + height: 100%; + display: flex; + flex-direction: column; + box-sizing: border-box; +} + diff --git a/wechat-mini-program/assets/empty-honor.png b/wechat-mini-program/assets/empty-honor.png new file mode 100644 index 0000000000000000000000000000000000000000..c8bea93cff44a23fcc23e4d9da4d9b9f3ca48e1e GIT binary patch literal 2210 zcmeHJ+gs8J0!2(QCol8mWO*fZHrr;#$s7?B!E8kv%`_b^i8St{r6Q=PID)^ZZME4Z z+3BL6fz&!KYXzjHgbL1=rmluqjM4-`rin^Gz#@tl*53AU|A2Wo=RBOZ^Kj0&a`FVm z#o5al1OmAv#2-uD*3l1ea@=N4Cbwl%kWT$a|JwT|)(|XA6p{-krgLT?e142RASO;e5R6 zfEtCc=Gv_)mm9w2fhOT2PCHJban?gIM5xvj|Lk1-TI$2ybS34 z0`0Q*HKj&I`cx7!1DUpbOnXdZxQkv^}86g1Y0cO`x>Kcd6Ewk zHIzUP_>y;AoX~sKbGW|1ACE#8HzsITlM~Z;m6o}v4~|cLQm!zYx=JE1qm|UvRD3Z$ zqev5SPt0LjpRDyecG`4*?(Ps^ku{u@%|$1U5;Wm82R=@Ls>0pD77Cqf8#0z4VNZ)1?BTCQ06(Fq8DS6Z>(-f-s-EL_~qp|abwoFwF)4#A~MrLY=SQextN zTz(Cu8{^;DrfgE-aFxwW;^_PIpRm?##;#8Zk^Xo}S`&luF4FlX#u!T1g&Qhb`BxhL zk~{ryWa_fZ5MWw5x@M2Wdih1kyW^{|N8oGauVHO;r+J1$o@gpEn7&}7a9;F0 zF#0I$=Yx`O+q7uPw>fbvzkn|k*~Pv;vv&@;rHo{skRNyL$QdwBe@_hz}XVvM+00Cn;|WQ(x)04g9)g!*0bGa#{XgqJueRQAkkeg`lqn<|N3v4hBM{X(5 zc$Xqjo(5wg9@xu;@0$ zOpOd7ycFCxv+_`?l5HyFckyt@c4_>0;c1)P{P9$>MXe@G@ySy8kVpeNCultr1hzxO k9{qjP{_h>{wAlf(XO4fF32)p!9iW6iojArldgkJP0VqG@vH$=8 literal 0 HcmV?d00001 diff --git a/wechat-mini-program/assets/icons/coupon-icon.png b/wechat-mini-program/assets/icons/coupon-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..a5e978a188d9edb11aeb10862cc4174d1505c351 GIT binary patch literal 228 zcmeAS@N?(olHy`uVBq!ia0vp^fgsGm1|(PYdzk^L)t)YnAr*7pUU1}XabRFM$ja~G zAh|1`jm4#*eRti)(EpxlwjkvUK8Zim_sD-YwtHf=eSX!Nzf*s9NC+4zBsm;u=wK9N lR$_DEp_PCj(E0|$cJZ(CSTZ~x+ew0)vd$@?2>|^LJ|O@A literal 0 HcmV?d00001 diff --git a/wechat-mini-program/assets/icons/profile-icon.png b/wechat-mini-program/assets/icons/profile-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..6de588b3e30cb3d321529bd1b3ebff5b49aecafd GIT binary patch literal 357 zcmeAS@N?(olHy`uVBq!ia0vp^fgsGm1|(PYdzmpXFzR@^IEGZrd3*ErS|&pt*NZB) z0ZrPA^|ZV>gIPij+%NodB5r?phD~(e4z6UNE)WQxp{!VKf4{!|_WbZ≫M5%uGI) z_0i~9%v5GAyLh`rolGw6Jlz?O#QS+9>*iQ%$s?GtKT0)Y)3 zOfDh{ix>p8-R_**t|z$NDkte`$L-AMMeoFJx-^Cf>b_t~DyzL%`ypffy4gwW^S4^b zn_7Q4qb#WV;nlw*o9`+|HN`*PlOA!GdEShrSNB^4UgM2^VS9O(>VoGvGS7Pibw7$# zo!ybg{lZZDcw|GzOr@xWi`UGX>3c@#B3ItRqB1j}6C{8Q3%6~9EnO-P<%wo+Zkcg+NpUXO@geCyn{)u=1 literal 0 HcmV?d00001 diff --git a/wechat-mini-program/assets/logo.png b/wechat-mini-program/assets/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..6e77f881f5a581c6f2f6c4eb5b8eef6e530f5d46 GIT binary patch literal 22255 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∋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 O0000vd$@?2>|^LJ|O@A literal 0 HcmV?d00001 diff --git a/wechat-mini-program/assets/tabbar/coupon.png b/wechat-mini-program/assets/tabbar/coupon.png new file mode 100644 index 0000000000000000000000000000000000000000..e872b16e92d6fdc8947a6fb3a5a6b51edbebe398 GIT binary patch literal 243 zcmeAS@N?(olHy`uVBq!ia0vp^fgsGm1|(PYdzk^LU7jwEAr*7p-aN>8*g$~6QFTf9 z)g@Vvg_ynx^_YGZpYhbe%^akhA?IP~(+^Rvt>seARjxX|`~Q@`9TEbD3P}z}4y50C zG41#CU+WL4u(|NSL>oF71(}u51m6GB*e$os>+ey7$^)lN5`-`mq6=tWZt#Q|?E-Sn aF*&}zOF}Gl3s3z7aXnrAT-G@yGywoe%upr( literal 0 HcmV?d00001 diff --git a/wechat-mini-program/assets/tabbar/home-active.png b/wechat-mini-program/assets/tabbar/home-active.png new file mode 100644 index 0000000000000000000000000000000000000000..df27fb5293573ec5ab6cf1f3b758ed131e1ac773 GIT binary patch literal 774 zcmV+h1Nr=kP)}b#Q5c4w*1t;qLr_pu#KA!w)Lldbktz-a2N&xk zI5`$|sH2NRL6h^vmO^#V3L>bJAP9meh=UGxC^{6eiXtc-toq7Lo1|%)nx^@=Nxu)? zA;Y=(o(JwZ_nhQ{SA9wYv?*{godMcdOr`5=mGMG`(h0m)f*mY|l5t4JSQb7f;j02i zY1WcxQJ`DKp91)tgugPbsE1aXsnp9F1@09EFU%v|U_H%HO0ieQ$UNXP8HvUgT+i4h z!-^(J2XQGGT{6bYfX^fv+m(0CB)g_=m11Kq)sJ|p)XNGPy$b-JIX4XIDl41Trihie0$jt08xKf;{33OEIVQKntwf^8UV;W*P)hs30DC0>CV2kCM`q*3@ z_!I|Ze2f9)+zEWH_&lJ%SsB0T4p(|6(mPMlvM}&#tdem%20-QJzKpfy!Kc_M<4p`8 z7MgcTv3q{-#t9kUW6*r1@%9Jn)m#y_sWTNxLkZKeVrV$g796ERJ) zb*F!aFpd?U44YIyiHjgEKrR3mpn5m#0&oFx0k{CU02*Gvx#;gNWhENh@B#vzC4X^Y zADu41T!37Fxd6EUa{+Pz<^tpb%mv5=m \ No newline at end of file diff --git a/wechat-mini-program/assets/tabbar/home.png b/wechat-mini-program/assets/tabbar/home.png new file mode 100644 index 0000000000000000000000000000000000000000..e489c9b407e6c9897284c37362d5196319b7026f GIT binary patch literal 932 zcmV;V16%xwP)a)Qc$M3j`k*5k07Q z^5VghNLAS0^jb)F{{PvO9PB|OJ`nXHRwyDKq!%BEC{!v+RnV#ts@9d!jf_h|ldPLf zw)2M%0`tv$^ZhoNZ)USAgjF)i<#Lk&oCM(L&tfd8v$Jyn$@?Vz!1|O@i^NzE$xS2& zjpU2=9>8{yR{6f)0^l^skz&#Sy0sY)MzoLi6=_mON5?b(myJZf12|D^2XF+yu+e_Q zb={dF4U$r>B>CJ(?iI;(VLt$C0Q4JvFG;Qy%`B1!NfwNx?s%Rzx17Ij(>{iOK}vbZ z^wHl8l6%XU=XuLS(sCSU0?D(XMNVttXnphf{CM3Lz)!PpKA)eY+da=)U19+>?UYDT zQp))x?->*NtglS9INnRlyibMba*cU8t#lUy7+3dWyy|=U+VW4OR(zZ)f!%hlv0~T z%q#GBrWM43QQizZR{JObcTMdy+HpOaX-dDo`iB`&T~8JsRV%AQDF*PTPM zC$!bPDVkh5hfta9(YgNPq?B3(V4%dN;*w}`=^RQNq6YMxDq%R8CFHtsq)iim!63IH zgbRP2lu|nZJR;c^+`a8j8vvbCP%7JkTz8c1lvV&0cY*}~3xE~?EdW{oj08Z}T>!VD zm>#2<0Tf306QdF45#TpID=PAe;synX?;SW@3&1}*^r0000 \ No newline at end of file diff --git a/wechat-mini-program/assets/tabbar/project-active.png b/wechat-mini-program/assets/tabbar/project-active.png new file mode 100644 index 0000000000000000000000000000000000000000..aa99cf8679f3ca7448e5a410671de780f174c14f GIT binary patch literal 1113 zcmV-f1g86mP)aAj>g&fLgO!0w`RJh zXKv4(en0LH2WGlYojU)2>v8Hh86{k*Cpm>a!S}5)mxWx6<1GmxW8WH{_&+iZYL-(o6RL8Kj4R{Q^6SSz8HZ#{ z%CKlv8Lu~3weEZGdq|E)V~hzUToGbt2<~%|@p#NJpAg1AFTjbM4gOP^8UPJyG4A13)&*c18jAtciFd5PMfRZ_GjadkuQInQ;p$K=`*eTCoa@0<;aSE`YDPre$2Ggl+T*L9B%9V=l*g zBY?49V%@4Se34Y)5*fQy<{BBdD&d|`+0|@+wAyFh$NQ#jc85`rR+sCW_9xb@=F<@Y z>Y?X3SH|90OdXcv13A9!T1A-FA79AvTI_SL&w)-u%|<|~^aC=!>ieQsvoGbiKhMZ) zUjPe7(|iYxUYg_Y#&bbe1Xw&l<~>C9hWs%(ZlqICjx|8jY*v}u#q4FmM(A$-+v?HV;OJ8+TuAG z2V~q4c7|Ebpqo$&0*n+?2tXl#3IQkt&^QX9gl+N0HGLs6&1S|0a$GCp_hkh~!i9`F zWSlO?ZyBZLryV871$x2^sje$-d~X7InrXzEa) fK!E}U7<&8<1q*E*glmOa00000NkvXXu0mjf0G1Di literal 0 HcmV?d00001 diff --git a/wechat-mini-program/assets/tabbar/project-active.svg b/wechat-mini-program/assets/tabbar/project-active.svg new file mode 100644 index 0000000..54fee9e --- /dev/null +++ b/wechat-mini-program/assets/tabbar/project-active.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/wechat-mini-program/assets/tabbar/project.png b/wechat-mini-program/assets/tabbar/project.png new file mode 100644 index 0000000000000000000000000000000000000000..1b26e15e002e9aacc1f160e03cdc7f03a87af49b GIT binary patch literal 1172 zcmV;F1Z(?=P)8){el{*f6oQB# zh-hL65rlw@5)lz5@UVGx&Z`+m!DwiiO%fL>xCjYxku1z=HcAvVQOV%M-y$X>r{^{l zkM7w0`ZxXh9VqDcy6WD0PJQ03D(5Oxs8FFog$fl$fR&Y%i`*oF`(e4A1T!2-lfAq4wCd@P0F0Emx;5F7&WH7P`rB$rtbLnGde5Qa+6d{r^AU+Twk})LS7a@`o5HBnQ$<3`cDI{N+pP#?HTgSCp?aDMwZ_Bdm zVE|9t=kj%u?^tO7z(*wOD)zgHW<9mpCL6LPo3h<)JmMfOZ8lw-CBSk{p*@`vS5N?6 zCix-BV*vhavCZvkF(1d|Q@#~L7eegG+56oAc$?(8+#g?%+|TR8F~Vyz0$8}Sw+ zU_sAmn%-icu7Afs04;9&vn;!(7o#U)0di}^!WtG}p-_)^Du56|xVN1E)6>%z*J`yJ zLI`(x?;p>y>^T5CmDm8-9VI)B1c>BkR+`VvBx$#`*(n<&ACpblmXCG-?XF+I{|F$YX?mTunI!k+x6{KY=5wE7P%M2T->Cq3%+1YRYr}sEz*dsG zNWM?Gmr|H>sDKX~tNb!7+1s{x#jGOd52-$z{8;k|z{BK)Fu zV5cc@Tiqlfgs?t3;P`qJ_kJS>$tfK(_2rUb mT;VTp-(I0Yg$fm1Iq)Cvj`MmF9a1y^0000 \ No newline at end of file diff --git a/wechat-mini-program/assets/tabbar/user-active.png b/wechat-mini-program/assets/tabbar/user-active.png new file mode 100644 index 0000000000000000000000000000000000000000..29534f89496a9830ba2e279635889c7daedcbfe6 GIT binary patch literal 769 zcmV+c1OEJpP)e5|u85g>WM}=bel0Z&+B^V4*7u7Lt-i(u9bx@Kv7`DUVEhn+R=X?wz^jOy`$8 zf57w1JLf&;JqHR33JMAui#nMuW4Vki3h7YDE*V=D(n`)vZ&TdylKDsjWE~kTQ#*jm z%uO+XetbZV&nX3P3m=d%kWv6;d_a!dDFtujDJ_B}vW_aus!ns#2;e+EAjgB00@#TU$Z+V>KN4C1-zuOD-%xVhAp5KTc*t=)fv-QT67%p8m04Ns-&11)G#+x?tt)_# z4tz!d8|tWnK6Nq!-;v`&4d%bdSVta^m?p=wm;rQ=C**h%Gk{~{2^sw{+uu?0gp8*# zE8rw~LdNTu6>yfkpwSsY+_wT($qO=$#BPJ5cMD7L9YwFeYM&52)+LtUBQh4t(Nm-G z-}OcTdsLwbA5chZG`maTdTbzSjp|_mnY$#xJr+#;NMpPzKZ|qrD+P$k?4B<9}B~H_Os7UZF`wkO7mE%ke&Xrk8vG zE|Hejs1Sw}vOYQU#=iekZ(!=K&n7Z \ No newline at end of file diff --git a/wechat-mini-program/assets/tabbar/user.png b/wechat-mini-program/assets/tabbar/user.png new file mode 100644 index 0000000000000000000000000000000000000000..a112c7111ae41f2c4b73df7471b550b2381a70b7 GIT binary patch literal 1312 zcmV+*1>gFKP)<6eVgx6pe;}i4id-(Uvn^7mm#k z`cB`;)NT5M3r*AYch$M4s!p9cA_E2t7_bAW)oQyr=Vp_UIYFC&}N(F~Yw99vB@R-BZen_kJdT zpUuEFlU(e*pXZ!AiR3QXZ}qeH{xp&c0c@~s0KA}DQYJ_qO!5~qkj464mu*i8o?*RW zv-kcsDGMZDH||`?+rD0}??-YD0Fd00O$(CONbHb2+YEkbuXTm~XV> z42-<@ml+Q@uSjh@EM?ld)<}#v=VloLTvwzv$wfwc4~Y@y+>s^-T2Q1m$=8DRdWn@Z zO{beUJ}FY0c2cmk`tsX09YCfu(F8! zf^+T?DH9~`H`CzE9s{7Q&1Q2SDH9_jBZmRl76z~+Z+lI90rrk#3j2(2p0n0_f2|(0Bxbz#N0F>%Z#^rN0Ps*=EzKhUSkZB`{!-(LX0y4w#6qP~nWmwt z#_RTtXD7kDA+RM)(_Qr*Ad4o=vtE-VNs=5bQ$@8}ouTC_09JQ&ZfySsaFZ>C>jjMl zHQnA(LO14JT98##`n~Ichnw299i17g1JoiZnIyDuQrD6!QtWt^O}ZffoI~>a4mV$| z5gy3{WCud>43drP$ZY!atS-Wnb*R~D{!DXq_e^z;PV)}B<75{y+1-JjK_;a*f$hS@ zg}OjVL} \ No newline at end of file diff --git a/wechat-mini-program/components/mp-html/.eslintignore b/wechat-mini-program/components/mp-html/.eslintignore new file mode 100644 index 0000000..121531a --- /dev/null +++ b/wechat-mini-program/components/mp-html/.eslintignore @@ -0,0 +1 @@ +*.min.js diff --git a/wechat-mini-program/components/mp-html/.eslintrc.json b/wechat-mini-program/components/mp-html/.eslintrc.json new file mode 100644 index 0000000..afc078a --- /dev/null +++ b/wechat-mini-program/components/mp-html/.eslintrc.json @@ -0,0 +1,30 @@ +{ + "env": { + "browser": true, + "es6": true, + "node": true + }, + "extends": [ + "eslint:recommended", + "plugin:vue/essential" + ], + "globals": { + "Component": "readonly", + "wx": "readonly", + "qq": "readonly", + "swan": "readonly", + "my": "readonly", + "tt": "readonly", + "uni": "readonly", + "plus": "readonly", + "weex": "readonly", + "requirePlugin": "readonly" + }, + "rules": { + "semi": [ + "error", + "never" + ], + "no-console": "error" + } +} \ No newline at end of file diff --git a/wechat-mini-program/components/mp-html/.github/ISSUE_TEMPLATE/bug.md b/wechat-mini-program/components/mp-html/.github/ISSUE_TEMPLATE/bug.md new file mode 100644 index 0000000..f9beec5 --- /dev/null +++ b/wechat-mini-program/components/mp-html/.github/ISSUE_TEMPLATE/bug.md @@ -0,0 +1,23 @@ +--- +name: 提交 Bug +about: 如果发现某部分功能表现与文档描述不符或出错,请选择此模板反馈 +title: '' +labels: '' +assignees: '' + +--- + + + +## 使用环境 + + +## 问题描述 + + +## 复现方式 + diff --git a/wechat-mini-program/components/mp-html/.github/ISSUE_TEMPLATE/enhancement.md b/wechat-mini-program/components/mp-html/.github/ISSUE_TEMPLATE/enhancement.md new file mode 100644 index 0000000..08eecbb --- /dev/null +++ b/wechat-mini-program/components/mp-html/.github/ISSUE_TEMPLATE/enhancement.md @@ -0,0 +1,14 @@ +--- +name: 新功能需求 +about: 如果需要某些新功能或有改进建议,请选择此模板反馈 +title: '' +labels: '' +assignees: '' + +--- + + + +## 新功能描述 + +## 应用场景 diff --git a/wechat-mini-program/components/mp-html/.github/ISSUE_TEMPLATE/question.md b/wechat-mini-program/components/mp-html/.github/ISSUE_TEMPLATE/question.md new file mode 100644 index 0000000..7ebcd80 --- /dev/null +++ b/wechat-mini-program/components/mp-html/.github/ISSUE_TEMPLATE/question.md @@ -0,0 +1,12 @@ +--- +name: 咨询问题 +about: 如果找不到文档对某功能的描述或描述不清,请选择此模板咨询 +title: '' +labels: '' +assignees: '' + +--- + + + +## 问题描述 diff --git a/wechat-mini-program/components/mp-html/.stylelintrc.json b/wechat-mini-program/components/mp-html/.stylelintrc.json new file mode 100644 index 0000000..cb68cc1 --- /dev/null +++ b/wechat-mini-program/components/mp-html/.stylelintrc.json @@ -0,0 +1,6 @@ +{ + "extends": [ + "stylelint-config-standard", + "stylelint-config-recess-order" + ] +} \ No newline at end of file diff --git a/wechat-mini-program/components/mp-html/LICENSE b/wechat-mini-program/components/mp-html/LICENSE new file mode 100644 index 0000000..523073c --- /dev/null +++ b/wechat-mini-program/components/mp-html/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2019-present Jin Yufeng + +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. diff --git a/wechat-mini-program/components/mp-html/README.md b/wechat-mini-program/components/mp-html/README.md new file mode 100644 index 0000000..b6081ab --- /dev/null +++ b/wechat-mini-program/components/mp-html/README.md @@ -0,0 +1,236 @@ +# mp-html + +> 一个强大的小程序富文本组件 + +![star](https://img.shields.io/github/stars/jin-yufeng/mp-html) +![forks](https://img.shields.io/github/forks/jin-yufeng/mp-html) +[![npm](https://img.shields.io/npm/v/mp-html)](https://www.npmjs.com/package/mp-html) +![downloads](https://img.shields.io/npm/dt/mp-html) +[![Coverage Status](https://coveralls.io/repos/github/jin-yufeng/mp-html/badge.svg?branch=master)](https://coveralls.io/github/jin-yufeng/mp-html?branch=master) +![license](https://img.shields.io/github/license/jin-yufeng/mp-html) +[![JavaScript Style Guide](https://img.shields.io/badge/code_style-standard-brightgreen.svg)](https://standardjs.com) + +## 功能介绍 +- 支持在多个主流的小程序平台和 `uni-app` 中使用 +- 支持丰富的标签(包括 `table`、`video`、`svg` 等) +- 支持丰富的事件效果(自动预览图片、链接处理等) +- 支持设置占位图(加载中、出错时、预览时) +- 支持锚点跳转、长按复制等丰富功能 +- 支持大部分 *html* 实体 +- 丰富的插件(关键词搜索、内容编辑、`latex` 公式等) +- 效率高、容错性强且轻量化(`≈25KB`,`9KB gzipped`) + +查看 [功能介绍](https://jin-yufeng.github.io/mp-html/#/overview/feature) 了解更多 + +## 使用方法 +### 原生平台 +- `npm` 方式 + 1. 在项目目录下安装组件包 + + ```bash + npm install mp-html + ``` + 2. 开发者工具中勾选 `使用 npm 模块`(若没有此选项则不需要)并点击 `工具 - 构建 npm` + 3. 在需要使用页面的 `json` 文件中添加 + + ```json + { + "usingComponents": { + "mp-html": "mp-html" + } + } + ``` + 4. 在需要使用页面的 `wxml` 文件中添加 + + ```html + + ``` + 5. 在需要使用页面的 `js` 文件中添加 + + ```javascript + Page({ + onLoad () { + this.setData({ + html: '
Hello World!
' + }) + } + }) + ``` +- 源码方式 + 1. 将源码中对应平台的代码包(`dist/platform`)拷贝到 `components` 目录下,更名为 `mp-html` + 2. 在需要使用页面的 `json` 文件中添加 + + ```json + { + "usingComponents": { + "mp-html": "/components/mp-html/index" + } + } + ``` + + 后续步骤同上 + +查看 [快速开始](https://jin-yufeng.github.io/mp-html/#/overview/quickstart) 了解更多 + +### uni-app +- 源码方式 + 1. 将源码中 `dist/uni-app` 内的内容拷贝到项目根目录下 + 可以直接通过 [插件市场](https://ext.dcloud.net.cn/plugin?id=805) 引入 + 2. 在需要使用页面的 `vue` 文件中添加 + + ```vue + + + ``` +- `npm` 方式 + 1. 在项目目录下安装组件包 + + ```bash + npm install mp-html + ``` + 2. 在需要使用页面的 `vue` 文件中添加 + + ```vue + + + ``` + + 使用 `cli` 方式运行的项目,通过 `npm` 方式引入时,需要在 `vue.config.js` 中配置 `transpileDependencies`,详情可见 [#330](https://github.com/jin-yufeng/mp-html/issues/330#issuecomment-913617687) + 如果在 `nvue` 中使用还要将 `dist/uni-app/static` 目录下的内容拷贝到项目的 `static` 目录下,否则无法运行 + +查看 [快速开始](https://jin-yufeng.github.io/mp-html/#/overview/quickstart) 了解更多 + +## 组件属性 + +| 属性 | 类型 | 默认值 | 说明 | +|:---:|:---:|:---:|---| +| container-style | String | | 容器的样式([2.1.0+](https://jin-yufeng.github.io/mp-html/#/changelog/changelog#v210)) | +| content | String | | 用于渲染的 html 字符串 | +| copy-link | Boolean | true | 是否允许外部链接被点击时自动复制 | +| domain | String | | 主域名(用于链接拼接) | +| error-img | String | | 图片出错时的占位图链接 | +| lazy-load | Boolean | false | 是否开启图片懒加载 | +| loading-img | String | | 图片加载过程中的占位图链接 | +| pause-video | Boolean | true | 是否在播放一个视频时自动暂停其他视频 | +| preview-img | Boolean | true | 是否允许图片被点击时自动预览 | +| scroll-table | Boolean | false | 是否给每个表格添加一个滚动层使其能单独横向滚动 | +| selectable | Boolean | false | 是否开启文本长按复制 | +| set-title | Boolean | true | 是否将 title 标签的内容设置到页面标题 | +| show-img-menu | Boolean | true | 是否允许图片被长按时显示菜单 | +| tag-style | Object | | 设置标签的默认样式 | +| use-anchor | Boolean | false | 是否使用锚点链接 | + +查看 [属性](https://jin-yufeng.github.io/mp-html/#/basic/prop) 了解更多 + +## 组件事件 + +| 名称 | 触发时机 | +|:---:|---| +| load | dom 树加载完毕时 | +| ready | 图片加载完毕时 | +| error | 发生渲染错误时 | +| imgtap | 图片被点击时 | +| linktap | 链接被点击时 | + +查看 [事件](https://jin-yufeng.github.io/mp-html/#/basic/event) 了解更多 + +## api +组件实例上提供了一些 `api` 方法可供调用 + +| 名称 | 作用 | +|:---:|---| +| in | 将锚点跳转的范围限定在一个 scroll-view 内 | +| navigateTo | 锚点跳转 | +| getText | 获取文本内容 | +| getRect | 获取富文本内容的位置和大小 | +| setContent | 设置富文本内容 | +| imgList | 获取所有图片的数组 | +| pauseMedia | 暂停播放音视频([2.2.2+](https://jin-yufeng.github.io/mp-html/#/changelog/changelog#v222)) | +| setPlaybackRate | 设置音视频播放速率([2.4.0+](https://jin-yufeng.github.io/mp-html/#/changelog/changelog#v240)) | + +查看 [api](https://jin-yufeng.github.io/mp-html/#/advanced/api) 了解更多 + +## 插件扩展 +除基本功能外,本组件还提供了丰富的扩展,可按照需要选用 + +| 名称 | 作用 | +|:---:|---| +| audio | 音乐播放器 | +| editable | 富文本编辑 | +| emoji | 解析 emoji | +| highlight | 代码块高亮显示 | +| markdown | 渲染 markdown | +| search | 关键词搜索 | +| style | 匹配 style 标签中的样式 | +| txv-video | 使用腾讯视频 | +| img-cache | 图片缓存 by [@PentaTea](https://github.com/PentaTea) | +| latex | 渲染 latex 公式 by [@Zeng-J](https://github.com/Zeng-J) | +| card | 卡片展示 by [@whoooami](https://github.com/whoooami) | + +查看 [插件](https://jin-yufeng.github.io/mp-html/#/advanced/plugin) 了解更多 + +## 许可与支持 +- 许可 + 您可以免费的使用(包括商用)、复制或修改本组件 [MIT License](https://github.com/jin-yufeng/mp-html/blob/master/LICENSE) + 在用于生产环境前务必经过充分测试,由插件 `bug` 带来的损失概不负责(可以自行修改源码) + + +## 更新日志 +- v2.5.1 (20250420) + 1. `U` `uni-app` 包适配鸿蒙 `APP` [详细](https://github.com/jin-yufeng/mp-html/issues/615) + 2. `U` 微信小程序替换废弃 `api` `getSystemInfoSync` [详细](https://github.com/jin-yufeng/mp-html/issues/613) + 3. `F` 修复了微信小程序 `glass-easel` 框架下真机换行异常的问题 [详细](https://github.com/jin-yufeng/mp-html/pull/607) by [@PaperStrike](https://github.com/PaperStrike) + 4. `F` 修复了 `uni-app` 包 `app` 端播放视频可能报错的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/617) + 5. `F` 修复了 `latex` 插件可能出现 `xxx can be used only in display mode` 的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/632) + 6. `F` 修复了 `uni-app` 包 `latex` 公式可能不显示的问题 [#599](https://github.com/jin-yufeng/mp-html/issues/599)、[#627](https://github.com/jin-yufeng/mp-html/issues/627) + +- v2.5.0 (20240422) + 1. `U` `play` 事件增加返回 `src` 等信息 [详细](https://github.com/jin-yufeng/mp-html/issues/526) + 2. `U` `preview-img` 属性支持设置为 `all` 开启 `base64` 图片预览 [详细](https://github.com/jin-yufeng/mp-html/issues/536) + 3. `U` `editable` 插件增加简易模式(点击文字直接编辑) + 4. `U` `latex` 插件支持块级公式 [详细](https://github.com/jin-yufeng/mp-html/issues/582) + 5. `F` 修复了表格部分情况下背景丢失的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/587) + 6. `F` 修复了部分 `svg` 无法显示的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/591) + 7. `F` 修复了 `uni-app` 包 `h5` 和 `app` 端部分情况下样式无法识别的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/518) + 8. `F` 修复了 `latex` 插件部分情况下显示不正确的问题 [详细](https://github.com/jin-yufeng/mp-html/issues/580) + 9. `F` 修复了 `editable` 插件表格无法删除的问题 + 10. `F` 修复了 `editable` 插件 `uni-app` 包 `vue3` `h5` 端点击图片报错的问题 + 11. `F` 修复了 `editable` 插件 `uni-app` 包点击表格没有菜单栏的问题 + + 从 `1.x` 的升级方法可见 [更新指南](https://jin-yufeng.github.io/mp-html/#/changelog/changelog?id=v200) + +查看 [更新日志](https://jin-yufeng.github.io/mp-html/#/changelog/changelog) 了解更多 diff --git a/wechat-mini-program/components/mp-html/dist/mp-alipay/index.acss b/wechat-mini-program/components/mp-html/dist/mp-alipay/index.acss new file mode 100644 index 0000000..5f74d06 --- /dev/null +++ b/wechat-mini-program/components/mp-html/dist/mp-alipay/index.acss @@ -0,0 +1 @@ +._root{padding:1px 0;overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch}._select{-webkit-user-select:text;user-select:text} \ No newline at end of file diff --git a/wechat-mini-program/components/mp-html/dist/mp-alipay/index.axml b/wechat-mini-program/components/mp-html/dist/mp-alipay/index.axml new file mode 100644 index 0000000..318219b --- /dev/null +++ b/wechat-mini-program/components/mp-html/dist/mp-alipay/index.axml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/wechat-mini-program/components/mp-html/dist/mp-alipay/index.js b/wechat-mini-program/components/mp-html/dist/mp-alipay/index.js new file mode 100644 index 0000000..1e2fdad --- /dev/null +++ b/wechat-mini-program/components/mp-html/dist/mp-alipay/index.js @@ -0,0 +1,8 @@ +"use strict";function e(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}/*! + * mp-html v2.5.1 + * https://github.com/jin-yufeng/mp-html + * + * Released under the MIT license + * Author: Jin Yufeng + */ +var t=require("./parser"),n=[];Component({data:{nodes:[]},props:{containerStyle:"",content:"",copyLink:!0,domain:"",errorImg:"",lazyLoad:!1,loadingImg:"",pauseVideo:!0,previewImg:!0,scrollTable:!1,setTitle:!0,showImgMenu:!0,tagStyle:{}},didMount:function(){this.plugins=[];for(var e=n.length;e--;)this.plugins.push(new n[e](this));this.props.content&&this.setContent(this.props.content)},didUpdate:function(e){e.content!==this.props.content&&this.setContent(this.props.content)},didUnmount:function(){this._hook("onDetached")},methods:{in:function(e,t,n){e&&t&&n&&(this._in={page:e,selector:t,scrollTop:n})},navigateTo:function(t,n){var i=this;return new Promise(function(o,r){if(!i.props.useAnchor)return void r(Error("Anchor is disabled"));var s=my.createSelectorQuery().select((i._in?i._in.selector:"._root")+(t?"".concat(" ","#").concat(t):"")).boundingClientRect();i._in?s.select(i._in.selector).scrollOffset().select(i._in.selector).boundingClientRect():s.selectViewport().scrollOffset(),s.exec(function(t){if(!t[0])return void r(Error("Label not found"));var s=t[1].scrollTop+t[0].top-(t[2]?t[2].top:0)+(n||parseInt(i.props.useAnchor)||0);i._in?i._in.page.setData(e({},i._in.scrollTop,s)):my.pageScrollTo({scrollTop:s,duration:300}),o()})})},getText:function(e){var t="";return function e(n){for(var i=0;i"0"&&o.name[1]<"7";r&&t&&"\n"!==t[t.length-1]&&(t+="\n"),o.children&&e(o.children),r&&"\n"!==t[t.length-1]?t+="\n":"td"!==o.name&&"th"!==o.name||(t+="\t")}}}(e||this.data.nodes),t},getRect:function(){return new Promise(function(e,t){my.createSelectorQuery().select("._root").boundingClientRect().exec(function(n){return n[0]?e(n[0]):t(Error("Root label not found"))})})},pauseMedia:function(){for(var e=(this._videos||[]).length;e--;)this._videos[e].pause()},setPlaybackRate:function(e){this.playbackRate=e;for(var t=(this._videos||[]).length;t--;)this._videos[t].playbackRate(e)},setContent:function(e,n){var i=this;this.imgList&&n||(this.imgList=[]),this._videos=[];var o={},r=new t(this).parse(e);if(n)for(var s=this.data.nodes.length,a=r.length;a--;)o["nodes[".concat(s+a,"]")]=r[a];else o.nodes=r;if(this.setData(o,function(){i._hook("onLoad"),i.props.onLoad&&i.props.onLoad()}),this.props.lazyLoad||this.imgList._unloadimgs{{'\n'}}

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