From 31120a92ceeb7fc42e02d1954a9dd65e376e210b Mon Sep 17 00:00:00 2001 From: chaldea Date: Sun, 20 Sep 2020 14:21:34 +0800 Subject: [PATCH] feat: add all pages (#18) * add account center * add account settins * add RightContent * update right content * add step form * add AdvancedForm * add basic profile * add Advanced profile * add list pages * fix card list style bug * refactor account-center, advanced-profile * add list pages * update to 2009161213 * fix ListItem error after updating to latest lib * refactor pages, move code into cs file, fix binding errors * format code * adjust namespace * add missing using for template * update template * update README * fix template error --- .template.config/template.json | 219 +++++++++++++----- ...ign.Pro.sln => AntDesign.Pro.Template.sln} | 4 +- .../templates/hosted/package.json | 2 +- .../templates/hosted/src/Client/App.razor | 2 +- .../hosted/src/Client/Pages/Welcome.razor | 41 ++++ .../src/Client/Pages/Welcome.razor.less | 8 + .../templates/hosted/src/Client/Program.cs | 16 +- ...j => AntDesign.Pro.Template.Server.csproj} | 2 +- .../hosted/src/Server/Pages/Error.cshtml | 2 +- .../hosted/src/Server/Pages/Error.cshtml.cs | 2 +- .../templates/hosted/src/Server/Program.cs | 2 +- .../templates/hosted/src/Server/Startup.cs | 2 +- ...o.csproj => AntDesign.Pro.Template.csproj} | 4 +- .../server/Layouts/BasicLayout.razor | 31 ++- .../templates/server/Pages/Welcome.razor | 41 ++++ .../templates/server/Pages/Welcome.razor.less | 8 + .../templates/server/Pages/_Host.cshtml | 7 +- .template.config/templates/server/Program.cs | 2 +- .template.config/templates/server/Startup.cs | 13 +- .../templates/server/_Imports.razor | 13 +- .../server/appsettings.Development.json | 16 ++ .../templates/server/appsettings.json | 18 +- .../templates/server/wwwroot/favicon.ico | Bin 0 -> 15086 bytes ...o.csproj => AntDesign.Pro.Template.csproj} | 4 +- .../templates/wasm/Layouts/BasicLayout.razor | 31 ++- .../templates/wasm/Pages/Welcome.razor | 41 ++++ .../templates/wasm/Pages/Welcome.razor.less | 8 + .template.config/templates/wasm/Program.cs | 17 +- .../templates/wasm/_Imports.razor | 13 +- .../templates/wasm/wwwroot/appsettings.json | 18 ++ .../templates/wasm/wwwroot/favicon.ico | Bin 0 -> 15086 bytes .../templates/wasm/wwwroot/index.html | 2 +- README.md | 38 +++ README.zh-CN.md | 38 +++ logo.png | Bin 0 -> 7837 bytes src/AntDesign.Pro/AntDesign.Pro.csproj | 10 +- .../GlobalHeader/RightContent.razor | 50 ++++ .../GlobalHeader/RightContent.razor.cs | 106 +++++++++ .../Extensions/DateTimeExtension.cs | 62 +++++ src/AntDesign.Pro/Layouts/BasicLayout.razor | 5 +- src/AntDesign.Pro/Layouts/UserLayout.razor | 12 +- .../Layouts/UserLayout.razor.less | 4 +- src/AntDesign.Pro/Models/ActivitiesType.cs | 14 ++ src/AntDesign.Pro/Models/ActivityGroup.cs | 8 + src/AntDesign.Pro/Models/ActivityProject.cs | 8 + src/AntDesign.Pro/Models/ActivityUser.cs | 8 + src/AntDesign.Pro/Models/AdvancedOperation.cs | 12 + .../Models/AdvancedProfileData.cs | 9 + src/AntDesign.Pro/Models/BasicGood.cs | 12 + .../Models/BasicProfileDataType.cs | 8 + src/AntDesign.Pro/Models/BasicProgress.cs | 12 + src/AntDesign.Pro/Models/ChartData.cs | 16 ++ src/AntDesign.Pro/Models/ChartDataItem.cs | 8 + src/AntDesign.Pro/Models/CurrentUser.cs | 40 ++++ src/AntDesign.Pro/Models/FormModel.cs | 48 ++++ src/AntDesign.Pro/Models/ListFormModel.cs | 17 ++ src/AntDesign.Pro/Models/ListItemDataType.cs | 42 ++++ src/AntDesign.Pro/Models/LoginParamsType.cs | 19 ++ src/AntDesign.Pro/Models/NoticeItem.cs | 11 + src/AntDesign.Pro/Models/NoticeType.cs | 14 ++ .../Models/OfflineChartDataItem.cs | 9 + src/AntDesign.Pro/Models/OfflineDataItem.cs | 8 + src/AntDesign.Pro/Models/RadarDataItem.cs | 9 + src/AntDesign.Pro/Models/SearchDataItem.cs | 11 + .../Applications/Applications.razor | 62 +++++ .../Applications/Applications.razor.cs | 18 ++ .../ArticleListContent.razor | 16 ++ .../Center/Components/Articles/Articles.razor | 41 ++-- .../Components/Articles/Articles.razor.cs | 11 + .../Components/AvatarList/AvatarList.razor | 7 + .../Components/AvatarList/AvatarList.razor.cs | 9 + .../AvatarList/AvatarListItem.razor | 15 ++ .../AvatarList/AvatarListItem.razor.cs | 28 +++ .../Center/Components/Projects/Projects.razor | 35 +++ .../Components/Projects/Projects.razor.cs | 19 ++ .../Components/Projects/Projects.razor.less | 13 +- .../Pages/Account/Center/Index.razor | 100 ++++---- .../Pages/Account/Center/Index.razor.cs | 40 ++++ .../Pages/Account/Center/Index.razor.less | 12 +- .../Settings/Components/BaseView.razor | 54 +++++ .../Settings/Components/BaseView.razor.cs | 24 ++ .../Settings/Components/BaseView.razor.less | 4 +- .../Settings/Components/BindingView.razor | 21 ++ .../Settings/Components/BindingView.razor.cs | 29 +++ .../Settings/Components/GeographicView.razor | 5 + .../Components/NotificationView.razor | 18 ++ .../Components/NotificationView.razor.cs | 26 +++ .../Settings/Components/PhoneView.razor | 5 + .../Settings/Components/SecurityView.razor | 18 ++ .../Settings/Components/SecurityView.razor.cs | 37 +++ .../Pages/Account/Settings/Index.razor | 38 ++- .../Pages/Account/Settings/Index.razor.cs | 23 ++ .../Pages/Account/Settings/Index.razor.less | 16 +- .../Analysis/Components/Charts/Bar/Bar.razor | 2 +- .../Charts/ChartCard/ChartCard.razor | 2 +- .../Charts/ChartCard/ChartCard.razor.cs | 2 +- .../Components/Charts/Field/Field.razor | 2 +- .../Components/Charts/Field/Field.razor.cs | 2 +- .../Components/Charts/MiniArea/MiniArea.razor | 5 +- .../Components/Charts/MiniBar/MiniBar.razor | 5 +- .../Charts/MiniProgress/MiniProgress.razor | 2 +- .../Dashboard/Analysis/Components/SaleItem.cs | 12 + .../Analysis/Components/SalesCard.razor | 215 ++++++----------- .../Analysis/Components/SalesCard.razor.cs | 68 ++++++ .../Analysis/Components/Trend/Trend.razor | 2 +- .../Analysis/Components/Trend/Trend.razor.cs | 2 +- .../Pages/Dashboard/Analysis/Index.razor | 2 +- .../Components/ActiveChart/ActiveChart.razor | 3 +- .../Components/Charts/Gauge/Gauge.razor | 2 +- .../Components/Charts/Gauge/Gauge.razor.cs | 2 +- .../Monitor/Components/Charts/Map/Map.razor | 2 +- .../Components/Charts/Map/MiniArea.razor | 3 +- .../Monitor/Components/Charts/Pie/Pie.razor | 2 +- .../Components/Charts/Pie/Pie.razor.cs | 2 +- .../Components/Charts/TagCloud/TagCloud.razor | 2 +- .../Charts/TagCloud/TagCloud.razor.cs | 2 +- .../Charts/WaterWave/WaterWave.razor | 2 +- .../Charts/WaterWave/WaterWave.razor.cs | 2 +- .../Pages/Dashboard/Monitor/Index.razor | 2 +- .../EditableLinkGroup/EditableLinkGroup.razor | 2 +- .../EditableLinkGroup.razor.cs | 2 +- .../Components/Radar/AutoHeight.razor | 2 +- .../Workplace/Components/Radar/Radar.razor | 4 +- .../Pages/Dashboard/Workplace/Index.razor | 121 ++++------ .../Pages/Dashboard/Workplace/Index.razor.cs | 32 +++ .../Dashboard/Workplace/Index.razor.less | 2 +- .../Pages/Exception/403/403.razor | 6 +- .../Pages/Exception/404/404.razor | 6 +- .../Pages/Exception/500/500.razor | 6 +- .../Form/AdvancedForm/AdvancedForm.razor | 114 ++++++++- .../Form/AdvancedForm/AdvancedForm.razor.cs | 9 + .../Pages/Form/BasicForm/BasicForm.razor | 136 +++++------ .../Pages/Form/BasicForm/BasicForm.razor.cs | 13 ++ .../StepForm/Components/Step1/Step1.razor | 48 +++- .../StepForm/Components/Step1/Step1.razor.cs | 17 ++ .../StepForm/Components/Step2/Step2.razor | 29 ++- .../StepForm/Components/Step2/Step2.razor.cs | 22 ++ .../StepForm/Components/Step3/Step3.razor | 27 ++- .../StepForm/Components/Step3/Step3.razor.cs | 13 ++ .../Pages/Form/StepForm/StepForm.razor | 55 +++-- .../Pages/Form/StepForm/StepForm.razor.cs | 22 ++ .../Pages/Form/StepForm/StepForm.razor.less | 3 +- .../Pages/List/BasicList/BasicList.razor | 109 +++++++++ .../Pages/List/BasicList/BasicList.razor.cs | 36 +++ .../Pages/List/BasicList/BasicList.razor.less | 195 ++++++++++++++++ .../Pages/List/BasicList/utils/utils.less | 50 ++++ .../Pages/List/CardList/CardList.razor | 88 +++++++ .../Pages/List/CardList/CardList.razor.cs | 31 +++ .../Pages/List/CardList/CardList.razor.less | 107 +++++++++ .../Pages/List/CardList/utils/utils.less | 50 ++++ .../Search/Applications/Applications.razor | 110 +++++++++ .../Search/Applications/Applications.razor.cs | 32 +++ .../Applications/Applications.razor.less | 50 ++++ .../StandardFormRow/StandardFormRow.razor | 14 ++ .../StandardFormRow/StandardFormRow.razor.cs | 33 +++ .../StandardFormRow.razor.less | 88 +++++++ .../Components/TagSelect/TagSelect.razor | 27 +++ .../Components/TagSelect/TagSelect.razor.cs | 67 ++++++ .../Components/TagSelect/TagSelect.razor.less | 34 +++ .../TagSelect/TagSelectOption.razor | 4 + .../TagSelect/TagSelectOption.razor.cs | 35 +++ .../List/Search/Applications/utils/utils.less | 50 ++++ .../Pages/List/Search/Articles/Articles.razor | 76 ++++++ .../List/Search/Articles/Articles.razor.cs | 37 +++ .../List/Search/Articles/Articles.razor.less | 31 +++ .../Pages/List/Search/Projects/Projects.razor | 81 +++++++ .../List/Search/Projects/Projects.razor.cs | 30 +++ .../Pages/List/Search/SearchList.razor | 28 +++ .../Pages/List/Search/SearchList.razor.cs | 32 +++ .../Pages/List/TableList/TableList.razor | 6 + .../Pages/List/TableList/TableList.razor.less | 0 .../Pages/Profile/Advanced/Advanced.razor | 188 +++++++++++++++ .../Pages/Profile/Advanced/Advanced.razor.cs | 28 +++ .../Profile/Advanced/Advanced.razor.less | 60 +++++ .../Pages/Profile/Basic/Basic.razor | 55 +++++ .../Pages/Profile/Basic/Basic.razor.cs | 20 ++ .../Pages/Profile/Basic/Basic.razor.less | 8 + .../Pages/Result/Fail/Fail.razor | 55 +++-- .../Pages/Result/Fail/Fail.razor.less | 2 +- .../Pages/Result/Success/Success.razor | 110 +++++---- .../Pages/Result/Success/Success.razor.less | 2 +- .../Pages/User/Login/Login.razor | 7 +- .../Pages/User/Login/Login.razor.cs | 45 ++-- .../Pages/User/Register/Register.razor | 2 +- .../Pages/User/Register/Register.razor.cs | 2 +- .../User/RegisterResult/RegisterResult.razor | 2 +- src/AntDesign.Pro/Program.cs | 14 +- src/AntDesign.Pro/Services/AccountService.cs | 29 +++ src/AntDesign.Pro/Services/ChartService.cs | 56 +---- src/AntDesign.Pro/Services/ProfileService.cs | 33 +++ src/AntDesign.Pro/Services/ProjectService.cs | 59 ++--- src/AntDesign.Pro/Services/UserService.cs | 27 +++ .../Utils/LongToDateTimeConverter.cs | 24 ++ src/AntDesign.Pro/_Imports.razor | 5 +- src/AntDesign.Pro/wwwroot/data/advanced.json | 1 + src/AntDesign.Pro/wwwroot/data/basic.json | 1 + .../wwwroot/data/current_user.json | 1 + src/AntDesign.Pro/wwwroot/data/fake_list.json | 2 +- src/AntDesign.Pro/wwwroot/data/menu.json | 24 +- templates.csproj | 12 +- 200 files changed, 4637 insertions(+), 809 deletions(-) rename .template.config/templates/hosted/{AntDesign.Pro.sln => AntDesign.Pro.Template.sln} (94%) create mode 100644 .template.config/templates/hosted/src/Client/Pages/Welcome.razor create mode 100644 .template.config/templates/hosted/src/Client/Pages/Welcome.razor.less rename .template.config/templates/hosted/src/Server/{AntDesign.Pro.Server.csproj => AntDesign.Pro.Template.Server.csproj} (78%) rename .template.config/templates/server/{AntDesign.Pro.csproj => AntDesign.Pro.Template.csproj} (92%) create mode 100644 .template.config/templates/server/Pages/Welcome.razor create mode 100644 .template.config/templates/server/Pages/Welcome.razor.less create mode 100644 .template.config/templates/server/wwwroot/favicon.ico rename .template.config/templates/wasm/{AntDesign.Pro.csproj => AntDesign.Pro.Template.csproj} (93%) create mode 100644 .template.config/templates/wasm/Pages/Welcome.razor create mode 100644 .template.config/templates/wasm/Pages/Welcome.razor.less create mode 100644 .template.config/templates/wasm/wwwroot/appsettings.json create mode 100644 .template.config/templates/wasm/wwwroot/favicon.ico create mode 100644 logo.png create mode 100644 src/AntDesign.Pro/Components/GlobalHeader/RightContent.razor create mode 100644 src/AntDesign.Pro/Components/GlobalHeader/RightContent.razor.cs create mode 100644 src/AntDesign.Pro/Extensions/DateTimeExtension.cs create mode 100644 src/AntDesign.Pro/Models/ActivitiesType.cs create mode 100644 src/AntDesign.Pro/Models/ActivityGroup.cs create mode 100644 src/AntDesign.Pro/Models/ActivityProject.cs create mode 100644 src/AntDesign.Pro/Models/ActivityUser.cs create mode 100644 src/AntDesign.Pro/Models/AdvancedOperation.cs create mode 100644 src/AntDesign.Pro/Models/AdvancedProfileData.cs create mode 100644 src/AntDesign.Pro/Models/BasicGood.cs create mode 100644 src/AntDesign.Pro/Models/BasicProfileDataType.cs create mode 100644 src/AntDesign.Pro/Models/BasicProgress.cs create mode 100644 src/AntDesign.Pro/Models/ChartData.cs create mode 100644 src/AntDesign.Pro/Models/ChartDataItem.cs create mode 100644 src/AntDesign.Pro/Models/CurrentUser.cs create mode 100644 src/AntDesign.Pro/Models/FormModel.cs create mode 100644 src/AntDesign.Pro/Models/ListFormModel.cs create mode 100644 src/AntDesign.Pro/Models/ListItemDataType.cs create mode 100644 src/AntDesign.Pro/Models/LoginParamsType.cs create mode 100644 src/AntDesign.Pro/Models/NoticeItem.cs create mode 100644 src/AntDesign.Pro/Models/NoticeType.cs create mode 100644 src/AntDesign.Pro/Models/OfflineChartDataItem.cs create mode 100644 src/AntDesign.Pro/Models/OfflineDataItem.cs create mode 100644 src/AntDesign.Pro/Models/RadarDataItem.cs create mode 100644 src/AntDesign.Pro/Models/SearchDataItem.cs create mode 100644 src/AntDesign.Pro/Pages/Account/Center/Components/Applications/Applications.razor.cs create mode 100644 src/AntDesign.Pro/Pages/Account/Center/Components/Articles/Articles.razor.cs create mode 100644 src/AntDesign.Pro/Pages/Account/Center/Components/AvatarList/AvatarList.razor.cs create mode 100644 src/AntDesign.Pro/Pages/Account/Center/Components/AvatarList/AvatarListItem.razor create mode 100644 src/AntDesign.Pro/Pages/Account/Center/Components/AvatarList/AvatarListItem.razor.cs create mode 100644 src/AntDesign.Pro/Pages/Account/Center/Components/Projects/Projects.razor.cs create mode 100644 src/AntDesign.Pro/Pages/Account/Center/Index.razor.cs create mode 100644 src/AntDesign.Pro/Pages/Account/Settings/Components/BaseView.razor.cs create mode 100644 src/AntDesign.Pro/Pages/Account/Settings/Components/BindingView.razor create mode 100644 src/AntDesign.Pro/Pages/Account/Settings/Components/BindingView.razor.cs create mode 100644 src/AntDesign.Pro/Pages/Account/Settings/Components/NotificationView.razor create mode 100644 src/AntDesign.Pro/Pages/Account/Settings/Components/NotificationView.razor.cs create mode 100644 src/AntDesign.Pro/Pages/Account/Settings/Components/SecurityView.razor create mode 100644 src/AntDesign.Pro/Pages/Account/Settings/Components/SecurityView.razor.cs create mode 100644 src/AntDesign.Pro/Pages/Account/Settings/Index.razor.cs create mode 100644 src/AntDesign.Pro/Pages/Dashboard/Analysis/Components/SaleItem.cs create mode 100644 src/AntDesign.Pro/Pages/Dashboard/Workplace/Index.razor.cs create mode 100644 src/AntDesign.Pro/Pages/Form/AdvancedForm/AdvancedForm.razor.cs create mode 100644 src/AntDesign.Pro/Pages/Form/BasicForm/BasicForm.razor.cs create mode 100644 src/AntDesign.Pro/Pages/Form/StepForm/Components/Step1/Step1.razor.cs create mode 100644 src/AntDesign.Pro/Pages/Form/StepForm/Components/Step2/Step2.razor.cs create mode 100644 src/AntDesign.Pro/Pages/Form/StepForm/Components/Step3/Step3.razor.cs create mode 100644 src/AntDesign.Pro/Pages/Form/StepForm/StepForm.razor.cs create mode 100644 src/AntDesign.Pro/Pages/List/BasicList/BasicList.razor create mode 100644 src/AntDesign.Pro/Pages/List/BasicList/BasicList.razor.cs create mode 100644 src/AntDesign.Pro/Pages/List/BasicList/BasicList.razor.less create mode 100644 src/AntDesign.Pro/Pages/List/BasicList/utils/utils.less create mode 100644 src/AntDesign.Pro/Pages/List/CardList/CardList.razor create mode 100644 src/AntDesign.Pro/Pages/List/CardList/CardList.razor.cs create mode 100644 src/AntDesign.Pro/Pages/List/CardList/CardList.razor.less create mode 100644 src/AntDesign.Pro/Pages/List/CardList/utils/utils.less create mode 100644 src/AntDesign.Pro/Pages/List/Search/Applications/Applications.razor create mode 100644 src/AntDesign.Pro/Pages/List/Search/Applications/Applications.razor.cs create mode 100644 src/AntDesign.Pro/Pages/List/Search/Applications/Applications.razor.less create mode 100644 src/AntDesign.Pro/Pages/List/Search/Applications/Components/StandardFormRow/StandardFormRow.razor create mode 100644 src/AntDesign.Pro/Pages/List/Search/Applications/Components/StandardFormRow/StandardFormRow.razor.cs create mode 100644 src/AntDesign.Pro/Pages/List/Search/Applications/Components/StandardFormRow/StandardFormRow.razor.less create mode 100644 src/AntDesign.Pro/Pages/List/Search/Applications/Components/TagSelect/TagSelect.razor create mode 100644 src/AntDesign.Pro/Pages/List/Search/Applications/Components/TagSelect/TagSelect.razor.cs create mode 100644 src/AntDesign.Pro/Pages/List/Search/Applications/Components/TagSelect/TagSelect.razor.less create mode 100644 src/AntDesign.Pro/Pages/List/Search/Applications/Components/TagSelect/TagSelectOption.razor create mode 100644 src/AntDesign.Pro/Pages/List/Search/Applications/Components/TagSelect/TagSelectOption.razor.cs create mode 100644 src/AntDesign.Pro/Pages/List/Search/Applications/utils/utils.less create mode 100644 src/AntDesign.Pro/Pages/List/Search/Articles/Articles.razor create mode 100644 src/AntDesign.Pro/Pages/List/Search/Articles/Articles.razor.cs create mode 100644 src/AntDesign.Pro/Pages/List/Search/Articles/Articles.razor.less create mode 100644 src/AntDesign.Pro/Pages/List/Search/Projects/Projects.razor create mode 100644 src/AntDesign.Pro/Pages/List/Search/Projects/Projects.razor.cs create mode 100644 src/AntDesign.Pro/Pages/List/Search/SearchList.razor create mode 100644 src/AntDesign.Pro/Pages/List/Search/SearchList.razor.cs create mode 100644 src/AntDesign.Pro/Pages/List/TableList/TableList.razor create mode 100644 src/AntDesign.Pro/Pages/List/TableList/TableList.razor.less create mode 100644 src/AntDesign.Pro/Pages/Profile/Advanced/Advanced.razor create mode 100644 src/AntDesign.Pro/Pages/Profile/Advanced/Advanced.razor.cs create mode 100644 src/AntDesign.Pro/Pages/Profile/Advanced/Advanced.razor.less create mode 100644 src/AntDesign.Pro/Pages/Profile/Basic/Basic.razor create mode 100644 src/AntDesign.Pro/Pages/Profile/Basic/Basic.razor.cs create mode 100644 src/AntDesign.Pro/Pages/Profile/Basic/Basic.razor.less create mode 100644 src/AntDesign.Pro/Services/AccountService.cs create mode 100644 src/AntDesign.Pro/Services/ProfileService.cs create mode 100644 src/AntDesign.Pro/Services/UserService.cs create mode 100644 src/AntDesign.Pro/Utils/LongToDateTimeConverter.cs create mode 100644 src/AntDesign.Pro/wwwroot/data/advanced.json create mode 100644 src/AntDesign.Pro/wwwroot/data/basic.json create mode 100644 src/AntDesign.Pro/wwwroot/data/current_user.json diff --git a/.template.config/template.json b/.template.config/template.json index 41efe69..b2454f4 100644 --- a/.template.config/template.json +++ b/.template.config/template.json @@ -1,7 +1,9 @@ { "$schema": "http://json.schemastore.org/template", "author": "AntDesign Blazor Team", - "classifications": ["Ant Design Pro"], + "classifications": [ + "Ant Design Pro" + ], "name": "Ant Design Pro Blazor App", "identity": "AntDesign.Pro", "groupIdentity": "AntDesign.Pro", @@ -10,7 +12,7 @@ "language": "C#", "type": "project" }, - "sourceName": "AntDesign.Pro", + "sourceName": "AntDesign.Pro.Template", "preferNameDirectory": true, "symbols": { "full": { @@ -22,7 +24,8 @@ "type": "parameter", "datatype": "choice", "defaultValue": "wasm", - "choices": [{ + "choices": [ + { "choice": "wasm", "description": "WebAssembly" }, @@ -60,100 +63,194 @@ "replaces": "./" } }, - "primaryOutputs": [{ - "condition": "(host != 'hosted')", - "path": "AntDesign.Pro.csproj" - }, { - "condition": "(host == 'hosted')", - "path": "AntDesign.Pro.sln" - }], - "sources": [{ - "source": "./.template.config/templates/assets", - "target": "./" + "primaryOutputs": [ + { + "condition": "(host != 'hosted')", + "path": "AntDesign.Pro.csproj" }, + { + "condition": "(host == 'hosted')", + "path": "AntDesign.Pro.sln" + } + ], + "sources": [ { "condition": "(host != 'hosted')", "source": "./src/AntDesign.Pro", "target": "./", - "modifiers": [{ - "condition": "(!full)", - "exclude": ["Pages/**/*", "Services/**/*"] - }] + "modifiers": [ + { + "exclude": [ + "AntDesign.Pro.csproj", + "AntDesign.Pro.csproj.DotSettings" + ] + }, + { + "condition": "(!full)", + "exclude": [ + "Components/**/*", + "Extensions/**/*", + "Layouts/**/*", + "Models/**/*", + "Pages/**/*", + "Services/**/*", + "Utils/**/*", + "wwwroot/**/*" + ] + } + ] + }, + { + "source": "./.template.config/templates/assets", + "target": "./" }, { "condition": "(host == 'wasm')", "source": "./.template.config/templates/wasm", - "target": "./" + "target": "./", + "modifiers": [ + { + "condition": "(full)", + "exclude": [ + "Pages/Welcome.razor", + "Pages/Welcome.razor.less" + ] + } + ] }, { "condition": "(host == 'server')", "source": "./.template.config/templates/server", - "target": "./" + "target": "./", + "modifiers": [ + { + "condition": "(full)", + "exclude": [ + "Pages/Welcome.razor", + "Pages/Welcome.razor.less" + ] + } + ] }, { "condition": "(host == 'hosted')", "source": "./src/AntDesign.Pro", "target": "./src/Client/", - "modifiers": [{ - "exclude": [ - "AntDesign.Pro.csproj" - ] - }, { - "condition": "(!full)", - "exclude": ["Pages/**/*"] - }] + "modifiers": [ + { + "exclude": [ + "AntDesign.Pro.csproj", + "AntDesign.Pro.csproj.DotSettings" + ] + }, + { + "condition": "(!full)", + "exclude": [ + "Components/**/*", + "Extensions/**/*", + "Layouts/**/*", + "Models/**/*", + "Pages/**/*", + "Services/**/*", + "Utils/**/*", + "wwwroot/**/*" + ] + } + ] }, { "condition": "(host == 'hosted')", "source": "./.template.config/templates/wasm", "target": "./src/Client/", "rename": { - "AntDesign.Pro": "AntDesign.Pro.Client" - } + "AntDesign.Pro.Template": "AntDesign.Pro.Template.Client" + }, + "modifiers": [ + { + "condition": "(full)", + "exclude": [ + "Pages/Welcome.razor", + "Pages/Welcome.razor.less" + ] + } + ] }, { "condition": "(host == 'hosted')", "source": "./.template.config/templates/hosted", - "target": "./" + "target": "./", + "modifiers": [ + { + "condition": "(full)", + "exclude": [ + "src/Client/Pages/Welcome.razor", + "src/Client/Pages/Welcome.razor.less" + ] + } + ] } ], "SpecialCustomOperations": { "**/*.less": { - "operations": [{ - "type": "conditional", - "configuration": { - "if": ["//#if"], - "else": ["//#else"], - "elseif": ["//#elseif"], - "endif": ["//#endif"], - "trim": true, - "wholeLine": true, - "evaluator": "C++" + "operations": [ + { + "type": "conditional", + "configuration": { + "if": [ + "//#if" + ], + "else": [ + "//#else" + ], + "elseif": [ + "//#elseif" + ], + "endif": [ + "//#endif" + ], + "trim": true, + "wholeLine": true, + "evaluator": "C++" + } } - }] + ] }, "**/*.razor": { - "operations": [{ - "type": "conditional", - "configuration": { - "if": ["//#if"], - "else": ["//#else"], - "elseif": ["//#elseif"], - "endif": ["//#endif"], - "trim": true, - "wholeLine": true, - "evaluator": "C++" + "operations": [ + { + "type": "conditional", + "configuration": { + "if": [ + "//#if" + ], + "else": [ + "//#else" + ], + "elseif": [ + "//#elseif" + ], + "endif": [ + "//#endif" + ], + "trim": true, + "wholeLine": true, + "evaluator": "C++" + } } - }] + ] } }, - "postActions": [{ - "condition": "(!skipRestore)", - "description": "Restore NuGet packages required by this project.", - "manualInstructions": [{ - "text": "Run 'dotnet restore'" - }], - "actionId": "210D431B-A78B-4D2F-B762-4ED3E3EA9025", - "continueOnError": true - }] + "postActions": [ + { + "condition": "(!skipRestore)", + "description": "Restore NuGet packages required by this project.", + "manualInstructions": [ + { + "text": "Run 'dotnet restore'" + } + ], + "actionId": "210D431B-A78B-4D2F-B762-4ED3E3EA9025", + "continueOnError": true + } + ] } \ No newline at end of file diff --git a/.template.config/templates/hosted/AntDesign.Pro.sln b/.template.config/templates/hosted/AntDesign.Pro.Template.sln similarity index 94% rename from .template.config/templates/hosted/AntDesign.Pro.sln rename to .template.config/templates/hosted/AntDesign.Pro.Template.sln index 64ca6b1..16949ec 100644 --- a/.template.config/templates/hosted/AntDesign.Pro.sln +++ b/.template.config/templates/hosted/AntDesign.Pro.Template.sln @@ -2,9 +2,9 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 16 VisualStudioVersion = 16.0.0.0 MinimumVisualStudioVersion = 16.0.0.0 -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AntDesign.Pro.Server", "src\Server\AntDesign.Pro.Server.csproj", "{7A8C458A-DF0B-4B20-BCBF-A433B6F6046A}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AntDesign.Pro.Template.Server", "src\Server\AntDesign.Pro.Template.Server.csproj", "{7A8C458A-DF0B-4B20-BCBF-A433B6F6046A}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AntDesign.Pro.Client", "src\Client\AntDesign.Pro.Client.csproj", "{AB1EB396-ABBE-4CEA-A650-950A68440391}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AntDesign.Pro.Template.Client", "src\Client\AntDesign.Pro.Template.Client.csproj", "{AB1EB396-ABBE-4CEA-A650-950A68440391}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution diff --git a/.template.config/templates/hosted/package.json b/.template.config/templates/hosted/package.json index 411f2bd..6fe6447 100644 --- a/.template.config/templates/hosted/package.json +++ b/.template.config/templates/hosted/package.json @@ -1,5 +1,5 @@ { - "name": "AntDesign.Pro", + "name": "AntDesign.Pro.Template", "version": "1.0.0", "description": "An out-of-box UI solution for enterprise applications as a Blazor boilerplate.", "scripts": { diff --git a/.template.config/templates/hosted/src/Client/App.razor b/.template.config/templates/hosted/src/Client/App.razor index a98e95f..01c7c47 100644 --- a/.template.config/templates/hosted/src/Client/App.razor +++ b/.template.config/templates/hosted/src/Client/App.razor @@ -1,4 +1,4 @@ -@using BasicLayout = AntDesign.Pro.BasicLayout +@using BasicLayout = AntDesign.Pro.Template.BasicLayout diff --git a/.template.config/templates/hosted/src/Client/Pages/Welcome.razor b/.template.config/templates/hosted/src/Client/Pages/Welcome.razor new file mode 100644 index 0000000..c9756fa --- /dev/null +++ b/.template.config/templates/hosted/src/Client/Pages/Welcome.razor @@ -0,0 +1,41 @@ +@page "/" + + + + + + + 使用dotnet快速安装最新模板 + + +
 dotnet new --install AntDesign.Templates::0.1.0-*
+ + + 创建hosted空项目 + + +
 dotnet new antdesign --host=hosted
+ + + 创建包含所有页面的hosted项目 + + +
 dotnet new antdesign --host=hosted --full
+
+

+ Want to add more pages? Please refer to + + ant-design-pro-blazor project + + 。 +

+
diff --git a/.template.config/templates/hosted/src/Client/Pages/Welcome.razor.less b/.template.config/templates/hosted/src/Client/Pages/Welcome.razor.less new file mode 100644 index 0000000..37e53fb1 --- /dev/null +++ b/.template.config/templates/hosted/src/Client/Pages/Welcome.razor.less @@ -0,0 +1,8 @@ +@import '~antd/es/style/themes/default.less'; + +.pre { + margin: 12px 0; + padding: 12px 20px; + background: @input-bg; + box-shadow: @card-shadow; +} diff --git a/.template.config/templates/hosted/src/Client/Program.cs b/.template.config/templates/hosted/src/Client/Program.cs index b4cb01b..45d38ae 100644 --- a/.template.config/templates/hosted/src/Client/Program.cs +++ b/.template.config/templates/hosted/src/Client/Program.cs @@ -1,12 +1,14 @@ using System; using System.Net.Http; using System.Threading.Tasks; -using {pro-layout}; -using AntDesign.Pro.Services; +using AntDesign.Pro.Layout; +//#if (full) +using AntDesign.Pro.Template.Services; +//#endif using Microsoft.AspNetCore.Components.WebAssembly.Hosting; using Microsoft.Extensions.DependencyInjection; -namespace AntDesign.Pro.Client +namespace AntDesign.Pro.Template.Client { public class Program { @@ -18,7 +20,13 @@ namespace AntDesign.Pro.Client builder.Services.AddScoped(sp => new HttpClient { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) }); builder.Services.AddAntDesign(); builder.Services.Configure(builder.Configuration.GetSection("ProSettings")); - builder.Services.AddScoped(); +//#if (full) + builder.Services.AddScoped(); + builder.Services.AddScoped(); + builder.Services.AddScoped(); + builder.Services.AddScoped(); + builder.Services.AddScoped(); +//#endif await builder.Build().RunAsync(); } diff --git a/.template.config/templates/hosted/src/Server/AntDesign.Pro.Server.csproj b/.template.config/templates/hosted/src/Server/AntDesign.Pro.Template.Server.csproj similarity index 78% rename from .template.config/templates/hosted/src/Server/AntDesign.Pro.Server.csproj rename to .template.config/templates/hosted/src/Server/AntDesign.Pro.Template.Server.csproj index c49bfae..347ab97 100644 --- a/.template.config/templates/hosted/src/Server/AntDesign.Pro.Server.csproj +++ b/.template.config/templates/hosted/src/Server/AntDesign.Pro.Template.Server.csproj @@ -9,7 +9,7 @@ - + diff --git a/.template.config/templates/hosted/src/Server/Pages/Error.cshtml b/.template.config/templates/hosted/src/Server/Pages/Error.cshtml index 8d2057f..dd6d4c4 100644 --- a/.template.config/templates/hosted/src/Server/Pages/Error.cshtml +++ b/.template.config/templates/hosted/src/Server/Pages/Error.cshtml @@ -1,5 +1,5 @@ @page -@model AntDesign.Pro.Server.Pages.ErrorModel +@model AntDesign.Pro.Template.Server.Pages.ErrorModel @{ Layout = "_Layout"; ViewData["Title"] = "Error"; diff --git a/.template.config/templates/hosted/src/Server/Pages/Error.cshtml.cs b/.template.config/templates/hosted/src/Server/Pages/Error.cshtml.cs index b03740e..2df4d7f 100644 --- a/.template.config/templates/hosted/src/Server/Pages/Error.cshtml.cs +++ b/.template.config/templates/hosted/src/Server/Pages/Error.cshtml.cs @@ -7,7 +7,7 @@ using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; using Microsoft.Extensions.Logging; -namespace AntDesign.Pro.Server.Pages +namespace AntDesign.Pro.Template.Server.Pages { [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)] public class ErrorModel : PageModel diff --git a/.template.config/templates/hosted/src/Server/Program.cs b/.template.config/templates/hosted/src/Server/Program.cs index b7d3bad..3b14647 100644 --- a/.template.config/templates/hosted/src/Server/Program.cs +++ b/.template.config/templates/hosted/src/Server/Program.cs @@ -7,7 +7,7 @@ using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; -namespace AntDesign.Pro.Server +namespace AntDesign.Pro.Template.Server { public class Program { diff --git a/.template.config/templates/hosted/src/Server/Startup.cs b/.template.config/templates/hosted/src/Server/Startup.cs index 315c474..7fe4794 100644 --- a/.template.config/templates/hosted/src/Server/Startup.cs +++ b/.template.config/templates/hosted/src/Server/Startup.cs @@ -7,7 +7,7 @@ using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using System.Linq; -namespace AntDesign.Pro.Server +namespace AntDesign.Pro.Template.Server { public class Startup { diff --git a/.template.config/templates/server/AntDesign.Pro.csproj b/.template.config/templates/server/AntDesign.Pro.Template.csproj similarity index 92% rename from .template.config/templates/server/AntDesign.Pro.csproj rename to .template.config/templates/server/AntDesign.Pro.Template.csproj index 6c2812d..f111002 100644 --- a/.template.config/templates/server/AntDesign.Pro.csproj +++ b/.template.config/templates/server/AntDesign.Pro.Template.csproj @@ -5,9 +5,9 @@ - + - + diff --git a/.template.config/templates/server/Layouts/BasicLayout.razor b/.template.config/templates/server/Layouts/BasicLayout.razor index 37a8770..02e45ff 100644 --- a/.template.config/templates/server/Layouts/BasicLayout.razor +++ b/.template.config/templates/server/Layouts/BasicLayout.razor @@ -1,23 +1,40 @@ -@namespace AntDesign.Pro +@namespace AntDesign.Pro.Template @inherits LayoutComponentBase -<{pro-layout}.BasicLayout + + MenuData="_menuData"> + + + @Body - + -@inject HttpClient HttpClient @code { - private MenuDataItem[] MenuData { get; set; } = {}; +//#if (full) + private MenuDataItem[] _menuData = {}; + + [Inject] public HttpClient HttpClient { get; set; } protected override async Task OnInitializedAsync() { await base.OnInitializedAsync(); - MenuData = await HttpClient.GetFromJsonAsync("data/menu.json"); + _menuData = await HttpClient.GetFromJsonAsync("data/menu.json"); } +//#else + private readonly MenuDataItem[] _menuData = + { + new MenuDataItem + { + Path = "/", + Name = "welcome", + Key = "welcome", + Icon = "smile", + } + }; +//#endif } \ No newline at end of file diff --git a/.template.config/templates/server/Pages/Welcome.razor b/.template.config/templates/server/Pages/Welcome.razor new file mode 100644 index 0000000..1951b9a --- /dev/null +++ b/.template.config/templates/server/Pages/Welcome.razor @@ -0,0 +1,41 @@ +@page "/" + + + + + + + 使用dotnet快速安装最新模板 + + +
 dotnet new --install AntDesign.Templates::0.1.0-*
+ + + 创建server空项目 + + +
 dotnet new antdesign --host=server
+ + + 创建包含所有页面的server项目 + + +
 dotnet new antdesign --host=server --full
+
+

+ Want to add more pages? Please refer to + + ant-design-pro-blazor project + + 。 +

+
diff --git a/.template.config/templates/server/Pages/Welcome.razor.less b/.template.config/templates/server/Pages/Welcome.razor.less new file mode 100644 index 0000000..37e53fb1 --- /dev/null +++ b/.template.config/templates/server/Pages/Welcome.razor.less @@ -0,0 +1,8 @@ +@import '~antd/es/style/themes/default.less'; + +.pre { + margin: 12px 0; + padding: 12px 20px; + background: @input-bg; + box-shadow: @card-shadow; +} diff --git a/.template.config/templates/server/Pages/_Host.cshtml b/.template.config/templates/server/Pages/_Host.cshtml index 84e032d..de995da 100644 --- a/.template.config/templates/server/Pages/_Host.cshtml +++ b/.template.config/templates/server/Pages/_Host.cshtml @@ -1,5 +1,5 @@ @page "/" -@namespace AntDesign.Pro.Server.Pages +@namespace AntDesign.Pro.Template.Pages @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers @{ Layout = null; @@ -10,10 +10,10 @@ - AntDesign.Pro + AntDesign.Pro.Template - + @@ -24,7 +24,6 @@ - diff --git a/.template.config/templates/server/Program.cs b/.template.config/templates/server/Program.cs index 25a48dd..0079848 100644 --- a/.template.config/templates/server/Program.cs +++ b/.template.config/templates/server/Program.cs @@ -9,7 +9,7 @@ using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; -namespace AntDesign.Pro +namespace AntDesign.Pro.Template { public class Program { diff --git a/.template.config/templates/server/Startup.cs b/.template.config/templates/server/Startup.cs index ca6bc37..89bb846 100644 --- a/.template.config/templates/server/Startup.cs +++ b/.template.config/templates/server/Startup.cs @@ -10,11 +10,12 @@ using Microsoft.AspNetCore.HttpsPolicy; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; +using AntDesign.Pro.Layout; //#if (full) -using AntDesign.Pro.Services; +using AntDesign.Pro.Template.Services; //#endif -namespace AntDesign.Pro +namespace AntDesign.Pro.Template { public class Startup { @@ -36,9 +37,13 @@ namespace AntDesign.Pro { BaseAddress = new Uri(sp.GetService().BaseUri) }); + services.Configure(Configuration.GetSection("ProSettings")); //#if (full) - services.AddScoped(); - services.AddScoped(); + services.AddScoped(); + services.AddScoped(); + services.AddScoped(); + services.AddScoped(); + services.AddScoped(); //#endif } diff --git a/.template.config/templates/server/_Imports.razor b/.template.config/templates/server/_Imports.razor index 76a406c..e2ab17f 100644 --- a/.template.config/templates/server/_Imports.razor +++ b/.template.config/templates/server/_Imports.razor @@ -1,13 +1,14 @@ -@using System.Net.Http +@using AntDesign +@using AntDesign.Charts +@using AntDesign.Pro.Layout +@using System.Net.Http @using System.Net.Http.Json @using Microsoft.AspNetCore.Components.Forms @using Microsoft.AspNetCore.Components.Routing @using Microsoft.AspNetCore.Components.Web @using Microsoft.JSInterop -@using AntDesign -@using AntDesign.Charts -@using {pro-layout} -@using AntDesign.Pro +@using AntDesign.Pro.Template //#if (full) -@using AntDesign.Pro.Services; +@using AntDesign.Pro.Template.Models +@using AntDesign.Pro.Template.Services //#endif \ No newline at end of file diff --git a/.template.config/templates/server/appsettings.Development.json b/.template.config/templates/server/appsettings.Development.json index 5173757..3071d03 100644 --- a/.template.config/templates/server/appsettings.Development.json +++ b/.template.config/templates/server/appsettings.Development.json @@ -6,5 +6,21 @@ "Microsoft": "Warning", "Microsoft.Hosting.Lifetime": "Information" } + }, + "ProSettings": { + "NavTheme": "dark", + "Layout": "side", + "ContentWidth": "Fluid", + "FixedHeader": false, + "FixSiderbar": true, + "Title": "Ant Design Pro", + "PrimaryColor": "daybreak", + "ColorWeak": false, + "SplitMenus": false, + "HeaderRender": true, + "FooterRender": true, + "MenuRender": true, + "MenuHeaderRender": true, + "HeaderHeight": 48 } } diff --git a/.template.config/templates/server/appsettings.json b/.template.config/templates/server/appsettings.json index d9d9a9b..a484ee4 100644 --- a/.template.config/templates/server/appsettings.json +++ b/.template.config/templates/server/appsettings.json @@ -6,5 +6,21 @@ "Microsoft.Hosting.Lifetime": "Information" } }, - "AllowedHosts": "*" + "AllowedHosts": "*", + "ProSettings": { + "NavTheme": "dark", + "Layout": "side", + "ContentWidth": "Fluid", + "FixedHeader": false, + "FixSiderbar": true, + "Title": "Ant Design Pro", + "PrimaryColor": "daybreak", + "ColorWeak": false, + "SplitMenus": false, + "HeaderRender": true, + "FooterRender": true, + "MenuRender": true, + "MenuHeaderRender": true, + "HeaderHeight": 48 + } } diff --git a/.template.config/templates/server/wwwroot/favicon.ico b/.template.config/templates/server/wwwroot/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..60a4278e7145b9609ea3cccc0fdd4f17dc8fd2b8 GIT binary patch literal 15086 zcmeHN3v^Cb7QU#CR*|4XBH|E( zJl2>_XVGc3`ktax235~^i$p?^HxYaGw}0pQb94VlMww;SJ!_qH?mc&(vma-lbN1bP zYgz@ZlIG%~ack4!p3$^mP19^P`}HLO`tZ~?Y^+varT@+BHSv@iL4R+sV7-P=*h$>U6ejXDMU(YcgU6g#jd zO&J|Sr%xUedch0EcjNKbGc%Npf;cNFq_6M-8OGk)0@{sRzx9A4fB%jHcF& z>&jTj9^*T=X-a2PPSWwChq)f1jelH2e)X!^Wy$gcpY^#ywy0PSrL%Z$T(=6(;ZHr< z2T~ZXkvFfWBaDJAt@UI&K#Q4vls4{Z|7JW7%KMIU#>O>_E6yh=ICu=@X_u2l|ARee z$-b!h3M1@-!zzAMYs5c&QY^VwRq}kWufV?|{OBLYcG_L$H8&@R*Rq|+4?IjAGlcHlyGOTf z-k^xERx+33TeU{~S1w z+64+8^p6_UTh<^iH;4N7XkRA$MR)JY7|@N9pO;4~-drHEn|6Qwv$Jl|kUpJdo!p++ zXjoKNDk#XO+qVm7(^L*t?8Aqc6p)`cHydJ3u*Chr_0`jzM;S-#omLx3;SC2`MTTfQ-xQxM*InJ zu~erD)6YDBN5~Fk?(~T?b?jhy&boC|))X(0MW4EijbG_Y4# zx%D6G-J^X=!kVJIF>eOX(}BL){V~0@V3yd?d%pRC_V4*dbPM|ca@)RTlkg2Y{rwGV zsdvX9Q@wY_|NPgc${C3NpACOlCAjb0xkGWoqlE`={{O*#2R@ve{=C<0t`+oumxeVf z$^O9}RB#HHS!(6(Y?q8gH_H*~aIRPBb`c3ik`8$C326PO% zuJkyU*B$>on>ViGz2@z7{mkYpPakN-odX(h4yzi~rH%a4dDW`?*l;U4K?BY?tc6rO zbHy4f7^}5pVd;RS1HY6G7~BC*{1tu*c9CkaTy;N%H@_IlFU7AlkF|F!9k6u3(g8~c zEFG|Pz|w*Loet>#yZ8Td5lbxVdN_`Szq%~r)EM~WP?b-yEMtu@m<#>_#5Q}r+=6;_ zXi33-?t1*$2=Dlgu|d9WG6rM2hBl+db*eb!0q~yHD^QC@wJEC0OEhjsACBqvmhte9 z3jYk_h~r_;@Gp!R94Wr;n>VhD|7^vZzblik0diZma1LeNx+VTM#KRHaHS<$oP2m$y zvcK+|f`4l5%B7~hP2(J( ze|6Gg43UC(I^ym|`XTpb^<8M&`x_Wfp#m?_!bb&pcyTU*5tp;~N2h<0PDg3ef&Cv+N*9!}=Gi2%vb@Zy+2 z?0}xdc-Z~%4#^e4x;fHn_Uw#)btaTHhh2Y4mp|s8FuWfXvYxAwI6Hyru|FB~V1Aox zCEC7ulln|o)30#OieCvmEGzx%-(4ZTVEBBI2ja!~Euht?*JYs}FmEk*U8gOd<44FB z!MUO60gsC~XGWFV1qC#`U$RoUCEkKHL%)J?)|%0;Ph@yV=Qz>Q#M!(iRb}0c z^k-g8=ktfx-GMg1EKQuH&xBZFS>!(=y8C}Ee;`A=NyVIWaz7hDX0DI8Xn!^*!40!8XEvQza)STljX|ABtA9){K7R{R@~Ok)0);qwpX{ z4RkrmKb2#xkiTO=KAR8QM9pnA>4R;5DRzfB!r@uPMqxvk(Q4LL7WyHJh_E2Gac=4; zckTR;^|k^fEt*S^8Dh#SmoAi?x}P{+tn?i@hRtoRvR48cxJumc80XO;CRtQ;SL_zV zFAwbf7fs_Bt9L260p+0|=QHFBy9;{$>co-7Y@{ul{vlJ zzq?Y-Z8M!PoBK)hK^L*#zyt0{$BI7u-}U9#b5IjE)?<5||4GnQ9vt97?IpAJQTA7P n=&)c*o^_T?ESXq3VCjIR1C|b0I$-I*)2;)CbRg^X2}|HVo0G>~ literal 0 HcmV?d00001 diff --git a/.template.config/templates/wasm/AntDesign.Pro.csproj b/.template.config/templates/wasm/AntDesign.Pro.Template.csproj similarity index 93% rename from .template.config/templates/wasm/AntDesign.Pro.csproj rename to .template.config/templates/wasm/AntDesign.Pro.Template.csproj index 58ae0dc..330bcc9 100644 --- a/.template.config/templates/wasm/AntDesign.Pro.csproj +++ b/.template.config/templates/wasm/AntDesign.Pro.Template.csproj @@ -6,9 +6,9 @@ - + - + diff --git a/.template.config/templates/wasm/Layouts/BasicLayout.razor b/.template.config/templates/wasm/Layouts/BasicLayout.razor index 37a8770..02e45ff 100644 --- a/.template.config/templates/wasm/Layouts/BasicLayout.razor +++ b/.template.config/templates/wasm/Layouts/BasicLayout.razor @@ -1,23 +1,40 @@ -@namespace AntDesign.Pro +@namespace AntDesign.Pro.Template @inherits LayoutComponentBase -<{pro-layout}.BasicLayout + + MenuData="_menuData"> + + + @Body - + -@inject HttpClient HttpClient @code { - private MenuDataItem[] MenuData { get; set; } = {}; +//#if (full) + private MenuDataItem[] _menuData = {}; + + [Inject] public HttpClient HttpClient { get; set; } protected override async Task OnInitializedAsync() { await base.OnInitializedAsync(); - MenuData = await HttpClient.GetFromJsonAsync("data/menu.json"); + _menuData = await HttpClient.GetFromJsonAsync("data/menu.json"); } +//#else + private readonly MenuDataItem[] _menuData = + { + new MenuDataItem + { + Path = "/", + Name = "welcome", + Key = "welcome", + Icon = "smile", + } + }; +//#endif } \ No newline at end of file diff --git a/.template.config/templates/wasm/Pages/Welcome.razor b/.template.config/templates/wasm/Pages/Welcome.razor new file mode 100644 index 0000000..3f84812 --- /dev/null +++ b/.template.config/templates/wasm/Pages/Welcome.razor @@ -0,0 +1,41 @@ +@page "/" + + + + + + + 使用dotnet快速安装最新模板 + + +
 dotnet new --install AntDesign.Templates::0.1.0-*
+ + + 创建wasm空项目 + + +
 dotnet new antdesign --host=wasm
+ + + 创建包含所有页面的wasm项目 + + +
 dotnet new antdesign --host=wasm --full
+
+

+ Want to add more pages? Please refer to + + ant-design-pro-blazor project + + 。 +

+
diff --git a/.template.config/templates/wasm/Pages/Welcome.razor.less b/.template.config/templates/wasm/Pages/Welcome.razor.less new file mode 100644 index 0000000..37e53fb1 --- /dev/null +++ b/.template.config/templates/wasm/Pages/Welcome.razor.less @@ -0,0 +1,8 @@ +@import '~antd/es/style/themes/default.less'; + +.pre { + margin: 12px 0; + padding: 12px 20px; + background: @input-bg; + box-shadow: @card-shadow; +} diff --git a/.template.config/templates/wasm/Program.cs b/.template.config/templates/wasm/Program.cs index db90a22..d78be69 100644 --- a/.template.config/templates/wasm/Program.cs +++ b/.template.config/templates/wasm/Program.cs @@ -1,14 +1,14 @@ +using AntDesign.Pro.Layout; +//#if (full) +using AntDesign.Pro.Template.Services; +//#endif using System; using System.Net.Http; using System.Threading.Tasks; -using {pro-layout}; using Microsoft.AspNetCore.Components.WebAssembly.Hosting; using Microsoft.Extensions.DependencyInjection; -//#if (full) -using AntDesign.Pro.Services; -//#endif -namespace AntDesign.Pro +namespace AntDesign.Pro.Template { public class Program { @@ -21,8 +21,11 @@ namespace AntDesign.Pro builder.Services.AddAntDesign(); builder.Services.Configure(builder.Configuration.GetSection("ProSettings")); //#if (full) - builder.Services.AddScoped(); - builder.Services.AddScoped(); + builder.Services.AddScoped(); + builder.Services.AddScoped(); + builder.Services.AddScoped(); + builder.Services.AddScoped(); + builder.Services.AddScoped(); //#endif await builder.Build().RunAsync(); diff --git a/.template.config/templates/wasm/_Imports.razor b/.template.config/templates/wasm/_Imports.razor index 7dcc8ea..f40e7a7 100644 --- a/.template.config/templates/wasm/_Imports.razor +++ b/.template.config/templates/wasm/_Imports.razor @@ -1,14 +1,15 @@ -@using System.Net.Http +@using AntDesign +@using AntDesign.Charts +@using AntDesign.Pro.Layout +@using System.Net.Http @using System.Net.Http.Json @using Microsoft.AspNetCore.Components.Forms @using Microsoft.AspNetCore.Components.Routing @using Microsoft.AspNetCore.Components.Web @using Microsoft.AspNetCore.Components.WebAssembly.Http @using Microsoft.JSInterop -@using AntDesign -@using AntDesign.Charts -@using {pro-layout} -@using AntDesign.Pro +@using AntDesign.Pro.Template //#if (full) -@using AntDesign.Pro.Services; +@using AntDesign.Pro.Template.Models +@using AntDesign.Pro.Template.Services //#endif \ No newline at end of file diff --git a/.template.config/templates/wasm/wwwroot/appsettings.json b/.template.config/templates/wasm/wwwroot/appsettings.json new file mode 100644 index 0000000..e1b2d03 --- /dev/null +++ b/.template.config/templates/wasm/wwwroot/appsettings.json @@ -0,0 +1,18 @@ +{ + "ProSettings": { + "NavTheme": "dark", + "Layout": "side", + "ContentWidth": "Fluid", + "FixedHeader": false, + "FixSiderbar": true, + "Title": "Ant Design Pro", + "PrimaryColor": "daybreak", + "ColorWeak": false, + "SplitMenus": false, + "HeaderRender": true, + "FooterRender": true, + "MenuRender": true, + "MenuHeaderRender": true, + "HeaderHeight": 48 + } +} \ No newline at end of file diff --git a/.template.config/templates/wasm/wwwroot/favicon.ico b/.template.config/templates/wasm/wwwroot/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..60a4278e7145b9609ea3cccc0fdd4f17dc8fd2b8 GIT binary patch literal 15086 zcmeHN3v^Cb7QU#CR*|4XBH|E( zJl2>_XVGc3`ktax235~^i$p?^HxYaGw}0pQb94VlMww;SJ!_qH?mc&(vma-lbN1bP zYgz@ZlIG%~ack4!p3$^mP19^P`}HLO`tZ~?Y^+varT@+BHSv@iL4R+sV7-P=*h$>U6ejXDMU(YcgU6g#jd zO&J|Sr%xUedch0EcjNKbGc%Npf;cNFq_6M-8OGk)0@{sRzx9A4fB%jHcF& z>&jTj9^*T=X-a2PPSWwChq)f1jelH2e)X!^Wy$gcpY^#ywy0PSrL%Z$T(=6(;ZHr< z2T~ZXkvFfWBaDJAt@UI&K#Q4vls4{Z|7JW7%KMIU#>O>_E6yh=ICu=@X_u2l|ARee z$-b!h3M1@-!zzAMYs5c&QY^VwRq}kWufV?|{OBLYcG_L$H8&@R*Rq|+4?IjAGlcHlyGOTf z-k^xERx+33TeU{~S1w z+64+8^p6_UTh<^iH;4N7XkRA$MR)JY7|@N9pO;4~-drHEn|6Qwv$Jl|kUpJdo!p++ zXjoKNDk#XO+qVm7(^L*t?8Aqc6p)`cHydJ3u*Chr_0`jzM;S-#omLx3;SC2`MTTfQ-xQxM*InJ zu~erD)6YDBN5~Fk?(~T?b?jhy&boC|))X(0MW4EijbG_Y4# zx%D6G-J^X=!kVJIF>eOX(}BL){V~0@V3yd?d%pRC_V4*dbPM|ca@)RTlkg2Y{rwGV zsdvX9Q@wY_|NPgc${C3NpACOlCAjb0xkGWoqlE`={{O*#2R@ve{=C<0t`+oumxeVf z$^O9}RB#HHS!(6(Y?q8gH_H*~aIRPBb`c3ik`8$C326PO% zuJkyU*B$>on>ViGz2@z7{mkYpPakN-odX(h4yzi~rH%a4dDW`?*l;U4K?BY?tc6rO zbHy4f7^}5pVd;RS1HY6G7~BC*{1tu*c9CkaTy;N%H@_IlFU7AlkF|F!9k6u3(g8~c zEFG|Pz|w*Loet>#yZ8Td5lbxVdN_`Szq%~r)EM~WP?b-yEMtu@m<#>_#5Q}r+=6;_ zXi33-?t1*$2=Dlgu|d9WG6rM2hBl+db*eb!0q~yHD^QC@wJEC0OEhjsACBqvmhte9 z3jYk_h~r_;@Gp!R94Wr;n>VhD|7^vZzblik0diZma1LeNx+VTM#KRHaHS<$oP2m$y zvcK+|f`4l5%B7~hP2(J( ze|6Gg43UC(I^ym|`XTpb^<8M&`x_Wfp#m?_!bb&pcyTU*5tp;~N2h<0PDg3ef&Cv+N*9!}=Gi2%vb@Zy+2 z?0}xdc-Z~%4#^e4x;fHn_Uw#)btaTHhh2Y4mp|s8FuWfXvYxAwI6Hyru|FB~V1Aox zCEC7ulln|o)30#OieCvmEGzx%-(4ZTVEBBI2ja!~Euht?*JYs}FmEk*U8gOd<44FB z!MUO60gsC~XGWFV1qC#`U$RoUCEkKHL%)J?)|%0;Ph@yV=Qz>Q#M!(iRb}0c z^k-g8=ktfx-GMg1EKQuH&xBZFS>!(=y8C}Ee;`A=NyVIWaz7hDX0DI8Xn!^*!40!8XEvQza)STljX|ABtA9){K7R{R@~Ok)0);qwpX{ z4RkrmKb2#xkiTO=KAR8QM9pnA>4R;5DRzfB!r@uPMqxvk(Q4LL7WyHJh_E2Gac=4; zckTR;^|k^fEt*S^8Dh#SmoAi?x}P{+tn?i@hRtoRvR48cxJumc80XO;CRtQ;SL_zV zFAwbf7fs_Bt9L260p+0|=QHFBy9;{$>co-7Y@{ul{vlJ zzq?Y-Z8M!PoBK)hK^L*#zyt0{$BI7u-}U9#b5IjE)?<5||4GnQ9vt97?IpAJQTA7P n=&)c*o^_T?ESXq3VCjIR1C|b0I$-I*)2;)CbRg^X2}|HVo0G>~ literal 0 HcmV?d00001 diff --git a/.template.config/templates/wasm/wwwroot/index.html b/.template.config/templates/wasm/wwwroot/index.html index ad09e57..aab1012 100644 --- a/.template.config/templates/wasm/wwwroot/index.html +++ b/.template.config/templates/wasm/wwwroot/index.html @@ -7,7 +7,7 @@ Ant Design Pro Blazor - + diff --git a/README.md b/README.md index 9483c0d..2a94c6b 100644 --- a/README.md +++ b/README.md @@ -44,4 +44,42 @@ An out-of-box UI solution for enterprise applications as a Blazor boilerplate. - Login - Register - Register Result +``` + +## Usage +### Install Template +```bash +dotnet new -i AntDesign.Templates::0.1.0-* +``` + +### Uninstall Template +```bash +dotnet new -u AntDesign.Templates +``` + +### Create New Project +```bash +# Create an empty wasm project +dotnet new antdesign --host=wasm + +# Create wasm project with full pages +dotnet new antdesign --host=wasm --full + +# Create an empty server-side project +dotnet new antdesign --host=server + +# Create server-side project with full pages +dotnet new antdesign --host=server --full + +# Create an empty hosted project +dotnet new antdesign --host=hosted + +# Create hosted project with full pages +dotnet new antdesign --host=hosted --full +``` + +### Override Existing Project +```bash +## You can override an existing project with the --force +dotnet new antdesign --host=wasm --force ``` \ No newline at end of file diff --git a/README.zh-CN.md b/README.zh-CN.md index bc76c8e..85d9c8c 100644 --- a/README.zh-CN.md +++ b/README.zh-CN.md @@ -43,4 +43,42 @@ - 登录 - 注册 - 注册成功 +``` + +## 使用 +### 安装模板 +```bash +dotnet new -i AntDesign.Templates::0.1.0-* +``` + +### 卸载模板 +```bash +dotnet new -u AntDesign.Templates +``` + +### 新建项目 +```bash +# Create an empty wasm project +dotnet new antdesign --host=wasm + +# Create wasm project with full pages +dotnet new antdesign --host=wasm --full + +# Create an empty server-side project +dotnet new antdesign --host=server + +# Create server-side project with full pages +dotnet new antdesign --host=server --full + +# Create an empty hosted project +dotnet new antdesign --host=hosted + +# Create hosted project with full pages +dotnet new antdesign --host=hosted --full +``` + +### 覆盖项目 +```bash +## You can override an existing project with the --force +dotnet new antdesign --host=wasm --force ``` \ No newline at end of file diff --git a/logo.png b/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..739b3462bde057051c1c255aba7ff53bfc3f9539 GIT binary patch literal 7837 zcmV;O9%A8%P)004R> z004l5008;`004mK004C`008P>0026e000+ooVrmw00004XF*Lt006O$eEU(800001 zb5ch_0Itp)=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01m_e01m_fl`9S#0015I zNklZ+a@q%XEpb?a8ut^57&`vRz>Q#!Fi7soywosf~M7b{`u>lkDaWFYY>DZthH zFjpw|7ft6*^8;y22UAM2I;O;`(mWkdcpCGyV_FTducqd6ss9s@>B<<-qm*@6VQfbt zR<-rew^`KhMoi6{H-_pofg#o-W0C$VT>DRdYE8VqZEVYcu?$$tBVZjhs;spLvM$Q* zmJm9ttNF96z5RqM0=V$0crza!SeqD8)#wMv=6sgsQ1eL!LcJM~(mV%Lt~#tBnE6`U zma#m;kk?HIOZHz?y~YpVlk?`yppRTehmH9UL>tghcTlhl+TWYMRJ@GtT^S(=3nHmZ`Z4;hnYLVt0X~q0y>ZY=oE05We}?Af8Sp6wF|nJ{psL=z7kSi-*4?5 zoBUGf0j-hTfQpq_6-obM}2W61*v>(U(vGqBSeMZ4|naXfenLH-^;rR6LG+PKD6RCQF z2PLTxn8N%*x?ahGUlmtefmsxM)C&Q0!nf9Yv~R%`Zop66a!VuKbVnWl5#VN!M1Y&Y zF8UmuWN}&sZOa6i!q#F-OE6CWV>d@9^cj35iF^^EP$g>Lj~hikf)EJifH;^)&p9O+ z`|_j5>`pd0c9}TLp?hWf1_lcVw%lD1C;@k40q%BRrZF|*j2U?X;BxSL2rjtZoG&1h zn!lx>x;NvE)9nB+`V5mQDewqHX_8|Rz;Rkpan5}d=U7CXdnkhnpRIn9CI-@S;8L%K zo<1*-L5O^m$Q58&vjY1RHFLn8`g<&w?9auIDxAl8opTG2jdE|DyEfMB?IVB7wB!ju z39^V2o$fThh73MQ(aClvK)3}Hv&KE@i3WAUG?&hg zGIDInjrGB-GsuFzfR9-wuQ{G7DzeQ$^q=eA!EBKLqn}p-LFJ3Fqs~=8xqvEzB(W)j zy1F2f>Vl;Pb?ox1q8W|*k+}n+u-MK5&K%nOpi?(YUsn-Q8*ruh}TrVH$ZS<=#gG=75gtIDjd?Dxs7DgfJlFq`WyEz#NE({-7bQJoGK+okJ4GM@sa) z?aT1e%LoBCgDw2^wO6J;5agE)P?gL$1Hwr>0Kr`<>Q z`s$xMloENcivbSkEH8JzuQot1rDQA2%Hh75>;RD==-duCL4T$mypEl48w!@O_tqrV zjHbg;2F)F!%ZH`sQ|xh04Z%3r7PVIa2gtRAuT$IMlarfRj9L+olcnN*04myV1s1lowAu4l3?Eo4!y!wIz zQ$vTrL#lad{n1b`b}0dN9|4#sS)4mH)?DX-z1SD30H16C#TRQ0}_!nfZE1A~z3u6lDK#9INxsu*D zku*|0y|3OXwfh)@byK;7z1ZW0jO98_?T7}02t_=K-9|&4CF8FRASsZMssm?s%sZ_I zPLULOuDzT7tjYb#n&J~@H4~9<25tD4jVLWh1ZZIpUu}R)fW37pfj`hG{NjeaBu!Qn zwCtVQ3!t|Fe2N1|fNxh|DsPe`d*k_Ju%xDxwlqek4=02T0uo(Sg>jhQH)en#G$$4= zY;+a~axn&=P&p77fnElLo{AD6KEJJ@ib=nvZy!|^3?6YLEfy?@NXXari)F|X0q{Al z;s9Po3t4&t!M~93DFgoZzBhqM%A54vqtrPAY~{+LV+>VeFBJ@Irh6I;Q^>P(1Sh+) z0ZNtvXbc1uo9O8{|5VZU#KCDU{TLOTPpAcRKJ{KF_a=LeKSb{LLKaTW(~G6+PRr_O6+Am|RR*Z_sOH~rzU8&errO29Yh2P`tqb``z%qn-!J*qh%! zXOe+#n6q}AN~g!u$uo`vL3Sg64S$?=20_IY6s6eQ+v@`?b7SiLV=8zJ`BA4D_iAV+ zsv!NWEneguq`Lq5Yr1!u0r)=f^wa1NM;9Uh#7rGSsVH|_z%EDt;1l?t5hF0(I=_M1 z<}CV+qi>rGJUvE}mVMlcx^;@Q`3bm#J@yNs*iO!$-;_dW1C?vC2VTGK5f=0$m;!Qk z0BsTOE}Ewrfj-*+Lm?$+eRmW!(1pY#qcuZ|!AQ!krQ=$|sA2P@lKd%a=wCtxKtCgu z*#IbUzDmgTRpIZ0!j@3Eh(TOifY;}<`rEMiQ$dZfLEca zoAoX!>Hz0Du+cOZt&mvmTV~F5O(h6A?5JA%i@gRb|Gn;OQjFb4Wg9KeEA}o1#TTqV zbjR^_L;!H|+5p(HG?+O3{Tr$6+URU_{u>PXS;yKaSg-<_j{6IWW#KjAM3SNG_N<*S zw?2>w+?e`v_idog4?q#P3<^sEt)2~z37{Z%JIFH_fhUm-khtOINlEF?E17=D7R!1B z%t#Q0u9@>8cda<*cJmCM5ufwjwJgKNpgu^$%xc4h)G3f8%ycWrN(0=KmqFI!s|`?Y z{PEh>+GG&b6*{M7C!rPvw+A?OW_7!^#kb|f9BhE{_Wc-K;*o-xw#`bIHJ34xer z;KUfTQFjV-hn(nmJH4!5A*33*PZ}E_dEHG-Nx+?CRMp#ydFZBV>*#E+q67}qJhj?( z`4^nNAQG2SO#y@n$kY|H^wNasp6^*oSilw868-mJ!D!-$gB>Sg=eHc8f{n#Fz5oFr zcAa)$PmjMgK$(ajarK-lk;BHUHH`u=u!A`9(dy%8Y-Jrw9j*V%Hvd$e+xJ@Tw_GzM z0dJw>R{E%*E0yBNmar!l6G1qbvd*_q`NeKI-juh^Xao*X128#t&JEN+8`Tvq1z>d1 zpSj^}kH6&gJvEzFYs8Seq4fa_NDrx#J#Fm;@E|3M7=uh((Yy%!8EKUi;B9@&!xsiz z7%5CJCF{CM78}6JcmTfxGFQ!RLF5}rj|Yu&?#cQFToI~@o$Ckq`V`vQepr6;mzOcb zne?uxb-iB@uh-Le&Cur5g0W+pa>QT~pn{$x0mN{_yP4 zCzjQXc<0`(t~@FK=uZcu%bG6Ppz!qdbUHHsJhXkD;9bmWE13y1x2c2tVg2{-?dovM zO3Ocbf6v|jSigY-JB`#FF((ZrebhkWNt-dBRz;hj&cw|EGXW?xAbf@&m2j6p7DW_%;(+F#oh zVr&-MX543o)WIl{9B+bQPaspDg8O%w{r+9@#x+w)mYfYOay%SYqoQA?dIgz+AIPcj ze%95Iu)Al-*#I2bL-aJ$5NT`=@7lQD%K86(7Xn`foCVFGAX>XgvqVu;EKg1%zL}ib zIyJPt{jgpgB(9%Bh9T}K8e%TdUZCoAcxk&F(670<$NiYVLg0I}0pgdtofKf(ar*R2a|=S{zF8p)TAHbC9O0)iNFGWq7BTPy zz>D<-xFCv>xxZy*12yhdCiIWU>5tYMb^i25au3(_kEt_+*VH`%7l#rb{G4@kIEo0? z>|C#gi`T>_x4y)r%pXWX)arK>NyS1xqrW%hrND329Z5{RiHM7}xd6Ag3P8361|d0{ z7vNAua1TU)fz%Coah`vXvdjV`XFsNE5kb(SO9D1l-o5b=r{Ei0s$K0}B#IZCRR?|3 zY?2b=^kp+j;C?L_<)aE9K@9q!ArkjodpC04;lP#vhxWpb(9>%=2ZI2HgbnbwmTOh9+pK>O zGSirSO&s9XPARQ6xmd-MkzzjZ|c|83Ut!_O~%)t zH3BG*5?Qsu4u^W*+v*394QsJhQD81l!z4_@=@5Vzq52+)*I#_l%3dl)01O6meE^Pf zevg6dv#fpMs9Pwx|Hl1RQO$25r5dpaaJzAL2u=w=1?>#_qchf&!=Rs}kslmVWFH*N zITMV}D#c^br!ybJFQhWC@zbO5O#+{pUaih+`1a}dW3T)u={vuy#GU#ShSBfAFa9@vCo~)`>AIOE3^srtgF!qk6T>YlUGxZmt+(h|QRtb2 zRqrDQ+gY>Rw1qskA6$W`7{}}@;9!FWE_f$@O-_8c+za^s{3~pZegNBr;3HTzGFK1c z$KZm*-{Bo`9AHp8f-C@y6p(X|xq%tOS}W0GR5&We23Y!c#K^CB!gg*wn21HCfMN!q z)ksW8z;5;;`bpo*@eknzo&?FRs~gS6eV>8+S7`jwBe+f&2=Y8MtYi&f1c<5JZcYjT zWd@I1jYr0Do8wiq5i?{nylxaU{77DEnC_DhJB40@(?uGzl|b+guK}w}1|G`vg6xFr zMP(8_Fzd|KnmyC+1`etXfY_~XXf+;>EiDnNzPB`Rvl<^TxPVoGt<=z678M{m2V58K z*w$qdMmuc4?5W1cZbOX}R#$v~9Y4;>o-`C*HASEO$m;sSE~8AAt5 zUaaz^BrOc$FuZsBUJ}=1N!%W^Sw?MjTEZ#jZstA$lBMbkNQx{W8$(qms|o4LYJR)T z;IAiJu4~eUjyq5R#Q9rf-gCPj{ywH)Tq#^{E~CV?S<}W5L4!3nP~vcao7^#!w8-1f z^W4_a5shCo=|y$?p2_d7PbB1r=*Tb>E%fTMs=mG;Hh#)DhSCIWlo4ZHpeV0|U)$AX z3^TU`^+s8aFbZ1fT;V?fX5;hgL(K$!2tW4h@As=6ILmH-DBE*Eo|4F7@B8M_rKHgQ z=R0F#CaRk`*5(_KL(AVrx74arq5ADW{(}HWqJ@;^#=bG>aLwzxEuAVg`*!xt{t>3= z*emK1DYiY{JawTeIh@otap~0$l8l-RXcJrL?=adDV#j?0--4y9?RZV04n?;?o2c)< z6dQnf`>Y-LczO00lmpd<)iWb+zHm^p@&yJR36K>eAs(|DkM>EG4uK%sqb|-ws$^&4 zk}Iz)SVJ;6*p;^M0tIa6*(q~q#po^?f}-C;$MW<_4zb`Z*yur#i>?F+Dg zIS6W?rWSX{|E{`&h7~dzW1j@((cir5B)_%$NbKtq=7PjF0tlr}0};-nL z2o8xsUuElJ(H_9}A_z2Y<$R@O9vk8k)fO-i%UdsPqGBtuF$11e8KB#WH5+tMXA)0V zt$Dh%H2cH3p!WYeom0ngB#HTmWlMOA`oR-ak7?n3J8m5`@XAEmYn6#hO>2+d3e?^U`#^ z-S7w74I>wGuQ$i=iM!_Zp5HRhLIiKUypYP=VGQ~dAc(w_;HAXy^}nMG zd7B)HpDF+Txm9+y#(+qH61ZM}pQ8;U%E|TS6#ks_2t(aS8|Vw8;=}RLEiD!z_`^#N zC<-47eL){V3}4){=R!*Ki+`#YZZxa*DgMG@`OZ8{#i{;?C^kt?}F)PX@+SKJyhe4H08-R9$0;Ue`ke zaF8)+w;W0Db>hcI$6hu%i0mF@I8v@jPEn(lgXIOFOV7Y@9Ke?2%OnZHo%`0r&b?F} zEo|ONBS^1okDc2*D*XB2-6DW$-tOp&{@tsJ4|M}Z)OU6V+euofEa>BZ2&i1@AEowHSg?M82j3Ib^iWr z!R5vA9%WkZxtHEC?43Q&6jCW_a3=TjoK%;zIvAKCA>KxcqKTxG`usb>2VNYwvHj?c z>xGd(S5ZD37%89;!Jqcs6gy{pk0uE$ad&KFz_!JjnmZW6-Qh!f_m-m$pIq27vPvP9 zB1zM-i$|+-4YF#3B*0DK{V#ODAf-~c-l75=i~Ir5|3V@-v~OYW*%u!n{MF&!vN3|E z9ktM(J+X6|kAlRuFpgWj5W}bEwKN5Qokb6CCNsGO6d0|&hUW*HW=MUk3@6}Tc4&Y^ zKKR7-uKEH7iR(pa*t@@fBzn#z`$+U|$PN()!8m-ZCpFYYPGcKM4b?^KQdb8BCUwy@ zHO#DzC&=piKtLT!(2(_oSRH~o;#V7r)<_p3w(|%8Ius7KtDeWn%JsH3fMY{%kcdI` z4#=oGH-0R!h~Al9hTVP~zA7n3(dAK=p-S4y;krDHv$^1-^b#19*LSnN!ZFyFYr)*vA73n@2_%*#=D4S7191ABtp(k~;lsox+0ahyQW#INq`M z*L%JRIlN#B}7<(q% zxo0m7#pIFeQK$mEP}U%B7Li*RNecj}K7agJd<=>7Z;)ze)E0QmE+$c%mlD}kIuf~& z$ldBNF{=JiiAjg#Xz;Z{D{7tW#DKOczz41$3cJSS)I-4`V4s;(D%ThE0!k!?%HGi@ z7uSPdDgY}KFr7w1iF@bzl2m|O z%BrM+lLD@=ajODcJ)Bo?8A$Lw&k!o60vv;1kphD!0DS2SC72t`o zDyjTQfiRS#JJ=J~SG<6M6a5^%?3L^Fv$%qO>XS+u#8`j}{LqaTP*DLV0r)Pt-mw?p zMg^!@DPR{>&?&PKn1p(-To0Dn!G#`%&MB)Gs?Kd%9{oZErt+kJc^JQ%_!$1x6*fhd zlkuzq^w|n$>?5f8uwi+!vl{RXAqDGiU^cInOqmkc1eql5KkG(#f;yYtMGbSBg6wn) zD{xa`N$^_TvH)oNEs_{T!CJ-K&VZI!zD_(1^&kHqG$QxT^}eV8v?-GTCVhg{=h69j zZix#0G(<~@WR^1L&WC4v3b?tz#&ICX6J?b!pTN(+hH!+EPvaYLpor5$ozZ3eg5{#D zA<6Y6Hte8sy$d7UQy|E1${O-qUn=;Y0j}5Q1uI;CigCRg72t)kDqIi#b*^EVu(4AC zrv%rF>NwQ7z6?fqu)_7H7}twbKoGf-1}OkOQr5}B^^U;*jB&jdV;YuSJX0fp0AL~w zFw9TNas+;b>j%yC4pf0Q1x|}sRx{;)Y;SbgKhU=T7ohWdij_g1p5vP9U6eteo>P$P zJ=R%|P4Kkr_IDZqgt_vok|_&I;ChE;unZ0BWbHh+#EE_qr-KfhQr>08raA&^@&xei zlA4ua$V7eRdN@hA-b0;FHm=Wu|9LoZ^ftCSPXKBf2C2K4pInb8A=l$)o9orY2yyuf zaC6^z-tzzW?aliP}A|3 zmp@fM;Roj@FnIQW1a$_|!uQJy8EO{3L)Tkf7HRlb2>eCNu(wjc{H)_IFWb~G;jX_c zAbm3fQq_P3bt+t6Hm+B7e$5&1-M=hk%gmPx4&?soz40F netstandard2.1 3.0 + AntDesign.Pro.Template + AntDesign.Pro.Template - + - + @@ -43,4 +45,8 @@ + + + + \ No newline at end of file diff --git a/src/AntDesign.Pro/Components/GlobalHeader/RightContent.razor b/src/AntDesign.Pro/Components/GlobalHeader/RightContent.razor new file mode 100644 index 0000000..59baa3d --- /dev/null +++ b/src/AntDesign.Pro/Components/GlobalHeader/RightContent.razor @@ -0,0 +1,50 @@ +@namespace AntDesign.Pro.Template.Components +@inherits AntDomComponentBase + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/AntDesign.Pro/Components/GlobalHeader/RightContent.razor.cs b/src/AntDesign.Pro/Components/GlobalHeader/RightContent.razor.cs new file mode 100644 index 0000000..50c2b49 --- /dev/null +++ b/src/AntDesign.Pro/Components/GlobalHeader/RightContent.razor.cs @@ -0,0 +1,106 @@ +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using AntDesign.Pro.Layout; +using AntDesign.Pro.Template.Models; +using AntDesign.Pro.Template.Services; +using Microsoft.AspNetCore.Components; +using AntDesign; + +namespace AntDesign.Pro.Template.Components +{ + public partial class RightContent + { + private CurrentUser _currentUser = new CurrentUser(); + private NoticeIconData[] _notifications = { }; + private NoticeIconData[] _messages = { }; + private NoticeIconData[] _events = { }; + private int _count = 0; + + private List DefaultOptions { get; set; } = new List + { + new AutoCompleteDataItem + { + Label = "umi ui", + Value = "umi ui" + }, + new AutoCompleteDataItem + { + Label = "Pro Table", + Value = "Pro Table" + }, + new AutoCompleteDataItem + { + Label = "Pro Layout", + Value = "Pro Layout" + } + }; + + [Inject] protected NavigationManager NavigationManager { get; set; } + + [Inject] protected IUserService UserService { get; set; } + [Inject] protected IProjectService ProjectService { get; set; } + [Inject] protected MessageService MessageService { get; set; } + + protected override async Task OnInitializedAsync() + { + await base.OnInitializedAsync(); + SetClassMap(); + _currentUser = await UserService.GetCurrentUserAsync(); + var notices = await ProjectService.GetNoticesAsync(); + _notifications = notices.Where(x => x.Type == "notification").Cast().ToArray(); + _messages = notices.Where(x => x.Type == "message").Cast().ToArray(); + _events = notices.Where(x => x.Type == "event").Cast().ToArray(); + _count = notices.Length; + } + + protected void SetClassMap() + { + ClassMapper + .Clear() + .Add("right"); + } + + public void HandleSelectUser(MenuItem item) + { + switch (item.Key) + { + case "center": + NavigationManager.NavigateTo("/account/center"); + break; + case "setting": + NavigationManager.NavigateTo("/account/settings"); + break; + case "logout": + NavigationManager.NavigateTo("/user/login"); + break; + } + } + + public void HandleSelectLang(MenuItem item) + { + } + + public async Task HandleClear(string key) + { + switch (key) + { + case "notification": + _notifications = new NoticeIconData[] { }; + break; + case "message": + _messages = new NoticeIconData[] { }; + break; + case "event": + _events = new NoticeIconData[] { }; + break; + } + await MessageService.Success($"清空了{key}"); + } + + public async Task HandleViewMore(string key) + { + await MessageService.Info("Click on view more"); + } + } +} \ No newline at end of file diff --git a/src/AntDesign.Pro/Extensions/DateTimeExtension.cs b/src/AntDesign.Pro/Extensions/DateTimeExtension.cs new file mode 100644 index 0000000..8304d0a --- /dev/null +++ b/src/AntDesign.Pro/Extensions/DateTimeExtension.cs @@ -0,0 +1,62 @@ +using System; + +namespace AntDesign.Pro.Template +{ + public static class DateTimeExtension + { + private const int Second = 1; + private const int Minute = 60 * Second; + private const int Hour = 60 * Minute; + private const int Day = 24 * Hour; + private const int Month = 30 * Day; + + // todo: Need to be localized + public static string ToFriendlyDisplay(this DateTime dateTime) + { + var ts = DateTime.Now - dateTime; + var delta = ts.TotalSeconds; + if (delta < 0) + { + return "not yet"; + } + if (delta < 1 * Minute) + { + return ts.Seconds == 1 ? "1秒前" : ts.Seconds + "秒前"; + } + if (delta < 2 * Minute) + { + return "1分钟之前"; + } + if (delta < 45 * Minute) + { + return ts.Minutes + "分钟"; + } + if (delta < 90 * Minute) + { + return "1小时前"; + } + if (delta < 24 * Hour) + { + return ts.Hours + "小时前"; + } + if (delta < 48 * Hour) + { + return "昨天"; + } + if (delta < 30 * Day) + { + return ts.Days + " 天之前"; + } + if (delta < 12 * Month) + { + var months = Convert.ToInt32(Math.Floor((double)ts.Days / 30)); + return months <= 1 ? "一个月之前" : months + "月之前"; + } + else + { + var years = Convert.ToInt32(Math.Floor((double)ts.Days / 365)); + return years <= 1 ? "一年前" : years + "年前"; + } + } + } +} \ No newline at end of file diff --git a/src/AntDesign.Pro/Layouts/BasicLayout.razor b/src/AntDesign.Pro/Layouts/BasicLayout.razor index f6b80dc..0033dca 100644 --- a/src/AntDesign.Pro/Layouts/BasicLayout.razor +++ b/src/AntDesign.Pro/Layouts/BasicLayout.razor @@ -1,9 +1,12 @@ -@namespace AntDesign.Pro +@namespace AntDesign.Pro.Template @inherits LayoutComponentBase + + + @Body diff --git a/src/AntDesign.Pro/Layouts/UserLayout.razor b/src/AntDesign.Pro/Layouts/UserLayout.razor index 1496202..a8d34d0 100644 --- a/src/AntDesign.Pro/Layouts/UserLayout.razor +++ b/src/AntDesign.Pro/Layouts/UserLayout.razor @@ -1,8 +1,8 @@ -@namespace AntDesign.Pro +@namespace AntDesign.Pro.Template @using OneOf @inherits LayoutComponentBase -
+
@@ -27,10 +27,10 @@ @code { - private readonly LinkItem[] _links = new LinkItem[] + private readonly LinkItem[] _links = { - new LinkItem{ Key = "", BlankTarget = true, Title = "Ant Design Pro"}, - new LinkItem{ Key = "", BlankTarget = true, Title = OneOf.FromT1(@)}, - new LinkItem{ Key = "", BlankTarget = true, Title = "Ant Design"}, + new LinkItem{ Key = "", BlankTarget = true, Title = "Ant Design Pro"}, + new LinkItem{ Key = "", BlankTarget = true, Title = OneOf.FromT1(@)}, + new LinkItem{ Key = "", BlankTarget = true, Title = "Ant Design"}, }; } diff --git a/src/AntDesign.Pro/Layouts/UserLayout.razor.less b/src/AntDesign.Pro/Layouts/UserLayout.razor.less index a2aeec2..206c0f4 100644 --- a/src/AntDesign.Pro/Layouts/UserLayout.razor.less +++ b/src/AntDesign.Pro/Layouts/UserLayout.razor.less @@ -1,6 +1,6 @@ @import '~antd/es/style/themes/default.less'; -.container { +.container__b__0 { display: flex; flex-direction: column; height: 100vh; @@ -58,7 +58,7 @@ } @media (min-width: @screen-md-min) { - .container { + .container__b__0 { background-image: url('https://gw.alipayobjects.com/zos/rmsportal/TVYTbAXWheQpRcWDaDMu.svg'); background-repeat: no-repeat; background-position: center 110px; diff --git a/src/AntDesign.Pro/Models/ActivitiesType.cs b/src/AntDesign.Pro/Models/ActivitiesType.cs new file mode 100644 index 0000000..3602b0e --- /dev/null +++ b/src/AntDesign.Pro/Models/ActivitiesType.cs @@ -0,0 +1,14 @@ +using System; + +namespace AntDesign.Pro.Template.Models +{ + public class ActivitiesType + { + public string Id { get; set; } + public DateTime UpdatedAt { get; set; } + public ActivityUser User { get; set; } + public ActivityGroup Group { get; set; } + public ActivityProject Project { get; set; } + public string Template { get; set; } + } +} \ No newline at end of file diff --git a/src/AntDesign.Pro/Models/ActivityGroup.cs b/src/AntDesign.Pro/Models/ActivityGroup.cs new file mode 100644 index 0000000..2585942 --- /dev/null +++ b/src/AntDesign.Pro/Models/ActivityGroup.cs @@ -0,0 +1,8 @@ +namespace AntDesign.Pro.Template.Models +{ + public class ActivityGroup + { + public string Name { get; set; } + public string Link { get; set; } + } +} \ No newline at end of file diff --git a/src/AntDesign.Pro/Models/ActivityProject.cs b/src/AntDesign.Pro/Models/ActivityProject.cs new file mode 100644 index 0000000..2468d8f --- /dev/null +++ b/src/AntDesign.Pro/Models/ActivityProject.cs @@ -0,0 +1,8 @@ +namespace AntDesign.Pro.Template.Models +{ + public class ActivityProject + { + public string Name { get; set; } + public string Link { get; set; } + } +} \ No newline at end of file diff --git a/src/AntDesign.Pro/Models/ActivityUser.cs b/src/AntDesign.Pro/Models/ActivityUser.cs new file mode 100644 index 0000000..3a4ec98 --- /dev/null +++ b/src/AntDesign.Pro/Models/ActivityUser.cs @@ -0,0 +1,8 @@ +namespace AntDesign.Pro.Template.Models +{ + public class ActivityUser + { + public string Name { get; set; } + public string Avatar { get; set; } + } +} \ No newline at end of file diff --git a/src/AntDesign.Pro/Models/AdvancedOperation.cs b/src/AntDesign.Pro/Models/AdvancedOperation.cs new file mode 100644 index 0000000..37f5743 --- /dev/null +++ b/src/AntDesign.Pro/Models/AdvancedOperation.cs @@ -0,0 +1,12 @@ +namespace AntDesign.Pro.Template.Models +{ + public class AdvancedOperation + { + public string Key { get; set; } + public string Type { get; set; } + public string Name { get; set; } + public string Status { get; set; } + public string UpdatedAt { get; set; } + public string Memo { get; set; } + } +} \ No newline at end of file diff --git a/src/AntDesign.Pro/Models/AdvancedProfileData.cs b/src/AntDesign.Pro/Models/AdvancedProfileData.cs new file mode 100644 index 0000000..a0212b9 --- /dev/null +++ b/src/AntDesign.Pro/Models/AdvancedProfileData.cs @@ -0,0 +1,9 @@ +namespace AntDesign.Pro.Template.Models +{ + public class AdvancedProfileData + { + public AdvancedOperation[] AdvancedOperation1 { get; set; } + public AdvancedOperation[] AdvancedOperation2 { get; set; } + public AdvancedOperation[] AdvancedOperation3 { get; set; } + } +} \ No newline at end of file diff --git a/src/AntDesign.Pro/Models/BasicGood.cs b/src/AntDesign.Pro/Models/BasicGood.cs new file mode 100644 index 0000000..b160099 --- /dev/null +++ b/src/AntDesign.Pro/Models/BasicGood.cs @@ -0,0 +1,12 @@ +namespace AntDesign.Pro.Template.Models +{ + public class BasicGood + { + public string Id { get; set; } + public string Name { get; set; } + public string Barcode { get; set; } + public string Price { get; set; } + public string Num { get; set; } + public string Amount { get; set; } + } +} \ No newline at end of file diff --git a/src/AntDesign.Pro/Models/BasicProfileDataType.cs b/src/AntDesign.Pro/Models/BasicProfileDataType.cs new file mode 100644 index 0000000..89bcc4c --- /dev/null +++ b/src/AntDesign.Pro/Models/BasicProfileDataType.cs @@ -0,0 +1,8 @@ +namespace AntDesign.Pro.Template.Models +{ + public class BasicProfileDataType + { + public BasicGood[] BasicGoods { get; set; } + public BasicProgress[] BasicProgress { get; set; } + } +} \ No newline at end of file diff --git a/src/AntDesign.Pro/Models/BasicProgress.cs b/src/AntDesign.Pro/Models/BasicProgress.cs new file mode 100644 index 0000000..e98c869 --- /dev/null +++ b/src/AntDesign.Pro/Models/BasicProgress.cs @@ -0,0 +1,12 @@ +namespace AntDesign.Pro.Template.Models +{ + public class BasicProgress + { + public string Key { get; set; } + public string Time { get; set; } + public string Rate { get; set; } + public string Status { get; set; } + public string Operator { get; set; } + public string Cost { get; set; } + } +} \ No newline at end of file diff --git a/src/AntDesign.Pro/Models/ChartData.cs b/src/AntDesign.Pro/Models/ChartData.cs new file mode 100644 index 0000000..6780cb8 --- /dev/null +++ b/src/AntDesign.Pro/Models/ChartData.cs @@ -0,0 +1,16 @@ +namespace AntDesign.Pro.Template.Models +{ + public class ChartData + { + public ChartDataItem[] VisitData { get; set; } + public ChartDataItem[] VisitData2 { get; set; } + public ChartDataItem[] SalesData { get; set; } + public SearchDataItem[] SearchData { get; set; } + public OfflineDataItem[] OfflineData { get; set; } + public OfflineChartDataItem[] OfflineChartData { get; set; } + public ChartDataItem[] SalesTypeData { get; set; } + public ChartDataItem[] SalesTypeDataOnline { get; set; } + public ChartDataItem[] SalesTypeDataOffline { get; set; } + public RadarDataItem[] RadarData { get; set; } + } +} \ No newline at end of file diff --git a/src/AntDesign.Pro/Models/ChartDataItem.cs b/src/AntDesign.Pro/Models/ChartDataItem.cs new file mode 100644 index 0000000..066921d --- /dev/null +++ b/src/AntDesign.Pro/Models/ChartDataItem.cs @@ -0,0 +1,8 @@ +namespace AntDesign.Pro.Template.Models +{ + public class ChartDataItem + { + public string X { get; set; } + public int Y { get; set; } + } +} \ No newline at end of file diff --git a/src/AntDesign.Pro/Models/CurrentUser.cs b/src/AntDesign.Pro/Models/CurrentUser.cs new file mode 100644 index 0000000..fc06c0c --- /dev/null +++ b/src/AntDesign.Pro/Models/CurrentUser.cs @@ -0,0 +1,40 @@ +namespace AntDesign.Pro.Template.Models +{ + public class TagType + { + public string Key { get; set; } + public string Label { get; set; } + } + + public class GeographicType + { + public TagType Province { get; set; } + public TagType City { get; set; } + } + + public class CurrentUser + { + public string Name { get; set; } + public string Avatar { get; set; } + public string Userid { get; set; } + public NoticeType[] Notice { get; set; } = { }; + public string Email { get; set; } + public string Signature { get; set; } + public string Title { get; set; } + public string Group { get; set; } + public TagType[] Tags { get; set; } = { }; + public int NotifyCount { get; set; } + public int UnreadCount { get; set; } + public string Country { get; set; } + public GeographicType Geographic { get; set; } + public string Address { get; set; } + public string Phone { get; set; } + } + + public class UserLiteItem + { + public string Avater { get; set; } + public string Title { get; set; } + public string Description { get; set; } + } +} \ No newline at end of file diff --git a/src/AntDesign.Pro/Models/FormModel.cs b/src/AntDesign.Pro/Models/FormModel.cs new file mode 100644 index 0000000..86efb16 --- /dev/null +++ b/src/AntDesign.Pro/Models/FormModel.cs @@ -0,0 +1,48 @@ +using System; + +namespace AntDesign.Pro.Template.Models +{ + public class StepFormModel + { + public string ReceiverAccountType { get; set; } = "ant-design@alipay.com"; + public string ReceiverAccount { get; set; } = "test@example.com"; + public string ReceiverName { get; set; } = "Alex"; + public string PayAccount { get; set; } + public string Password { get; set; } = "500"; + public string Amount { get; set; } = "12345678"; + } + + public class AdvancedFormModel + { + public string Name { get; set; } + public string Url { get; set; } + public string Owner { get; set; } + public string Approver { get; set; } + public DateTime?[] DateRange { get; set; } + public string Type { get; set; } + public string Name2 { get; set; } + public string Url2 { get; set; } + public string Owner2 { get; set; } + public string Approver2 { get; set; } + public DateTime? DateRange2 { get; set; } + public string Type2 { get; set; } + } + + public class BasicFormModel + { + public string Title { get; set; } + public string Client { get; set; } + public string Invites { get; set; } + public int Disclosure { get; set; } + public int Weight { get; set; } + public string Standard { get; set; } + public string Goal { get; set; } + public DateTime?[] DateRange { get; set; } + } + + public class Owner + { + public string Id { get; set; } + public string Name { get; set; } + } +} \ No newline at end of file diff --git a/src/AntDesign.Pro/Models/ListFormModel.cs b/src/AntDesign.Pro/Models/ListFormModel.cs new file mode 100644 index 0000000..4d0975e --- /dev/null +++ b/src/AntDesign.Pro/Models/ListFormModel.cs @@ -0,0 +1,17 @@ +namespace AntDesign.Pro.Template.Models +{ + public class ListFormModel + { + public string Owner { get; set; } = "wzj"; + + public string ActiveUser { get; set; } + + public string Satisfaction { get; set; } + } + + public class BasicListFormModel + { + public string Status { get; set; } = "all"; + public string SearchKeyword { get; set; } + } +} \ No newline at end of file diff --git a/src/AntDesign.Pro/Models/ListItemDataType.cs b/src/AntDesign.Pro/Models/ListItemDataType.cs new file mode 100644 index 0000000..368ae6b --- /dev/null +++ b/src/AntDesign.Pro/Models/ListItemDataType.cs @@ -0,0 +1,42 @@ +using System; +using System.Text.Json.Serialization; +using AntDesign.Pro.Template.Utils; + +namespace AntDesign.Pro.Template.Models +{ + public class Member + { + public string Avatar { get; set; } + public string Name { get; set; } + public string Id { get; set; } + } + + public class ListItemDataType + { + public string Id { get; set; } + public string Owner { get; set; } + public string Title { get; set; } + public string Avatar { get; set; } + public string Cover { get; set; } + public string Status { get; set; } + public int Percent { get; set; } + public string Logo { get; set; } + public string Href { get; set; } + public string Body { get; set; } + public string SubDescription { get; set; } + public string Description { get; set; } + public int ActiveUser { get; set; } + public int NewUser { get; set; } + public int Star { get; set; } + public int Like { get; set; } + public int Message { get; set; } + public string Content { get; set; } + public Member[] Members { get; set; } + + [JsonConverter(typeof(LongToDateTimeConverter))] + public DateTime UpdatedAt { get; set; } + + [JsonConverter(typeof(LongToDateTimeConverter))] + public DateTime CreatedAt { get; set; } + } +} \ No newline at end of file diff --git a/src/AntDesign.Pro/Models/LoginParamsType.cs b/src/AntDesign.Pro/Models/LoginParamsType.cs new file mode 100644 index 0000000..8f86a10 --- /dev/null +++ b/src/AntDesign.Pro/Models/LoginParamsType.cs @@ -0,0 +1,19 @@ +using System.ComponentModel.DataAnnotations; + +namespace AntDesign.Pro.Template.Models +{ + public class LoginParamsType + { + [Required] public string UserName { get; set; } + + [Required] public string Password { get; set; } + + public string Mobile { get; set; } + + public string Captcha { get; set; } + + public string LoginType { get; set; } + + public bool AutoLogin { get; set; } + } +} \ No newline at end of file diff --git a/src/AntDesign.Pro/Models/NoticeItem.cs b/src/AntDesign.Pro/Models/NoticeItem.cs new file mode 100644 index 0000000..be7c91c --- /dev/null +++ b/src/AntDesign.Pro/Models/NoticeItem.cs @@ -0,0 +1,11 @@ +using AntDesign.Pro.Layout; + +namespace AntDesign.Pro.Template.Models +{ + public class NoticeItem : NoticeIconData + { + public string Id { get; set; } + public string Type { get; set; } + public string Status { get; set; } + } +} \ No newline at end of file diff --git a/src/AntDesign.Pro/Models/NoticeType.cs b/src/AntDesign.Pro/Models/NoticeType.cs new file mode 100644 index 0000000..ec358bc --- /dev/null +++ b/src/AntDesign.Pro/Models/NoticeType.cs @@ -0,0 +1,14 @@ +namespace AntDesign.Pro.Template.Models +{ + public class NoticeType + { + public string Id { get; set; } + public string Title { get; set; } + public string Logo { get; set; } + public string Description { get; set; } + public string UpdatedAt { get; set; } + public string Member { get; set; } + public string Href { get; set; } + public string MemberLink { get; set; } + } +} \ No newline at end of file diff --git a/src/AntDesign.Pro/Models/OfflineChartDataItem.cs b/src/AntDesign.Pro/Models/OfflineChartDataItem.cs new file mode 100644 index 0000000..3ff0c97 --- /dev/null +++ b/src/AntDesign.Pro/Models/OfflineChartDataItem.cs @@ -0,0 +1,9 @@ +namespace AntDesign.Pro.Template.Models +{ + public class OfflineChartDataItem + { + public long X { get; set; } + public int Y1 { get; set; } + public int Y2 { get; set; } + } +} \ No newline at end of file diff --git a/src/AntDesign.Pro/Models/OfflineDataItem.cs b/src/AntDesign.Pro/Models/OfflineDataItem.cs new file mode 100644 index 0000000..37c4952 --- /dev/null +++ b/src/AntDesign.Pro/Models/OfflineDataItem.cs @@ -0,0 +1,8 @@ +namespace AntDesign.Pro.Template.Models +{ + public class OfflineDataItem + { + public string Name { get; set; } + public float Cvr { get; set; } + } +} \ No newline at end of file diff --git a/src/AntDesign.Pro/Models/RadarDataItem.cs b/src/AntDesign.Pro/Models/RadarDataItem.cs new file mode 100644 index 0000000..72d5f0f --- /dev/null +++ b/src/AntDesign.Pro/Models/RadarDataItem.cs @@ -0,0 +1,9 @@ +namespace AntDesign.Pro.Template.Models +{ + public class RadarDataItem + { + public string Name { get; set; } + public string Label { get; set; } + public int Value { get; set; } + } +} \ No newline at end of file diff --git a/src/AntDesign.Pro/Models/SearchDataItem.cs b/src/AntDesign.Pro/Models/SearchDataItem.cs new file mode 100644 index 0000000..d08be13 --- /dev/null +++ b/src/AntDesign.Pro/Models/SearchDataItem.cs @@ -0,0 +1,11 @@ +namespace AntDesign.Pro.Template.Models +{ + public class SearchDataItem + { + public int Index { get; set; } + public string Keywod { get; set; } + public int Count { get; set; } + public int Range { get; set; } + public int Status { get; set; } + } +} \ No newline at end of file diff --git a/src/AntDesign.Pro/Pages/Account/Center/Components/Applications/Applications.razor b/src/AntDesign.Pro/Pages/Account/Center/Components/Applications/Applications.razor index e69de29..b81fc8b 100644 --- a/src/AntDesign.Pro/Pages/Account/Center/Components/Applications/Applications.razor +++ b/src/AntDesign.Pro/Pages/Account/Center/Components/Applications/Applications.razor @@ -0,0 +1,62 @@ +@namespace AntDesign.Pro.Template.Pages.Account.Center + + + + + + + + + @context.Title + +
+
+
+

活跃用户

+

@FormatWan(context.ActiveUser)

+
+
+

新增用户

+

@context.NewUser.ToString("0,0")

+
+
+
+
+
+
+ +@code +{ + private static readonly RenderFragment Download = @ + + ; + + private static readonly IList Actions = new List + { + Download, + @, + @, + @ + }; + + private static RenderFragment FormatWan(int val) + { + if (val > 10000) + { + val = (int)Math.Floor((double)val / 10000); + } + + return @ + @val + + ; + } +} diff --git a/src/AntDesign.Pro/Pages/Account/Center/Components/Applications/Applications.razor.cs b/src/AntDesign.Pro/Pages/Account/Center/Components/Applications/Applications.razor.cs new file mode 100644 index 0000000..63313a3 --- /dev/null +++ b/src/AntDesign.Pro/Pages/Account/Center/Components/Applications/Applications.razor.cs @@ -0,0 +1,18 @@ +using System.Collections.Generic; +using AntDesign.Pro.Template.Models; +using Microsoft.AspNetCore.Components; +using AntDesign; + +namespace AntDesign.Pro.Template.Pages.Account.Center +{ + public partial class Applications + { + private readonly ListGridType _listGridType = new ListGridType + { + Gutter = 24, + Column = 4 + }; + + [Parameter] public IList List { get; set; } + } +} \ No newline at end of file diff --git a/src/AntDesign.Pro/Pages/Account/Center/Components/ArticleListContent/ArticleListContent.razor b/src/AntDesign.Pro/Pages/Account/Center/Components/ArticleListContent/ArticleListContent.razor index e69de29..268537a 100644 --- a/src/AntDesign.Pro/Pages/Account/Center/Components/ArticleListContent/ArticleListContent.razor +++ b/src/AntDesign.Pro/Pages/Account/Center/Components/ArticleListContent/ArticleListContent.razor @@ -0,0 +1,16 @@ +@using AntDesign.Pro.Template.Models +@namespace AntDesign.Pro.Template.Pages.Account.Center + +
+
@Data.Content
+
+ + @Data.Owner 发布在 @Data.Href + @Data.UpdatedAt.ToString("yyyy-MM-dd HH:mm:ss") +
+
+ +@code +{ + [Parameter] public ListItemDataType Data { get; set; } +} diff --git a/src/AntDesign.Pro/Pages/Account/Center/Components/Articles/Articles.razor b/src/AntDesign.Pro/Pages/Account/Center/Components/Articles/Articles.razor index 280d06b..1d4ad70 100644 --- a/src/AntDesign.Pro/Pages/Account/Center/Components/Articles/Articles.razor +++ b/src/AntDesign.Pro/Pages/Account/Center/Components/Articles/Articles.razor @@ -1,27 +1,16 @@ -@namespace AntDesign.Pro.Pages.Account.Center +@namespace AntDesign.Pro.Template.Pages.Account.Center - - - - - <a href="https://ng.ant.design">@item.Title</a> - - - - - -@code -{ - public class BasicItem - { - public string Title { get; set; } - } - - public List data = new List - { - new BasicItem { Title = "Ant Design Title 1"}, - new BasicItem { Title = "Ant Design Title 2"}, - new BasicItem { Title = "Ant Design Title 3"}, - new BasicItem { Title = "Ant Design Title 4"}, - }; -} + + + + + @context.Title + + + + + \ No newline at end of file diff --git a/src/AntDesign.Pro/Pages/Account/Center/Components/Articles/Articles.razor.cs b/src/AntDesign.Pro/Pages/Account/Center/Components/Articles/Articles.razor.cs new file mode 100644 index 0000000..5e8c53e --- /dev/null +++ b/src/AntDesign.Pro/Pages/Account/Center/Components/Articles/Articles.razor.cs @@ -0,0 +1,11 @@ +using System.Collections.Generic; +using AntDesign.Pro.Template.Models; +using Microsoft.AspNetCore.Components; + +namespace AntDesign.Pro.Template.Pages.Account.Center +{ + public partial class Articles + { + [Parameter] public IList List { get; set; } + } +} \ No newline at end of file diff --git a/src/AntDesign.Pro/Pages/Account/Center/Components/AvatarList/AvatarList.razor b/src/AntDesign.Pro/Pages/Account/Center/Components/AvatarList/AvatarList.razor index e69de29..38581a9 100644 --- a/src/AntDesign.Pro/Pages/Account/Center/Components/AvatarList/AvatarList.razor +++ b/src/AntDesign.Pro/Pages/Account/Center/Components/AvatarList/AvatarList.razor @@ -0,0 +1,7 @@ +@namespace AntDesign.Pro.Template.Pages.Account.Center + +
+
    + @ChildContent +
+
\ No newline at end of file diff --git a/src/AntDesign.Pro/Pages/Account/Center/Components/AvatarList/AvatarList.razor.cs b/src/AntDesign.Pro/Pages/Account/Center/Components/AvatarList/AvatarList.razor.cs new file mode 100644 index 0000000..49129d1 --- /dev/null +++ b/src/AntDesign.Pro/Pages/Account/Center/Components/AvatarList/AvatarList.razor.cs @@ -0,0 +1,9 @@ +using Microsoft.AspNetCore.Components; + +namespace AntDesign.Pro.Template.Pages.Account.Center +{ + public partial class AvatarList + { + [Parameter] public RenderFragment ChildContent { get; set; } + } +} \ No newline at end of file diff --git a/src/AntDesign.Pro/Pages/Account/Center/Components/AvatarList/AvatarListItem.razor b/src/AntDesign.Pro/Pages/Account/Center/Components/AvatarList/AvatarListItem.razor new file mode 100644 index 0000000..0da4dea --- /dev/null +++ b/src/AntDesign.Pro/Pages/Account/Center/Components/AvatarList/AvatarListItem.razor @@ -0,0 +1,15 @@ +@namespace AntDesign.Pro.Template.Pages.Account.Center +@inherits AntDomComponentBase + +
  • + @if (string.IsNullOrEmpty(Tips)) + { + + + + } + else + { + + } +
  • \ No newline at end of file diff --git a/src/AntDesign.Pro/Pages/Account/Center/Components/AvatarList/AvatarListItem.razor.cs b/src/AntDesign.Pro/Pages/Account/Center/Components/AvatarList/AvatarListItem.razor.cs new file mode 100644 index 0000000..8e746cf --- /dev/null +++ b/src/AntDesign.Pro/Pages/Account/Center/Components/AvatarList/AvatarListItem.razor.cs @@ -0,0 +1,28 @@ +using Microsoft.AspNetCore.Components; + +namespace AntDesign.Pro.Template.Pages.Account.Center +{ + public partial class AvatarListItem + { + [Parameter] public string Size { get; set; } + [Parameter] public string Tips { get; set; } + [Parameter] public string Src { get; set; } + [Parameter] public EventCallback OnClick { get; set; } + + protected override void OnInitialized() + { + base.OnInitialized(); + SetClassMap(); + } + + protected void SetClassMap() + { + ClassMapper + .Clear() + .Add("avatarItem") + .If("avatarItemLarge", () => Size == "large") + .If("avatarItemSmall", () => Size == "small") + .If("avatarItemMini", () => Size == "mini"); + } + } +} \ No newline at end of file diff --git a/src/AntDesign.Pro/Pages/Account/Center/Components/Projects/Projects.razor b/src/AntDesign.Pro/Pages/Account/Center/Components/Projects/Projects.razor index e69de29..eba7d16 100644 --- a/src/AntDesign.Pro/Pages/Account/Center/Components/Projects/Projects.razor +++ b/src/AntDesign.Pro/Pages/Account/Center/Components/Projects/Projects.razor @@ -0,0 +1,35 @@ +@namespace AntDesign.Pro.Template.Pages.Account.Center + + + + + + @context.Title + + + + @context.SubDescription + @context.Title + +
    + @context.UpdatedAt.ToFriendlyDisplay() +
    + + @foreach (var member in context.Members) + { + + } + +
    +
    +
    +
    +
    +
    \ No newline at end of file diff --git a/src/AntDesign.Pro/Pages/Account/Center/Components/Projects/Projects.razor.cs b/src/AntDesign.Pro/Pages/Account/Center/Components/Projects/Projects.razor.cs new file mode 100644 index 0000000..6933833 --- /dev/null +++ b/src/AntDesign.Pro/Pages/Account/Center/Components/Projects/Projects.razor.cs @@ -0,0 +1,19 @@ +using System.Collections.Generic; +using AntDesign.Pro.Template.Models; +using Microsoft.AspNetCore.Components; +using AntDesign; + +namespace AntDesign.Pro.Template.Pages.Account.Center +{ + public partial class Projects + { + private readonly ListGridType _listGridType = new ListGridType + { + Gutter = 24, + Column = 4 + }; + + [Parameter] + public IList List { get; set; } + } +} \ No newline at end of file diff --git a/src/AntDesign.Pro/Pages/Account/Center/Components/Projects/Projects.razor.less b/src/AntDesign.Pro/Pages/Account/Center/Components/Projects/Projects.razor.less index bfa6147..c1194f3 100644 --- a/src/AntDesign.Pro/Pages/Account/Center/Components/Projects/Projects.razor.less +++ b/src/AntDesign.Pro/Pages/Account/Center/Components/Projects/Projects.razor.less @@ -2,7 +2,8 @@ .coverCardList { .card { - :global { + //todo: global break style + //:global { .ant-card-meta-title { margin-bottom: 4px; & > a { @@ -16,14 +17,14 @@ overflow: hidden; line-height: 22px; } - } + //} &:hover { - :global { + //:global { .ant-card-meta-title > a { color: @primary-color; } - } + //} } } @@ -46,9 +47,9 @@ margin-top: 24px; } - :global { + //:global { .ant-list .ant-list-item-content-single { max-width: 100%; } - } + //} } diff --git a/src/AntDesign.Pro/Pages/Account/Center/Index.razor b/src/AntDesign.Pro/Pages/Account/Center/Index.razor index 4bac631..5ad9722 100644 --- a/src/AntDesign.Pro/Pages/Account/Center/Index.razor +++ b/src/AntDesign.Pro/Pages/Account/Center/Index.razor @@ -1,4 +1,4 @@ -@namespace AntDesign.Pro.Pages.Account.Center +@namespace AntDesign.Pro.Template.Pages.Account.Center @page "/account/center" @@ -6,24 +6,25 @@
    - -
    @currentUser.Name
    -
    @currentUser.Signature
    + +
    @_currentUser.Name
    +
    @_currentUser.Signature
    -
    +

    - @currentUser.Title + @_currentUser.Title

    - @currentUser.Group + @_currentUser.Group

    - @currentUser.Geographic + @_currentUser.Geographic.Province.Label + @_currentUser.Geographic.City.Label

    @@ -31,11 +32,26 @@
    标签
    - @foreach (var item in lstTags) + @foreach (var tag in _currentUser.Tags) { - @item + @tag.Label + } + + @if (_inputVisible) + { + + } + else + { + + + } -
    @@ -48,63 +64,29 @@ - + - 文章 - + 文章 (@_fakeList.Count) + + + - 应用 - Content of Tab Pane 2 + 应用 (@_fakeList.Count) + + + - 项目 - Content of Tab Pane 3 + 项目 (@_fakeList.Count) + + + - + - -@code -{ - public class CurrentUser - { - public string Name { get; set; } - public string Avatar { get; set; } - public string Signature { get; set; } - public string Title { get; set; } - public string Group { get; set; } - public string Geographic { get; set; } - } - - private CurrentUser currentUser = new CurrentUser - { - Avatar = "https://gw.alipayobjects.com/zos/antfincdn/XAosXuNZyF/BiazfanxmamNRoxxVxka.png", - Name = "Serati Ma", - Signature = "海纳百川,有容乃大", - Title = "交互专家", - Group = "蚂蚁金服-某某某事业群-某某平台部-某某技术部-UED", - Geographic = "浙江省杭州市" - }; - private bool inputVisible = false; - private string inputValue = string.Empty; - - private string[] lstTags = new string[] - { - "很有想法的", - "专注设计", - "辣~", - "大长腿", - "川妹子", - "海纳百川" - }; - - private void ShowInput() - { - - } -} diff --git a/src/AntDesign.Pro/Pages/Account/Center/Index.razor.cs b/src/AntDesign.Pro/Pages/Account/Center/Index.razor.cs new file mode 100644 index 0000000..0308e1f --- /dev/null +++ b/src/AntDesign.Pro/Pages/Account/Center/Index.razor.cs @@ -0,0 +1,40 @@ +using System.Collections.Generic; +using System.Threading.Tasks; +using AntDesign.Pro.Template.Models; +using AntDesign.Pro.Template.Services; +using Microsoft.AspNetCore.Components; + +namespace AntDesign.Pro.Template.Pages.Account.Center +{ + public partial class Index + { + private CurrentUser _currentUser = new CurrentUser + { + Geographic = new GeographicType {City = new TagType(), Province = new TagType()} + }; + + private IList _fakeList = new List(); + private bool _inputVisible; + public string InputValue { get; set; } + + [Inject] public IProjectService ProjectService { get; set; } + [Inject] public IUserService UserService { get; set; } + + protected override async Task OnInitializedAsync() + { + await base.OnInitializedAsync(); + _currentUser = await UserService.GetCurrentUserAsync(); + _fakeList = await ProjectService.GetFakeListAsync(); + } + + protected void ShowInput() + { + _inputVisible = true; + } + + protected void HandleInputConfirm() + { + _inputVisible = false; + } + } +} \ No newline at end of file diff --git a/src/AntDesign.Pro/Pages/Account/Center/Index.razor.less b/src/AntDesign.Pro/Pages/Account/Center/Index.razor.less index f547b40..cdf6034 100644 --- a/src/AntDesign.Pro/Pages/Account/Center/Index.razor.less +++ b/src/AntDesign.Pro/Pages/Account/Center/Index.razor.less @@ -47,19 +47,19 @@ } .tags { - :global { + //:global { .ant-tag { margin-bottom: 8px; } - } + //} } .team { - :global { + //:global { .ant-avatar { margin-right: 12px; } - } + //} a { display: block; @@ -78,9 +78,9 @@ } .tabsCard { - :global { + //:global { .ant-card-head { padding: 0 16px; } - } + //} } diff --git a/src/AntDesign.Pro/Pages/Account/Settings/Components/BaseView.razor b/src/AntDesign.Pro/Pages/Account/Settings/Components/BaseView.razor index e69de29..841d6ff 100644 --- a/src/AntDesign.Pro/Pages/Account/Settings/Components/BaseView.razor +++ b/src/AntDesign.Pro/Pages/Account/Settings/Components/BaseView.razor @@ -0,0 +1,54 @@ +@namespace AntDesign.Pro.Template.Pages.Account.Settings + +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    +
    + Avatar +
    +
    + avatar +
    + +
    + +
    +
    +
    +
    \ No newline at end of file diff --git a/src/AntDesign.Pro/Pages/Account/Settings/Components/BaseView.razor.cs b/src/AntDesign.Pro/Pages/Account/Settings/Components/BaseView.razor.cs new file mode 100644 index 0000000..15c6483 --- /dev/null +++ b/src/AntDesign.Pro/Pages/Account/Settings/Components/BaseView.razor.cs @@ -0,0 +1,24 @@ +using System.Threading.Tasks; +using AntDesign.Pro.Template.Models; +using AntDesign.Pro.Template.Services; +using Microsoft.AspNetCore.Components; + +namespace AntDesign.Pro.Template.Pages.Account.Settings +{ + public partial class BaseView + { + private CurrentUser _currentUser = new CurrentUser(); + + [Inject] protected IUserService UserService { get; set; } + + private void HandleFinish() + { + } + + protected override async Task OnInitializedAsync() + { + await base.OnInitializedAsync(); + _currentUser = await UserService.GetCurrentUserAsync(); + } + } +} \ No newline at end of file diff --git a/src/AntDesign.Pro/Pages/Account/Settings/Components/BaseView.razor.less b/src/AntDesign.Pro/Pages/Account/Settings/Components/BaseView.razor.less index 19a9566..2388562 100644 --- a/src/AntDesign.Pro/Pages/Account/Settings/Components/BaseView.razor.less +++ b/src/AntDesign.Pro/Pages/Account/Settings/Components/BaseView.razor.less @@ -14,7 +14,7 @@ min-width: 224px; max-width: 448px; } - .right { + .right__b__1 { flex: 1; padding-left: 104px; .avatar_title { @@ -44,7 +44,7 @@ .baseView { flex-direction: column-reverse; - .right { + .right__b__1 { display: flex; flex-direction: column; align-items: center; diff --git a/src/AntDesign.Pro/Pages/Account/Settings/Components/BindingView.razor b/src/AntDesign.Pro/Pages/Account/Settings/Components/BindingView.razor new file mode 100644 index 0000000..0dd40c2 --- /dev/null +++ b/src/AntDesign.Pro/Pages/Account/Settings/Components/BindingView.razor @@ -0,0 +1,21 @@ +@namespace AntDesign.Pro.Template.Pages.Account.Settings + + + + + + + + + + + +@code +{ + private static RenderFragment _modify = @Bind; + + private readonly RenderFragment[] _actions = {_modify}; +} \ No newline at end of file diff --git a/src/AntDesign.Pro/Pages/Account/Settings/Components/BindingView.razor.cs b/src/AntDesign.Pro/Pages/Account/Settings/Components/BindingView.razor.cs new file mode 100644 index 0000000..dc199f2 --- /dev/null +++ b/src/AntDesign.Pro/Pages/Account/Settings/Components/BindingView.razor.cs @@ -0,0 +1,29 @@ +using AntDesign.Pro.Template.Models; + +namespace AntDesign.Pro.Template.Pages.Account.Settings +{ + public partial class BindingView + { + private readonly UserLiteItem[] _data = + { + new UserLiteItem + { + Avater = "taobao", + Title = "Binding Taobao", + Description = "Currently unbound Taobao account" + }, + new UserLiteItem + { + Avater = "alipay", + Title = "Binding Alipay", + Description = "Currently unbound Alipay account" + }, + new UserLiteItem + { + Avater = "dingding", + Title = "Binding DingTalk", + Description = "Currently unbound DingTalk account" + } + }; + } +} \ No newline at end of file diff --git a/src/AntDesign.Pro/Pages/Account/Settings/Components/GeographicView.razor b/src/AntDesign.Pro/Pages/Account/Settings/Components/GeographicView.razor index e69de29..b2c2544 100644 --- a/src/AntDesign.Pro/Pages/Account/Settings/Components/GeographicView.razor +++ b/src/AntDesign.Pro/Pages/Account/Settings/Components/GeographicView.razor @@ -0,0 +1,5 @@ +@namespace AntDesign.Pro.Template.Pages.Account.Settings + +

    + GeographicView +

    \ No newline at end of file diff --git a/src/AntDesign.Pro/Pages/Account/Settings/Components/NotificationView.razor b/src/AntDesign.Pro/Pages/Account/Settings/Components/NotificationView.razor new file mode 100644 index 0000000..17c6566 --- /dev/null +++ b/src/AntDesign.Pro/Pages/Account/Settings/Components/NotificationView.razor @@ -0,0 +1,18 @@ +@namespace AntDesign.Pro.Template.Pages.Account.Settings + + + + + @context.Title + + + + +@code +{ + private static RenderFragment _switch = @; + private readonly RenderFragment[] _actions = {_switch}; +} \ No newline at end of file diff --git a/src/AntDesign.Pro/Pages/Account/Settings/Components/NotificationView.razor.cs b/src/AntDesign.Pro/Pages/Account/Settings/Components/NotificationView.razor.cs new file mode 100644 index 0000000..79672e9 --- /dev/null +++ b/src/AntDesign.Pro/Pages/Account/Settings/Components/NotificationView.razor.cs @@ -0,0 +1,26 @@ +using AntDesign.Pro.Template.Models; + +namespace AntDesign.Pro.Template.Pages.Account.Settings +{ + public partial class NotificationView + { + private readonly UserLiteItem[] _data = + { + new UserLiteItem + { + Title = "Account Password", + Description = "Messages from other users will be notified in the form of a station letter" + }, + new UserLiteItem + { + Title = "System Messages", + Description = "System messages will be notified in the form of a station letter" + }, + new UserLiteItem + { + Title = "To-do Notification", + Description = "The to-do list will be notified in the form of a letter from the station" + } + }; + } +} \ No newline at end of file diff --git a/src/AntDesign.Pro/Pages/Account/Settings/Components/PhoneView.razor b/src/AntDesign.Pro/Pages/Account/Settings/Components/PhoneView.razor index e69de29..f21f768 100644 --- a/src/AntDesign.Pro/Pages/Account/Settings/Components/PhoneView.razor +++ b/src/AntDesign.Pro/Pages/Account/Settings/Components/PhoneView.razor @@ -0,0 +1,5 @@ +@namespace AntDesign.Pro.Template.Pages.Account.Settings + +

    + PhoneView +

    \ No newline at end of file diff --git a/src/AntDesign.Pro/Pages/Account/Settings/Components/SecurityView.razor b/src/AntDesign.Pro/Pages/Account/Settings/Components/SecurityView.razor new file mode 100644 index 0000000..36f0155 --- /dev/null +++ b/src/AntDesign.Pro/Pages/Account/Settings/Components/SecurityView.razor @@ -0,0 +1,18 @@ +@namespace AntDesign.Pro.Template.Pages.Account.Settings + + + + + @context.Title + + + + +@code +{ + private static RenderFragment _modify = @Modify; + private readonly RenderFragment[] _actions = {_modify}; +} \ No newline at end of file diff --git a/src/AntDesign.Pro/Pages/Account/Settings/Components/SecurityView.razor.cs b/src/AntDesign.Pro/Pages/Account/Settings/Components/SecurityView.razor.cs new file mode 100644 index 0000000..83ba2ad --- /dev/null +++ b/src/AntDesign.Pro/Pages/Account/Settings/Components/SecurityView.razor.cs @@ -0,0 +1,37 @@ +using AntDesign.Pro.Template.Models; + +namespace AntDesign.Pro.Template.Pages.Account.Settings +{ + public partial class SecurityView + { + private readonly UserLiteItem[] _data = + { + new UserLiteItem + { + Title = "Account Password", + Description = "Current password strength: : Strong" + }, + new UserLiteItem + { + Title = "Security Phone", + Description = "Bound phone: : 138****8293" + }, + new UserLiteItem + { + Title = "Security Question", + Description = + "The security question is not set, and the security policy can effectively protect the account security" + }, + new UserLiteItem + { + Title = "Backup Email", + Description = "Bound Email: : ant***sign.com" + }, + new UserLiteItem + { + Title = "MFA Device", + Description = "Unbound MFA device, after binding, can be confirmed twice" + } + }; + } +} \ No newline at end of file diff --git a/src/AntDesign.Pro/Pages/Account/Settings/Index.razor b/src/AntDesign.Pro/Pages/Account/Settings/Index.razor index 8dff6f1..fe9acc7 100644 --- a/src/AntDesign.Pro/Pages/Account/Settings/Index.razor +++ b/src/AntDesign.Pro/Pages/Account/Settings/Index.razor @@ -1,2 +1,36 @@ -@namespace AntDesign.Pro.Pages.Account.Settings -@page "/account/settings" \ No newline at end of file +@namespace AntDesign.Pro.Template.Pages.Account.Settings +@page "/account/settings" + + +
    +
    + + @foreach (var item in _menuMap) + { + @item.Value + } + +
    +
    +
    @_menuMap[_selectKey]
    + @switch (_selectKey) + { + case "base": + + break; + case "security": + + break; + case "binding": + + break; + case "notification": + + break; + } +
    +
    +
    \ No newline at end of file diff --git a/src/AntDesign.Pro/Pages/Account/Settings/Index.razor.cs b/src/AntDesign.Pro/Pages/Account/Settings/Index.razor.cs new file mode 100644 index 0000000..de05452 --- /dev/null +++ b/src/AntDesign.Pro/Pages/Account/Settings/Index.razor.cs @@ -0,0 +1,23 @@ +using System.Collections.Generic; +using AntDesign; + +namespace AntDesign.Pro.Template.Pages.Account.Settings +{ + public partial class Index + { + private readonly Dictionary _menuMap = new Dictionary + { + {"base", "Basic Settings"}, + {"security", "Security Settings"}, + {"binding", "Account Binding"}, + {"notification", "New Message Notification"}, + }; + + private string _selectKey = "base"; + + private void SelectKey(MenuItem item) + { + _selectKey = item.Key; + } + } +} \ No newline at end of file diff --git a/src/AntDesign.Pro/Pages/Account/Settings/Index.razor.less b/src/AntDesign.Pro/Pages/Account/Settings/Index.razor.less index d5c3693..759027c 100644 --- a/src/AntDesign.Pro/Pages/Account/Settings/Index.razor.less +++ b/src/AntDesign.Pro/Pages/Account/Settings/Index.razor.less @@ -1,6 +1,6 @@ @import '~antd/es/style/themes/default.less'; -.main { +.main__b__2 { display: flex; width: 100%; height: 100%; @@ -20,7 +20,7 @@ } } } - .right { + .right__b__0 { flex: 1; padding-top: 8px; padding-right: 40px; @@ -34,7 +34,7 @@ line-height: 28px; } } - :global { + //:global { .ant-list-split .ant-list-item:last-child { border-bottom: 1px solid @border-color-split; } @@ -42,9 +42,9 @@ padding-top: 14px; padding-bottom: 14px; } - } + //} } -:global { +//:global { .ant-list-item-meta { // 账号绑定图标 .taobao { @@ -81,16 +81,16 @@ font.weak { color: @error-color; } -} +//} @media screen and (max-width: @screen-md) { - .main { + .main__b__2 { flex-direction: column; .leftMenu { width: 100%; border: none; } - .right { + .right__b__0 { padding: 40px; } } diff --git a/src/AntDesign.Pro/Pages/Dashboard/Analysis/Components/Charts/Bar/Bar.razor b/src/AntDesign.Pro/Pages/Dashboard/Analysis/Components/Charts/Bar/Bar.razor index eaac174..1a95376 100644 --- a/src/AntDesign.Pro/Pages/Dashboard/Analysis/Components/Charts/Bar/Bar.razor +++ b/src/AntDesign.Pro/Pages/Dashboard/Analysis/Components/Charts/Bar/Bar.razor @@ -1 +1 @@ -@namespace AntDesign.Pro.Pages.Analysis \ No newline at end of file +@namespace AntDesign.Pro.Template.Pages.Dashboard.Analysis.Bar \ No newline at end of file diff --git a/src/AntDesign.Pro/Pages/Dashboard/Analysis/Components/Charts/ChartCard/ChartCard.razor b/src/AntDesign.Pro/Pages/Dashboard/Analysis/Components/Charts/ChartCard/ChartCard.razor index 0dc4ca4..540edb1 100644 --- a/src/AntDesign.Pro/Pages/Dashboard/Analysis/Components/Charts/ChartCard/ChartCard.razor +++ b/src/AntDesign.Pro/Pages/Dashboard/Analysis/Components/Charts/ChartCard/ChartCard.razor @@ -1,4 +1,4 @@ -@namespace AntDesign.Pro.Pages.Analysis +@namespace AntDesign.Pro.Template.Pages.Dashboard.Analysis @inherits AntDomComponentBase diff --git a/src/AntDesign.Pro/Pages/Dashboard/Analysis/Components/Charts/ChartCard/ChartCard.razor.cs b/src/AntDesign.Pro/Pages/Dashboard/Analysis/Components/Charts/ChartCard/ChartCard.razor.cs index 1eba0b3..ffe798b 100644 --- a/src/AntDesign.Pro/Pages/Dashboard/Analysis/Components/Charts/ChartCard/ChartCard.razor.cs +++ b/src/AntDesign.Pro/Pages/Dashboard/Analysis/Components/Charts/ChartCard/ChartCard.razor.cs @@ -1,6 +1,6 @@ using Microsoft.AspNetCore.Components; -namespace AntDesign.Pro.Pages.Analysis +namespace AntDesign.Pro.Template.Pages.Dashboard.Analysis { public partial class ChartCard { diff --git a/src/AntDesign.Pro/Pages/Dashboard/Analysis/Components/Charts/Field/Field.razor b/src/AntDesign.Pro/Pages/Dashboard/Analysis/Components/Charts/Field/Field.razor index 661762e..3ae5dda 100644 --- a/src/AntDesign.Pro/Pages/Dashboard/Analysis/Components/Charts/Field/Field.razor +++ b/src/AntDesign.Pro/Pages/Dashboard/Analysis/Components/Charts/Field/Field.razor @@ -1,4 +1,4 @@ -@namespace AntDesign.Pro.Pages.Analysis +@namespace AntDesign.Pro.Template.Pages.Dashboard.Analysis @inherits AntDomComponentBase
    diff --git a/src/AntDesign.Pro/Pages/Dashboard/Analysis/Components/Charts/Field/Field.razor.cs b/src/AntDesign.Pro/Pages/Dashboard/Analysis/Components/Charts/Field/Field.razor.cs index 89bfa58..5c7d8a1 100644 --- a/src/AntDesign.Pro/Pages/Dashboard/Analysis/Components/Charts/Field/Field.razor.cs +++ b/src/AntDesign.Pro/Pages/Dashboard/Analysis/Components/Charts/Field/Field.razor.cs @@ -1,6 +1,6 @@ using Microsoft.AspNetCore.Components; -namespace AntDesign.Pro.Pages.Analysis +namespace AntDesign.Pro.Template.Pages.Dashboard.Analysis { public partial class Field { diff --git a/src/AntDesign.Pro/Pages/Dashboard/Analysis/Components/Charts/MiniArea/MiniArea.razor b/src/AntDesign.Pro/Pages/Dashboard/Analysis/Components/Charts/MiniArea/MiniArea.razor index e12dead..7f6e4b9 100644 --- a/src/AntDesign.Pro/Pages/Dashboard/Analysis/Components/Charts/MiniArea/MiniArea.razor +++ b/src/AntDesign.Pro/Pages/Dashboard/Analysis/Components/Charts/MiniArea/MiniArea.razor @@ -1,5 +1,6 @@ -@namespace AntDesign.Pro.Pages.Analysis -@inject ChartService ChartService +@using AntDesign.Pro.Template.Services +@namespace AntDesign.Pro.Template.Pages.Dashboard.Analysis +@inject IChartService ChartService diff --git a/src/AntDesign.Pro/Pages/Dashboard/Analysis/Components/Charts/MiniBar/MiniBar.razor b/src/AntDesign.Pro/Pages/Dashboard/Analysis/Components/Charts/MiniBar/MiniBar.razor index fc07a8e..c6864ac 100644 --- a/src/AntDesign.Pro/Pages/Dashboard/Analysis/Components/Charts/MiniBar/MiniBar.razor +++ b/src/AntDesign.Pro/Pages/Dashboard/Analysis/Components/Charts/MiniBar/MiniBar.razor @@ -1,5 +1,6 @@ -@namespace AntDesign.Pro.Pages.Analysis -@inject ChartService ChartService +@using AntDesign.Pro.Template.Services +@namespace AntDesign.Pro.Template.Pages.Dashboard.Analysis +@inject IChartService ChartService @code diff --git a/src/AntDesign.Pro/Pages/Dashboard/Analysis/Components/Charts/MiniProgress/MiniProgress.razor b/src/AntDesign.Pro/Pages/Dashboard/Analysis/Components/Charts/MiniProgress/MiniProgress.razor index 0661d6a..1d6220e 100644 --- a/src/AntDesign.Pro/Pages/Dashboard/Analysis/Components/Charts/MiniProgress/MiniProgress.razor +++ b/src/AntDesign.Pro/Pages/Dashboard/Analysis/Components/Charts/MiniProgress/MiniProgress.razor @@ -1,4 +1,4 @@ -@namespace AntDesign.Pro.Pages.Analysis +@namespace AntDesign.Pro.Template.Pages.Dashboard.Analysis @inherits AntDomComponentBase
    diff --git a/src/AntDesign.Pro/Pages/Dashboard/Analysis/Components/SaleItem.cs b/src/AntDesign.Pro/Pages/Dashboard/Analysis/Components/SaleItem.cs new file mode 100644 index 0000000..f29d812 --- /dev/null +++ b/src/AntDesign.Pro/Pages/Dashboard/Analysis/Components/SaleItem.cs @@ -0,0 +1,12 @@ +namespace AntDesign.Pro.Template.Pages.Dashboard.Analysis +{ + public partial class SalesCard + { + public class SaleItem + { + public int Id { get; set; } + public string Title { get; set; } + public string Total { get; set; } + } + } +} \ No newline at end of file diff --git a/src/AntDesign.Pro/Pages/Dashboard/Analysis/Components/SalesCard.razor b/src/AntDesign.Pro/Pages/Dashboard/Analysis/Components/SalesCard.razor index 652be9e..07387a4 100644 --- a/src/AntDesign.Pro/Pages/Dashboard/Analysis/Components/SalesCard.razor +++ b/src/AntDesign.Pro/Pages/Dashboard/Analysis/Components/SalesCard.razor @@ -1,146 +1,77 @@ -@namespace AntDesign.Pro.Pages.Analysis +@namespace AntDesign.Pro.Template.Pages.Dashboard.Analysis @inherits AntDomComponentBase -
    - - - Sales - - - - - - -
    -

    - Sales Ranking -

    -
      - @foreach (var item in Items) - { -
    • - - @item.Id - - - @item.Title - - - @item.Total - -
    • - } -
    -
    -
    -
    -
    -
    - - Visits - - - - - - -
    -

    - Visits Ranking -

    -
      - @foreach (var item in Items) - { -
    • - - @item.Id - - - @item.Title - - - @item.Total - -
    • - } -
    -
    -
    -
    -
    -
    -
    -
    + +
    + + + Sales + + + + + + +
    +

    + Sales Ranking +

    +
      + @foreach (var item in Items) + { +
    • + + @item.Id + + + @item.Title + + + @item.Total + +
    • + } +
    +
    +
    +
    +
    +
    + + Visits + + + + + + +
    +

    + Visits Ranking +

    +
      + @foreach (var item in Items) + { +
    • + + @item.Id + + + @item.Title + + + @item.Total + +
    • + } +
    +
    +
    +
    +
    +
    +
    +
    +
    - -@code -{ - public class SaleItem - { - public int Id { get; set; } - public string Title { get; set; } - public string Total { get; set; } - } - - private IChartComponent _saleChart; - private IChartComponent _visitChart; - private ColumnConfig _saleChartConfig = new ColumnConfig - { - Title = new AntDesign.Charts.Title - { - Visible = true, - Text = "Stores Sales Trend" - }, - ForceFit = true, - Padding = "auto", - XField = "x", - YField = "y" - }; - private ColumnConfig _visitChartConfig = new ColumnConfig - { - Title = new AntDesign.Charts.Title - { - Visible = true, - Text = "Visits Trend" - }, - ForceFit = true, - Padding = "auto", - XField = "x", - YField = "y" - }; - - - public SaleItem[] Items { get; set; } = - { - new SaleItem {Id = 1, Title = "Gongzhuan No.0 shop", Total = "323,234"}, - new SaleItem {Id = 2, Title = "Gongzhuan No.1 shop", Total = "323,234"}, - new SaleItem {Id = 3, Title = "Gongzhuan No.2 shop", Total = "323,234"}, - new SaleItem {Id = 4, Title = "Gongzhuan No.3 shop", Total = "323,234"}, - new SaleItem {Id = 5, Title = "Gongzhuan No.4 shop", Total = "323,234"}, - new SaleItem {Id = 6, Title = "Gongzhuan No.5 shop", Total = "323,234"}, - new SaleItem {Id = 7, Title = "Gongzhuan No.6 shop", Total = "323,234"}, - }; - - [Inject] - public ChartService ChartService { get; set; } - - protected override async Task OnInitializedAsync() - { - await base.OnInitializedAsync(); - await OnTabChanged("1"); - } - - private async Task OnTabChanged(string activeKey) - { - var data = await ChartService.GetSalesDataAsync(); - if (activeKey == "1") - { - await _saleChart.ChangeData(data); - } - else - { - await _visitChart.ChangeData(data); - } - } -} diff --git a/src/AntDesign.Pro/Pages/Dashboard/Analysis/Components/SalesCard.razor.cs b/src/AntDesign.Pro/Pages/Dashboard/Analysis/Components/SalesCard.razor.cs index e69de29..f71b434 100644 --- a/src/AntDesign.Pro/Pages/Dashboard/Analysis/Components/SalesCard.razor.cs +++ b/src/AntDesign.Pro/Pages/Dashboard/Analysis/Components/SalesCard.razor.cs @@ -0,0 +1,68 @@ +using System.Threading.Tasks; +using AntDesign.Charts; +using AntDesign.Pro.Template.Services; +using Microsoft.AspNetCore.Components; + +namespace AntDesign.Pro.Template.Pages.Dashboard.Analysis +{ + public partial class SalesCard + { + private readonly ColumnConfig _saleChartConfig = new ColumnConfig + { + Title = new AntDesign.Charts.Title + { + Visible = true, + Text = "Stores Sales Trend" + }, + ForceFit = true, + Padding = "auto", + XField = "x", + YField = "y" + }; + + private readonly ColumnConfig _visitChartConfig = new ColumnConfig + { + Title = new AntDesign.Charts.Title + { + Visible = true, + Text = "Visits Trend" + }, + ForceFit = true, + Padding = "auto", + XField = "x", + YField = "y" + }; + + private IChartComponent _saleChart; + private IChartComponent _visitChart; + + [Parameter] + public SaleItem[] Items { get; set; } = + { + new SaleItem {Id = 1, Title = "Gongzhuan No.0 shop", Total = "323,234"}, + new SaleItem {Id = 2, Title = "Gongzhuan No.1 shop", Total = "323,234"}, + new SaleItem {Id = 3, Title = "Gongzhuan No.2 shop", Total = "323,234"}, + new SaleItem {Id = 4, Title = "Gongzhuan No.3 shop", Total = "323,234"}, + new SaleItem {Id = 5, Title = "Gongzhuan No.4 shop", Total = "323,234"}, + new SaleItem {Id = 6, Title = "Gongzhuan No.5 shop", Total = "323,234"}, + new SaleItem {Id = 7, Title = "Gongzhuan No.6 shop", Total = "323,234"} + }; + + [Inject] public IChartService ChartService { get; set; } + + protected override async Task OnInitializedAsync() + { + await base.OnInitializedAsync(); + await OnTabChanged("1"); + } + + private async Task OnTabChanged(string activeKey) + { + var data = await ChartService.GetSalesDataAsync(); + if (activeKey == "1") + await _saleChart.ChangeData(data); + else + await _visitChart.ChangeData(data); + } + } +} \ No newline at end of file diff --git a/src/AntDesign.Pro/Pages/Dashboard/Analysis/Components/Trend/Trend.razor b/src/AntDesign.Pro/Pages/Dashboard/Analysis/Components/Trend/Trend.razor index c1c4097..2f0d3b7 100644 --- a/src/AntDesign.Pro/Pages/Dashboard/Analysis/Components/Trend/Trend.razor +++ b/src/AntDesign.Pro/Pages/Dashboard/Analysis/Components/Trend/Trend.razor @@ -1,4 +1,4 @@ -@namespace AntDesign.Pro.Pages.Analysis +@namespace AntDesign.Pro.Template.Pages.Dashboard.Analysis @inherits AntDomComponentBase
    diff --git a/src/AntDesign.Pro/Pages/Dashboard/Analysis/Components/Trend/Trend.razor.cs b/src/AntDesign.Pro/Pages/Dashboard/Analysis/Components/Trend/Trend.razor.cs index 1419645..f040802 100644 --- a/src/AntDesign.Pro/Pages/Dashboard/Analysis/Components/Trend/Trend.razor.cs +++ b/src/AntDesign.Pro/Pages/Dashboard/Analysis/Components/Trend/Trend.razor.cs @@ -1,6 +1,6 @@ using Microsoft.AspNetCore.Components; -namespace AntDesign.Pro.Pages.Analysis +namespace AntDesign.Pro.Template.Pages.Dashboard.Analysis { public partial class Trend { diff --git a/src/AntDesign.Pro/Pages/Dashboard/Analysis/Index.razor b/src/AntDesign.Pro/Pages/Dashboard/Analysis/Index.razor index 171f9cf..c6183b1 100644 --- a/src/AntDesign.Pro/Pages/Dashboard/Analysis/Index.razor +++ b/src/AntDesign.Pro/Pages/Dashboard/Analysis/Index.razor @@ -1,4 +1,4 @@ -@namespace AntDesign.Pro.Pages.Analysis +@namespace AntDesign.Pro.Template.Pages.Dashboard.Analysis @page "/" diff --git a/src/AntDesign.Pro/Pages/Dashboard/Monitor/Components/ActiveChart/ActiveChart.razor b/src/AntDesign.Pro/Pages/Dashboard/Monitor/Components/ActiveChart/ActiveChart.razor index 8dfe510..635b1f4 100644 --- a/src/AntDesign.Pro/Pages/Dashboard/Monitor/Components/ActiveChart/ActiveChart.razor +++ b/src/AntDesign.Pro/Pages/Dashboard/Monitor/Components/ActiveChart/ActiveChart.razor @@ -1,4 +1,5 @@ -@namespace AntDesign.Pro.Pages.Monitor +@namespace AntDesign.Pro.Template.Pages.Dashboard.Monitor +@using AntDesign.Pro.Template.Models @inherits AntDomComponentBase
    diff --git a/src/AntDesign.Pro/Pages/Dashboard/Monitor/Components/Charts/Gauge/Gauge.razor b/src/AntDesign.Pro/Pages/Dashboard/Monitor/Components/Charts/Gauge/Gauge.razor index 595b1f9..bb5cef5 100644 --- a/src/AntDesign.Pro/Pages/Dashboard/Monitor/Components/Charts/Gauge/Gauge.razor +++ b/src/AntDesign.Pro/Pages/Dashboard/Monitor/Components/Charts/Gauge/Gauge.razor @@ -1,4 +1,4 @@ -@namespace AntDesign.Pro.Pages.Monitor +@namespace AntDesign.Pro.Template.Pages.Dashboard.Monitor @inherits AntDomComponentBase
    diff --git a/src/AntDesign.Pro/Pages/Dashboard/Monitor/Components/Charts/Gauge/Gauge.razor.cs b/src/AntDesign.Pro/Pages/Dashboard/Monitor/Components/Charts/Gauge/Gauge.razor.cs index 377e43b..715000f 100644 --- a/src/AntDesign.Pro/Pages/Dashboard/Monitor/Components/Charts/Gauge/Gauge.razor.cs +++ b/src/AntDesign.Pro/Pages/Dashboard/Monitor/Components/Charts/Gauge/Gauge.razor.cs @@ -1,6 +1,6 @@ using Microsoft.AspNetCore.Components; -namespace AntDesign.Pro.Pages.Monitor.Components +namespace AntDesign.Pro.Template.Pages.Dashboard.Monitor { public partial class Gauge { diff --git a/src/AntDesign.Pro/Pages/Dashboard/Monitor/Components/Charts/Map/Map.razor b/src/AntDesign.Pro/Pages/Dashboard/Monitor/Components/Charts/Map/Map.razor index e01db2d..76348f8 100644 --- a/src/AntDesign.Pro/Pages/Dashboard/Monitor/Components/Charts/Map/Map.razor +++ b/src/AntDesign.Pro/Pages/Dashboard/Monitor/Components/Charts/Map/Map.razor @@ -1,4 +1,4 @@ -@namespace AntDesign.Pro.Pages.Monitor +@namespace AntDesign.Pro.Template.Pages.Dashboard.Monitor @inherits AntDomComponentBase
    diff --git a/src/AntDesign.Pro/Pages/Dashboard/Monitor/Components/Charts/Map/MiniArea.razor b/src/AntDesign.Pro/Pages/Dashboard/Monitor/Components/Charts/Map/MiniArea.razor index 7c9ebcc..6d0b366 100644 --- a/src/AntDesign.Pro/Pages/Dashboard/Monitor/Components/Charts/Map/MiniArea.razor +++ b/src/AntDesign.Pro/Pages/Dashboard/Monitor/Components/Charts/Map/MiniArea.razor @@ -1,4 +1,5 @@ -@namespace AntDesign.Pro.Pages.Monitor +@using AntDesign.Pro.Template.Models +@namespace AntDesign.Pro.Template.Pages.Dashboard.Monitor diff --git a/src/AntDesign.Pro/Pages/Dashboard/Monitor/Components/Charts/Pie/Pie.razor b/src/AntDesign.Pro/Pages/Dashboard/Monitor/Components/Charts/Pie/Pie.razor index d358642..3076250 100644 --- a/src/AntDesign.Pro/Pages/Dashboard/Monitor/Components/Charts/Pie/Pie.razor +++ b/src/AntDesign.Pro/Pages/Dashboard/Monitor/Components/Charts/Pie/Pie.razor @@ -1,3 +1,3 @@ -@namespace AntDesign.Pro.Pages.Monitor +@namespace AntDesign.Pro.Template.Pages.Dashboard.Monitor
    \ No newline at end of file diff --git a/src/AntDesign.Pro/Pages/Dashboard/Monitor/Components/Charts/Pie/Pie.razor.cs b/src/AntDesign.Pro/Pages/Dashboard/Monitor/Components/Charts/Pie/Pie.razor.cs index 476ef39..e13c380 100644 --- a/src/AntDesign.Pro/Pages/Dashboard/Monitor/Components/Charts/Pie/Pie.razor.cs +++ b/src/AntDesign.Pro/Pages/Dashboard/Monitor/Components/Charts/Pie/Pie.razor.cs @@ -1,6 +1,6 @@ using Microsoft.AspNetCore.Components; -namespace AntDesign.Pro.Pages.Monitor.Components +namespace AntDesign.Pro.Template.Pages.Dashboard.Monitor { public partial class Pie { diff --git a/src/AntDesign.Pro/Pages/Dashboard/Monitor/Components/Charts/TagCloud/TagCloud.razor b/src/AntDesign.Pro/Pages/Dashboard/Monitor/Components/Charts/TagCloud/TagCloud.razor index 6bff680..79b7b87 100644 --- a/src/AntDesign.Pro/Pages/Dashboard/Monitor/Components/Charts/TagCloud/TagCloud.razor +++ b/src/AntDesign.Pro/Pages/Dashboard/Monitor/Components/Charts/TagCloud/TagCloud.razor @@ -1 +1 @@ -@namespace AntDesign.Pro.Pages.Monitor \ No newline at end of file +@namespace AntDesign.Pro.Template.Pages.Dashboard.Monitor \ No newline at end of file diff --git a/src/AntDesign.Pro/Pages/Dashboard/Monitor/Components/Charts/TagCloud/TagCloud.razor.cs b/src/AntDesign.Pro/Pages/Dashboard/Monitor/Components/Charts/TagCloud/TagCloud.razor.cs index ac8c8a4..5c64969 100644 --- a/src/AntDesign.Pro/Pages/Dashboard/Monitor/Components/Charts/TagCloud/TagCloud.razor.cs +++ b/src/AntDesign.Pro/Pages/Dashboard/Monitor/Components/Charts/TagCloud/TagCloud.razor.cs @@ -1,6 +1,6 @@ using Microsoft.AspNetCore.Components; -namespace AntDesign.Pro.Pages.Monitor.Components +namespace AntDesign.Pro.Template.Pages.Dashboard.Monitor { public partial class TagCloud { diff --git a/src/AntDesign.Pro/Pages/Dashboard/Monitor/Components/Charts/WaterWave/WaterWave.razor b/src/AntDesign.Pro/Pages/Dashboard/Monitor/Components/Charts/WaterWave/WaterWave.razor index 451841e..c328f58 100644 --- a/src/AntDesign.Pro/Pages/Dashboard/Monitor/Components/Charts/WaterWave/WaterWave.razor +++ b/src/AntDesign.Pro/Pages/Dashboard/Monitor/Components/Charts/WaterWave/WaterWave.razor @@ -1,3 +1,3 @@ -@namespace AntDesign.Pro.Pages.Monitor +@namespace AntDesign.Pro.Template.Pages.Dashboard.Monitor
    \ No newline at end of file diff --git a/src/AntDesign.Pro/Pages/Dashboard/Monitor/Components/Charts/WaterWave/WaterWave.razor.cs b/src/AntDesign.Pro/Pages/Dashboard/Monitor/Components/Charts/WaterWave/WaterWave.razor.cs index 35a8f16..62b1d2d 100644 --- a/src/AntDesign.Pro/Pages/Dashboard/Monitor/Components/Charts/WaterWave/WaterWave.razor.cs +++ b/src/AntDesign.Pro/Pages/Dashboard/Monitor/Components/Charts/WaterWave/WaterWave.razor.cs @@ -1,6 +1,6 @@ using Microsoft.AspNetCore.Components; -namespace AntDesign.Pro.Pages.Monitor.Components +namespace AntDesign.Pro.Template.Pages.Dashboard.Monitor { public partial class WaterWave { diff --git a/src/AntDesign.Pro/Pages/Dashboard/Monitor/Index.razor b/src/AntDesign.Pro/Pages/Dashboard/Monitor/Index.razor index 917bec3..3fe347a 100644 --- a/src/AntDesign.Pro/Pages/Dashboard/Monitor/Index.razor +++ b/src/AntDesign.Pro/Pages/Dashboard/Monitor/Index.razor @@ -1,4 +1,4 @@ -@namespace AntDesign.Pro.Pages.Monitor +@namespace AntDesign.Pro.Template.Pages.Dashboard.Monitor @page "/dashboard/monitor" diff --git a/src/AntDesign.Pro/Pages/Dashboard/Workplace/Components/EditableLinkGroup/EditableLinkGroup.razor b/src/AntDesign.Pro/Pages/Dashboard/Workplace/Components/EditableLinkGroup/EditableLinkGroup.razor index 7b5e94e..424008d 100644 --- a/src/AntDesign.Pro/Pages/Dashboard/Workplace/Components/EditableLinkGroup/EditableLinkGroup.razor +++ b/src/AntDesign.Pro/Pages/Dashboard/Workplace/Components/EditableLinkGroup/EditableLinkGroup.razor @@ -1,4 +1,4 @@ -@namespace AntDesign.Pro.Pages.Workplace +@namespace AntDesign.Pro.Template.Pages.Dashboard.Workplace
    @foreach (var link in Links) diff --git a/src/AntDesign.Pro/Pages/Dashboard/Workplace/Components/EditableLinkGroup/EditableLinkGroup.razor.cs b/src/AntDesign.Pro/Pages/Dashboard/Workplace/Components/EditableLinkGroup/EditableLinkGroup.razor.cs index 39d62c6..1bba643 100644 --- a/src/AntDesign.Pro/Pages/Dashboard/Workplace/Components/EditableLinkGroup/EditableLinkGroup.razor.cs +++ b/src/AntDesign.Pro/Pages/Dashboard/Workplace/Components/EditableLinkGroup/EditableLinkGroup.razor.cs @@ -1,6 +1,6 @@ using Microsoft.AspNetCore.Components; -namespace AntDesign.Pro.Pages.Workplace +namespace AntDesign.Pro.Template.Pages.Dashboard.Workplace { public class EditableLink { diff --git a/src/AntDesign.Pro/Pages/Dashboard/Workplace/Components/Radar/AutoHeight.razor b/src/AntDesign.Pro/Pages/Dashboard/Workplace/Components/Radar/AutoHeight.razor index bbdeae2..1b06665 100644 --- a/src/AntDesign.Pro/Pages/Dashboard/Workplace/Components/Radar/AutoHeight.razor +++ b/src/AntDesign.Pro/Pages/Dashboard/Workplace/Components/Radar/AutoHeight.razor @@ -1 +1 @@ -@namespace AntDesign.Pro.Pages.Workplace.Components \ No newline at end of file +@namespace AntDesign.Pro.Template.Pages.Dashboard.Workplace \ No newline at end of file diff --git a/src/AntDesign.Pro/Pages/Dashboard/Workplace/Components/Radar/Radar.razor b/src/AntDesign.Pro/Pages/Dashboard/Workplace/Components/Radar/Radar.razor index 392bd2c..ed28e62 100644 --- a/src/AntDesign.Pro/Pages/Dashboard/Workplace/Components/Radar/Radar.razor +++ b/src/AntDesign.Pro/Pages/Dashboard/Workplace/Components/Radar/Radar.razor @@ -1,4 +1,4 @@ -@namespace AntDesign.Pro.Pages.Workplace +@namespace AntDesign.Pro.Template.Pages.Dashboard.Workplace @@ -17,7 +17,7 @@ } -@inject ChartService ChartService +@inject IChartService ChartService @code { [Parameter] public bool HasLegend { get; set; } diff --git a/src/AntDesign.Pro/Pages/Dashboard/Workplace/Index.razor b/src/AntDesign.Pro/Pages/Dashboard/Workplace/Index.razor index e309782..ee414d6 100644 --- a/src/AntDesign.Pro/Pages/Dashboard/Workplace/Index.razor +++ b/src/AntDesign.Pro/Pages/Dashboard/Workplace/Index.razor @@ -1,6 +1,6 @@ -@namespace AntDesign.Pro.Pages.Workplace -@page "/dashboard/workplace" +@namespace AntDesign.Pro.Template.Pages.Dashboard.Workplace @using System.Text.RegularExpressions +@page "/dashboard/workplace" @@ -11,7 +11,7 @@ -
    +
    @@ -30,24 +30,23 @@
    - +
    - +
    - +
    - + 全部项目 @@ -55,27 +54,27 @@ @foreach (var item in _projectNotice) { - + - + <TitleTemplate> <div class="cardTitle"> <Avatar Size="small" Src="@item.Logo"></Avatar> <a href="@item.Href">@item.Title</a> </div> - - + +
    @item.Description
    -
    +
    @item.Member @if (!string.IsNullOrEmpty(item.UpdatedAt)) { - + }
    @@ -85,34 +84,33 @@
    - - - - - + <Card BodyStyle="padding: 0px;" + Class="activeCard" + Title="动态"> + <AntList TItem="ActivitiesType" + DataSource="@_activities" + Class="activitiesList" + Size="large" + ItemLayout="ListItemLayout.Horizontal"> + <ListItem> + <ListItemMeta Avatar="@context.User.Avatar" Description="@context.UpdatedAt.ToFriendlyDisplay()"> + <TitleTemplate> <span> - <a class="username">@item.User.Name</a> + <a class="username">@context.User.Name</a>   <span class="event"> - @foreach (var str in Regex.Split(item.Template, @"@\{([^{}]*)\}")) + @foreach (var str in Regex.Split(context.Template, @"@\{([^{}]*)\}")) { if (str == "group") { - <a href="@item.Group.Link" key="@item.Group.Name"> - @item.Group.Name + <a href="@context.Group.Link" key="@context.Group.Name"> + @context.Group.Name </a> } else if (str == "project") { - <a href="@item.Project.Link" key="@item.Project.Name"> - @item.Project.Name + <a href="@context.Project.Link" key="@context.Project.Name"> + @context.Project.Name </a> } else @@ -122,38 +120,35 @@ } </span> </span> - - - + + + - + - +
    - +
    - - + +
    @foreach (var item in _projectNotice) { - + @item.Member @@ -165,27 +160,3 @@ - -@inject ProjectService ProjectService -@code -{ - - private NoticeType[] _projectNotice = {}; - private ActivitiesType[] _activities = {}; - private readonly EditableLink[] _links = - { - new EditableLink{ Title = "操作一", Href = "" }, - new EditableLink{ Title = "操作二", Href = "" }, - new EditableLink{ Title = "操作三", Href = "" }, - new EditableLink{ Title = "操作四", Href = "" }, - new EditableLink{ Title = "操作五", Href = "" }, - new EditableLink{ Title = "操作六", Href = "" }, - }; - - protected override async Task OnInitializedAsync() - { - await base.OnInitializedAsync(); - _projectNotice = await ProjectService.GetProjectNoticeAsync(); - _activities = await ProjectService.GetActivitiesAsync(); - } -} diff --git a/src/AntDesign.Pro/Pages/Dashboard/Workplace/Index.razor.cs b/src/AntDesign.Pro/Pages/Dashboard/Workplace/Index.razor.cs new file mode 100644 index 0000000..4457e2b --- /dev/null +++ b/src/AntDesign.Pro/Pages/Dashboard/Workplace/Index.razor.cs @@ -0,0 +1,32 @@ +using System.Threading.Tasks; +using AntDesign.Pro.Template.Models; +using AntDesign.Pro.Template.Services; +using Microsoft.AspNetCore.Components; + +namespace AntDesign.Pro.Template.Pages.Dashboard.Workplace +{ + public partial class Index + { + private readonly EditableLink[] _links = + { + new EditableLink {Title = "操作一", Href = ""}, + new EditableLink {Title = "操作二", Href = ""}, + new EditableLink {Title = "操作三", Href = ""}, + new EditableLink {Title = "操作四", Href = ""}, + new EditableLink {Title = "操作五", Href = ""}, + new EditableLink {Title = "操作六", Href = ""} + }; + + private ActivitiesType[] _activities = { }; + private NoticeType[] _projectNotice = { }; + + [Inject] public IProjectService ProjectService { get; set; } + + protected override async Task OnInitializedAsync() + { + await base.OnInitializedAsync(); + _projectNotice = await ProjectService.GetProjectNoticeAsync(); + _activities = await ProjectService.GetActivitiesAsync(); + } + } +} \ No newline at end of file diff --git a/src/AntDesign.Pro/Pages/Dashboard/Workplace/Index.razor.less b/src/AntDesign.Pro/Pages/Dashboard/Workplace/Index.razor.less index 7791930..e84d702 100644 --- a/src/AntDesign.Pro/Pages/Dashboard/Workplace/Index.razor.less +++ b/src/AntDesign.Pro/Pages/Dashboard/Workplace/Index.razor.less @@ -34,7 +34,7 @@ } } -.pageHeaderContent { +.pageHeaderContent__b__0 { display: flex; .avatar { flex: 0 1 72px; diff --git a/src/AntDesign.Pro/Pages/Exception/403/403.razor b/src/AntDesign.Pro/Pages/Exception/403/403.razor index cdd5ddd..2737168 100644 --- a/src/AntDesign.Pro/Pages/Exception/403/403.razor +++ b/src/AntDesign.Pro/Pages/Exception/403/403.razor @@ -1,9 +1,9 @@ -@namespace AntDesign.Pro.Pages.Exception +@namespace AntDesign.Pro.Template.Pages.Exception @page "/exception/403" + Title="403" + SubTitle="Sorry, you are not authorized to access this page."> diff --git a/src/AntDesign.Pro/Pages/Exception/404/404.razor b/src/AntDesign.Pro/Pages/Exception/404/404.razor index 9dec9ff..399b929 100644 --- a/src/AntDesign.Pro/Pages/Exception/404/404.razor +++ b/src/AntDesign.Pro/Pages/Exception/404/404.razor @@ -1,9 +1,9 @@ -@namespace AntDesign.Pro.Pages.Exception +@namespace AntDesign.Pro.Template.Pages.Exception @page "/exception/404" + Title="404" + SubTitle="Sorry, the page you visited does not exist."> diff --git a/src/AntDesign.Pro/Pages/Exception/500/500.razor b/src/AntDesign.Pro/Pages/Exception/500/500.razor index a86939c..54cacff 100644 --- a/src/AntDesign.Pro/Pages/Exception/500/500.razor +++ b/src/AntDesign.Pro/Pages/Exception/500/500.razor @@ -1,9 +1,9 @@ -@namespace AntDesign.Pro.Pages.Exception +@namespace AntDesign.Pro.Template.Pages.Exception @page "/exception/500" + Title="500" + SubTitle="Sorry, something went wrong."> diff --git a/src/AntDesign.Pro/Pages/Form/AdvancedForm/AdvancedForm.razor b/src/AntDesign.Pro/Pages/Form/AdvancedForm/AdvancedForm.razor index 86eeed5..04ab722 100644 --- a/src/AntDesign.Pro/Pages/Form/AdvancedForm/AdvancedForm.razor +++ b/src/AntDesign.Pro/Pages/Form/AdvancedForm/AdvancedForm.razor @@ -1,2 +1,112 @@ -@namespace AntDesign.Pro.Pages.Form -@page "/form/advanced-form" \ No newline at end of file +@namespace AntDesign.Pro.Template.Pages.Form +@page "/form/advanced-form" + +
    + + 高级表单常见于一次性输入和提交大批量数据的场景。 + + + + + + + + + + + + http:// + .com + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    diff --git a/src/AntDesign.Pro/Pages/Form/AdvancedForm/AdvancedForm.razor.cs b/src/AntDesign.Pro/Pages/Form/AdvancedForm/AdvancedForm.razor.cs new file mode 100644 index 0000000..c37c5fc --- /dev/null +++ b/src/AntDesign.Pro/Pages/Form/AdvancedForm/AdvancedForm.razor.cs @@ -0,0 +1,9 @@ +using AntDesign.Pro.Template.Models; + +namespace AntDesign.Pro.Template.Pages.Form +{ + public partial class AdvancedForm + { + private readonly AdvancedFormModel _model = new AdvancedFormModel(); + } +} \ No newline at end of file diff --git a/src/AntDesign.Pro/Pages/Form/BasicForm/BasicForm.razor b/src/AntDesign.Pro/Pages/Form/BasicForm/BasicForm.razor index 69d23c6..f233865 100644 --- a/src/AntDesign.Pro/Pages/Form/BasicForm/BasicForm.razor +++ b/src/AntDesign.Pro/Pages/Form/BasicForm/BasicForm.razor @@ -1,77 +1,63 @@ -@namespace AntDesign.Pro.Pages.Form +@namespace AntDesign.Pro.Template.Pages.Form @page "/form/basic-form" - - - -
    - - - - - - - - - - - - - - - - - - - - - % - - - - Public - Partially public - Private - - - - - - -
    -
    -
    - -@code -{ - public class FormModel - { - public string Title { get; set; } - public string Client { get; set; } - public int Disclosure { get; set; } - public int Weight { get; set; } - } - - public RenderFragment Content = @Form pages are used to collect or verify information to users, and basic forms are common in scenarios where there are fewer data items.; - - public RenderFragment Breadcrumb = @ - - Home - - - Form - - - Basic Form - - ; - - private FormModel _model = new FormModel(); -} \ No newline at end of file + + + + Home + Form + Basic Form + + + + Form pages are used to collect or verify information to users, and basic forms are common in scenarios where there are fewer data items. + + + +
    + + + + + + + + + + + + + + + + + + + + + % + + + + Public + Partially public + Private + + + + + + +
    +
    +
    +
    \ No newline at end of file diff --git a/src/AntDesign.Pro/Pages/Form/BasicForm/BasicForm.razor.cs b/src/AntDesign.Pro/Pages/Form/BasicForm/BasicForm.razor.cs new file mode 100644 index 0000000..f5ece0f --- /dev/null +++ b/src/AntDesign.Pro/Pages/Form/BasicForm/BasicForm.razor.cs @@ -0,0 +1,13 @@ +using AntDesign.Pro.Template.Models; + +namespace AntDesign.Pro.Template.Pages.Form +{ + public partial class BasicForm + { + private readonly BasicFormModel _model = new BasicFormModel(); + + private void HandleSubmit() + { + } + } +} \ No newline at end of file diff --git a/src/AntDesign.Pro/Pages/Form/StepForm/Components/Step1/Step1.razor b/src/AntDesign.Pro/Pages/Form/StepForm/Components/Step1/Step1.razor index 5b79dc2..6b33e20 100644 --- a/src/AntDesign.Pro/Pages/Form/StepForm/Components/Step1/Step1.razor +++ b/src/AntDesign.Pro/Pages/Form/StepForm/Components/Step1/Step1.razor @@ -1 +1,47 @@ -@namespace AntDesign.Pro.Pages.Form \ No newline at end of file +@namespace AntDesign.Pro.Template.Pages.Form + +
    + + + + + + + + + + + + + + + + + + +
    + +
    +

    说明

    +

    转账到支付宝账户

    +

    + 如果需要,这里可以放一些关于产品的常见问题说明。如果需要,这里可以放一些关于产品的常见问题说明。如果需要,这里可以放一些关于产品的常见问题说明。 +

    +

    转账到银行卡

    +

    + 如果需要,这里可以放一些关于产品的常见问题说明。如果需要,这里可以放一些关于产品的常见问题说明。如果需要,这里可以放一些关于产品的常见问题说明。 +

    +
    diff --git a/src/AntDesign.Pro/Pages/Form/StepForm/Components/Step1/Step1.razor.cs b/src/AntDesign.Pro/Pages/Form/StepForm/Components/Step1/Step1.razor.cs new file mode 100644 index 0000000..6d21635 --- /dev/null +++ b/src/AntDesign.Pro/Pages/Form/StepForm/Components/Step1/Step1.razor.cs @@ -0,0 +1,17 @@ +using AntDesign.Pro.Template.Models; +using Microsoft.AspNetCore.Components; + +namespace AntDesign.Pro.Template.Pages.Form +{ + public partial class Step1 + { + private readonly StepFormModel _model = new StepFormModel(); + + [CascadingParameter] public StepForm StepForm { get; set; } + + public void OnValidateForm() + { + StepForm.Next(); + } + } +} \ No newline at end of file diff --git a/src/AntDesign.Pro/Pages/Form/StepForm/Components/Step2/Step2.razor b/src/AntDesign.Pro/Pages/Form/StepForm/Components/Step2/Step2.razor index 5b79dc2..9c6952e 100644 --- a/src/AntDesign.Pro/Pages/Form/StepForm/Components/Step2/Step2.razor +++ b/src/AntDesign.Pro/Pages/Form/StepForm/Components/Step2/Step2.razor @@ -1 +1,28 @@ -@namespace AntDesign.Pro.Pages.Form \ No newline at end of file +@namespace AntDesign.Pro.Template.Pages.Form + +
    + + + @_model.PayAccount + @_model.ReceiverAccount + @_model.ReceiverName + + + + + + + + + + + + + diff --git a/src/AntDesign.Pro/Pages/Form/StepForm/Components/Step2/Step2.razor.cs b/src/AntDesign.Pro/Pages/Form/StepForm/Components/Step2/Step2.razor.cs new file mode 100644 index 0000000..f38c15e --- /dev/null +++ b/src/AntDesign.Pro/Pages/Form/StepForm/Components/Step2/Step2.razor.cs @@ -0,0 +1,22 @@ +using AntDesign.Pro.Template.Models; +using Microsoft.AspNetCore.Components; + +namespace AntDesign.Pro.Template.Pages.Form +{ + public partial class Step2 + { + private readonly StepFormModel _model = new StepFormModel(); + + [CascadingParameter] public StepForm StepForm { get; set; } + + public void OnValidateForm() + { + StepForm.Next(); + } + + public void Preview() + { + StepForm.Prev(); + } + } +} \ No newline at end of file diff --git a/src/AntDesign.Pro/Pages/Form/StepForm/Components/Step3/Step3.razor b/src/AntDesign.Pro/Pages/Form/StepForm/Components/Step3/Step3.razor index 5b79dc2..54a044e 100644 --- a/src/AntDesign.Pro/Pages/Form/StepForm/Components/Step3/Step3.razor +++ b/src/AntDesign.Pro/Pages/Form/StepForm/Components/Step3/Step3.razor @@ -1 +1,26 @@ -@namespace AntDesign.Pro.Pages.Form \ No newline at end of file +@namespace AntDesign.Pro.Template.Pages.Form + + + + + + + +
    + + @_model.PayAccount + @_model.ReceiverAccount + @_model.ReceiverName + + + + +
    +
    +
    \ No newline at end of file diff --git a/src/AntDesign.Pro/Pages/Form/StepForm/Components/Step3/Step3.razor.cs b/src/AntDesign.Pro/Pages/Form/StepForm/Components/Step3/Step3.razor.cs new file mode 100644 index 0000000..652cced --- /dev/null +++ b/src/AntDesign.Pro/Pages/Form/StepForm/Components/Step3/Step3.razor.cs @@ -0,0 +1,13 @@ +using AntDesign.Pro.Template.Models; + +namespace AntDesign.Pro.Template.Pages.Form +{ + public partial class Step3 + { + private readonly StepFormModel _model = new StepFormModel(); + + public void OnFinish() + { + } + } +} \ No newline at end of file diff --git a/src/AntDesign.Pro/Pages/Form/StepForm/StepForm.razor b/src/AntDesign.Pro/Pages/Form/StepForm/StepForm.razor index 00b1626..0a98671 100644 --- a/src/AntDesign.Pro/Pages/Form/StepForm/StepForm.razor +++ b/src/AntDesign.Pro/Pages/Form/StepForm/StepForm.razor @@ -1,23 +1,38 @@ -@namespace AntDesign.Pro.Pages.Form +@namespace AntDesign.Pro.Template.Pages.Form @page "/form/step-form" - - + + + + Home + Form + Step Form + + + + 将一个冗长或用户不熟悉的表单任务分成多个步骤,指导用户完成。 + + + + + + + + + + @switch (_current) + { + case 0: + + break; + case 1: + + break; + case 2: + + break; + } + + + - -@code -{ - public RenderFragment Content = @将一个冗长或用户不熟悉的表单任务分成多个步骤,指导用户完成。; - - public RenderFragment Breadcrumb = @ - - Home - - - Form - - - Step Form - - ; -} diff --git a/src/AntDesign.Pro/Pages/Form/StepForm/StepForm.razor.cs b/src/AntDesign.Pro/Pages/Form/StepForm/StepForm.razor.cs new file mode 100644 index 0000000..6149932 --- /dev/null +++ b/src/AntDesign.Pro/Pages/Form/StepForm/StepForm.razor.cs @@ -0,0 +1,22 @@ +namespace AntDesign.Pro.Template.Pages.Form +{ + public partial class StepForm + { + private int _current; + + public void Next() + { + // todo: Not re-rendered + _current += 1; + StateHasChanged(); + } + + public void Prev() + { + // todo: Not re-rendered + if (_current <= 0) return; + _current -= 1; + StateHasChanged(); + } + } +} \ No newline at end of file diff --git a/src/AntDesign.Pro/Pages/Form/StepForm/StepForm.razor.less b/src/AntDesign.Pro/Pages/Form/StepForm/StepForm.razor.less index 15d3f3c..8ec4059 100644 --- a/src/AntDesign.Pro/Pages/Form/StepForm/StepForm.razor.less +++ b/src/AntDesign.Pro/Pages/Form/StepForm/StepForm.razor.less @@ -10,7 +10,8 @@ line-height: 22px; } -.steps:global(.ant-steps) { +//todo: global +.steps.ant-steps { max-width: 750px; margin: 16px auto; } diff --git a/src/AntDesign.Pro/Pages/List/BasicList/BasicList.razor b/src/AntDesign.Pro/Pages/List/BasicList/BasicList.razor new file mode 100644 index 0000000..e74e1c3 --- /dev/null +++ b/src/AntDesign.Pro/Pages/List/BasicList/BasicList.razor @@ -0,0 +1,109 @@ +@namespace AntDesign.Pro.Template.Pages.List +@page "/list/basic-list" + +
    + + + + Home + List + Basic List + + + +
    + + + + @Info("我的待办", "8个任务", true) + + + @Info("本周任务平均处理时间", "32分钟", true) + + + @Info("本周完成任务数", "24个任务") + + + + + + +
    + + 全部 + 进行中 + 等待中 + + +
    +
    + + + + + + + + @context.Title + + +
    +
    + Owner +

    @context.Owner

    +
    +
    + 开始时间 +

    @context.CreatedAt.ToString("yyyy-MM-dd HH:mm")

    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +@code +{ + private static readonly RenderFragment Edit = @ + 编辑 + ; + + private readonly RenderFragment[] _actions = + { + Edit + }; + + private RenderFragment Info(string title, string value, bool bordered = false) + { + return @
    + @title +

    @value

    + @if (bordered) + { + + } +
    ; + } +} diff --git a/src/AntDesign.Pro/Pages/List/BasicList/BasicList.razor.cs b/src/AntDesign.Pro/Pages/List/BasicList/BasicList.razor.cs new file mode 100644 index 0000000..6920a1f --- /dev/null +++ b/src/AntDesign.Pro/Pages/List/BasicList/BasicList.razor.cs @@ -0,0 +1,36 @@ +using System.Collections.Generic; +using System.Threading.Tasks; +using AntDesign.Pro.Template.Models; +using AntDesign.Pro.Template.Services; +using Microsoft.AspNetCore.Components; +using AntDesign; + +namespace AntDesign.Pro.Template.Pages.List +{ + public partial class BasicList + { + private readonly BasicListFormModel _model = new BasicListFormModel(); + + private readonly IDictionary _pStatus = new Dictionary + { + {"active", ProgressStatus.Active}, + {"exception", ProgressStatus.Exception}, + {"normal", ProgressStatus.Normal}, + {"success", ProgressStatus.Success} + }; + + private ListItemDataType[] _data = { }; + + [Inject] protected IProjectService ProjectService { get; set; } + + private void ShowModal() + { + } + + protected override async Task OnInitializedAsync() + { + await base.OnInitializedAsync(); + _data = await ProjectService.GetFakeListAsync(5); + } + } +} \ No newline at end of file diff --git a/src/AntDesign.Pro/Pages/List/BasicList/BasicList.razor.less b/src/AntDesign.Pro/Pages/List/BasicList/BasicList.razor.less new file mode 100644 index 0000000..acc2b0d --- /dev/null +++ b/src/AntDesign.Pro/Pages/List/BasicList/BasicList.razor.less @@ -0,0 +1,195 @@ +@import '~antd/es/style/themes/default.less'; +@import './utils/utils.less'; + +.standardList { + //:global { + .ant-card-head { + border-bottom: none; + } + .ant-card-head-title { + padding: 24px 0; + line-height: 32px; + } + .ant-card-extra { + padding: 24px 0; + } + .ant-list-pagination { + margin-top: 24px; + text-align: right; + } + .ant-avatar-lg { + width: 48px; + height: 48px; + line-height: 48px; + } + //} + .headerInfo { + position: relative; + text-align: center; + & > span { + display: inline-block; + margin-bottom: 4px; + color: @text-color-secondary; + font-size: @font-size-base; + line-height: 22px; + } + & > p { + margin: 0; + color: @heading-color; + font-size: 24px; + line-height: 32px; + } + & > em { + position: absolute; + top: 0; + right: 0; + width: 1px; + height: 56px; + background-color: @border-color-split; + } + } + .listContent { + font-size: 0; + .listContentItem { + display: inline-block; + margin-left: 40px; + color: @text-color-secondary; + font-size: @font-size-base; + vertical-align: middle; + > span { + line-height: 20px; + } + > p { + margin-top: 4px; + margin-bottom: 0; + line-height: 22px; + } + } + } + .extraContentSearch { + width: 272px; + margin-left: 16px; + } +} + +@media screen and (max-width: @screen-xs) { + .standardList { + //:global { + .ant-list-item-content { + display: block; + flex: none; + width: 100%; + } + .ant-list-item-action { + margin-left: 0; + } + //} + .listContent { + margin-left: 0; + & > div { + margin-left: 0; + } + } + .listCard { + //:global { + .ant-card-head-title { + overflow: visible; + } + //} + } + } +} + +@media screen and (max-width: @screen-sm) { + .standardList { + .extraContentSearch { + width: 100%; + margin-left: 0; + } + .headerInfo { + margin-bottom: 16px; + & > em { + display: none; + } + } + } +} + +@media screen and (max-width: @screen-md) { + .standardList { + .listContent { + & > div { + display: block; + } + & > div:last-child { + top: 0; + width: 100%; + } + } + } + .listCard { + //:global { + .ant-radio-group { + display: block; + margin-bottom: 8px; + } + //} + } +} + +@media screen and (max-width: @screen-lg) and (min-width: @screen-md) { + .standardList { + .listContent { + & > div { + display: block; + } + & > div:last-child { + top: 0; + width: 100%; + } + } + } +} + +@media screen and (max-width: @screen-xl) { + .standardList { + .listContent { + & > div { + margin-left: 24px; + } + & > div:last-child { + top: 0; + } + } + } +} + +@media screen and (max-width: 1400px) { + .standardList { + .listContent { + text-align: right; + & > div:last-child { + top: 0; + } + } + } +} + +.standardListForm { + //:global { + .ant-form-item { + margin-bottom: 12px; + &:last-child { + margin-bottom: 32px; + padding-top: 4px; + } + } + //} +} + +.formResult { + width: 100%; + [class^='title'] { + margin-bottom: 8px; + } +} diff --git a/src/AntDesign.Pro/Pages/List/BasicList/utils/utils.less b/src/AntDesign.Pro/Pages/List/BasicList/utils/utils.less new file mode 100644 index 0000000..de1aa64 --- /dev/null +++ b/src/AntDesign.Pro/Pages/List/BasicList/utils/utils.less @@ -0,0 +1,50 @@ +.textOverflow() { + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + word-break: break-all; +} + +.textOverflowMulti(@line: 3, @bg: #fff) { + position: relative; + max-height: @line * 1.5em; + margin-right: -1em; + padding-right: 1em; + overflow: hidden; + line-height: 1.5em; + text-align: justify; + &::before { + position: absolute; + right: 14px; + bottom: 0; + padding: 0 1px; + background: @bg; + content: '...'; + } + &::after { + position: absolute; + right: 14px; + width: 1em; + height: 1em; + margin-top: 0.2em; + background: white; + content: ''; + } +} + +// mixins for clearfix +// ------------------------ +.clearfix() { + zoom: 1; + &::before, + &::after { + display: table; + content: ' '; + } + &::after { + clear: both; + height: 0; + font-size: 0; + visibility: hidden; + } +} diff --git a/src/AntDesign.Pro/Pages/List/CardList/CardList.razor b/src/AntDesign.Pro/Pages/List/CardList/CardList.razor new file mode 100644 index 0000000..82651e0 --- /dev/null +++ b/src/AntDesign.Pro/Pages/List/CardList/CardList.razor @@ -0,0 +1,88 @@ +@namespace AntDesign.Pro.Template.Pages.List +@page "/list/card-list" + + + + + Home + List + Card List + + + +
    +

    + 段落示意:蚂蚁金服务设计平台 ant.design,用最小的工作量,无缝接入蚂蚁金服生态, + 提供跨越设计与开发的体验解决方案。 +

    + +
    +
    + +
    + 这是一个标题 +
    +
    + +
    + + + @if (string.IsNullOrEmpty(context.Id)) + { + + } + else + { + + + + + + + @context.Title + + + + + @context.Description + + + + + } + + +
    +
    +
    + +@code +{ + private static readonly RenderFragment Operate = @操作一; + + private readonly RenderFragment[] _actions = + { + Operate, + @操作二, + }; +} diff --git a/src/AntDesign.Pro/Pages/List/CardList/CardList.razor.cs b/src/AntDesign.Pro/Pages/List/CardList/CardList.razor.cs new file mode 100644 index 0000000..1a844fc --- /dev/null +++ b/src/AntDesign.Pro/Pages/List/CardList/CardList.razor.cs @@ -0,0 +1,31 @@ +using System.Collections.Generic; +using System.Threading.Tasks; +using AntDesign.Pro.Template.Models; +using AntDesign.Pro.Template.Services; +using Microsoft.AspNetCore.Components; +using AntDesign; + +namespace AntDesign.Pro.Template.Pages.List +{ + public partial class CardList + { + private readonly ListGridType _listGridType = new ListGridType + { + Gutter = 24, + Column = 4 + }; + + private ListItemDataType[] _data = { }; + + [Inject] protected IProjectService ProjectService { get; set; } + + protected override async Task OnInitializedAsync() + { + await base.OnInitializedAsync(); + var list = new List {new ListItemDataType()}; + var data = await ProjectService.GetFakeListAsync(8); + list.AddRange(data); + _data = list.ToArray(); + } + } +} \ No newline at end of file diff --git a/src/AntDesign.Pro/Pages/List/CardList/CardList.razor.less b/src/AntDesign.Pro/Pages/List/CardList/CardList.razor.less new file mode 100644 index 0000000..fc95a66 --- /dev/null +++ b/src/AntDesign.Pro/Pages/List/CardList/CardList.razor.less @@ -0,0 +1,107 @@ +@import '~antd/es/style/themes/default.less'; +@import './utils/utils.less'; + +.cardList { + .card { + //:global { + .ant-card-meta-title { + margin-bottom: 12px; + & > a { + display: inline-block; + max-width: 100%; + color: @heading-color; + } + } + .ant-card-body:hover { + .ant-card-meta-title > a { + color: @primary-color; + } + } + //} + } + .item { + height: 64px; + } + + //:global { + .ant-list .ant-list-item-content-single { + max-width: 100%; + } + //} +} + +.extraImg { + width: 155px; + margin-top: -20px; + text-align: center; + img { + width: 100%; + } +} + +.newButton { + width: 100%; + height: 201px; + color: @text-color-secondary; + background-color: @component-background; + border-color: @border-color-base; +} + +.cardAvatar { + width: 48px; + height: 48px; + border-radius: 48px; +} + +.cardDescription { + .textOverflowMulti(); +} + +.pageHeaderContent__b__1 { + position: relative; +} + +.contentLink { + margin-top: 16px; + a { + margin-right: 32px; + img { + width: 24px; + } + } + img { + margin-right: 8px; + vertical-align: middle; + } +} + +@media screen and (max-width: @screen-lg) { + .contentLink { + a { + margin-right: 16px; + } + } +} +@media screen and (max-width: @screen-md) { + .extraImg { + display: none; + } +} + +@media screen and (max-width: @screen-sm) { + .pageHeaderContent__b__1 { + padding-bottom: 30px; + } + .contentLink { + position: absolute; + bottom: -4px; + left: 0; + width: 1000px; + a { + margin-right: 16px; + } + img { + margin-right: 4px; + } + } +} diff --git a/src/AntDesign.Pro/Pages/List/CardList/utils/utils.less b/src/AntDesign.Pro/Pages/List/CardList/utils/utils.less new file mode 100644 index 0000000..de1aa64 --- /dev/null +++ b/src/AntDesign.Pro/Pages/List/CardList/utils/utils.less @@ -0,0 +1,50 @@ +.textOverflow() { + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + word-break: break-all; +} + +.textOverflowMulti(@line: 3, @bg: #fff) { + position: relative; + max-height: @line * 1.5em; + margin-right: -1em; + padding-right: 1em; + overflow: hidden; + line-height: 1.5em; + text-align: justify; + &::before { + position: absolute; + right: 14px; + bottom: 0; + padding: 0 1px; + background: @bg; + content: '...'; + } + &::after { + position: absolute; + right: 14px; + width: 1em; + height: 1em; + margin-top: 0.2em; + background: white; + content: ''; + } +} + +// mixins for clearfix +// ------------------------ +.clearfix() { + zoom: 1; + &::before, + &::after { + display: table; + content: ' '; + } + &::after { + clear: both; + height: 0; + font-size: 0; + visibility: hidden; + } +} diff --git a/src/AntDesign.Pro/Pages/List/Search/Applications/Applications.razor b/src/AntDesign.Pro/Pages/List/Search/Applications/Applications.razor new file mode 100644 index 0000000..9235415 --- /dev/null +++ b/src/AntDesign.Pro/Pages/List/Search/Applications/Applications.razor @@ -0,0 +1,110 @@ +@namespace AntDesign.Pro.Template.Pages.List +@layout SearchList +@page "/list/search/applications" + +
    + +
    + + + + 类目一 + 类目二 + 类目三 + 类目四 + 类目五 + 类目六 + 类目七 + 类目八 + 类目九 + 类目十 + 类目十一 + 类目十二 + + + + + + + + + + + + + + + + + +
    +
    +
    + + + + + + @context.Title + + + + + +
    +
    +
    +

    活跃用户

    +

    @FormatWan(context.ActiveUser)

    +
    +
    +

    新增用户

    +

    @context.NewUser.ToString("0,0")

    +
    +
    +
    +
    +
    +
    +
    + +@code +{ + private static readonly RenderFragment Download = @ + + ; + + private static readonly IList Actions = new List + { + Download, + @, + @, + @ + }; + + private static RenderFragment FormatWan(int val) + { + if (val > 10000) + { + val = (int)Math.Floor((double)val / 10000); + } + + return @ + @val + + ; + } +} diff --git a/src/AntDesign.Pro/Pages/List/Search/Applications/Applications.razor.cs b/src/AntDesign.Pro/Pages/List/Search/Applications/Applications.razor.cs new file mode 100644 index 0000000..a7af089 --- /dev/null +++ b/src/AntDesign.Pro/Pages/List/Search/Applications/Applications.razor.cs @@ -0,0 +1,32 @@ +using System.Collections.Generic; +using System.Threading.Tasks; +using AntDesign.Pro.Template.Models; +using AntDesign.Pro.Template.Services; +using Microsoft.AspNetCore.Components; +using AntDesign; + +namespace AntDesign.Pro.Template.Pages.List +{ + public partial class Applications + { + private readonly ListGridType _listGridType = new ListGridType + { + Gutter = 24, + Column = 4 + }; + + private readonly ListFormModel _model = new ListFormModel(); + private IList _selectCategories = new List(); + + private IList _fakeList = new List(); + + + [Inject] public IProjectService ProjectService { get; set; } + + protected override async Task OnInitializedAsync() + { + await base.OnInitializedAsync(); + _fakeList = await ProjectService.GetFakeListAsync(8); + } + } +} \ No newline at end of file diff --git a/src/AntDesign.Pro/Pages/List/Search/Applications/Applications.razor.less b/src/AntDesign.Pro/Pages/List/Search/Applications/Applications.razor.less new file mode 100644 index 0000000..fcf740f --- /dev/null +++ b/src/AntDesign.Pro/Pages/List/Search/Applications/Applications.razor.less @@ -0,0 +1,50 @@ +@import '~antd/es/style/themes/default.less'; + +.filterCardList { + //:global { + .ant-card-meta-content { + margin-top: 0; + } + // disabled white space + .ant-card-meta-avatar { + font-size: 0; + } + + .ant-list .ant-list-item-content-single { + max-width: 100%; + } + //} + .cardInfo { + margin-top: 16px; + margin-left: 40px; + zoom: 1; + &::before, + &::after { + display: table; + content: ' '; + } + &::after { + clear: both; + height: 0; + font-size: 0; + visibility: hidden; + } + & > div { + position: relative; + float: left; + width: 50%; + text-align: left; + p { + margin: 0; + font-size: 24px; + line-height: 32px; + } + p:first-child { + margin-bottom: 4px; + color: @text-color-secondary; + font-size: 12px; + line-height: 20px; + } + } + } +} diff --git a/src/AntDesign.Pro/Pages/List/Search/Applications/Components/StandardFormRow/StandardFormRow.razor b/src/AntDesign.Pro/Pages/List/Search/Applications/Components/StandardFormRow/StandardFormRow.razor new file mode 100644 index 0000000..893d5bb --- /dev/null +++ b/src/AntDesign.Pro/Pages/List/Search/Applications/Components/StandardFormRow/StandardFormRow.razor @@ -0,0 +1,14 @@ +@namespace AntDesign.Pro.Template.Pages.List +@inherits AntDomComponentBase + +
    + @if (!string.IsNullOrEmpty(Title)) + { +
    + @Title +
    + } +
    + @ChildContent +
    +
    diff --git a/src/AntDesign.Pro/Pages/List/Search/Applications/Components/StandardFormRow/StandardFormRow.razor.cs b/src/AntDesign.Pro/Pages/List/Search/Applications/Components/StandardFormRow/StandardFormRow.razor.cs new file mode 100644 index 0000000..782afa0 --- /dev/null +++ b/src/AntDesign.Pro/Pages/List/Search/Applications/Components/StandardFormRow/StandardFormRow.razor.cs @@ -0,0 +1,33 @@ +using Microsoft.AspNetCore.Components; + +namespace AntDesign.Pro.Template.Pages.List +{ + public partial class StandardFormRow + { + [Parameter] public string Title { get; set; } + + [Parameter] public bool Last { get; set; } + + [Parameter] public bool Block { get; set; } + + [Parameter] public bool Grid { get; set; } + + [Parameter] public RenderFragment ChildContent { get; set; } + + protected override void OnInitialized() + { + base.OnInitialized(); + SetClassMap(); + } + + protected void SetClassMap() + { + ClassMapper + .Clear() + .Add("standardFormRow") + .If("standardFormRowBlock", () => Block) + .If("standardFormRowLast", () => Last) + .If("standardFormRowGrid", () => Grid); + } + } +} \ No newline at end of file diff --git a/src/AntDesign.Pro/Pages/List/Search/Applications/Components/StandardFormRow/StandardFormRow.razor.less b/src/AntDesign.Pro/Pages/List/Search/Applications/Components/StandardFormRow/StandardFormRow.razor.less new file mode 100644 index 0000000..965f5b4 --- /dev/null +++ b/src/AntDesign.Pro/Pages/List/Search/Applications/Components/StandardFormRow/StandardFormRow.razor.less @@ -0,0 +1,88 @@ +@import '~antd/es/style/themes/default.less'; + +.standardFormRow { + display: flex; + width: 100%; + margin-bottom: 16px; + padding-bottom: 16px; + border-bottom: 1px dashed @border-color-split; + //:global { + .ant-form-item, + .ant-legacy-form-item { + margin-right: 24px; + } + .ant-form-item-label, + .ant-legacy-form-item-label { + label { + margin-right: 0; + color: @text-color; + } + } + .ant-form-item-label, + .ant-legacy-form-item-label, + .ant-form-item-control, + .ant-legacy-form-item-control { + padding: 0; + line-height: 32px; + } + //} + .label { + flex: 0 0 auto; + margin-right: 24px; + color: @heading-color; + font-size: @font-size-base; + text-align: right; + & > span { + display: inline-block; + height: 32px; + line-height: 32px; + &::after { + content: ':'; + } + } + } + .content { + flex: 1 1 0; + :global { + .ant-form-item, + .ant-legacy-form-item { + &:last-child { + display: block; + margin-right: 0; + } + } + } + } +} + +.standardFormRowLast { + margin-bottom: 0; + padding-bottom: 0; + border: none; +} + +.standardFormRowBlock { + :global { + .ant-form-item, + .ant-legacy-form-item, + div.ant-form-item-control-wrapper, + div.ant-legacy-form-item-control-wrapper { + display: block; + } + } +} + +.standardFormRowGrid { + //:global { + .ant-form-item, + .ant-legacy-form-item, + div.ant-form-item-control-wrapper, + div.ant-legacy-form-item-control-wrapper { + display: block; + } + .ant-form-item-label, + .ant-legacy-form-item-label { + float: left; + } + //} +} diff --git a/src/AntDesign.Pro/Pages/List/Search/Applications/Components/TagSelect/TagSelect.razor b/src/AntDesign.Pro/Pages/List/Search/Applications/Components/TagSelect/TagSelect.razor new file mode 100644 index 0000000..bacc889 --- /dev/null +++ b/src/AntDesign.Pro/Pages/List/Search/Applications/Components/TagSelect/TagSelect.razor @@ -0,0 +1,27 @@ +@namespace AntDesign.Pro.Template.Pages.List +@inherits AntDomComponentBase + +
    + @if (!HideCheckAll) + { + @SelectAllText + } + + + @ChildContent + + + @if (Expandable) + { + + @if (_expand) + { + @CollapseText + } + else + { + @ExpandText + } + + } +
    \ No newline at end of file diff --git a/src/AntDesign.Pro/Pages/List/Search/Applications/Components/TagSelect/TagSelect.razor.cs b/src/AntDesign.Pro/Pages/List/Search/Applications/Components/TagSelect/TagSelect.razor.cs new file mode 100644 index 0000000..cc89a8a --- /dev/null +++ b/src/AntDesign.Pro/Pages/List/Search/Applications/Components/TagSelect/TagSelect.razor.cs @@ -0,0 +1,67 @@ +using System.Collections.Generic; +using Microsoft.AspNetCore.Components; + +namespace AntDesign.Pro.Template.Pages.List +{ + public partial class TagSelect + { + private readonly IList _options = new List(); + private bool _checkedAll; + private bool _expand = false; + + [Parameter] public bool Expandable { get; set; } + + [Parameter] public bool HideCheckAll { get; set; } + + [Parameter] public string SelectAllText { get; set; } = "全部"; + + [Parameter] public string CollapseText { get; set; } = "收起"; + + [Parameter] public string ExpandText { get; set; } = "展开"; + + [Parameter] public IList Value { get; set; } + + [Parameter] public RenderFragment ChildContent { get; set; } + + protected override void OnInitialized() + { + base.OnInitialized(); + SetClassMap(); + } + + protected void SetClassMap() + { + ClassMapper + .Clear() + .Add("tagSelect") + .If("hasExpandTag", () => Expandable) + .If("expanded", () => _expand); + } + + private void HandleExpand() + { + _expand = !_expand; + } + + private void HandleCheckedChange(bool isChecked) + { + _checkedAll = isChecked; + foreach (var option in _options) option.Check(_checkedAll); + } + + public void AddOption(TagSelectOption option) + { + _options.Add(option); + } + + public void SelectItem(string value) + { + Value?.Add(value); + } + + public void UnSelectItem(string value) + { + Value?.Remove(value); + } + } +} \ No newline at end of file diff --git a/src/AntDesign.Pro/Pages/List/Search/Applications/Components/TagSelect/TagSelect.razor.less b/src/AntDesign.Pro/Pages/List/Search/Applications/Components/TagSelect/TagSelect.razor.less new file mode 100644 index 0000000..01899e6 --- /dev/null +++ b/src/AntDesign.Pro/Pages/List/Search/Applications/Components/TagSelect/TagSelect.razor.less @@ -0,0 +1,34 @@ +@import '~antd/es/style/themes/default.less'; + +.tagSelect { + position: relative; + max-height: 32px; + margin-left: -8px; + overflow: hidden; + line-height: 32px; + transition: all 0.3s; + user-select: none; + //:global { + .ant-tag { + margin-right: 24px; + padding: 0 8px; + font-size: @font-size-base; + } + //} + &.expanded { + max-height: 200px; + transition: all 0.3s; + } + .trigger { + position: absolute; + top: 0; + right: 0; + + span.anticon { + font-size: 12px; + } + } + &.hasExpandTag { + padding-right: 50px; + } +} diff --git a/src/AntDesign.Pro/Pages/List/Search/Applications/Components/TagSelect/TagSelectOption.razor b/src/AntDesign.Pro/Pages/List/Search/Applications/Components/TagSelect/TagSelectOption.razor new file mode 100644 index 0000000..2287cbe --- /dev/null +++ b/src/AntDesign.Pro/Pages/List/Search/Applications/Components/TagSelect/TagSelectOption.razor @@ -0,0 +1,4 @@ +@namespace AntDesign.Pro.Template.Pages.List +@inherits AntDomComponentBase + +@ChildContent \ No newline at end of file diff --git a/src/AntDesign.Pro/Pages/List/Search/Applications/Components/TagSelect/TagSelectOption.razor.cs b/src/AntDesign.Pro/Pages/List/Search/Applications/Components/TagSelect/TagSelectOption.razor.cs new file mode 100644 index 0000000..6f16cbd --- /dev/null +++ b/src/AntDesign.Pro/Pages/List/Search/Applications/Components/TagSelect/TagSelectOption.razor.cs @@ -0,0 +1,35 @@ +using Microsoft.AspNetCore.Components; + +namespace AntDesign.Pro.Template.Pages.List +{ + public partial class TagSelectOption + { + [Parameter] public string Value { get; set; } + + [Parameter] public bool Checked { get; set; } + + [Parameter] public RenderFragment ChildContent { get; set; } + + [CascadingParameter] public TagSelect Parent { get; set; } + + protected override void OnInitialized() + { + base.OnInitialized(); + Parent.AddOption(this); + } + + protected void HandleCheckedChange(bool isChecked) + { + Checked = isChecked; + if (isChecked) + Parent.SelectItem(Value); + else + Parent.UnSelectItem(Value); + } + + public void Check(bool isChecked) + { + Checked = isChecked; + } + } +} \ No newline at end of file diff --git a/src/AntDesign.Pro/Pages/List/Search/Applications/utils/utils.less b/src/AntDesign.Pro/Pages/List/Search/Applications/utils/utils.less new file mode 100644 index 0000000..de1aa64 --- /dev/null +++ b/src/AntDesign.Pro/Pages/List/Search/Applications/utils/utils.less @@ -0,0 +1,50 @@ +.textOverflow() { + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + word-break: break-all; +} + +.textOverflowMulti(@line: 3, @bg: #fff) { + position: relative; + max-height: @line * 1.5em; + margin-right: -1em; + padding-right: 1em; + overflow: hidden; + line-height: 1.5em; + text-align: justify; + &::before { + position: absolute; + right: 14px; + bottom: 0; + padding: 0 1px; + background: @bg; + content: '...'; + } + &::after { + position: absolute; + right: 14px; + width: 1em; + height: 1em; + margin-top: 0.2em; + background: white; + content: ''; + } +} + +// mixins for clearfix +// ------------------------ +.clearfix() { + zoom: 1; + &::before, + &::after { + display: table; + content: ' '; + } + &::after { + clear: both; + height: 0; + font-size: 0; + visibility: hidden; + } +} diff --git a/src/AntDesign.Pro/Pages/List/Search/Articles/Articles.razor b/src/AntDesign.Pro/Pages/List/Search/Articles/Articles.razor new file mode 100644 index 0000000..300b017 --- /dev/null +++ b/src/AntDesign.Pro/Pages/List/Search/Articles/Articles.razor @@ -0,0 +1,76 @@ +@namespace AntDesign.Pro.Template.Pages.List +@layout SearchList +@page "/list/search/articles" + + +
    + + + 类目一 + 类目二 + 类目三 + 类目四 + 类目五 + 类目六 + 类目七 + 类目八 + 类目九 + 类目十 + 类目十一 + 类目十二 + + + + + + 只看自己的 + + + + + + + + + + + + + + + + +
    +
    + + + + + + @context.Title + + + + + + diff --git a/src/AntDesign.Pro/Pages/List/Search/Articles/Articles.razor.cs b/src/AntDesign.Pro/Pages/List/Search/Articles/Articles.razor.cs new file mode 100644 index 0000000..5bcb4d6 --- /dev/null +++ b/src/AntDesign.Pro/Pages/List/Search/Articles/Articles.razor.cs @@ -0,0 +1,37 @@ +using System.Collections.Generic; +using System.Threading.Tasks; +using AntDesign.Pro.Template.Models; +using AntDesign.Pro.Template.Services; +using Microsoft.AspNetCore.Components; + +namespace AntDesign.Pro.Template.Pages.List +{ + public partial class Articles + { + private readonly string[] _defaultOwners = {"wzj", "wjh"}; + private readonly ListFormModel _model = new ListFormModel(); + + private readonly Owner[] _owners = + { + new Owner {Id = "wzj", Name = "我自己"}, + new Owner {Id = "wjh", Name = "吴家豪"}, + new Owner {Id = "zxx", Name = "周星星"}, + new Owner {Id = "zly", Name = "赵丽颖"}, + new Owner {Id = "ym", Name = "姚明"} + }; + + private IList _fakeList = new List(); + + [Inject] public IProjectService ProjectService { get; set; } + + private void SetOwner() + { + } + + protected override async Task OnInitializedAsync() + { + await base.OnInitializedAsync(); + _fakeList = await ProjectService.GetFakeListAsync(8); + } + } +} \ No newline at end of file diff --git a/src/AntDesign.Pro/Pages/List/Search/Articles/Articles.razor.less b/src/AntDesign.Pro/Pages/List/Search/Articles/Articles.razor.less new file mode 100644 index 0000000..fe07d85 --- /dev/null +++ b/src/AntDesign.Pro/Pages/List/Search/Articles/Articles.razor.less @@ -0,0 +1,31 @@ +@import '~antd/es/style/themes/default.less'; + +a.listItemMetaTitle { + color: @heading-color; +} +.listItemExtra { + width: 272px; + height: 1px; +} +.selfTrigger { + margin-left: 12px; +} + +@media screen and (max-width: @screen-xs) { + .selfTrigger { + display: block; + margin-left: 0; + } +} +@media screen and (max-width: @screen-md) { + .selfTrigger { + display: block; + margin-left: 0; + } +} +@media screen and (max-width: @screen-lg) { + .listItemExtra { + width: 0; + height: 1px; + } +} diff --git a/src/AntDesign.Pro/Pages/List/Search/Projects/Projects.razor b/src/AntDesign.Pro/Pages/List/Search/Projects/Projects.razor new file mode 100644 index 0000000..7e66f15 --- /dev/null +++ b/src/AntDesign.Pro/Pages/List/Search/Projects/Projects.razor @@ -0,0 +1,81 @@ +@namespace AntDesign.Pro.Template.Pages.List +@layout SearchList +@page "/list/search/projects" + +
    + +
    + + + + 类目一 + 类目二 + 类目三 + 类目四 + 类目五 + 类目六 + 类目七 + 类目八 + 类目九 + 类目十 + 类目十一 + 类目十二 + + + + + + + + + + + + + + + + + +
    +
    +
    + + + + + @context.Title + + + + @context.SubDescription + @context.Title + +
    + @context.UpdatedAt.ToFriendlyDisplay() +
    + + @foreach (var member in context.Members) + { + + } + +
    +
    +
    +
    +
    +
    +
    +
    diff --git a/src/AntDesign.Pro/Pages/List/Search/Projects/Projects.razor.cs b/src/AntDesign.Pro/Pages/List/Search/Projects/Projects.razor.cs new file mode 100644 index 0000000..2c8534c --- /dev/null +++ b/src/AntDesign.Pro/Pages/List/Search/Projects/Projects.razor.cs @@ -0,0 +1,30 @@ +using System.Collections.Generic; +using System.Threading.Tasks; +using AntDesign.Pro.Template.Models; +using AntDesign.Pro.Template.Services; +using Microsoft.AspNetCore.Components; +using AntDesign; + +namespace AntDesign.Pro.Template.Pages.List +{ + public partial class Projects + { + private readonly ListGridType _listGridType = new ListGridType + { + Gutter = 24, + Column = 4 + }; + + private readonly ListFormModel _model = new ListFormModel(); + + private IList _fakeList = new List(); + + [Inject] public IProjectService ProjectService { get; set; } + + protected override async Task OnInitializedAsync() + { + await base.OnInitializedAsync(); + _fakeList = await ProjectService.GetFakeListAsync(8); + } + } +} \ No newline at end of file diff --git a/src/AntDesign.Pro/Pages/List/Search/SearchList.razor b/src/AntDesign.Pro/Pages/List/Search/SearchList.razor new file mode 100644 index 0000000..6a16d00 --- /dev/null +++ b/src/AntDesign.Pro/Pages/List/Search/SearchList.razor @@ -0,0 +1,28 @@ +@namespace AntDesign.Pro.Template.Pages.List +@inherits LayoutComponentBase +@layout AntDesign.Pro.Template.BasicLayout + + + + + Home + List + Search + + + +
    + +
    +
    + + @Body + +
    \ No newline at end of file diff --git a/src/AntDesign.Pro/Pages/List/Search/SearchList.razor.cs b/src/AntDesign.Pro/Pages/List/Search/SearchList.razor.cs new file mode 100644 index 0000000..fbc2789 --- /dev/null +++ b/src/AntDesign.Pro/Pages/List/Search/SearchList.razor.cs @@ -0,0 +1,32 @@ +using System.Collections.Generic; +using AntDesign.Pro.Layout; +using Microsoft.AspNetCore.Components; + +namespace AntDesign.Pro.Template.Pages.List +{ + public partial class SearchList + { + private readonly IList _tabList = new List + { + new TabPaneItem {Key = "articles", Tab = "文章"}, + new TabPaneItem {Key = "projects", Tab = "项目"}, + new TabPaneItem {Key = "applications", Tab = "应用"} + }; + + [Inject] protected NavigationManager NavigationManager { get; set; } + + private string GetTabKey() + { + var url = NavigationManager.Uri.TrimEnd('/'); + var key = url.Substring(url.LastIndexOf('/') + 1); + return key; + } + + private void HandleTabChange(string key) + { + var url = NavigationManager.Uri.TrimEnd('/'); + url = url.Substring(0, url.LastIndexOf('/')); + NavigationManager.NavigateTo($"{url}/{key}"); + } + } +} \ No newline at end of file diff --git a/src/AntDesign.Pro/Pages/List/TableList/TableList.razor b/src/AntDesign.Pro/Pages/List/TableList/TableList.razor new file mode 100644 index 0000000..df0f67f --- /dev/null +++ b/src/AntDesign.Pro/Pages/List/TableList/TableList.razor @@ -0,0 +1,6 @@ +@namespace AntDesign.Pro.Template.Pages.List +@page "/list/table-list" + +

    + TODO: Next Version +

    \ No newline at end of file diff --git a/src/AntDesign.Pro/Pages/List/TableList/TableList.razor.less b/src/AntDesign.Pro/Pages/List/TableList/TableList.razor.less new file mode 100644 index 0000000..e69de29 diff --git a/src/AntDesign.Pro/Pages/Profile/Advanced/Advanced.razor b/src/AntDesign.Pro/Pages/Profile/Advanced/Advanced.razor new file mode 100644 index 0000000..b08452b --- /dev/null +++ b/src/AntDesign.Pro/Pages/Profile/Advanced/Advanced.razor @@ -0,0 +1,188 @@ +@namespace AntDesign.Pro.Template.Pages.Profile +@page "/profile/advanced" + + + + + Home + Profile + Advanced Profile + + + + + + + + + + 选项一 + 选项二 + 选项三 + + + + + + + + + + +
    + + +
    +
    + + + 曲丽丽 + XX 服务 + 2017-07-07 + + 12421 + + 2017-07-07 ~ 2017-08-08 + 请于两个工作日内确认 + + + +
    + + + + + + + + + + + + + + + 付小小 + 32943898021309809423 + 3321944288191034921 + 18112345678 + + 曲丽丽 18100000000 浙江省杭州市西湖区黄姑山路工专路交叉路口 + + + + 725 + 2017-08-08 + + 725 + + 2017-08-08 + +

    信息组

    + + + 林东东 + 1234567 + XX公司 - YY部 + 2017-08-08 + + 这段描述很长很长很长很长很长很长很长很长很长很长很长很长很长很长... + + + + + + Citrullus lanatus (Thunb.) Matsum. et + Nakai一年生蔓生藤本;茎、枝粗壮,具明显的棱。卷须较粗.. + + + + + 付小小 + 1234568 + + +
    + + + + + + + + + 操作日志一 + + + + + + + +
    +
    +
    + + 操作日志二 + + + + + + + +
    +
    +
    + + 操作日志三 + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    + +@code +{ + private readonly RenderFragment _desc1 = @
    + 曲丽丽 +
    ; + private readonly RenderFragment _desc2 = @
    + 周毛毛 + +
    + 催一下 +
    +
    ; + + private readonly RenderFragment _title = @ + 某某数据 + + + + ; +} diff --git a/src/AntDesign.Pro/Pages/Profile/Advanced/Advanced.razor.cs b/src/AntDesign.Pro/Pages/Profile/Advanced/Advanced.razor.cs new file mode 100644 index 0000000..a2fa8e5 --- /dev/null +++ b/src/AntDesign.Pro/Pages/Profile/Advanced/Advanced.razor.cs @@ -0,0 +1,28 @@ +using System.Collections.Generic; +using System.Threading.Tasks; +using AntDesign.Pro.Layout; +using AntDesign.Pro.Template.Models; +using AntDesign.Pro.Template.Services; +using Microsoft.AspNetCore.Components; + +namespace AntDesign.Pro.Template.Pages.Profile +{ + public partial class Advanced + { + private readonly IList _tabList = new List + { + new TabPaneItem {Key = "detail", Tab = "详情"}, + new TabPaneItem {Key = "rules", Tab = "规则"} + }; + + private AdvancedProfileData _data = new AdvancedProfileData(); + + [Inject] protected IProfileService ProfileService { get; set; } + + protected override async Task OnInitializedAsync() + { + await base.OnInitializedAsync(); + _data = await ProfileService.GetAdvancedAsync(); + } + } +} \ No newline at end of file diff --git a/src/AntDesign.Pro/Pages/Profile/Advanced/Advanced.razor.less b/src/AntDesign.Pro/Pages/Profile/Advanced/Advanced.razor.less new file mode 100644 index 0000000..cc823ef --- /dev/null +++ b/src/AntDesign.Pro/Pages/Profile/Advanced/Advanced.razor.less @@ -0,0 +1,60 @@ +@import '~antd/es/style/themes/default.less'; + +.main__b__3 { + //:global { + .ant-descriptions-row > td { + padding-bottom: 8px; + } + .ant-page-header-heading-extra { + flex-direction: column; + } + //} +} + +.headerList { + margin-bottom: 4px; + //:global { + .ant-descriptions-row > td { + padding-bottom: 8px; + } + //} + + .stepDescription { + position: relative; + left: 38px; + padding-top: 8px; + font-size: 14px; + text-align: left; + + > div { + margin-top: 8px; + margin-bottom: 4px; + } + } +} + +.pageHeader { + //:global { + .ant-page-header-heading-extra > * + * { + margin-left: 8px; + } + //} + .moreInfo { + display: flex; + justify-content: space-between; + width: 200px; + } +} + +@media screen and (max-width: @screen-sm) { + .stepDescription { + left: 8px; + } + .pageHeader { + //:global { + .ant-pro-page-header-wrap-row { + flex-direction: column; + } + //} + } +} diff --git a/src/AntDesign.Pro/Pages/Profile/Basic/Basic.razor b/src/AntDesign.Pro/Pages/Profile/Basic/Basic.razor new file mode 100644 index 0000000..7aa98bb --- /dev/null +++ b/src/AntDesign.Pro/Pages/Profile/Basic/Basic.razor @@ -0,0 +1,55 @@ +@namespace AntDesign.Pro.Template.Pages.Profile +@page "/profile/basic" + + + + + Home + Profile + Basic Profile + + + + + + 1000000000 + 已取货 + 1234123421 + 3214321432 + + + + 付小小 + 18100000000 + 菜鸟仓储 + 浙江省杭州市西湖区万塘路18号 + + + +
    退货商品
    + + + + + + + + +
    +
    退货进度
    + + + + + + +
    +
    +
    +
    \ No newline at end of file diff --git a/src/AntDesign.Pro/Pages/Profile/Basic/Basic.razor.cs b/src/AntDesign.Pro/Pages/Profile/Basic/Basic.razor.cs new file mode 100644 index 0000000..78b8144 --- /dev/null +++ b/src/AntDesign.Pro/Pages/Profile/Basic/Basic.razor.cs @@ -0,0 +1,20 @@ +using System.Threading.Tasks; +using AntDesign.Pro.Template.Models; +using AntDesign.Pro.Template.Services; +using Microsoft.AspNetCore.Components; + +namespace AntDesign.Pro.Template.Pages.Profile +{ + public partial class Basic + { + private BasicProfileDataType _data = new BasicProfileDataType(); + + [Inject] protected IProfileService ProfileService { get; set; } + + protected override async Task OnInitializedAsync() + { + await base.OnInitializedAsync(); + _data = await ProfileService.GetBasicAsync(); + } + } +} \ No newline at end of file diff --git a/src/AntDesign.Pro/Pages/Profile/Basic/Basic.razor.less b/src/AntDesign.Pro/Pages/Profile/Basic/Basic.razor.less new file mode 100644 index 0000000..68f3c93 --- /dev/null +++ b/src/AntDesign.Pro/Pages/Profile/Basic/Basic.razor.less @@ -0,0 +1,8 @@ +@import '~antd/es/style/themes/default.less'; + +.title { + margin-bottom: 16px; + color: @heading-color; + font-weight: 500; + font-size: 16px; +} diff --git a/src/AntDesign.Pro/Pages/Result/Fail/Fail.razor b/src/AntDesign.Pro/Pages/Result/Fail/Fail.razor index a21a729..4c1019f 100644 --- a/src/AntDesign.Pro/Pages/Result/Fail/Fail.razor +++ b/src/AntDesign.Pro/Pages/Result/Fail/Fail.razor @@ -1,36 +1,35 @@ -@namespace AntDesign.Pro.Pages.Result +@namespace AntDesign.Pro.Template.Pages.Result @page "/result/fail" -
    - The content you submitted has the following error: -
    -
    - - Your account has been frozen - - Thaw immediately - - -
    -
    - - Your account is not yet eligible to apply - - Upgrade immediately - -
    + + + + +
    + The content you submitted has the following error: +
    +
    + + Your account has been frozen + + Thaw immediately + + +
    +
    + + Your account is not yet eligible to apply + + Upgrade immediately + +
    +
    -
    - -@code -{ - RenderFragment extra =@; -} \ No newline at end of file + \ No newline at end of file diff --git a/src/AntDesign.Pro/Pages/Result/Fail/Fail.razor.less b/src/AntDesign.Pro/Pages/Result/Fail/Fail.razor.less index 85373f2..7dcc4d2 100644 --- a/src/AntDesign.Pro/Pages/Result/Fail/Fail.razor.less +++ b/src/AntDesign.Pro/Pages/Result/Fail/Fail.razor.less @@ -3,7 +3,7 @@ .error_icon { color: @highlight-color; } -.title { +.title__b__0 { margin-bottom: 16px; color: @heading-color; font-weight: 500; diff --git a/src/AntDesign.Pro/Pages/Result/Success/Success.razor b/src/AntDesign.Pro/Pages/Result/Success/Success.razor index d54004c..b737e79 100644 --- a/src/AntDesign.Pro/Pages/Result/Success/Success.razor +++ b/src/AntDesign.Pro/Pages/Result/Success/Success.razor @@ -1,57 +1,69 @@ -@namespace AntDesign.Pro.Pages.Result +@namespace AntDesign.Pro.Template.Pages.Result @page "/result/success" - - 23421 - Qu Lili - 2016-12-12 ~ 2017-12-12 - -
    - - - - - - + + + + + + + + + + 23421 + Qu Lili + 2016-12-12 ~ 2017-12-12 + +
    + + + + Create project + + +
    +
    + Qu Lili + +
    +
    2016-12-12 12:32
    +
    +
    +
    + + + Departmental preliminary review + + +
    +
    + Zhou Maomao + + + Urge + +
    +
    +
    +
    + + + Financial review + + + + + Finish + + +
    +
    -
    - -@code -{ - RenderFragment extra =@ - - - - ; - -// todo: only support string -RenderFragment step1 = @Create project; -RenderFragment step2 = @Departmental preliminary review; -RenderFragment step3 = @Financial review; -RenderFragment step4 = @Finish; -RenderFragment desc1 = @
    -
    - Qu Lili - -
    -
    2016-12-12 12:32
    -
    ; - -RenderFragment desc2 = @
    -
    - Zhou Maomao - - - Urge - -
    -
    ; -} \ No newline at end of file + \ No newline at end of file diff --git a/src/AntDesign.Pro/Pages/Result/Success/Success.razor.less b/src/AntDesign.Pro/Pages/Result/Success/Success.razor.less index 211772d..6ae488f 100644 --- a/src/AntDesign.Pro/Pages/Result/Success/Success.razor.less +++ b/src/AntDesign.Pro/Pages/Result/Success/Success.razor.less @@ -1,6 +1,6 @@ @import '~antd/es/style/themes/default.less'; -.title { +.title__b__1 { position: relative; color: @text-color; font-size: 12px; diff --git a/src/AntDesign.Pro/Pages/User/Login/Login.razor b/src/AntDesign.Pro/Pages/User/Login/Login.razor index c3a7ec8..080aff7 100644 --- a/src/AntDesign.Pro/Pages/User/Login/Login.razor +++ b/src/AntDesign.Pro/Pages/User/Login/Login.razor @@ -1,4 +1,4 @@ -@namespace AntDesign.Pro.Pages +@namespace AntDesign.Pro.Template.Pages.User @layout UserLayout @page "/user/login" @@ -37,7 +37,7 @@ - + @@ -62,4 +62,5 @@
    -
    \ No newline at end of file +
    + \ No newline at end of file diff --git a/src/AntDesign.Pro/Pages/User/Login/Login.razor.cs b/src/AntDesign.Pro/Pages/User/Login/Login.razor.cs index 120e598..b06d8f4 100644 --- a/src/AntDesign.Pro/Pages/User/Login/Login.razor.cs +++ b/src/AntDesign.Pro/Pages/User/Login/Login.razor.cs @@ -1,31 +1,20 @@ -using System.ComponentModel.DataAnnotations; +using System.Threading.Tasks; +using AntDesign.Pro.Template.Models; +using AntDesign.Pro.Template.Services; using Microsoft.AspNetCore.Components; +using AntDesign; -namespace AntDesign.Pro.Pages +namespace AntDesign.Pro.Template.Pages.User { - public class LoginModel - { - [Required] - public string UserName { get; set; } - - [Required] - public string Password { get; set; } - - public string Mobile { get; set; } - - public string Captcha { get; set; } - - public bool AutoLogin { get; set; } = true; - - public string LoginType { get; set; } - } - public partial class Login { - private readonly LoginModel _model = new LoginModel(); + private readonly LoginParamsType _model = new LoginParamsType(); - [Inject] - public NavigationManager NavigationManager { get; set; } + [Inject] public NavigationManager NavigationManager { get; set; } + + [Inject] public IAccountService AccountService { get; set; } + + [Inject] public MessageService Message { get; set; } public void HandleSubmit() { @@ -35,11 +24,13 @@ namespace AntDesign.Pro.Pages return; } - if (_model.UserName == "user" && _model.Password == "ant.design") - { - NavigationManager.NavigateTo("/"); - return; - } + if (_model.UserName == "user" && _model.Password == "ant.design") NavigationManager.NavigateTo("/"); + } + + public async Task GetCaptcha() + { + var captcha = await AccountService.GetCaptchaAsync(_model.Mobile); + await Message.Success($"获取验证码成功!验证码为:{captcha}"); } } } \ No newline at end of file diff --git a/src/AntDesign.Pro/Pages/User/Register/Register.razor b/src/AntDesign.Pro/Pages/User/Register/Register.razor index f140364..18651a3 100644 --- a/src/AntDesign.Pro/Pages/User/Register/Register.razor +++ b/src/AntDesign.Pro/Pages/User/Register/Register.razor @@ -1,4 +1,4 @@ -@namespace AntDesign.Pro.Pages +@namespace AntDesign.Pro.Template.Pages.User @layout UserLayout @page "/user/register" diff --git a/src/AntDesign.Pro/Pages/User/Register/Register.razor.cs b/src/AntDesign.Pro/Pages/User/Register/Register.razor.cs index 0ab6160..76293d4 100644 --- a/src/AntDesign.Pro/Pages/User/Register/Register.razor.cs +++ b/src/AntDesign.Pro/Pages/User/Register/Register.razor.cs @@ -1,6 +1,6 @@ using System.ComponentModel.DataAnnotations; -namespace AntDesign.Pro.Pages +namespace AntDesign.Pro.Template.Pages.User { public class RegisterModel { diff --git a/src/AntDesign.Pro/Pages/User/RegisterResult/RegisterResult.razor b/src/AntDesign.Pro/Pages/User/RegisterResult/RegisterResult.razor index 0d72ec2..34eafb9 100644 --- a/src/AntDesign.Pro/Pages/User/RegisterResult/RegisterResult.razor +++ b/src/AntDesign.Pro/Pages/User/RegisterResult/RegisterResult.razor @@ -1,4 +1,4 @@ -@namespace AntDesign.Pro.Pages +@namespace AntDesign.Pro.Template.Pages.User @page "/user/register-result"

    RegisterResult

    diff --git a/src/AntDesign.Pro/Program.cs b/src/AntDesign.Pro/Program.cs index f1b416b..5e3811c 100644 --- a/src/AntDesign.Pro/Program.cs +++ b/src/AntDesign.Pro/Program.cs @@ -2,11 +2,11 @@ using System; using System.Net.Http; using System.Threading.Tasks; using AntDesign.Pro.Layout; -using AntDesign.Pro.Services; +using AntDesign.Pro.Template.Services; using Microsoft.AspNetCore.Components.WebAssembly.Hosting; using Microsoft.Extensions.DependencyInjection; -namespace AntDesign.Pro +namespace AntDesign.Pro.Template { public class Program { @@ -15,11 +15,15 @@ namespace AntDesign.Pro var builder = WebAssemblyHostBuilder.CreateDefault(args); builder.RootComponents.Add("app"); - builder.Services.AddScoped(sp => new HttpClient { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) }); + builder.Services.AddScoped( + sp => new HttpClient {BaseAddress = new Uri(builder.HostEnvironment.BaseAddress)}); builder.Services.AddAntDesign(); builder.Services.Configure(builder.Configuration.GetSection("ProSettings")); - builder.Services.AddScoped(); - builder.Services.AddScoped(); + builder.Services.AddScoped(); + builder.Services.AddScoped(); + builder.Services.AddScoped(); + builder.Services.AddScoped(); + builder.Services.AddScoped(); await builder.Build().RunAsync(); } diff --git a/src/AntDesign.Pro/Services/AccountService.cs b/src/AntDesign.Pro/Services/AccountService.cs new file mode 100644 index 0000000..50b67bb --- /dev/null +++ b/src/AntDesign.Pro/Services/AccountService.cs @@ -0,0 +1,29 @@ +using System; +using System.Threading.Tasks; +using AntDesign.Pro.Template.Models; + +namespace AntDesign.Pro.Template.Services +{ + public interface IAccountService + { + Task LoginAsync(LoginParamsType model); + Task GetCaptchaAsync(string modile); + } + + public class AccountService : IAccountService + { + private readonly Random _random = new Random(); + + public Task LoginAsync(LoginParamsType model) + { + // todo: login logic + return Task.CompletedTask; + } + + public Task GetCaptchaAsync(string modile) + { + var captcha = _random.Next(0, 9999).ToString().PadLeft(4, '0'); + return Task.FromResult(captcha); + } + } +} \ No newline at end of file diff --git a/src/AntDesign.Pro/Services/ChartService.cs b/src/AntDesign.Pro/Services/ChartService.cs index d6e38f4..8ee7bfd 100644 --- a/src/AntDesign.Pro/Services/ChartService.cs +++ b/src/AntDesign.Pro/Services/ChartService.cs @@ -1,59 +1,19 @@ using System.Net.Http; using System.Net.Http.Json; using System.Threading.Tasks; +using AntDesign.Pro.Template.Models; -namespace AntDesign.Pro.Services +namespace AntDesign.Pro.Template.Services { - public class ChartDataItem + public interface IChartService { - public string X { get; set; } - public int Y { get; set; } + Task GetVisitDataAsync(); + Task GetVisitData2Async(); + Task GetSalesDataAsync(); + Task GetRadarDataAsync(); } - public class SearchDataItem - { - public int Index { get; set; } - public string Keywod { get; set; } - public int Count { get; set; } - public int Range { get; set; } - public int Status { get; set; } - } - - public class OfflineDataItem - { - public string Name { get; set; } - public float Cvr { get; set; } - } - - public class OfflineChartDataItem - { - public long X { get; set; } - public int Y1 { get; set; } - public int Y2 { get; set; } - } - - public class RadarDataItem - { - public string Name { get; set; } - public string Label { get; set; } - public int Value { get; set; } - } - - public class ChartData - { - public ChartDataItem[] VisitData { get; set; } - public ChartDataItem[] VisitData2 { get; set; } - public ChartDataItem[] SalesData { get; set; } - public SearchDataItem[] SearchData { get; set; } - public OfflineDataItem[] OfflineData { get; set; } - public OfflineChartDataItem[] OfflineChartData { get; set; } - public ChartDataItem[] SalesTypeData { get; set; } - public ChartDataItem[] SalesTypeDataOnline { get; set; } - public ChartDataItem[] SalesTypeDataOffline { get; set; } - public RadarDataItem[] RadarData { get; set; } - } - - public class ChartService + public class ChartService : IChartService { private readonly HttpClient _httpClient; diff --git a/src/AntDesign.Pro/Services/ProfileService.cs b/src/AntDesign.Pro/Services/ProfileService.cs new file mode 100644 index 0000000..1b7aa56 --- /dev/null +++ b/src/AntDesign.Pro/Services/ProfileService.cs @@ -0,0 +1,33 @@ +using System.Net.Http; +using System.Net.Http.Json; +using System.Threading.Tasks; +using AntDesign.Pro.Template.Models; + +namespace AntDesign.Pro.Template.Services +{ + public interface IProfileService + { + Task GetBasicAsync(); + Task GetAdvancedAsync(); + } + + public class ProfileService : IProfileService + { + private readonly HttpClient _httpClient; + + public ProfileService(HttpClient httpClient) + { + _httpClient = httpClient; + } + + public async Task GetBasicAsync() + { + return await _httpClient.GetFromJsonAsync("data/basic.json"); + } + + public async Task GetAdvancedAsync() + { + return await _httpClient.GetFromJsonAsync("data/advanced.json"); + } + } +} \ No newline at end of file diff --git a/src/AntDesign.Pro/Services/ProjectService.cs b/src/AntDesign.Pro/Services/ProjectService.cs index 89c1bd0..5f5f939 100644 --- a/src/AntDesign.Pro/Services/ProjectService.cs +++ b/src/AntDesign.Pro/Services/ProjectService.cs @@ -1,50 +1,20 @@ +using System.Linq; using System.Net.Http; using System.Net.Http.Json; using System.Threading.Tasks; +using AntDesign.Pro.Template.Models; -namespace AntDesign.Pro.Services +namespace AntDesign.Pro.Template.Services { - public class NoticeType + public interface IProjectService { - public string Id { get; set; } - public string Title { get; set; } - public string Logo { get; set; } - public string Description { get; set; } - public string UpdatedAt { get; set; } - public string Member { get; set; } - public string Href { get; set; } - public string MemberLink { get; set; } + Task GetProjectNoticeAsync(); + Task GetActivitiesAsync(); + Task GetFakeListAsync(int count = 0); + Task GetNoticesAsync(); } - public class ActivityUser - { - public string Name { get; set; } - public string Avatar { get; set; } - } - - public class ActivityGroup - { - public string Name { get; set; } - public string Link { get; set; } - } - - public class ActivityProject - { - public string Name { get; set; } - public string Link { get; set; } - } - - public class ActivitiesType - { - public string Id { get; set; } - public string UpdatedAt { get; set; } - public ActivityUser User { get; set; } - public ActivityGroup Group { get; set; } - public ActivityProject Project { get; set; } - public string Template { get; set; } - } - - public class ProjectService + public class ProjectService : IProjectService { private readonly HttpClient _httpClient; @@ -58,9 +28,20 @@ namespace AntDesign.Pro.Services return await _httpClient.GetFromJsonAsync("data/notice.json"); } + public async Task GetNoticesAsync() + { + return await _httpClient.GetFromJsonAsync("data/notices.json"); + } + public async Task GetActivitiesAsync() { return await _httpClient.GetFromJsonAsync("data/activities.json"); } + + public async Task GetFakeListAsync(int count = 0) + { + var data = await _httpClient.GetFromJsonAsync("data/fake_list.json"); + return count > 0 ? data.Take(count).ToArray() : data; + } } } \ No newline at end of file diff --git a/src/AntDesign.Pro/Services/UserService.cs b/src/AntDesign.Pro/Services/UserService.cs new file mode 100644 index 0000000..479e24f --- /dev/null +++ b/src/AntDesign.Pro/Services/UserService.cs @@ -0,0 +1,27 @@ +using System.Net.Http; +using System.Net.Http.Json; +using System.Threading.Tasks; +using AntDesign.Pro.Template.Models; + +namespace AntDesign.Pro.Template.Services +{ + public interface IUserService + { + Task GetCurrentUserAsync(); + } + + public class UserService : IUserService + { + private readonly HttpClient _httpClient; + + public UserService(HttpClient httpClient) + { + _httpClient = httpClient; + } + + public async Task GetCurrentUserAsync() + { + return await _httpClient.GetFromJsonAsync("data/current_user.json"); + } + } +} \ No newline at end of file diff --git a/src/AntDesign.Pro/Utils/LongToDateTimeConverter.cs b/src/AntDesign.Pro/Utils/LongToDateTimeConverter.cs new file mode 100644 index 0000000..4bb53a7 --- /dev/null +++ b/src/AntDesign.Pro/Utils/LongToDateTimeConverter.cs @@ -0,0 +1,24 @@ +using System; +using System.Buffers.Text; +using System.Text.Json; +using System.Text.Json.Serialization; + +namespace AntDesign.Pro.Template.Utils +{ + public class LongToDateTimeConverter : JsonConverter + { + public override DateTime Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) + { + if (Utf8Parser.TryParse(reader.ValueSpan, out long value, out _)) + return DateTime.UnixEpoch.AddMilliseconds(value); + + throw new FormatException(); + } + + public override void Write(Utf8JsonWriter writer, DateTime value, JsonSerializerOptions options) + { + writer.WriteStringValue( + JsonEncodedText.Encode(((long) (value - DateTime.UnixEpoch).TotalMilliseconds).ToString())); + } + } +} \ No newline at end of file diff --git a/src/AntDesign.Pro/_Imports.razor b/src/AntDesign.Pro/_Imports.razor index 11eb136..7e037b6 100644 --- a/src/AntDesign.Pro/_Imports.razor +++ b/src/AntDesign.Pro/_Imports.razor @@ -7,6 +7,7 @@ @using Microsoft.JSInterop @using AntDesign @using AntDesign.Charts -@using AntDesign.Pro @using AntDesign.Pro.Layout -@using AntDesign.Pro.Services \ No newline at end of file +@using AntDesign.Pro.Template +@using AntDesign.Pro.Template.Models +@using AntDesign.Pro.Template.Services \ No newline at end of file diff --git a/src/AntDesign.Pro/wwwroot/data/advanced.json b/src/AntDesign.Pro/wwwroot/data/advanced.json new file mode 100644 index 0000000..a09f242 --- /dev/null +++ b/src/AntDesign.Pro/wwwroot/data/advanced.json @@ -0,0 +1 @@ +{"advancedOperation1":[{"key":"op1","type":"订购关系生效","name":"曲丽丽","status":"agree","updatedAt":"2017-10-03 19:23:12","memo":"-"},{"key":"op2","type":"财务复审","name":"付小小","status":"reject","updatedAt":"2017-10-03 19:23:12","memo":"不通过原因"},{"key":"op3","type":"部门初审","name":"周毛毛","status":"agree","updatedAt":"2017-10-03 19:23:12","memo":"-"},{"key":"op4","type":"提交订单","name":"林东东","status":"agree","updatedAt":"2017-10-03 19:23:12","memo":"很棒"},{"key":"op5","type":"创建订单","name":"汗牙牙","status":"agree","updatedAt":"2017-10-03 19:23:12","memo":"-"}],"advancedOperation2":[{"key":"op1","type":"订购关系生效","name":"曲丽丽","status":"agree","updatedAt":"2017-10-03 19:23:12","memo":"-"}],"advancedOperation3":[{"key":"op1","type":"创建订单","name":"汗牙牙","status":"agree","updatedAt":"2017-10-03 19:23:12","memo":"-"}]} \ No newline at end of file diff --git a/src/AntDesign.Pro/wwwroot/data/basic.json b/src/AntDesign.Pro/wwwroot/data/basic.json new file mode 100644 index 0000000..81002cb --- /dev/null +++ b/src/AntDesign.Pro/wwwroot/data/basic.json @@ -0,0 +1 @@ +{"basicGoods":[{"id":"1234561","name":"矿泉水 550ml","barcode":"12421432143214321","price":"2.00","num":"1","amount":"2.00"},{"id":"1234562","name":"凉茶 300ml","barcode":"12421432143214322","price":"3.00","num":"2","amount":"6.00"},{"id":"1234563","name":"好吃的薯片","barcode":"12421432143214323","price":"7.00","num":"4","amount":"28.00"},{"id":"1234564","name":"特别好吃的蛋卷","barcode":"12421432143214324","price":"8.50","num":"3","amount":"25.50"}],"basicProgress":[{"key":"1","time":"2017-10-01 14:10","rate":"联系客户","status":"processing","operator":"取货员 ID1234","cost":"5mins"},{"key":"2","time":"2017-10-01 14:05","rate":"取货员出发","status":"success","operator":"取货员 ID1234","cost":"1h"},{"key":"3","time":"2017-10-01 13:05","rate":"取货员接单","status":"success","operator":"取货员 ID1234","cost":"5mins"},{"key":"4","time":"2017-10-01 13:00","rate":"申请审批通过","status":"success","operator":"系统","cost":"1h"},{"key":"5","time":"2017-10-01 12:00","rate":"发起退货申请","status":"success","operator":"用户","cost":"5mins"}]} \ No newline at end of file diff --git a/src/AntDesign.Pro/wwwroot/data/current_user.json b/src/AntDesign.Pro/wwwroot/data/current_user.json new file mode 100644 index 0000000..29686c3 --- /dev/null +++ b/src/AntDesign.Pro/wwwroot/data/current_user.json @@ -0,0 +1 @@ +{"name":"Serati Ma","avatar":"https://gw.alipayobjects.com/zos/antfincdn/XAosXuNZyF/BiazfanxmamNRoxxVxka.png","userid":"00000001","email":"antdesign@alipay.com","signature":"海纳百川,有容乃大","title":"交互专家","group":"蚂蚁金服-某某某事业群-某某平台部-某某技术部-UED","tags":[{"key":"0","label":"很有想法的"},{"key":"1","label":"专注设计"},{"key":"2","label":"辣~"},{"key":"3","label":"大长腿"},{"key":"4","label":"川妹子"},{"key":"5","label":"海纳百川"}],"notifyCount":12,"unreadCount":11,"country":"China","geographic":{"province":{"label":"浙江省","key":"330000"},"city":{"label":"杭州市","key":"330100"}},"address":"西湖区工专路 77 号","phone":"0752-268888888"} \ No newline at end of file diff --git a/src/AntDesign.Pro/wwwroot/data/fake_list.json b/src/AntDesign.Pro/wwwroot/data/fake_list.json index eec6079..4568ce6 100644 --- a/src/AntDesign.Pro/wwwroot/data/fake_list.json +++ b/src/AntDesign.Pro/wwwroot/data/fake_list.json @@ -1 +1 @@ -[{"id":"fake-list-0","owner":"付小小","title":"Alipay","avatar":"https://gw.alipayobjects.com/zos/rmsportal/WdGqmHpayyMjiEhcKoVE.png","cover":"https://gw.alipayobjects.com/zos/rmsportal/uMfMFlvUuceEyPpotzlq.png","status":"active","percent":62,"logo":"https://gw.alipayobjects.com/zos/rmsportal/WdGqmHpayyMjiEhcKoVE.png","href":"https://ant.design","updatedAt":1594481217777,"createdAt":1594481217777,"subDescription":"那是一种内在的东西, 他们到达不了,也无法触及的","description":"在中台产品的研发过程中,会出现不同的设计规范和实现方式,但其中往往存在很多类似的页面和组件,这些类似的组件会被抽离成一套标准规范。","activeUser":183994,"newUser":1167,"star":143,"like":136,"message":11,"content":"段落示意:蚂蚁金服设计平台 ant.design,用最小的工作量,无缝接入蚂蚁金服生态,提供跨越设计与开发的体验解决方案。蚂蚁金服设计平台 ant.design,用最小的工作量,无缝接入蚂蚁金服生态,提供跨越设计与开发的体验解决方案。","members":[{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/ZiESqWwCXBRQoaPONSJe.png","name":"曲丽丽","id":"member1"},{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/tBOxZPlITHqwlGjsJWaF.png","name":"王昭君","id":"member2"},{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/sBxjgqiuHMGRkIjqlQCd.png","name":"董娜娜","id":"member3"}]},{"id":"fake-list-1","owner":"曲丽丽","title":"Angular","avatar":"https://gw.alipayobjects.com/zos/rmsportal/zOsKZmFRdUtvpqCImOVY.png","cover":"https://gw.alipayobjects.com/zos/rmsportal/iZBVOIhGJiAnhplqjvZW.png","status":"exception","percent":85,"logo":"https://gw.alipayobjects.com/zos/rmsportal/zOsKZmFRdUtvpqCImOVY.png","href":"https://ant.design","updatedAt":1594474017777,"createdAt":1594474017777,"subDescription":"希望是一个好东西,也许是最好的,好东西是不会消亡的","description":"在中台产品的研发过程中,会出现不同的设计规范和实现方式,但其中往往存在很多类似的页面和组件,这些类似的组件会被抽离成一套标准规范。","activeUser":187617,"newUser":1861,"star":176,"like":117,"message":11,"content":"段落示意:蚂蚁金服设计平台 ant.design,用最小的工作量,无缝接入蚂蚁金服生态,提供跨越设计与开发的体验解决方案。蚂蚁金服设计平台 ant.design,用最小的工作量,无缝接入蚂蚁金服生态,提供跨越设计与开发的体验解决方案。","members":[{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/ZiESqWwCXBRQoaPONSJe.png","name":"曲丽丽","id":"member1"},{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/tBOxZPlITHqwlGjsJWaF.png","name":"王昭君","id":"member2"},{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/sBxjgqiuHMGRkIjqlQCd.png","name":"董娜娜","id":"member3"}]},{"id":"fake-list-2","owner":"林东东","title":"Ant Design","avatar":"https://gw.alipayobjects.com/zos/rmsportal/dURIMkkrRFpPgTuzkwnB.png","cover":"https://gw.alipayobjects.com/zos/rmsportal/iXjVmWVHbCJAyqvDxdtx.png","status":"normal","percent":71,"logo":"https://gw.alipayobjects.com/zos/rmsportal/dURIMkkrRFpPgTuzkwnB.png","href":"https://ant.design","updatedAt":1594466817777,"createdAt":1594466817777,"subDescription":"生命就像一盒巧克力,结果往往出人意料","description":"在中台产品的研发过程中,会出现不同的设计规范和实现方式,但其中往往存在很多类似的页面和组件,这些类似的组件会被抽离成一套标准规范。","activeUser":145750,"newUser":1204,"star":115,"like":180,"message":17,"content":"段落示意:蚂蚁金服设计平台 ant.design,用最小的工作量,无缝接入蚂蚁金服生态,提供跨越设计与开发的体验解决方案。蚂蚁金服设计平台 ant.design,用最小的工作量,无缝接入蚂蚁金服生态,提供跨越设计与开发的体验解决方案。","members":[{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/ZiESqWwCXBRQoaPONSJe.png","name":"曲丽丽","id":"member1"},{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/tBOxZPlITHqwlGjsJWaF.png","name":"王昭君","id":"member2"},{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/sBxjgqiuHMGRkIjqlQCd.png","name":"董娜娜","id":"member3"}]},{"id":"fake-list-3","owner":"周星星","title":"Ant Design Pro","avatar":"https://gw.alipayobjects.com/zos/rmsportal/sfjbOqnsXXJgNCjCzDBL.png","cover":"https://gw.alipayobjects.com/zos/rmsportal/gLaIAoVWTtLbBWZNYEMg.png","status":"active","percent":75,"logo":"https://gw.alipayobjects.com/zos/rmsportal/sfjbOqnsXXJgNCjCzDBL.png","href":"https://ant.design","updatedAt":1594459617777,"createdAt":1594459617777,"subDescription":"城镇中有那么多的酒馆,她却偏偏走进了我的酒馆","description":"在中台产品的研发过程中,会出现不同的设计规范和实现方式,但其中往往存在很多类似的页面和组件,这些类似的组件会被抽离成一套标准规范。","activeUser":163421,"newUser":1643,"star":183,"like":168,"message":13,"content":"段落示意:蚂蚁金服设计平台 ant.design,用最小的工作量,无缝接入蚂蚁金服生态,提供跨越设计与开发的体验解决方案。蚂蚁金服设计平台 ant.design,用最小的工作量,无缝接入蚂蚁金服生态,提供跨越设计与开发的体验解决方案。","members":[{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/ZiESqWwCXBRQoaPONSJe.png","name":"曲丽丽","id":"member1"},{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/tBOxZPlITHqwlGjsJWaF.png","name":"王昭君","id":"member2"},{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/sBxjgqiuHMGRkIjqlQCd.png","name":"董娜娜","id":"member3"}]},{"id":"fake-list-4","owner":"吴加好","title":"Bootstrap","avatar":"https://gw.alipayobjects.com/zos/rmsportal/siCrBXXhmvTQGWPNLBow.png","cover":"https://gw.alipayobjects.com/zos/rmsportal/gLaIAoVWTtLbBWZNYEMg.png","status":"exception","percent":99,"logo":"https://gw.alipayobjects.com/zos/rmsportal/siCrBXXhmvTQGWPNLBow.png","href":"https://ant.design","updatedAt":1594452417777,"createdAt":1594452417777,"subDescription":"那时候我只会想自己想要什么,从不想自己拥有什么","description":"在中台产品的研发过程中,会出现不同的设计规范和实现方式,但其中往往存在很多类似的页面和组件,这些类似的组件会被抽离成一套标准规范。","activeUser":173592,"newUser":1172,"star":147,"like":164,"message":15,"content":"段落示意:蚂蚁金服设计平台 ant.design,用最小的工作量,无缝接入蚂蚁金服生态,提供跨越设计与开发的体验解决方案。蚂蚁金服设计平台 ant.design,用最小的工作量,无缝接入蚂蚁金服生态,提供跨越设计与开发的体验解决方案。","members":[{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/ZiESqWwCXBRQoaPONSJe.png","name":"曲丽丽","id":"member1"},{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/tBOxZPlITHqwlGjsJWaF.png","name":"王昭君","id":"member2"},{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/sBxjgqiuHMGRkIjqlQCd.png","name":"董娜娜","id":"member3"}]},{"id":"fake-list-5","owner":"朱偏右","title":"React","avatar":"https://gw.alipayobjects.com/zos/rmsportal/kZzEzemZyKLKFsojXItE.png","cover":"https://gw.alipayobjects.com/zos/rmsportal/iXjVmWVHbCJAyqvDxdtx.png","status":"normal","percent":64,"logo":"https://gw.alipayobjects.com/zos/rmsportal/kZzEzemZyKLKFsojXItE.png","href":"https://ant.design","updatedAt":1594445217777,"createdAt":1594445217777,"subDescription":"那是一种内在的东西, 他们到达不了,也无法触及的","description":"在中台产品的研发过程中,会出现不同的设计规范和实现方式,但其中往往存在很多类似的页面和组件,这些类似的组件会被抽离成一套标准规范。","activeUser":120230,"newUser":1062,"star":177,"like":163,"message":13,"content":"段落示意:蚂蚁金服设计平台 ant.design,用最小的工作量,无缝接入蚂蚁金服生态,提供跨越设计与开发的体验解决方案。蚂蚁金服设计平台 ant.design,用最小的工作量,无缝接入蚂蚁金服生态,提供跨越设计与开发的体验解决方案。","members":[{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/ZiESqWwCXBRQoaPONSJe.png","name":"曲丽丽","id":"member1"},{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/tBOxZPlITHqwlGjsJWaF.png","name":"王昭君","id":"member2"},{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/sBxjgqiuHMGRkIjqlQCd.png","name":"董娜娜","id":"member3"}]},{"id":"fake-list-6","owner":"鱼酱","title":"Vue","avatar":"https://gw.alipayobjects.com/zos/rmsportal/ComBAopevLwENQdKWiIn.png","cover":"https://gw.alipayobjects.com/zos/rmsportal/iZBVOIhGJiAnhplqjvZW.png","status":"active","percent":57,"logo":"https://gw.alipayobjects.com/zos/rmsportal/ComBAopevLwENQdKWiIn.png","href":"https://ant.design","updatedAt":1594438017777,"createdAt":1594438017777,"subDescription":"希望是一个好东西,也许是最好的,好东西是不会消亡的","description":"在中台产品的研发过程中,会出现不同的设计规范和实现方式,但其中往往存在很多类似的页面和组件,这些类似的组件会被抽离成一套标准规范。","activeUser":139477,"newUser":1096,"star":174,"like":155,"message":14,"content":"段落示意:蚂蚁金服设计平台 ant.design,用最小的工作量,无缝接入蚂蚁金服生态,提供跨越设计与开发的体验解决方案。蚂蚁金服设计平台 ant.design,用最小的工作量,无缝接入蚂蚁金服生态,提供跨越设计与开发的体验解决方案。","members":[{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/ZiESqWwCXBRQoaPONSJe.png","name":"曲丽丽","id":"member1"},{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/tBOxZPlITHqwlGjsJWaF.png","name":"王昭君","id":"member2"},{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/sBxjgqiuHMGRkIjqlQCd.png","name":"董娜娜","id":"member3"}]},{"id":"fake-list-7","owner":"乐哥","title":"Webpack","avatar":"https://gw.alipayobjects.com/zos/rmsportal/nxkuOJlFJuAUhzlMTCEe.png","cover":"https://gw.alipayobjects.com/zos/rmsportal/uMfMFlvUuceEyPpotzlq.png","status":"exception","percent":100,"logo":"https://gw.alipayobjects.com/zos/rmsportal/nxkuOJlFJuAUhzlMTCEe.png","href":"https://ant.design","updatedAt":1594430817777,"createdAt":1594430817777,"subDescription":"生命就像一盒巧克力,结果往往出人意料","description":"在中台产品的研发过程中,会出现不同的设计规范和实现方式,但其中往往存在很多类似的页面和组件,这些类似的组件会被抽离成一套标准规范。","activeUser":119032,"newUser":1251,"star":159,"like":130,"message":11,"content":"段落示意:蚂蚁金服设计平台 ant.design,用最小的工作量,无缝接入蚂蚁金服生态,提供跨越设计与开发的体验解决方案。蚂蚁金服设计平台 ant.design,用最小的工作量,无缝接入蚂蚁金服生态,提供跨越设计与开发的体验解决方案。","members":[{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/ZiESqWwCXBRQoaPONSJe.png","name":"曲丽丽","id":"member1"},{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/tBOxZPlITHqwlGjsJWaF.png","name":"王昭君","id":"member2"},{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/sBxjgqiuHMGRkIjqlQCd.png","name":"董娜娜","id":"member3"}]},{"id":"fake-list-8","owner":"谭小仪","title":"Alipay","avatar":"https://gw.alipayobjects.com/zos/rmsportal/WdGqmHpayyMjiEhcKoVE.png","cover":"https://gw.alipayobjects.com/zos/rmsportal/uMfMFlvUuceEyPpotzlq.png","status":"normal","percent":70,"logo":"https://gw.alipayobjects.com/zos/rmsportal/WdGqmHpayyMjiEhcKoVE.png","href":"https://ant.design","updatedAt":1594423617777,"createdAt":1594423617777,"subDescription":"城镇中有那么多的酒馆,她却偏偏走进了我的酒馆","description":"在中台产品的研发过程中,会出现不同的设计规范和实现方式,但其中往往存在很多类似的页面和组件,这些类似的组件会被抽离成一套标准规范。","activeUser":183992,"newUser":1090,"star":183,"like":148,"message":11,"content":"段落示意:蚂蚁金服设计平台 ant.design,用最小的工作量,无缝接入蚂蚁金服生态,提供跨越设计与开发的体验解决方案。蚂蚁金服设计平台 ant.design,用最小的工作量,无缝接入蚂蚁金服生态,提供跨越设计与开发的体验解决方案。","members":[{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/ZiESqWwCXBRQoaPONSJe.png","name":"曲丽丽","id":"member1"},{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/tBOxZPlITHqwlGjsJWaF.png","name":"王昭君","id":"member2"},{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/sBxjgqiuHMGRkIjqlQCd.png","name":"董娜娜","id":"member3"}]},{"id":"fake-list-9","owner":"仲尼","title":"Angular","avatar":"https://gw.alipayobjects.com/zos/rmsportal/zOsKZmFRdUtvpqCImOVY.png","cover":"https://gw.alipayobjects.com/zos/rmsportal/iZBVOIhGJiAnhplqjvZW.png","status":"active","percent":83,"logo":"https://gw.alipayobjects.com/zos/rmsportal/zOsKZmFRdUtvpqCImOVY.png","href":"https://ant.design","updatedAt":1594416417777,"createdAt":1594416417777,"subDescription":"那时候我只会想自己想要什么,从不想自己拥有什么","description":"在中台产品的研发过程中,会出现不同的设计规范和实现方式,但其中往往存在很多类似的页面和组件,这些类似的组件会被抽离成一套标准规范。","activeUser":121487,"newUser":1315,"star":126,"like":163,"message":16,"content":"段落示意:蚂蚁金服设计平台 ant.design,用最小的工作量,无缝接入蚂蚁金服生态,提供跨越设计与开发的体验解决方案。蚂蚁金服设计平台 ant.design,用最小的工作量,无缝接入蚂蚁金服生态,提供跨越设计与开发的体验解决方案。","members":[{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/ZiESqWwCXBRQoaPONSJe.png","name":"曲丽丽","id":"member1"},{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/tBOxZPlITHqwlGjsJWaF.png","name":"王昭君","id":"member2"},{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/sBxjgqiuHMGRkIjqlQCd.png","name":"董娜娜","id":"member3"}]},{"id":"fake-list-10","owner":"付小小","title":"Ant Design","avatar":"https://gw.alipayobjects.com/zos/rmsportal/dURIMkkrRFpPgTuzkwnB.png","cover":"https://gw.alipayobjects.com/zos/rmsportal/iXjVmWVHbCJAyqvDxdtx.png","status":"exception","percent":56,"logo":"https://gw.alipayobjects.com/zos/rmsportal/dURIMkkrRFpPgTuzkwnB.png","href":"https://ant.design","updatedAt":1594409217777,"createdAt":1594409217777,"subDescription":"那是一种内在的东西, 他们到达不了,也无法触及的","description":"在中台产品的研发过程中,会出现不同的设计规范和实现方式,但其中往往存在很多类似的页面和组件,这些类似的组件会被抽离成一套标准规范。","activeUser":131513,"newUser":1728,"star":111,"like":118,"message":17,"content":"段落示意:蚂蚁金服设计平台 ant.design,用最小的工作量,无缝接入蚂蚁金服生态,提供跨越设计与开发的体验解决方案。蚂蚁金服设计平台 ant.design,用最小的工作量,无缝接入蚂蚁金服生态,提供跨越设计与开发的体验解决方案。","members":[{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/ZiESqWwCXBRQoaPONSJe.png","name":"曲丽丽","id":"member1"},{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/tBOxZPlITHqwlGjsJWaF.png","name":"王昭君","id":"member2"},{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/sBxjgqiuHMGRkIjqlQCd.png","name":"董娜娜","id":"member3"}]},{"id":"fake-list-11","owner":"曲丽丽","title":"Ant Design Pro","avatar":"https://gw.alipayobjects.com/zos/rmsportal/sfjbOqnsXXJgNCjCzDBL.png","cover":"https://gw.alipayobjects.com/zos/rmsportal/gLaIAoVWTtLbBWZNYEMg.png","status":"normal","percent":77,"logo":"https://gw.alipayobjects.com/zos/rmsportal/sfjbOqnsXXJgNCjCzDBL.png","href":"https://ant.design","updatedAt":1594402017777,"createdAt":1594402017777,"subDescription":"希望是一个好东西,也许是最好的,好东西是不会消亡的","description":"在中台产品的研发过程中,会出现不同的设计规范和实现方式,但其中往往存在很多类似的页面和组件,这些类似的组件会被抽离成一套标准规范。","activeUser":132440,"newUser":1783,"star":111,"like":183,"message":14,"content":"段落示意:蚂蚁金服设计平台 ant.design,用最小的工作量,无缝接入蚂蚁金服生态,提供跨越设计与开发的体验解决方案。蚂蚁金服设计平台 ant.design,用最小的工作量,无缝接入蚂蚁金服生态,提供跨越设计与开发的体验解决方案。","members":[{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/ZiESqWwCXBRQoaPONSJe.png","name":"曲丽丽","id":"member1"},{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/tBOxZPlITHqwlGjsJWaF.png","name":"王昭君","id":"member2"},{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/sBxjgqiuHMGRkIjqlQCd.png","name":"董娜娜","id":"member3"}]},{"id":"fake-list-12","owner":"林东东","title":"Bootstrap","avatar":"https://gw.alipayobjects.com/zos/rmsportal/siCrBXXhmvTQGWPNLBow.png","cover":"https://gw.alipayobjects.com/zos/rmsportal/gLaIAoVWTtLbBWZNYEMg.png","status":"active","percent":54,"logo":"https://gw.alipayobjects.com/zos/rmsportal/siCrBXXhmvTQGWPNLBow.png","href":"https://ant.design","updatedAt":1594394817777,"createdAt":1594394817777,"subDescription":"生命就像一盒巧克力,结果往往出人意料","description":"在中台产品的研发过程中,会出现不同的设计规范和实现方式,但其中往往存在很多类似的页面和组件,这些类似的组件会被抽离成一套标准规范。","activeUser":140247,"newUser":1471,"star":179,"like":165,"message":15,"content":"段落示意:蚂蚁金服设计平台 ant.design,用最小的工作量,无缝接入蚂蚁金服生态,提供跨越设计与开发的体验解决方案。蚂蚁金服设计平台 ant.design,用最小的工作量,无缝接入蚂蚁金服生态,提供跨越设计与开发的体验解决方案。","members":[{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/ZiESqWwCXBRQoaPONSJe.png","name":"曲丽丽","id":"member1"},{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/tBOxZPlITHqwlGjsJWaF.png","name":"王昭君","id":"member2"},{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/sBxjgqiuHMGRkIjqlQCd.png","name":"董娜娜","id":"member3"}]},{"id":"fake-list-13","owner":"周星星","title":"React","avatar":"https://gw.alipayobjects.com/zos/rmsportal/kZzEzemZyKLKFsojXItE.png","cover":"https://gw.alipayobjects.com/zos/rmsportal/iXjVmWVHbCJAyqvDxdtx.png","status":"exception","percent":54,"logo":"https://gw.alipayobjects.com/zos/rmsportal/kZzEzemZyKLKFsojXItE.png","href":"https://ant.design","updatedAt":1594387617777,"createdAt":1594387617777,"subDescription":"城镇中有那么多的酒馆,她却偏偏走进了我的酒馆","description":"在中台产品的研发过程中,会出现不同的设计规范和实现方式,但其中往往存在很多类似的页面和组件,这些类似的组件会被抽离成一套标准规范。","activeUser":147349,"newUser":1157,"star":127,"like":123,"message":15,"content":"段落示意:蚂蚁金服设计平台 ant.design,用最小的工作量,无缝接入蚂蚁金服生态,提供跨越设计与开发的体验解决方案。蚂蚁金服设计平台 ant.design,用最小的工作量,无缝接入蚂蚁金服生态,提供跨越设计与开发的体验解决方案。","members":[{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/ZiESqWwCXBRQoaPONSJe.png","name":"曲丽丽","id":"member1"},{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/tBOxZPlITHqwlGjsJWaF.png","name":"王昭君","id":"member2"},{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/sBxjgqiuHMGRkIjqlQCd.png","name":"董娜娜","id":"member3"}]},{"id":"fake-list-14","owner":"吴加好","title":"Vue","avatar":"https://gw.alipayobjects.com/zos/rmsportal/ComBAopevLwENQdKWiIn.png","cover":"https://gw.alipayobjects.com/zos/rmsportal/iZBVOIhGJiAnhplqjvZW.png","status":"normal","percent":61,"logo":"https://gw.alipayobjects.com/zos/rmsportal/ComBAopevLwENQdKWiIn.png","href":"https://ant.design","updatedAt":1594380417777,"createdAt":1594380417777,"subDescription":"那时候我只会想自己想要什么,从不想自己拥有什么","description":"在中台产品的研发过程中,会出现不同的设计规范和实现方式,但其中往往存在很多类似的页面和组件,这些类似的组件会被抽离成一套标准规范。","activeUser":144837,"newUser":1922,"star":108,"like":143,"message":15,"content":"段落示意:蚂蚁金服设计平台 ant.design,用最小的工作量,无缝接入蚂蚁金服生态,提供跨越设计与开发的体验解决方案。蚂蚁金服设计平台 ant.design,用最小的工作量,无缝接入蚂蚁金服生态,提供跨越设计与开发的体验解决方案。","members":[{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/ZiESqWwCXBRQoaPONSJe.png","name":"曲丽丽","id":"member1"},{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/tBOxZPlITHqwlGjsJWaF.png","name":"王昭君","id":"member2"},{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/sBxjgqiuHMGRkIjqlQCd.png","name":"董娜娜","id":"member3"}]},{"id":"fake-list-15","owner":"朱偏右","title":"Webpack","avatar":"https://gw.alipayobjects.com/zos/rmsportal/nxkuOJlFJuAUhzlMTCEe.png","cover":"https://gw.alipayobjects.com/zos/rmsportal/uMfMFlvUuceEyPpotzlq.png","status":"active","percent":87,"logo":"https://gw.alipayobjects.com/zos/rmsportal/nxkuOJlFJuAUhzlMTCEe.png","href":"https://ant.design","updatedAt":1594373217777,"createdAt":1594373217777,"subDescription":"那是一种内在的东西, 他们到达不了,也无法触及的","description":"在中台产品的研发过程中,会出现不同的设计规范和实现方式,但其中往往存在很多类似的页面和组件,这些类似的组件会被抽离成一套标准规范。","activeUser":182827,"newUser":1324,"star":117,"like":166,"message":18,"content":"段落示意:蚂蚁金服设计平台 ant.design,用最小的工作量,无缝接入蚂蚁金服生态,提供跨越设计与开发的体验解决方案。蚂蚁金服设计平台 ant.design,用最小的工作量,无缝接入蚂蚁金服生态,提供跨越设计与开发的体验解决方案。","members":[{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/ZiESqWwCXBRQoaPONSJe.png","name":"曲丽丽","id":"member1"},{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/tBOxZPlITHqwlGjsJWaF.png","name":"王昭君","id":"member2"},{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/sBxjgqiuHMGRkIjqlQCd.png","name":"董娜娜","id":"member3"}]},{"id":"fake-list-16","owner":"鱼酱","title":"Alipay","avatar":"https://gw.alipayobjects.com/zos/rmsportal/WdGqmHpayyMjiEhcKoVE.png","cover":"https://gw.alipayobjects.com/zos/rmsportal/uMfMFlvUuceEyPpotzlq.png","status":"exception","percent":84,"logo":"https://gw.alipayobjects.com/zos/rmsportal/WdGqmHpayyMjiEhcKoVE.png","href":"https://ant.design","updatedAt":1594366017777,"createdAt":1594366017777,"subDescription":"希望是一个好东西,也许是最好的,好东西是不会消亡的","description":"在中台产品的研发过程中,会出现不同的设计规范和实现方式,但其中往往存在很多类似的页面和组件,这些类似的组件会被抽离成一套标准规范。","activeUser":186781,"newUser":1862,"star":175,"like":112,"message":18,"content":"段落示意:蚂蚁金服设计平台 ant.design,用最小的工作量,无缝接入蚂蚁金服生态,提供跨越设计与开发的体验解决方案。蚂蚁金服设计平台 ant.design,用最小的工作量,无缝接入蚂蚁金服生态,提供跨越设计与开发的体验解决方案。","members":[{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/ZiESqWwCXBRQoaPONSJe.png","name":"曲丽丽","id":"member1"},{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/tBOxZPlITHqwlGjsJWaF.png","name":"王昭君","id":"member2"},{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/sBxjgqiuHMGRkIjqlQCd.png","name":"董娜娜","id":"member3"}]},{"id":"fake-list-17","owner":"乐哥","title":"Angular","avatar":"https://gw.alipayobjects.com/zos/rmsportal/zOsKZmFRdUtvpqCImOVY.png","cover":"https://gw.alipayobjects.com/zos/rmsportal/iZBVOIhGJiAnhplqjvZW.png","status":"normal","percent":56,"logo":"https://gw.alipayobjects.com/zos/rmsportal/zOsKZmFRdUtvpqCImOVY.png","href":"https://ant.design","updatedAt":1594358817777,"createdAt":1594358817777,"subDescription":"生命就像一盒巧克力,结果往往出人意料","description":"在中台产品的研发过程中,会出现不同的设计规范和实现方式,但其中往往存在很多类似的页面和组件,这些类似的组件会被抽离成一套标准规范。","activeUser":157259,"newUser":1920,"star":155,"like":116,"message":14,"content":"段落示意:蚂蚁金服设计平台 ant.design,用最小的工作量,无缝接入蚂蚁金服生态,提供跨越设计与开发的体验解决方案。蚂蚁金服设计平台 ant.design,用最小的工作量,无缝接入蚂蚁金服生态,提供跨越设计与开发的体验解决方案。","members":[{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/ZiESqWwCXBRQoaPONSJe.png","name":"曲丽丽","id":"member1"},{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/tBOxZPlITHqwlGjsJWaF.png","name":"王昭君","id":"member2"},{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/sBxjgqiuHMGRkIjqlQCd.png","name":"董娜娜","id":"member3"}]},{"id":"fake-list-18","owner":"谭小仪","title":"Ant Design","avatar":"https://gw.alipayobjects.com/zos/rmsportal/dURIMkkrRFpPgTuzkwnB.png","cover":"https://gw.alipayobjects.com/zos/rmsportal/iXjVmWVHbCJAyqvDxdtx.png","status":"active","percent":64,"logo":"https://gw.alipayobjects.com/zos/rmsportal/dURIMkkrRFpPgTuzkwnB.png","href":"https://ant.design","updatedAt":1594351617777,"createdAt":1594351617777,"subDescription":"城镇中有那么多的酒馆,她却偏偏走进了我的酒馆","description":"在中台产品的研发过程中,会出现不同的设计规范和实现方式,但其中往往存在很多类似的页面和组件,这些类似的组件会被抽离成一套标准规范。","activeUser":187409,"newUser":1822,"star":199,"like":135,"message":14,"content":"段落示意:蚂蚁金服设计平台 ant.design,用最小的工作量,无缝接入蚂蚁金服生态,提供跨越设计与开发的体验解决方案。蚂蚁金服设计平台 ant.design,用最小的工作量,无缝接入蚂蚁金服生态,提供跨越设计与开发的体验解决方案。","members":[{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/ZiESqWwCXBRQoaPONSJe.png","name":"曲丽丽","id":"member1"},{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/tBOxZPlITHqwlGjsJWaF.png","name":"王昭君","id":"member2"},{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/sBxjgqiuHMGRkIjqlQCd.png","name":"董娜娜","id":"member3"}]},{"id":"fake-list-19","owner":"仲尼","title":"Ant Design Pro","avatar":"https://gw.alipayobjects.com/zos/rmsportal/sfjbOqnsXXJgNCjCzDBL.png","cover":"https://gw.alipayobjects.com/zos/rmsportal/gLaIAoVWTtLbBWZNYEMg.png","status":"exception","percent":84,"logo":"https://gw.alipayobjects.com/zos/rmsportal/sfjbOqnsXXJgNCjCzDBL.png","href":"https://ant.design","updatedAt":1594344417777,"createdAt":1594344417777,"subDescription":"那时候我只会想自己想要什么,从不想自己拥有什么","description":"在中台产品的研发过程中,会出现不同的设计规范和实现方式,但其中往往存在很多类似的页面和组件,这些类似的组件会被抽离成一套标准规范。","activeUser":192867,"newUser":1830,"star":200,"like":158,"message":18,"content":"段落示意:蚂蚁金服设计平台 ant.design,用最小的工作量,无缝接入蚂蚁金服生态,提供跨越设计与开发的体验解决方案。蚂蚁金服设计平台 ant.design,用最小的工作量,无缝接入蚂蚁金服生态,提供跨越设计与开发的体验解决方案。","members":[{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/ZiESqWwCXBRQoaPONSJe.png","name":"曲丽丽","id":"member1"},{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/tBOxZPlITHqwlGjsJWaF.png","name":"王昭君","id":"member2"},{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/sBxjgqiuHMGRkIjqlQCd.png","name":"董娜娜","id":"member3"}]}] \ No newline at end of file +[{"id":"fake-list-0","owner":"付小小","title":"Alipay","avatar":"https://gw.alipayobjects.com/zos/rmsportal/WdGqmHpayyMjiEhcKoVE.png","cover":"https://gw.alipayobjects.com/zos/rmsportal/uMfMFlvUuceEyPpotzlq.png","status":"active","percent":61,"logo":"https://gw.alipayobjects.com/zos/rmsportal/WdGqmHpayyMjiEhcKoVE.png","href":"https://ant.design","updatedAt":1599562134333,"createdAt":1599562134333,"subDescription":"那是一种内在的东西, 他们到达不了,也无法触及的","description":"在中台产品的研发过程中,会出现不同的设计规范和实现方式,但其中往往存在很多类似的页面和组件,这些类似的组件会被抽离成一套标准规范。","activeUser":194692,"newUser":1107,"star":168,"like":166,"message":20,"content":"段落示意:蚂蚁金服设计平台 ant.design,用最小的工作量,无缝接入蚂蚁金服生态,提供跨越设计与开发的体验解决方案。蚂蚁金服设计平台 ant.design,用最小的工作量,无缝接入蚂蚁金服生态,提供跨越设计与开发的体验解决方案。","members":[{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/ZiESqWwCXBRQoaPONSJe.png","name":"曲丽丽","id":"member1"},{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/tBOxZPlITHqwlGjsJWaF.png","name":"王昭君","id":"member2"},{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/sBxjgqiuHMGRkIjqlQCd.png","name":"董娜娜","id":"member3"}]},{"id":"fake-list-1","owner":"曲丽丽","title":"Angular","avatar":"https://gw.alipayobjects.com/zos/rmsportal/zOsKZmFRdUtvpqCImOVY.png","cover":"https://gw.alipayobjects.com/zos/rmsportal/iZBVOIhGJiAnhplqjvZW.png","status":"exception","percent":67,"logo":"https://gw.alipayobjects.com/zos/rmsportal/zOsKZmFRdUtvpqCImOVY.png","href":"https://ant.design","updatedAt":1599554934333,"createdAt":1599554934333,"subDescription":"希望是一个好东西,也许是最好的,好东西是不会消亡的","description":"在中台产品的研发过程中,会出现不同的设计规范和实现方式,但其中往往存在很多类似的页面和组件,这些类似的组件会被抽离成一套标准规范。","activeUser":187530,"newUser":1662,"star":184,"like":134,"message":20,"content":"段落示意:蚂蚁金服设计平台 ant.design,用最小的工作量,无缝接入蚂蚁金服生态,提供跨越设计与开发的体验解决方案。蚂蚁金服设计平台 ant.design,用最小的工作量,无缝接入蚂蚁金服生态,提供跨越设计与开发的体验解决方案。","members":[{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/ZiESqWwCXBRQoaPONSJe.png","name":"曲丽丽","id":"member1"},{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/tBOxZPlITHqwlGjsJWaF.png","name":"王昭君","id":"member2"},{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/sBxjgqiuHMGRkIjqlQCd.png","name":"董娜娜","id":"member3"}]},{"id":"fake-list-2","owner":"林东东","title":"Ant Design","avatar":"https://gw.alipayobjects.com/zos/rmsportal/dURIMkkrRFpPgTuzkwnB.png","cover":"https://gw.alipayobjects.com/zos/rmsportal/iXjVmWVHbCJAyqvDxdtx.png","status":"normal","percent":88,"logo":"https://gw.alipayobjects.com/zos/rmsportal/dURIMkkrRFpPgTuzkwnB.png","href":"https://ant.design","updatedAt":1599547734333,"createdAt":1599547734333,"subDescription":"生命就像一盒巧克力,结果往往出人意料","description":"在中台产品的研发过程中,会出现不同的设计规范和实现方式,但其中往往存在很多类似的页面和组件,这些类似的组件会被抽离成一套标准规范。","activeUser":150552,"newUser":1281,"star":114,"like":124,"message":20,"content":"段落示意:蚂蚁金服设计平台 ant.design,用最小的工作量,无缝接入蚂蚁金服生态,提供跨越设计与开发的体验解决方案。蚂蚁金服设计平台 ant.design,用最小的工作量,无缝接入蚂蚁金服生态,提供跨越设计与开发的体验解决方案。","members":[{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/ZiESqWwCXBRQoaPONSJe.png","name":"曲丽丽","id":"member1"},{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/tBOxZPlITHqwlGjsJWaF.png","name":"王昭君","id":"member2"},{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/sBxjgqiuHMGRkIjqlQCd.png","name":"董娜娜","id":"member3"}]},{"id":"fake-list-3","owner":"周星星","title":"Ant Design Pro","avatar":"https://gw.alipayobjects.com/zos/rmsportal/sfjbOqnsXXJgNCjCzDBL.png","cover":"https://gw.alipayobjects.com/zos/rmsportal/gLaIAoVWTtLbBWZNYEMg.png","status":"active","percent":59,"logo":"https://gw.alipayobjects.com/zos/rmsportal/sfjbOqnsXXJgNCjCzDBL.png","href":"https://ant.design","updatedAt":1599540534333,"createdAt":1599540534333,"subDescription":"城镇中有那么多的酒馆,她却偏偏走进了我的酒馆","description":"在中台产品的研发过程中,会出现不同的设计规范和实现方式,但其中往往存在很多类似的页面和组件,这些类似的组件会被抽离成一套标准规范。","activeUser":180730,"newUser":1941,"star":109,"like":120,"message":13,"content":"段落示意:蚂蚁金服设计平台 ant.design,用最小的工作量,无缝接入蚂蚁金服生态,提供跨越设计与开发的体验解决方案。蚂蚁金服设计平台 ant.design,用最小的工作量,无缝接入蚂蚁金服生态,提供跨越设计与开发的体验解决方案。","members":[{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/ZiESqWwCXBRQoaPONSJe.png","name":"曲丽丽","id":"member1"},{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/tBOxZPlITHqwlGjsJWaF.png","name":"王昭君","id":"member2"},{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/sBxjgqiuHMGRkIjqlQCd.png","name":"董娜娜","id":"member3"}]},{"id":"fake-list-4","owner":"吴加好","title":"Bootstrap","avatar":"https://gw.alipayobjects.com/zos/rmsportal/siCrBXXhmvTQGWPNLBow.png","cover":"https://gw.alipayobjects.com/zos/rmsportal/gLaIAoVWTtLbBWZNYEMg.png","status":"exception","percent":83,"logo":"https://gw.alipayobjects.com/zos/rmsportal/siCrBXXhmvTQGWPNLBow.png","href":"https://ant.design","updatedAt":1599533334333,"createdAt":1599533334333,"subDescription":"那时候我只会想自己想要什么,从不想自己拥有什么","description":"在中台产品的研发过程中,会出现不同的设计规范和实现方式,但其中往往存在很多类似的页面和组件,这些类似的组件会被抽离成一套标准规范。","activeUser":159357,"newUser":1067,"star":139,"like":179,"message":14,"content":"段落示意:蚂蚁金服设计平台 ant.design,用最小的工作量,无缝接入蚂蚁金服生态,提供跨越设计与开发的体验解决方案。蚂蚁金服设计平台 ant.design,用最小的工作量,无缝接入蚂蚁金服生态,提供跨越设计与开发的体验解决方案。","members":[{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/ZiESqWwCXBRQoaPONSJe.png","name":"曲丽丽","id":"member1"},{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/tBOxZPlITHqwlGjsJWaF.png","name":"王昭君","id":"member2"},{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/sBxjgqiuHMGRkIjqlQCd.png","name":"董娜娜","id":"member3"}]},{"id":"fake-list-5","owner":"朱偏右","title":"React","avatar":"https://gw.alipayobjects.com/zos/rmsportal/kZzEzemZyKLKFsojXItE.png","cover":"https://gw.alipayobjects.com/zos/rmsportal/iXjVmWVHbCJAyqvDxdtx.png","status":"normal","percent":92,"logo":"https://gw.alipayobjects.com/zos/rmsportal/kZzEzemZyKLKFsojXItE.png","href":"https://ant.design","updatedAt":1599526134333,"createdAt":1599526134333,"subDescription":"那是一种内在的东西, 他们到达不了,也无法触及的","description":"在中台产品的研发过程中,会出现不同的设计规范和实现方式,但其中往往存在很多类似的页面和组件,这些类似的组件会被抽离成一套标准规范。","activeUser":126480,"newUser":1467,"star":151,"like":171,"message":11,"content":"段落示意:蚂蚁金服设计平台 ant.design,用最小的工作量,无缝接入蚂蚁金服生态,提供跨越设计与开发的体验解决方案。蚂蚁金服设计平台 ant.design,用最小的工作量,无缝接入蚂蚁金服生态,提供跨越设计与开发的体验解决方案。","members":[{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/ZiESqWwCXBRQoaPONSJe.png","name":"曲丽丽","id":"member1"},{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/tBOxZPlITHqwlGjsJWaF.png","name":"王昭君","id":"member2"},{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/sBxjgqiuHMGRkIjqlQCd.png","name":"董娜娜","id":"member3"}]},{"id":"fake-list-6","owner":"鱼酱","title":"Vue","avatar":"https://gw.alipayobjects.com/zos/rmsportal/ComBAopevLwENQdKWiIn.png","cover":"https://gw.alipayobjects.com/zos/rmsportal/iZBVOIhGJiAnhplqjvZW.png","status":"active","percent":62,"logo":"https://gw.alipayobjects.com/zos/rmsportal/ComBAopevLwENQdKWiIn.png","href":"https://ant.design","updatedAt":1599518934333,"createdAt":1599518934333,"subDescription":"希望是一个好东西,也许是最好的,好东西是不会消亡的","description":"在中台产品的研发过程中,会出现不同的设计规范和实现方式,但其中往往存在很多类似的页面和组件,这些类似的组件会被抽离成一套标准规范。","activeUser":132662,"newUser":1788,"star":114,"like":115,"message":14,"content":"段落示意:蚂蚁金服设计平台 ant.design,用最小的工作量,无缝接入蚂蚁金服生态,提供跨越设计与开发的体验解决方案。蚂蚁金服设计平台 ant.design,用最小的工作量,无缝接入蚂蚁金服生态,提供跨越设计与开发的体验解决方案。","members":[{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/ZiESqWwCXBRQoaPONSJe.png","name":"曲丽丽","id":"member1"},{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/tBOxZPlITHqwlGjsJWaF.png","name":"王昭君","id":"member2"},{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/sBxjgqiuHMGRkIjqlQCd.png","name":"董娜娜","id":"member3"}]},{"id":"fake-list-7","owner":"乐哥","title":"Webpack","avatar":"https://gw.alipayobjects.com/zos/rmsportal/nxkuOJlFJuAUhzlMTCEe.png","cover":"https://gw.alipayobjects.com/zos/rmsportal/uMfMFlvUuceEyPpotzlq.png","status":"exception","percent":98,"logo":"https://gw.alipayobjects.com/zos/rmsportal/nxkuOJlFJuAUhzlMTCEe.png","href":"https://ant.design","updatedAt":1599511734333,"createdAt":1599511734333,"subDescription":"生命就像一盒巧克力,结果往往出人意料","description":"在中台产品的研发过程中,会出现不同的设计规范和实现方式,但其中往往存在很多类似的页面和组件,这些类似的组件会被抽离成一套标准规范。","activeUser":190515,"newUser":1329,"star":105,"like":192,"message":11,"content":"段落示意:蚂蚁金服设计平台 ant.design,用最小的工作量,无缝接入蚂蚁金服生态,提供跨越设计与开发的体验解决方案。蚂蚁金服设计平台 ant.design,用最小的工作量,无缝接入蚂蚁金服生态,提供跨越设计与开发的体验解决方案。","members":[{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/ZiESqWwCXBRQoaPONSJe.png","name":"曲丽丽","id":"member1"},{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/tBOxZPlITHqwlGjsJWaF.png","name":"王昭君","id":"member2"},{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/sBxjgqiuHMGRkIjqlQCd.png","name":"董娜娜","id":"member3"}]},{"id":"fake-list-8","owner":"谭小仪","title":"Alipay","avatar":"https://gw.alipayobjects.com/zos/rmsportal/WdGqmHpayyMjiEhcKoVE.png","cover":"https://gw.alipayobjects.com/zos/rmsportal/uMfMFlvUuceEyPpotzlq.png","status":"normal","percent":73,"logo":"https://gw.alipayobjects.com/zos/rmsportal/WdGqmHpayyMjiEhcKoVE.png","href":"https://ant.design","updatedAt":1599504534333,"createdAt":1599504534333,"subDescription":"城镇中有那么多的酒馆,她却偏偏走进了我的酒馆","description":"在中台产品的研发过程中,会出现不同的设计规范和实现方式,但其中往往存在很多类似的页面和组件,这些类似的组件会被抽离成一套标准规范。","activeUser":146120,"newUser":1375,"star":144,"like":114,"message":14,"content":"段落示意:蚂蚁金服设计平台 ant.design,用最小的工作量,无缝接入蚂蚁金服生态,提供跨越设计与开发的体验解决方案。蚂蚁金服设计平台 ant.design,用最小的工作量,无缝接入蚂蚁金服生态,提供跨越设计与开发的体验解决方案。","members":[{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/ZiESqWwCXBRQoaPONSJe.png","name":"曲丽丽","id":"member1"},{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/tBOxZPlITHqwlGjsJWaF.png","name":"王昭君","id":"member2"},{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/sBxjgqiuHMGRkIjqlQCd.png","name":"董娜娜","id":"member3"}]},{"id":"fake-list-9","owner":"仲尼","title":"Angular","avatar":"https://gw.alipayobjects.com/zos/rmsportal/zOsKZmFRdUtvpqCImOVY.png","cover":"https://gw.alipayobjects.com/zos/rmsportal/iZBVOIhGJiAnhplqjvZW.png","status":"active","percent":86,"logo":"https://gw.alipayobjects.com/zos/rmsportal/zOsKZmFRdUtvpqCImOVY.png","href":"https://ant.design","updatedAt":1599497334333,"createdAt":1599497334333,"subDescription":"那时候我只会想自己想要什么,从不想自己拥有什么","description":"在中台产品的研发过程中,会出现不同的设计规范和实现方式,但其中往往存在很多类似的页面和组件,这些类似的组件会被抽离成一套标准规范。","activeUser":150379,"newUser":1405,"star":174,"like":123,"message":20,"content":"段落示意:蚂蚁金服设计平台 ant.design,用最小的工作量,无缝接入蚂蚁金服生态,提供跨越设计与开发的体验解决方案。蚂蚁金服设计平台 ant.design,用最小的工作量,无缝接入蚂蚁金服生态,提供跨越设计与开发的体验解决方案。","members":[{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/ZiESqWwCXBRQoaPONSJe.png","name":"曲丽丽","id":"member1"},{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/tBOxZPlITHqwlGjsJWaF.png","name":"王昭君","id":"member2"},{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/sBxjgqiuHMGRkIjqlQCd.png","name":"董娜娜","id":"member3"}]},{"id":"fake-list-10","owner":"付小小","title":"Ant Design","avatar":"https://gw.alipayobjects.com/zos/rmsportal/dURIMkkrRFpPgTuzkwnB.png","cover":"https://gw.alipayobjects.com/zos/rmsportal/iXjVmWVHbCJAyqvDxdtx.png","status":"exception","percent":99,"logo":"https://gw.alipayobjects.com/zos/rmsportal/dURIMkkrRFpPgTuzkwnB.png","href":"https://ant.design","updatedAt":1599490134333,"createdAt":1599490134333,"subDescription":"那是一种内在的东西, 他们到达不了,也无法触及的","description":"在中台产品的研发过程中,会出现不同的设计规范和实现方式,但其中往往存在很多类似的页面和组件,这些类似的组件会被抽离成一套标准规范。","activeUser":192197,"newUser":1748,"star":200,"like":141,"message":20,"content":"段落示意:蚂蚁金服设计平台 ant.design,用最小的工作量,无缝接入蚂蚁金服生态,提供跨越设计与开发的体验解决方案。蚂蚁金服设计平台 ant.design,用最小的工作量,无缝接入蚂蚁金服生态,提供跨越设计与开发的体验解决方案。","members":[{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/ZiESqWwCXBRQoaPONSJe.png","name":"曲丽丽","id":"member1"},{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/tBOxZPlITHqwlGjsJWaF.png","name":"王昭君","id":"member2"},{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/sBxjgqiuHMGRkIjqlQCd.png","name":"董娜娜","id":"member3"}]},{"id":"fake-list-11","owner":"曲丽丽","title":"Ant Design Pro","avatar":"https://gw.alipayobjects.com/zos/rmsportal/sfjbOqnsXXJgNCjCzDBL.png","cover":"https://gw.alipayobjects.com/zos/rmsportal/gLaIAoVWTtLbBWZNYEMg.png","status":"normal","percent":55,"logo":"https://gw.alipayobjects.com/zos/rmsportal/sfjbOqnsXXJgNCjCzDBL.png","href":"https://ant.design","updatedAt":1599482934333,"createdAt":1599482934333,"subDescription":"希望是一个好东西,也许是最好的,好东西是不会消亡的","description":"在中台产品的研发过程中,会出现不同的设计规范和实现方式,但其中往往存在很多类似的页面和组件,这些类似的组件会被抽离成一套标准规范。","activeUser":125408,"newUser":1937,"star":158,"like":183,"message":17,"content":"段落示意:蚂蚁金服设计平台 ant.design,用最小的工作量,无缝接入蚂蚁金服生态,提供跨越设计与开发的体验解决方案。蚂蚁金服设计平台 ant.design,用最小的工作量,无缝接入蚂蚁金服生态,提供跨越设计与开发的体验解决方案。","members":[{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/ZiESqWwCXBRQoaPONSJe.png","name":"曲丽丽","id":"member1"},{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/tBOxZPlITHqwlGjsJWaF.png","name":"王昭君","id":"member2"},{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/sBxjgqiuHMGRkIjqlQCd.png","name":"董娜娜","id":"member3"}]},{"id":"fake-list-12","owner":"林东东","title":"Bootstrap","avatar":"https://gw.alipayobjects.com/zos/rmsportal/siCrBXXhmvTQGWPNLBow.png","cover":"https://gw.alipayobjects.com/zos/rmsportal/gLaIAoVWTtLbBWZNYEMg.png","status":"active","percent":62,"logo":"https://gw.alipayobjects.com/zos/rmsportal/siCrBXXhmvTQGWPNLBow.png","href":"https://ant.design","updatedAt":1599475734333,"createdAt":1599475734333,"subDescription":"生命就像一盒巧克力,结果往往出人意料","description":"在中台产品的研发过程中,会出现不同的设计规范和实现方式,但其中往往存在很多类似的页面和组件,这些类似的组件会被抽离成一套标准规范。","activeUser":150702,"newUser":1303,"star":143,"like":101,"message":20,"content":"段落示意:蚂蚁金服设计平台 ant.design,用最小的工作量,无缝接入蚂蚁金服生态,提供跨越设计与开发的体验解决方案。蚂蚁金服设计平台 ant.design,用最小的工作量,无缝接入蚂蚁金服生态,提供跨越设计与开发的体验解决方案。","members":[{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/ZiESqWwCXBRQoaPONSJe.png","name":"曲丽丽","id":"member1"},{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/tBOxZPlITHqwlGjsJWaF.png","name":"王昭君","id":"member2"},{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/sBxjgqiuHMGRkIjqlQCd.png","name":"董娜娜","id":"member3"}]},{"id":"fake-list-13","owner":"周星星","title":"React","avatar":"https://gw.alipayobjects.com/zos/rmsportal/kZzEzemZyKLKFsojXItE.png","cover":"https://gw.alipayobjects.com/zos/rmsportal/iXjVmWVHbCJAyqvDxdtx.png","status":"exception","percent":87,"logo":"https://gw.alipayobjects.com/zos/rmsportal/kZzEzemZyKLKFsojXItE.png","href":"https://ant.design","updatedAt":1599468534333,"createdAt":1599468534333,"subDescription":"城镇中有那么多的酒馆,她却偏偏走进了我的酒馆","description":"在中台产品的研发过程中,会出现不同的设计规范和实现方式,但其中往往存在很多类似的页面和组件,这些类似的组件会被抽离成一套标准规范。","activeUser":106681,"newUser":1051,"star":124,"like":194,"message":17,"content":"段落示意:蚂蚁金服设计平台 ant.design,用最小的工作量,无缝接入蚂蚁金服生态,提供跨越设计与开发的体验解决方案。蚂蚁金服设计平台 ant.design,用最小的工作量,无缝接入蚂蚁金服生态,提供跨越设计与开发的体验解决方案。","members":[{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/ZiESqWwCXBRQoaPONSJe.png","name":"曲丽丽","id":"member1"},{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/tBOxZPlITHqwlGjsJWaF.png","name":"王昭君","id":"member2"},{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/sBxjgqiuHMGRkIjqlQCd.png","name":"董娜娜","id":"member3"}]},{"id":"fake-list-14","owner":"吴加好","title":"Vue","avatar":"https://gw.alipayobjects.com/zos/rmsportal/ComBAopevLwENQdKWiIn.png","cover":"https://gw.alipayobjects.com/zos/rmsportal/iZBVOIhGJiAnhplqjvZW.png","status":"normal","percent":74,"logo":"https://gw.alipayobjects.com/zos/rmsportal/ComBAopevLwENQdKWiIn.png","href":"https://ant.design","updatedAt":1599461334333,"createdAt":1599461334333,"subDescription":"那时候我只会想自己想要什么,从不想自己拥有什么","description":"在中台产品的研发过程中,会出现不同的设计规范和实现方式,但其中往往存在很多类似的页面和组件,这些类似的组件会被抽离成一套标准规范。","activeUser":192810,"newUser":1574,"star":188,"like":124,"message":16,"content":"段落示意:蚂蚁金服设计平台 ant.design,用最小的工作量,无缝接入蚂蚁金服生态,提供跨越设计与开发的体验解决方案。蚂蚁金服设计平台 ant.design,用最小的工作量,无缝接入蚂蚁金服生态,提供跨越设计与开发的体验解决方案。","members":[{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/ZiESqWwCXBRQoaPONSJe.png","name":"曲丽丽","id":"member1"},{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/tBOxZPlITHqwlGjsJWaF.png","name":"王昭君","id":"member2"},{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/sBxjgqiuHMGRkIjqlQCd.png","name":"董娜娜","id":"member3"}]},{"id":"fake-list-15","owner":"朱偏右","title":"Webpack","avatar":"https://gw.alipayobjects.com/zos/rmsportal/nxkuOJlFJuAUhzlMTCEe.png","cover":"https://gw.alipayobjects.com/zos/rmsportal/uMfMFlvUuceEyPpotzlq.png","status":"active","percent":58,"logo":"https://gw.alipayobjects.com/zos/rmsportal/nxkuOJlFJuAUhzlMTCEe.png","href":"https://ant.design","updatedAt":1599454134333,"createdAt":1599454134333,"subDescription":"那是一种内在的东西, 他们到达不了,也无法触及的","description":"在中台产品的研发过程中,会出现不同的设计规范和实现方式,但其中往往存在很多类似的页面和组件,这些类似的组件会被抽离成一套标准规范。","activeUser":129396,"newUser":1837,"star":106,"like":160,"message":13,"content":"段落示意:蚂蚁金服设计平台 ant.design,用最小的工作量,无缝接入蚂蚁金服生态,提供跨越设计与开发的体验解决方案。蚂蚁金服设计平台 ant.design,用最小的工作量,无缝接入蚂蚁金服生态,提供跨越设计与开发的体验解决方案。","members":[{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/ZiESqWwCXBRQoaPONSJe.png","name":"曲丽丽","id":"member1"},{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/tBOxZPlITHqwlGjsJWaF.png","name":"王昭君","id":"member2"},{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/sBxjgqiuHMGRkIjqlQCd.png","name":"董娜娜","id":"member3"}]},{"id":"fake-list-16","owner":"鱼酱","title":"Alipay","avatar":"https://gw.alipayobjects.com/zos/rmsportal/WdGqmHpayyMjiEhcKoVE.png","cover":"https://gw.alipayobjects.com/zos/rmsportal/uMfMFlvUuceEyPpotzlq.png","status":"exception","percent":77,"logo":"https://gw.alipayobjects.com/zos/rmsportal/WdGqmHpayyMjiEhcKoVE.png","href":"https://ant.design","updatedAt":1599446934333,"createdAt":1599446934333,"subDescription":"希望是一个好东西,也许是最好的,好东西是不会消亡的","description":"在中台产品的研发过程中,会出现不同的设计规范和实现方式,但其中往往存在很多类似的页面和组件,这些类似的组件会被抽离成一套标准规范。","activeUser":101826,"newUser":1050,"star":124,"like":111,"message":12,"content":"段落示意:蚂蚁金服设计平台 ant.design,用最小的工作量,无缝接入蚂蚁金服生态,提供跨越设计与开发的体验解决方案。蚂蚁金服设计平台 ant.design,用最小的工作量,无缝接入蚂蚁金服生态,提供跨越设计与开发的体验解决方案。","members":[{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/ZiESqWwCXBRQoaPONSJe.png","name":"曲丽丽","id":"member1"},{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/tBOxZPlITHqwlGjsJWaF.png","name":"王昭君","id":"member2"},{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/sBxjgqiuHMGRkIjqlQCd.png","name":"董娜娜","id":"member3"}]},{"id":"fake-list-17","owner":"乐哥","title":"Angular","avatar":"https://gw.alipayobjects.com/zos/rmsportal/zOsKZmFRdUtvpqCImOVY.png","cover":"https://gw.alipayobjects.com/zos/rmsportal/iZBVOIhGJiAnhplqjvZW.png","status":"normal","percent":79,"logo":"https://gw.alipayobjects.com/zos/rmsportal/zOsKZmFRdUtvpqCImOVY.png","href":"https://ant.design","updatedAt":1599439734333,"createdAt":1599439734333,"subDescription":"生命就像一盒巧克力,结果往往出人意料","description":"在中台产品的研发过程中,会出现不同的设计规范和实现方式,但其中往往存在很多类似的页面和组件,这些类似的组件会被抽离成一套标准规范。","activeUser":156853,"newUser":1826,"star":118,"like":136,"message":19,"content":"段落示意:蚂蚁金服设计平台 ant.design,用最小的工作量,无缝接入蚂蚁金服生态,提供跨越设计与开发的体验解决方案。蚂蚁金服设计平台 ant.design,用最小的工作量,无缝接入蚂蚁金服生态,提供跨越设计与开发的体验解决方案。","members":[{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/ZiESqWwCXBRQoaPONSJe.png","name":"曲丽丽","id":"member1"},{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/tBOxZPlITHqwlGjsJWaF.png","name":"王昭君","id":"member2"},{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/sBxjgqiuHMGRkIjqlQCd.png","name":"董娜娜","id":"member3"}]},{"id":"fake-list-18","owner":"谭小仪","title":"Ant Design","avatar":"https://gw.alipayobjects.com/zos/rmsportal/dURIMkkrRFpPgTuzkwnB.png","cover":"https://gw.alipayobjects.com/zos/rmsportal/iXjVmWVHbCJAyqvDxdtx.png","status":"active","percent":77,"logo":"https://gw.alipayobjects.com/zos/rmsportal/dURIMkkrRFpPgTuzkwnB.png","href":"https://ant.design","updatedAt":1599432534333,"createdAt":1599432534333,"subDescription":"城镇中有那么多的酒馆,她却偏偏走进了我的酒馆","description":"在中台产品的研发过程中,会出现不同的设计规范和实现方式,但其中往往存在很多类似的页面和组件,这些类似的组件会被抽离成一套标准规范。","activeUser":101902,"newUser":1352,"star":131,"like":118,"message":12,"content":"段落示意:蚂蚁金服设计平台 ant.design,用最小的工作量,无缝接入蚂蚁金服生态,提供跨越设计与开发的体验解决方案。蚂蚁金服设计平台 ant.design,用最小的工作量,无缝接入蚂蚁金服生态,提供跨越设计与开发的体验解决方案。","members":[{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/ZiESqWwCXBRQoaPONSJe.png","name":"曲丽丽","id":"member1"},{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/tBOxZPlITHqwlGjsJWaF.png","name":"王昭君","id":"member2"},{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/sBxjgqiuHMGRkIjqlQCd.png","name":"董娜娜","id":"member3"}]},{"id":"fake-list-19","owner":"仲尼","title":"Ant Design Pro","avatar":"https://gw.alipayobjects.com/zos/rmsportal/sfjbOqnsXXJgNCjCzDBL.png","cover":"https://gw.alipayobjects.com/zos/rmsportal/gLaIAoVWTtLbBWZNYEMg.png","status":"exception","percent":75,"logo":"https://gw.alipayobjects.com/zos/rmsportal/sfjbOqnsXXJgNCjCzDBL.png","href":"https://ant.design","updatedAt":1599425334333,"createdAt":1599425334333,"subDescription":"那时候我只会想自己想要什么,从不想自己拥有什么","description":"在中台产品的研发过程中,会出现不同的设计规范和实现方式,但其中往往存在很多类似的页面和组件,这些类似的组件会被抽离成一套标准规范。","activeUser":125791,"newUser":1504,"star":174,"like":195,"message":17,"content":"段落示意:蚂蚁金服设计平台 ant.design,用最小的工作量,无缝接入蚂蚁金服生态,提供跨越设计与开发的体验解决方案。蚂蚁金服设计平台 ant.design,用最小的工作量,无缝接入蚂蚁金服生态,提供跨越设计与开发的体验解决方案。","members":[{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/ZiESqWwCXBRQoaPONSJe.png","name":"曲丽丽","id":"member1"},{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/tBOxZPlITHqwlGjsJWaF.png","name":"王昭君","id":"member2"},{"avatar":"https://gw.alipayobjects.com/zos/rmsportal/sBxjgqiuHMGRkIjqlQCd.png","name":"董娜娜","id":"member3"}]}] \ No newline at end of file diff --git a/src/AntDesign.Pro/wwwroot/data/menu.json b/src/AntDesign.Pro/wwwroot/data/menu.json index cc93b5f..5f87733 100644 --- a/src/AntDesign.Pro/wwwroot/data/menu.json +++ b/src/AntDesign.Pro/wwwroot/data/menu.json @@ -51,6 +51,28 @@ "key": "list", "icon": "table", "children": [ + { + "path": "/list/search", + "name": "搜索列表", + "key": "list.search", + "children": [ + { + "path": "/list/search/articles", + "name": "搜索列表(文章)", + "key": "list.search.articles" + }, + { + "path": "/list/search/projects", + "name": "搜索列表(项目)", + "key": "list.search.projects" + }, + { + "path": "/list/search/applications", + "name": "搜索列表(应用)", + "key": "list.search.applications" + } + ] + }, { "path": "/list/table-list", "name": "查询表格", @@ -63,7 +85,7 @@ }, { "path": "/list/card-list", - "name": "标准列表", + "name": "卡片列表", "key": "list.card-list" } ] diff --git a/templates.csproj b/templates.csproj index 1b1d2d1..c6e9a76 100644 --- a/templates.csproj +++ b/templates.csproj @@ -1,20 +1,30 @@ + netstandard2.0 Template 1.0 AntDesign.Templates Ant Design Pro Blazor Templates ant-design-blazor An out-of-box UI solution for enterprise applications as a Blazor boilerplate. + https://github.com/ant-design-blazor/ant-design-pro-blazor + https://github.com/ant-design-blazor/ant-design-pro-blazor dotnet-new;templates;blazor;ant-design-blazor;ant-design - netstandard2.0 + false + git + Apache-2.0 + logo.png true false content + + + +