├── .DS_Store ├── .gitignore ├── .python-version ├── README.md ├── lerna.json ├── nestx.code-workspace ├── package.json └── packages ├── .DS_Store ├── clients ├── .DS_Store ├── nest-angular │ ├── .editorconfig │ ├── .gitignore │ ├── .prettierignore │ ├── .prettierrc │ ├── .stylelintrc │ ├── .vscode │ │ ├── extensions.json │ │ ├── launch.json │ │ └── settings.json │ ├── README.md │ ├── angular.json │ ├── asbc.json │ ├── build.copy.ts │ ├── e2e │ │ ├── app.e2e-spec.ts │ │ ├── app.po.ts │ │ └── tsconfig.e2e.json │ ├── karma.conf.js │ ├── package-lock.json │ ├── package.json │ ├── protractor.conf.js │ ├── proxy.conf.json │ ├── scripts │ │ └── color-less.js │ ├── src │ │ ├── app │ │ │ ├── app.component.spec.ts │ │ │ ├── app.component.ts │ │ │ ├── app.module.ts │ │ │ ├── core │ │ │ │ ├── README.md │ │ │ │ ├── core.module.ts │ │ │ │ ├── i18n │ │ │ │ │ ├── i18n.service.spec.ts │ │ │ │ │ └── i18n.service.ts │ │ │ │ ├── index.ts │ │ │ │ ├── module-import-guard.ts │ │ │ │ ├── net │ │ │ │ │ └── default.interceptor.ts │ │ │ │ └── startup │ │ │ │ │ └── startup.service.ts │ │ │ ├── custom.form.factory.ts │ │ │ ├── delon.module.ts │ │ │ ├── layout │ │ │ │ ├── default │ │ │ │ │ ├── default.component.html │ │ │ │ │ ├── default.component.ts │ │ │ │ │ ├── header │ │ │ │ │ │ ├── components │ │ │ │ │ │ │ ├── fullscreen.component.ts │ │ │ │ │ │ │ ├── i18n.component.ts │ │ │ │ │ │ │ ├── icon.component.ts │ │ │ │ │ │ │ ├── notify.component.ts │ │ │ │ │ │ │ ├── search.component.ts │ │ │ │ │ │ │ ├── storage.component.ts │ │ │ │ │ │ │ ├── task.component.ts │ │ │ │ │ │ │ └── user.component.ts │ │ │ │ │ │ ├── header.component.html │ │ │ │ │ │ ├── header.component.ts │ │ │ │ │ │ └── index.md │ │ │ │ │ ├── setting-drawer │ │ │ │ │ │ ├── setting-drawer-item.component.html │ │ │ │ │ │ ├── setting-drawer-item.component.ts │ │ │ │ │ │ ├── setting-drawer.component.html │ │ │ │ │ │ └── setting-drawer.component.ts │ │ │ │ │ └── sidebar │ │ │ │ │ │ ├── sidebar.component.html │ │ │ │ │ │ └── sidebar.component.ts │ │ │ │ ├── fullscreen │ │ │ │ │ ├── fullscreen.component.html │ │ │ │ │ └── fullscreen.component.ts │ │ │ │ ├── layout.module.ts │ │ │ │ └── passport │ │ │ │ │ ├── passport.component.html │ │ │ │ │ ├── passport.component.less │ │ │ │ │ └── passport.component.ts │ │ │ ├── pages │ │ │ │ ├── cms │ │ │ │ │ ├── articles │ │ │ │ │ │ ├── articles.html │ │ │ │ │ │ └── articles.ts │ │ │ │ │ ├── categories │ │ │ │ │ │ ├── categories.html │ │ │ │ │ │ └── categories.ts │ │ │ │ │ ├── cms.module.ts │ │ │ │ │ ├── custom │ │ │ │ │ │ ├── custom.html │ │ │ │ │ │ └── custom.ts │ │ │ │ │ ├── media │ │ │ │ │ │ ├── media.html │ │ │ │ │ │ └── media.ts │ │ │ │ │ ├── pages │ │ │ │ │ │ ├── pages.html │ │ │ │ │ │ └── pages.ts │ │ │ │ │ └── widgets │ │ │ │ │ │ ├── widgets.html │ │ │ │ │ │ └── widgets.ts │ │ │ │ ├── home │ │ │ │ │ ├── home.component.html │ │ │ │ │ └── home.component.ts │ │ │ │ ├── login │ │ │ │ │ ├── login.component.html │ │ │ │ │ ├── login.component.less │ │ │ │ │ └── login.component.ts │ │ │ │ └── system │ │ │ │ │ ├── accounts │ │ │ │ │ ├── accounts.html │ │ │ │ │ └── accounts.ts │ │ │ │ │ ├── dicts │ │ │ │ │ ├── dicts.html │ │ │ │ │ └── dicts.ts │ │ │ │ │ ├── logs │ │ │ │ │ ├── logs.html │ │ │ │ │ └── logs.ts │ │ │ │ │ ├── menus │ │ │ │ │ ├── menus.html │ │ │ │ │ └── menus.ts │ │ │ │ │ ├── permission │ │ │ │ │ ├── permission.html │ │ │ │ │ └── permission.ts │ │ │ │ │ ├── roles │ │ │ │ │ ├── roles.html │ │ │ │ │ └── roles.ts │ │ │ │ │ ├── settings │ │ │ │ │ ├── settings.html │ │ │ │ │ └── settings.ts │ │ │ │ │ └── system.module.ts │ │ │ ├── routes │ │ │ │ ├── callback │ │ │ │ │ └── callback.component.ts │ │ │ │ ├── dashboard │ │ │ │ │ ├── analysis │ │ │ │ │ │ ├── analysis.component.html │ │ │ │ │ │ ├── analysis.component.less │ │ │ │ │ │ └── analysis.component.ts │ │ │ │ │ └── default │ │ │ │ │ │ ├── dashboard.component.html │ │ │ │ │ │ └── dashboard.component.ts │ │ │ │ ├── exception │ │ │ │ │ ├── 403.component.ts │ │ │ │ │ ├── 404.component.ts │ │ │ │ │ └── 500.component.ts │ │ │ │ ├── passport │ │ │ │ │ ├── lock │ │ │ │ │ │ ├── lock.component.html │ │ │ │ │ │ ├── lock.component.spec.ts │ │ │ │ │ │ └── lock.component.ts │ │ │ │ │ ├── login │ │ │ │ │ │ ├── login.component.html │ │ │ │ │ │ ├── login.component.less │ │ │ │ │ │ └── login.component.ts │ │ │ │ │ ├── register-result │ │ │ │ │ │ ├── register-result.component.html │ │ │ │ │ │ ├── register-result.component.less │ │ │ │ │ │ └── register-result.component.ts │ │ │ │ │ └── register │ │ │ │ │ │ ├── register.component.html │ │ │ │ │ │ ├── register.component.less │ │ │ │ │ │ └── register.component.ts │ │ │ │ ├── routes-routing.module.ts │ │ │ │ ├── routes.module.ts │ │ │ │ └── widgets │ │ │ │ │ ├── widgets-routing.module.ts │ │ │ │ │ ├── widgets.module.ts │ │ │ │ │ └── widgets │ │ │ │ │ ├── widgets.component.html │ │ │ │ │ ├── widgets.component.less │ │ │ │ │ ├── widgets.component.spec.ts │ │ │ │ │ └── widgets.component.ts │ │ │ ├── services │ │ │ │ ├── ajax.proxy.ts │ │ │ │ ├── can.admin.provide.ts │ │ │ │ ├── can.auth.provide.ts │ │ │ │ ├── list.context.ts │ │ │ │ ├── tree.service.ts │ │ │ │ └── user.service.ts │ │ │ └── shared │ │ │ │ ├── README.md │ │ │ │ ├── base │ │ │ │ ├── base.component.ts │ │ │ │ ├── base.detail.component.ts │ │ │ │ ├── base.detail.html │ │ │ │ ├── base.list.component.ts │ │ │ │ ├── base.list.html │ │ │ │ ├── base.selector.html │ │ │ │ ├── base.selector.ts │ │ │ │ ├── base.stand.component.ts │ │ │ │ ├── base.stand.html │ │ │ │ ├── base.tree.selector.html │ │ │ │ ├── base.tree.selector.ts │ │ │ │ ├── base.tree.table.html │ │ │ │ ├── base.tree.table.ts │ │ │ │ ├── transfer.selector.html │ │ │ │ └── transfer.selector.ts │ │ │ │ ├── components │ │ │ │ └── editor │ │ │ │ │ ├── editor.component.html │ │ │ │ │ └── editor.component.ts │ │ │ │ ├── json-schema │ │ │ │ ├── index.md │ │ │ │ ├── json-schema.module.ts │ │ │ │ ├── util.ts │ │ │ │ └── widgets │ │ │ │ │ ├── avatar │ │ │ │ │ └── avatar.widget.ts │ │ │ │ │ ├── choices │ │ │ │ │ ├── choices.widget.html │ │ │ │ │ └── choices.widget.ts │ │ │ │ │ ├── dict │ │ │ │ │ └── dict.widget.ts │ │ │ │ │ ├── editor │ │ │ │ │ └── editor.widget.ts │ │ │ │ │ ├── image │ │ │ │ │ └── image.widget.ts │ │ │ │ │ ├── list-box │ │ │ │ │ └── list-box.ts │ │ │ │ │ ├── search │ │ │ │ │ └── search.widget.ts │ │ │ │ │ ├── tabs │ │ │ │ │ └── tabs.widget.ts │ │ │ │ │ ├── textarea │ │ │ │ │ └── textarea.widget.ts │ │ │ │ │ ├── tinymce │ │ │ │ │ ├── index.md │ │ │ │ │ └── tinymce.widget.ts │ │ │ │ │ ├── tree-select │ │ │ │ │ └── tree-select.widget.ts │ │ │ │ │ ├── tree │ │ │ │ │ └── search.widget.ts │ │ │ │ │ ├── ueditor │ │ │ │ │ ├── index.md │ │ │ │ │ └── ueditor.widget.ts │ │ │ │ │ └── umeditor │ │ │ │ │ └── umeditor.widget.ts │ │ │ │ ├── shared.module.ts │ │ │ │ └── utils │ │ │ │ ├── index.ts │ │ │ │ └── utils.ts │ │ ├── appearances │ │ │ └── appearance.module.ts │ │ ├── assets │ │ │ ├── .gitkeep │ │ │ ├── alain-default.less │ │ │ ├── app-data.json │ │ │ ├── demo.docx │ │ │ ├── demo.pdf │ │ │ ├── demo.pptx │ │ │ ├── demo.xlsx │ │ │ ├── i18n │ │ │ │ ├── en.json │ │ │ │ └── zh-CN.json │ │ │ ├── iconsfont.json │ │ │ ├── img │ │ │ │ ├── 1.png │ │ │ │ ├── 2.png │ │ │ │ ├── 3.png │ │ │ │ ├── 4.png │ │ │ │ ├── 5.png │ │ │ │ ├── 6.png │ │ │ │ ├── avatar.jpg │ │ │ │ ├── bg1.jpg │ │ │ │ ├── bg10.jpg │ │ │ │ ├── bg2.jpg │ │ │ │ ├── bg3.jpg │ │ │ │ ├── bg4.jpg │ │ │ │ ├── bg5.jpg │ │ │ │ ├── bg6.jpg │ │ │ │ ├── bg7.jpg │ │ │ │ ├── bg8.jpg │ │ │ │ ├── bg9.jpg │ │ │ │ ├── half-float-bg-1.jpg │ │ │ │ ├── logo-color.svg │ │ │ │ ├── logo-full--.svg │ │ │ │ ├── logo-full.svg │ │ │ │ ├── logo.svg │ │ │ │ ├── typerx-color.revert.svg │ │ │ │ ├── typerx-color.svg │ │ │ │ ├── typerx-fullcolor.svg │ │ │ │ ├── typerx-monochrome.svg │ │ │ │ ├── typerx-white.svg │ │ │ │ └── zorro.svg │ │ │ ├── scripts │ │ │ │ ├── appearances │ │ │ │ │ ├── appearance.module.js │ │ │ │ │ ├── appearance.module.js.map │ │ │ │ │ ├── menu.appearance.js │ │ │ │ │ └── menu.appearance.js.map │ │ │ │ └── types │ │ │ │ │ ├── types.js │ │ │ │ │ └── types.js.map │ │ │ └── umeditor │ │ │ │ ├── dialogs │ │ │ │ ├── emotion │ │ │ │ │ ├── emotion.css │ │ │ │ │ ├── emotion.js │ │ │ │ │ └── images │ │ │ │ │ │ ├── 0.gif │ │ │ │ │ │ ├── bface.gif │ │ │ │ │ │ ├── cface.gif │ │ │ │ │ │ ├── fface.gif │ │ │ │ │ │ ├── jxface2.gif │ │ │ │ │ │ ├── neweditor-tab-bg.png │ │ │ │ │ │ ├── tface.gif │ │ │ │ │ │ ├── wface.gif │ │ │ │ │ │ └── yface.gif │ │ │ │ ├── formula │ │ │ │ │ ├── formula.css │ │ │ │ │ ├── formula.html │ │ │ │ │ ├── formula.js │ │ │ │ │ └── images │ │ │ │ │ │ └── formula.png │ │ │ │ ├── image │ │ │ │ │ ├── image.css │ │ │ │ │ ├── image.js │ │ │ │ │ └── images │ │ │ │ │ │ ├── close.png │ │ │ │ │ │ ├── upload1.png │ │ │ │ │ │ └── upload2.png │ │ │ │ ├── link │ │ │ │ │ └── link.js │ │ │ │ ├── map │ │ │ │ │ ├── map.html │ │ │ │ │ └── map.js │ │ │ │ └── video │ │ │ │ │ ├── images │ │ │ │ │ ├── center_focus.jpg │ │ │ │ │ ├── left_focus.jpg │ │ │ │ │ ├── none_focus.jpg │ │ │ │ │ └── right_focus.jpg │ │ │ │ │ ├── video.css │ │ │ │ │ └── video.js │ │ │ │ ├── index.html │ │ │ │ ├── lang │ │ │ │ ├── en │ │ │ │ │ ├── en.js │ │ │ │ │ └── images │ │ │ │ │ │ ├── addimage.png │ │ │ │ │ │ ├── alldeletebtnhoverskin.png │ │ │ │ │ │ ├── alldeletebtnupskin.png │ │ │ │ │ │ ├── background.png │ │ │ │ │ │ ├── button.png │ │ │ │ │ │ ├── copy.png │ │ │ │ │ │ ├── deletedisable.png │ │ │ │ │ │ ├── deleteenable.png │ │ │ │ │ │ ├── imglabel.png │ │ │ │ │ │ ├── listbackground.png │ │ │ │ │ │ ├── localimage.png │ │ │ │ │ │ ├── music.png │ │ │ │ │ │ ├── rotateleftdisable.png │ │ │ │ │ │ ├── rotateleftenable.png │ │ │ │ │ │ ├── rotaterightdisable.png │ │ │ │ │ │ ├── rotaterightenable.png │ │ │ │ │ │ └── upload.png │ │ │ │ └── zh-cn │ │ │ │ │ ├── images │ │ │ │ │ ├── copy.png │ │ │ │ │ ├── imglabel.png │ │ │ │ │ ├── localimage.png │ │ │ │ │ ├── music.png │ │ │ │ │ └── upload.png │ │ │ │ │ └── zh-cn.js │ │ │ │ ├── themes │ │ │ │ └── default │ │ │ │ │ ├── css │ │ │ │ │ ├── umeditor.css │ │ │ │ │ └── umeditor.min.css │ │ │ │ │ └── images │ │ │ │ │ ├── caret.png │ │ │ │ │ ├── close.png │ │ │ │ │ ├── icons.gif │ │ │ │ │ ├── icons.png │ │ │ │ │ ├── ok.gif │ │ │ │ │ ├── pop-bg.png │ │ │ │ │ ├── spacer.gif │ │ │ │ │ └── videologo.gif │ │ │ │ ├── third-party │ │ │ │ ├── jquery.min.js │ │ │ │ ├── mathquill │ │ │ │ │ ├── font │ │ │ │ │ │ ├── Symbola.eot │ │ │ │ │ │ ├── Symbola.otf │ │ │ │ │ │ ├── Symbola.svg │ │ │ │ │ │ ├── Symbola.ttf │ │ │ │ │ │ ├── Symbola.woff │ │ │ │ │ │ └── stixgeneral-bundle │ │ │ │ │ │ │ ├── STIXFontLicense2010.txt │ │ │ │ │ │ │ ├── stixgeneral-webfont.eot │ │ │ │ │ │ │ ├── stixgeneral-webfont.svg │ │ │ │ │ │ │ ├── stixgeneral-webfont.ttf │ │ │ │ │ │ │ ├── stixgeneral-webfont.woff │ │ │ │ │ │ │ ├── stixgeneralbol-webfont.eot │ │ │ │ │ │ │ ├── stixgeneralbol-webfont.svg │ │ │ │ │ │ │ ├── stixgeneralbol-webfont.ttf │ │ │ │ │ │ │ ├── stixgeneralbol-webfont.woff │ │ │ │ │ │ │ ├── stixgeneralbolita-webfont.eot │ │ │ │ │ │ │ ├── stixgeneralbolita-webfont.svg │ │ │ │ │ │ │ ├── stixgeneralbolita-webfont.ttf │ │ │ │ │ │ │ ├── stixgeneralbolita-webfont.woff │ │ │ │ │ │ │ ├── stixgeneralitalic-webfont.eot │ │ │ │ │ │ │ ├── stixgeneralitalic-webfont.svg │ │ │ │ │ │ │ ├── stixgeneralitalic-webfont.ttf │ │ │ │ │ │ │ └── stixgeneralitalic-webfont.woff │ │ │ │ │ ├── mathquill.css │ │ │ │ │ ├── mathquill.js │ │ │ │ │ └── mathquill.min.js │ │ │ │ └── template.min.js │ │ │ │ ├── umeditor.config.js │ │ │ │ ├── umeditor.js │ │ │ │ └── umeditor.min.js │ │ ├── environments │ │ │ ├── environment.hmr.ts │ │ │ ├── environment.prod.ts │ │ │ └── environment.ts │ │ ├── favicon.ico │ │ ├── generated │ │ │ ├── .gitignore │ │ │ ├── .openapi-generator-ignore │ │ │ ├── .openapi-generator │ │ │ │ └── VERSION │ │ │ ├── README.md │ │ │ ├── api.module.ts │ │ │ ├── api │ │ │ │ ├── api.ts │ │ │ │ ├── app.service.ts │ │ │ │ ├── auth.service.ts │ │ │ │ ├── cms.service.ts │ │ │ │ └── mock.service.ts │ │ │ ├── configuration.ts │ │ │ ├── encoder.ts │ │ │ ├── git_push.sh │ │ │ ├── index.ts │ │ │ ├── model │ │ │ │ ├── accessToken.ts │ │ │ │ ├── articleRes.ts │ │ │ │ ├── category.ts │ │ │ │ ├── categoryRes.ts │ │ │ │ ├── createArticleDto.ts │ │ │ │ ├── createCategoryDto.ts │ │ │ │ ├── createMediaDto.ts │ │ │ │ ├── createPageReq.ts │ │ │ │ ├── createPhotoDto.ts │ │ │ │ ├── createWidgetDto.ts │ │ │ │ ├── editArticleDto.ts │ │ │ │ ├── editCategoryDto.ts │ │ │ │ ├── editMediaDto.ts │ │ │ │ ├── editPageReq.ts │ │ │ │ ├── editPhotoDto.ts │ │ │ │ ├── editWidgetDto.ts │ │ │ │ ├── inlineResponse200.ts │ │ │ │ ├── keyValue.ts │ │ │ │ ├── loginReq.ts │ │ │ │ ├── loginRes.ts │ │ │ │ ├── media.ts │ │ │ │ ├── mediaFile.ts │ │ │ │ ├── mediaRes.ts │ │ │ │ ├── models.ts │ │ │ │ ├── pageRes.ts │ │ │ │ ├── photo.ts │ │ │ │ ├── photoRes.ts │ │ │ │ ├── query.ts │ │ │ │ ├── registerReq.ts │ │ │ │ ├── resultListArticleRes.ts │ │ │ │ ├── resultListCategoryRes.ts │ │ │ │ ├── resultListMediaRes.ts │ │ │ │ ├── resultListPageRes.ts │ │ │ │ ├── resultListPhotoRes.ts │ │ │ │ ├── resultListWidgetRes.ts │ │ │ │ ├── settingsGroup.ts │ │ │ │ ├── treeNode.ts │ │ │ │ ├── uploadMultipleRes.ts │ │ │ │ ├── uploadRes.ts │ │ │ │ ├── widget.ts │ │ │ │ └── widgetRes.ts │ │ │ └── variables.ts │ │ ├── index.html │ │ ├── main.ts │ │ ├── polyfills.ts │ │ ├── style-icons-auto.ts │ │ ├── style-icons.ts │ │ ├── styles.less │ │ ├── styles │ │ │ ├── index.less │ │ │ └── theme.less │ │ ├── testing │ │ │ └── common.spec.ts │ │ ├── tsconfig.app.json │ │ ├── tsconfig.spec.json │ │ ├── types │ │ │ └── types.ts │ │ └── typings.d.ts │ ├── tsconfig.appearances.json │ ├── tsconfig.json │ ├── tslint.json │ └── yarn.lock └── nest-react │ ├── .editorconfig │ ├── .eslintignore │ ├── .eslintrc.js │ ├── .gitignore │ ├── .prettierignore │ ├── .prettierrc │ ├── .stylelintrc.json │ ├── README.md │ ├── config │ ├── config.ts │ ├── plugin.config.ts │ └── router.config.ts │ ├── jest-puppeteer.config.js │ ├── jest.config.js │ ├── jest.json │ ├── jsconfig.json │ ├── mock │ ├── api.js │ ├── chart.js │ ├── geographic.js │ ├── geographic │ │ ├── city.json │ │ └── province.json │ ├── notices.js │ ├── notices.ts │ ├── profile.ts │ ├── route.ts │ ├── rule.js │ └── user.ts │ ├── package.json │ ├── public │ ├── favicon.png │ └── icons │ │ ├── icon-128x128.png │ │ ├── icon-192x192.png │ │ └── icon-512x512.png │ ├── scripts │ ├── generateMock.js │ ├── getPrettierFiles.js │ ├── lint-prettier.js │ └── prettier.js │ ├── src │ ├── AppSettings.ts │ ├── app.ts │ ├── assets │ │ └── logo.svg │ ├── components │ │ ├── ActiveChart │ │ │ ├── index.js │ │ │ └── index.less │ │ ├── ArticleListContent │ │ │ ├── index.d.ts │ │ │ ├── index.js │ │ │ └── index.less │ │ ├── Charts │ │ │ ├── Bar │ │ │ │ ├── index.d.ts │ │ │ │ └── index.js │ │ │ ├── ChartCard │ │ │ │ ├── index.d.ts │ │ │ │ ├── index.js │ │ │ │ └── index.less │ │ │ ├── Field │ │ │ │ ├── index.d.ts │ │ │ │ ├── index.js │ │ │ │ └── index.less │ │ │ ├── Gauge │ │ │ │ ├── index.d.ts │ │ │ │ └── index.js │ │ │ ├── MiniArea │ │ │ │ ├── index.d.ts │ │ │ │ └── index.js │ │ │ ├── MiniBar │ │ │ │ ├── index.d.ts │ │ │ │ └── index.js │ │ │ ├── MiniProgress │ │ │ │ ├── index.d.ts │ │ │ │ ├── index.js │ │ │ │ └── index.less │ │ │ ├── Pie │ │ │ │ ├── index.d.ts │ │ │ │ ├── index.js │ │ │ │ └── index.less │ │ │ ├── Radar │ │ │ │ ├── index.d.ts │ │ │ │ ├── index.js │ │ │ │ └── index.less │ │ │ ├── TagCloud │ │ │ │ ├── index.d.ts │ │ │ │ ├── index.js │ │ │ │ └── index.less │ │ │ ├── TimelineChart │ │ │ │ ├── index.d.ts │ │ │ │ ├── index.js │ │ │ │ └── index.less │ │ │ ├── WaterWave │ │ │ │ ├── index.d.ts │ │ │ │ ├── index.js │ │ │ │ └── index.less │ │ │ ├── autoHeight.js │ │ │ ├── bizcharts.d.ts │ │ │ ├── bizcharts.js │ │ │ ├── demo │ │ │ │ ├── bar.md │ │ │ │ ├── chart-card.md │ │ │ │ ├── gauge.md │ │ │ │ ├── mini-area.md │ │ │ │ ├── mini-bar.md │ │ │ │ ├── mini-pie.md │ │ │ │ ├── mini-progress.md │ │ │ │ ├── mix.md │ │ │ │ ├── pie.md │ │ │ │ ├── radar.md │ │ │ │ ├── tag-cloud.md │ │ │ │ ├── timeline-chart.md │ │ │ │ └── waterwave.md │ │ │ ├── index.d.ts │ │ │ ├── index.js │ │ │ ├── index.less │ │ │ └── index.md │ │ ├── EditableLinkGroup │ │ │ ├── index.d.ts │ │ │ ├── index.js │ │ │ └── index.less │ │ ├── GlobalHeader │ │ │ ├── RightContent.tsx │ │ │ ├── index.less │ │ │ └── index.tsx │ │ ├── HeaderDropdown │ │ │ ├── index.less │ │ │ └── index.tsx │ │ ├── HeaderSearch │ │ │ ├── demo │ │ │ │ └── basic.md │ │ │ ├── index.en-US.md │ │ │ ├── index.less │ │ │ ├── index.tsx │ │ │ └── index.zh-CN.md │ │ ├── IconFont │ │ │ └── index.tsx │ │ ├── NoticeIcon │ │ │ ├── NoticeIconTab.d.ts │ │ │ ├── NoticeList.js │ │ │ ├── NoticeList.less │ │ │ ├── demo │ │ │ │ ├── basic.md │ │ │ │ └── popover.md │ │ │ ├── index.d.ts │ │ │ ├── index.en-US.md │ │ │ ├── index.js │ │ │ ├── index.less │ │ │ └── index.zh-CN.md │ │ ├── PageHeader │ │ │ ├── breadcrumb.d.ts │ │ │ ├── breadcrumb.js │ │ │ ├── demo │ │ │ │ ├── image.md │ │ │ │ ├── simple.md │ │ │ │ ├── standard.md │ │ │ │ └── structure.md │ │ │ ├── index.d.ts │ │ │ ├── index.js │ │ │ ├── index.less │ │ │ ├── index.md │ │ │ └── index.test.js │ │ ├── PageHeaderWrapper │ │ │ ├── GridContent.less │ │ │ ├── GridContent.tsx │ │ │ ├── index.less │ │ │ └── index.tsx │ │ ├── PageLoading │ │ │ └── index.tsx │ │ ├── SelectLang │ │ │ ├── index.less │ │ │ └── index.tsx │ │ ├── SettingDrawer │ │ │ ├── BlockCheckbox.tsx │ │ │ ├── ThemeColor.less │ │ │ ├── ThemeColor.tsx │ │ │ ├── index.less │ │ │ └── index.tsx │ │ ├── SiderMenu │ │ │ ├── BaseMenu.tsx │ │ │ ├── BaseMenuProps.ts │ │ │ ├── MenuDataItem.ts │ │ │ ├── SiderMenu.tsx │ │ │ ├── SiderMenuProps.ts │ │ │ ├── SiderMenuUtils.ts │ │ │ ├── index.less │ │ │ └── index.tsx │ │ ├── StandardFormRow │ │ │ ├── index.d.ts │ │ │ ├── index.js │ │ │ └── index.less │ │ ├── StandardTable │ │ │ ├── index.d.ts │ │ │ ├── index.js │ │ │ └── index.less │ │ ├── TopNavHeader │ │ │ ├── index.less │ │ │ └── index.tsx │ │ └── _utils │ │ │ ├── pathTools.test.ts │ │ │ └── pathTools.ts │ ├── defaultSettings.js │ ├── generated │ │ ├── .gitignore │ │ ├── .openapi-generator-ignore │ │ ├── .openapi-generator │ │ │ └── VERSION │ │ ├── api.ts │ │ ├── base.ts │ │ ├── configuration.ts │ │ ├── git_push.sh │ │ └── index.ts │ ├── global.less │ ├── global.tsx │ ├── layouts │ │ ├── BasicLayout.less │ │ ├── BasicLayout.tsx │ │ ├── BlankLayout.tsx │ │ ├── Footer.tsx │ │ ├── Header.less │ │ ├── Header.tsx │ │ ├── MenuContext.tsx │ │ ├── UserLayout.less │ │ └── UserLayout.tsx │ ├── locales │ │ ├── en-US.js │ │ ├── en-US │ │ │ ├── analysis.js │ │ │ ├── component.js │ │ │ ├── editor.js │ │ │ ├── exception.js │ │ │ ├── form.js │ │ │ ├── globalHeader.js │ │ │ ├── login.js │ │ │ ├── menu.js │ │ │ ├── monitor.js │ │ │ ├── pwa.js │ │ │ ├── result.js │ │ │ ├── settingDrawer.js │ │ │ └── settings.js │ │ ├── pt-BR.js │ │ ├── pt-BR │ │ │ ├── analysis.js │ │ │ ├── component.js │ │ │ ├── editor.js │ │ │ ├── exception.js │ │ │ ├── form.js │ │ │ ├── globalHeader.js │ │ │ ├── login.js │ │ │ ├── menu.js │ │ │ ├── monitor.js │ │ │ ├── pwa.js │ │ │ ├── result.js │ │ │ ├── settingDrawer.js │ │ │ └── settings.js │ │ ├── zh-CN.js │ │ ├── zh-CN │ │ │ ├── analysis.js │ │ │ ├── component.js │ │ │ ├── editor.js │ │ │ ├── exception.js │ │ │ ├── form.js │ │ │ ├── globalHeader.js │ │ │ ├── login.js │ │ │ ├── menu.js │ │ │ ├── monitor.js │ │ │ ├── pwa.js │ │ │ ├── result.js │ │ │ ├── settingDrawer.js │ │ │ └── settings.js │ │ ├── zh-TW.js │ │ └── zh-TW │ │ │ ├── analysis.js │ │ │ ├── component.js │ │ │ ├── editor.js │ │ │ ├── exception.js │ │ │ ├── form.js │ │ │ ├── globalHeader.js │ │ │ ├── login.js │ │ │ ├── menu.js │ │ │ ├── monitor.js │ │ │ ├── pwa.js │ │ │ ├── result.js │ │ │ ├── settingDrawer.js │ │ │ └── settings.js │ ├── manifest.json │ ├── models │ │ ├── connect.d.ts │ │ ├── global.ts │ │ ├── list.ts │ │ ├── login.ts │ │ ├── menu.ts │ │ ├── project.ts │ │ ├── setting.ts │ │ └── user.ts │ ├── pages │ │ ├── 404.tsx │ │ ├── Account │ │ │ ├── Center │ │ │ │ ├── Applications.tsx │ │ │ │ ├── Articles.less │ │ │ │ ├── Articles.tsx │ │ │ │ ├── Center.less │ │ │ │ ├── Center.tsx │ │ │ │ └── Projects.tsx │ │ │ └── Settings │ │ │ │ ├── BaseView.js │ │ │ │ ├── BaseView.less │ │ │ │ ├── BindingView.js │ │ │ │ ├── GeographicView.js │ │ │ │ ├── GeographicView.less │ │ │ │ ├── Info.js │ │ │ │ ├── Info.less │ │ │ │ ├── NotificationView.js │ │ │ │ ├── PhoneView.js │ │ │ │ ├── PhoneView.less │ │ │ │ ├── SecurityView.js │ │ │ │ └── models │ │ │ │ └── geographic.js │ │ ├── Authorized.tsx │ │ ├── Dashboard │ │ │ ├── Analysis.less │ │ │ ├── Analysis.tsx │ │ │ ├── IntroduceRow.tsx │ │ │ ├── Monitor.less │ │ │ ├── Monitor.tsx │ │ │ ├── OfflineData.tsx │ │ │ ├── ProportionSales.tsx │ │ │ ├── SalesCard.tsx │ │ │ ├── TopSearch.tsx │ │ │ ├── Workplace.less │ │ │ ├── Workplace.tsx │ │ │ └── models │ │ │ │ ├── activities.ts │ │ │ │ ├── chart.ts │ │ │ │ └── monitor.ts │ │ ├── Exception │ │ │ ├── 403.tsx │ │ │ ├── 404.tsx │ │ │ ├── 500.tsx │ │ │ ├── TriggerException.tsx │ │ │ ├── models │ │ │ │ └── error.ts │ │ │ └── style.less │ │ ├── Forms │ │ │ ├── AdvancedForm.tsx │ │ │ ├── BasicForm.tsx │ │ │ ├── StepForm │ │ │ │ ├── Step1.tsx │ │ │ │ ├── Step2.js │ │ │ │ ├── Step3.js │ │ │ │ ├── index.tsx │ │ │ │ └── style.less │ │ │ ├── TableForm.tsx │ │ │ ├── models │ │ │ │ └── form.ts │ │ │ └── style.less │ │ ├── List │ │ │ ├── Applications.less │ │ │ ├── Applications.tsx │ │ │ ├── Articles.less │ │ │ ├── Articles.tsx │ │ │ ├── BasicList.less │ │ │ ├── BasicList.tsx │ │ │ ├── CardList.less │ │ │ ├── CardList.tsx │ │ │ ├── List.tsx │ │ │ ├── Projects.less │ │ │ ├── Projects.tsx │ │ │ ├── TableList.less │ │ │ ├── TableList.tsx │ │ │ ├── UpdateForm.tsx │ │ │ └── models │ │ │ │ └── rule.ts │ │ ├── Profile │ │ │ ├── AdvancedProfile.less │ │ │ ├── AdvancedProfile.tsx │ │ │ ├── BasicProfile.less │ │ │ ├── BasicProfile.tsx │ │ │ └── models │ │ │ │ └── profile.ts │ │ ├── Result │ │ │ ├── Error.tsx │ │ │ └── Success.tsx │ │ ├── User │ │ │ ├── Login.less │ │ │ ├── Login.tsx │ │ │ ├── Register.less │ │ │ ├── Register.tsx │ │ │ ├── RegisterResult.less │ │ │ ├── RegisterResult.tsx │ │ │ └── models │ │ │ │ └── register.ts │ │ ├── Welcome.tsx │ │ └── document.ejs │ ├── service-worker.js │ ├── services │ │ ├── api.ts │ │ ├── client.ts │ │ ├── error.js │ │ ├── geographic.js │ │ └── user.ts │ ├── types │ │ └── types.d.ts │ └── utils │ │ ├── Authorized.ts │ │ ├── Yuan.tsx │ │ ├── authority.test.ts │ │ ├── authority.ts │ │ ├── getPageTitle.ts │ │ ├── request.ts │ │ ├── utils.less │ │ ├── utils.test.ts │ │ └── utils.tsx │ ├── tests │ └── run-tests.js │ └── tsconfig.json ├── servers ├── .DS_Store ├── nest-server │ ├── .DS_Store │ ├── .env.example │ ├── .eslintrc.js │ ├── .gitignore │ ├── .prettierrc │ ├── .vscode │ │ ├── launch.json │ │ └── settings.json │ ├── LICENSE │ ├── README.md │ ├── data │ │ ├── export.dict.json │ │ ├── export.group.json │ │ ├── export.media.json │ │ ├── export.menu.json │ │ ├── export.notice.json │ │ ├── export.page.json │ │ ├── export.role.json │ │ ├── export.setting.json │ │ └── export.user.json │ ├── generated │ │ ├── .gitignore │ │ ├── .openapi-generator-ignore │ │ ├── .openapi-generator │ │ │ └── VERSION │ │ ├── api.ts │ │ ├── base.ts │ │ ├── configuration.ts │ │ ├── git_push.sh │ │ └── index.ts │ ├── index.js │ ├── jest.json │ ├── karma.conf.js │ ├── log4js.debug.json │ ├── log4js.json │ ├── nest-cli.json │ ├── nodemon-debug.json │ ├── nodemon.json │ ├── ormconfig.json │ ├── package.json │ ├── public │ │ └── index.html │ ├── src │ │ ├── .DS_Store │ │ ├── app.controller.ts │ │ ├── app.module.ts │ │ ├── app.service.ts │ │ ├── appearances │ │ │ ├── cms │ │ │ │ ├── article.appearance.ts │ │ │ │ ├── category.appearance.ts │ │ │ │ ├── group.appearance.ts │ │ │ │ ├── media.appearance.ts │ │ │ │ ├── page.appearance.ts │ │ │ │ └── widget.appearance.ts │ │ │ └── core │ │ │ │ ├── api.appearance.ts │ │ │ │ ├── dict.appearance.ts │ │ │ │ ├── log.appearance.ts │ │ │ │ ├── menu.appearance.ts │ │ │ │ ├── role.appearance.ts │ │ │ │ ├── setting.appearance.ts │ │ │ │ └── user.appearance.ts │ │ ├── index.ts │ │ ├── main.ts │ │ ├── mock │ │ │ ├── mock.controller.ts │ │ │ └── mock.service.ts │ │ ├── scripts │ │ │ ├── access.grants.ts │ │ │ ├── access.init.ts │ │ │ ├── api.generate.ts │ │ │ ├── data.export.all.ts │ │ │ ├── data.export.ts │ │ │ ├── data.import.ts │ │ │ ├── data.install.ts │ │ │ ├── database.ts │ │ │ ├── gen.test.ts │ │ │ └── generate.ts │ │ ├── swagger │ │ │ ├── constants.ts │ │ │ ├── index.ts │ │ │ ├── swagger.json │ │ │ └── swagger.yaml │ │ ├── types │ │ │ └── types.d.ts │ │ └── utils │ │ │ ├── index.ts │ │ │ ├── logger.ts │ │ │ └── secrets.ts │ ├── swagger.config.json │ ├── tsconfig.build.json │ ├── tsconfig.json │ └── yarn.lock ├── nest-spring │ ├── .openapi-generator-ignore │ ├── .openapi-generator │ │ └── VERSION │ ├── README.md │ ├── pom.xml │ └── src │ │ └── main │ │ ├── java │ │ └── org │ │ │ └── openapitools │ │ │ ├── OpenAPI2SpringBoot.java │ │ │ ├── RFC3339DateFormat.java │ │ │ ├── api │ │ │ ├── ApiUtil.java │ │ │ ├── ArticleApi.java │ │ │ ├── ArticleApiController.java │ │ │ ├── AuthApi.java │ │ │ ├── AuthApiController.java │ │ │ ├── CategoryApi.java │ │ │ ├── CategoryApiController.java │ │ │ ├── DefaultApi.java │ │ │ ├── DefaultApiController.java │ │ │ ├── MediaApi.java │ │ │ ├── MediaApiController.java │ │ │ ├── MockApi.java │ │ │ ├── MockApiController.java │ │ │ ├── NameApi.java │ │ │ ├── NameApiController.java │ │ │ ├── PageApi.java │ │ │ ├── PageApiController.java │ │ │ ├── PhotoApi.java │ │ │ ├── PhotoApiController.java │ │ │ ├── WidgetApi.java │ │ │ └── WidgetApiController.java │ │ │ ├── configuration │ │ │ ├── HomeController.java │ │ │ └── OpenAPIDocumentationConfig.java │ │ │ └── model │ │ │ ├── AccessToken.java │ │ │ ├── ArticleRes.java │ │ │ ├── Category.java │ │ │ ├── CategoryRes.java │ │ │ ├── CreateArticleDto.java │ │ │ ├── CreateCategoryDto.java │ │ │ ├── CreateMediaDto.java │ │ │ ├── CreatePageReq.java │ │ │ ├── CreatePhotoDto.java │ │ │ ├── CreateWidgetDto.java │ │ │ ├── EditArticleDto.java │ │ │ ├── EditCategoryDto.java │ │ │ ├── EditMediaDto.java │ │ │ ├── EditPageReq.java │ │ │ ├── EditPhotoDto.java │ │ │ ├── EditWidgetDto.java │ │ │ ├── InlineResponse200.java │ │ │ ├── KeyValue.java │ │ │ ├── LoginReq.java │ │ │ ├── LoginRes.java │ │ │ ├── Media.java │ │ │ ├── MediaFile.java │ │ │ ├── MediaRes.java │ │ │ ├── PageRes.java │ │ │ ├── Photo.java │ │ │ ├── PhotoRes.java │ │ │ ├── Query.java │ │ │ ├── RegisterReq.java │ │ │ ├── ResultListArticleRes.java │ │ │ ├── ResultListCategoryRes.java │ │ │ ├── ResultListMediaRes.java │ │ │ ├── ResultListPageRes.java │ │ │ ├── ResultListPhotoRes.java │ │ │ ├── ResultListWidgetRes.java │ │ │ ├── SettingsGroup.java │ │ │ ├── TreeNode.java │ │ │ ├── UploadMultipleRes.java │ │ │ ├── UploadRes.java │ │ │ ├── Widget.java │ │ │ └── WidgetRes.java │ │ └── resources │ │ └── application.properties ├── nest-swagger │ ├── .gitignore │ ├── .npmignore │ ├── .prettierrc │ ├── LICENSE │ ├── README.MD │ ├── package-lock.json │ ├── package.json │ ├── src │ │ ├── cli.ts │ │ ├── index.ts │ │ ├── metadata │ │ │ ├── controllerGenerator.ts │ │ │ ├── index.ts │ │ │ ├── metadataGenerator.ts │ │ │ ├── methodGenerator.ts │ │ │ ├── parameterGenerator.ts │ │ │ └── typesResolver.ts │ │ ├── swagger │ │ │ ├── config.ts │ │ │ ├── decorators.ts │ │ │ ├── generator.ts │ │ │ └── swagger.ts │ │ └── utils │ │ │ ├── decoratorUtils.ts │ │ │ ├── jsDocUtils.ts │ │ │ ├── pathUtils.ts │ │ │ └── resolveUtils.ts │ ├── swagger.api.json │ ├── tsconfig.build.json │ ├── tsconfig.json │ ├── tslint.json │ └── yarn.lock ├── nest-testing │ ├── .DS_Store │ ├── .vscode │ │ └── launch.json │ ├── generated │ │ ├── .gitignore │ │ ├── .openapi-generator-ignore │ │ ├── .openapi-generator │ │ │ └── VERSION │ │ ├── api.ts │ │ ├── base.ts │ │ ├── configuration.ts │ │ ├── git_push.sh │ │ ├── index.ts │ │ └── swagger.json │ ├── jest.config.js │ ├── package.json │ ├── scripts │ │ ├── client.ts │ │ ├── generate.ts │ │ ├── test.js │ │ └── test.ts │ ├── templates │ │ └── api.hbs │ ├── test │ │ ├── cms │ │ │ ├── article.spec.ts │ │ │ ├── category.spec.ts │ │ │ ├── media.spec.ts │ │ │ └── page.spec.ts │ │ ├── core │ │ │ ├── auth.spec.ts │ │ │ ├── dict.spec.ts │ │ │ ├── group.spec.ts │ │ │ ├── log.spec.ts │ │ │ ├── menu.spec.ts │ │ │ ├── notice.spec.ts │ │ │ ├── role.spec.ts │ │ │ ├── setting.spec.ts │ │ │ └── user.spec.ts │ │ └── utils │ │ │ └── login.ts │ ├── tsconfig.json │ └── yarn.lock ├── nestx-auth │ ├── .DS_Store │ ├── .npmignore │ ├── index.js │ ├── nodemon.json │ ├── package-lock.json │ ├── package.json │ ├── src │ │ ├── app.module.ts │ │ ├── auth.controller.ts │ │ ├── auth.module.ts │ │ ├── auth.service.ts │ │ ├── constants │ │ │ └── index.ts │ │ ├── dto │ │ │ ├── Login.dto.ts │ │ │ ├── Register.dto.ts │ │ │ └── index.ts │ │ ├── index.ts │ │ ├── interfaces │ │ │ └── index.ts │ │ ├── jwt.strategy.ts │ │ ├── main.ts │ │ └── mock.user.service.ts │ ├── tsconfig.json │ └── yarn.lock ├── nestx-base │ ├── .DS_Store │ ├── .npmignore │ ├── index.js │ ├── nodemon.json │ ├── package-lock.json │ ├── package.json │ ├── src │ │ ├── app.module.ts │ │ ├── base.module.ts │ │ ├── controllers │ │ │ ├── access.management.ts │ │ │ ├── appearances.controller.ts │ │ │ ├── appearances.service.ts │ │ │ ├── dicts.controller.ts │ │ │ ├── dicts.service.ts │ │ │ ├── groups.controller.ts │ │ │ ├── groups.service.ts │ │ │ ├── index.ts │ │ │ ├── logger.service.ts │ │ │ ├── logs.controller.ts │ │ │ ├── logs.service.ts │ │ │ ├── menus.controller.ts │ │ │ ├── menus.service.ts │ │ │ ├── notices.controller.ts │ │ │ ├── notices.service.ts │ │ │ ├── roles.controller.ts │ │ │ ├── roles.service.ts │ │ │ ├── settings.controller.ts │ │ │ ├── settings.service.ts │ │ │ ├── users.controller.ts │ │ │ └── users.service.ts │ │ ├── dto │ │ │ ├── appearance.dto.ts │ │ │ ├── auth.dto.ts │ │ │ ├── common.dto.ts │ │ │ ├── dict.dto.ts │ │ │ ├── group.dto.ts │ │ │ ├── index.ts │ │ │ ├── menu.dto.ts │ │ │ ├── notice.dto.ts │ │ │ ├── role.dto.ts │ │ │ ├── setting.dto.ts │ │ │ └── user.dto.ts │ │ ├── index.ts │ │ ├── interfaces │ │ │ ├── appearance.interface.ts │ │ │ ├── dict.interface.ts │ │ │ ├── group.interface.ts │ │ │ ├── index.ts │ │ │ ├── log.interface.ts │ │ │ ├── menu.interface.ts │ │ │ ├── notice.interface.ts │ │ │ ├── profile.interface.ts │ │ │ ├── role.interface.ts │ │ │ ├── setting.interface.ts │ │ │ ├── user.interface.ts │ │ │ └── verycode.interface.ts │ │ ├── main.ts │ │ └── schemas │ │ │ ├── appearance.schema.ts │ │ │ ├── dict.schema.ts │ │ │ ├── group.schema.ts │ │ │ ├── index.ts │ │ │ ├── log.schema.ts │ │ │ ├── menu.schema.ts │ │ │ ├── notice.schema.ts │ │ │ ├── profile.schema.ts │ │ │ ├── role.schema.ts │ │ │ ├── setting.schema.ts │ │ │ ├── user.schema.ts │ │ │ └── verycode.schema.ts │ ├── tsconfig.json │ └── yarn.lock ├── nestx-cms │ ├── .DS_Store │ ├── .npmignore │ ├── index.js │ ├── nodemon.json │ ├── package-lock.json │ ├── package.json │ ├── src │ │ ├── app.module.ts │ │ ├── cms.module.ts │ │ ├── controllers │ │ │ ├── article.controller.ts │ │ │ ├── article.service.ts │ │ │ ├── category.controller.ts │ │ │ ├── category.service.ts │ │ │ ├── index.ts │ │ │ ├── media.controller.ts │ │ │ ├── media.service.ts │ │ │ ├── page.controller.ts │ │ │ ├── page.service.ts │ │ │ ├── photo.controller.ts │ │ │ ├── photo.service.ts │ │ │ ├── widget.controller.ts │ │ │ └── widget.service.ts │ │ ├── dto │ │ │ ├── article.dto.ts │ │ │ ├── category.dto.ts │ │ │ ├── comment.dto.ts │ │ │ ├── custom.dto.ts │ │ │ ├── index.ts │ │ │ ├── media.dto.ts │ │ │ ├── page.dto.ts │ │ │ ├── photo.dto.ts │ │ │ └── widget.dto.ts │ │ ├── index.ts │ │ ├── interfaces │ │ │ ├── article.interface.ts │ │ │ ├── category.interface.ts │ │ │ ├── comment.interface.ts │ │ │ ├── content.interface.ts │ │ │ ├── custom.interface.ts │ │ │ ├── index.ts │ │ │ ├── media.interface.ts │ │ │ ├── page.interface.ts │ │ │ ├── photo.interface.ts │ │ │ └── widget.interface.ts │ │ ├── main.ts │ │ ├── mock.user.service.ts │ │ └── schemas │ │ │ ├── article.schema.ts │ │ │ ├── category.schema.ts │ │ │ ├── comment.schema.ts │ │ │ ├── content.schema.ts │ │ │ ├── custom.schema.ts │ │ │ ├── index.ts │ │ │ ├── media.schema.ts │ │ │ ├── page.schema.ts │ │ │ ├── photo.schema.ts │ │ │ └── widget.schema.ts │ ├── tsconfig.json │ └── yarn.lock ├── nestx-common │ ├── .DS_Store │ ├── .npmignore │ ├── nodemon.json │ ├── package-lock.json │ ├── package.json │ ├── src │ │ ├── constants │ │ │ ├── cache.constant.ts │ │ │ ├── index.ts │ │ │ ├── meta.constant.ts │ │ │ └── text.constant.ts │ │ ├── decorators │ │ │ ├── index.ts │ │ │ ├── permission.decorator.ts │ │ │ └── roles.decorator.ts │ │ ├── exceptions │ │ │ └── custom.exception.ts │ │ ├── filters │ │ │ └── http-exception.filter.ts │ │ ├── guards │ │ │ └── roles.guard.ts │ │ ├── index.ts │ │ ├── interceptors │ │ │ ├── exception.interceptor.ts │ │ │ ├── index.ts │ │ │ ├── logging.interceptor.ts │ │ │ ├── timeout.interceptor.ts │ │ │ └── transform.interceptor.ts │ │ ├── interfaces │ │ │ ├── http.interface.ts │ │ │ ├── index.ts │ │ │ └── types.ts │ │ ├── middlewares │ │ │ └── logger.middleware.ts │ │ ├── pipes │ │ │ ├── NullableParseInt.pipe.ts │ │ │ ├── index.ts │ │ │ └── validation.pipe.ts │ │ ├── services │ │ │ ├── controller.service.ts │ │ │ ├── index.ts │ │ │ ├── mongoose.service.ts │ │ │ └── repository.service.ts │ │ ├── types │ │ │ ├── .DS_Store │ │ │ ├── appearance.ts │ │ │ ├── data.types.ts │ │ │ ├── index.ts │ │ │ └── schema.types.ts │ │ └── utils │ │ │ └── index.ts │ ├── tsconfig.json │ └── yarn.lock └── nestx-config │ ├── .DS_Store │ ├── .npmignore │ ├── nodemon.json │ ├── package-lock.json │ ├── package.json │ ├── src │ ├── config.module.ts │ ├── config.service.ts │ ├── index.ts │ └── interfaces │ │ └── index.ts │ ├── tsconfig.json │ └── yarn.lock └── spring └── .project /.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/.DS_Store -------------------------------------------------------------------------------- /.python-version: -------------------------------------------------------------------------------- 1 | 2.7.15 2 | -------------------------------------------------------------------------------- /lerna.json: -------------------------------------------------------------------------------- 1 | { 2 | "packages": [ 3 | "packages/clients/*", 4 | "packages/servers/*" 5 | ], 6 | "version": "0.4.0" 7 | } 8 | -------------------------------------------------------------------------------- /nestx.code-workspace: -------------------------------------------------------------------------------- 1 | { 2 | "folders": [ 3 | { 4 | "path": "packages/servers/nestx-base" 5 | }, 6 | { 7 | "path": "packages/servers/nestx-auth" 8 | }, 9 | { 10 | "path": "packages/servers/nestx-cms" 11 | }, 12 | { 13 | "path": "packages/servers/nest-server" 14 | }, 15 | { 16 | "path": "packages/clients/nest-angular" 17 | } 18 | ], 19 | "settings": { 20 | "typescript.tsdk": "server/node_modules/typescript/lib" 21 | } 22 | } -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "root", 3 | "private": true, 4 | "scripts": { 5 | "swagger": "cd packages/servers/nest-server && npm run swagger", 6 | "start:serve": "cd packages/servers/nest-server && npm run start", 7 | "start:angular": "cd packages/clients/nest-angular && npm run start" 8 | }, 9 | "devDependencies": { 10 | "lerna": "^3.13.1" 11 | } 12 | } -------------------------------------------------------------------------------- /packages/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/.DS_Store -------------------------------------------------------------------------------- /packages/clients/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/clients/.DS_Store -------------------------------------------------------------------------------- /packages/clients/nest-angular/.editorconfig: -------------------------------------------------------------------------------- 1 | # Editor configuration, see https://editorconfig.org 2 | root = true 3 | 4 | [*] 5 | charset = utf-8 6 | indent_style = space 7 | indent_size = 2 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | 11 | [*.md] 12 | max_line_length = off 13 | trim_trailing_whitespace = false 14 | -------------------------------------------------------------------------------- /packages/clients/nest-angular/.prettierignore: -------------------------------------------------------------------------------- 1 | # add files you wish to ignore here 2 | -------------------------------------------------------------------------------- /packages/clients/nest-angular/.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "singleQuote": true, 3 | "printWidth": 80, 4 | "editor.formatOnSave": true, 5 | "proseWrap": "always", 6 | "tabWidth": 4, 7 | "requireConfig": false, 8 | "useTabs": false, 9 | "trailingComma": "none", 10 | "bracketSpacing": true, 11 | "jsxBracketSameLine": false, 12 | "semi": true 13 | } 14 | -------------------------------------------------------------------------------- /packages/clients/nest-angular/.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": [ 3 | "cipchk.ng-alain-extension-pack" 4 | ] 5 | } -------------------------------------------------------------------------------- /packages/clients/nest-angular/.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | // Use IntelliSense to learn about possible attributes. 3 | // Hover to view descriptions of existing attributes. 4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 5 | "version": "0.2.0", 6 | "configurations": [ 7 | { 8 | "type": "chrome", 9 | "request": "launch", 10 | "name": "Launch Chrome against localhost", 11 | "url": "http://localhost:4200", 12 | "webRoot": "${workspaceRoot}", 13 | "sourceMaps": true 14 | } 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /packages/clients/nest-angular/.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "typescript.tsdk": "./node_modules/typescript/lib", 3 | // 保存时自动格式化,需要安装:https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode 4 | // "editor.formatOnSave": true, 5 | // Angular schematics 插件: https://marketplace.visualstudio.com/items?itemName=cyrilletuzi.angular-schematics 6 | "ngschematics.schematics": [ 7 | "ng-alain" 8 | ], 9 | "editor.tabSize": 2 10 | } 11 | -------------------------------------------------------------------------------- /packages/clients/nest-angular/asbc.json: -------------------------------------------------------------------------------- 1 | { 2 | "groups": ["5b1e89da653fef1f92c4b955"], 3 | "username": "管理员", 4 | "password": "111", 5 | "mobile": "13063090260", 6 | "isApproved": true, 7 | "roles": ["5b1e8b3e59989d1ffc06ac7e"] 8 | } 9 | -------------------------------------------------------------------------------- /packages/clients/nest-angular/build.copy.ts: -------------------------------------------------------------------------------- 1 | import * as shell from 'shelljs'; 2 | 3 | shell.cp('-R', 'dist', './../server/client'); 4 | -------------------------------------------------------------------------------- /packages/clients/nest-angular/e2e/app.e2e-spec.ts: -------------------------------------------------------------------------------- 1 | import { AppPage } from './app.po'; 2 | 3 | describe('ng-alain App', () => { 4 | let page: AppPage; 5 | 6 | beforeEach(() => { 7 | page = new AppPage(); 8 | }); 9 | 10 | it('should display welcome message', () => { 11 | page.navigateTo(); 12 | expect(page.getParagraphText()).toEqual('Welcome to app!'); 13 | }); 14 | }); 15 | -------------------------------------------------------------------------------- /packages/clients/nest-angular/e2e/app.po.ts: -------------------------------------------------------------------------------- 1 | import { browser, by, element } from 'protractor'; 2 | 3 | export class AppPage { 4 | navigateTo() { 5 | return browser.get('/'); 6 | } 7 | 8 | getParagraphText() { 9 | return element(by.css('app-root h1')).getText(); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /packages/clients/nest-angular/e2e/tsconfig.e2e.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../out-tsc/e2e", 5 | "baseUrl": "./", 6 | "module": "commonjs", 7 | "target": "es5", 8 | "types": [ 9 | "jasmine", 10 | "jasminewd2", 11 | "node" 12 | ] 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /packages/clients/nest-angular/proxy.conf.json: -------------------------------------------------------------------------------- 1 | { 2 | "/api": { 3 | "target": "http://localhost:5600/", 4 | "secure": false 5 | }, 6 | "/uploads": { 7 | "target": "http://localhost:5600/", 8 | "secure": false 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/app/core/README.md: -------------------------------------------------------------------------------- 1 | ### CoreModule 2 | 3 | **应** 仅只留 `providers` 属性。 4 | 5 | **作用:** 一些通用服务,例如:用户消息、HTTP数据访问。 6 | -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/app/core/core.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule, Optional, SkipSelf } from '@angular/core'; 2 | import { throwIfAlreadyLoaded } from '@core/module-import-guard'; 3 | import { I18NService } from '@core/i18n/i18n.service'; 4 | 5 | @NgModule({ 6 | providers: [ 7 | I18NService 8 | ] 9 | }) 10 | export class CoreModule { 11 | constructor( @Optional() @SkipSelf() parentModule: CoreModule) { 12 | throwIfAlreadyLoaded(parentModule, 'CoreModule'); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/app/core/index.ts: -------------------------------------------------------------------------------- 1 | export * from './i18n/i18n.service'; 2 | export * from './module-import-guard'; 3 | export * from './net/default.interceptor'; 4 | export * from './startup/startup.service'; 5 | -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/app/core/module-import-guard.ts: -------------------------------------------------------------------------------- 1 | // https://angular.io/guide/styleguide#style-04-12 2 | export function throwIfAlreadyLoaded(parentModule: any, moduleName: string) { 3 | if (parentModule) { 4 | throw new Error(`${moduleName} has already been loaded. Import Core modules in the AppModule only.`); 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/app/layout/default/default.component.html: -------------------------------------------------------------------------------- 1 |
2 | 3 | 4 |
5 | 6 |
7 | 8 | -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/app/layout/default/header/header.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, ChangeDetectionStrategy } from '@angular/core'; 2 | import { SettingsService } from '@delon/theme'; 3 | 4 | @Component({ 5 | selector: 'layout-header', 6 | templateUrl: './header.component.html', 7 | changeDetection: ChangeDetectionStrategy.OnPush 8 | }) 9 | export class HeaderComponent { 10 | searchToggleStatus: boolean; 11 | 12 | constructor(public settings: SettingsService) { } 13 | 14 | toggleCollapsedSidebar() { 15 | this.settings.setLayout('collapsed', !this.settings.layout.collapsed); 16 | } 17 | 18 | searchToggleChange() { 19 | this.searchToggleStatus = !this.searchToggleStatus; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/app/layout/default/header/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | component: app-header 3 | title: 顶部菜单 4 | --- 5 | 6 | 顶部菜单组件允许通过 `components` 目录下的组件进行按需组装。 7 | 8 | ## 组件列表 9 | 10 | 组件名 | 说明 11 | ----|------ 12 | `header-fullscreen` | 全屏切换 13 | `header-icon` | 应用图标 14 | `header-langs` | 语言切换 15 | `header-notify` | 菜单通知 16 | `header-search` | 搜索框 17 | `header-storage` | 清除 LocalStorage 缓存 18 | `header-task` | 任务通知 19 | `header-theme` | 主题切换 20 | `header-user` | 用户菜单 21 | -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/app/layout/fullscreen/fullscreen.component.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/app/layout/fullscreen/fullscreen.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'layout-fullscreen', 5 | templateUrl: './fullscreen.component.html' 6 | }) 7 | export class LayoutFullScreenComponent { 8 | 9 | } 10 | -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/app/layout/passport/passport.component.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 | 6 | 演示 7 |
8 |
9 | 10 | 11 | Copyright 12 | 2018 13 | Vellengs 出品 14 | 15 |
16 |
17 | -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/app/layout/passport/passport.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'layout-passport', 5 | templateUrl: './passport.component.html', 6 | styleUrls: ['./passport.component.less'] 7 | }) 8 | export class LayoutPassportComponent { 9 | links = [ 10 | { 11 | title: '帮助', 12 | href: '' 13 | }, 14 | { 15 | title: '隐私', 16 | href: '' 17 | }, 18 | { 19 | title: '条款', 20 | href: '' 21 | } 22 | ]; 23 | } 24 | -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/app/pages/cms/articles/articles.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 | 6 |
7 | 8 |
9 | 13 |
14 | 15 | 16 |
17 | -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/app/pages/cms/custom/custom.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 |
6 | 7 |
8 | 9 |
10 | 14 |
15 | 16 | 17 |
18 | -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/app/pages/cms/media/media.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 |
6 | 7 |
8 | 9 |
10 | 14 |
15 | 16 | 17 |
18 | -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/app/pages/cms/pages/pages.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 |
6 | 7 |
8 | 9 |
10 | 14 |
15 | 16 | 17 |
18 | -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/app/pages/cms/widgets/widgets.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 |
6 | 7 |
8 | 9 |
10 | 14 |
15 | 16 | 17 |
18 | -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/app/pages/home/home.component.html: -------------------------------------------------------------------------------- 1 | 2 |
3 | 4 |
5 | -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/app/pages/home/home.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | import { _HttpClient } from '@delon/theme'; 3 | import { BaseStandComponent } from '@shared/base/base.stand.component'; 4 | 5 | @Component({ 6 | selector: 'app-home-page', 7 | templateUrl: './home.component.html', 8 | }) 9 | export class HomeComponent extends BaseStandComponent implements OnInit { 10 | 11 | ngOnInit() { 12 | 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/app/pages/system/logs/logs.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 | 5 |
6 | 7 |
8 | -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/app/routes/dashboard/default/dashboard.component.html: -------------------------------------------------------------------------------- 1 | 2 |
3 | 4 |
5 | -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/app/routes/dashboard/default/dashboard.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | import { NzMessageService } from 'ng-zorro-antd'; 3 | import { _HttpClient } from '@delon/theme'; 4 | 5 | @Component({ 6 | selector: 'app-dashboard-page', 7 | templateUrl: './dashboard.component.html', 8 | }) 9 | export class DashboardComponent implements OnInit { 10 | 11 | 12 | constructor(private http: _HttpClient, public msg: NzMessageService) { } 13 | 14 | ngOnInit() { 15 | 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/app/routes/exception/403.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'exception-403', 5 | template: `` 6 | }) 7 | export class Exception403Component {} 8 | -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/app/routes/exception/404.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'exception-404', 5 | template: `` 6 | }) 7 | export class Exception404Component {} 8 | -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/app/routes/exception/500.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'exception-500', 5 | template: `` 6 | }) 7 | export class Exception500Component {} 8 | -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/app/routes/passport/lock/lock.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed, TestModuleMetadata } from '@angular/core/testing'; 2 | import { setUpTestBed } from '@testing/common.spec'; 3 | 4 | import { UserLockComponent } from './lock.component'; 5 | 6 | describe('Pages: lock', () => { 7 | setUpTestBed({ 8 | declarations: [ UserLockComponent ] 9 | }); 10 | 11 | it('should create an instance', () => { 12 | const fixture = TestBed.createComponent(UserLockComponent); 13 | const comp = fixture.debugElement.componentInstance; 14 | expect(comp).toBeTruthy(); 15 | }); 16 | }); 17 | -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/app/routes/passport/register-result/register-result.component.html: -------------------------------------------------------------------------------- 1 | 5 | 6 |
你的账户:ng-alain@example.com 注册成功
7 |
8 | 9 | 10 |
11 | -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/app/routes/passport/register-result/register-result.component.less: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/clients/nest-angular/src/app/routes/passport/register-result/register-result.component.less -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/app/routes/passport/register-result/register-result.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | import { NzMessageService } from 'ng-zorro-antd'; 3 | 4 | @Component({ 5 | selector: 'passport-register-result', 6 | templateUrl: './register-result.component.html', 7 | styleUrls: [ './register-result.component.less' ] 8 | }) 9 | export class UserRegisterResultComponent { 10 | constructor(public msg: NzMessageService) {} 11 | } 12 | -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/app/routes/widgets/widgets-routing.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { Routes, RouterModule } from '@angular/router'; 3 | 4 | import { WidgetsComponent } from './widgets/widgets.component'; 5 | 6 | const routes: Routes = [ 7 | { path: '', component: WidgetsComponent } 8 | ]; 9 | 10 | @NgModule({ 11 | imports: [ RouterModule.forChild(routes) ], 12 | exports: [ RouterModule ] 13 | }) 14 | export class WidgetsRoutingModule { } 15 | -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/app/routes/widgets/widgets.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { Routes, RouterModule } from '@angular/router'; 3 | import { SharedModule } from '@shared/shared.module'; 4 | 5 | import { WidgetsRoutingModule } from './widgets-routing.module'; 6 | 7 | import { WidgetsComponent } from './widgets/widgets.component'; 8 | 9 | @NgModule({ 10 | imports: [ SharedModule, WidgetsRoutingModule ], 11 | declarations: [ 12 | WidgetsComponent 13 | ] 14 | }) 15 | export class WidgetsModule { } 16 | -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/app/routes/widgets/widgets/widgets.component.less: -------------------------------------------------------------------------------- 1 | @import '~@delon/theme/styles/default'; 2 | :host ::ng-deep { 3 | .ant-carousel { 4 | .slick-dots { 5 | bottom: -10px; 6 | li.slick-active button { 7 | background: @primary-color; 8 | } 9 | } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/app/routes/widgets/widgets/widgets.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed, TestModuleMetadata } from '@angular/core/testing'; 2 | import { setUpTestBed } from '@testing/common.spec'; 3 | 4 | import { WidgetsComponent } from './widgets.component'; 5 | 6 | describe('Comoponent: Widgets', () => { 7 | setUpTestBed({ 8 | declarations: [ WidgetsComponent ] 9 | }); 10 | 11 | it('should create an instance', () => { 12 | const fixture = TestBed.createComponent(WidgetsComponent); 13 | const comp = fixture.debugElement.componentInstance; 14 | expect(comp).toBeTruthy(); 15 | }); 16 | }); 17 | -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/app/services/ajax.proxy.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from '@angular/core'; 2 | import { _HttpClient } from '@delon/theme'; 3 | 4 | @Injectable() 5 | export class AjaxProxy { 6 | constructor(public proxy: _HttpClient) { 7 | 8 | } 9 | 10 | signIn(model: any) { 11 | 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/app/shared/README.md: -------------------------------------------------------------------------------- 1 | # ShareModule 2 | 3 | **应** 包含定义: 4 | 5 | + 应用通用自定义业务组件 6 | 7 | **应** 导出所有包含的模块。 8 | 9 | **不应** 有 `providers` 属性。 10 | 11 | ## 自定义全局组件或指令 12 | 13 | 每一个组件或指令应该有一个完整的说明文件,**建议**一个合理的目录结构应该是: 14 | 15 | ``` 16 | ├── components 17 | │   ├── comp1 18 | │   │   ├── index.ts 19 | │   │   ├── README.md 20 | │   ├── comp2 21 | │   │   ├── index.ts 22 | │   │   ├── README.md 23 | ├── directives 24 | │   ├── dire1 25 | │   │   ├── index.ts 26 | │   │   ├── README.md 27 | │   ├── dire2 28 | │   │   ├── index.ts 29 | │   │   ├── README.md 30 | ``` 31 | -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/app/shared/base/base.detail.html: -------------------------------------------------------------------------------- 1 | 3 | 8 | -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/app/shared/base/base.list.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, Injector } from '@angular/core'; 2 | import { BaseComponent } from '@shared/base/base.component'; 3 | 4 | @Component({ 5 | selector: 'app-base-list', 6 | template: './base.list.html' 7 | }) 8 | export class BaseListComponent extends BaseComponent { 9 | 10 | constructor(public injector: Injector) { 11 | super(injector); 12 | } 13 | 14 | query() { 15 | 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/app/shared/base/base.stand.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/app/shared/base/transfer.selector.html: -------------------------------------------------------------------------------- 1 |
2 | 4 | 5 | 6 | {{item.title}} ~ {{item.description}} 7 | 8 | 9 |
10 | 11 | 19 | -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/app/shared/components/editor/editor.component.html: -------------------------------------------------------------------------------- 1 | 3 | -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/app/shared/json-schema/index.md: -------------------------------------------------------------------------------- 1 | # 建议统一在 `widgets` 目录下自定义小部件 2 | 3 | > 注:@delon/form 本身提供 nz-zorro-antd 数据录入组件的全部实现,以及若干第三方组件的代码,可从[widgets-third](https://github.com/cipchk/@delon/tree/master/packages/form/widgets-third)中获取并放置 `widgets` 目录下注册即可。 4 | -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/app/shared/json-schema/widgets/ueditor/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: ueditor 3 | subtitle: Ueditor富文本 4 | type: Third Widgets 5 | --- 6 | 7 | Ueditor富文本。 8 | 9 | > 注:第三方小部件默认并未注册,细节见[自定义小部件](https://ng-alain.com/form/customize)。 10 | 11 | ## ui 属性 12 | 13 | 参数 | 说明 | 类型 | 默认值 14 | ----|------|-----|------ 15 | config | 前端配置项说明,[见官网](http://fex.baidu.com/ueditor/#start-config) | `Object` | - 16 | loading | 初始化提示文本 | `string` | `加载中...` 17 | change | 编辑器内容发生改变时会触发该事件 | `(html: string) => void` | - 18 | 19 | ## Demo 20 | 21 | ```ts 22 | schema = { 23 | properties: { 24 | remark: { 25 | type: 'string', 26 | title: '描述', 27 | ui: { 28 | widget: 'ueditor' 29 | } 30 | } 31 | } 32 | } 33 | ``` 34 | -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/app/shared/utils/index.ts: -------------------------------------------------------------------------------- 1 | export * from './utils'; 2 | -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/app/shared/utils/utils.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * 转化成RMB元字符串 3 | * @param digits 当数字类型时,允许指定小数点后数字的个数,默认2位小数 4 | */ 5 | // tslint:disable-next-line:no-any 6 | export function yuan(value: any, digits: number = 2): string { 7 | if (typeof value === 'number') value = value.toFixed(digits); 8 | return `¥ ${value}`; 9 | } 10 | -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/appearances/appearance.module.ts: -------------------------------------------------------------------------------- 1 | 2 | 3 | import { NgModule } from '@angular/core'; 4 | import { RouterModule, Routes } from '@angular/router'; 5 | const routes: Routes = [ 6 | ]; 7 | 8 | @NgModule({ 9 | imports: [ 10 | RouterModule.forChild(routes), 11 | ], 12 | declarations: [ 13 | ], 14 | entryComponents: [ 15 | ], 16 | exports: [ 17 | RouterModule 18 | ] 19 | }) 20 | 21 | export class AppearanceModule { } 22 | -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/assets/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/clients/nest-angular/src/assets/.gitkeep -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/assets/demo.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/clients/nest-angular/src/assets/demo.docx -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/assets/demo.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/clients/nest-angular/src/assets/demo.pdf -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/assets/demo.pptx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/clients/nest-angular/src/assets/demo.pptx -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/assets/demo.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/clients/nest-angular/src/assets/demo.xlsx -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/assets/img/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/clients/nest-angular/src/assets/img/1.png -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/assets/img/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/clients/nest-angular/src/assets/img/2.png -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/assets/img/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/clients/nest-angular/src/assets/img/3.png -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/assets/img/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/clients/nest-angular/src/assets/img/4.png -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/assets/img/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/clients/nest-angular/src/assets/img/5.png -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/assets/img/6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/clients/nest-angular/src/assets/img/6.png -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/assets/img/avatar.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/clients/nest-angular/src/assets/img/avatar.jpg -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/assets/img/bg1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/clients/nest-angular/src/assets/img/bg1.jpg -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/assets/img/bg10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/clients/nest-angular/src/assets/img/bg10.jpg -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/assets/img/bg2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/clients/nest-angular/src/assets/img/bg2.jpg -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/assets/img/bg3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/clients/nest-angular/src/assets/img/bg3.jpg -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/assets/img/bg4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/clients/nest-angular/src/assets/img/bg4.jpg -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/assets/img/bg5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/clients/nest-angular/src/assets/img/bg5.jpg -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/assets/img/bg6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/clients/nest-angular/src/assets/img/bg6.jpg -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/assets/img/bg7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/clients/nest-angular/src/assets/img/bg7.jpg -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/assets/img/bg8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/clients/nest-angular/src/assets/img/bg8.jpg -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/assets/img/bg9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/clients/nest-angular/src/assets/img/bg9.jpg -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/assets/img/half-float-bg-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/clients/nest-angular/src/assets/img/half-float-bg-1.jpg -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/assets/scripts/appearances/appearance.module.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"appearance.module.js","sourceRoot":"","sources":["../../../appearances/appearance.module.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;YAIM,MAAM,GAAW,EACtB,CAAC;;gBAeF;gBAAgC,CAAC;gBAApB,gBAAgB;oBAb5B,eAAQ,CAAC;wBACN,OAAO,EAAE;4BACL,qBAAY,CAAC,QAAQ,CAAC,MAAM,CAAC;yBAChC;wBACD,YAAY,EAAE,EACb;wBACD,eAAe,EAAE,EAChB;wBACD,OAAO,EAAE;4BACL,qBAAY;yBACf;qBACJ,CAAC;mBAEW,gBAAgB,CAAI;gBAAD,uBAAC;aAAA,AAAjC;;QACA,CAAC"} -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/assets/scripts/types/types.js: -------------------------------------------------------------------------------- 1 | System.register([], function (exports_1, context_1) { 2 | "use strict"; 3 | var __moduleName = context_1 && context_1.id; 4 | var Appearance; 5 | return { 6 | setters: [], 7 | execute: function () { 8 | Appearance = /** @class */ (function () { 9 | function Appearance() { 10 | } 11 | return Appearance; 12 | }()); 13 | exports_1("Appearance", Appearance); 14 | } 15 | }; 16 | }); 17 | //# sourceMappingURL=types.js.map -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/assets/scripts/types/types.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../types/types.ts"],"names":[],"mappings":";;;;;;;YAGA;gBAAA;gBAGA,CAAC;gBAAD,iBAAC;YAAD,CAAC,AAHD,IAGC;;QAmCD,CAAC"} -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/assets/umeditor/dialogs/emotion/images/0.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/clients/nest-angular/src/assets/umeditor/dialogs/emotion/images/0.gif -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/assets/umeditor/dialogs/emotion/images/bface.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/clients/nest-angular/src/assets/umeditor/dialogs/emotion/images/bface.gif -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/assets/umeditor/dialogs/emotion/images/cface.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/clients/nest-angular/src/assets/umeditor/dialogs/emotion/images/cface.gif -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/assets/umeditor/dialogs/emotion/images/fface.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/clients/nest-angular/src/assets/umeditor/dialogs/emotion/images/fface.gif -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/assets/umeditor/dialogs/emotion/images/jxface2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/clients/nest-angular/src/assets/umeditor/dialogs/emotion/images/jxface2.gif -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/assets/umeditor/dialogs/emotion/images/neweditor-tab-bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/clients/nest-angular/src/assets/umeditor/dialogs/emotion/images/neweditor-tab-bg.png -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/assets/umeditor/dialogs/emotion/images/tface.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/clients/nest-angular/src/assets/umeditor/dialogs/emotion/images/tface.gif -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/assets/umeditor/dialogs/emotion/images/wface.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/clients/nest-angular/src/assets/umeditor/dialogs/emotion/images/wface.gif -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/assets/umeditor/dialogs/emotion/images/yface.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/clients/nest-angular/src/assets/umeditor/dialogs/emotion/images/yface.gif -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/assets/umeditor/dialogs/formula/images/formula.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/clients/nest-angular/src/assets/umeditor/dialogs/formula/images/formula.png -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/assets/umeditor/dialogs/image/images/close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/clients/nest-angular/src/assets/umeditor/dialogs/image/images/close.png -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/assets/umeditor/dialogs/image/images/upload1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/clients/nest-angular/src/assets/umeditor/dialogs/image/images/upload1.png -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/assets/umeditor/dialogs/image/images/upload2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/clients/nest-angular/src/assets/umeditor/dialogs/image/images/upload2.png -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/assets/umeditor/dialogs/video/images/center_focus.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/clients/nest-angular/src/assets/umeditor/dialogs/video/images/center_focus.jpg -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/assets/umeditor/dialogs/video/images/left_focus.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/clients/nest-angular/src/assets/umeditor/dialogs/video/images/left_focus.jpg -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/assets/umeditor/dialogs/video/images/none_focus.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/clients/nest-angular/src/assets/umeditor/dialogs/video/images/none_focus.jpg -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/assets/umeditor/dialogs/video/images/right_focus.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/clients/nest-angular/src/assets/umeditor/dialogs/video/images/right_focus.jpg -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/assets/umeditor/lang/en/images/addimage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/clients/nest-angular/src/assets/umeditor/lang/en/images/addimage.png -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/assets/umeditor/lang/en/images/alldeletebtnhoverskin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/clients/nest-angular/src/assets/umeditor/lang/en/images/alldeletebtnhoverskin.png -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/assets/umeditor/lang/en/images/alldeletebtnupskin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/clients/nest-angular/src/assets/umeditor/lang/en/images/alldeletebtnupskin.png -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/assets/umeditor/lang/en/images/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/clients/nest-angular/src/assets/umeditor/lang/en/images/background.png -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/assets/umeditor/lang/en/images/button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/clients/nest-angular/src/assets/umeditor/lang/en/images/button.png -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/assets/umeditor/lang/en/images/copy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/clients/nest-angular/src/assets/umeditor/lang/en/images/copy.png -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/assets/umeditor/lang/en/images/deletedisable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/clients/nest-angular/src/assets/umeditor/lang/en/images/deletedisable.png -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/assets/umeditor/lang/en/images/deleteenable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/clients/nest-angular/src/assets/umeditor/lang/en/images/deleteenable.png -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/assets/umeditor/lang/en/images/imglabel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/clients/nest-angular/src/assets/umeditor/lang/en/images/imglabel.png -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/assets/umeditor/lang/en/images/listbackground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/clients/nest-angular/src/assets/umeditor/lang/en/images/listbackground.png -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/assets/umeditor/lang/en/images/localimage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/clients/nest-angular/src/assets/umeditor/lang/en/images/localimage.png -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/assets/umeditor/lang/en/images/music.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/clients/nest-angular/src/assets/umeditor/lang/en/images/music.png -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/assets/umeditor/lang/en/images/rotateleftdisable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/clients/nest-angular/src/assets/umeditor/lang/en/images/rotateleftdisable.png -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/assets/umeditor/lang/en/images/rotateleftenable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/clients/nest-angular/src/assets/umeditor/lang/en/images/rotateleftenable.png -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/assets/umeditor/lang/en/images/rotaterightdisable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/clients/nest-angular/src/assets/umeditor/lang/en/images/rotaterightdisable.png -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/assets/umeditor/lang/en/images/rotaterightenable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/clients/nest-angular/src/assets/umeditor/lang/en/images/rotaterightenable.png -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/assets/umeditor/lang/en/images/upload.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/clients/nest-angular/src/assets/umeditor/lang/en/images/upload.png -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/assets/umeditor/lang/zh-cn/images/copy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/clients/nest-angular/src/assets/umeditor/lang/zh-cn/images/copy.png -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/assets/umeditor/lang/zh-cn/images/imglabel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/clients/nest-angular/src/assets/umeditor/lang/zh-cn/images/imglabel.png -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/assets/umeditor/lang/zh-cn/images/localimage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/clients/nest-angular/src/assets/umeditor/lang/zh-cn/images/localimage.png -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/assets/umeditor/lang/zh-cn/images/music.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/clients/nest-angular/src/assets/umeditor/lang/zh-cn/images/music.png -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/assets/umeditor/lang/zh-cn/images/upload.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/clients/nest-angular/src/assets/umeditor/lang/zh-cn/images/upload.png -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/assets/umeditor/themes/default/images/caret.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/clients/nest-angular/src/assets/umeditor/themes/default/images/caret.png -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/assets/umeditor/themes/default/images/close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/clients/nest-angular/src/assets/umeditor/themes/default/images/close.png -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/assets/umeditor/themes/default/images/icons.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/clients/nest-angular/src/assets/umeditor/themes/default/images/icons.gif -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/assets/umeditor/themes/default/images/icons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/clients/nest-angular/src/assets/umeditor/themes/default/images/icons.png -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/assets/umeditor/themes/default/images/ok.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/clients/nest-angular/src/assets/umeditor/themes/default/images/ok.gif -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/assets/umeditor/themes/default/images/pop-bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/clients/nest-angular/src/assets/umeditor/themes/default/images/pop-bg.png -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/assets/umeditor/themes/default/images/spacer.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/clients/nest-angular/src/assets/umeditor/themes/default/images/spacer.gif -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/assets/umeditor/themes/default/images/videologo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/clients/nest-angular/src/assets/umeditor/themes/default/images/videologo.gif -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/assets/umeditor/third-party/mathquill/font/Symbola.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/clients/nest-angular/src/assets/umeditor/third-party/mathquill/font/Symbola.eot -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/assets/umeditor/third-party/mathquill/font/Symbola.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/clients/nest-angular/src/assets/umeditor/third-party/mathquill/font/Symbola.otf -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/assets/umeditor/third-party/mathquill/font/Symbola.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/clients/nest-angular/src/assets/umeditor/third-party/mathquill/font/Symbola.ttf -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/assets/umeditor/third-party/mathquill/font/Symbola.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/clients/nest-angular/src/assets/umeditor/third-party/mathquill/font/Symbola.woff -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/assets/umeditor/third-party/mathquill/font/stixgeneral-bundle/stixgeneral-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/clients/nest-angular/src/assets/umeditor/third-party/mathquill/font/stixgeneral-bundle/stixgeneral-webfont.eot -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/assets/umeditor/third-party/mathquill/font/stixgeneral-bundle/stixgeneral-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/clients/nest-angular/src/assets/umeditor/third-party/mathquill/font/stixgeneral-bundle/stixgeneral-webfont.ttf -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/assets/umeditor/third-party/mathquill/font/stixgeneral-bundle/stixgeneral-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/clients/nest-angular/src/assets/umeditor/third-party/mathquill/font/stixgeneral-bundle/stixgeneral-webfont.woff -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/assets/umeditor/third-party/mathquill/font/stixgeneral-bundle/stixgeneralbol-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/clients/nest-angular/src/assets/umeditor/third-party/mathquill/font/stixgeneral-bundle/stixgeneralbol-webfont.eot -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/assets/umeditor/third-party/mathquill/font/stixgeneral-bundle/stixgeneralbol-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/clients/nest-angular/src/assets/umeditor/third-party/mathquill/font/stixgeneral-bundle/stixgeneralbol-webfont.ttf -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/assets/umeditor/third-party/mathquill/font/stixgeneral-bundle/stixgeneralbol-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/clients/nest-angular/src/assets/umeditor/third-party/mathquill/font/stixgeneral-bundle/stixgeneralbol-webfont.woff -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/assets/umeditor/third-party/mathquill/font/stixgeneral-bundle/stixgeneralbolita-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/clients/nest-angular/src/assets/umeditor/third-party/mathquill/font/stixgeneral-bundle/stixgeneralbolita-webfont.eot -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/assets/umeditor/third-party/mathquill/font/stixgeneral-bundle/stixgeneralbolita-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/clients/nest-angular/src/assets/umeditor/third-party/mathquill/font/stixgeneral-bundle/stixgeneralbolita-webfont.ttf -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/assets/umeditor/third-party/mathquill/font/stixgeneral-bundle/stixgeneralbolita-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/clients/nest-angular/src/assets/umeditor/third-party/mathquill/font/stixgeneral-bundle/stixgeneralbolita-webfont.woff -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/assets/umeditor/third-party/mathquill/font/stixgeneral-bundle/stixgeneralitalic-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/clients/nest-angular/src/assets/umeditor/third-party/mathquill/font/stixgeneral-bundle/stixgeneralitalic-webfont.eot -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/assets/umeditor/third-party/mathquill/font/stixgeneral-bundle/stixgeneralitalic-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/clients/nest-angular/src/assets/umeditor/third-party/mathquill/font/stixgeneral-bundle/stixgeneralitalic-webfont.ttf -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/assets/umeditor/third-party/mathquill/font/stixgeneral-bundle/stixgeneralitalic-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/clients/nest-angular/src/assets/umeditor/third-party/mathquill/font/stixgeneral-bundle/stixgeneralitalic-webfont.woff -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/environments/environment.hmr.ts: -------------------------------------------------------------------------------- 1 | export const environment = { 2 | SERVER_URL: `./`, 3 | production: false, 4 | hmr: true, 5 | useHash: true 6 | }; 7 | -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/environments/environment.prod.ts: -------------------------------------------------------------------------------- 1 | export const environment = { 2 | SERVER_URL: `/`, 3 | production: true, 4 | hmr: false, 5 | useHash: true 6 | }; 7 | -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/environments/environment.ts: -------------------------------------------------------------------------------- 1 | // The file contents for the current environment will overwrite these during build. 2 | // The build system defaults to the dev environment which uses `environment.ts`, but if you do 3 | // `ng build --env=prod` then `environment.prod.ts` will be used instead. 4 | // The list of which env maps to which file can be found in `.angular-cli.json`. 5 | 6 | export const environment = { 7 | SERVER_URL: `./`, 8 | production: false, 9 | hmr: false, 10 | useHash: true 11 | }; 12 | -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/clients/nest-angular/src/favicon.ico -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/generated/.gitignore: -------------------------------------------------------------------------------- 1 | wwwroot/*.js 2 | node_modules 3 | typings 4 | dist 5 | -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/generated/.openapi-generator/VERSION: -------------------------------------------------------------------------------- 1 | 4.2.0 -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/generated/api/api.ts: -------------------------------------------------------------------------------- 1 | export * from './app.service'; 2 | import { AppService } from './app.service'; 3 | export * from './auth.service'; 4 | import { AuthService } from './auth.service'; 5 | export * from './cms.service'; 6 | import { CmsService } from './cms.service'; 7 | export * from './mock.service'; 8 | import { MockService } from './mock.service'; 9 | export const APIS = [AppService, AuthService, CmsService, MockService]; 10 | -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/generated/encoder.ts: -------------------------------------------------------------------------------- 1 | import { HttpParameterCodec } from '@angular/common/http'; 2 | 3 | /** 4 | * Custom HttpParameterCodec 5 | * Workaround for https://github.com/angular/angular/issues/18261 6 | */ 7 | export class CustomHttpParameterCodec implements HttpParameterCodec { 8 | encodeKey(k: string): string { 9 | return encodeURIComponent(k); 10 | } 11 | encodeValue(v: string): string { 12 | return encodeURIComponent(v); 13 | } 14 | decodeKey(k: string): string { 15 | return decodeURIComponent(k); 16 | } 17 | decodeValue(v: string): string { 18 | return decodeURIComponent(v); 19 | } 20 | } 21 | 22 | -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/generated/index.ts: -------------------------------------------------------------------------------- 1 | export * from './api/api'; 2 | export * from './model/models'; 3 | export * from './variables'; 4 | export * from './configuration'; 5 | export * from './api.module'; -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/generated/model/accessToken.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * rest api interface 3 | * 项目标准接口 4 | * 5 | * The version of the OpenAPI document: 0.0.1 6 | * 7 | * 8 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 9 | * https://openapi-generator.tech 10 | * Do not edit the class manually. 11 | */ 12 | 13 | 14 | /** 15 | * 16 | */ 17 | export interface AccessToken { 18 | /** 19 | * 20 | */ 21 | expiresIn: number; 22 | /** 23 | * 24 | */ 25 | accessToken: string; 26 | } 27 | 28 | -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/generated/model/createWidgetDto.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * rest api interface 3 | * 项目标准接口 4 | * 5 | * The version of the OpenAPI document: 0.0.1 6 | * 7 | * 8 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 9 | * https://openapi-generator.tech 10 | * Do not edit the class manually. 11 | */ 12 | 13 | 14 | /** 15 | * 16 | */ 17 | export interface CreateWidgetDto { 18 | /** 19 | * 20 | */ 21 | name: string; 22 | /** 23 | * 24 | */ 25 | title: string; 26 | /** 27 | * 28 | */ 29 | params: object; 30 | /** 31 | * 32 | */ 33 | type: string; 34 | } 35 | 36 | -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/generated/model/editWidgetDto.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * rest api interface 3 | * 项目标准接口 4 | * 5 | * The version of the OpenAPI document: 0.0.1 6 | * 7 | * 8 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 9 | * https://openapi-generator.tech 10 | * Do not edit the class manually. 11 | */ 12 | 13 | 14 | /** 15 | * 16 | */ 17 | export interface EditWidgetDto { 18 | /** 19 | * 20 | */ 21 | id: string; 22 | /** 23 | * 24 | */ 25 | name: string; 26 | /** 27 | * 28 | */ 29 | title: string; 30 | /** 31 | * 32 | */ 33 | params: object; 34 | /** 35 | * 36 | */ 37 | type: string; 38 | } 39 | 40 | -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/generated/model/inlineResponse200.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * rest api interface 3 | * 项目标准接口 4 | * 5 | * The version of the OpenAPI document: 0.0.1 6 | * 7 | * 8 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 9 | * https://openapi-generator.tech 10 | * Do not edit the class manually. 11 | */ 12 | 13 | 14 | export interface InlineResponse200 { 15 | /** 16 | * 17 | */ 18 | ok?: boolean; 19 | } 20 | 21 | -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/generated/model/keyValue.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * rest api interface 3 | * 项目标准接口 4 | * 5 | * The version of the OpenAPI document: 0.0.1 6 | * 7 | * 8 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 9 | * https://openapi-generator.tech 10 | * Do not edit the class manually. 11 | */ 12 | 13 | 14 | /** 15 | * 16 | */ 17 | export interface KeyValue { 18 | /** 19 | * 20 | */ 21 | label: string; 22 | /** 23 | * 24 | */ 25 | value: string; 26 | } 27 | 28 | -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/generated/model/loginReq.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * rest api interface 3 | * 项目标准接口 4 | * 5 | * The version of the OpenAPI document: 0.0.1 6 | * 7 | * 8 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 9 | * https://openapi-generator.tech 10 | * Do not edit the class manually. 11 | */ 12 | 13 | 14 | /** 15 | * 16 | */ 17 | export interface LoginReq { 18 | /** 19 | * 20 | */ 21 | username: string; 22 | /** 23 | * 24 | */ 25 | type?: string; 26 | /** 27 | * 28 | */ 29 | password: string; 30 | } 31 | 32 | -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/generated/model/query.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * rest api interface 3 | * 项目标准接口 4 | * 5 | * The version of the OpenAPI document: 0.0.1 6 | * 7 | * 8 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 9 | * https://openapi-generator.tech 10 | * Do not edit the class manually. 11 | */ 12 | 13 | 14 | /** 15 | * 16 | */ 17 | export interface Query { 18 | /** 19 | * 20 | */ 21 | size: number; 22 | /** 23 | * 24 | */ 25 | page: number; 26 | } 27 | 28 | -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/generated/model/resultListArticleRes.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * rest api interface 3 | * 项目标准接口 4 | * 5 | * The version of the OpenAPI document: 0.0.1 6 | * 7 | * 8 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 9 | * https://openapi-generator.tech 10 | * Do not edit the class manually. 11 | */ 12 | import { Query } from './query'; 13 | import { ArticleRes } from './articleRes'; 14 | 15 | 16 | /** 17 | * 18 | */ 19 | export interface ResultListArticleRes { 20 | /** 21 | * 22 | */ 23 | list: Array; 24 | /** 25 | * 26 | */ 27 | count?: number; 28 | query?: Query; 29 | } 30 | 31 | -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/generated/model/resultListCategoryRes.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * rest api interface 3 | * 项目标准接口 4 | * 5 | * The version of the OpenAPI document: 0.0.1 6 | * 7 | * 8 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 9 | * https://openapi-generator.tech 10 | * Do not edit the class manually. 11 | */ 12 | import { CategoryRes } from './categoryRes'; 13 | import { Query } from './query'; 14 | 15 | 16 | /** 17 | * 18 | */ 19 | export interface ResultListCategoryRes { 20 | /** 21 | * 22 | */ 23 | list: Array; 24 | /** 25 | * 26 | */ 27 | count?: number; 28 | query?: Query; 29 | } 30 | 31 | -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/generated/model/resultListMediaRes.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * rest api interface 3 | * 项目标准接口 4 | * 5 | * The version of the OpenAPI document: 0.0.1 6 | * 7 | * 8 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 9 | * https://openapi-generator.tech 10 | * Do not edit the class manually. 11 | */ 12 | import { Query } from './query'; 13 | import { MediaRes } from './mediaRes'; 14 | 15 | 16 | /** 17 | * 18 | */ 19 | export interface ResultListMediaRes { 20 | /** 21 | * 22 | */ 23 | list: Array; 24 | /** 25 | * 26 | */ 27 | count?: number; 28 | query?: Query; 29 | } 30 | 31 | -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/generated/model/resultListPageRes.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * rest api interface 3 | * 项目标准接口 4 | * 5 | * The version of the OpenAPI document: 0.0.1 6 | * 7 | * 8 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 9 | * https://openapi-generator.tech 10 | * Do not edit the class manually. 11 | */ 12 | import { PageRes } from './pageRes'; 13 | import { Query } from './query'; 14 | 15 | 16 | /** 17 | * 18 | */ 19 | export interface ResultListPageRes { 20 | /** 21 | * 22 | */ 23 | list: Array; 24 | /** 25 | * 26 | */ 27 | count?: number; 28 | query?: Query; 29 | } 30 | 31 | -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/generated/model/resultListPhotoRes.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * rest api interface 3 | * 项目标准接口 4 | * 5 | * The version of the OpenAPI document: 0.0.1 6 | * 7 | * 8 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 9 | * https://openapi-generator.tech 10 | * Do not edit the class manually. 11 | */ 12 | import { Query } from './query'; 13 | import { PhotoRes } from './photoRes'; 14 | 15 | 16 | /** 17 | * 18 | */ 19 | export interface ResultListPhotoRes { 20 | /** 21 | * 22 | */ 23 | list: Array; 24 | /** 25 | * 26 | */ 27 | count?: number; 28 | query?: Query; 29 | } 30 | 31 | -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/generated/model/resultListWidgetRes.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * rest api interface 3 | * 项目标准接口 4 | * 5 | * The version of the OpenAPI document: 0.0.1 6 | * 7 | * 8 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 9 | * https://openapi-generator.tech 10 | * Do not edit the class manually. 11 | */ 12 | import { Query } from './query'; 13 | import { WidgetRes } from './widgetRes'; 14 | 15 | 16 | /** 17 | * 18 | */ 19 | export interface ResultListWidgetRes { 20 | /** 21 | * 22 | */ 23 | list: Array; 24 | /** 25 | * 26 | */ 27 | count?: number; 28 | query?: Query; 29 | } 30 | 31 | -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/generated/model/settingsGroup.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * rest api interface 3 | * 项目标准接口 4 | * 5 | * The version of the OpenAPI document: 0.0.1 6 | * 7 | * 8 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 9 | * https://openapi-generator.tech 10 | * Do not edit the class manually. 11 | */ 12 | 13 | 14 | /** 15 | * 16 | */ 17 | export interface SettingsGroup { 18 | /** 19 | * 20 | */ 21 | options: object; 22 | } 23 | 24 | -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/generated/model/treeNode.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * rest api interface 3 | * 项目标准接口 4 | * 5 | * The version of the OpenAPI document: 0.0.1 6 | * 7 | * 8 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 9 | * https://openapi-generator.tech 10 | * Do not edit the class manually. 11 | */ 12 | 13 | 14 | /** 15 | * 16 | */ 17 | export interface TreeNode { 18 | /** 19 | * 20 | */ 21 | id: string; 22 | /** 23 | * 24 | */ 25 | icon?: string; 26 | /** 27 | * 28 | */ 29 | type?: string; 30 | /** 31 | * 32 | */ 33 | title: string; 34 | /** 35 | * 36 | */ 37 | parent: string; 38 | } 39 | 40 | -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/generated/model/uploadMultipleRes.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * rest api interface 3 | * 项目标准接口 4 | * 5 | * The version of the OpenAPI document: 0.0.1 6 | * 7 | * 8 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 9 | * https://openapi-generator.tech 10 | * Do not edit the class manually. 11 | */ 12 | 13 | 14 | /** 15 | * 16 | */ 17 | export interface UploadMultipleRes { 18 | /** 19 | * 20 | */ 21 | ok: boolean; 22 | /** 23 | * 24 | */ 25 | error?: string; 26 | /** 27 | * 28 | */ 29 | files?: Array; 30 | } 31 | 32 | -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/generated/model/uploadRes.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * rest api interface 3 | * 项目标准接口 4 | * 5 | * The version of the OpenAPI document: 0.0.1 6 | * 7 | * 8 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 9 | * https://openapi-generator.tech 10 | * Do not edit the class manually. 11 | */ 12 | 13 | 14 | /** 15 | * 16 | */ 17 | export interface UploadRes { 18 | /** 19 | * 20 | */ 21 | ok: boolean; 22 | /** 23 | * 24 | */ 25 | error?: string; 26 | /** 27 | * 28 | */ 29 | file?: string; 30 | } 31 | 32 | -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/generated/model/widget.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * rest api interface 3 | * 项目标准接口 4 | * 5 | * The version of the OpenAPI document: 0.0.1 6 | * 7 | * 8 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 9 | * https://openapi-generator.tech 10 | * Do not edit the class manually. 11 | */ 12 | 13 | 14 | /** 15 | * 16 | */ 17 | export interface Widget { 18 | /** 19 | * 20 | */ 21 | id: string; 22 | /** 23 | * 24 | */ 25 | name: string; 26 | /** 27 | * 28 | */ 29 | title: string; 30 | /** 31 | * 32 | */ 33 | type: string; 34 | /** 35 | * 36 | */ 37 | params: object; 38 | } 39 | 40 | -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/generated/model/widgetRes.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * rest api interface 3 | * 项目标准接口 4 | * 5 | * The version of the OpenAPI document: 0.0.1 6 | * 7 | * 8 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 9 | * https://openapi-generator.tech 10 | * Do not edit the class manually. 11 | */ 12 | 13 | 14 | /** 15 | * 16 | */ 17 | export interface WidgetRes { 18 | /** 19 | * 20 | */ 21 | id: string; 22 | /** 23 | * 24 | */ 25 | name: string; 26 | /** 27 | * 28 | */ 29 | title: string; 30 | /** 31 | * 32 | */ 33 | params: object; 34 | /** 35 | * 36 | */ 37 | type: string; 38 | } 39 | 40 | -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/generated/variables.ts: -------------------------------------------------------------------------------- 1 | import { InjectionToken } from '@angular/core'; 2 | 3 | export const BASE_PATH = new InjectionToken('basePath'); 4 | export const COLLECTION_FORMATS = { 5 | 'csv': ',', 6 | 'tsv': ' ', 7 | 'ssv': ' ', 8 | 'pipes': '|' 9 | } 10 | -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/style-icons.ts: -------------------------------------------------------------------------------- 1 | // Custom icon static resources 2 | 3 | import { 4 | InfoOutline, 5 | BulbOutline, 6 | ProfileOutline, 7 | ExceptionOutline, 8 | LinkOutline, 9 | } from '@ant-design/icons-angular/icons'; 10 | 11 | export const ICONS = [ 12 | InfoOutline, 13 | BulbOutline, 14 | ProfileOutline, 15 | ExceptionOutline, 16 | LinkOutline, 17 | ]; 18 | -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/styles.less: -------------------------------------------------------------------------------- 1 | // region: PLACEHOLDER, IMPORTANT: don't remove 2 | @import '~@delon/theme/styles/index'; 3 | @import '~@delon/abc/index'; 4 | @import '~@delon/chart/index'; 5 | @import '~@delon/theme/styles/layout/default/index'; 6 | @import '~@delon/theme/styles/layout/fullscreen/index'; 7 | 8 | @import './styles/index'; 9 | @import './styles/theme'; 10 | // endregion 11 | -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/styles/theme.less: -------------------------------------------------------------------------------- 1 | // 可以通过 http://ng-alain.com/theme 生成相应的参数代码 2 | -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/tsconfig.app.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../out-tsc/app", 5 | "baseUrl": "./", 6 | "module": "es2015", 7 | "types": [], 8 | "paths": { 9 | "@shared": ["app/shared"], 10 | "@shared/*": ["app/shared/*"], 11 | "@services": ["app/services"], 12 | "@services/*": ["app/services/*"], 13 | "@core": ["app/core/"], 14 | "@core/*": ["app/core/*"], 15 | "@testing": ["testing/"], 16 | "@testing/*": ["testing/*"], 17 | "@env": ["environments/"], 18 | "@env/*": ["environments/*"] 19 | } 20 | }, 21 | "exclude": [ 22 | "test.ts", 23 | "**/*.spec.ts" 24 | ] 25 | } 26 | -------------------------------------------------------------------------------- /packages/clients/nest-angular/src/typings.d.ts: -------------------------------------------------------------------------------- 1 | /* SystemJS module definition */ 2 | declare var module: NodeModule; 3 | interface NodeModule { 4 | id: string; 5 | } 6 | 7 | interface WebpackRequire { 8 | (path: string): T; 9 | (paths: string[], callback: (...modules: any[]) => void): void; 10 | ensure: (paths: string[], callback: (require: (path: string) => T) => void) => void; 11 | } 12 | interface NodeRequire extends WebpackRequire {} 13 | declare var require: NodeRequire; 14 | 15 | // G2 16 | declare var G2: any; 17 | declare var Slider: any; 18 | declare var Cloud: any; 19 | -------------------------------------------------------------------------------- /packages/clients/nest-angular/tsconfig.appearances.json: -------------------------------------------------------------------------------- 1 | { 2 | "compileOnSave": false, 3 | "compilerOptions": { 4 | "outDir": "./src/assets/scripts", 5 | "sourceMap": true, 6 | "declaration": false, 7 | "module": "system", 8 | "moduleResolution": "node", 9 | "emitDecoratorMetadata": true, 10 | "experimentalDecorators": true, 11 | "target": "es5", 12 | "typeRoots": [ 13 | "node_modules/@types" 14 | ], 15 | "lib": [ 16 | "es2017", 17 | "dom" 18 | ] 19 | }, 20 | "include": [ 21 | "src/appearances/**/*", 22 | "src/types/**/*" 23 | ] 24 | } 25 | -------------------------------------------------------------------------------- /packages/clients/nest-react/.editorconfig: -------------------------------------------------------------------------------- 1 | # http://editorconfig.org 2 | root = true 3 | 4 | [*] 5 | indent_style = space 6 | indent_size = 2 7 | end_of_line = lf 8 | charset = utf-8 9 | trim_trailing_whitespace = true 10 | insert_final_newline = true 11 | 12 | [*.md] 13 | trim_trailing_whitespace = false 14 | 15 | [Makefile] 16 | indent_style = tab 17 | -------------------------------------------------------------------------------- /packages/clients/nest-react/.eslintignore: -------------------------------------------------------------------------------- 1 | /functions/mock/** 2 | /scripts 3 | /config 4 | *.ejs 5 | -------------------------------------------------------------------------------- /packages/clients/nest-react/.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | **/node_modules 5 | # roadhog-api-doc ignore 6 | /src/utils/request-temp.js 7 | _roadhog-api-doc 8 | 9 | # production 10 | /dist 11 | /.vscode 12 | 13 | # misc 14 | .DS_Store 15 | npm-debug.log* 16 | yarn-error.log 17 | 18 | /coverage 19 | .idea 20 | yarn.lock 21 | package-lock.json 22 | *bak 23 | .vscode 24 | 25 | # visual studio code 26 | .history 27 | *.log 28 | 29 | functions/mock 30 | .temp/** 31 | 32 | # umi 33 | .umi 34 | .umi-production 35 | 36 | # screenshot 37 | screenshot 38 | .firebase -------------------------------------------------------------------------------- /packages/clients/nest-react/.prettierignore: -------------------------------------------------------------------------------- 1 | **/*.md 2 | **/*.svg 3 | package.json 4 | .umi 5 | .umi-production 6 | **/*.ejs 7 | -------------------------------------------------------------------------------- /packages/clients/nest-react/.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "singleQuote": true, 3 | "trailingComma": "all", 4 | "printWidth": 100, 5 | "overrides": [ 6 | { 7 | "files": ".prettierrc", 8 | "options": { "parser": "json" } 9 | } 10 | ] 11 | } 12 | -------------------------------------------------------------------------------- /packages/clients/nest-react/.stylelintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": [ 3 | "stylelint-config-standard", 4 | "stylelint-config-css-modules", 5 | "stylelint-config-rational-order", 6 | "stylelint-config-prettier" 7 | ], 8 | "plugins": ["stylelint-order", "stylelint-declaration-block-no-ignored-properties"], 9 | "rules": { 10 | "no-descending-specificity": null, 11 | "plugin/declaration-block-no-ignored-properties": true 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /packages/clients/nest-react/README.md: -------------------------------------------------------------------------------- 1 | # nestx react front end -------------------------------------------------------------------------------- /packages/clients/nest-react/jest-puppeteer.config.js: -------------------------------------------------------------------------------- 1 | // ps https://github.com/GoogleChrome/puppeteer/issues/3120 2 | module.exports = { 3 | launch: { 4 | args: ['--disable-gpu', '--disable-dev-shm-usage', '--no-first-run', '--no-zygote'], 5 | }, 6 | }; 7 | -------------------------------------------------------------------------------- /packages/clients/nest-react/jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | testURL: 'http://localhost:8000', 3 | preset: 'jest-puppeteer', 4 | }; 5 | -------------------------------------------------------------------------------- /packages/clients/nest-react/jest.json: -------------------------------------------------------------------------------- 1 | { 2 | "moduleFileExtensions": [ 3 | "ts", 4 | "tsx", 5 | "js", 6 | "json" 7 | ], 8 | "transform": { 9 | "^.+\\.tsx?$": "/node_modules/ts-jest/preprocessor.js" 10 | }, 11 | "testRegex": "/src/.*\\.(test|spec).(ts|tsx|js)$", 12 | "collectCoverageFrom": ["src/**/*.{js,jsx,tsx,ts}", "!**/node_modules/**", "!**/vendor/**"], 13 | "coverageReporters": ["json", "lcov"] 14 | } -------------------------------------------------------------------------------- /packages/clients/nest-react/jsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "emitDecoratorMetadata": true, 4 | "experimentalDecorators": true, 5 | "baseUrl": ".", 6 | "paths": { 7 | "@/*": ["./src/*"] 8 | } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /packages/clients/nest-react/mock/geographic.js: -------------------------------------------------------------------------------- 1 | import city from './geographic/city.json'; 2 | import province from './geographic/province.json'; 3 | 4 | function getProvince(req, res) { 5 | return res.json(province); 6 | } 7 | 8 | function getCity(req, res) { 9 | return res.json(city[req.params.province]); 10 | } 11 | 12 | export default { 13 | 'GET /api/geographic/province': getProvince, 14 | 'GET /api/geographic/city/:province': getCity, 15 | }; 16 | -------------------------------------------------------------------------------- /packages/clients/nest-react/mock/route.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | '/api/auth_routes': { 3 | '/form/advanced-form': { authority: ['admin', 'user'] }, 4 | }, 5 | }; 6 | -------------------------------------------------------------------------------- /packages/clients/nest-react/public/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/clients/nest-react/public/favicon.png -------------------------------------------------------------------------------- /packages/clients/nest-react/public/icons/icon-128x128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/clients/nest-react/public/icons/icon-128x128.png -------------------------------------------------------------------------------- /packages/clients/nest-react/public/icons/icon-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/clients/nest-react/public/icons/icon-192x192.png -------------------------------------------------------------------------------- /packages/clients/nest-react/public/icons/icon-512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/clients/nest-react/public/icons/icon-512x512.png -------------------------------------------------------------------------------- /packages/clients/nest-react/scripts/generateMock.js: -------------------------------------------------------------------------------- 1 | const generateMock = require('merge-umi-mock-data'); 2 | const path = require('path'); 3 | generateMock(path.join(__dirname, '../mock'), path.join(__dirname, '../functions/mock/index.js')); 4 | -------------------------------------------------------------------------------- /packages/clients/nest-react/src/components/ArticleListContent/index.d.ts: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | export interface ApplicationsProps { 4 | data: { 5 | content?: string; 6 | updatedAt?: any; 7 | avatar?: string; 8 | owner?: string; 9 | href?: string; 10 | }; 11 | } 12 | 13 | export default class ArticleListContent extends React.Component {} 14 | -------------------------------------------------------------------------------- /packages/clients/nest-react/src/components/ArticleListContent/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import moment from 'moment'; 3 | import { Avatar } from 'antd'; 4 | import styles from './index.less'; 5 | 6 | const ArticleListContent = ({ data: { content, updatedAt, avatar, owner, href } }) => ( 7 |
8 |
{content}
9 |
10 | 11 | {owner} 发布在 {href} 12 | {moment(updatedAt).format('YYYY-MM-DD HH:mm')} 13 |
14 |
15 | ); 16 | 17 | export default ArticleListContent; 18 | -------------------------------------------------------------------------------- /packages/clients/nest-react/src/components/Charts/Bar/index.d.ts: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | export interface IBarProps { 3 | title: React.ReactNode; 4 | color?: string; 5 | padding?: [number, number, number, number]; 6 | height: number; 7 | data: Array<{ 8 | x: string; 9 | y: number; 10 | }>; 11 | autoLabel?: boolean; 12 | style?: React.CSSProperties; 13 | } 14 | 15 | export default class Bar extends React.Component {} 16 | -------------------------------------------------------------------------------- /packages/clients/nest-react/src/components/Charts/ChartCard/index.d.ts: -------------------------------------------------------------------------------- 1 | import { CardProps } from 'antd/lib/card'; 2 | import React from 'react'; 3 | 4 | export interface IChartCardProps extends CardProps { 5 | title: React.ReactNode; 6 | action?: React.ReactNode; 7 | total?: React.ReactNode | number | (() => React.ReactNode | number); 8 | footer?: React.ReactNode; 9 | contentHeight?: number; 10 | avatar?: React.ReactNode; 11 | style?: React.CSSProperties; 12 | } 13 | 14 | export default class ChartCard extends React.Component {} 15 | -------------------------------------------------------------------------------- /packages/clients/nest-react/src/components/Charts/Field/index.d.ts: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | export interface IFieldProps { 3 | label: React.ReactNode; 4 | value: React.ReactNode; 5 | style?: React.CSSProperties; 6 | } 7 | 8 | export default class Field extends React.Component {} 9 | -------------------------------------------------------------------------------- /packages/clients/nest-react/src/components/Charts/Field/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | import styles from './index.less'; 4 | 5 | const Field = ({ label, value, ...rest }) => ( 6 |
7 | {label} 8 | {value} 9 |
10 | ); 11 | 12 | export default Field; 13 | -------------------------------------------------------------------------------- /packages/clients/nest-react/src/components/Charts/Field/index.less: -------------------------------------------------------------------------------- 1 | @import '~antd/lib/style/themes/default.less'; 2 | 3 | .field { 4 | margin: 0; 5 | overflow: hidden; 6 | white-space: nowrap; 7 | text-overflow: ellipsis; 8 | .label, 9 | .number { 10 | font-size: @font-size-base; 11 | line-height: 22px; 12 | } 13 | .number { 14 | margin-left: 8px; 15 | color: @heading-color; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /packages/clients/nest-react/src/components/Charts/Gauge/index.d.ts: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | export interface IGaugeProps { 3 | title: React.ReactNode; 4 | color?: string; 5 | height: number; 6 | bgColor?: number; 7 | percent: number; 8 | style?: React.CSSProperties; 9 | } 10 | 11 | export default class Gauge extends React.Component {} 12 | -------------------------------------------------------------------------------- /packages/clients/nest-react/src/components/Charts/MiniArea/index.d.ts: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | // g2已经更新到3.0 4 | // 不带的写了 5 | 6 | export interface IAxis { 7 | title: any; 8 | line: any; 9 | gridAlign: any; 10 | labels: any; 11 | tickLine: any; 12 | grid: any; 13 | } 14 | 15 | export interface IMiniAreaProps { 16 | color?: string; 17 | height?: number; 18 | borderColor?: string; 19 | line?: boolean; 20 | animate?: boolean; 21 | xAxis?: IAxis; 22 | yAxis?: IAxis; 23 | data: Array<{ 24 | x: number | string; 25 | y: number; 26 | }>; 27 | } 28 | 29 | export default class MiniArea extends React.Component {} 30 | -------------------------------------------------------------------------------- /packages/clients/nest-react/src/components/Charts/MiniBar/index.d.ts: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | export interface IMiniBarProps { 3 | color?: string; 4 | height?: number; 5 | data: Array<{ 6 | x: number | string; 7 | y: number; 8 | }>; 9 | style?: React.CSSProperties; 10 | } 11 | 12 | export default class MiniBar extends React.Component {} 13 | -------------------------------------------------------------------------------- /packages/clients/nest-react/src/components/Charts/MiniProgress/index.d.ts: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | export interface IMiniProgressProps { 3 | target: number; 4 | targetLabel: string; 5 | color?: string; 6 | strokeWidth?: number; 7 | percent?: number; 8 | style?: React.CSSProperties; 9 | } 10 | 11 | export default class MiniProgress extends React.Component {} 12 | -------------------------------------------------------------------------------- /packages/clients/nest-react/src/components/Charts/Radar/index.d.ts: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | export interface IRadarProps { 3 | title?: React.ReactNode; 4 | height: number; 5 | padding?: [number, number, number, number]; 6 | hasLegend?: boolean; 7 | data: Array<{ 8 | name: string; 9 | label: string; 10 | value: string; 11 | }>; 12 | style?: React.CSSProperties; 13 | } 14 | 15 | export default class Radar extends React.Component {} 16 | -------------------------------------------------------------------------------- /packages/clients/nest-react/src/components/Charts/TagCloud/index.d.ts: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | export interface ITagCloudProps { 3 | data: Array<{ 4 | name: string; 5 | value: number; 6 | }>; 7 | height: number; 8 | style?: React.CSSProperties; 9 | } 10 | 11 | export default class TagCloud extends React.Component {} 12 | -------------------------------------------------------------------------------- /packages/clients/nest-react/src/components/Charts/TagCloud/index.less: -------------------------------------------------------------------------------- 1 | .tagCloud { 2 | overflow: hidden; 3 | canvas { 4 | transform-origin: 0 0; 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /packages/clients/nest-react/src/components/Charts/TimelineChart/index.d.ts: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | export interface ITimelineChartProps { 3 | data: Array<{ 4 | x: number; 5 | y1: number; 6 | y2?: number; 7 | }>; 8 | titleMap: { y1: string; y2?: string }; 9 | padding?: [number, number, number, number]; 10 | height?: number; 11 | style?: React.CSSProperties; 12 | } 13 | 14 | export default class TimelineChart extends React.Component {} 15 | -------------------------------------------------------------------------------- /packages/clients/nest-react/src/components/Charts/TimelineChart/index.less: -------------------------------------------------------------------------------- 1 | .timelineChart { 2 | background: #fff; 3 | } 4 | -------------------------------------------------------------------------------- /packages/clients/nest-react/src/components/Charts/WaterWave/index.d.ts: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | export interface IWaterWaveProps { 3 | title: React.ReactNode; 4 | color?: string; 5 | height: number; 6 | percent: number; 7 | style?: React.CSSProperties; 8 | } 9 | 10 | export default class WaterWave extends React.Component {} 11 | -------------------------------------------------------------------------------- /packages/clients/nest-react/src/components/Charts/WaterWave/index.less: -------------------------------------------------------------------------------- 1 | @import '~antd/lib/style/themes/default.less'; 2 | 3 | .waterWave { 4 | position: relative; 5 | display: inline-block; 6 | transform-origin: left; 7 | .text { 8 | position: absolute; 9 | top: 32px; 10 | left: 0; 11 | width: 100%; 12 | text-align: center; 13 | span { 14 | color: @text-color-secondary; 15 | font-size: 14px; 16 | line-height: 22px; 17 | } 18 | h4 { 19 | color: @heading-color; 20 | font-size: 24px; 21 | line-height: 32px; 22 | } 23 | } 24 | .waterWaveCanvasWrapper { 25 | transform: scale(0.5); 26 | transform-origin: 0 0; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /packages/clients/nest-react/src/components/Charts/bizcharts.d.ts: -------------------------------------------------------------------------------- 1 | import * as BizChart from 'bizcharts'; 2 | 3 | export = BizChart; 4 | -------------------------------------------------------------------------------- /packages/clients/nest-react/src/components/Charts/bizcharts.js: -------------------------------------------------------------------------------- 1 | import * as BizChart from 'bizcharts'; 2 | 3 | export default BizChart; 4 | -------------------------------------------------------------------------------- /packages/clients/nest-react/src/components/Charts/demo/bar.md: -------------------------------------------------------------------------------- 1 | --- 2 | order: 4 3 | title: 柱状图 4 | --- 5 | 6 | 通过设置 `x`,`y` 属性,可以快速的构建出一个漂亮的柱状图,各种纬度的关系则是通过自定义的数据展现。 7 | 8 | ````jsx 9 | import { Bar } from 'ant-design-pro/lib/Charts'; 10 | 11 | const salesData = []; 12 | for (let i = 0; i < 12; i += 1) { 13 | salesData.push({ 14 | x: `${i + 1}月`, 15 | y: Math.floor(Math.random() * 1000) + 200, 16 | }); 17 | } 18 | 19 | ReactDOM.render( 20 | 25 | , mountNode); 26 | ```` 27 | -------------------------------------------------------------------------------- /packages/clients/nest-react/src/components/Charts/demo/gauge.md: -------------------------------------------------------------------------------- 1 | --- 2 | order: 7 3 | title: 仪表盘 4 | --- 5 | 6 | 仪表盘是一种进度展示方式,可以更直观的展示当前的进展情况,通常也可表示占比。 7 | 8 | ````jsx 9 | import { Gauge } from 'ant-design-pro/lib/Charts'; 10 | 11 | ReactDOM.render( 12 | 17 | , mountNode); 18 | ```` 19 | -------------------------------------------------------------------------------- /packages/clients/nest-react/src/components/Charts/demo/mini-area.md: -------------------------------------------------------------------------------- 1 | --- 2 | order: 2 3 | col: 2 4 | title: 迷你区域图 5 | --- 6 | 7 | ````jsx 8 | import { MiniArea } from 'ant-design-pro/lib/Charts'; 9 | import moment from 'moment'; 10 | 11 | const visitData = []; 12 | const beginDay = new Date().getTime(); 13 | for (let i = 0; i < 20; i += 1) { 14 | visitData.push({ 15 | x: moment(new Date(beginDay + (1000 * 60 * 60 * 24 * i))).format('YYYY-MM-DD'), 16 | y: Math.floor(Math.random() * 100) + 10, 17 | }); 18 | } 19 | 20 | ReactDOM.render( 21 | 27 | , mountNode); 28 | ```` 29 | -------------------------------------------------------------------------------- /packages/clients/nest-react/src/components/Charts/demo/mini-bar.md: -------------------------------------------------------------------------------- 1 | --- 2 | order: 2 3 | col: 2 4 | title: 迷你柱状图 5 | --- 6 | 7 | 迷你柱状图更适合展示简单的区间数据,简洁的表现方式可以很好的减少大数据量的视觉展现压力。 8 | 9 | ````jsx 10 | import { MiniBar } from 'ant-design-pro/lib/Charts'; 11 | import moment from 'moment'; 12 | 13 | const visitData = []; 14 | const beginDay = new Date().getTime(); 15 | for (let i = 0; i < 20; i += 1) { 16 | visitData.push({ 17 | x: moment(new Date(beginDay + (1000 * 60 * 60 * 24 * i))).format('YYYY-MM-DD'), 18 | y: Math.floor(Math.random() * 100) + 10, 19 | }); 20 | } 21 | 22 | ReactDOM.render( 23 | 27 | , mountNode); 28 | ```` 29 | -------------------------------------------------------------------------------- /packages/clients/nest-react/src/components/Charts/demo/mini-pie.md: -------------------------------------------------------------------------------- 1 | --- 2 | order: 6 3 | title: 迷你饼状图 4 | --- 5 | 6 | 通过简化 `Pie` 属性的设置,可以快速的实现极简的饼状图,可配合 `ChartCard` 组合展 7 | 现更多业务场景。 8 | 9 | ```jsx 10 | import { Pie } from 'ant-design-pro/lib/Charts'; 11 | 12 | ReactDOM.render( 13 | , 14 | mountNode 15 | ); 16 | ``` 17 | -------------------------------------------------------------------------------- /packages/clients/nest-react/src/components/Charts/demo/mini-progress.md: -------------------------------------------------------------------------------- 1 | --- 2 | order: 3 3 | title: 迷你进度条 4 | --- 5 | 6 | ````jsx 7 | import { MiniProgress } from 'ant-design-pro/lib/Charts'; 8 | 9 | ReactDOM.render( 10 | 11 | , mountNode); 12 | ```` 13 | -------------------------------------------------------------------------------- /packages/clients/nest-react/src/components/Charts/demo/tag-cloud.md: -------------------------------------------------------------------------------- 1 | --- 2 | order: 9 3 | title: 标签云 4 | --- 5 | 6 | 标签云是一套相关的标签以及与此相应的权重展示方式,一般典型的标签云有 30 至 150 个标签,而权重影响使用的字体大小或其他视觉效果。 7 | 8 | ````jsx 9 | import { TagCloud } from 'ant-design-pro/lib/Charts'; 10 | 11 | const tags = []; 12 | for (let i = 0; i < 50; i += 1) { 13 | tags.push({ 14 | name: `TagClout-Title-${i}`, 15 | value: Math.floor((Math.random() * 50)) + 20, 16 | }); 17 | } 18 | 19 | ReactDOM.render( 20 | 24 | , mountNode); 25 | ```` 26 | -------------------------------------------------------------------------------- /packages/clients/nest-react/src/components/Charts/demo/timeline-chart.md: -------------------------------------------------------------------------------- 1 | --- 2 | order: 9 3 | title: 带有时间轴的图表 4 | --- 5 | 6 | 使用 `TimelineChart` 组件可以实现带有时间轴的柱状图展现,而其中的 `x` 属性,则是时间值的指向,默认最多支持同时展现两个指标,分别是 `y1` 和 `y2`。 7 | 8 | ````jsx 9 | import { TimelineChart } from 'ant-design-pro/lib/Charts'; 10 | 11 | const chartData = []; 12 | for (let i = 0; i < 20; i += 1) { 13 | chartData.push({ 14 | x: (new Date().getTime()) + (1000 * 60 * 30 * i), 15 | y1: Math.floor(Math.random() * 100) + 1000, 16 | y2: Math.floor(Math.random() * 100) + 10, 17 | }); 18 | } 19 | 20 | ReactDOM.render( 21 | 26 | , mountNode); 27 | ```` 28 | -------------------------------------------------------------------------------- /packages/clients/nest-react/src/components/Charts/demo/waterwave.md: -------------------------------------------------------------------------------- 1 | --- 2 | order: 8 3 | title: 水波图 4 | --- 5 | 6 | 水波图是一种比例的展示方式,可以更直观的展示关键值的占比。 7 | 8 | ````jsx 9 | import { WaterWave } from 'ant-design-pro/lib/Charts'; 10 | 11 | ReactDOM.render( 12 |
13 | 18 |
19 | , mountNode); 20 | ```` 21 | -------------------------------------------------------------------------------- /packages/clients/nest-react/src/components/Charts/index.less: -------------------------------------------------------------------------------- 1 | .miniChart { 2 | position: relative; 3 | width: 100%; 4 | .chartContent { 5 | position: absolute; 6 | bottom: -28px; 7 | width: 100%; 8 | > div { 9 | margin: 0 -5px; 10 | overflow: hidden; 11 | } 12 | } 13 | .chartLoading { 14 | position: absolute; 15 | top: 16px; 16 | left: 50%; 17 | margin-left: -7px; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /packages/clients/nest-react/src/components/EditableLinkGroup/index.d.ts: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | export interface EditableLinkGroupProps { 4 | links: any[]; 5 | onAdd: () => void; 6 | linkElement: string; 7 | } 8 | 9 | export default class EditableLinkGroup extends React.Component {} 10 | -------------------------------------------------------------------------------- /packages/clients/nest-react/src/components/EditableLinkGroup/index.less: -------------------------------------------------------------------------------- 1 | @import '~antd/lib/style/themes/default.less'; 2 | 3 | .linkGroup { 4 | padding: 20px 0 8px 24px; 5 | font-size: 0; 6 | & > a { 7 | display: inline-block; 8 | width: 25%; 9 | margin-bottom: 13px; 10 | color: @text-color; 11 | font-size: @font-size-base; 12 | &:hover { 13 | color: @primary-color; 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /packages/clients/nest-react/src/components/HeaderDropdown/index.less: -------------------------------------------------------------------------------- 1 | @import '~antd/lib/style/themes/default.less'; 2 | 3 | .container > * { 4 | background-color: #fff; 5 | border-radius: 4px; 6 | box-shadow: @shadow-1-down; 7 | } 8 | 9 | @media screen and (max-width: @screen-xs) { 10 | .container { 11 | width: 100% !important; 12 | } 13 | .container > * { 14 | border-radius: 0 !important; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /packages/clients/nest-react/src/components/HeaderDropdown/index.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { Dropdown } from 'antd'; 3 | import { DropDownProps } from 'antd/es/dropdown'; 4 | import classNames from 'classnames'; 5 | import styles from './index.less'; 6 | 7 | export interface HeaderDropdownProps extends DropDownProps { 8 | overlayClassName?: string; 9 | } 10 | 11 | const HeaderDropdown: React.FC = ({ overlayClassName, ...restProps }) => ( 12 | 13 | ); 14 | 15 | export default HeaderDropdown; 16 | -------------------------------------------------------------------------------- /packages/clients/nest-react/src/components/HeaderSearch/index.zh-CN.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: HeaderSearch 3 | subtitle: 顶部搜索框 4 | cols: 1 5 | order: 8 6 | --- 7 | 8 | 通常作为全局搜索的入口,放置在导航工具条右侧。 9 | 10 | ## API 11 | 12 | 参数 | 说明 | 类型 | 默认值 13 | ----|------|-----|------ 14 | placeholder | 占位文字 | string | - 15 | dataSource | 当前提示内容列表 | string[] | - 16 | onSearch | 搜索补全项的时候调用 | function(value) | - 17 | onChange | 选中 option,或 input 的 value 变化时,调用此函数 | function(value) | - 18 | onSelect | 被选中时调用,参数为选中项的 value 值 | function(value) | - 19 | onPressEnter | 按下回车时的回调 | function(value) | - 20 | onVisibleChange | 显示或隐藏文本框的回调 | function(value) |- 21 | defaultOpen | 输入框首次显示是否显示 | boolean | false 22 | open | 控制输入框是否显示 | boolean |false -------------------------------------------------------------------------------- /packages/clients/nest-react/src/components/IconFont/index.tsx: -------------------------------------------------------------------------------- 1 | import { Icon } from 'antd'; 2 | import defaultSettings from '../../defaultSettings'; 3 | const scriptUrl = defaultSettings.iconfontUrl; 4 | // 使用: 5 | // import IconFont from '@/components/IconFont'; 6 | // 7 | export default Icon.createFromIconfontCN({ scriptUrl }); 8 | -------------------------------------------------------------------------------- /packages/clients/nest-react/src/components/NoticeIcon/demo/basic.md: -------------------------------------------------------------------------------- 1 | --- 2 | order: 1 3 | title: 通知图标 4 | --- 5 | 6 | 通常用在导航工具栏上。 7 | 8 | ````jsx 9 | import NoticeIcon from 'ant-design-pro/lib/NoticeIcon'; 10 | 11 | ReactDOM.render(, mountNode); 12 | ```` 13 | -------------------------------------------------------------------------------- /packages/clients/nest-react/src/components/NoticeIcon/index.less: -------------------------------------------------------------------------------- 1 | @import '~antd/lib/style/themes/default.less'; 2 | 3 | .popover { 4 | position: relative; 5 | width: 336px; 6 | } 7 | 8 | .noticeButton { 9 | display: inline-block; 10 | cursor: pointer; 11 | transition: all 0.3s; 12 | } 13 | .icon { 14 | padding: 4px; 15 | vertical-align: middle; 16 | } 17 | 18 | .badge { 19 | font-size: 16px; 20 | } 21 | 22 | .tabs { 23 | :global { 24 | .ant-tabs-nav-scroll { 25 | text-align: center; 26 | } 27 | .ant-tabs-bar { 28 | margin-bottom: 0; 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /packages/clients/nest-react/src/components/PageHeader/breadcrumb.d.ts: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | import { PageHeaderProps } from './index'; 3 | 4 | export default class BreadcrumbView extends React.Component {} 5 | 6 | export function getBreadcrumb(breadcrumbNameMap: object, url: string): object; 7 | -------------------------------------------------------------------------------- /packages/clients/nest-react/src/components/PageHeader/demo/simple.md: -------------------------------------------------------------------------------- 1 | --- 2 | order: 3 3 | title: Simple 4 | --- 5 | 6 | 简单的页头。 7 | 8 | ````jsx 9 | import PageHeader from 'ant-design-pro/lib/PageHeader'; 10 | 11 | const breadcrumbList = [{ 12 | title: '一级菜单', 13 | href: '/', 14 | }, { 15 | title: '二级菜单', 16 | href: '/', 17 | }, { 18 | title: '三级菜单', 19 | }]; 20 | 21 | ReactDOM.render( 22 |
23 | 24 |
25 | , mountNode); 26 | ```` 27 | 28 | 33 | -------------------------------------------------------------------------------- /packages/clients/nest-react/src/components/PageHeaderWrapper/GridContent.less: -------------------------------------------------------------------------------- 1 | .main { 2 | width: 100%; 3 | height: 100%; 4 | min-height: 100%; 5 | transition: 0.3s; 6 | &.wide { 7 | max-width: 1200px; 8 | margin: 0 auto; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /packages/clients/nest-react/src/components/PageHeaderWrapper/GridContent.tsx: -------------------------------------------------------------------------------- 1 | import React, { PureComponent } from 'react'; 2 | import { connect } from 'dva'; 3 | import styles from './GridContent.less'; 4 | 5 | class GridContent extends PureComponent { 6 | render() { 7 | const { contentWidth, children } = this.props; 8 | let className = `${styles.main}`; 9 | if (contentWidth === 'Fixed') { 10 | className = `${styles.main} ${styles.wide}`; 11 | } 12 | return
{children}
; 13 | } 14 | } 15 | 16 | export default connect(({ setting }: any) => ({ 17 | contentWidth: setting.contentWidth, 18 | }))(GridContent); 19 | -------------------------------------------------------------------------------- /packages/clients/nest-react/src/components/PageHeaderWrapper/index.less: -------------------------------------------------------------------------------- 1 | @import '~antd/lib/style/themes/default.less'; 2 | 3 | .content { 4 | margin: 24px 24px 0; 5 | } 6 | 7 | @media screen and (max-width: @screen-sm) { 8 | .content { 9 | margin: 24px 0 0; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /packages/clients/nest-react/src/components/PageLoading/index.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { Spin } from 'antd'; 3 | 4 | // loading components from code split 5 | // https://umijs.org/plugin/umi-plugin-react.html#dynamicimport 6 | const PageLoading: React.FC = () => ( 7 |
8 | 9 |
10 | ); 11 | export default PageLoading; 12 | -------------------------------------------------------------------------------- /packages/clients/nest-react/src/components/SelectLang/index.less: -------------------------------------------------------------------------------- 1 | @import '~antd/lib/style/themes/default.less'; 2 | 3 | .menu { 4 | :global(.anticon) { 5 | margin-right: 8px; 6 | } 7 | :global(.ant-dropdown-menu-item) { 8 | min-width: 160px; 9 | } 10 | } 11 | 12 | .dropDown { 13 | line-height: @layout-header-height; 14 | vertical-align: top; 15 | cursor: pointer; 16 | > i { 17 | font-size: 16px !important; 18 | transform: none !important; 19 | svg { 20 | position: relative; 21 | top: -1px; 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /packages/clients/nest-react/src/components/SettingDrawer/ThemeColor.less: -------------------------------------------------------------------------------- 1 | .themeColor { 2 | margin-top: 24px; 3 | overflow: hidden; 4 | .title { 5 | margin-bottom: 12px; 6 | color: rgba(0, 0, 0, 0.65); 7 | font-size: 14px; 8 | line-height: 22px; 9 | } 10 | .colorBlock { 11 | float: left; 12 | width: 20px; 13 | height: 20px; 14 | margin-right: 8px; 15 | color: #fff; 16 | font-weight: bold; 17 | text-align: center; 18 | border-radius: 2px; 19 | cursor: pointer; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /packages/clients/nest-react/src/components/SiderMenu/BaseMenuProps.ts: -------------------------------------------------------------------------------- 1 | import { MenuMode, MenuTheme } from 'antd/es/menu'; 2 | import React from 'react'; 3 | import { MenuDataItem } from './MenuDataItem'; 4 | export interface BaseMenuProps { 5 | className?: string; 6 | collapsed?: boolean; 7 | flatMenuKeys?: any[]; 8 | handleOpenChange?: (openKeys: string[]) => void; 9 | isMobile?: boolean; 10 | location?: Location; 11 | menuData?: MenuDataItem[]; 12 | mode?: MenuMode; 13 | onCollapse?: (collapsed: boolean) => void; 14 | onOpenChange?: (openKeys: string[]) => void; 15 | openKeys?: string[]; 16 | style?: React.CSSProperties; 17 | theme?: MenuTheme; 18 | } 19 | -------------------------------------------------------------------------------- /packages/clients/nest-react/src/components/SiderMenu/MenuDataItem.ts: -------------------------------------------------------------------------------- 1 | export interface MenuDataItem { 2 | authority?: string[] | string; 3 | children?: MenuDataItem[]; 4 | hideChildrenInMenu?: boolean; 5 | hideInMenu?: boolean; 6 | icon?: string; 7 | locale?: string; 8 | name?: string; 9 | path: string; 10 | routes?: R extends true ? MenuDataItem[] : never; 11 | [key: string]: any; 12 | } 13 | -------------------------------------------------------------------------------- /packages/clients/nest-react/src/components/SiderMenu/SiderMenuProps.ts: -------------------------------------------------------------------------------- 1 | import { BaseMenuProps } from './BaseMenuProps'; 2 | export interface SiderMenuProps extends BaseMenuProps { 3 | logo?: string; 4 | fixSiderbar?: boolean; 5 | } 6 | -------------------------------------------------------------------------------- /packages/clients/nest-react/src/components/StandardFormRow/index.d.ts: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | export interface StandardFormRowProps { 4 | title: string; 5 | last?: boolean; 6 | block?: boolean; 7 | grid?: boolean; 8 | style?: React.CSSProperties; 9 | } 10 | 11 | export default class StandardFormRow extends React.Component {} 12 | -------------------------------------------------------------------------------- /packages/clients/nest-react/src/components/StandardTable/index.d.ts: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { PaginationConfig, SorterResult, TableCurrentDataSource } from 'antd/lib/table'; 3 | 4 | export interface StandardTableProps { 5 | columns: any; 6 | onSelectRow: (row: any) => void; 7 | data: any; 8 | rowKey?: string; 9 | selectedRows: any[]; 10 | onChange?: ( 11 | pagination: PaginationConfig, 12 | filters: Record, 13 | sorter: SorterResult, 14 | extra?: TableCurrentDataSource, 15 | ) => void; 16 | loading?: boolean; 17 | } 18 | 19 | export default class StandardTable extends React.Component {} 20 | -------------------------------------------------------------------------------- /packages/clients/nest-react/src/components/StandardTable/index.less: -------------------------------------------------------------------------------- 1 | @import '~antd/lib/style/themes/default.less'; 2 | 3 | .standardTable { 4 | :global { 5 | .ant-table-pagination { 6 | margin-top: 24px; 7 | } 8 | } 9 | 10 | .tableAlert { 11 | margin-bottom: 16px; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /packages/clients/nest-react/src/components/_utils/pathTools.test.ts: -------------------------------------------------------------------------------- 1 | import 'jest'; 2 | import { urlToList } from './pathTools'; 3 | 4 | describe('test urlToList', () => { 5 | it('A path', () => { 6 | expect(urlToList('/userinfo')).toEqual(['/userinfo']); 7 | }); 8 | it('Secondary path', () => { 9 | expect(urlToList('/userinfo/2144')).toEqual(['/userinfo', '/userinfo/2144']); 10 | }); 11 | it('Three paths', () => { 12 | expect(urlToList('/userinfo/2144/addr')).toEqual([ 13 | '/userinfo', 14 | '/userinfo/2144', 15 | '/userinfo/2144/addr', 16 | ]); 17 | }); 18 | }); 19 | -------------------------------------------------------------------------------- /packages/clients/nest-react/src/components/_utils/pathTools.ts: -------------------------------------------------------------------------------- 1 | // /userinfo/2144/id => ['/userinfo','/useinfo/2144,'/userindo/2144/id'] 2 | // eslint-disable-next-line import/prefer-default-export 3 | export function urlToList(url: string): string[] { 4 | const urllist = url.split('/').filter(i => i); 5 | return urllist.map((urlItem, index) => `/${urllist.slice(0, index + 1).join('/')}`); 6 | } 7 | -------------------------------------------------------------------------------- /packages/clients/nest-react/src/generated/.gitignore: -------------------------------------------------------------------------------- 1 | wwwroot/*.js 2 | node_modules 3 | typings 4 | dist 5 | -------------------------------------------------------------------------------- /packages/clients/nest-react/src/generated/.openapi-generator/VERSION: -------------------------------------------------------------------------------- 1 | 4.2.0 -------------------------------------------------------------------------------- /packages/clients/nest-react/src/generated/index.ts: -------------------------------------------------------------------------------- 1 | // tslint:disable 2 | /** 3 | * rest api interface 4 | * 项目标准接口 5 | * 6 | * The version of the OpenAPI document: 0.0.1 7 | * 8 | * 9 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 10 | * https://openapi-generator.tech 11 | * Do not edit the class manually. 12 | */ 13 | 14 | 15 | export * from "./api"; 16 | export * from "./configuration"; 17 | -------------------------------------------------------------------------------- /packages/clients/nest-react/src/layouts/BasicLayout.less: -------------------------------------------------------------------------------- 1 | @import '~antd/lib/style/themes/default.less'; 2 | 3 | .content { 4 | margin: 24px; 5 | padding-top: @layout-header-height; 6 | } 7 | -------------------------------------------------------------------------------- /packages/clients/nest-react/src/layouts/BlankLayout.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | const Layout: React.FC = ({ children }) =>
{children}
; 4 | 5 | export default Layout; 6 | -------------------------------------------------------------------------------- /packages/clients/nest-react/src/layouts/Header.less: -------------------------------------------------------------------------------- 1 | .fixedHeader { 2 | position: fixed; 3 | top: 0; 4 | right: 0; 5 | z-index: 9; 6 | width: 100%; 7 | transition: width 0.2s; 8 | } 9 | -------------------------------------------------------------------------------- /packages/clients/nest-react/src/layouts/MenuContext.tsx: -------------------------------------------------------------------------------- 1 | import { createContext } from 'react'; 2 | 3 | export default createContext({}); 4 | -------------------------------------------------------------------------------- /packages/clients/nest-react/src/locales/en-US/component.js: -------------------------------------------------------------------------------- 1 | export default { 2 | 'component.tagSelect.expand': 'Expand', 3 | 'component.tagSelect.collapse': 'Collapse', 4 | 'component.tagSelect.all': 'All', 5 | 'component.miniProgress.tooltipDefault': 'Target value', 6 | }; 7 | -------------------------------------------------------------------------------- /packages/clients/nest-react/src/locales/en-US/editor.js: -------------------------------------------------------------------------------- 1 | export default { 2 | 'app.editor.flow.title': 'Flowchart Editor', 3 | 'app.editor.flow.description': 4 | 'The flow chart is an excellent way to represent the idea of the algorithm.', 5 | 'app.editor.koni.title': 'Koni Editor', 6 | 'app.editor.koni.description': 7 | 'The topology diagram refers to the network structure diagram composed of network node devices and communication media.', 8 | 'app.editor.mind.title': 'Mind Map Editor', 9 | 'app.editor.mind.description': 10 | 'The brain map is an effective graphical thinking tool for expressing divergent thinking. It is simple but effective and is a practical thinking tool.', 11 | }; 12 | -------------------------------------------------------------------------------- /packages/clients/nest-react/src/locales/en-US/exception.js: -------------------------------------------------------------------------------- 1 | export default { 2 | 'app.exception.back': 'Back to home', 3 | 'app.exception.description.403': "Sorry, you don't have access to this page", 4 | 'app.exception.description.404': 'Sorry, the page you visited does not exist', 5 | 'app.exception.description.500': 'Sorry, the server is reporting an error', 6 | }; 7 | -------------------------------------------------------------------------------- /packages/clients/nest-react/src/locales/en-US/pwa.js: -------------------------------------------------------------------------------- 1 | export default { 2 | 'app.pwa.offline': 'You are offline now', 3 | 'app.pwa.serviceworker.updated': 'New content is available', 4 | 'app.pwa.serviceworker.updated.hint': 'Please press the "Refresh" button to reload current page', 5 | 'app.pwa.serviceworker.updated.ok': 'Refresh', 6 | }; 7 | -------------------------------------------------------------------------------- /packages/clients/nest-react/src/locales/pt-BR/component.js: -------------------------------------------------------------------------------- 1 | export default { 2 | 'component.tagSelect.expand': 'Expandir', 3 | 'component.tagSelect.collapse': 'Diminuir', 4 | 'component.tagSelect.all': 'Todas', 5 | 'component.miniProgress.tooltipDefault': 'Valor alvo', 6 | }; 7 | -------------------------------------------------------------------------------- /packages/clients/nest-react/src/locales/pt-BR/exception.js: -------------------------------------------------------------------------------- 1 | export default { 2 | 'app.exception.back': 'Voltar para Início', 3 | 'app.exception.description.403': 'Desculpe, você não tem acesso a esta página', 4 | 'app.exception.description.404': 'Desculpe, a página que você visitou não existe', 5 | 'app.exception.description.500': 'Desculpe, o servidor está reportando um erro', 6 | }; 7 | -------------------------------------------------------------------------------- /packages/clients/nest-react/src/locales/pt-BR/pwa.js: -------------------------------------------------------------------------------- 1 | export default { 2 | 'app.pwa.offline': 'Você está offline agora', 3 | 'app.pwa.serviceworker.updated': 'Novo conteúdo está disponível', 4 | 'app.pwa.serviceworker.updated.hint': 5 | 'Por favor, pressione o botão "Atualizar" para recarregar a página atual', 6 | 'app.pwa.serviceworker.updated.ok': 'Atualizar', 7 | }; 8 | -------------------------------------------------------------------------------- /packages/clients/nest-react/src/locales/zh-CN/component.js: -------------------------------------------------------------------------------- 1 | export default { 2 | 'component.tagSelect.expand': '展开', 3 | 'component.tagSelect.collapse': '收起', 4 | 'component.tagSelect.all': '全部', 5 | 'component.miniProgress.tooltipDefault': '目标值', 6 | }; 7 | -------------------------------------------------------------------------------- /packages/clients/nest-react/src/locales/zh-CN/editor.js: -------------------------------------------------------------------------------- 1 | export default { 2 | 'app.editor.flow.title': '流程图编辑器', 3 | 'app.editor.flow.description': '千言万语不如一张图,流程图是表示算法思路的好方法', 4 | 'app.editor.koni.title': '拓扑编辑器', 5 | 'app.editor.koni.description': '拓扑结构图是指由网络节点设备和通信介质构成的网络结构图', 6 | 'app.editor.mind.title': '脑图编辑器', 7 | 'app.editor.mind.description': 8 | '脑图是表达发散性思维的有效图形思维工具 ,它简单却又很有效,是一种实用性的思维工具。', 9 | }; 10 | -------------------------------------------------------------------------------- /packages/clients/nest-react/src/locales/zh-CN/exception.js: -------------------------------------------------------------------------------- 1 | export default { 2 | 'app.exception.back': '返回首页', 3 | 'app.exception.description.403': '抱歉,你无权访问此页面', 4 | 'app.exception.description.404': '抱歉,你访问的页面不存在', 5 | 'app.exception.description.500': '抱歉,服务器出错了', 6 | }; 7 | -------------------------------------------------------------------------------- /packages/clients/nest-react/src/locales/zh-CN/pwa.js: -------------------------------------------------------------------------------- 1 | export default { 2 | 'app.pwa.offline': '当前处于离线状态', 3 | 'app.pwa.serviceworker.updated': '有新内容', 4 | 'app.pwa.serviceworker.updated.hint': '请点击“刷新”按钮或者手动刷新页面', 5 | 'app.pwa.serviceworker.updated.ok': '刷新', 6 | }; 7 | -------------------------------------------------------------------------------- /packages/clients/nest-react/src/locales/zh-TW/component.js: -------------------------------------------------------------------------------- 1 | export default { 2 | 'component.tagSelect.expand': '展開', 3 | 'component.tagSelect.collapse': '收起', 4 | 'component.tagSelect.all': '全部', 5 | 'component.miniProgress.tooltipDefault': '目标值', 6 | }; 7 | -------------------------------------------------------------------------------- /packages/clients/nest-react/src/locales/zh-TW/editor.js: -------------------------------------------------------------------------------- 1 | export default { 2 | 'app.editor.flow.title': '流程圖編輯器', 3 | 'app.editor.flow.description': '千言萬語不如一張圖,流程圖是表示算法思路的好方法', 4 | 'app.editor.koni.title': '拓撲編輯器', 5 | 'app.editor.koni.description': '拓撲結構圖是指由網絡節點設備和通信介質構成的網絡結構圖', 6 | 'app.editor.mind.title': '腦圖編輯器', 7 | 'app.editor.mind.description': 8 | '腦圖是表達發散性思維的有效圖形思維工具 ,它簡單卻又很有效,是一種實用性的思維工具', 9 | }; 10 | -------------------------------------------------------------------------------- /packages/clients/nest-react/src/locales/zh-TW/exception.js: -------------------------------------------------------------------------------- 1 | export default { 2 | 'app.exception.back': '返回首頁', 3 | 'app.exception.description.403': '抱歉,妳無權訪問此頁面', 4 | 'app.exception.description.404': '抱歉,妳訪問的頁面不存在', 5 | 'app.exception.description.500': '抱歉,服務器出錯了', 6 | }; 7 | -------------------------------------------------------------------------------- /packages/clients/nest-react/src/locales/zh-TW/pwa.js: -------------------------------------------------------------------------------- 1 | export default { 2 | 'app.pwa.offline': '當前處於離線狀態', 3 | 'app.pwa.serviceworker.updated': '有新內容', 4 | 'app.pwa.serviceworker.updated.hint': '請點擊“刷新”按鈕或者手動刷新頁面', 5 | 'app.pwa.serviceworker.updated.ok': '刷新', 6 | }; 7 | -------------------------------------------------------------------------------- /packages/clients/nest-react/src/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Ant Design Pro", 3 | "short_name": "Ant Design Pro", 4 | "display": "standalone", 5 | "start_url": "./?utm_source=homescreen", 6 | "theme_color": "#002140", 7 | "background_color": "#001529", 8 | "icons": [ 9 | { 10 | "src": "icons/icon-192x192.png", 11 | "sizes": "192x192" 12 | }, 13 | { 14 | "src": "icons/icon-128x128.png", 15 | "sizes": "128x128" 16 | }, 17 | { 18 | "src": "icons/icon-512x512.png", 19 | "sizes": "512x512" 20 | } 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /packages/clients/nest-react/src/models/project.ts: -------------------------------------------------------------------------------- 1 | import { queryProjectNotice } from '@/services/api'; 2 | import { ModelType } from './connect'; 3 | 4 | const projectModel: ModelType = { 5 | namespace: 'project', 6 | state: { 7 | notice: [], 8 | }, 9 | 10 | effects: { 11 | *fetchNotice(_, { call, put }) { 12 | const response = yield call(queryProjectNotice); 13 | yield put({ 14 | type: 'saveNotice', 15 | payload: Array.isArray(response) ? response : [], 16 | }); 17 | }, 18 | }, 19 | 20 | reducers: { 21 | saveNotice(state, action) { 22 | return { 23 | ...state, 24 | notice: action.payload, 25 | }; 26 | }, 27 | }, 28 | }; 29 | 30 | export default projectModel; 31 | -------------------------------------------------------------------------------- /packages/clients/nest-react/src/pages/404.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import Link from 'umi/link'; 3 | import { formatMessage } from 'umi-plugin-react/locale'; 4 | import { Exception } from 'ant-design-pro'; 5 | 6 | export default () => ( 7 | 13 | ); 14 | -------------------------------------------------------------------------------- /packages/clients/nest-react/src/pages/Account/Center/Articles.less: -------------------------------------------------------------------------------- 1 | @import '~antd/lib/style/themes/default.less'; 2 | 3 | .articleList { 4 | :global { 5 | .ant-list-item:first-child { 6 | padding-top: 0; 7 | } 8 | } 9 | } 10 | a.listItemMetaTitle { 11 | color: @heading-color; 12 | } 13 | -------------------------------------------------------------------------------- /packages/clients/nest-react/src/pages/Account/Settings/GeographicView.less: -------------------------------------------------------------------------------- 1 | @import '~antd/lib/style/themes/default.less'; 2 | 3 | .row { 4 | .item { 5 | width: 50%; 6 | max-width: 220px; 7 | } 8 | .item:first-child { 9 | width: ~'calc(50% - 8px)'; 10 | margin-right: 8px; 11 | } 12 | } 13 | 14 | @media screen and (max-width: @screen-sm) { 15 | .item:first-child { 16 | margin: 0; 17 | margin-bottom: 8px; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /packages/clients/nest-react/src/pages/Account/Settings/PhoneView.less: -------------------------------------------------------------------------------- 1 | @import '~antd/lib/style/themes/default.less'; 2 | 3 | .area_code { 4 | width: 30%; 5 | max-width: 128px; 6 | margin-right: 8px; 7 | } 8 | .phone_number { 9 | width: ~'calc(70% - 8px)'; 10 | max-width: 312px; 11 | } 12 | -------------------------------------------------------------------------------- /packages/clients/nest-react/src/pages/Dashboard/Monitor.less: -------------------------------------------------------------------------------- 1 | @import '~antd/lib/style/themes/default.less'; 2 | @import '~@/utils/utils.less'; 3 | 4 | .mapChart { 5 | height: 452px; 6 | padding-top: 24px; 7 | text-align: center; 8 | img { 9 | display: inline-block; 10 | max-width: 100%; 11 | max-height: 437px; 12 | } 13 | } 14 | 15 | .pieCard :global(.pie-stat) { 16 | font-size: 24px !important; 17 | } 18 | 19 | @media screen and (max-width: @screen-lg) { 20 | .mapChart { 21 | height: auto; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /packages/clients/nest-react/src/pages/Exception/403.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { formatMessage } from 'umi-plugin-react/locale'; 3 | import Link from 'umi/link'; 4 | import { Exception } from 'ant-design-pro'; 5 | 6 | const Exception403 = () => ( 7 | 13 | ); 14 | 15 | export default Exception403; 16 | -------------------------------------------------------------------------------- /packages/clients/nest-react/src/pages/Exception/404.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { formatMessage } from 'umi-plugin-react/locale'; 3 | import Link from 'umi/link'; 4 | import { Exception } from 'ant-design-pro'; 5 | 6 | const Exception404 = () => ( 7 | 13 | ); 14 | 15 | export default Exception404; 16 | -------------------------------------------------------------------------------- /packages/clients/nest-react/src/pages/Exception/500.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { formatMessage } from 'umi-plugin-react/locale'; 3 | import Link from 'umi/link'; 4 | import { Exception } from 'ant-design-pro'; 5 | 6 | const Exception500 = () => ( 7 | 13 | ); 14 | 15 | export default Exception500; 16 | -------------------------------------------------------------------------------- /packages/clients/nest-react/src/pages/Exception/style.less: -------------------------------------------------------------------------------- 1 | .trigger { 2 | background: 'red'; 3 | :global(.ant-btn) { 4 | margin-right: 8px; 5 | margin-bottom: 12px; 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /packages/clients/nest-react/src/pages/List/Articles.less: -------------------------------------------------------------------------------- 1 | @import '~antd/lib/style/themes/default.less'; 2 | 3 | a.listItemMetaTitle { 4 | color: @heading-color; 5 | } 6 | .listItemExtra { 7 | width: 272px; 8 | height: 1px; 9 | } 10 | .selfTrigger { 11 | margin-left: 12px; 12 | } 13 | 14 | @media screen and (max-width: @screen-xs) { 15 | .selfTrigger { 16 | display: block; 17 | margin-left: 0; 18 | } 19 | } 20 | @media screen and (max-width: @screen-md) { 21 | .selfTrigger { 22 | display: block; 23 | margin-left: 0; 24 | } 25 | } 26 | @media screen and (max-width: @screen-lg) { 27 | .listItemExtra { 28 | width: 0; 29 | height: 1px; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /packages/clients/nest-react/src/pages/Profile/BasicProfile.less: -------------------------------------------------------------------------------- 1 | @import '~antd/lib/style/themes/default.less'; 2 | 3 | .title { 4 | margin-bottom: 16px; 5 | color: @heading-color; 6 | font-weight: 500; 7 | font-size: 16px; 8 | } 9 | -------------------------------------------------------------------------------- /packages/clients/nest-react/src/pages/User/Login.less: -------------------------------------------------------------------------------- 1 | @import '~antd/lib/style/themes/default.less'; 2 | 3 | .main { 4 | width: 388px; 5 | margin: 0 auto; 6 | @media screen and (max-width: @screen-sm) { 7 | width: 95%; 8 | } 9 | 10 | .icon { 11 | margin-left: 16px; 12 | color: rgba(0, 0, 0, 0.2); 13 | font-size: 24px; 14 | vertical-align: middle; 15 | cursor: pointer; 16 | transition: color 0.3s; 17 | 18 | &:hover { 19 | color: @primary-color; 20 | } 21 | } 22 | 23 | .other { 24 | margin-top: 24px; 25 | line-height: 22px; 26 | text-align: left; 27 | 28 | .register { 29 | float: right; 30 | } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /packages/clients/nest-react/src/pages/User/RegisterResult.less: -------------------------------------------------------------------------------- 1 | .registerResult { 2 | :global { 3 | .anticon { 4 | font-size: 64px; 5 | } 6 | } 7 | .title { 8 | margin-top: 32px; 9 | font-size: 20px; 10 | line-height: 28px; 11 | } 12 | .actions { 13 | margin-top: 40px; 14 | a + a { 15 | margin-left: 8px; 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /packages/clients/nest-react/src/pages/Welcome.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | export default () => ( 4 |

5 | 想要添加更多页面?请参考{' '} 6 | 7 | umi 区块 8 | 9 | 。 10 |

11 | ); 12 | -------------------------------------------------------------------------------- /packages/clients/nest-react/src/pages/document.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 10 | Ant Design Pro 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | -------------------------------------------------------------------------------- /packages/clients/nest-react/src/services/error.js: -------------------------------------------------------------------------------- 1 | import request from '@/utils/request'; 2 | 3 | export default async function queryError(code) { 4 | return request(`/api/${code}`); 5 | } 6 | -------------------------------------------------------------------------------- /packages/clients/nest-react/src/services/geographic.js: -------------------------------------------------------------------------------- 1 | import request from '@/utils/request'; 2 | 3 | export async function queryProvince() { 4 | return request('/api/geographic/province'); 5 | } 6 | 7 | export async function queryCity(province) { 8 | return request(`/api/geographic/city/${province}`); 9 | } 10 | -------------------------------------------------------------------------------- /packages/clients/nest-react/src/utils/Authorized.ts: -------------------------------------------------------------------------------- 1 | import { Authorized as RenderAuthorized } from 'ant-design-pro'; 2 | import { getAuthority } from './authority'; 3 | 4 | let Authorized = RenderAuthorized(getAuthority()); // eslint-disable-line 5 | 6 | // Reload the rights component 7 | const reloadAuthorized = () => { 8 | Authorized = RenderAuthorized(getAuthority()); 9 | }; 10 | 11 | export { reloadAuthorized }; 12 | export default Authorized; 13 | -------------------------------------------------------------------------------- /packages/clients/nest-react/src/utils/authority.test.ts: -------------------------------------------------------------------------------- 1 | import 'jest'; 2 | import { getAuthority } from './authority'; 3 | 4 | describe('getAuthority should be strong', () => { 5 | it('empty', () => { 6 | expect(getAuthority(null!)).toEqual(['admin']); // default value 7 | }); 8 | it('string', () => { 9 | expect(getAuthority('admin')).toEqual(['admin']); 10 | }); 11 | it('array with double quotes', () => { 12 | expect(getAuthority('"admin"')).toEqual(['admin']); 13 | }); 14 | it('array with single item', () => { 15 | expect(getAuthority('["admin"]')).toEqual(['admin']); 16 | }); 17 | it('array with multiple items', () => { 18 | expect(getAuthority('["admin", "guest"]')).toEqual(['admin', 'guest']); 19 | }); 20 | }); 21 | -------------------------------------------------------------------------------- /packages/servers/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/servers/.DS_Store -------------------------------------------------------------------------------- /packages/servers/nest-server/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/servers/nest-server/.DS_Store -------------------------------------------------------------------------------- /packages/servers/nest-server/.env.example: -------------------------------------------------------------------------------- 1 | PORT=5400 2 | NODE_ENV=test 3 | API_URL=https://localhost/ 4 | MONGODB_URI_PRODUCTION=mongodb://localhost/nestx-server-pro 5 | MONGODB_URI_TEST=mongodb://localhost/nestx-server-test 6 | MONGODB_URI_DEV=mongodb://localhost/nestx-server-dev 7 | SESSION_SECRET=ADS13DI999999999999888 8 | 9 | JWT_SECRET_KEY=HSSB33333333333333333333 10 | JWT_EXPIRE_IN=1h 11 | JWT_ALGORITHM=HS512 12 | MULTER_DEST=./uploads 13 | -------------------------------------------------------------------------------- /packages/servers/nest-server/.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | parser: '@typescript-eslint/parser', 3 | parserOptions: { 4 | project: 'tsconfig.json', 5 | sourceType: 'module', 6 | }, 7 | plugins: ['@typescript-eslint/eslint-plugin'], 8 | extends: [ 9 | 'plugin:@typescript-eslint/eslint-recommended', 10 | 'plugin:@typescript-eslint/recommended', 11 | 'prettier', 12 | 'prettier/@typescript-eslint', 13 | ], 14 | root: true, 15 | env: { 16 | node: true, 17 | jest: true, 18 | }, 19 | rules: { 20 | '@typescript-eslint/interface-name-prefix': 'off', 21 | '@typescript-eslint/explicit-function-return-type': 'off', 22 | '@typescript-eslint/no-explicit-any': 'off', 23 | }, 24 | }; 25 | -------------------------------------------------------------------------------- /packages/servers/nest-server/.gitignore: -------------------------------------------------------------------------------- 1 | # compiled output 2 | /dist 3 | /node_modules 4 | 5 | # Logs 6 | logs 7 | *.log 8 | npm-debug.log* 9 | yarn-debug.log* 10 | yarn-error.log* 11 | lerna-debug.log* 12 | 13 | # OS 14 | .DS_Store 15 | 16 | # Tests 17 | /coverage 18 | /.nyc_output 19 | 20 | # IDEs and editors 21 | /.idea 22 | .project 23 | .classpath 24 | .c9/ 25 | *.launch 26 | .settings/ 27 | *.sublime-workspace 28 | 29 | # IDE - VSCode 30 | .vscode/* 31 | !.vscode/settings.json 32 | !.vscode/tasks.json 33 | !.vscode/launch.json 34 | !.vscode/extensions.json -------------------------------------------------------------------------------- /packages/servers/nest-server/.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "singleQuote": true, 3 | "trailingComma": "all" 4 | } -------------------------------------------------------------------------------- /packages/servers/nest-server/.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "0.2.0", 3 | "configurations": [{ 4 | "type": "node", 5 | "request": "launch", 6 | "name": "Debug Nest Framework", 7 | "args": ["${workspaceFolder}/src/main.ts"], 8 | "runtimeArgs": ["--nolazy", "-r", "ts-node/register"], 9 | "sourceMaps": true, 10 | "cwd": "${workspaceRoot}", 11 | "protocol": "inspector", 12 | "console": "integratedTerminal" 13 | }] 14 | } -------------------------------------------------------------------------------- /packages/servers/nest-server/.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "debug.node.autoAttach": "on" 3 | } -------------------------------------------------------------------------------- /packages/servers/nest-server/README.md: -------------------------------------------------------------------------------- 1 | # nestx server 2 | Server side for nestx 3 | ### Quick start 4 | 5 | ```bash 6 | 7 | # install the repo with npm 8 | $ npm install 9 | 10 | # start the server 11 | $ npm start 12 | 13 | ``` 14 | 15 | ### Other commands 16 | 17 | ```bash 18 | 19 | # development 20 | $ npm run start 21 | 22 | # watch mode 23 | $ npm run start:dev 24 | 25 | # production mode 26 | $ npm run start:prod 27 | 28 | ``` 29 | 30 | ### Test 31 | 32 | ``` 33 | # unit tests 34 | $ npm run test 35 | 36 | # e2e tests 37 | $ npm run test:e2e 38 | 39 | # test coverage 40 | $ npm run test:cov 41 | ``` -------------------------------------------------------------------------------- /packages/servers/nest-server/data/export.dict.json: -------------------------------------------------------------------------------- 1 | [{"_id":"59f058a7696cf532c5172ead","category":"category","name":"category","translate":"字典分类"},{"_id":"59f058a7696cf532c5172ea1","category":"category","name":"department","translate":"部门分类"},{"_id":"59f058a7696cf532c5172ea2","category":"category","name":"product","translate":"产品分类"},{"_id":"59f058a7696cf532c5172ea3","category":"product","name":"iphone","translate":"苹果手机"}] -------------------------------------------------------------------------------- /packages/servers/nest-server/data/export.group.json: -------------------------------------------------------------------------------- 1 | [{"_id":"5b1e89da653fef1f92c4b955","name":"总公司","paths":[],"description":"总公司分组"},{"_id":"5b2766a3177e2c274909cb6d","name":"第一分公司","parent":"5b1e89da653fef1f92c4b955","paths":[],"director":"5af409755283214fb9c2ccd0","description":"研发中心"},{"_id":"5b2766a3177e2c274909cb61","name":"第二分公司","parent":"5b1e89da653fef1f92c4b955","paths":[],"description":"市场分析"}] -------------------------------------------------------------------------------- /packages/servers/nest-server/data/export.page.json: -------------------------------------------------------------------------------- 1 | [{ 2 | "_id": "5cb9f10655654febb1fcd715", 3 | "title": "测试页面", 4 | "keyword": "test", 5 | "description": "这是一个测试页面", 6 | "content": "5cb9f10655654febb1fcd715", 7 | "publish": "2019-04-19T16:02:14.398Z", 8 | "createdAt": "2019-04-19T16:02:14.403Z", 9 | "updatedAt": "2019-04-20T03:55:46.633Z" 10 | }] -------------------------------------------------------------------------------- /packages/servers/nest-server/data/export.setting.json: -------------------------------------------------------------------------------- 1 | [{"_id":"5b0d006899f6ac12569afb05","name":"main","key":"name","value":"Typerx"},{"_id":"5b0d00a099f6ac12569afb06","name":"main","key":"logo","value":"/uploads/6dd2eea21bdde9c69d4aabc898764d7f"},{"_id":"5b0d00a099f6ac12569afb07","name":"demo","key":"logo","value":"/uploads/6dd2eea21bdde9c69d4aabc898764d7f"},{"_id":"5b0d00a099f6ac12569afb08","name":"demo2","key":"logo","value":"/uploads/6dd2eea21bdde9c69d4aabc898764d7f"}] -------------------------------------------------------------------------------- /packages/servers/nest-server/generated/.gitignore: -------------------------------------------------------------------------------- 1 | wwwroot/*.js 2 | node_modules 3 | typings 4 | dist 5 | -------------------------------------------------------------------------------- /packages/servers/nest-server/generated/.openapi-generator/VERSION: -------------------------------------------------------------------------------- 1 | 4.2.1 -------------------------------------------------------------------------------- /packages/servers/nest-server/generated/index.ts: -------------------------------------------------------------------------------- 1 | // tslint:disable 2 | /** 3 | * rest api interface 4 | * 项目标准接口 5 | * 6 | * The version of the OpenAPI document: 0.0.1 7 | * 8 | * 9 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 10 | * https://openapi-generator.tech 11 | * Do not edit the class manually. 12 | */ 13 | 14 | 15 | export * from "./api"; 16 | export * from "./configuration"; 17 | -------------------------------------------------------------------------------- /packages/servers/nest-server/index.js: -------------------------------------------------------------------------------- 1 | require('ts-node/register'); 2 | require('./src/main'); -------------------------------------------------------------------------------- /packages/servers/nest-server/jest.json: -------------------------------------------------------------------------------- 1 | { 2 | "moduleFileExtensions": [ 3 | "ts", 4 | "tsx", 5 | "js", 6 | "json" 7 | ], 8 | "transform": { 9 | "^.+\\.tsx?$": "/node_modules/ts-jest/preprocessor.js" 10 | }, 11 | "testRegex": "/src/.*\\.(test|spec).(ts|tsx|js)$", 12 | "collectCoverageFrom" : ["src/**/*.{js,jsx,tsx,ts}", "!**/node_modules/**", "!**/vendor/**"], 13 | "coverageReporters": ["json", "lcov"] 14 | } -------------------------------------------------------------------------------- /packages/servers/nest-server/nest-cli.json: -------------------------------------------------------------------------------- 1 | { 2 | "collection": "@nestjs/schematics", 3 | "sourceRoot": "src" 4 | } 5 | -------------------------------------------------------------------------------- /packages/servers/nest-server/nodemon-debug.json: -------------------------------------------------------------------------------- 1 | { 2 | "watch": ["src"], 3 | "ext": "ts", 4 | "ignore": ["src/**/*.spec.ts"], 5 | "exec": "node --inspect-brk -r ts-node/register -r tsconfig-paths/register src/main.ts" 6 | } 7 | -------------------------------------------------------------------------------- /packages/servers/nest-server/nodemon.json: -------------------------------------------------------------------------------- 1 | { 2 | "watch": ["./src"], 3 | "ext": "ts", 4 | "ignore": ["./src/**/*.spec.ts"], 5 | "exec": "node ./index", 6 | "env": { 7 | "NODE_ENV": "test" 8 | } 9 | } -------------------------------------------------------------------------------- /packages/servers/nest-server/ormconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "mysql", 3 | "host": "localhost", 4 | "port": 3306, 5 | "username": "root", 6 | "password": "Viking$123", 7 | "database": "typerx", 8 | "entities": ["src/**/**.entity{.ts,.js}"], 9 | "synchronize": true 10 | } 11 | 12 | -------------------------------------------------------------------------------- /packages/servers/nest-server/public/index.html: -------------------------------------------------------------------------------- 1 | hello world -------------------------------------------------------------------------------- /packages/servers/nest-server/src/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/servers/nest-server/src/.DS_Store -------------------------------------------------------------------------------- /packages/servers/nest-server/src/app.service.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from '@nestjs/common'; 2 | import { SettingsService } from 'nestx-base'; 3 | 4 | @Injectable() 5 | export class AppService { 6 | constructor(private readonly settingService: SettingsService) {} 7 | 8 | getAppSettings(name: string) { 9 | return this.settingService.getSettingsByName(name); 10 | } 11 | 12 | root(): object { 13 | return null; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /packages/servers/nest-server/src/index.ts: -------------------------------------------------------------------------------- 1 | import { AuthModule } from 'nestx-auth/src/index'; 2 | import { BaseModule } from 'nestx-base/src/index'; 3 | import { CmsModule } from 'nestx-cms/src/index'; 4 | import { AppModule } from './app.module'; 5 | const scanModules = [AuthModule, BaseModule, CmsModule, AppModule]; 6 | -------------------------------------------------------------------------------- /packages/servers/nest-server/src/mock/mock.controller.ts: -------------------------------------------------------------------------------- 1 | import { Controller, Get } from '@nestjs/common'; 2 | import { Tags } from 'nest-swagger'; 3 | import { MockService } from './mock.service'; 4 | 5 | @Tags('mock') 6 | @Controller('mock') 7 | export class MockController { 8 | constructor(private readonly mockService: MockService) {} 9 | 10 | @Get('init') 11 | initData(): Promise { 12 | return this.mockService.initDatabase(); 13 | } 14 | 15 | @Get('reset') 16 | reset(): Promise { 17 | return this.mockService.resetDatabase(); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /packages/servers/nest-server/src/scripts/generate.ts: -------------------------------------------------------------------------------- 1 | import { NestFactory } from '@nestjs/core'; 2 | import { AppModule } from './../app.module'; 3 | import { createDocument } from './../swagger'; 4 | import { writeFileSync } from 'fs'; 5 | 6 | async function generate() { 7 | const app = await NestFactory.create(AppModule); 8 | const document = createDocument(app); 9 | writeFileSync('swagger.api.json', JSON.stringify(document)); 10 | } 11 | 12 | generate(); 13 | -------------------------------------------------------------------------------- /packages/servers/nest-server/src/swagger/constants.ts: -------------------------------------------------------------------------------- 1 | export const SWAGGER_API_ROOT = 'docs'; 2 | export const SWAGGER_API_NAME = 'nestx server'; 3 | export const SWAGGER_API_DESCRIPTION = 'nestx server is a simple REST API provider.'; 4 | export const SWAGGER_API_CURRENT_VERSION = '0.0.1'; 5 | export const SWAGGER_API_AUTH_NAME = 'Authorization'; 6 | export const SWAGGER_API_AUTH_LOCATION = 'header'; -------------------------------------------------------------------------------- /packages/servers/nest-server/src/types/types.d.ts: -------------------------------------------------------------------------------- 1 | declare module "tls" { 2 | export var checkServerIdentity: (servername: string, cert: string | Buffer | (string | Buffer)[]) => any; 3 | } 4 | -------------------------------------------------------------------------------- /packages/servers/nest-server/src/utils/index.ts: -------------------------------------------------------------------------------- 1 | export * from './logger'; 2 | export * from './secrets'; 3 | -------------------------------------------------------------------------------- /packages/servers/nest-server/src/utils/logger.ts: -------------------------------------------------------------------------------- 1 | import * as log4js from 'log4js'; 2 | import { join } from 'path'; 3 | import { existsSync } from 'fs'; 4 | const cwd = process.cwd(); 5 | const config = join(cwd, 'log4js.json'); 6 | 7 | if (existsSync(config)) { 8 | log4js.configure(config); 9 | } 10 | 11 | export const logger = log4js.getLogger('app'); -------------------------------------------------------------------------------- /packages/servers/nest-server/swagger.config.json: -------------------------------------------------------------------------------- 1 | { 2 | "swagger": { 3 | "outputDirectory": "./src/swagger", 4 | "entryFile": "./src/index.ts", 5 | "name": "rest api interface", 6 | "description": "项目标准接口", 7 | "license": "MIT", 8 | "produces": ["application/json"], 9 | "version": "0.0.1" 10 | } 11 | } -------------------------------------------------------------------------------- /packages/servers/nest-server/tsconfig.build.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "exclude": ["node_modules", "test", "src/scripts", "**/*spec.ts"] 4 | } -------------------------------------------------------------------------------- /packages/servers/nest-spring/.openapi-generator/VERSION: -------------------------------------------------------------------------------- 1 | 4.2.0 -------------------------------------------------------------------------------- /packages/servers/nest-spring/README.md: -------------------------------------------------------------------------------- 1 | # OpenAPI generated server 2 | 3 | Spring Boot Server 4 | 5 | 6 | ## Overview 7 | This server was generated by the [OpenAPI Generator](https://openapi-generator.tech) project. 8 | By using the [OpenAPI-Spec](https://openapis.org), you can easily generate a server stub. 9 | This is an example of building a OpenAPI-enabled server in Java using the SpringBoot framework. 10 | 11 | The underlying library integrating OpenAPI to SpringBoot is [springfox](https://github.com/springfox/springfox) 12 | 13 | Start your server as a simple java application 14 | 15 | You can view the api documentation in swagger-ui by pointing to 16 | http://localhost:8080/ 17 | 18 | Change default port value in application.properties -------------------------------------------------------------------------------- /packages/servers/nest-spring/src/main/java/org/openapitools/RFC3339DateFormat.java: -------------------------------------------------------------------------------- 1 | package org.openapitools; 2 | 3 | import com.fasterxml.jackson.databind.util.ISO8601DateFormat; 4 | import com.fasterxml.jackson.databind.util.ISO8601Utils; 5 | 6 | import java.text.FieldPosition; 7 | import java.util.Date; 8 | 9 | 10 | public class RFC3339DateFormat extends ISO8601DateFormat { 11 | 12 | private static final long serialVersionUID = 1L; 13 | 14 | // Same as ISO8601DateFormat but serializing milliseconds. 15 | @Override 16 | public StringBuffer format(Date date, StringBuffer toAppendTo, FieldPosition fieldPosition) { 17 | String value = ISO8601Utils.format(date, true); 18 | toAppendTo.append(value); 19 | return toAppendTo; 20 | } 21 | 22 | } -------------------------------------------------------------------------------- /packages/servers/nest-spring/src/main/java/org/openapitools/configuration/HomeController.java: -------------------------------------------------------------------------------- 1 | package org.openapitools.configuration; 2 | 3 | import org.springframework.stereotype.Controller; 4 | import org.springframework.web.bind.annotation.RequestMapping; 5 | 6 | 7 | /** 8 | * Home redirection to OpenAPI api documentation 9 | */ 10 | @Controller 11 | public class HomeController { 12 | 13 | @RequestMapping("/") 14 | public String index() { 15 | return "redirect:swagger-ui.html"; 16 | } 17 | 18 | 19 | } 20 | -------------------------------------------------------------------------------- /packages/servers/nest-spring/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | springfox.documentation.swagger.v2.path=/api-docs 2 | server.port=8080 3 | spring.jackson.date-format=org.openapitools.RFC3339DateFormat 4 | spring.jackson.serialization.WRITE_DATES_AS_TIMESTAMPS=false 5 | -------------------------------------------------------------------------------- /packages/servers/nest-swagger/.gitignore: -------------------------------------------------------------------------------- 1 | # dependencies 2 | /node_modules 3 | 4 | # IDE 5 | /.idea 6 | /.awcache 7 | /.vscode 8 | 9 | # misc 10 | npm-debug.log 11 | .DS_Store 12 | 13 | # tests 14 | /test 15 | /coverage 16 | /.nyc_output 17 | 18 | # source 19 | dist 20 | index.js 21 | index.d.ts -------------------------------------------------------------------------------- /packages/servers/nest-swagger/.npmignore: -------------------------------------------------------------------------------- 1 | # source 2 | lib 3 | index.ts 4 | package-lock.json 5 | tslint.json 6 | tsconfig.json 7 | .prettierrc 8 | !dist/** 9 | !doc/** 10 | .travis.yml 11 | /.vscode 12 | coverage 13 | .DS_Store 14 | .nyc_output 15 | tsconfig.json 16 | test 17 | src -------------------------------------------------------------------------------- /packages/servers/nest-swagger/.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "singleQuote": true, 3 | "trailingComma": "none" 4 | } -------------------------------------------------------------------------------- /packages/servers/nest-swagger/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './swagger/decorators'; 2 | -------------------------------------------------------------------------------- /packages/servers/nest-swagger/src/utils/pathUtils.ts: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | export function normalizePath(path?: string) { 4 | if (!path) { 5 | return path; 6 | } 7 | 8 | let parts = path.split('/'); 9 | parts = parts.map(part => 10 | part.startsWith(':') ? `{${part.slice(1)}}` : part 11 | ); 12 | return parts.join('/'); 13 | } 14 | -------------------------------------------------------------------------------- /packages/servers/nest-swagger/tsconfig.build.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "exclude": ["node_modules", "test", "src/scripts", "**/*spec.ts"] 4 | } -------------------------------------------------------------------------------- /packages/servers/nest-swagger/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "module": "commonjs", 4 | "declaration": true, 5 | "noImplicitAny": false, 6 | "removeComments": true, 7 | "noLib": false, 8 | "emitDecoratorMetadata": true, 9 | "experimentalDecorators": true, 10 | "target": "es6", 11 | "sourceMap": false, 12 | "outDir": "dist", 13 | "baseUrl": "./src", 14 | "skipLibCheck": true 15 | }, 16 | "include": [ 17 | "src/**/*", 18 | "test/**/*" 19 | ], 20 | "exclude": [ 21 | "node_modules", 22 | "**/*.spec.ts" 23 | ] 24 | } -------------------------------------------------------------------------------- /packages/servers/nest-testing/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/servers/nest-testing/.DS_Store -------------------------------------------------------------------------------- /packages/servers/nest-testing/generated/.gitignore: -------------------------------------------------------------------------------- 1 | wwwroot/*.js 2 | node_modules 3 | typings 4 | dist 5 | -------------------------------------------------------------------------------- /packages/servers/nest-testing/generated/.openapi-generator/VERSION: -------------------------------------------------------------------------------- 1 | 4.2.0 -------------------------------------------------------------------------------- /packages/servers/nest-testing/generated/index.ts: -------------------------------------------------------------------------------- 1 | // tslint:disable 2 | /** 3 | * rest api interface 4 | * 项目标准接口 5 | * 6 | * The version of the OpenAPI document: 0.0.1 7 | * 8 | * 9 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 10 | * https://openapi-generator.tech 11 | * Do not edit the class manually. 12 | */ 13 | 14 | 15 | export * from "./api"; 16 | export * from "./configuration"; 17 | -------------------------------------------------------------------------------- /packages/servers/nest-testing/jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | verbose: true, 3 | globals: { 4 | 'ts-jest': { 5 | tsConfig: 'tsconfig.json' 6 | } 7 | }, 8 | moduleFileExtensions: [ 9 | 'ts', 10 | 'js' 11 | ], 12 | transform: { 13 | '^.+\\.(ts|tsx)$': 'ts-jest' 14 | }, 15 | testMatch: [ 16 | '**/test/**/*.spec.(ts|js)' 17 | ], 18 | testEnvironment: 'node' 19 | }; -------------------------------------------------------------------------------- /packages/servers/nest-testing/test/utils/login.ts: -------------------------------------------------------------------------------- 1 | import { HttpClient } from './../../scripts/client'; 2 | export async function login() { 3 | const loginReq = { 4 | "username": "admin", 5 | "password": "demoPSW", 6 | "type": "account" 7 | }; 8 | const res = await HttpClient.login(loginReq); 9 | return res; 10 | } 11 | -------------------------------------------------------------------------------- /packages/servers/nestx-auth/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/servers/nestx-auth/.DS_Store -------------------------------------------------------------------------------- /packages/servers/nestx-auth/.npmignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/servers/nestx-auth/.npmignore -------------------------------------------------------------------------------- /packages/servers/nestx-auth/index.js: -------------------------------------------------------------------------------- 1 | require('ts-node/register'); 2 | require('./src/main'); -------------------------------------------------------------------------------- /packages/servers/nestx-auth/nodemon.json: -------------------------------------------------------------------------------- 1 | { 2 | "watch": ["./src"], 3 | "ext": "ts", 4 | "ignore": ["./src/**/*.spec.ts"], 5 | "exec": "node ./index", 6 | "env": { 7 | "NODE_ENV": "test" 8 | } 9 | } -------------------------------------------------------------------------------- /packages/servers/nestx-auth/src/app.module.ts: -------------------------------------------------------------------------------- 1 | import { Module } from "@nestjs/common"; 2 | import { AuthModule } from "./auth.module"; 3 | import { MockUserService } from "./mock.user.service"; 4 | @Module({ 5 | imports: [ 6 | AuthModule.registerAsync({ 7 | imports: [], 8 | providers: [ 9 | { 10 | provide: "IUserService", 11 | useClass: MockUserService 12 | } 13 | ] 14 | }) 15 | ] 16 | }) 17 | export class AppModule {} 18 | -------------------------------------------------------------------------------- /packages/servers/nestx-auth/src/constants/index.ts: -------------------------------------------------------------------------------- 1 | export const JWT_SECRET_KEY = "JWT_SECRET_KEY"; 2 | export const JWT_ALGORITHM = "JWT_ALGORITHM"; 3 | export const JWT_EXPIRE_IN = "JWT_EXPIRE_IN"; 4 | -------------------------------------------------------------------------------- /packages/servers/nestx-auth/src/dto/Register.dto.ts: -------------------------------------------------------------------------------- 1 | import { 2 | IsNotEmpty, 3 | IsString, 4 | MinLength, 5 | Length, 6 | IsEmail, 7 | IsOptional 8 | } from "class-validator"; 9 | 10 | export class RegisterReq { 11 | @IsNotEmpty() 12 | @MinLength(5) 13 | @IsString() 14 | username: string; 15 | 16 | @IsNotEmpty() 17 | @MinLength(5) 18 | @IsString() 19 | password: string; 20 | 21 | @IsNotEmpty() 22 | @MinLength(11) 23 | @IsString() 24 | mobile: string; 25 | 26 | @Length(5, 50) 27 | @IsString() 28 | @IsEmail() 29 | email: string; 30 | 31 | name?: string; 32 | 33 | @Length(2, 5) 34 | @IsOptional() 35 | mobilePrefix?: string; 36 | 37 | @Length(6) 38 | @IsNotEmpty() 39 | veryCode: string; 40 | } 41 | -------------------------------------------------------------------------------- /packages/servers/nestx-auth/src/dto/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./Login.dto"; 2 | export * from "./Register.dto"; 3 | -------------------------------------------------------------------------------- /packages/servers/nestx-auth/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./dto"; 2 | export * from "./interfaces"; 3 | export * from "./jwt.strategy"; 4 | export { AuthController } from "./auth.controller"; 5 | export { AuthService } from "./auth.service"; 6 | export { AuthModule } from "./auth.module"; 7 | -------------------------------------------------------------------------------- /packages/servers/nestx-auth/src/interfaces/index.ts: -------------------------------------------------------------------------------- 1 | import { RegisterReq } from "../dto"; 2 | 3 | export interface JwtPayload { 4 | account: string; 5 | } 6 | 7 | export interface AccessToken { 8 | expiresIn: number; 9 | accessToken: string; 10 | } 11 | 12 | export declare class IUserService { 13 | verifyCode: (code: string, mobile: string) => Promise; 14 | register: (payload: RegisterReq) => Promise<{ username: string }>; 15 | sendVeryCode: ( 16 | mobile: string 17 | ) => Promise<{ 18 | ok: boolean; 19 | }>; 20 | findOne: (conditions?: { [key: string]: any }) => Promise; 21 | login: (username: string, password: string) => Promise; 22 | } 23 | -------------------------------------------------------------------------------- /packages/servers/nestx-auth/src/main.ts: -------------------------------------------------------------------------------- 1 | import { NestFactory } from "@nestjs/core"; 2 | import { ValidationPipe } from "@nestjs/common"; 3 | import { AppModule } from "./app.module"; 4 | 5 | async function bootstrap() { 6 | const app = await NestFactory.create(AppModule); 7 | app.setGlobalPrefix("api"); 8 | app.enableCors(); 9 | app.useGlobalPipes( 10 | new ValidationPipe({ 11 | // disableErrorMessages: true, // TODO needs only open at dev; 12 | transform: true, 13 | whitelist: true, 14 | forbidNonWhitelisted: true 15 | }) 16 | ); 17 | await app.listen(5600); 18 | } 19 | bootstrap(); 20 | -------------------------------------------------------------------------------- /packages/servers/nestx-base/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/servers/nestx-base/.DS_Store -------------------------------------------------------------------------------- /packages/servers/nestx-base/.npmignore: -------------------------------------------------------------------------------- 1 | src -------------------------------------------------------------------------------- /packages/servers/nestx-base/index.js: -------------------------------------------------------------------------------- 1 | require('ts-node/register'); 2 | require('./src/main'); -------------------------------------------------------------------------------- /packages/servers/nestx-base/nodemon.json: -------------------------------------------------------------------------------- 1 | { 2 | "watch": ["./src"], 3 | "ext": "ts", 4 | "ignore": ["./src/**/*.spec.ts"], 5 | "exec": "node ./index", 6 | "env": { 7 | "NODE_ENV": "test" 8 | } 9 | } -------------------------------------------------------------------------------- /packages/servers/nestx-base/src/app.module.ts: -------------------------------------------------------------------------------- 1 | import { Module } from "@nestjs/common"; 2 | import { MongooseModule } from "@nestjs/mongoose"; 3 | import { BaseModule } from "./base.module"; 4 | const mongodbUri = "mongodb://localhost/nestx-server-test"; 5 | 6 | @Module({ 7 | imports: [ 8 | MongooseModule.forRoot(mongodbUri, { 9 | useCreateIndex: true, 10 | useNewUrlParser: true 11 | }), 12 | BaseModule 13 | ] 14 | }) 15 | export class AppModule {} 16 | -------------------------------------------------------------------------------- /packages/servers/nestx-base/src/dto/auth.dto.ts: -------------------------------------------------------------------------------- 1 | import { IsString } from 'class-validator'; 2 | 3 | export class ChangePasswordReq { 4 | @IsString() 5 | readonly oldPassword: string; 6 | 7 | @IsString() 8 | newPassword: string; 9 | 10 | @IsString() 11 | readonly confirm: string; 12 | } 13 | -------------------------------------------------------------------------------- /packages/servers/nestx-base/src/dto/common.dto.ts: -------------------------------------------------------------------------------- 1 | import { IsString } from "class-validator"; 2 | 3 | export class KeyValueDto { 4 | @IsString() 5 | label: string; 6 | @IsString() 7 | value: string; 8 | } 9 | -------------------------------------------------------------------------------- /packages/servers/nestx-base/src/dto/index.ts: -------------------------------------------------------------------------------- 1 | export * from './auth.dto'; 2 | export * from './common.dto'; 3 | export * from './dict.dto'; 4 | export * from './group.dto'; 5 | export * from './menu.dto'; 6 | export * from './user.dto'; 7 | export * from './notice.dto'; 8 | export * from './setting.dto'; 9 | export * from './role.dto'; 10 | export * from './appearance.dto'; -------------------------------------------------------------------------------- /packages/servers/nestx-base/src/dto/role.dto.ts: -------------------------------------------------------------------------------- 1 | import { IsString, IsJSON } from 'class-validator'; 2 | 3 | export class CreateRoleReq { 4 | @IsString() 5 | name: string; 6 | @IsString() 7 | description: string; 8 | 9 | @IsString({ each: true }) 10 | permissions: string[]; 11 | } 12 | 13 | export class EditRoleReq { 14 | @IsString() 15 | id: string; 16 | @IsString() 17 | name: string; 18 | @IsString() 19 | description: string; 20 | @IsString({ each: true }) 21 | permissions: string[]; 22 | } 23 | 24 | export class RoleRes { 25 | id: string; 26 | name: string; 27 | description: string; 28 | permissions: string[]; 29 | } 30 | -------------------------------------------------------------------------------- /packages/servers/nestx-base/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./dto"; 2 | export * from "./interfaces"; 3 | export * from "./schemas"; 4 | export * from "./base.module"; 5 | export * from "./controllers"; 6 | -------------------------------------------------------------------------------- /packages/servers/nestx-base/src/interfaces/appearance.interface.ts: -------------------------------------------------------------------------------- 1 | import { Document } from 'mongoose'; 2 | 3 | export interface Appearance { 4 | name: string; 5 | options: any; 6 | data: any; 7 | } 8 | 9 | export type AppearanceModel = Appearance & Document; -------------------------------------------------------------------------------- /packages/servers/nestx-base/src/interfaces/dict.interface.ts: -------------------------------------------------------------------------------- 1 | import { Document } from 'mongoose'; 2 | 3 | export interface Dict { 4 | id: string; 5 | name: string; 6 | category: string; 7 | translate: string; 8 | expand: any; 9 | } 10 | 11 | export type DictModel = Dict & Document; -------------------------------------------------------------------------------- /packages/servers/nestx-base/src/interfaces/group.interface.ts: -------------------------------------------------------------------------------- 1 | import { Document } from 'mongoose'; 2 | 3 | export interface Group { 4 | id: string; // 编号 5 | outid: number; // 外部编号 6 | name: string; // 名称 7 | icon: string; // 图标 8 | parent: string; // 父级分组编号 9 | paths: any[]; // 路径 10 | director: string // 分组 leader 11 | order: number; // 排序 12 | isRegion: boolean; // 是否大区 13 | description: string; // 描述 14 | } 15 | 16 | export type GroupModel = Group & Document; -------------------------------------------------------------------------------- /packages/servers/nestx-base/src/interfaces/index.ts: -------------------------------------------------------------------------------- 1 | export * from './dict.interface'; 2 | export * from './menu.interface'; 3 | export * from './role.interface'; 4 | export * from './setting.interface'; 5 | export * from './log.interface'; 6 | export * from './user.interface'; 7 | export * from './group.interface'; 8 | export * from './notice.interface'; 9 | export * from './verycode.interface'; 10 | export * from './setting.interface'; 11 | export * from './appearance.interface'; -------------------------------------------------------------------------------- /packages/servers/nestx-base/src/interfaces/log.interface.ts: -------------------------------------------------------------------------------- 1 | import { Document } from 'mongoose'; 2 | 3 | export interface Log { 4 | id: string; 5 | name: string; // 日志名称 6 | operator: string; // 操作人id 7 | operatorName: string; // 操作人 8 | ip: string; // 操作人 IP 9 | operation: string; // 操作事件; 10 | result: number; // 操作结果 11 | elapsed: number; // 耗时 12 | comment?: string; // 备注 13 | createdAt?: Date; // 创建日期 14 | } 15 | 16 | export type LogModel = Log & Document; 17 | -------------------------------------------------------------------------------- /packages/servers/nestx-base/src/interfaces/notice.interface.ts: -------------------------------------------------------------------------------- 1 | import { Document } from 'mongoose'; 2 | 3 | export interface Notice { 4 | id: string; 5 | title: string; 6 | description: Date; 7 | type: string; 8 | extra: string; 9 | read: boolean; 10 | } 11 | 12 | export type NoticeModel = Notice & Document; -------------------------------------------------------------------------------- /packages/servers/nestx-base/src/interfaces/profile.interface.ts: -------------------------------------------------------------------------------- 1 | 2 | import { Document } from 'mongoose'; 3 | 4 | export interface Profile { 5 | id: string; 6 | company: string; // 公司名称 7 | siteUrl: string; // 站点URL 8 | address: any; // 地址 9 | } 10 | export type ProfileModel = Profile & Document; -------------------------------------------------------------------------------- /packages/servers/nestx-base/src/interfaces/role.interface.ts: -------------------------------------------------------------------------------- 1 | import { Document } from 'mongoose'; 2 | 3 | export interface Role { 4 | id: string; 5 | name: string; 6 | role: string; 7 | description: string; 8 | permissions: string[]; 9 | } 10 | 11 | export type RoleModel = Role & Document; -------------------------------------------------------------------------------- /packages/servers/nestx-base/src/interfaces/setting.interface.ts: -------------------------------------------------------------------------------- 1 | import { Document } from 'mongoose'; 2 | 3 | export interface Setting { 4 | id: string; 5 | name: string; // 设置项目组 6 | key: string; // 设置项键名 7 | value: any; // 设置值 8 | description: string; // 设置描述 9 | } 10 | 11 | export type SettingModel = Setting & Document; -------------------------------------------------------------------------------- /packages/servers/nestx-base/src/interfaces/user.interface.ts: -------------------------------------------------------------------------------- 1 | import { Document } from 'mongoose'; 2 | 3 | export interface User { 4 | id: string; 5 | username: string; 6 | password?: string; 7 | name: string; // 姓名 8 | keyword?: string; 9 | avatar: string; // 照片 10 | type: string; // 类型 11 | groups: string[]; 12 | roles: string[]; 13 | email: string; // 邮箱 14 | mobile: string; // 手机号码 15 | profile?: any; 16 | isDisable: boolean; // 是否禁用 17 | isAdmin: boolean; // 是否管理员 18 | isApproved: boolean; // 是否审核 19 | secret: string; // 密保 20 | expired: number; // use timestamp 21 | comparePassword: (password: string, cb: any) => void; 22 | } 23 | 24 | export type UserModel = User & Document; -------------------------------------------------------------------------------- /packages/servers/nestx-base/src/interfaces/verycode.interface.ts: -------------------------------------------------------------------------------- 1 | import { Document } from 'mongoose'; 2 | 3 | export interface VeryCode { 4 | id: string; 5 | lastSent: number; 6 | mobile: string; 7 | code: string; 8 | } 9 | 10 | export type VeryCodeModel = VeryCode & Document; -------------------------------------------------------------------------------- /packages/servers/nestx-base/src/main.ts: -------------------------------------------------------------------------------- 1 | import { NestFactory } from '@nestjs/core'; 2 | import { ValidationPipe } from '@nestjs/common'; 3 | import { AppModule } from './app.module'; 4 | 5 | async function bootstrap() { 6 | const app = await NestFactory.create(AppModule); 7 | app.setGlobalPrefix('api'); 8 | app.enableCors(); 9 | app.useGlobalPipes( 10 | new ValidationPipe({ 11 | // disableErrorMessages: true, // TODO needs only open at dev; 12 | transform: true, 13 | whitelist: true, 14 | forbidNonWhitelisted: true, 15 | }), 16 | ); 17 | await app.listen(5600); 18 | } 19 | bootstrap(); 20 | -------------------------------------------------------------------------------- /packages/servers/nestx-base/src/schemas/appearance.schema.ts: -------------------------------------------------------------------------------- 1 | import { Schema, SchemaTypes as t } from "mongoose"; 2 | import { utils } from "nestx-common"; 3 | const { transform } = utils; 4 | 5 | export const AppearanceSchema = new Schema( 6 | { 7 | name: { type: t.String }, 8 | options: { type: t.Mixed }, 9 | data: { type: t.Mixed } 10 | }, 11 | { 12 | timestamps: true, 13 | usePushEach: true 14 | } 15 | ); 16 | 17 | AppearanceSchema.set("toJSON", { 18 | transform 19 | }); 20 | -------------------------------------------------------------------------------- /packages/servers/nestx-base/src/schemas/dict.schema.ts: -------------------------------------------------------------------------------- 1 | import { Schema, SchemaTypes as t } from "mongoose"; 2 | import { utils } from "nestx-common"; 3 | const { transform } = utils; 4 | export const DictSchema = new Schema( 5 | { 6 | category: { type: t.String }, 7 | name: { type: t.String }, 8 | translate: { type: t.String }, 9 | expand: { type: t.Mixed } 10 | }, 11 | { 12 | timestamps: true, 13 | usePushEach: true 14 | } 15 | ); 16 | 17 | DictSchema.set("toJSON", { 18 | transform 19 | }); 20 | -------------------------------------------------------------------------------- /packages/servers/nestx-base/src/schemas/group.schema.ts: -------------------------------------------------------------------------------- 1 | import { Schema, SchemaTypes as t } from "mongoose"; 2 | import { utils } from "nestx-common"; 3 | const { transform } = utils; 4 | 5 | export const GroupSchema = new Schema( 6 | { 7 | outid: { type: t.Number }, 8 | name: { type: t.String }, 9 | icon: { type: t.String }, 10 | isRegion: { type: t.Boolean }, 11 | order: { type: t.Number }, 12 | parent: { type: t.ObjectId, ref: "Group" }, 13 | paths: [{ type: t.ObjectId, ref: "Group" }], 14 | director: { type: t.ObjectId, ref: "User" }, 15 | description: { type: t.String } 16 | }, 17 | { timestamps: true } 18 | ); 19 | 20 | GroupSchema.set("toJSON", { 21 | transform 22 | }); 23 | -------------------------------------------------------------------------------- /packages/servers/nestx-base/src/schemas/index.ts: -------------------------------------------------------------------------------- 1 | 2 | export { RoleSchema } from './role.schema'; 3 | export { LogSchema } from './log.schema'; 4 | export { SettingSchema } from './setting.schema'; 5 | export { DictSchema } from './dict.schema'; 6 | export { MenuSchema } from './menu.schema'; 7 | export { GroupSchema } from './group.schema'; 8 | export { UserSchema } from './user.schema'; 9 | export { NoticeSchema } from './notice.schema'; 10 | export { VeryCodeSchema } from './verycode.schema'; 11 | export { ProfileSchema } from './profile.schema'; 12 | export { AppearanceSchema } from './appearance.schema'; -------------------------------------------------------------------------------- /packages/servers/nestx-base/src/schemas/notice.schema.ts: -------------------------------------------------------------------------------- 1 | import { Schema, SchemaTypes as t, SchemaOptions } from "mongoose"; 2 | import { utils } from "nestx-common"; 3 | const { transform } = utils; 4 | 5 | const option: SchemaOptions = {}; 6 | option.timestamps = true; 7 | 8 | export const NoticeSchema = new Schema( 9 | { 10 | title: { type: t.String }, 11 | type: { type: t.String }, 12 | extra: { type: t.String }, 13 | status: { type: t.String }, 14 | read: { type: t.Boolean } 15 | }, 16 | option 17 | ); 18 | 19 | NoticeSchema.set("toJSON", { 20 | transform 21 | }); 22 | -------------------------------------------------------------------------------- /packages/servers/nestx-base/src/schemas/profile.schema.ts: -------------------------------------------------------------------------------- 1 | import { Schema, SchemaTypes as t, SchemaOptions, model } from "mongoose"; 2 | import { utils } from "nestx-common"; 3 | const { transform } = utils; 4 | 5 | export const ProfileSchema = new Schema( 6 | { 7 | company: { type: t.String }, 8 | siteUrl: { type: t.String }, 9 | address: { type: t.String } 10 | }, 11 | { timestamps: true } 12 | ); 13 | 14 | ProfileSchema.set("toJSON", { 15 | transform 16 | }); 17 | -------------------------------------------------------------------------------- /packages/servers/nestx-base/src/schemas/role.schema.ts: -------------------------------------------------------------------------------- 1 | import { Schema, SchemaTypes as t, SchemaOptions } from "mongoose"; 2 | import { utils } from "nestx-common"; 3 | const { transform } = utils; 4 | 5 | const option: SchemaOptions = {}; 6 | option.timestamps = true; 7 | 8 | export const RoleSchema = new Schema( 9 | { 10 | name: { type: t.String }, 11 | description: { type: t.String }, 12 | permissions: [{ type: t.ObjectId, ref: "Menu" }] 13 | }, 14 | option 15 | ); 16 | 17 | RoleSchema.set("toJSON", { 18 | transform 19 | }); 20 | -------------------------------------------------------------------------------- /packages/servers/nestx-base/src/schemas/setting.schema.ts: -------------------------------------------------------------------------------- 1 | import { Schema, SchemaTypes as t } from 'mongoose'; 2 | import { utils } from "nestx-common"; 3 | const { transform } = utils; 4 | 5 | export const SettingSchema = new Schema( 6 | { 7 | id: { 8 | type: t.String, 9 | }, 10 | name: { 11 | type: t.String, 12 | }, 13 | key: { 14 | type: t.String, 15 | }, 16 | value: { 17 | type: t.Mixed, 18 | }, 19 | description: { 20 | type: t.String, 21 | }, 22 | }, 23 | { 24 | timestamps: true, 25 | usePushEach: true, 26 | }, 27 | ); 28 | 29 | SettingSchema.set('toJSON', { 30 | transform, 31 | }); 32 | -------------------------------------------------------------------------------- /packages/servers/nestx-base/src/schemas/verycode.schema.ts: -------------------------------------------------------------------------------- 1 | import { Schema, SchemaTypes as t } from "mongoose"; 2 | import { utils } from "nestx-common"; 3 | const { transform } = utils; 4 | 5 | export const VeryCodeSchema = new Schema( 6 | { 7 | mobile: { 8 | type: t.String 9 | }, 10 | lastSent: { 11 | type: t.Decimal128, 12 | default: Date.now 13 | }, 14 | code: { 15 | type: t.String 16 | } 17 | }, 18 | { 19 | timestamps: true, 20 | usePushEach: true 21 | } 22 | ); 23 | 24 | VeryCodeSchema.set("toJSON", { 25 | transform 26 | }); 27 | -------------------------------------------------------------------------------- /packages/servers/nestx-cms/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/servers/nestx-cms/.DS_Store -------------------------------------------------------------------------------- /packages/servers/nestx-cms/.npmignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/servers/nestx-cms/.npmignore -------------------------------------------------------------------------------- /packages/servers/nestx-cms/index.js: -------------------------------------------------------------------------------- 1 | require('ts-node/register'); 2 | require('./src/main'); -------------------------------------------------------------------------------- /packages/servers/nestx-cms/nodemon.json: -------------------------------------------------------------------------------- 1 | { 2 | "watch": ["./src"], 3 | "ext": "ts", 4 | "ignore": ["./src/**/*.spec.ts"], 5 | "exec": "node ./index", 6 | "env": { 7 | "NODE_ENV": "test" 8 | } 9 | } -------------------------------------------------------------------------------- /packages/servers/nestx-cms/src/app.module.ts: -------------------------------------------------------------------------------- 1 | import { Module } from "@nestjs/common"; 2 | import { AuthModule } from "nestx-auth"; 3 | import { MockUserService } from "./mock.user.service"; 4 | @Module({ 5 | imports: [ 6 | AuthModule.registerAsync({ 7 | providers: [ 8 | { 9 | provide: "IUserService", 10 | useClass: MockUserService 11 | } 12 | ] 13 | }) 14 | ] 15 | }) 16 | export class AppModule {} 17 | -------------------------------------------------------------------------------- /packages/servers/nestx-cms/src/dto/comment.dto.ts: -------------------------------------------------------------------------------- 1 | export class CreateCommentDto { 2 | 3 | } 4 | 5 | export class EditCommentDto { 6 | id: string; 7 | } 8 | 9 | export class CommentResponse { 10 | 11 | } 12 | 13 | export declare interface PaginateComment { 14 | error?: Error; 15 | list: CommentResponse[]; 16 | total: number; 17 | } -------------------------------------------------------------------------------- /packages/servers/nestx-cms/src/dto/index.ts: -------------------------------------------------------------------------------- 1 | export * from './article.dto'; 2 | export * from './category.dto'; 3 | export * from './comment.dto'; 4 | export * from './custom.dto'; 5 | export * from './media.dto'; 6 | export * from './page.dto'; 7 | export * from './photo.dto'; 8 | export * from './widget.dto'; -------------------------------------------------------------------------------- /packages/servers/nestx-cms/src/dto/photo.dto.ts: -------------------------------------------------------------------------------- 1 | export class CreatePhotoDto { 2 | name: string; 3 | caption: string; 4 | description: string; 5 | ext: string; 6 | url: string; 7 | uri: string; 8 | } 9 | 10 | export class EditPhotoDto { 11 | id: string; 12 | name: string; 13 | caption: string; 14 | description: string; 15 | ext: string; 16 | url: string; 17 | uri: string; 18 | } 19 | 20 | export class PhotoRes { 21 | id: string; 22 | name: string; 23 | caption: string; 24 | description: string; 25 | ext: string; 26 | url: string; 27 | uri: string; 28 | } 29 | -------------------------------------------------------------------------------- /packages/servers/nestx-cms/src/dto/widget.dto.ts: -------------------------------------------------------------------------------- 1 | export class CreateWidgetDto { 2 | name: string; 3 | title: string; 4 | params: any; 5 | type: string; 6 | } 7 | 8 | export class EditWidgetDto { 9 | id: string; 10 | name: string; 11 | title: string; 12 | params: any; 13 | type: string; 14 | } 15 | 16 | export class WidgetRes { 17 | id: string; 18 | name: string; 19 | title: string; 20 | params: any; 21 | type: string; 22 | } 23 | 24 | export const WidgetResponseFields = [ 25 | 'id', 26 | 'name', 27 | 'title', 28 | 'params', 29 | 'type', 30 | ]; 31 | 32 | export declare interface PaginateWidget { 33 | error?: Error; 34 | list: WidgetRes[]; 35 | total: number; 36 | } -------------------------------------------------------------------------------- /packages/servers/nestx-cms/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./cms.module"; 2 | export * from "./controllers"; 3 | export * from "./interfaces"; 4 | export * from "./dto"; 5 | export * from "./schemas"; 6 | -------------------------------------------------------------------------------- /packages/servers/nestx-cms/src/interfaces/article.interface.ts: -------------------------------------------------------------------------------- 1 | 2 | import { Document } from 'mongoose'; 3 | 4 | export interface Article { 5 | id: string; 6 | name: string; 7 | title: string; 8 | picture: string; 9 | keyword: string; 10 | category: string; 11 | description: string; 12 | author: string; 13 | sort: number; 14 | disable: boolean; 15 | meta: string; 16 | content: string; 17 | template: string; 18 | } 19 | 20 | export type ArticleModel = Article & Document; -------------------------------------------------------------------------------- /packages/servers/nestx-cms/src/interfaces/category.interface.ts: -------------------------------------------------------------------------------- 1 | import { Document } from 'mongoose'; 2 | 3 | export interface Category { 4 | id: string; 5 | name: string, 6 | slug: string, 7 | order: number, 8 | parent: string, 9 | paths: string[], 10 | description: string 11 | } 12 | 13 | export type CategoryModel = Category & Document; -------------------------------------------------------------------------------- /packages/servers/nestx-cms/src/interfaces/comment.interface.ts: -------------------------------------------------------------------------------- 1 | import { Document } from 'mongoose'; 2 | 3 | export interface Comment { 4 | name: string; 5 | article: string; 6 | text: string; 7 | } 8 | 9 | export type CommentModel = Comment & Document; -------------------------------------------------------------------------------- /packages/servers/nestx-cms/src/interfaces/content.interface.ts: -------------------------------------------------------------------------------- 1 | import { Document } from 'mongoose'; 2 | 3 | export interface Content { 4 | text: string; 5 | } 6 | 7 | export type ContentModel = Content & Document; -------------------------------------------------------------------------------- /packages/servers/nestx-cms/src/interfaces/custom.interface.ts: -------------------------------------------------------------------------------- 1 | import { Document } from 'mongoose'; 2 | 3 | export interface Custom { 4 | id: string; 5 | name: string; 6 | title: string; 7 | keyword: string; 8 | category: string; 9 | description: string; 10 | author: string; 11 | sort: number; 12 | disable: boolean; 13 | meta: string; 14 | content: string; 15 | template: string; 16 | type: string; 17 | [key: string]: any; 18 | } 19 | 20 | export type CustomModel = Custom & Document; -------------------------------------------------------------------------------- /packages/servers/nestx-cms/src/interfaces/index.ts: -------------------------------------------------------------------------------- 1 | export * from './article.interface'; 2 | export * from './category.interface'; 3 | export * from './comment.interface'; 4 | export * from './content.interface'; 5 | export * from './custom.interface'; 6 | export * from './media.interface'; 7 | export * from './page.interface'; 8 | export * from './photo.interface'; 9 | export * from './widget.interface'; -------------------------------------------------------------------------------- /packages/servers/nestx-cms/src/interfaces/media.interface.ts: -------------------------------------------------------------------------------- 1 | import { Document } from 'mongoose'; 2 | 3 | export interface Media { 4 | id: string; 5 | name: string; // 名称 6 | caption: string; // 标题 7 | description: string; // 详细描述 8 | ext: any; // 扩展信息 如: 文件格式, 大小等 9 | url: string; // 外部访问地址 10 | uri: string; // 物理存储地址 11 | } 12 | 13 | export type MediaModel = Media & Document; -------------------------------------------------------------------------------- /packages/servers/nestx-cms/src/interfaces/page.interface.ts: -------------------------------------------------------------------------------- 1 | import { Document } from 'mongoose'; 2 | 3 | export interface Page { 4 | id: string; 5 | name: string; // 页面名称 6 | title: string; // 页面标题 7 | keyword: string; // 关键词 8 | description: string; // 描述 9 | sort: number; // 排序 10 | disable: boolean; // 是否禁用 11 | meta: string; // 扩展元信息 12 | publish: string; // 发布时间 13 | content: string; // 页面内容 14 | template: string; // 页面模版 15 | } 16 | 17 | export type PageModel = Page & Document; -------------------------------------------------------------------------------- /packages/servers/nestx-cms/src/interfaces/photo.interface.ts: -------------------------------------------------------------------------------- 1 | import { Document } from 'mongoose'; 2 | 3 | export interface Photo { 4 | id: string; 5 | name: string; 6 | caption: string; 7 | description: string; 8 | ext: any; 9 | url: string; 10 | uri: string; 11 | } 12 | 13 | export type PhotoModel = Photo & Document; -------------------------------------------------------------------------------- /packages/servers/nestx-cms/src/interfaces/widget.interface.ts: -------------------------------------------------------------------------------- 1 | import { Document } from 'mongoose'; 2 | 3 | export interface Widget { 4 | id: string; 5 | name: string; 6 | title: string; 7 | type: string; 8 | params: any; 9 | } 10 | 11 | export type WidgetModel = Widget & Document; -------------------------------------------------------------------------------- /packages/servers/nestx-cms/src/main.ts: -------------------------------------------------------------------------------- 1 | import { NestFactory } from '@nestjs/core'; 2 | import { ValidationPipe } from '@nestjs/common'; 3 | import { AppModule } from './app.module'; 4 | 5 | async function bootstrap() { 6 | const app = await NestFactory.create(AppModule); 7 | app.setGlobalPrefix('api'); 8 | app.enableCors(); 9 | app.useGlobalPipes( 10 | new ValidationPipe({ 11 | // disableErrorMessages: true, // TODO needs only open at dev; 12 | transform: true, 13 | whitelist: true, 14 | forbidNonWhitelisted: true, 15 | }), 16 | ); 17 | await app.listen(5600); 18 | } 19 | bootstrap(); 20 | -------------------------------------------------------------------------------- /packages/servers/nestx-cms/src/mock.user.service.ts: -------------------------------------------------------------------------------- 1 | import { IUserService, RegisterReq } from "nestx-auth"; 2 | import { Result } from "nestx-common"; 3 | 4 | export class MockUserService implements IUserService { 5 | async verifyCode(code: string, mobile: string): Promise { 6 | return true; 7 | } 8 | 9 | async register(payload: RegisterReq) { 10 | return { username: "string" }; 11 | } 12 | 13 | async sendVeryCode(mobile: string): Promise { 14 | return { 15 | ok: true 16 | }; 17 | } 18 | 19 | async findOne(conditions?: { [key: string]: any }) { 20 | return true; 21 | } 22 | 23 | async login() { 24 | return { 25 | username: "hi" 26 | }; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /packages/servers/nestx-cms/src/schemas/category.schema.ts: -------------------------------------------------------------------------------- 1 | import { Schema, SchemaTypes as t, SchemaOptions } from "mongoose"; 2 | import { utils } from "nestx-common"; 3 | const { transform } = utils; 4 | 5 | const option: SchemaOptions = {}; 6 | option.timestamps = true; 7 | 8 | export const CategorySchema = new Schema( 9 | { 10 | name: { type: t.String }, 11 | slug: { type: t.String }, 12 | order: { type: t.Number, default: 100 }, 13 | parent: { type: t.ObjectId, ref: "Category" }, 14 | paths: [{ type: t.ObjectId, ref: "Category" }], 15 | description: { type: t.String } 16 | }, 17 | option 18 | ); 19 | 20 | CategorySchema.set("toJSON", { 21 | transform 22 | }); 23 | -------------------------------------------------------------------------------- /packages/servers/nestx-cms/src/schemas/comment.schema.ts: -------------------------------------------------------------------------------- 1 | import { Schema, SchemaTypes as t, SchemaOptions } from "mongoose"; 2 | import { utils } from "nestx-common"; 3 | const { transform } = utils; 4 | 5 | const option: SchemaOptions = {}; 6 | option.timestamps = true; 7 | 8 | export const CommentSchema = new Schema( 9 | { 10 | name: t.String, 11 | article: { ref: "Article", type: t.ObjectId }, 12 | text: t.String 13 | }, 14 | option 15 | ); 16 | 17 | CommentSchema.set("toJSON", { 18 | transform 19 | }); 20 | -------------------------------------------------------------------------------- /packages/servers/nestx-cms/src/schemas/content.schema.ts: -------------------------------------------------------------------------------- 1 | import { Schema, SchemaTypes as t, SchemaOptions, model } from 'mongoose'; 2 | 3 | export const ContentSchema = new Schema( 4 | { 5 | text: t.String, 6 | }, 7 | { timestamps: true }, 8 | ); 9 | -------------------------------------------------------------------------------- /packages/servers/nestx-cms/src/schemas/index.ts: -------------------------------------------------------------------------------- 1 | export * from './article.schema'; 2 | export * from './category.schema'; 3 | export * from './comment.schema'; 4 | export * from './media.schema'; 5 | export * from './page.schema'; 6 | export * from './photo.schema'; 7 | export * from './content.schema'; 8 | export * from './custom.schema'; 9 | -------------------------------------------------------------------------------- /packages/servers/nestx-cms/src/schemas/media.schema.ts: -------------------------------------------------------------------------------- 1 | import { Schema, SchemaTypes as t, SchemaOptions } from "mongoose"; 2 | import { utils } from "nestx-common"; 3 | const { transform } = utils; 4 | 5 | const option: SchemaOptions = {}; 6 | option.timestamps = true; 7 | 8 | export const MediaSchema = new Schema( 9 | { 10 | name: t.String, 11 | caption: t.String, 12 | description: t.String, 13 | ext: t.Mixed, 14 | url: t.String, 15 | uri: t.String 16 | }, 17 | option 18 | ); 19 | 20 | MediaSchema.set("toJSON", { 21 | transform 22 | }); 23 | -------------------------------------------------------------------------------- /packages/servers/nestx-cms/src/schemas/photo.schema.ts: -------------------------------------------------------------------------------- 1 | import { Schema, SchemaTypes as t, SchemaOptions } from "mongoose"; 2 | import { utils } from "nestx-common"; 3 | const { transform } = utils; 4 | 5 | const option: SchemaOptions = {}; 6 | option.timestamps = true; 7 | 8 | export const PhotoSchema = new Schema( 9 | { 10 | name: { 11 | type: t.String 12 | } 13 | }, 14 | option 15 | ); 16 | PhotoSchema.set("toJSON", { 17 | transform 18 | }); 19 | -------------------------------------------------------------------------------- /packages/servers/nestx-cms/src/schemas/widget.schema.ts: -------------------------------------------------------------------------------- 1 | import { Schema, SchemaTypes as t, SchemaOptions } from "mongoose"; 2 | import { utils } from "nestx-common"; 3 | const { transform } = utils; 4 | 5 | const option: SchemaOptions = {}; 6 | option.timestamps = true; 7 | 8 | export const WidgetSchema = new Schema( 9 | { 10 | name: { 11 | type: t.String 12 | } 13 | }, 14 | option 15 | ); 16 | WidgetSchema.set("toJSON", { 17 | transform 18 | }); 19 | -------------------------------------------------------------------------------- /packages/servers/nestx-common/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/servers/nestx-common/.DS_Store -------------------------------------------------------------------------------- /packages/servers/nestx-common/.npmignore: -------------------------------------------------------------------------------- 1 | src -------------------------------------------------------------------------------- /packages/servers/nestx-common/nodemon.json: -------------------------------------------------------------------------------- 1 | { 2 | "watch": ["./src"], 3 | "ext": "ts", 4 | "ignore": ["./src/**/*.spec.ts"], 5 | "exec": "node ./index", 6 | "env": { 7 | "NODE_ENV": "test" 8 | } 9 | } -------------------------------------------------------------------------------- /packages/servers/nestx-common/src/constants/cache.constant.ts: -------------------------------------------------------------------------------- 1 | export const CACHE = { 2 | CACHE_PREFIX: '__nestx_cache_', 3 | }; 4 | -------------------------------------------------------------------------------- /packages/servers/nestx-common/src/constants/index.ts: -------------------------------------------------------------------------------- 1 | export * from './cache.constant'; 2 | export * from './text.constant'; 3 | export * from './meta.constant'; 4 | -------------------------------------------------------------------------------- /packages/servers/nestx-common/src/constants/meta.constant.ts: -------------------------------------------------------------------------------- 1 | import * as constants from '@nestjs/common/constants'; 2 | import { CACHE_KEY_METADATA } from '@nestjs/common/cache/cache.constants'; 3 | 4 | export const META = { 5 | HTTP_ERROR_CODE: '__customHttpErrorCode__', 6 | HTTP_SUCCESS_CODE: constants.HTTP_CODE_METADATA, 7 | HTTP_MESSAGE: '__customHttpMessage__', 8 | HTTP_ERROR_MESSAGE: '__customHttpErrorMessage__', 9 | HTTP_SUCCESS_MESSAGE: '__customHttpSuccessMessage__', 10 | HTTP_RES_TRANSFORM_PAGINATE: '__customHttpResTransformPaginate__', 11 | HTTP_CACHE_KEY_METADATA: CACHE_KEY_METADATA, 12 | HTTP_CACHE_TTL_METADATA: '__customHttpCacheTTL__', 13 | }; 14 | -------------------------------------------------------------------------------- /packages/servers/nestx-common/src/decorators/index.ts: -------------------------------------------------------------------------------- 1 | export * from './permission.decorator'; 2 | export * from './roles.decorator'; 3 | -------------------------------------------------------------------------------- /packages/servers/nestx-common/src/decorators/permission.decorator.ts: -------------------------------------------------------------------------------- 1 | import { SetMetadata } from '@nestjs/common'; 2 | 3 | export interface Options { 4 | resource?: string; 5 | action?: 'create' | 'read' | 'update' | 'delete'; 6 | possession?: 'own' | 'any'; 7 | } 8 | 9 | export const Permission = (...items: Options[]) => 10 | SetMetadata('permissions', items); 11 | -------------------------------------------------------------------------------- /packages/servers/nestx-common/src/decorators/roles.decorator.ts: -------------------------------------------------------------------------------- 1 | import { SetMetadata } from '@nestjs/common'; 2 | 3 | export const Roles = (...roles: string[]) => SetMetadata('roles', roles); 4 | -------------------------------------------------------------------------------- /packages/servers/nestx-common/src/exceptions/custom.exception.ts: -------------------------------------------------------------------------------- 1 | import { HttpException, HttpStatus } from '@nestjs/common'; 2 | 3 | type Options = 4 | | { 5 | message: string; 6 | error?: any; 7 | } 8 | | string; 9 | export class CustomException extends HttpException { 10 | constructor(options: Options, statusCode?: HttpStatus) { 11 | super(options, statusCode || HttpStatus.INTERNAL_SERVER_ERROR); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /packages/servers/nestx-common/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./decorators"; 2 | export * from "./filters/http-exception.filter"; 3 | export * from "./guards/roles.guard"; 4 | export * from "./interceptors"; 5 | export * from "./interfaces"; 6 | export * from "./middlewares/logger.middleware"; 7 | export * from "./pipes"; 8 | export * from "./services"; 9 | export * from "./types"; 10 | export * from "./exceptions/custom.exception"; 11 | export * from "./utils"; 12 | -------------------------------------------------------------------------------- /packages/servers/nestx-common/src/interceptors/index.ts: -------------------------------------------------------------------------------- 1 | export * from './exception.interceptor'; 2 | export * from './logging.interceptor'; 3 | export * from './timeout.interceptor'; 4 | export * from './transform.interceptor'; 5 | 6 | -------------------------------------------------------------------------------- /packages/servers/nestx-common/src/interceptors/timeout.interceptor.ts: -------------------------------------------------------------------------------- 1 | import { 2 | Injectable, 3 | NestInterceptor, 4 | ExecutionContext, 5 | CallHandler 6 | } from "@nestjs/common"; 7 | import { timeout } from "rxjs/operators"; 8 | import { Observable } from "rxjs"; 9 | 10 | @Injectable() 11 | export class TimeoutInterceptor implements NestInterceptor { 12 | intercept(context: ExecutionContext, next: CallHandler): Observable { 13 | return next.handle().pipe(timeout(5000)); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /packages/servers/nestx-common/src/interceptors/transform.interceptor.ts: -------------------------------------------------------------------------------- 1 | import { 2 | Injectable, 3 | NestInterceptor, 4 | ExecutionContext, 5 | CallHandler 6 | } from "@nestjs/common"; 7 | import { map } from "rxjs/operators"; 8 | import { Observable } from "rxjs"; 9 | 10 | export interface Response { 11 | data: T; 12 | } 13 | 14 | @Injectable() 15 | export class TransformInterceptor 16 | implements NestInterceptor> { 17 | intercept(context: ExecutionContext, next: CallHandler): Observable { 18 | return next.handle().pipe(map(data => ({ data }))); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /packages/servers/nestx-common/src/interfaces/http.interface.ts: -------------------------------------------------------------------------------- 1 | export enum HttpStatusTypes { 2 | Error = 'error', 3 | Success = 'success', 4 | } 5 | 6 | export type ErrorMessage = string; 7 | export type TExceptionOption = 8 | | ErrorMessage 9 | | { 10 | message: ErrorMessage; 11 | error?: any; 12 | }; 13 | 14 | export interface IHttpResponseBase { 15 | status: HttpStatusTypes; 16 | message: ErrorMessage; 17 | } 18 | 19 | export type THttpErrorResponse = IHttpResponseBase & { 20 | error: any; 21 | debug?: string; 22 | }; 23 | -------------------------------------------------------------------------------- /packages/servers/nestx-common/src/interfaces/index.ts: -------------------------------------------------------------------------------- 1 | export * from './types'; 2 | export * from './http.interface'; 3 | -------------------------------------------------------------------------------- /packages/servers/nestx-common/src/middlewares/logger.middleware.ts: -------------------------------------------------------------------------------- 1 | 2 | import { Injectable, NestMiddleware } from '@nestjs/common'; 3 | 4 | @Injectable() 5 | export class LoggerMiddleware implements NestMiddleware { 6 | use(req: any, res: any, next: () => void) { 7 | // console.log(`[${context}] Request...`); 8 | next(); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /packages/servers/nestx-common/src/pipes/index.ts: -------------------------------------------------------------------------------- 1 | export * from './NullableParseInt.pipe'; 2 | export * from './validation.pipe'; -------------------------------------------------------------------------------- /packages/servers/nestx-common/src/services/index.ts: -------------------------------------------------------------------------------- 1 | export * from './controller.service'; 2 | export * from './repository.service'; 3 | export * from './mongoose.service'; 4 | -------------------------------------------------------------------------------- /packages/servers/nestx-common/src/types/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/servers/nestx-common/src/types/.DS_Store -------------------------------------------------------------------------------- /packages/servers/nestx-common/src/types/data.types.ts: -------------------------------------------------------------------------------- 1 | export interface KeyValue { 2 | label: string; 3 | value: string; 4 | } 5 | export class SelectorItem { 6 | id: string; 7 | name: string; 8 | desc: string; 9 | } 10 | -------------------------------------------------------------------------------- /packages/servers/nestx-common/src/types/index.ts: -------------------------------------------------------------------------------- 1 | export * from './appearance'; 2 | export * from './data.types'; 3 | export * from './schema.types'; 4 | -------------------------------------------------------------------------------- /packages/servers/nestx-common/src/utils/index.ts: -------------------------------------------------------------------------------- 1 | import { ObjectID } from "typeorm"; 2 | 3 | function transform( 4 | _doc: any, 5 | ret: { 6 | [key: string]: any; 7 | _id: ObjectID; 8 | __v: string; 9 | }, 10 | _options: any 11 | ) { 12 | ret.id = ret._id; 13 | delete ret._id; 14 | delete ret.__v; 15 | } 16 | 17 | function strip(obj: { [k: string]: any }) { 18 | Object.keys(obj).forEach(key => 19 | obj[key] === undefined ? delete obj[key] : "" 20 | ); 21 | return Object.assign({}, obj); 22 | } 23 | 24 | export const utils = { 25 | transform, 26 | strip 27 | }; 28 | -------------------------------------------------------------------------------- /packages/servers/nestx-config/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vellengs/nestx/a2a779e251571ac5233aee0d1dd2f52d227b8380/packages/servers/nestx-config/.DS_Store -------------------------------------------------------------------------------- /packages/servers/nestx-config/.npmignore: -------------------------------------------------------------------------------- 1 | src -------------------------------------------------------------------------------- /packages/servers/nestx-config/nodemon.json: -------------------------------------------------------------------------------- 1 | { 2 | "watch": ["./src"], 3 | "ext": "ts", 4 | "ignore": ["./src/**/*.spec.ts"], 5 | "exec": "node ./index", 6 | "env": { 7 | "NODE_ENV": "test" 8 | } 9 | } -------------------------------------------------------------------------------- /packages/servers/nestx-config/src/config.module.ts: -------------------------------------------------------------------------------- 1 | import { Module } from '@nestjs/common'; 2 | import { ConfigService } from './config.service'; 3 | 4 | @Module({ 5 | providers: [ 6 | { 7 | provide: ConfigService, 8 | useValue: new ConfigService('.env'), 9 | }, 10 | ], 11 | exports: [ConfigService], 12 | }) 13 | export class ConfigModule {} -------------------------------------------------------------------------------- /packages/servers/nestx-config/src/config.service.ts: -------------------------------------------------------------------------------- 1 | import * as dotenv from 'dotenv'; 2 | import * as fs from 'fs'; 3 | 4 | export class ConfigService { 5 | private readonly envConfig: { [key: string]: string }; 6 | 7 | constructor(filePath: string) { 8 | this.envConfig = dotenv.parse(fs.readFileSync(filePath)); 9 | } 10 | 11 | get(key: string): string { 12 | return this.envConfig[key]; 13 | } 14 | } -------------------------------------------------------------------------------- /packages/servers/nestx-config/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./config.module"; 2 | export * from "./config.service"; 3 | export * from "./interfaces"; 4 | -------------------------------------------------------------------------------- /packages/servers/nestx-config/src/interfaces/index.ts: -------------------------------------------------------------------------------- 1 | export class KeyValue { 2 | label: string; 3 | value: string; 4 | } 5 | 6 | export class Result { 7 | ok: boolean; 8 | message?: string; 9 | } 10 | -------------------------------------------------------------------------------- /packages/spring/.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | openapi-spring 4 | 5 | 6 | 7 | 8 | 9 | org.eclipse.m2e.core.maven2Builder 10 | 11 | 12 | 13 | 14 | 15 | org.eclipse.m2e.core.maven2Nature 16 | 17 | 18 | --------------------------------------------------------------------------------