├── .browserslistrc
├── .circleci
└── config.yml
├── .editorconfig
├── .env.development
├── .env.production
├── .env.pserve
├── .env.staging
├── .eslintignore
├── .eslintrc.js
├── .github
├── CODE_OF_CONDUCT.md
├── COMMIT_CONVENTION.md
├── CONTRIBUTING.md
├── ISSUE_TEMPLATE.md
├── PULL_REQUEST_TEMPLATE.md
└── workflows
│ └── deploy.yml
├── .gitignore
├── LICENSE
├── README-zh.md
├── README.md
├── babel.config.js
├── cypress.json
├── demo
└── dashboard.png
├── dos
├── koa开发遇到问题与解决.doc
├── ttf字蛛
│ ├── README.md
│ ├── cmd执行.txt
│ └── index.html
├── 前端开发遇到的问题.doc
├── 前端遇到问题及解决.doc
└── 本系统技术点.doc
├── jest.config.js
├── mock
├── api.ts
├── articles.ts
├── mock-server.ts
├── role
│ ├── index.ts
│ └── routes.ts
├── security.ts
├── swagger.yml
├── transactions.ts
├── tsconfig.json
└── users.ts
├── package-lock.json
├── package.json
├── postcss.config.js
├── public
├── favicon.ico
├── img
│ └── icons
│ │ ├── android-chrome-192x192.png
│ │ ├── android-chrome-512x512.png
│ │ ├── android-chrome-maskable-192x192.png
│ │ ├── android-chrome-maskable-512x512.png
│ │ ├── apple-touch-icon-120x120.png
│ │ ├── apple-touch-icon-152x152.png
│ │ ├── apple-touch-icon-180x180.png
│ │ ├── apple-touch-icon-60x60.png
│ │ ├── apple-touch-icon-76x76.png
│ │ ├── apple-touch-icon.png
│ │ ├── favicon-16x16.png
│ │ ├── favicon-32x32.png
│ │ ├── msapplication-icon-144x144.png
│ │ ├── mstile-150x150.png
│ │ └── safari-pinned-tab.svg
├── index.html
├── manifest.json
├── robots.txt
└── tinymce
│ ├── emojis.min.js
│ ├── langs
│ ├── es.js
│ ├── ja.js
│ ├── ko_KR.js
│ └── zh_CN.js
│ └── skins
│ ├── content.inline.min.css
│ ├── content.min.css
│ ├── content.mobile.min.css
│ ├── fonts
│ └── tinymce-mobile.woff
│ ├── skin.min.css
│ └── skin.mobile.min.css
├── src
├── App.vue
├── api
│ ├── apiInterface
│ │ └── phone-attribution.ts
│ ├── articles.ts
│ ├── common.ts
│ ├── common
│ │ └── sendMsg.ts
│ ├── eat
│ │ ├── index.ts
│ │ └── types.ts
│ ├── itKnowledge
│ │ ├── frontEnd.ts
│ │ └── types.ts
│ ├── me
│ │ ├── agentEvent.ts
│ │ ├── featuresDev.ts
│ │ ├── featuresDevType.ts
│ │ └── types.ts
│ ├── music
│ │ ├── index.ts
│ │ └── singer
│ │ │ ├── index.ts
│ │ │ └── lyric.ts
│ ├── pTypes.ts
│ ├── personal
│ │ └── personal-view
│ │ │ ├── certificateAuthentication.d.ts
│ │ │ └── certificateAuthentication.ts
│ ├── roles.ts
│ ├── sys
│ │ ├── sysMenu.ts
│ │ ├── sysRole.ts
│ │ ├── sysUser.ts
│ │ └── types
│ │ │ └── index.ts
│ ├── transactions.ts
│ ├── types.d.ts
│ ├── users.ts
│ └── usualWebsite
│ │ ├── index.ts
│ │ └── types.ts
├── assets
│ ├── 401-images
│ │ └── 401.gif
│ ├── 404-images
│ │ ├── 404-cloud.png
│ │ └── 404.png
│ ├── custom-theme
│ │ ├── fonts
│ │ │ ├── element-icons.ttf
│ │ │ └── element-icons.woff
│ │ └── index.css
│ ├── fzzj-hfxcjw.rar
│ └── fzzj-hfxcjw
│ │ ├── .font-spider
│ │ └── FZZJ-HFXCJW.TTF
│ │ ├── FZZJ-HFXCJW.TTF
│ │ └── font.css
├── cache
│ ├── local
│ │ └── index.ts
│ └── session
│ │ ├── index.ts
│ │ └── modules
│ │ └── user.ts
├── components
│ ├── AvatarUpload
│ │ └── index.vue
│ ├── BackToTop
│ │ └── index.vue
│ ├── Breadcrumb
│ │ └── index.vue
│ ├── Button
│ │ ├── LoadingBtn.vue
│ │ ├── README.md
│ │ └── index.ts
│ ├── Charts
│ │ ├── BarChart.vue
│ │ ├── LineChart.vue
│ │ ├── MixedChart.vue
│ │ └── mixins
│ │ │ └── resize.ts
│ ├── Dialog
│ │ ├── index.vue
│ │ └── types
│ │ │ └── index.ts
│ ├── DraggableKanban
│ │ └── index.vue
│ ├── DraggableList
│ │ └── index.vue
│ ├── DraggableSelect
│ │ └── index.vue
│ ├── DropdownMenu
│ │ └── index.vue
│ ├── Dropzone
│ │ └── index.vue
│ ├── ElForm
│ │ └── index.vue
│ ├── ElTable
│ │ └── index.vue
│ ├── ErrorLog
│ │ └── index.vue
│ ├── GithubCorner
│ │ └── index.vue
│ ├── Global
│ │ ├── README.md
│ │ └── index.vue
│ ├── Hamburger
│ │ └── index.vue
│ ├── HeadRadio
│ │ └── index.vue
│ ├── HeaderSearch
│ │ └── index.vue
│ ├── JsonEditor
│ │ └── index.vue
│ ├── LangSelect
│ │ └── index.vue
│ ├── MarkdownEditor
│ │ ├── default-options.ts
│ │ └── index.vue
│ ├── MaterialInput
│ │ └── index.vue
│ ├── Music
│ │ ├── VueAudio.vue
│ │ └── VueAudio1111.vue
│ ├── Pagination
│ │ └── index.vue
│ ├── PanThumb
│ │ └── index.vue
│ ├── RightPanel
│ │ └── index.vue
│ ├── Screenfull
│ │ └── index.vue
│ ├── SearchAndFeatures
│ │ ├── README.md
│ │ ├── SearchFeatures.vue
│ │ ├── index.ts
│ │ └── modules
│ │ │ └── SearchAndFetures.ts
│ ├── SizeSelect
│ │ └── index.vue
│ ├── Sticky
│ │ └── index.vue
│ ├── Table
│ │ ├── README.md
│ │ ├── SingleLine.vue
│ │ └── index.ts
│ ├── TextHoverEffect
│ │ └── Mallki.vue
│ ├── ThemePicker
│ │ └── index.vue
│ ├── Tinymce
│ │ ├── components
│ │ │ └── EditorImage.vue
│ │ ├── config.ts
│ │ └── index.vue
│ ├── UploadExcel
│ │ └── index.vue
│ ├── UploadFile
│ │ └── index.vue
│ └── UploadImage
│ │ └── index.vue
├── const
│ ├── index.ts
│ ├── juhe.ts
│ └── urls.ts
├── directives
│ ├── clipboard
│ │ └── index.ts
│ ├── el-draggable-dialog
│ │ └── index.ts
│ ├── index.ts
│ ├── permission
│ │ └── index.ts
│ └── waves
│ │ ├── index.ts
│ │ └── waves.css
├── eventBus
│ ├── index.ts
│ └── modules
│ │ └── clearEventBus.ts
├── filters
│ └── index.ts
├── globals.d.ts
├── icons
│ ├── README.md
│ ├── components
│ │ ├── 404.ts
│ │ ├── back-top.ts
│ │ ├── bug.ts
│ │ ├── chart.ts
│ │ ├── clipboard.ts
│ │ ├── component.ts
│ │ ├── dashboard.ts
│ │ ├── documentation.ts
│ │ ├── drag.ts
│ │ ├── edit.ts
│ │ ├── education.ts
│ │ ├── email.ts
│ │ ├── example.ts
│ │ ├── excel.ts
│ │ ├── exit-fullscreen.ts
│ │ ├── eye-off.ts
│ │ ├── eye-on.ts
│ │ ├── form.ts
│ │ ├── fullscreen.ts
│ │ ├── guide-2.ts
│ │ ├── guide.ts
│ │ ├── hamburger.ts
│ │ ├── icon.ts
│ │ ├── index.ts
│ │ ├── international.ts
│ │ ├── language.ts
│ │ ├── like.ts
│ │ ├── link.ts
│ │ ├── list.ts
│ │ ├── lock.ts
│ │ ├── message.ts
│ │ ├── money.ts
│ │ ├── music.ts
│ │ ├── nested.ts
│ │ ├── password.ts
│ │ ├── pdf.ts
│ │ ├── people.ts
│ │ ├── peoples.ts
│ │ ├── qq.ts
│ │ ├── search.ts
│ │ ├── shopping.ts
│ │ ├── singer-song-list.ts
│ │ ├── singer-song-lyric.ts
│ │ ├── singer.ts
│ │ ├── size.ts
│ │ ├── skill.ts
│ │ ├── star.ts
│ │ ├── tab.ts
│ │ ├── table.ts
│ │ ├── theme.ts
│ │ ├── tree-table.ts
│ │ ├── tree.ts
│ │ ├── user.ts
│ │ ├── wechat.ts
│ │ └── zip.ts
│ └── svg
│ │ ├── 404.svg
│ │ ├── back-top.svg
│ │ ├── bug.svg
│ │ ├── chart.svg
│ │ ├── clipboard.svg
│ │ ├── component.svg
│ │ ├── dashboard.svg
│ │ ├── documentation.svg
│ │ ├── drag.svg
│ │ ├── edit.svg
│ │ ├── education.svg
│ │ ├── email.svg
│ │ ├── example.svg
│ │ ├── excel.svg
│ │ ├── exit-fullscreen.svg
│ │ ├── eye-off.svg
│ │ ├── eye-on.svg
│ │ ├── form.svg
│ │ ├── fullscreen.svg
│ │ ├── guide-2.svg
│ │ ├── guide.svg
│ │ ├── hamburger.svg
│ │ ├── icon.svg
│ │ ├── international.svg
│ │ ├── language.svg
│ │ ├── like.svg
│ │ ├── link.svg
│ │ ├── list.svg
│ │ ├── lock.svg
│ │ ├── message.svg
│ │ ├── money.svg
│ │ ├── music.svg
│ │ ├── nested.svg
│ │ ├── password.svg
│ │ ├── pdf.svg
│ │ ├── people.svg
│ │ ├── peoples.svg
│ │ ├── qq.svg
│ │ ├── search.svg
│ │ ├── shopping.svg
│ │ ├── singer-song-list.svg
│ │ ├── singer-song-lyric.svg
│ │ ├── singer.svg
│ │ ├── size.svg
│ │ ├── skill.svg
│ │ ├── star.svg
│ │ ├── tab.svg
│ │ ├── table.svg
│ │ ├── theme.svg
│ │ ├── tree-table.svg
│ │ ├── tree.svg
│ │ ├── user.svg
│ │ ├── wechat.svg
│ │ └── zip.svg
├── lang
│ ├── en.ts
│ ├── es.ts
│ ├── index.ts
│ ├── ja.ts
│ ├── ko.ts
│ └── zh.ts
├── layout
│ ├── components
│ │ ├── AppMain.vue
│ │ ├── Navbar
│ │ │ └── index.vue
│ │ ├── Settings
│ │ │ └── index.vue
│ │ ├── Sidebar
│ │ │ ├── SidebarItem.vue
│ │ │ ├── SidebarItemLink.vue
│ │ │ ├── SidebarLogo.vue
│ │ │ └── index.vue
│ │ ├── TagsView
│ │ │ ├── ScrollPane.vue
│ │ │ └── index.vue
│ │ └── index.ts
│ ├── index.vue
│ └── mixin
│ │ └── resize.ts
├── main.ts
├── permission.ts
├── pwa
│ ├── components
│ │ └── ServiceWorkerUpdatePopup.vue
│ ├── register-service-worker.ts
│ └── service-worker.js
├── router
│ ├── asyncRoutes.ts
│ ├── asyncRoutes
│ │ ├── charts.ts
│ │ ├── components.ts
│ │ ├── nested.ts
│ │ └── table.ts
│ ├── index.ts
│ └── modules
│ │ ├── charts.ts
│ │ ├── components.ts
│ │ ├── nested.ts
│ │ └── table.ts
├── settings.ts
├── shims-vue.d.ts
├── shims.d.ts
├── store
│ ├── index.ts
│ └── modules
│ │ ├── app.ts
│ │ ├── error-log.ts
│ │ ├── music.ts
│ │ ├── permission.ts
│ │ ├── permissionOld.ts
│ │ ├── settings.ts
│ │ ├── tags-view.ts
│ │ └── user.ts
├── styles
│ ├── _mixins.scss
│ ├── _svgicon.scss
│ ├── _transition.scss
│ ├── _variables.scss
│ ├── _variables.scss.d.ts
│ ├── element-variables.scss
│ ├── element-variables.scss.d.ts
│ ├── index.scss
│ └── utils.scss
├── utils
│ ├── clipboard.ts
│ ├── cookies.ts
│ ├── dataVal.ts
│ ├── error-log.ts
│ ├── excel.ts
│ ├── index.ts
│ ├── permission.ts
│ ├── request.ts
│ ├── requestJava.ts
│ ├── scroll-to.ts
│ ├── symBol.ts
│ ├── tool
│ │ ├── arr.ts
│ │ ├── date.ts
│ │ ├── form.ts
│ │ ├── index.ts
│ │ ├── message.ts
│ │ └── notification.ts
│ ├── validate.ts
│ └── zip.ts
└── views
│ ├── apiInterface
│ ├── README.md
│ ├── phone-attribution.vue
│ └── phone-attribution
│ │ └── index.ts
│ ├── charts
│ ├── bar-chart.vue
│ ├── line-chart.vue
│ └── mixed-chart.vue
│ ├── clipboard
│ └── index.vue
│ ├── components-demo
│ ├── avatar-upload.vue
│ ├── back-to-top.vue
│ ├── count-to.vue
│ ├── draggable-dialog.vue
│ ├── draggable-kanban.vue
│ ├── draggable-list.vue
│ ├── draggable-select.vue
│ ├── dropzone.vue
│ ├── json-editor.vue
│ ├── markdown.vue
│ ├── mixin.vue
│ ├── split-pane.vue
│ ├── sticky.vue
│ └── tinymce.vue
│ ├── dashboard
│ ├── admin
│ │ ├── components
│ │ │ ├── BarChart.vue
│ │ │ ├── BoxCard.vue
│ │ │ ├── LineChart.vue
│ │ │ ├── PanelGroup.vue
│ │ │ ├── PieChart.vue
│ │ │ ├── RadarChart.vue
│ │ │ ├── TodoList
│ │ │ │ ├── Todo.vue
│ │ │ │ └── index.vue
│ │ │ ├── TransactionTable.vue
│ │ │ └── tool.ts
│ │ └── index.vue
│ ├── editor
│ │ └── index.vue
│ └── index.vue
│ ├── eat
│ ├── breakfast.vue
│ ├── dinner.vue
│ ├── index.vue
│ ├── lunch.vue
│ ├── modules
│ │ ├── formData.ts
│ │ ├── formUtils.ts
│ │ ├── index.ts
│ │ ├── options.ts
│ │ ├── searchFormData.ts
│ │ └── tableData.ts
│ ├── nightingale.vue
│ ├── other.vue
│ ├── src
│ │ ├── assets
│ │ │ ├── img
│ │ │ │ ├── bean_500.png
│ │ │ │ ├── bean_five.png
│ │ │ │ ├── bean_one.png
│ │ │ │ ├── bean_ten.png
│ │ │ │ ├── bean_two.png
│ │ │ │ ├── close_store.png
│ │ │ │ ├── color_pillar.png
│ │ │ │ ├── congratulation.png
│ │ │ │ ├── draw_btn.png
│ │ │ │ ├── draw_wheel.png
│ │ │ │ ├── give_up.png
│ │ │ │ ├── luck_bg.png
│ │ │ │ ├── lucky_title.png
│ │ │ │ ├── point_five.png
│ │ │ │ ├── point_ten.png
│ │ │ │ ├── sorry.png
│ │ │ │ └── wheel_toast_1.png
│ │ │ └── logo.png
│ │ └── index
│ │ │ └── config.ts
│ └── todayEat.vue
│ ├── error-log
│ ├── components
│ │ ├── ErrorTestA.vue
│ │ └── ErrorTestB.vue
│ └── index.vue
│ ├── error-page
│ ├── 401.vue
│ └── 404.vue
│ ├── example
│ ├── components
│ │ ├── ArticleDetail.vue
│ │ ├── Dropdown
│ │ │ ├── Comment.vue
│ │ │ ├── Platform.vue
│ │ │ ├── SourceUrl.vue
│ │ │ └── index.ts
│ │ └── Warning.vue
│ ├── create.vue
│ ├── edit.vue
│ └── list.vue
│ ├── excel
│ ├── components
│ │ ├── AutoWidthOption.vue
│ │ ├── BookTypeOption.vue
│ │ └── FilenameOption.vue
│ ├── export-excel.vue
│ ├── merge-header.vue
│ ├── select-excel.vue
│ └── upload-excel.vue
│ ├── guide
│ ├── index.vue
│ └── steps.ts
│ ├── i18n-demo
│ ├── index.vue
│ └── local.ts
│ ├── icons
│ ├── element-icons.ts
│ ├── index.vue
│ └── svg-icons.ts
│ ├── itKnowledge
│ ├── Index.vue
│ ├── algorithm.vue
│ ├── components
│ │ └── Search.vue
│ ├── front-end.vue
│ ├── front-rear-end.vue
│ ├── modules
│ │ ├── formData.ts
│ │ ├── formUtils.ts
│ │ ├── index.ts
│ │ ├── options.ts
│ │ ├── searchFormData.ts
│ │ └── tableData.ts
│ ├── rear-end.vue
│ └── tool.vue
│ ├── login
│ ├── auth-redirect.vue
│ ├── components
│ │ └── SocialSignin.vue
│ └── index.vue
│ ├── me
│ ├── agent-event.vue
│ ├── component
│ │ ├── agent-event
│ │ │ └── table.vue
│ │ └── table.vue
│ ├── diary.vue
│ ├── features-dev - 副本.vue
│ ├── features-dev.vue
│ └── modules
│ │ ├── agent-event
│ │ ├── formData.ts
│ │ ├── index.ts
│ │ ├── options.ts
│ │ └── tableData.ts
│ │ └── features-dev
│ │ ├── formData.ts
│ │ ├── formUtils.ts
│ │ ├── index.ts
│ │ ├── options.ts
│ │ ├── searchFormData.ts
│ │ └── tableData.ts
│ ├── music
│ ├── components
│ │ ├── EditSingerDialog.vue
│ │ ├── EditSingerSongDialog.vue
│ │ └── Header.vue
│ ├── index.vue
│ ├── modules
│ │ ├── music-singer
│ │ │ └── formData.ts
│ │ ├── singer-song-list
│ │ │ └── index.ts
│ │ └── songeList.ts
│ ├── music-singer.vue
│ ├── musicPlayer.vue
│ ├── singer-song-list.vue
│ ├── singer-song-lyric.vue
│ └── test.ts
│ ├── nested
│ ├── menu1
│ │ ├── index.vue
│ │ ├── menu1-1
│ │ │ └── index.vue
│ │ ├── menu1-2
│ │ │ ├── index.vue
│ │ │ ├── menu1-2-1
│ │ │ │ └── index.vue
│ │ │ └── menu1-2-2
│ │ │ │ └── index.vue
│ │ └── menu1-3
│ │ │ └── index.vue
│ └── menu2
│ │ └── index.vue
│ ├── pdf
│ ├── content.ts
│ ├── download.vue
│ └── index.vue
│ ├── permission
│ ├── components
│ │ └── SwitchRoles.vue
│ ├── directive.vue
│ ├── page.vue
│ └── role.vue
│ ├── personal
│ └── personal-view
│ │ ├── certificate-authentication.vue
│ │ ├── certificate-authentication自己写的input上传.vue
│ │ ├── certificate.vue
│ │ └── index.vue
│ ├── profile
│ ├── components
│ │ ├── Account.vue
│ │ ├── Activity.vue
│ │ ├── Timeline.vue
│ │ └── UserCard.vue
│ └── index.vue
│ ├── redirect
│ └── index.vue
│ ├── registe
│ └── index.vue
│ ├── sys
│ ├── modules
│ │ ├── options.ts
│ │ ├── role
│ │ │ ├── formData.ts
│ │ │ ├── sysRole.ts
│ │ │ └── tableData.ts
│ │ └── user
│ │ │ ├── tableData.ts
│ │ │ └── userFormData.ts
│ ├── sys-menu.vue
│ ├── sys-role.vue
│ └── sys-user.vue
│ ├── tab
│ ├── components
│ │ └── TabPane.vue
│ └── index.vue
│ ├── table
│ ├── complex-table.vue
│ ├── draggable-table.vue
│ ├── dynamic-table
│ │ ├── components
│ │ │ ├── FixedHeaderTable.vue
│ │ │ └── UnfixedHeaderTable.vue
│ │ └── index.vue
│ └── inline-edit-table.vue
│ ├── theme
│ └── index.vue
│ ├── usualWebsite
│ ├── Index.vue
│ ├── design.vue
│ ├── modules
│ │ ├── formData.ts
│ │ ├── formUtils.ts
│ │ ├── index.ts
│ │ ├── options.ts
│ │ ├── searchFormData.ts
│ │ └── tableData.ts
│ ├── movie.vue
│ ├── other.vue
│ ├── program.vue
│ └── tool.vue
│ └── zip
│ └── index.vue
├── tests
└── unit
│ ├── components
│ └── Breadcrumb.spec.ts
│ └── utils
│ ├── parseTime.spec.ts
│ └── validate.spec.ts
├── tsconfig.json
├── typings-custom
├── javascript-tool-class.d.ts
├── lrc-file-parser.d.ts
└── zzmcomponentlib.d.ts
├── vue.config.js
└── yarn.lock
/.browserslistrc:
--------------------------------------------------------------------------------
1 | > 1%
2 | last 2 versions
3 |
--------------------------------------------------------------------------------
/.circleci/config.yml:
--------------------------------------------------------------------------------
1 | # Javascript Node CircleCI 2.0 configuration file
2 | #
3 | # Check https://circleci.com/docs/2.0/language-javascript/ for more details
4 | #
5 | version: 2
6 |
7 | jobs:
8 | build:
9 | docker:
10 | - image: circleci/node:12
11 |
12 | working_directory: ~/vue-typescript-admin-template
13 |
14 | steps:
15 | - checkout
16 |
17 | # Download and cache dependencies
18 | - restore_cache:
19 | keys:
20 | - v1-dependencies-{{ checksum "package.json" }}
21 | # fallback to using the latest cache if no exact match is found
22 | - v1-dependencies-
23 |
24 | - run: yarn install
25 |
26 | - save_cache:
27 | paths:
28 | - node_modules
29 | key: v1-dependencies-{{ checksum "package.json" }}
30 |
31 | - run: yarn lint && yarn build:prod
32 |
--------------------------------------------------------------------------------
/.editorconfig:
--------------------------------------------------------------------------------
1 | # http://editorconfig.org
2 |
3 | # top-most EditorConfig file
4 | root = true
5 |
6 | # Unix-style newlines with a newline ending every file
7 | [*]
8 | charset = utf-8
9 | end_of_line = lf
10 | insert_final_newline = true
11 | trim_trailing_whitespace = true
12 |
13 | # Indentation override for js(x), ts(x) and vue files
14 | [*.{js,jsx,ts,tsx,vue}]
15 | indent_size = 2
16 | indent_style = space
17 |
18 | # Indentation override for css related files
19 | [*.{css,styl,scss,less,sass}]
20 | indent_size = 2
21 | indent_style = space
22 |
23 | # Indentation override for html files
24 | [*.html]
25 | indent_size = 2
26 | indent_style = space
27 |
28 | # Trailing space override for markdown file
29 | [*.md]
30 | trim_trailing_whitespace = false
31 |
32 | # Indentation override for config files
33 | [*.{json,yml}]
34 | indent_size = 2
35 | indent_style = space
36 |
--------------------------------------------------------------------------------
/.env.development:
--------------------------------------------------------------------------------
1 | # Base api
2 | # node 接口
3 | VUE_APP_BASE_API = http://localhost:3333
4 | # 本地java - 文件服务器
5 | VUE_APP_BLOG_API = http://localhost:8527
6 | # VUE_APP_BASE_API = '/dev-api'
7 |
8 | # vue-cli uses the VUE_CLI_BABEL_TRANSPILE_MODULES environment variable,
9 | # to control whether the babel-plugin-dynamic-import-node plugin is enabled.
10 | # It only does one thing by converting all import() to require().
11 | # This configuration can significantly increase the speed of hot updates,
12 | # when you have a large number of pages.
13 | # Detail: https://github.com/vuejs/vue-cli/blob/dev/packages/@vue/babel-preset-app/index.js
14 |
15 | VUE_CLI_BABEL_TRANSPILE_MODULES = true
16 |
--------------------------------------------------------------------------------
/.env.production:
--------------------------------------------------------------------------------
1 | # Base api
2 | # Remeber to change this to your production server address
3 | # Here I used my mock server for this project
4 | VUE_APP_BASE_API = http://zhengzemin.cn:3333
5 |
6 | # 远程java - 文件服务器
7 | # VUE_APP_BLOG_API = 'http://file.dev.zhengzemin.cn:81'
8 | VUE_APP_BLOG_API = http://zhengzemin.cn:8527
9 |
--------------------------------------------------------------------------------
/.env.pserve:
--------------------------------------------------------------------------------
1 | # koa后台服务
2 | VUE_APP_BASE_API = http://zhengzemin.cn:3334
3 |
4 | # 远程java - 文件服务器
5 | VUE_APP_BLOG_API = http://zhengzemin.cn:8528
6 |
--------------------------------------------------------------------------------
/.env.staging:
--------------------------------------------------------------------------------
1 | # Set to production for building optimization
2 | NODE_ENV = production
3 |
4 | # Base api
5 | VUE_APP_BASE_API = '/stage-api'
6 |
7 |
--------------------------------------------------------------------------------
/.eslintignore:
--------------------------------------------------------------------------------
1 | dist/*.js
2 | src/assets
3 | tests/unit/coverage
4 | public/**/*.js
5 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE.md:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 |
9 | # I'm submitting a
10 |
11 |
20 |
21 | ## Current behavior
22 |
23 |
24 |
25 | ## Expected behavior
26 |
27 |
28 |
29 | ## Minimal reproduction of the problem with instructions
30 |
31 |
34 |
35 | ## What is the motivation / use case for changing the behavior
36 |
37 |
38 |
39 | ## Environment
40 |
41 |
42 |
--------------------------------------------------------------------------------
/.github/PULL_REQUEST_TEMPLATE.md:
--------------------------------------------------------------------------------
1 |
5 |
6 |
7 |
8 | **Make sure the PR fulfills these requirements:**
9 |
10 | - When resolving a specific issue, make sure it's referenced in the PR's title (e.g. `Closes #xxx[,#xxx]`, where "xxx" is the issue number)
11 |
12 | - If adding a **new feature**, the PR's description includes: A convincing reason for adding this feature (to avoid wasting your time, it's best to open a suggestion issue first and wait for approval before working on it)
13 |
14 | - If this PR introduce a **breaking change**, please describe the impact and migration path for existing applications
15 |
16 | **What kind of change does this PR introduce?**
17 |
18 |
27 |
28 | **More information:**
29 |
--------------------------------------------------------------------------------
/.github/workflows/deploy.yml:
--------------------------------------------------------------------------------
1 | name: Deploy on GitHub Pages
2 |
3 | on:
4 | push:
5 | branches:
6 | - master
7 |
8 | jobs:
9 | build-deploy:
10 | runs-on: ubuntu-latest
11 | steps:
12 | - name: Checkout code
13 | uses: actions/checkout@v1
14 | - name: Install and Build
15 | run: |
16 | npm install
17 | npm run build:prod
18 | - name: Deploy
19 | uses: maxheld83/ghpages@v0.2.1
20 | env:
21 | BUILD_DIR: dist/
22 | GH_PAT: ${{ secrets.GH_PAT }}
23 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | node_modules
3 | /dist
4 |
5 | /tests/e2e/videos/
6 | /tests/e2e/screenshots/
7 | /tests/**/coverage/
8 |
9 | # local env files
10 | .env.local
11 | .env.*.local
12 |
13 | # Log files
14 | npm-debug.log*
15 | yarn-debug.log*
16 | yarn-error.log*
17 |
18 | # Editor directories and files
19 | .idea
20 | .vscode
21 | .history
22 | .ionide
23 | *.suo
24 | *.ntvs*
25 | *.njsproj
26 | *.sln
27 | *.sw*
28 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2018 Chong Guo
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/babel.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | presets: [
3 | '@vue/cli-plugin-babel/preset'
4 | ]
5 | }
6 |
--------------------------------------------------------------------------------
/cypress.json:
--------------------------------------------------------------------------------
1 | {
2 | "pluginsFile": "tests/e2e/plugins/index.js"
3 | }
4 |
--------------------------------------------------------------------------------
/demo/dashboard.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/git-Dignity/vueAndTsAndKoa2/6eedd79d745ec72167505e8dc1d4917c2d4d888e/demo/dashboard.png
--------------------------------------------------------------------------------
/dos/koa开发遇到问题与解决.doc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/git-Dignity/vueAndTsAndKoa2/6eedd79d745ec72167505e8dc1d4917c2d4d888e/dos/koa开发遇到问题与解决.doc
--------------------------------------------------------------------------------
/dos/ttf字蛛/README.md:
--------------------------------------------------------------------------------
1 | 可以将字体ttf文件压缩:现在使用什么文件就拿出来,其他字体不用到的,全部删掉
2 |
3 | 【ttf压缩】网页开发中引入字体文件过大,加载缓慢的解决办法【字蛛】【web Font】:https://blog.csdn.net/weixin_36336604/article/details/77191144
--------------------------------------------------------------------------------
/dos/ttf字蛛/cmd执行.txt:
--------------------------------------------------------------------------------
1 | font-spider D:\rj\dev\github\code\vueAndTsAndKoa2\相关文档\ttf字蛛\index.html
--------------------------------------------------------------------------------
/dos/ttf字蛛/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Document
7 |
17 |
18 |
19 |
20 | 歌手榜轻音乐05月31日更新,轻音乐榜馆67
21 |
22 |
--------------------------------------------------------------------------------
/dos/前端开发遇到的问题.doc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/git-Dignity/vueAndTsAndKoa2/6eedd79d745ec72167505e8dc1d4917c2d4d888e/dos/前端开发遇到的问题.doc
--------------------------------------------------------------------------------
/dos/前端遇到问题及解决.doc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/git-Dignity/vueAndTsAndKoa2/6eedd79d745ec72167505e8dc1d4917c2d4d888e/dos/前端遇到问题及解决.doc
--------------------------------------------------------------------------------
/dos/本系统技术点.doc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/git-Dignity/vueAndTsAndKoa2/6eedd79d745ec72167505e8dc1d4917c2d4d888e/dos/本系统技术点.doc
--------------------------------------------------------------------------------
/jest.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | preset: '@vue/cli-plugin-unit-jest/presets/typescript-and-babel'
3 | }
4 | module.exports = {
5 | preset: '@vue/cli-plugin-unit-jest/presets/typescript-and-babel'
6 | }
7 |
--------------------------------------------------------------------------------
/mock/api.ts:
--------------------------------------------------------------------------------
1 | export * from './articles'
2 | export * from './role'
3 | export * from './transactions'
4 | export * from './users'
5 |
--------------------------------------------------------------------------------
/mock/security.ts:
--------------------------------------------------------------------------------
1 | import { Response, Request, NextFunction } from 'express'
2 |
3 | export const accessTokenAuth = (req: Request, res: Response, next: NextFunction) => {
4 | const accessToken = req.header('X-Access-Token')
5 | if (!accessToken) {
6 | return res.status(401).json({
7 | code: 50001,
8 | messaege: 'Invalid Access Token'
9 | })
10 | }
11 | next()
12 | }
13 |
--------------------------------------------------------------------------------
/mock/transactions.ts:
--------------------------------------------------------------------------------
1 | import faker from 'faker'
2 | import { Response, Request } from 'express'
3 | import { ITransactionData } from '../src/api/types'
4 |
5 | const transactionList: ITransactionData[] = []
6 | const transactionCount = 20
7 |
8 | for (let i = 0; i < transactionCount; i++) {
9 | transactionList.push({
10 | orderId: faker.random.uuid(),
11 | status: faker.random.arrayElement(['success', 'pending']),
12 | timestamp: faker.date.past().getTime(),
13 | username: faker.name.findName(),
14 | price: parseFloat(faker.finance.amount(1000, 15000, 2))
15 | })
16 | }
17 |
18 | export const getTransactions = (req: Request, res: Response) => {
19 | return res.json({
20 | code: 20000,
21 | data: {
22 | total: transactionList.length,
23 | items: transactionList
24 | }
25 | })
26 | }
27 |
--------------------------------------------------------------------------------
/mock/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "esnext",
4 | "module": "commonjs",
5 | "strict": true,
6 | "jsx": "preserve",
7 | "importHelpers": true,
8 | "moduleResolution": "node",
9 | "experimentalDecorators": true,
10 | "esModuleInterop": true,
11 | "allowSyntheticDefaultImports": true,
12 | "sourceMap": true,
13 | "baseUrl": ".",
14 | "types": [
15 | "node",
16 | "webpack-env"
17 | ]
18 | },
19 | "include": [
20 | "**/*.ts",
21 | "**/*.tsx"
22 | ],
23 | "exclude": [
24 | "node_modules"
25 | ]
26 | }
27 |
--------------------------------------------------------------------------------
/postcss.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | plugins: {
3 | autoprefixer: {}
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/git-Dignity/vueAndTsAndKoa2/6eedd79d745ec72167505e8dc1d4917c2d4d888e/public/favicon.ico
--------------------------------------------------------------------------------
/public/img/icons/android-chrome-192x192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/git-Dignity/vueAndTsAndKoa2/6eedd79d745ec72167505e8dc1d4917c2d4d888e/public/img/icons/android-chrome-192x192.png
--------------------------------------------------------------------------------
/public/img/icons/android-chrome-512x512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/git-Dignity/vueAndTsAndKoa2/6eedd79d745ec72167505e8dc1d4917c2d4d888e/public/img/icons/android-chrome-512x512.png
--------------------------------------------------------------------------------
/public/img/icons/android-chrome-maskable-192x192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/git-Dignity/vueAndTsAndKoa2/6eedd79d745ec72167505e8dc1d4917c2d4d888e/public/img/icons/android-chrome-maskable-192x192.png
--------------------------------------------------------------------------------
/public/img/icons/android-chrome-maskable-512x512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/git-Dignity/vueAndTsAndKoa2/6eedd79d745ec72167505e8dc1d4917c2d4d888e/public/img/icons/android-chrome-maskable-512x512.png
--------------------------------------------------------------------------------
/public/img/icons/apple-touch-icon-120x120.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/git-Dignity/vueAndTsAndKoa2/6eedd79d745ec72167505e8dc1d4917c2d4d888e/public/img/icons/apple-touch-icon-120x120.png
--------------------------------------------------------------------------------
/public/img/icons/apple-touch-icon-152x152.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/git-Dignity/vueAndTsAndKoa2/6eedd79d745ec72167505e8dc1d4917c2d4d888e/public/img/icons/apple-touch-icon-152x152.png
--------------------------------------------------------------------------------
/public/img/icons/apple-touch-icon-180x180.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/git-Dignity/vueAndTsAndKoa2/6eedd79d745ec72167505e8dc1d4917c2d4d888e/public/img/icons/apple-touch-icon-180x180.png
--------------------------------------------------------------------------------
/public/img/icons/apple-touch-icon-60x60.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/git-Dignity/vueAndTsAndKoa2/6eedd79d745ec72167505e8dc1d4917c2d4d888e/public/img/icons/apple-touch-icon-60x60.png
--------------------------------------------------------------------------------
/public/img/icons/apple-touch-icon-76x76.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/git-Dignity/vueAndTsAndKoa2/6eedd79d745ec72167505e8dc1d4917c2d4d888e/public/img/icons/apple-touch-icon-76x76.png
--------------------------------------------------------------------------------
/public/img/icons/apple-touch-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/git-Dignity/vueAndTsAndKoa2/6eedd79d745ec72167505e8dc1d4917c2d4d888e/public/img/icons/apple-touch-icon.png
--------------------------------------------------------------------------------
/public/img/icons/favicon-16x16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/git-Dignity/vueAndTsAndKoa2/6eedd79d745ec72167505e8dc1d4917c2d4d888e/public/img/icons/favicon-16x16.png
--------------------------------------------------------------------------------
/public/img/icons/favicon-32x32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/git-Dignity/vueAndTsAndKoa2/6eedd79d745ec72167505e8dc1d4917c2d4d888e/public/img/icons/favicon-32x32.png
--------------------------------------------------------------------------------
/public/img/icons/msapplication-icon-144x144.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/git-Dignity/vueAndTsAndKoa2/6eedd79d745ec72167505e8dc1d4917c2d4d888e/public/img/icons/msapplication-icon-144x144.png
--------------------------------------------------------------------------------
/public/img/icons/mstile-150x150.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/git-Dignity/vueAndTsAndKoa2/6eedd79d745ec72167505e8dc1d4917c2d4d888e/public/img/icons/mstile-150x150.png
--------------------------------------------------------------------------------
/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 | <%= webpackConfig.name %>
14 |
15 |
16 |
19 |
20 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "Vue Typescript Admin",
3 | "short_name": "Vue Ts Admin",
4 | "icons": [
5 | {
6 | "src": "./img/icons/android-chrome-192x192.png",
7 | "sizes": "192x192",
8 | "type": "image/png"
9 | },
10 | {
11 | "src": "./img/icons/android-chrome-512x512.png",
12 | "sizes": "512x512",
13 | "type": "image/png"
14 | }
15 | ],
16 | "start_url": "./index.html",
17 | "display": "standalone",
18 | "background_color": "#fff",
19 | "theme_color": "#4DBA87"
20 | }
21 |
--------------------------------------------------------------------------------
/public/robots.txt:
--------------------------------------------------------------------------------
1 | User-agent: *
2 | Disallow:
3 |
--------------------------------------------------------------------------------
/public/tinymce/skins/content.mobile.min.css:
--------------------------------------------------------------------------------
1 | .tinymce-mobile-unfocused-selections .tinymce-mobile-unfocused-selection{position:absolute;display:inline-block;background-color:green;opacity:.5}body{-webkit-text-size-adjust:none}body img{max-width:96vw}body table img{max-width:95%}
--------------------------------------------------------------------------------
/public/tinymce/skins/fonts/tinymce-mobile.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/git-Dignity/vueAndTsAndKoa2/6eedd79d745ec72167505e8dc1d4917c2d4d888e/public/tinymce/skins/fonts/tinymce-mobile.woff
--------------------------------------------------------------------------------
/src/api/apiInterface/phone-attribution.ts:
--------------------------------------------------------------------------------
1 | import request from '@/utils/request'
2 |
3 | /**
4 | * 手机号码归属地
5 | * @param params
6 | * {
7 | key,
8 | phone
9 | }
10 | */
11 | export const mobile = (params: any) =>
12 | request({
13 | url: '/apiInterface/mobile',
14 | method: 'get',
15 | params
16 | })
17 |
18 |
--------------------------------------------------------------------------------
/src/api/common.ts:
--------------------------------------------------------------------------------
1 | export const qiniuUrl = "http://dignity.zhengzemin.cn/"
--------------------------------------------------------------------------------
/src/api/common/sendMsg.ts:
--------------------------------------------------------------------------------
1 |
2 | import request from '@/utils/request'
3 |
4 |
5 | /**
6 | * 发送消息(微信方糖)
7 | * @param params 数据
8 | */
9 | export const sendServerJiangMsg = (params: any) =>
10 | request({
11 | url: '/common/serverJiang/send',
12 | method: 'get',
13 | params
14 | })
15 |
16 |
17 | /**
18 | * 发送消息(Bark)
19 | * @param params 数据
20 | */
21 | export const sendBarkMsg = (params: any) =>
22 | request({
23 | url: '/common/bark/send',
24 | method: 'get',
25 | params
26 | })
27 |
28 |
29 | /**
30 | * 发送消息(QQ邮箱)
31 | * @param params 数据
32 | */
33 | export const senQQMailMsg = (params: any) =>{
34 | request({
35 | url: '/common/qqMail/send',
36 | method: 'get',
37 | params
38 | })
39 | }
40 |
--------------------------------------------------------------------------------
/src/api/eat/index.ts:
--------------------------------------------------------------------------------
1 | /*
2 | * @Author: your name
3 | * @Date: 2021-10-06 16:13:28
4 | * @LastEditTime: 2021-10-07 11:37:09
5 | * @LastEditors: Please set LastEditors
6 | * @Description: In User Settings Edit
7 | * @FilePath: \vueAndTsAndKoa2\src\api\eat\index.ts
8 | */
9 | import request from '@/utils/request'
10 |
11 |
12 | /**
13 | * 查询
14 | * @param params 数据
15 | */
16 | export const get = (params: any) =>
17 | request({
18 | url: '/eat/',
19 | method: 'get',
20 | params
21 | })
22 |
23 |
24 |
25 | /**
26 | * 添加
27 | * @param data 数据
28 | */
29 | export const create = (data: any) =>
30 | request({
31 | url: '/eat/',
32 | method: 'post',
33 | data
34 | })
35 |
36 |
37 | /**
38 | * 更新
39 | * @param data 数据
40 | */
41 | export const update = (data: any) =>
42 | request({
43 | url: `/eat/`,
44 | method: 'put',
45 | data
46 | })
47 |
48 | /**
49 | * 删除
50 | * @param params 数据
51 | */
52 | export const del = (params: any) =>
53 | request({
54 | url: `/eat/`,
55 | method: 'delete',
56 | params
57 | })
58 |
--------------------------------------------------------------------------------
/src/api/eat/types.ts:
--------------------------------------------------------------------------------
1 | /**
2 | * 代办事项接口
3 | */
4 | export interface IAgentEvent {
5 | id: string
6 | serialNum: number
7 | title: string
8 | content: string
9 | type: number
10 | agent: string
11 | schedule: string
12 | noticeWay:number
13 | contact: string
14 | startTime: string
15 | endTime: string
16 | remarks: string
17 | }
18 |
19 |
20 |
21 | export interface IRoutesTreeData {
22 | children: IRoutesTreeData[]
23 | title: string
24 | path: string
25 | }
26 |
27 |
28 | export interface ISysUserData {
29 | id: string
30 | userName: string
31 | photo: string
32 | phone: string
33 | roles: string
34 | token: string
35 | }
36 |
37 |
38 |
39 |
--------------------------------------------------------------------------------
/src/api/itKnowledge/types.ts:
--------------------------------------------------------------------------------
1 | /*
2 | * @Author: your name
3 | * @Date: 2021-02-21 22:24:50
4 | * @LastEditTime: 2021-08-31 15:41:22
5 | * @LastEditors: your name
6 | * @Description: In User Settings Edit
7 | * @FilePath: \vue-typescript-admin-template-master\src\api\itKnowledge\types.ts
8 | */
9 | /**
10 | * 代办事项接口
11 | */
12 | export interface IItKnowledge {
13 | id: string
14 | serialNum: number
15 | title: string
16 | content: string
17 | type: number
18 | agent: string
19 | schedule: string
20 | noticeWay:number
21 | contact: string
22 | startTime: string
23 | endTime: string
24 | remarks: string
25 | }
26 |
27 |
28 |
29 |
30 | export interface IRoutesTreeData {
31 | children: IRoutesTreeData[]
32 | title: string
33 | path: string
34 | }
35 |
36 |
37 | export interface ISysUserData {
38 | id: string
39 | userName: string
40 | photo: string
41 | phone: string
42 | roles: string
43 | token: string
44 | }
45 |
46 |
47 |
48 |
--------------------------------------------------------------------------------
/src/api/me/featuresDev.ts:
--------------------------------------------------------------------------------
1 | import request from '@/utils/request'
2 |
3 |
4 | /**
5 | * 查询
6 | * @param params 数据
7 | */
8 | export const get = (params: any) =>
9 | request({
10 | url: '/featuresDev/',
11 | method: 'get',
12 | params
13 | })
14 |
15 |
16 |
17 | /**
18 | * 添加
19 | * @param data 数据
20 | */
21 | export const create = (data: any) =>
22 | request({
23 | url: '/featuresDev/',
24 | method: 'post',
25 | data
26 | })
27 |
28 |
29 | /**
30 | * 更新
31 | * @param data 数据
32 | */
33 | export const update = (data: any) =>
34 | request({
35 | url: `/featuresDev/`,
36 | method: 'put',
37 | data
38 | })
39 |
40 | /**
41 | * 删除
42 | * @param params 数据
43 | */
44 | export const del = (params: any) =>
45 | request({
46 | url: `/featuresDev/`,
47 | method: 'delete',
48 | params
49 | })
50 |
--------------------------------------------------------------------------------
/src/api/me/featuresDevType.ts:
--------------------------------------------------------------------------------
1 | /**
2 | * 功能开发接口
3 | */
4 | export interface IFeaturesDevType {
5 | id: string
6 | serialNum: number
7 | title: string
8 | front_end: string
9 | node: string
10 | java: string
11 | database_sql: string
12 | remarks:number
13 | }
14 |
15 |
16 |
--------------------------------------------------------------------------------
/src/api/me/types.ts:
--------------------------------------------------------------------------------
1 | /**
2 | * 代办事项接口
3 | */
4 | export interface IAgentEvent {
5 | id: string
6 | serialNum: number
7 | title: string
8 | content: string
9 | type: number
10 | agent: string
11 | schedule: string
12 | noticeWay:number
13 | contact: string
14 | startTime: string
15 | endTime: string
16 | remarks: string
17 | }
18 |
19 |
20 |
21 | export interface IRoutesTreeData {
22 | children: IRoutesTreeData[]
23 | title: string
24 | path: string
25 | }
26 |
27 |
28 | export interface ISysUserData {
29 | id: string
30 | userName: string
31 | photo: string
32 | phone: string
33 | roles: string
34 | token: string
35 | }
36 |
37 |
38 |
39 |
--------------------------------------------------------------------------------
/src/api/pTypes.ts:
--------------------------------------------------------------------------------
1 | /*
2 | * @Author: zemin zheng
3 | * @Date: 2021-08-31 15:41:50
4 | * @LastEditTime: 2021-08-31 16:41:24
5 | * @LastEditors: Please set LastEditors
6 | * @Description: 定义公用的interface
7 | * @FilePath: \vue-typescript-admin-template-master\src\api\pTypes.ts
8 | */
9 |
10 |
11 | /**
12 | * @description P:公用
13 | * @description: object类型的公用接口定义
14 | * @param {*}
15 | * @return {*}
16 | */
17 | export interface IPObject {
18 | num: number
19 | data: any
20 | }
21 |
--------------------------------------------------------------------------------
/src/api/personal/personal-view/certificateAuthentication.d.ts:
--------------------------------------------------------------------------------
1 | declare function getCertificate(data: string)
2 |
3 | declare function uploadFile(param: any)
--------------------------------------------------------------------------------
/src/api/personal/personal-view/certificateAuthentication.ts:
--------------------------------------------------------------------------------
1 | import request from '@/utils/request'
2 | import axios from 'axios'
3 |
4 |
5 | //获取证件
6 | export const getCertificate = (data: any) =>
7 | request({
8 | url: '/certificateAuthentication/getCertificate',
9 | method: 'post',
10 | data
11 | })
12 |
13 | export const uploadFile = (data: any) =>
14 | request({
15 | url: '/certificateAuthentication/upload',
16 | method: 'post',
17 | data
18 | })
19 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/src/api/roles.ts:
--------------------------------------------------------------------------------
1 | import request from '@/utils/request'
2 |
3 | export const getRoles = (params: any) =>
4 | request({
5 | url: '/roles',
6 | method: 'get',
7 | params
8 | })
9 |
10 | export const createRole = (data: any) =>
11 | request({
12 | url: '/roles',
13 | method: 'post',
14 | data
15 | })
16 |
17 | export const updateRole = (id: number, data: any) =>
18 | request({
19 | url: `/roles/${id}`,
20 | method: 'put',
21 | data
22 | })
23 |
24 | export const deleteRole = (id: number) =>
25 | request({
26 | url: `/roles/${id}`,
27 | method: 'delete'
28 | })
29 |
30 | export const getRoutes = (params: any) =>
31 | request({
32 | url: '/routes',
33 | method: 'get',
34 | params
35 | })
36 |
--------------------------------------------------------------------------------
/src/api/sys/sysMenu.ts:
--------------------------------------------------------------------------------
1 | import request from '@/utils/request'
2 |
3 | export const createSysMenu = (data: any) =>
4 | request({
5 | url: '/menu/save',
6 | method: 'post',
7 | data
8 | })
--------------------------------------------------------------------------------
/src/api/sys/sysUser.ts:
--------------------------------------------------------------------------------
1 | import request from '@/utils/request'
2 | import { ISysUserData } from '@/api/sys/types'
3 |
4 | export const defaultSysUserData: ISysUserData = {
5 | id: '',
6 | userName: '',
7 | photo: '',
8 | phone: '',
9 | roles: '',
10 | token: ''
11 | }
12 |
13 | export const getSysUser = (params: any) =>
14 | request({
15 | url: '/user',
16 | method: 'get',
17 | params
18 | })
19 |
20 |
21 | export const createSysUser = (data: any) =>
22 | request({
23 | url: '/user/',
24 | method: 'post',
25 | data
26 | })
27 |
28 | export const delSysRole = (data: any) =>
29 | request({
30 | url: '/role/del',
31 | method: 'post',
32 | data
33 | })
34 |
35 | export const updateSysUser = (data: any) =>
36 | request({
37 | url: `/user/ID`,
38 | method: 'put',
39 | data
40 | })
41 |
42 |
--------------------------------------------------------------------------------
/src/api/sys/types/index.ts:
--------------------------------------------------------------------------------
1 |
2 | export interface ISysRoleData {
3 | id: string
4 | roleName: string
5 | roleKey: string
6 | roleType: string
7 | isSys: number
8 | remarks: string
9 | routes: Array
10 | }
11 |
12 |
13 |
14 | export interface IRoutesTreeData {
15 | children: IRoutesTreeData[]
16 | title: string
17 | path: string
18 | }
19 |
20 |
21 | export interface ISysUserData {
22 | id: string
23 | userName: string
24 | photo: string
25 | phone: string
26 | roles: string
27 | token: string
28 | }
29 |
30 |
31 |
32 |
--------------------------------------------------------------------------------
/src/api/transactions.ts:
--------------------------------------------------------------------------------
1 | import request from '@/utils/request'
2 |
3 | export const getTransactions = (params: any) =>
4 | request({
5 | url: '/transactions',
6 | method: 'get',
7 | params
8 | })
9 |
--------------------------------------------------------------------------------
/src/api/types.d.ts:
--------------------------------------------------------------------------------
1 | export interface IArticleData {
2 | id: number
3 | status: string
4 | title: string
5 | abstractContent: string
6 | fullContent: string
7 | sourceURL: string
8 | imageURL: string
9 | timestamp: string | number
10 | platforms: string[]
11 | disableComment: boolean
12 | importance: number
13 | author: string
14 | reviewer: string
15 | type: string
16 | pageviews: number
17 | }
18 |
19 | export interface IRoleData {
20 | key: string
21 | name: string
22 | description: string
23 | routes: any
24 | }
25 |
26 | export interface ITransactionData {
27 | orderId: string
28 | timestamp: string | number
29 | username: string
30 | price: number
31 | status: string
32 | }
33 |
34 | export interface IUserData {
35 | id: number
36 | username: string
37 | password: string
38 | name: string
39 | email: string
40 | phone: string
41 | avatar: string
42 | introduction: string
43 | roles: string[]
44 | }
45 |
46 | export interface ISysRoleData {
47 | id: string
48 | roleName: string
49 | roleKey: string
50 | roleType: string
51 | isSys: number
52 | remarks: string
53 | routes: Array
54 | }
--------------------------------------------------------------------------------
/src/api/users.ts:
--------------------------------------------------------------------------------
1 | import request from '@/utils/request'
2 |
3 | export const getUsers = (params: any) =>
4 | request({
5 | url: '/users',
6 | method: 'get',
7 | params
8 | })
9 |
10 | export const getUserInfo = (data: any) =>
11 | request({
12 | url: '/users/info',
13 | method: 'post',
14 | data
15 | })
16 |
17 | export const getUserByName = (username: string) =>
18 | request({
19 | url: `/users/${username}`,
20 | method: 'get'
21 | })
22 |
23 | export const updateUser = (username: string, data: any) =>
24 | request({
25 | url: `/users/${username}`,
26 | method: 'put',
27 | data
28 | })
29 |
30 | export const deleteUser = (username: string) =>
31 | request({
32 | url: `/users/${username}`,
33 | method: 'delete'
34 | })
35 |
36 | export const login = (data: any) =>
37 | request({
38 | url: '/users/login',
39 | method: 'post',
40 | data
41 | })
42 |
43 | export const logout = () =>
44 | request({
45 | url: '/users/logout',
46 | method: 'post'
47 | })
48 |
49 | export const register = (data: any) =>
50 | request({
51 | url: '/users/register',
52 | method: 'post',
53 | data
54 | })
55 |
--------------------------------------------------------------------------------
/src/api/usualWebsite/index.ts:
--------------------------------------------------------------------------------
1 | /*
2 | * @Author: your name
3 | * @Date: 2021-10-06 16:13:28
4 | * @LastEditTime: 2021-10-06 16:14:55
5 | * @LastEditors: your name
6 | * @Description: In User Settings Edit
7 | * @FilePath: \vueAndTsAndKoa2\src\api\usualWebsite\index.ts
8 | */
9 | import request from '@/utils/request'
10 |
11 |
12 | /**
13 | * 查询
14 | * @param params 数据
15 | */
16 | export const get = (params: any) =>
17 | request({
18 | url: '/usualWebsite/',
19 | method: 'get',
20 | params
21 | })
22 |
23 |
24 |
25 | /**
26 | * 添加
27 | * @param data 数据
28 | */
29 | export const create = (data: any) =>
30 | request({
31 | url: '/usualWebsite/',
32 | method: 'post',
33 | data
34 | })
35 |
36 |
37 | /**
38 | * 更新
39 | * @param data 数据
40 | */
41 | export const update = (data: any) =>
42 | request({
43 | url: `/usualWebsite/`,
44 | method: 'put',
45 | data
46 | })
47 |
48 | /**
49 | * 删除
50 | * @param params 数据
51 | */
52 | export const del = (params: any) =>
53 | request({
54 | url: `/usualWebsite/`,
55 | method: 'delete',
56 | params
57 | })
58 |
--------------------------------------------------------------------------------
/src/api/usualWebsite/types.ts:
--------------------------------------------------------------------------------
1 | /**
2 | * 代办事项接口
3 | */
4 | export interface IAgentEvent {
5 | id: string
6 | serialNum: number
7 | title: string
8 | content: string
9 | type: number
10 | agent: string
11 | schedule: string
12 | noticeWay:number
13 | contact: string
14 | startTime: string
15 | endTime: string
16 | remarks: string
17 | }
18 |
19 |
20 |
21 | export interface IRoutesTreeData {
22 | children: IRoutesTreeData[]
23 | title: string
24 | path: string
25 | }
26 |
27 |
28 | export interface ISysUserData {
29 | id: string
30 | userName: string
31 | photo: string
32 | phone: string
33 | roles: string
34 | token: string
35 | }
36 |
37 |
38 |
39 |
--------------------------------------------------------------------------------
/src/assets/401-images/401.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/git-Dignity/vueAndTsAndKoa2/6eedd79d745ec72167505e8dc1d4917c2d4d888e/src/assets/401-images/401.gif
--------------------------------------------------------------------------------
/src/assets/404-images/404-cloud.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/git-Dignity/vueAndTsAndKoa2/6eedd79d745ec72167505e8dc1d4917c2d4d888e/src/assets/404-images/404-cloud.png
--------------------------------------------------------------------------------
/src/assets/404-images/404.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/git-Dignity/vueAndTsAndKoa2/6eedd79d745ec72167505e8dc1d4917c2d4d888e/src/assets/404-images/404.png
--------------------------------------------------------------------------------
/src/assets/custom-theme/fonts/element-icons.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/git-Dignity/vueAndTsAndKoa2/6eedd79d745ec72167505e8dc1d4917c2d4d888e/src/assets/custom-theme/fonts/element-icons.ttf
--------------------------------------------------------------------------------
/src/assets/custom-theme/fonts/element-icons.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/git-Dignity/vueAndTsAndKoa2/6eedd79d745ec72167505e8dc1d4917c2d4d888e/src/assets/custom-theme/fonts/element-icons.woff
--------------------------------------------------------------------------------
/src/assets/fzzj-hfxcjw.rar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/git-Dignity/vueAndTsAndKoa2/6eedd79d745ec72167505e8dc1d4917c2d4d888e/src/assets/fzzj-hfxcjw.rar
--------------------------------------------------------------------------------
/src/assets/fzzj-hfxcjw/.font-spider/FZZJ-HFXCJW.TTF:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/git-Dignity/vueAndTsAndKoa2/6eedd79d745ec72167505e8dc1d4917c2d4d888e/src/assets/fzzj-hfxcjw/.font-spider/FZZJ-HFXCJW.TTF
--------------------------------------------------------------------------------
/src/assets/fzzj-hfxcjw/FZZJ-HFXCJW.TTF:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/git-Dignity/vueAndTsAndKoa2/6eedd79d745ec72167505e8dc1d4917c2d4d888e/src/assets/fzzj-hfxcjw/FZZJ-HFXCJW.TTF
--------------------------------------------------------------------------------
/src/assets/fzzj-hfxcjw/font.css:
--------------------------------------------------------------------------------
1 | @font-face {
2 | font-family: 'HFXCJW'; /* 重命名字体名 */
3 | src: url('FZZJ-HFXCJW.TTF');
4 | font-weight: normal;
5 | font-style: normal;
6 | }
--------------------------------------------------------------------------------
/src/cache/local/index.ts:
--------------------------------------------------------------------------------
1 | export const removeLocal = () =>{
2 | localStorage.clear();
3 | }
--------------------------------------------------------------------------------
/src/cache/session/index.ts:
--------------------------------------------------------------------------------
1 | export const removeSession = () =>{
2 | sessionStorage.clear();
3 | }
--------------------------------------------------------------------------------
/src/components/Button/README.md:
--------------------------------------------------------------------------------
1 | # 按钮组件
2 |
3 | * 加载按钮: @\components\Button\LoadingBtn.vue
--------------------------------------------------------------------------------
/src/components/Button/index.ts:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/git-Dignity/vueAndTsAndKoa2/6eedd79d745ec72167505e8dc1d4917c2d4d888e/src/components/Button/index.ts
--------------------------------------------------------------------------------
/src/components/Dialog/types/index.ts:
--------------------------------------------------------------------------------
1 |
2 | export interface IDialogData {
3 | title: string,
4 | show: boolean,
5 | width: string,
6 | center: boolean,
7 | isCloseModal: boolean,
8 | isShowSubmit: boolean,
9 | info: Array
10 | }
--------------------------------------------------------------------------------
/src/components/Global/README.md:
--------------------------------------------------------------------------------
1 | * 虽然说components文件下的都是全局组件
2 | * 而Global是全局引用,基础组件许多页面都会用到,将其设置成全局组件,其他地方就不必再引用了哦。
3 |
4 | * 新建一个文件 global 存放全局组件注册,在 main.js 引入
5 | * import appButton from '@/components/Global/index.vue'
6 | * Vue.component("app-button", appButton);
7 |
8 |
9 | * 在组件中就可以
10 |
11 |
--------------------------------------------------------------------------------
/src/components/Hamburger/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
6 |
11 |
12 |
13 |
14 |
28 |
29 |
38 |
--------------------------------------------------------------------------------
/src/components/HeadRadio/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
9 | {{ v }}
10 |
11 |
12 |
13 |
41 |
57 |
--------------------------------------------------------------------------------
/src/components/MarkdownEditor/default-options.ts:
--------------------------------------------------------------------------------
1 | // Doc: https://nhn.github.io/tui.editor/api/latest/ToastUIEditor.html#ToastUIEditor
2 | export default {
3 | previewStyle: 'vertical',
4 | usageStatistics: false,
5 | toolbarItems: [
6 | 'heading',
7 | 'bold',
8 | 'italic',
9 | 'strike',
10 | 'divider',
11 | 'hr',
12 | 'quote',
13 | 'divider',
14 | 'ul',
15 | 'ol',
16 | 'task',
17 | 'indent',
18 | 'outdent',
19 | 'divider',
20 | 'table',
21 | 'image',
22 | 'link',
23 | 'divider',
24 | 'code',
25 | 'codeblock'
26 | ]
27 | }
28 |
--------------------------------------------------------------------------------
/src/components/Screenfull/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 |
8 |
9 |
10 |
52 |
--------------------------------------------------------------------------------
/src/components/SearchAndFeatures/README.md:
--------------------------------------------------------------------------------
1 | 组件场景:主要放置页面的头部,进行搜索、功能按钮
--------------------------------------------------------------------------------
/src/components/SearchAndFeatures/index.ts:
--------------------------------------------------------------------------------
1 | import SearchFeatures from './SearchFeatures.vue'
2 |
3 | export default SearchFeatures
--------------------------------------------------------------------------------
/src/components/SearchAndFeatures/modules/SearchAndFetures.ts:
--------------------------------------------------------------------------------
1 | import { IDialogData } from '@/components/Dialog/types/index'
2 |
3 |
4 |
5 |
6 | class SearchAndFetures {
7 | childrenDialogData: IDialogData;
8 | tHeader: Array;
9 | constructor(childrenDialogData: IDialogData) {
10 | this.childrenDialogData = childrenDialogData;
11 | this.tHeader = ['开始时间','id', '通知方式', '结束时间', '标题', '类型;postpone:延后)', '内容', '备注'];
12 | }
13 | /**
14 | *
15 | * @param title 对话框标题
16 | * @param isShowSubmit 是否显示提交取消按钮
17 | * @param isCloseModal 是否可点击对话框之外的空间,关闭对话框
18 | * @param show 是否显示对话框(默认是打开)
19 | */
20 | showDialog(title: string,isShowSubmit: boolean, isCloseModal: boolean, show: boolean = true ) {
21 | this.childrenDialogData.title = title;
22 | this.childrenDialogData.isShowSubmit = isShowSubmit;
23 | this.childrenDialogData.isCloseModal = isCloseModal;
24 |
25 | this.childrenDialogData.show = show;
26 | }
27 |
28 | }
29 |
30 |
31 |
32 |
33 | export {
34 | SearchAndFetures
35 | }
--------------------------------------------------------------------------------
/src/components/Table/README.md:
--------------------------------------------------------------------------------
1 | # 表格组件
2 |
3 | * 单行组件:src\components\Table\SingleLine.vue
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/src/components/Table/SingleLine.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
{{item.name}}
5 |
{{item.value || '--'}}
6 |
7 |
8 |
9 |
10 |
21 |
22 |
--------------------------------------------------------------------------------
/src/components/Table/index.ts:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/git-Dignity/vueAndTsAndKoa2/6eedd79d745ec72167505e8dc1d4917c2d4d888e/src/components/Table/index.ts
--------------------------------------------------------------------------------
/src/components/Tinymce/config.ts:
--------------------------------------------------------------------------------
1 | // Import plugins that you want to use
2 | // Detail plugins list see: https://www.tinymce.com/docs/plugins/
3 | // Custom builds see: https://www.tinymce.com/download/custom-builds/
4 | export const plugins = ['advlist anchor autolink autosave code codesample directionality emoticons fullscreen hr image imagetools insertdatetime link lists media nonbreaking noneditable pagebreak paste preview print save searchreplace spellchecker tabfocus table template textpattern visualblocks visualchars wordcount']
5 |
6 | // Here is the list of toolbar control components
7 | // Details see: https://www.tinymce.com/docs/advanced/editor-control-identifiers/#toolbarcontrols
8 | export const toolbar = ['searchreplace bold italic underline strikethrough alignleft aligncenter alignright outdent indent blockquote undo redo removeformat subscript superscript code codesample', 'hr bullist numlist link image charmap preview anchor pagebreak insertdatetime media table emoticons forecolor backcolor fullscreen']
9 |
--------------------------------------------------------------------------------
/src/const/index.ts:
--------------------------------------------------------------------------------
1 | const sys_name = '博客音乐';
2 |
3 |
4 |
5 |
6 | export {
7 | sys_name
8 | }
--------------------------------------------------------------------------------
/src/const/juhe.ts:
--------------------------------------------------------------------------------
1 | const key = "069589f49277521d8332b74d715e533a"
2 |
3 |
4 | export { key }
--------------------------------------------------------------------------------
/src/const/urls.ts:
--------------------------------------------------------------------------------
1 | /*
2 | * @Author: zemin zheng
3 | * @Date: 2021-09-01 00:22:47
4 | * @LastEditTime: 2021-09-02 22:10:05
5 | * @LastEditors: your name
6 | * @Description: 后台服务请求的头部信息的工具对象,方便后面要写死ip 或服务路径加前缀等事情,地址后都要加 '/'
7 | * @FilePath: \vue-typescript-admin-template-master\src\const\urls.js
8 | */
9 | export const appSvc = "/appsvc/"; // 音乐博客后台服务koa2
10 | export const javaSvc = "/javaSvc"; // Java后台服务
11 |
--------------------------------------------------------------------------------
/src/directives/index.ts:
--------------------------------------------------------------------------------
1 | export * from './clipboard'
2 | export * from './el-draggable-dialog'
3 | export * from './permission'
4 | export * from './waves'
5 |
--------------------------------------------------------------------------------
/src/directives/permission/index.ts:
--------------------------------------------------------------------------------
1 | import { DirectiveOptions } from 'vue'
2 | import { UserModule } from '@/store/modules/user'
3 |
4 | export const permission: DirectiveOptions = {
5 | inserted(el, binding) {
6 | const { value } = binding
7 | const roles = UserModule.roles
8 | if (value && value instanceof Array && value.length > 0) {
9 | const permissionRoles = value
10 | const hasPermission = roles.some(role => {
11 | return permissionRoles.includes(role)
12 | })
13 | if (!hasPermission) {
14 | el.parentNode && el.parentNode.removeChild(el)
15 | }
16 | } else {
17 | throw new Error('need roles! Like v-permission="[\'admin\',\'editor\']"')
18 | }
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/src/directives/waves/waves.css:
--------------------------------------------------------------------------------
1 | .waves-ripple {
2 | position: absolute;
3 | border-radius: 100%;
4 | background-color: rgba(0, 0, 0, 0.15);
5 | background-clip: padding-box;
6 | pointer-events: none;
7 | -webkit-user-select: none;
8 | -moz-user-select: none;
9 | -ms-user-select: none;
10 | user-select: none;
11 | -webkit-transform: scale(0);
12 | -ms-transform: scale(0);
13 | transform: scale(0);
14 | opacity: 1;
15 | }
16 |
17 | .waves-ripple.z-active {
18 | opacity: 0;
19 | -webkit-transform: scale(2);
20 | -ms-transform: scale(2);
21 | transform: scale(2);
22 | -webkit-transition: opacity 1.2s ease-out, -webkit-transform 0.6s ease-out;
23 | transition: opacity 1.2s ease-out, -webkit-transform 0.6s ease-out;
24 | transition: opacity 1.2s ease-out, transform 0.6s ease-out;
25 | transition: opacity 1.2s ease-out, transform 0.6s ease-out, -webkit-transform 0.6s ease-out;
26 | }
--------------------------------------------------------------------------------
/src/eventBus/index.ts:
--------------------------------------------------------------------------------
1 | import Vue from 'vue';
2 | export const EventBus = new Vue()
3 |
4 |
5 |
6 | // 父组件清除子组件数据
7 | // import {EventBus} from "@/eventBus/index";
8 | // EventBus.$emit("clear", true);
9 |
10 | //子组件拿到clear执行清除数据
11 | // EventBus.$on("clear", msg => {
12 | // console.log(msg);
13 | // if (msg) {
14 | // this.parentFileData = [];
15 | // this.fileList = [];
16 | // // 用完之后便销毁
17 | // EventBus.$off('clear', {})
18 | // }
19 | // });
--------------------------------------------------------------------------------
/src/eventBus/modules/clearEventBus.ts:
--------------------------------------------------------------------------------
1 | import { EventBus } from "@/eventBus/index";
2 | const objectTmp: any = {};
3 |
4 |
5 |
6 |
7 |
8 | export const clearEventBus = (data: string) => {
9 | EventBus.$off(data, objectTmp); // 用完之后便销毁
10 | }
--------------------------------------------------------------------------------
/src/filters/index.ts:
--------------------------------------------------------------------------------
1 | // Set utils function parseTime to filter
2 | export { parseTime } from '@/utils'
3 |
4 | // Filter for article status
5 | export const articleStatusFilter = (status: string) => {
6 | const statusMap: { [key: string]: string } = {
7 | published: 'success',
8 | draft: 'info',
9 | deleted: 'danger'
10 | }
11 | return statusMap[status]
12 | }
13 |
14 | // Filter to uppercase the first character
15 | export const uppercaseFirstChar = (str: string) => {
16 | return str.charAt(0).toUpperCase() + str.slice(1)
17 | }
18 |
19 | // 千分位过滤器
20 | // 使用:{{ ssss | thousandBitSeparator }}
21 | export const thousandBitSeparator = (value: string) => {
22 | return value && (value.toString().indexOf('.') !== -1 ?
23 | value.toString().replace(/(\d)(?=(\d{3})+\.)/g, function ($0, $1) {
24 | return $1 + ',';
25 | }) :
26 | value.toString().replace(/(\d)(?=(\d{3})+$)/g, function ($0, $1) {
27 | return $1 + ',';
28 | }));
29 | }
30 |
--------------------------------------------------------------------------------
/src/globals.d.ts:
--------------------------------------------------------------------------------
1 | declare module 'globals'
--------------------------------------------------------------------------------
/src/icons/components/404.ts:
--------------------------------------------------------------------------------
1 | /* eslint-disable */
2 | /* tslint:disable */
3 | // @ts-ignore
4 | import icon from 'vue-svgicon'
5 | icon.register({
6 | '404': {
7 | width: 128,
8 | height: 128,
9 | viewBox: '0 0 128 128',
10 | data: ''
11 | }
12 | })
13 |
--------------------------------------------------------------------------------
/src/icons/components/back-top.ts:
--------------------------------------------------------------------------------
1 | /* eslint-disable */
2 | /* tslint:disable */
3 | // @ts-ignore
4 | import icon from 'vue-svgicon'
5 | icon.register({
6 | 'back-top': {
7 | width: 128,
8 | height: 128,
9 | viewBox: '0 0 128 128',
10 | data: ''
11 | }
12 | })
13 |
--------------------------------------------------------------------------------
/src/icons/components/bug.ts:
--------------------------------------------------------------------------------
1 | /* eslint-disable */
2 | /* tslint:disable */
3 | // @ts-ignore
4 | import icon from 'vue-svgicon'
5 | icon.register({
6 | 'bug': {
7 | width: 128,
8 | height: 128,
9 | viewBox: '0 0 128 128',
10 | data: ''
11 | }
12 | })
13 |
--------------------------------------------------------------------------------
/src/icons/components/chart.ts:
--------------------------------------------------------------------------------
1 | /* eslint-disable */
2 | /* tslint:disable */
3 | // @ts-ignore
4 | import icon from 'vue-svgicon'
5 | icon.register({
6 | 'chart': {
7 | width: 128,
8 | height: 128,
9 | viewBox: '0 0 128 128',
10 | data: ''
11 | }
12 | })
13 |
--------------------------------------------------------------------------------
/src/icons/components/clipboard.ts:
--------------------------------------------------------------------------------
1 | /* eslint-disable */
2 | /* tslint:disable */
3 | // @ts-ignore
4 | import icon from 'vue-svgicon'
5 | icon.register({
6 | 'clipboard': {
7 | width: 128,
8 | height: 128,
9 | viewBox: '0 0 128 128',
10 | data: ''
11 | }
12 | })
13 |
--------------------------------------------------------------------------------
/src/icons/components/component.ts:
--------------------------------------------------------------------------------
1 | /* eslint-disable */
2 | /* tslint:disable */
3 | // @ts-ignore
4 | import icon from 'vue-svgicon'
5 | icon.register({
6 | 'component': {
7 | width: 128,
8 | height: 128,
9 | viewBox: '0 0 128 128',
10 | data: ''
11 | }
12 | })
13 |
--------------------------------------------------------------------------------
/src/icons/components/documentation.ts:
--------------------------------------------------------------------------------
1 | /* eslint-disable */
2 | /* tslint:disable */
3 | // @ts-ignore
4 | import icon from 'vue-svgicon'
5 | icon.register({
6 | 'documentation': {
7 | width: 128,
8 | height: 128,
9 | viewBox: '0 0 128 128',
10 | data: ''
11 | }
12 | })
13 |
--------------------------------------------------------------------------------
/src/icons/components/drag.ts:
--------------------------------------------------------------------------------
1 | /* eslint-disable */
2 | /* tslint:disable */
3 | // @ts-ignore
4 | import icon from 'vue-svgicon'
5 | icon.register({
6 | 'drag': {
7 | width: 128,
8 | height: 128,
9 | viewBox: '0 0 128 128',
10 | data: ''
11 | }
12 | })
13 |
--------------------------------------------------------------------------------
/src/icons/components/edit.ts:
--------------------------------------------------------------------------------
1 | /* eslint-disable */
2 | /* tslint:disable */
3 | // @ts-ignore
4 | import icon from 'vue-svgicon'
5 | icon.register({
6 | 'edit': {
7 | width: 128,
8 | height: 128,
9 | viewBox: '0 0 128 128',
10 | data: ''
11 | }
12 | })
13 |
--------------------------------------------------------------------------------
/src/icons/components/education.ts:
--------------------------------------------------------------------------------
1 | /* eslint-disable */
2 | /* tslint:disable */
3 | // @ts-ignore
4 | import icon from 'vue-svgicon'
5 | icon.register({
6 | 'education': {
7 | width: 128,
8 | height: 128,
9 | viewBox: '0 0 128 128',
10 | data: ''
11 | }
12 | })
13 |
--------------------------------------------------------------------------------
/src/icons/components/email.ts:
--------------------------------------------------------------------------------
1 | /* eslint-disable */
2 | /* tslint:disable */
3 | // @ts-ignore
4 | import icon from 'vue-svgicon'
5 | icon.register({
6 | 'email': {
7 | width: 128,
8 | height: 96,
9 | viewBox: '0 0 128 96',
10 | data: ''
11 | }
12 | })
13 |
--------------------------------------------------------------------------------
/src/icons/components/example.ts:
--------------------------------------------------------------------------------
1 | /* eslint-disable */
2 | /* tslint:disable */
3 | // @ts-ignore
4 | import icon from 'vue-svgicon'
5 | icon.register({
6 | 'example': {
7 | width: 128,
8 | height: 128,
9 | viewBox: '0 0 128 128',
10 | data: ''
11 | }
12 | })
13 |
--------------------------------------------------------------------------------
/src/icons/components/excel.ts:
--------------------------------------------------------------------------------
1 | /* eslint-disable */
2 | /* tslint:disable */
3 | // @ts-ignore
4 | import icon from 'vue-svgicon'
5 | icon.register({
6 | 'excel': {
7 | width: 128,
8 | height: 128,
9 | viewBox: '0 0 128 128',
10 | data: ''
11 | }
12 | })
13 |
--------------------------------------------------------------------------------
/src/icons/components/exit-fullscreen.ts:
--------------------------------------------------------------------------------
1 | /* eslint-disable */
2 | /* tslint:disable */
3 | // @ts-ignore
4 | import icon from 'vue-svgicon'
5 | icon.register({
6 | 'exit-fullscreen': {
7 | width: 128,
8 | height: 128,
9 | viewBox: '0 0 128 128',
10 | data: ''
11 | }
12 | })
13 |
--------------------------------------------------------------------------------
/src/icons/components/eye-off.ts:
--------------------------------------------------------------------------------
1 | /* eslint-disable */
2 | /* tslint:disable */
3 | // @ts-ignore
4 | import icon from 'vue-svgicon'
5 | icon.register({
6 | 'eye-off': {
7 | width: 128,
8 | height: 64,
9 | viewBox: '0 0 128 64',
10 | data: ''
11 | }
12 | })
13 |
--------------------------------------------------------------------------------
/src/icons/components/eye-on.ts:
--------------------------------------------------------------------------------
1 | /* eslint-disable */
2 | /* tslint:disable */
3 | // @ts-ignore
4 | import icon from 'vue-svgicon'
5 | icon.register({
6 | 'eye-on': {
7 | width: 128,
8 | height: 128,
9 | viewBox: '0 0 1024 1024',
10 | data: ''
11 | }
12 | })
13 |
--------------------------------------------------------------------------------
/src/icons/components/fullscreen.ts:
--------------------------------------------------------------------------------
1 | /* eslint-disable */
2 | /* tslint:disable */
3 | // @ts-ignore
4 | import icon from 'vue-svgicon'
5 | icon.register({
6 | 'fullscreen': {
7 | width: 128,
8 | height: 128,
9 | viewBox: '0 0 128 128',
10 | data: ''
11 | }
12 | })
13 |
--------------------------------------------------------------------------------
/src/icons/components/guide-2.ts:
--------------------------------------------------------------------------------
1 | /* eslint-disable */
2 | /* tslint:disable */
3 | // @ts-ignore
4 | import icon from 'vue-svgicon'
5 | icon.register({
6 | 'guide-2': {
7 | width: 1000,
8 | height: 1000,
9 | viewBox: '0 0 1000 1000',
10 | data: ''
11 | }
12 | })
13 |
--------------------------------------------------------------------------------
/src/icons/components/guide.ts:
--------------------------------------------------------------------------------
1 | /* eslint-disable */
2 | /* tslint:disable */
3 | // @ts-ignore
4 | import icon from 'vue-svgicon'
5 | icon.register({
6 | 'guide': {
7 | width: 128,
8 | height: 128,
9 | viewBox: '0 0 128 128',
10 | data: ''
11 | }
12 | })
13 |
--------------------------------------------------------------------------------
/src/icons/components/hamburger.ts:
--------------------------------------------------------------------------------
1 | /* eslint-disable */
2 | /* tslint:disable */
3 | // @ts-ignore
4 | import icon from 'vue-svgicon'
5 | icon.register({
6 | 'hamburger': {
7 | width: 64,
8 | height: 64,
9 | viewBox: '0 0 1024 1024',
10 | data: ''
11 | }
12 | })
13 |
--------------------------------------------------------------------------------
/src/icons/components/icon.ts:
--------------------------------------------------------------------------------
1 | /* eslint-disable */
2 | /* tslint:disable */
3 | // @ts-ignore
4 | import icon from 'vue-svgicon'
5 | icon.register({
6 | 'icon': {
7 | width: 128,
8 | height: 128,
9 | viewBox: '0 0 128 128',
10 | data: ''
11 | }
12 | })
13 |
--------------------------------------------------------------------------------
/src/icons/components/index.ts:
--------------------------------------------------------------------------------
1 | /* tslint:disable */
2 | import './404'
3 | import './back-top'
4 | import './bug'
5 | import './chart'
6 | import './clipboard'
7 | import './component'
8 | import './dashboard'
9 | import './documentation'
10 | import './drag'
11 | import './edit'
12 | import './education'
13 | import './email'
14 | import './example'
15 | import './excel'
16 | import './exit-fullscreen'
17 | import './eye-off'
18 | import './eye-on'
19 | import './form'
20 | import './fullscreen'
21 | import './guide-2'
22 | import './guide'
23 | import './hamburger'
24 | import './icon'
25 | import './international'
26 | import './language'
27 | import './like'
28 | import './link'
29 | import './list'
30 | import './lock'
31 | import './message'
32 | import './money'
33 | import './music'
34 | import './nested'
35 | import './password'
36 | import './pdf'
37 | import './people'
38 | import './peoples'
39 | import './qq'
40 | import './search'
41 | import './shopping'
42 | import './singer-song-list'
43 | import './singer-song-lyric'
44 | import './singer'
45 | import './size'
46 | import './skill'
47 | import './star'
48 | import './tab'
49 | import './table'
50 | import './theme'
51 | import './tree-table'
52 | import './tree'
53 | import './user'
54 | import './wechat'
55 | import './zip'
--------------------------------------------------------------------------------
/src/icons/components/international.ts:
--------------------------------------------------------------------------------
1 | /* eslint-disable */
2 | /* tslint:disable */
3 | // @ts-ignore
4 | import icon from 'vue-svgicon'
5 | icon.register({
6 | 'international': {
7 | width: 128,
8 | height: 128,
9 | viewBox: '0 0 128 128',
10 | data: ''
11 | }
12 | })
13 |
--------------------------------------------------------------------------------
/src/icons/components/language.ts:
--------------------------------------------------------------------------------
1 | /* eslint-disable */
2 | /* tslint:disable */
3 | // @ts-ignore
4 | import icon from 'vue-svgicon'
5 | icon.register({
6 | 'language': {
7 | width: 128,
8 | height: 128,
9 | viewBox: '0 0 128 128',
10 | data: ''
11 | }
12 | })
13 |
--------------------------------------------------------------------------------
/src/icons/components/like.ts:
--------------------------------------------------------------------------------
1 | /* eslint-disable */
2 | /* tslint:disable */
3 | // @ts-ignore
4 | import icon from 'vue-svgicon'
5 | icon.register({
6 | 'like': {
7 | width: 24,
8 | height: 24,
9 | viewBox: '0 0 24 24',
10 | data: ''
11 | }
12 | })
13 |
--------------------------------------------------------------------------------
/src/icons/components/link.ts:
--------------------------------------------------------------------------------
1 | /* eslint-disable */
2 | /* tslint:disable */
3 | // @ts-ignore
4 | import icon from 'vue-svgicon'
5 | icon.register({
6 | 'link': {
7 | width: 128,
8 | height: 128,
9 | viewBox: '0 0 128 128',
10 | data: ''
11 | }
12 | })
13 |
--------------------------------------------------------------------------------
/src/icons/components/list.ts:
--------------------------------------------------------------------------------
1 | /* eslint-disable */
2 | /* tslint:disable */
3 | // @ts-ignore
4 | import icon from 'vue-svgicon'
5 | icon.register({
6 | 'list': {
7 | width: 128,
8 | height: 128,
9 | viewBox: '0 0 128 128',
10 | data: ''
11 | }
12 | })
13 |
--------------------------------------------------------------------------------
/src/icons/components/lock.ts:
--------------------------------------------------------------------------------
1 | /* eslint-disable */
2 | /* tslint:disable */
3 | // @ts-ignore
4 | import icon from 'vue-svgicon'
5 | icon.register({
6 | 'lock': {
7 | width: 128,
8 | height: 128,
9 | viewBox: '0 0 128 128',
10 | data: ''
11 | }
12 | })
13 |
--------------------------------------------------------------------------------
/src/icons/components/message.ts:
--------------------------------------------------------------------------------
1 | /* eslint-disable */
2 | /* tslint:disable */
3 | // @ts-ignore
4 | import icon from 'vue-svgicon'
5 | icon.register({
6 | 'message': {
7 | width: 128,
8 | height: 128,
9 | viewBox: '0 0 128 128',
10 | data: ''
11 | }
12 | })
13 |
--------------------------------------------------------------------------------
/src/icons/components/money.ts:
--------------------------------------------------------------------------------
1 | /* eslint-disable */
2 | /* tslint:disable */
3 | // @ts-ignore
4 | import icon from 'vue-svgicon'
5 | icon.register({
6 | 'money': {
7 | width: 128,
8 | height: 128,
9 | viewBox: '0 0 128 128',
10 | data: ''
11 | }
12 | })
13 |
--------------------------------------------------------------------------------
/src/icons/components/music.ts:
--------------------------------------------------------------------------------
1 | /* eslint-disable */
2 | /* tslint:disable */
3 | // @ts-ignore
4 | import icon from 'vue-svgicon'
5 | icon.register({
6 | 'music': {
7 | width: 128,
8 | height: 128,
9 | viewBox: '0 0 1024 1024',
10 | data: ''
11 | }
12 | })
13 |
--------------------------------------------------------------------------------
/src/icons/components/nested.ts:
--------------------------------------------------------------------------------
1 | /* eslint-disable */
2 | /* tslint:disable */
3 | // @ts-ignore
4 | import icon from 'vue-svgicon'
5 | icon.register({
6 | 'nested': {
7 | width: 128,
8 | height: 128,
9 | viewBox: '0 0 128 128',
10 | data: ''
11 | }
12 | })
13 |
--------------------------------------------------------------------------------
/src/icons/components/password.ts:
--------------------------------------------------------------------------------
1 | /* eslint-disable */
2 | /* tslint:disable */
3 | // @ts-ignore
4 | import icon from 'vue-svgicon'
5 | icon.register({
6 | 'password': {
7 | width: 128,
8 | height: 128,
9 | viewBox: '0 0 128 128',
10 | data: ''
11 | }
12 | })
13 |
--------------------------------------------------------------------------------
/src/icons/components/pdf.ts:
--------------------------------------------------------------------------------
1 | /* eslint-disable */
2 | /* tslint:disable */
3 | // @ts-ignore
4 | import icon from 'vue-svgicon'
5 | icon.register({
6 | 'pdf': {
7 | width: 128,
8 | height: 128,
9 | viewBox: '0 0 1024 1024',
10 | data: ''
11 | }
12 | })
13 |
--------------------------------------------------------------------------------
/src/icons/components/people.ts:
--------------------------------------------------------------------------------
1 | /* eslint-disable */
2 | /* tslint:disable */
3 | // @ts-ignore
4 | import icon from 'vue-svgicon'
5 | icon.register({
6 | 'people': {
7 | width: 128,
8 | height: 128,
9 | viewBox: '0 0 128 128',
10 | data: ''
11 | }
12 | })
13 |
--------------------------------------------------------------------------------
/src/icons/components/peoples.ts:
--------------------------------------------------------------------------------
1 | /* eslint-disable */
2 | /* tslint:disable */
3 | // @ts-ignore
4 | import icon from 'vue-svgicon'
5 | icon.register({
6 | 'peoples': {
7 | width: 128,
8 | height: 128,
9 | viewBox: '0 0 128 128',
10 | data: ''
11 | }
12 | })
13 |
--------------------------------------------------------------------------------
/src/icons/components/search.ts:
--------------------------------------------------------------------------------
1 | /* eslint-disable */
2 | /* tslint:disable */
3 | // @ts-ignore
4 | import icon from 'vue-svgicon'
5 | icon.register({
6 | 'search': {
7 | width: 128,
8 | height: 128,
9 | viewBox: '0 0 128 128',
10 | data: ''
11 | }
12 | })
13 |
--------------------------------------------------------------------------------
/src/icons/components/size.ts:
--------------------------------------------------------------------------------
1 | /* eslint-disable */
2 | /* tslint:disable */
3 | // @ts-ignore
4 | import icon from 'vue-svgicon'
5 | icon.register({
6 | 'size': {
7 | width: 128,
8 | height: 128,
9 | viewBox: '0 0 128 128',
10 | data: ''
11 | }
12 | })
13 |
--------------------------------------------------------------------------------
/src/icons/components/skill.ts:
--------------------------------------------------------------------------------
1 | /* eslint-disable */
2 | /* tslint:disable */
3 | // @ts-ignore
4 | import icon from 'vue-svgicon'
5 | icon.register({
6 | 'skill': {
7 | width: 128,
8 | height: 128,
9 | viewBox: '0 0 128 128',
10 | data: ''
11 | }
12 | })
13 |
--------------------------------------------------------------------------------
/src/icons/components/star.ts:
--------------------------------------------------------------------------------
1 | /* eslint-disable */
2 | /* tslint:disable */
3 | // @ts-ignore
4 | import icon from 'vue-svgicon'
5 | icon.register({
6 | 'star': {
7 | width: 128,
8 | height: 128,
9 | viewBox: '0 0 128 128',
10 | data: ''
11 | }
12 | })
13 |
--------------------------------------------------------------------------------
/src/icons/components/tab.ts:
--------------------------------------------------------------------------------
1 | /* eslint-disable */
2 | /* tslint:disable */
3 | // @ts-ignore
4 | import icon from 'vue-svgicon'
5 | icon.register({
6 | 'tab': {
7 | width: 128,
8 | height: 128,
9 | viewBox: '0 0 128 128',
10 | data: ''
11 | }
12 | })
13 |
--------------------------------------------------------------------------------
/src/icons/components/table.ts:
--------------------------------------------------------------------------------
1 | /* eslint-disable */
2 | /* tslint:disable */
3 | // @ts-ignore
4 | import icon from 'vue-svgicon'
5 | icon.register({
6 | 'table': {
7 | width: 128,
8 | height: 128,
9 | viewBox: '0 0 128 128',
10 | data: ''
11 | }
12 | })
13 |
--------------------------------------------------------------------------------
/src/icons/components/theme.ts:
--------------------------------------------------------------------------------
1 | /* eslint-disable */
2 | /* tslint:disable */
3 | // @ts-ignore
4 | import icon from 'vue-svgicon'
5 | icon.register({
6 | 'theme': {
7 | width: 128,
8 | height: 128,
9 | viewBox: '0 0 128 128',
10 | data: ''
11 | }
12 | })
13 |
--------------------------------------------------------------------------------
/src/icons/components/tree-table.ts:
--------------------------------------------------------------------------------
1 | /* eslint-disable */
2 | /* tslint:disable */
3 | // @ts-ignore
4 | import icon from 'vue-svgicon'
5 | icon.register({
6 | 'tree-table': {
7 | width: 128,
8 | height: 128,
9 | viewBox: '0 0 128 128',
10 | data: ''
11 | }
12 | })
13 |
--------------------------------------------------------------------------------
/src/icons/components/user.ts:
--------------------------------------------------------------------------------
1 | /* eslint-disable */
2 | /* tslint:disable */
3 | // @ts-ignore
4 | import icon from 'vue-svgicon'
5 | icon.register({
6 | 'user': {
7 | width: 130,
8 | height: 130,
9 | viewBox: '0 0 130 130',
10 | data: ''
11 | }
12 | })
13 |
--------------------------------------------------------------------------------
/src/icons/components/wechat.ts:
--------------------------------------------------------------------------------
1 | /* eslint-disable */
2 | /* tslint:disable */
3 | // @ts-ignore
4 | import icon from 'vue-svgicon'
5 | icon.register({
6 | 'wechat': {
7 | width: 128,
8 | height: 110,
9 | viewBox: '0 0 128 110',
10 | data: ''
11 | }
12 | })
13 |
--------------------------------------------------------------------------------
/src/icons/components/zip.ts:
--------------------------------------------------------------------------------
1 | /* eslint-disable */
2 | /* tslint:disable */
3 | // @ts-ignore
4 | import icon from 'vue-svgicon'
5 | icon.register({
6 | 'zip': {
7 | width: 128,
8 | height: 128,
9 | viewBox: '0 0 128 128',
10 | data: ''
11 | }
12 | })
13 |
--------------------------------------------------------------------------------
/src/icons/svg/404.svg:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/src/icons/svg/back-top.svg:
--------------------------------------------------------------------------------
1 |
4 |
5 |
--------------------------------------------------------------------------------
/src/icons/svg/bug.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/src/icons/svg/chart.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/src/icons/svg/clipboard.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/src/icons/svg/component.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/src/icons/svg/dashboard.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/src/icons/svg/documentation.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/src/icons/svg/drag.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/src/icons/svg/edit.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/src/icons/svg/education.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/src/icons/svg/email.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/src/icons/svg/example.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/src/icons/svg/excel.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/src/icons/svg/exit-fullscreen.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/src/icons/svg/eye-off.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/src/icons/svg/eye-on.svg:
--------------------------------------------------------------------------------
1 |
7 |
--------------------------------------------------------------------------------
/src/icons/svg/fullscreen.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/src/icons/svg/guide-2.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/src/icons/svg/guide.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/src/icons/svg/hamburger.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/src/icons/svg/icon.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/src/icons/svg/international.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/src/icons/svg/language.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/src/icons/svg/like.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/src/icons/svg/link.svg:
--------------------------------------------------------------------------------
1 |
6 |
--------------------------------------------------------------------------------
/src/icons/svg/list.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/src/icons/svg/lock.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/src/icons/svg/message.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/src/icons/svg/money.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/src/icons/svg/music.svg:
--------------------------------------------------------------------------------
1 |
4 |
5 |
--------------------------------------------------------------------------------
/src/icons/svg/nested.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/src/icons/svg/password.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/src/icons/svg/pdf.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/src/icons/svg/people.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/src/icons/svg/peoples.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/src/icons/svg/search.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/src/icons/svg/size.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/src/icons/svg/skill.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/src/icons/svg/star.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/src/icons/svg/tab.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/src/icons/svg/table.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/src/icons/svg/theme.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/src/icons/svg/tree-table.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/src/icons/svg/tree.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/src/icons/svg/user.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/src/icons/svg/wechat.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/src/icons/svg/zip.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/src/layout/components/AppMain.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
31 |
32 |
58 |
--------------------------------------------------------------------------------
/src/layout/components/Sidebar/SidebarItemLink.vue:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
10 |
14 |
15 |
16 |
17 |
18 |
31 |
--------------------------------------------------------------------------------
/src/layout/components/index.ts:
--------------------------------------------------------------------------------
1 | export { default as AppMain } from './AppMain.vue'
2 | export { default as Navbar } from './Navbar/index.vue'
3 | export { default as Settings } from './Settings/index.vue'
4 | export { default as Sidebar } from './Sidebar/index.vue'
5 | export { default as TagsView } from './TagsView/index.vue'
6 |
--------------------------------------------------------------------------------
/src/pwa/service-worker.js:
--------------------------------------------------------------------------------
1 | // This is the code piece that GenerateSW mode can't provide for us.
2 | // This code listens for the user's confirmation to update the app.
3 | self.addEventListener('message', (e) => {
4 | if (e.data) {
5 | if (e.data === 'skipWaiting') {
6 | self.skipWaiting()
7 | }
8 | }
9 | })
10 |
11 | /* eslint-disable no-undef */
12 | workbox.core.clientsClaim()
13 | workbox.precaching.precacheAndRoute(self.__precacheManifest || [])
14 |
--------------------------------------------------------------------------------
/src/settings.ts:
--------------------------------------------------------------------------------
1 | interface ISettings {
2 | title: string // Overrides the default title
3 | showSettings: boolean // Controls settings panel display
4 | showTagsView: boolean // Controls tagsview display
5 | showSidebarLogo: boolean // Controls siderbar logo display
6 | fixedHeader: boolean // If true, will fix the header component
7 | errorLog: string[] // The env to enable the errorlog component, default 'production' only
8 | sidebarTextTheme: boolean // If true, will change active text color for sidebar based on theme
9 | devServerPort: number // Port number for webpack-dev-server
10 | mockServerPort: number // Port number for mock server
11 | }
12 |
13 | // You can customize below settings :)
14 | const settings: ISettings = {
15 | title: '音乐博客',
16 | showSettings: true,
17 | showTagsView: true,
18 | fixedHeader: false,
19 | showSidebarLogo: false,
20 | errorLog: ['production'],
21 | sidebarTextTheme: true,
22 | devServerPort: 9527,
23 | mockServerPort: 9548
24 | }
25 |
26 | export default settings
27 |
--------------------------------------------------------------------------------
/src/shims-vue.d.ts:
--------------------------------------------------------------------------------
1 |
2 | declare module '*.scss' {
3 | const str: string;
4 | export default str;
5 | }
6 |
7 | declare module '*.css' {
8 | const str: string;
9 | export default str;
10 | }
11 |
12 | declare module '*.html' {
13 | const str: string;
14 | export default str;
15 | }
16 | declare module '*.json' {
17 | const value: any;
18 | export default value;
19 | }
20 |
21 |
22 |
23 | import Vue from 'vue';
24 | import VueRouter from 'vue-router';
25 | import { Route } from 'vue-router';
26 | import { Store } from 'vuex';
27 |
28 |
29 | // 扩充
30 | declare module 'vue/types/vue' {
31 | interface Vue {
32 | $router: VueRouter;
33 | $route: Route;
34 | $store: Store;
35 | $api: any;
36 | getVal: any;
37 | toVal: any;
38 | }
39 | }
--------------------------------------------------------------------------------
/src/shims.d.ts:
--------------------------------------------------------------------------------
1 | declare module '*.vue' {
2 | import Vue from 'vue'
3 | export default Vue
4 | }
5 |
6 | declare module 'element-ui/lib/locale/lang/*' {
7 | export const elementLocale: any
8 | }
9 |
10 | declare module '*.gif' {
11 | export const gif: any
12 | }
13 |
14 | declare module '*.ts' {
15 | export const ts: any
16 | }
17 |
18 | // TODO: remove this part after vue-count-to has its typescript file
19 | declare module 'vue-count-to'
20 |
21 | // TODO: remove this part after vuedraggable has its typescript file
22 | declare module 'vuedraggable'
23 |
24 | // TODO: remove this part after vue2-dropzone has its typescript file
25 | declare module 'vue2-dropzone'
26 |
27 | // TODO: remove this part after vue-image-crop-upload has its typescript file
28 | declare module 'vue-image-crop-upload'
29 |
30 | // TODO: remove this part after vue-splitpane has its typescript file
31 | declare module 'vue-splitpane'
32 |
--------------------------------------------------------------------------------
/src/store/index.ts:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import Vuex from 'vuex'
3 | import { IAppState } from './modules/app'
4 | import { IUserState } from './modules/user'
5 | import { ITagsViewState } from './modules/tags-view'
6 | import { IErrorLogState } from './modules/error-log'
7 | import { IPermissionState } from './modules/permission'
8 | import { ISettingsState } from './modules/settings'
9 | import { IMusicState } from './modules/music'
10 |
11 | Vue.use(Vuex)
12 |
13 | export interface IRootState {
14 | app: IAppState
15 | user: IUserState
16 | tagsView: ITagsViewState
17 | errorLog: IErrorLogState
18 | permission: IPermissionState
19 | settings: ISettingsState
20 | music: IMusicState
21 | }
22 |
23 | // Declare empty store first, dynamically register all modules later.
24 | export default new Vuex.Store({})
25 |
--------------------------------------------------------------------------------
/src/store/modules/error-log.ts:
--------------------------------------------------------------------------------
1 | import { VuexModule, Module, Mutation, Action, getModule } from 'vuex-module-decorators'
2 | import store from '@/store'
3 |
4 | interface IErrorLog {
5 | err: Error
6 | vm: any
7 | info: string
8 | url: string
9 | }
10 |
11 | export interface IErrorLogState {
12 | logs: IErrorLog[]
13 | }
14 |
15 | @Module({ dynamic: true, store, name: 'errorLog' })
16 | class ErrorLog extends VuexModule implements IErrorLogState {
17 | public logs: IErrorLog[] = []
18 |
19 | @Mutation
20 | private ADD_ERROR_LOG(log: IErrorLog) {
21 | this.logs.push(log)
22 | }
23 |
24 | @Mutation
25 | private CLEAR_ERROR_LOG() {
26 | this.logs.splice(0)
27 | }
28 |
29 | @Action
30 | public AddErrorLog(log: IErrorLog) {
31 | this.ADD_ERROR_LOG(log)
32 | }
33 |
34 | @Action
35 | public ClearErrorLog() {
36 | this.CLEAR_ERROR_LOG()
37 | }
38 | }
39 |
40 | export const ErrorLogModule = getModule(ErrorLog)
41 |
--------------------------------------------------------------------------------
/src/styles/_mixins.scss:
--------------------------------------------------------------------------------
1 | /* Mixins */
2 | @mixin clearfix {
3 | &:after {
4 | content: "";
5 | display: table;
6 | clear: both;
7 | }
8 | }
9 |
10 | @mixin rounded-corners($radius) {
11 | -moz-border-radius: $radius;
12 | -webkit-border-radius: $radius;
13 | border-radius: $radius;
14 |
15 | }
16 | @mixin transition{
17 | transition: height 0.2s;
18 | -o-transition: height 0.2s;
19 | -moz-transition: height 0.2s;
20 | -webkit-transition: height 0.2s;
21 |
22 | }
23 | @mixin fontFamily($fontfamily){
24 | font-family:$fontfamily;
25 | font-weight: bold;
26 | }
27 |
--------------------------------------------------------------------------------
/src/styles/_svgicon.scss:
--------------------------------------------------------------------------------
1 | /* Recommended css code for vue-svgicon */
2 | .svg-icon {
3 | display: inline-block;
4 | width: 16px;
5 | height: 16px;
6 | color: inherit;
7 | fill: none;
8 | stroke: currentColor;
9 | vertical-align: -0.15em;
10 | }
11 |
12 | .svg-fill {
13 | fill: currentColor;
14 | stroke: none;
15 | }
16 |
17 | .svg-up {
18 | transform: rotate(0deg);
19 | }
20 |
21 | .svg-right {
22 | transform: rotate(90deg);
23 | }
24 |
25 | .svg-down {
26 | transform: rotate(180deg);
27 | }
28 |
29 | .svg-left {
30 | transform: rotate(-90deg);
31 | }
32 |
--------------------------------------------------------------------------------
/src/styles/_transition.scss:
--------------------------------------------------------------------------------
1 | /* Global transition */
2 | // See https://vuejs.org/v2/guide/transitions.html for detail
3 |
4 | // fade
5 | .fade-enter-active,
6 | .fade-leave-active {
7 | transition: opacity 0.28s;
8 | }
9 |
10 | .fade-enter,
11 | .fade-leave-active {
12 | opacity: 0;
13 | }
14 |
15 | // fade-transform
16 | .fade-transform-leave-active,
17 | .fade-transform-enter-active {
18 | transition: all .5s;
19 | }
20 |
21 | .fade-transform-enter {
22 | opacity: 0;
23 | transform: translateX(-30px);
24 | }
25 |
26 | .fade-transform-leave-to {
27 | opacity: 0;
28 | transform: translateX(30px);
29 | }
30 |
31 | // breadcrumb
32 | .breadcrumb-enter-active,
33 | .breadcrumb-leave-active {
34 | transition: all .5s;
35 | }
36 |
37 | .breadcrumb-enter,
38 | .breadcrumb-leave-active {
39 | opacity: 0;
40 | transform: translateX(20px);
41 | }
42 |
43 | .breadcrumb-move {
44 | transition: all .5s;
45 | }
46 |
47 | .breadcrumb-leave-active {
48 | position: absolute;
49 | }
50 |
--------------------------------------------------------------------------------
/src/styles/_variables.scss:
--------------------------------------------------------------------------------
1 | /* Variables */
2 |
3 | // Base color
4 | $blue:#324157;
5 | $light-blue:#3A71A8;
6 | $red:#C03639;
7 | $pink: #E65D6E;
8 | $green: #30B08F;
9 | $tiffany: #4AB7BD;
10 | $yellow:#FEC171;
11 | $panGreen: #30B08F;
12 |
13 | // Sidebar
14 | $sideBarWidth: 210px;
15 | $subMenuBg:#1f2d3d;
16 | $subMenuHover:#001528;
17 | $subMenuActiveText:#f4f4f5;
18 | $menuBg:#304156;
19 | $menuText:#bfcbd9;
20 | $menuActiveText:#409EFF; // Also see settings.sidebarTextTheme
21 |
22 | // Login page
23 | $lightGray: #eee;
24 | $darkGray:#889aa4;
25 | $loginBg: #2d3a4b;
26 | $loginCursorColor: #fff;
27 |
28 | $textTitle: #00ad35; // 文字标题颜色
29 | $textIllustrate: #a2a8a2; // 标题下面字颜色(说明字体)
30 |
31 | // The :export directive is the magic sauce for webpack
32 | // https://mattferderer.com/use-sass-variables-in-typescript-and-javascript
33 | :export {
34 | menuBg: $menuBg;
35 | menuText: $menuText;
36 | menuActiveText: $menuActiveText;
37 | }
38 |
39 |
40 | // font-size
41 | $btnFontSize: 16px;
42 | $bodyFontSize: 16px;
43 |
--------------------------------------------------------------------------------
/src/styles/_variables.scss.d.ts:
--------------------------------------------------------------------------------
1 | export interface IScssVariables {
2 | menuBg: string
3 | menuText: string
4 | menuActiveText: string
5 | }
6 |
7 | export const variables: IScssVariables
8 |
9 | export default variables
10 |
--------------------------------------------------------------------------------
/src/styles/element-variables.scss:
--------------------------------------------------------------------------------
1 | /* Element Variables */
2 |
3 | // Override Element UI variables
4 | $--color-primary: #1890ff;
5 | $--color-success: #13ce66;
6 | $--color-warning: #FFBA00;
7 | $--color-danger: #ff4949;
8 | $--color-info: #5d5d5d;
9 | $--button-font-weight: 400;
10 | $--color-text-regular: #1f2d3d;
11 | $--border-color-light: #dfe4ed;
12 | $--border-color-lighter: #e6ebf5;
13 | $--table-border:1px solid#dfe6ec;
14 |
15 | // Icon font path, required
16 | $--font-path: '~element-ui/lib/theme-chalk/fonts';
17 |
18 | // Apply overrided variables in Element UI
19 | @import '~element-ui/packages/theme-chalk/src/index';
20 |
21 | // The :export directive is the magic sauce for webpack
22 | // https://mattferderer.com/use-sass-variables-in-typescript-and-javascript
23 | :export {
24 | theme: $--color-primary;
25 | }
26 |
--------------------------------------------------------------------------------
/src/styles/element-variables.scss.d.ts:
--------------------------------------------------------------------------------
1 | export interface IScssVariables {
2 | theme: string
3 | }
4 |
5 | export const variables: IScssVariables
6 |
7 | export default variables
8 |
--------------------------------------------------------------------------------
/src/utils/clipboard.ts:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import Clipboard from 'clipboard'
3 |
4 | export const clipboardSuccess = () =>
5 | Vue.prototype.$message({
6 | message: 'Copy successfully',
7 | type: 'success',
8 | duration: 1500
9 | })
10 |
11 | export const clipboardError = () =>
12 | Vue.prototype.$message({
13 | message: 'Copy failed',
14 | type: 'error'
15 | })
16 |
17 | export const handleClipboard = (text: string, event: MouseEvent) => {
18 | const clipboard = new Clipboard(event.target as Element, {
19 | text: () => text
20 | })
21 | clipboard.on('success', () => {
22 | clipboardSuccess()
23 | clipboard.destroy()
24 | })
25 | clipboard.on('error', () => {
26 | clipboardError()
27 | clipboard.destroy()
28 | });
29 | (clipboard as any).onClick(event)
30 | }
31 |
--------------------------------------------------------------------------------
/src/utils/cookies.ts:
--------------------------------------------------------------------------------
1 | import Cookies from 'js-cookie'
2 |
3 | // App
4 | const sidebarStatusKey = 'sidebar_status'
5 | export const getSidebarStatus = () => Cookies.get(sidebarStatusKey)
6 | export const setSidebarStatus = (sidebarStatus: string) => Cookies.set(sidebarStatusKey, sidebarStatus)
7 |
8 | const languageKey = 'language'
9 | export const getLanguage = () => Cookies.get(languageKey)
10 | export const setLanguage = (language: string) => Cookies.set(languageKey, language)
11 |
12 | const sizeKey = 'size'
13 | export const getSize = () => Cookies.get(sizeKey)
14 | export const setSize = (size: string) => Cookies.set(sizeKey, size)
15 |
16 | // User
17 | const tokenKey = 'vue_typescript_admin_access_token'
18 | export const getToken = () => Cookies.get(tokenKey)
19 | export const setToken = (token: string) => Cookies.set(tokenKey, token)
20 | export const removeToken = () => Cookies.remove(tokenKey)
21 |
--------------------------------------------------------------------------------
/src/utils/error-log.ts:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import { ErrorLogModule } from '@/store/modules/error-log'
3 | import { isArray } from '@/utils/validate'
4 | import settings from '@/settings'
5 |
6 | const { errorLog: needErrorLog } = settings
7 |
8 | const checkNeed = () => {
9 | const env = process.env.NODE_ENV
10 | if (isArray(needErrorLog) && env) {
11 | return needErrorLog.includes(env)
12 | }
13 | return false
14 | }
15 |
16 | if (checkNeed()) {
17 | Vue.config.errorHandler = function(err, vm, info) {
18 | ErrorLogModule.AddErrorLog({
19 | err,
20 | vm,
21 | info,
22 | url: window.location.href
23 | })
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/src/utils/permission.ts:
--------------------------------------------------------------------------------
1 | import { UserModule } from '@/store/modules/user'
2 |
3 | export const checkPermission = (value: string[]): boolean => {
4 | if (value && value instanceof Array && value.length > 0) {
5 | const roles = UserModule.roles
6 | const permissionRoles = value
7 | const hasPermission = roles.some(role => {
8 | return permissionRoles.includes(role)
9 | })
10 | return hasPermission
11 | } else {
12 | console.error('need roles! Like v-permission="[\'admin\',\'editor\']"')
13 | return false
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/src/utils/symBol.ts:
--------------------------------------------------------------------------------
1 | // Provide/Inject 为了避免命名冲突, 可以使用 ES6 的 Symbol 特性作为 key
2 | export const symbol:any = Symbol();
--------------------------------------------------------------------------------
/src/utils/tool/arr.ts:
--------------------------------------------------------------------------------
1 | /*
2 | * @Author: zemin zheng
3 | * @Date: 2021-08-29 20:10:44
4 | * @LastEditTime: 2021-08-29 20:41:02
5 | * @LastEditors: Please set LastEditors
6 | * @Description: 数组工具类
7 | * @FilePath: \vue-typescript-admin-template-master\src\utils\tool\arr.ts
8 | */
9 |
10 |
11 | /**
12 | * @description 计算特定字符在数组中的出现数量
13 | *
14 | * @param {Array} arr
15 | * @param {string} char
16 | * @return {Array}
17 | * @example
18 | * let arr = [{category: 1, id: 5}, {category: 2, id: 2}, {category: 1, id: 3}, {category: 3, id: 4}, ]
19 | * arrCalculateStr(arr, 'category') // [ category1: 2, category2: 1, category3: 1 ]
20 | */
21 | const arrCalculateStr = (arr: Array, char: string) =>{
22 | return arr.reduce((total, currentValue, currentIndex) =>{
23 | let totalVar = total[char + currentValue.category]
24 | total[char + currentValue.category] = totalVar ? totalVar + 1 : 1
25 |
26 | return total
27 | }, [])
28 | }
29 |
30 |
31 | export {
32 | arrCalculateStr
33 | }
--------------------------------------------------------------------------------
/src/utils/tool/date.ts:
--------------------------------------------------------------------------------
1 | import moment from 'moment'
2 |
3 |
4 | /**
5 | * YYYYMMDDHHmmss转为 YYYY-MM-DD HH:mm ss
6 | * @param dateStr YYYYMMDDHHmmss
7 | */
8 | const dateFormat = (dateStr: string) =>{
9 | return dateStr.substring(0,4) + '-' + dateStr.substring(4,6) + '-' + dateStr.substring(6,8) + ' ' +
10 | dateStr.substring(8,10) + ' : ' + dateStr.substring(10,12) + ' ' + dateStr.substring(10,12)
11 | }
12 |
13 | /**
14 | * 系统时间(2021-02-23T14:38:24.000Z)转YYYY-MM-DD HH:mm ss
15 | * @param time 数据库时间格式字符串
16 | */
17 | const sysDateFormat = (time: string) =>{
18 | if(!time) return null;
19 |
20 | return moment(time).format("YYYY-MM-DD HH:mm:ss");
21 | }
22 |
23 |
24 | export {
25 | dateFormat,
26 | sysDateFormat
27 | }
--------------------------------------------------------------------------------
/src/utils/tool/index.ts:
--------------------------------------------------------------------------------
1 | function randomSort(a:any,b:any) {
2 | return .5 - Math.random();
3 | }
4 |
5 |
6 | /**
7 | * 这是该系统的状态颜色
8 | * 根据status获取对应的颜色
9 | * @param status 状态
10 | * @param colorShowMethods 1:代表256颜色值,2:代表某些插件使用的颜色状态(例如elementui)
11 | */
12 | const colorStatus = (status:number, colorShowMethods = 1) =>{
13 | switch(status) {
14 | case 1:
15 | return colorShowMethods === 1 ? 'red' : 'danger'
16 | break;
17 | case 2:
18 | return colorShowMethods === 1 ? 'blue' : 'primary'
19 | break;
20 | case 3:
21 | return colorShowMethods === 1 ? '#F4F4F5' : 'info'
22 | break;
23 | case 4:
24 | return colorShowMethods === 1 ? '#FDF6EC' : 'warning'
25 | break;
26 | case 5:
27 | return colorShowMethods === 1 ? 'green' : 'success'
28 | break;
29 | default:
30 | return colorShowMethods === 1 ? 'red' : 'danger'
31 | }
32 | }
33 |
34 |
35 | export {
36 | randomSort,
37 | colorStatus
38 | }
--------------------------------------------------------------------------------
/src/utils/validate.ts:
--------------------------------------------------------------------------------
1 | export const isValidUsername = (str: string) => ['admin', 'editor','zheng'].indexOf(str.trim()) >= 0
2 |
3 | export const isExternal = (path: string) => /^(https?:|mailto:|tel:)/.test(path)
4 |
5 | export const isArray = (arg: any) => {
6 | if (typeof Array.isArray === 'undefined') {
7 | return Object.prototype.toString.call(arg) === '[object Array]'
8 | }
9 | return Array.isArray(arg)
10 | }
11 |
12 | export const isValidURL = (url: string) => {
13 | const reg = /^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/
14 | return reg.test(url)
15 | }
16 |
--------------------------------------------------------------------------------
/src/utils/zip.ts:
--------------------------------------------------------------------------------
1 | import { saveAs } from 'file-saver'
2 | import JSZip from 'jszip'
3 |
4 | export const exportTxt2Zip = (th: string[], jsonData: any, txtName = 'file', zipName = 'file') => {
5 | const zip = new JSZip()
6 | const data = jsonData
7 | let txtData = `${th}\r\n`
8 | data.forEach((row: any) => {
9 | let tempStr = ''
10 | tempStr = row.toString()
11 | txtData += `${tempStr}\r\n`
12 | })
13 | zip.file(`${txtName}.txt`, txtData)
14 | zip.generateAsync({
15 | type: 'blob'
16 | }).then((blob: Blob) => {
17 | saveAs(blob, `${zipName}.zip`)
18 | }, (err: Error) => {
19 | alert('Zip export failed: ' + err.message)
20 | })
21 | }
22 |
--------------------------------------------------------------------------------
/src/views/apiInterface/README.md:
--------------------------------------------------------------------------------
1 | 百个免费API接口分享,调用完全不限次数...
2 | https://mp.weixin.qq.com/s/PEQw14G2nAZLYYeKma-VKw
--------------------------------------------------------------------------------
/src/views/apiInterface/phone-attribution/index.ts:
--------------------------------------------------------------------------------
1 | import { Check } from "javascript-tool-class/src/App";
2 |
3 | const itemList = [
4 | {
5 | name: "手机号码段",
6 | value: ""
7 | },
8 | {
9 | name: "卡号归属地",
10 | value: 0
11 | },
12 | {
13 | name: "运营商",
14 | value: 0
15 | },
16 | {
17 | name: "区号",
18 | value: 0
19 | },
20 | {
21 | name: "邮编",
22 | value: 0
23 | }
24 | ]
25 |
26 |
27 | const myCheck = new Check();
28 |
29 |
30 |
31 | export {
32 | itemList,
33 | myCheck
34 | }
--------------------------------------------------------------------------------
/src/views/charts/bar-chart.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 |
8 |
9 |
10 |
22 |
23 |
30 |
--------------------------------------------------------------------------------
/src/views/charts/line-chart.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 |
8 |
9 |
10 |
22 |
23 |
30 |
--------------------------------------------------------------------------------
/src/views/charts/mixed-chart.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 |
8 |
9 |
10 |
22 |
23 |
30 |
--------------------------------------------------------------------------------
/src/views/components-demo/draggable-list.vue:
--------------------------------------------------------------------------------
1 |
2 |
19 |
20 |
21 |
47 |
--------------------------------------------------------------------------------
/src/views/components-demo/dropzone.vue:
--------------------------------------------------------------------------------
1 |
2 |
19 |
20 |
21 |
43 |
--------------------------------------------------------------------------------
/src/views/dashboard/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
34 |
--------------------------------------------------------------------------------
/src/views/eat/breakfast.vue:
--------------------------------------------------------------------------------
1 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
29 |
30 |
32 |
--------------------------------------------------------------------------------
/src/views/eat/dinner.vue:
--------------------------------------------------------------------------------
1 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
29 |
30 |
32 |
--------------------------------------------------------------------------------
/src/views/eat/lunch.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
22 |
23 |
25 |
--------------------------------------------------------------------------------
/src/views/eat/modules/formUtils.ts:
--------------------------------------------------------------------------------
1 | /*
2 | * @Author: your name
3 | * @Date: 2021-10-06 14:50:44
4 | * @LastEditTime: 2021-10-06 18:38:40
5 | * @LastEditors: Please set LastEditors
6 | * @Description: In User Settings Edit
7 | * @FilePath: \vueAndTsAndKoa2\src\views\usualWebsite\modules\formUtils.ts
8 | */
9 | // Form工具方法
10 |
11 | import { programTypeOptions, designTypeOptions, toolTypeOptions, movieTypeOptions,otherTypeOptions } from './options';
12 |
13 | /**
14 | * 设置表单的type类型的option
15 | * @param type 类别(前端:1;后端:2)
16 | */
17 | const setType = (type:number, Form:any) =>{
18 | switch(type){
19 | case 1:
20 | Form.info.type.options = programTypeOptions
21 | break
22 | case 2:
23 | Form.info.type.options = designTypeOptions
24 | break
25 | case 3:
26 | Form.info.type.options = toolTypeOptions
27 | break
28 | case 4:
29 | Form.info.type.options = movieTypeOptions
30 | break
31 | case 5:
32 | Form.info.type.options = otherTypeOptions
33 | break
34 | default:
35 | Form.info.type.options = programTypeOptions
36 | }
37 | }
38 |
39 |
40 |
41 | export {
42 | setType
43 | }
--------------------------------------------------------------------------------
/src/views/eat/modules/index.ts:
--------------------------------------------------------------------------------
1 | import { IDialogData } from '@/components/Dialog/types/index'
2 |
3 |
4 |
5 |
6 | class AgentEvent {
7 | childrenDialogData: IDialogData;
8 | tHeader: Array;
9 | constructor(childrenDialogData: IDialogData) {
10 | this.childrenDialogData = childrenDialogData;
11 | this.tHeader = ['开始时间','id', '通知方式', '结束时间', '标题', '类型;postpone:延后)', '内容', '备注'];
12 | }
13 | /**
14 | *
15 | * @param title 对话框标题
16 | * @param isShowSubmit 是否显示提交取消按钮
17 | * @param isCloseModal 是否可点击对话框之外的空间,关闭对话框
18 | * @param show 是否显示对话框(默认是打开)
19 | */
20 | showDialog(title: string,isShowSubmit: boolean, isCloseModal: boolean, show: boolean = true ) {
21 | this.childrenDialogData.title = title;
22 | this.childrenDialogData.isShowSubmit = isShowSubmit;
23 | this.childrenDialogData.isCloseModal = isCloseModal;
24 |
25 | this.childrenDialogData.show = show;
26 | }
27 |
28 | }
29 |
30 |
31 |
32 |
33 | export {
34 | AgentEvent
35 | }
--------------------------------------------------------------------------------
/src/views/eat/modules/options.ts:
--------------------------------------------------------------------------------
1 |
2 |
3 | // 编程program的option
4 | const programTypeOptions = [
5 | { value: '前端', label: '前端' },
6 | { value: '后端', label: '后端' },
7 | { value: '前后端', label: '前后端' },
8 | { value: '其他', label: '其他' }
9 | ]
10 |
11 | // 设计design的option
12 | const designTypeOptions = [
13 | { value: '设计', label: '设计' }
14 | ]
15 |
16 |
17 | // 工具tool的option
18 | const toolTypeOptions = [
19 | { value: '算法', label: '算法' }
20 | ]
21 |
22 |
23 | // 电影movie的option
24 | const movieTypeOptions = [
25 | { value: '电影Vip观看', label: '电影Vip观看' },
26 | { value: '视频格式转换', label: '视频格式转换' },
27 | ]
28 |
29 | // 电影movie的option
30 | const otherTypeOptions = [
31 | { value: '其他', label: '其他' },
32 | ]
33 |
34 |
35 |
36 | export {
37 | programTypeOptions,
38 | designTypeOptions,
39 | toolTypeOptions,
40 | movieTypeOptions,
41 | otherTypeOptions
42 | }
--------------------------------------------------------------------------------
/src/views/eat/nightingale.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
22 |
23 |
25 |
--------------------------------------------------------------------------------
/src/views/eat/other.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
22 |
23 |
25 |
--------------------------------------------------------------------------------
/src/views/eat/src/assets/img/bean_500.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/git-Dignity/vueAndTsAndKoa2/6eedd79d745ec72167505e8dc1d4917c2d4d888e/src/views/eat/src/assets/img/bean_500.png
--------------------------------------------------------------------------------
/src/views/eat/src/assets/img/bean_five.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/git-Dignity/vueAndTsAndKoa2/6eedd79d745ec72167505e8dc1d4917c2d4d888e/src/views/eat/src/assets/img/bean_five.png
--------------------------------------------------------------------------------
/src/views/eat/src/assets/img/bean_one.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/git-Dignity/vueAndTsAndKoa2/6eedd79d745ec72167505e8dc1d4917c2d4d888e/src/views/eat/src/assets/img/bean_one.png
--------------------------------------------------------------------------------
/src/views/eat/src/assets/img/bean_ten.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/git-Dignity/vueAndTsAndKoa2/6eedd79d745ec72167505e8dc1d4917c2d4d888e/src/views/eat/src/assets/img/bean_ten.png
--------------------------------------------------------------------------------
/src/views/eat/src/assets/img/bean_two.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/git-Dignity/vueAndTsAndKoa2/6eedd79d745ec72167505e8dc1d4917c2d4d888e/src/views/eat/src/assets/img/bean_two.png
--------------------------------------------------------------------------------
/src/views/eat/src/assets/img/close_store.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/git-Dignity/vueAndTsAndKoa2/6eedd79d745ec72167505e8dc1d4917c2d4d888e/src/views/eat/src/assets/img/close_store.png
--------------------------------------------------------------------------------
/src/views/eat/src/assets/img/color_pillar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/git-Dignity/vueAndTsAndKoa2/6eedd79d745ec72167505e8dc1d4917c2d4d888e/src/views/eat/src/assets/img/color_pillar.png
--------------------------------------------------------------------------------
/src/views/eat/src/assets/img/congratulation.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/git-Dignity/vueAndTsAndKoa2/6eedd79d745ec72167505e8dc1d4917c2d4d888e/src/views/eat/src/assets/img/congratulation.png
--------------------------------------------------------------------------------
/src/views/eat/src/assets/img/draw_btn.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/git-Dignity/vueAndTsAndKoa2/6eedd79d745ec72167505e8dc1d4917c2d4d888e/src/views/eat/src/assets/img/draw_btn.png
--------------------------------------------------------------------------------
/src/views/eat/src/assets/img/draw_wheel.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/git-Dignity/vueAndTsAndKoa2/6eedd79d745ec72167505e8dc1d4917c2d4d888e/src/views/eat/src/assets/img/draw_wheel.png
--------------------------------------------------------------------------------
/src/views/eat/src/assets/img/give_up.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/git-Dignity/vueAndTsAndKoa2/6eedd79d745ec72167505e8dc1d4917c2d4d888e/src/views/eat/src/assets/img/give_up.png
--------------------------------------------------------------------------------
/src/views/eat/src/assets/img/luck_bg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/git-Dignity/vueAndTsAndKoa2/6eedd79d745ec72167505e8dc1d4917c2d4d888e/src/views/eat/src/assets/img/luck_bg.png
--------------------------------------------------------------------------------
/src/views/eat/src/assets/img/lucky_title.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/git-Dignity/vueAndTsAndKoa2/6eedd79d745ec72167505e8dc1d4917c2d4d888e/src/views/eat/src/assets/img/lucky_title.png
--------------------------------------------------------------------------------
/src/views/eat/src/assets/img/point_five.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/git-Dignity/vueAndTsAndKoa2/6eedd79d745ec72167505e8dc1d4917c2d4d888e/src/views/eat/src/assets/img/point_five.png
--------------------------------------------------------------------------------
/src/views/eat/src/assets/img/point_ten.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/git-Dignity/vueAndTsAndKoa2/6eedd79d745ec72167505e8dc1d4917c2d4d888e/src/views/eat/src/assets/img/point_ten.png
--------------------------------------------------------------------------------
/src/views/eat/src/assets/img/sorry.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/git-Dignity/vueAndTsAndKoa2/6eedd79d745ec72167505e8dc1d4917c2d4d888e/src/views/eat/src/assets/img/sorry.png
--------------------------------------------------------------------------------
/src/views/eat/src/assets/img/wheel_toast_1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/git-Dignity/vueAndTsAndKoa2/6eedd79d745ec72167505e8dc1d4917c2d4d888e/src/views/eat/src/assets/img/wheel_toast_1.png
--------------------------------------------------------------------------------
/src/views/eat/src/assets/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/git-Dignity/vueAndTsAndKoa2/6eedd79d745ec72167505e8dc1d4917c2d4d888e/src/views/eat/src/assets/logo.png
--------------------------------------------------------------------------------
/src/views/eat/src/index/config.ts:
--------------------------------------------------------------------------------
1 | export const prizeList = [
2 | {
3 | icon: require("../assets/img/bean_500.png"), // 奖品图片
4 | name: "鱼香茄子", // 奖品名称
5 | color:'#000',
6 | isPrize: 1 // 该奖项是否为奖品
7 | },
8 | {
9 | icon: require("../assets/img/bean_five.png"),
10 | name: "手撕鸡",
11 | color:'red',
12 | isPrize: 1
13 | },
14 | {
15 | icon: require("../assets/img/bean_one.png"),
16 | name: "可乐鸡翅",
17 | color:'green',
18 | isPrize: 1
19 | },
20 | {
21 | icon: require("../assets/img/point_five.png"),
22 | name: "奖品4",
23 | color:'red',
24 | isPrize: 1
25 | },
26 | {
27 | icon: require("../assets/img/point_ten.png"),
28 | name: "奖品5",
29 | color:'#FF4E3A',
30 | isPrize: 1
31 | },
32 | {
33 | icon: require("../assets/img/bean_500.png"),
34 | name: "奖品6",
35 | color:'#FF925D',
36 | isPrize: 1
37 | },
38 | {
39 | icon: require("../assets/img/give_up.png"),
40 | name: "奖品7",
41 | color:'#FFCC72',
42 | isPrize: 0
43 | },
44 | {
45 | icon: require("../assets/img/bean_500.png"),
46 | name: "奖品8",
47 | color:'#FE315D',
48 | isPrize: 1
49 | }
50 | ]
--------------------------------------------------------------------------------
/src/views/eat/todayEat.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
9 |
10 |
11 |
36 |
37 |
40 |
--------------------------------------------------------------------------------
/src/views/error-log/components/ErrorTestA.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {{ a.a }}
5 |
6 |
7 |
8 |
9 |
17 |
--------------------------------------------------------------------------------
/src/views/error-log/components/ErrorTestB.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {{ b = b.b }}
5 |
6 |
7 |
8 |
9 |
17 |
--------------------------------------------------------------------------------
/src/views/error-log/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
{{ $t('errorLog.tips') }}
6 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
36 |
37 |
42 |
--------------------------------------------------------------------------------
/src/views/example/components/Dropdown/Comment.vue:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 | {{ !disableComment?'Comment: opened':'Comment: closed' }}
8 |
9 |
10 |
14 |
15 |
19 |
20 | Close comment
21 |
22 |
23 | Open comment
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
49 |
--------------------------------------------------------------------------------
/src/views/example/components/Dropdown/SourceUrl.vue:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 | Link
8 |
9 |
10 |
15 |
20 |
24 |
25 | URL
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
51 |
--------------------------------------------------------------------------------
/src/views/example/components/Dropdown/index.ts:
--------------------------------------------------------------------------------
1 | export { default as CommentDropdown } from './Comment.vue'
2 | export { default as PlatformDropdown } from './Platform.vue'
3 | export { default as SourceUrlDropdown } from './SourceUrl.vue'
4 |
--------------------------------------------------------------------------------
/src/views/example/components/Warning.vue:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
11 |
19 |
--------------------------------------------------------------------------------
/src/views/example/create.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
17 |
--------------------------------------------------------------------------------
/src/views/example/edit.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
17 |
--------------------------------------------------------------------------------
/src/views/excel/components/AutoWidthOption.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
9 | True
10 |
11 |
15 | False
16 |
17 |
18 |
19 |
20 |
21 |
39 |
--------------------------------------------------------------------------------
/src/views/excel/components/BookTypeOption.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
8 |
14 |
15 |
16 |
17 |
18 |
38 |
--------------------------------------------------------------------------------
/src/views/excel/components/FilenameOption.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 |
13 |
14 |
15 |
16 |
34 |
--------------------------------------------------------------------------------
/src/views/guide/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
10 |
15 | {{ $t('guide.button') }}
16 |
17 |
18 |
19 |
20 |
44 |
--------------------------------------------------------------------------------
/src/views/guide/steps.ts:
--------------------------------------------------------------------------------
1 | const steps = [
2 | {
3 | element: '#hamburger-container',
4 | popover: {
5 | title: 'Hamburger',
6 | description: 'Open && Close sidebar',
7 | position: 'bottom'
8 | }
9 | },
10 | {
11 | element: '#breadcrumb-container',
12 | popover: {
13 | title: 'Breadcrumb',
14 | description: 'Indicate the current page location',
15 | position: 'bottom'
16 | }
17 | },
18 | {
19 | element: '#header-search',
20 | popover: {
21 | title: 'Page Search',
22 | description: 'Page search, quick navigation',
23 | position: 'left'
24 | }
25 | },
26 | {
27 | element: '#screenfull',
28 | popover: {
29 | title: 'Screenfull',
30 | description: 'Set the page into fullscreen',
31 | position: 'left'
32 | }
33 | },
34 | {
35 | element: '#size-select',
36 | popover: {
37 | title: 'Switch Size',
38 | description: 'Switch the system size',
39 | position: 'left'
40 | }
41 | },
42 | {
43 | element: '#tags-view-container',
44 | popover: {
45 | title: 'Tags view',
46 | description: 'The history of the page you visited',
47 | position: 'bottom'
48 | },
49 | padding: 0
50 | }
51 | ]
52 |
53 | export default steps
54 |
--------------------------------------------------------------------------------
/src/views/icons/svg-icons.ts:
--------------------------------------------------------------------------------
1 | const req = require.context('../../icons/svg', false, /\.svg$/)
2 | const re = /\.\/(.*)\.svg/
3 | const requireAll = (requireContext: any) => requireContext.keys()
4 |
5 | const icons = requireAll(req).map((str: string) => {
6 | const match = str.match(re)
7 | if (match !== null) return match[1]
8 | return null
9 | })
10 |
11 | export default icons
12 |
--------------------------------------------------------------------------------
/src/views/itKnowledge/algorithm.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
22 |
23 |
25 |
--------------------------------------------------------------------------------
/src/views/itKnowledge/front-end.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
21 |
22 |
24 |
--------------------------------------------------------------------------------
/src/views/itKnowledge/front-rear-end.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
21 |
22 |
24 |
--------------------------------------------------------------------------------
/src/views/itKnowledge/modules/formUtils.ts:
--------------------------------------------------------------------------------
1 | // Form工具方法
2 |
3 | import { frontEndTypeOptions, rearEndTypeOptions, algorithmTypeOptions, frontRearEndTypeOptions, toolTypeOptions } from './options';
4 |
5 | /**
6 | * 设置表单的type类型的option
7 | * @param type 类别(前端:1;后端:2;算法:3;前后端:4;工具:5)
8 | */
9 | const setType = (type:number, Form:any) =>{
10 | switch(type){
11 | case 1:
12 | Form.info.type.options = frontEndTypeOptions
13 | break
14 | case 2:
15 | Form.info.type.options = rearEndTypeOptions
16 | break
17 | case 3:
18 | Form.info.type.options = algorithmTypeOptions
19 | break
20 | case 4:
21 | Form.info.type.options = frontRearEndTypeOptions
22 | break
23 | case 5:
24 | Form.info.type.options = toolTypeOptions
25 | break
26 | default:
27 | Form.info.type.options = frontEndTypeOptions
28 | }
29 | }
30 |
31 |
32 |
33 | export {
34 | setType
35 | }
--------------------------------------------------------------------------------
/src/views/itKnowledge/modules/index.ts:
--------------------------------------------------------------------------------
1 | import { IDialogData } from '@/components/Dialog/types/index'
2 |
3 |
4 |
5 |
6 | class AgentEvent {
7 | childrenDialogData: IDialogData;
8 | tHeader: Array;
9 | constructor(childrenDialogData: IDialogData) {
10 | this.childrenDialogData = childrenDialogData;
11 | this.tHeader = ['开始时间','id', '通知方式', '结束时间', '标题', '类型;postpone:延后)', '内容', '备注'];
12 | }
13 | /**
14 | *
15 | * @param title 对话框标题
16 | * @param isShowSubmit 是否显示提交取消按钮
17 | * @param isCloseModal 是否可点击对话框之外的空间,关闭对话框
18 | * @param show 是否显示对话框(默认是打开)
19 | */
20 | showDialog(title: string,isShowSubmit: boolean, isCloseModal: boolean, show: boolean = true ) {
21 | this.childrenDialogData.title = title;
22 | this.childrenDialogData.isShowSubmit = isShowSubmit;
23 | this.childrenDialogData.isCloseModal = isCloseModal;
24 |
25 | this.childrenDialogData.show = show;
26 | }
27 |
28 | }
29 |
30 |
31 |
32 |
33 | export {
34 | AgentEvent
35 | }
--------------------------------------------------------------------------------
/src/views/itKnowledge/rear-end.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
21 |
22 |
24 |
--------------------------------------------------------------------------------
/src/views/itKnowledge/tool.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
21 |
22 |
24 |
--------------------------------------------------------------------------------
/src/views/login/auth-redirect.vue:
--------------------------------------------------------------------------------
1 |
21 |
--------------------------------------------------------------------------------
/src/views/me/diary.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 | 1
4 |
5 |
6 |
7 |
30 |
31 |
34 |
--------------------------------------------------------------------------------
/src/views/me/modules/agent-event/index.ts:
--------------------------------------------------------------------------------
1 | import { IDialogData } from '@/components/Dialog/types/index'
2 |
3 |
4 |
5 |
6 | class AgentEvent {
7 | childrenDialogData: IDialogData;
8 | tHeader: Array;
9 | constructor(childrenDialogData: IDialogData) {
10 | this.childrenDialogData = childrenDialogData;
11 | this.tHeader = ['开始时间','id', '通知方式', '结束时间', '标题', '类型;postpone:延后)', '内容', '备注'];
12 | }
13 | /**
14 | *
15 | * @param title 对话框标题
16 | * @param isShowSubmit 是否显示提交取消按钮
17 | * @param isCloseModal 是否可点击对话框之外的空间,关闭对话框
18 | * @param show 是否显示对话框(默认是打开)
19 | */
20 | showDialog(title: string,isShowSubmit: boolean, isCloseModal: boolean, show: boolean = true ) {
21 | this.childrenDialogData.title = title;
22 | this.childrenDialogData.isShowSubmit = isShowSubmit;
23 | this.childrenDialogData.isCloseModal = isCloseModal;
24 |
25 | this.childrenDialogData.show = show;
26 | }
27 |
28 | }
29 |
30 |
31 |
32 |
33 | export {
34 | AgentEvent
35 | }
--------------------------------------------------------------------------------
/src/views/me/modules/agent-event/options.ts:
--------------------------------------------------------------------------------
1 | const agentTypeOptions = [
2 | { value: 'two-days', label: '这两天' },
3 | { value: 'recent', label: '近期' },
4 | { value: 'postpone', label: '延后' }
5 | ]
6 |
7 | const noticeWayOptions = [
8 | { value: 1, label: 'Bark' },
9 | { value: 2, label: '微信方糖' },
10 | { value: 3, label: 'QQ邮箱' }
11 | ]
12 |
13 |
14 | export {
15 | agentTypeOptions,
16 | noticeWayOptions
17 | }
--------------------------------------------------------------------------------
/src/views/me/modules/features-dev/formUtils.ts:
--------------------------------------------------------------------------------
1 | // Form工具方法
2 |
3 | import { frontEndTypeOptions, rearEndTypeOptions, algorithmTypeOptions } from './options';
4 |
5 | /**
6 | * 设置表单的type类型的option
7 | * @param type 类别(前端:1;后端:2)
8 | */
9 | const setType = (type:number, Form:any) =>{
10 | switch(type){
11 | case 1:
12 | Form.info.type.options = frontEndTypeOptions
13 | break
14 | case 2:
15 | Form.info.type.options = rearEndTypeOptions
16 | break
17 | case 3:
18 | Form.info.type.options = algorithmTypeOptions
19 | break
20 | default:
21 | Form.info.type.options = frontEndTypeOptions
22 | }
23 | }
24 |
25 |
26 |
27 | export {
28 | setType
29 | }
--------------------------------------------------------------------------------
/src/views/me/modules/features-dev/index.ts:
--------------------------------------------------------------------------------
1 | import { IDialogData } from '@/components/Dialog/types/index'
2 |
3 |
4 |
5 |
6 | class AgentEvent {
7 | childrenDialogData: IDialogData;
8 | tHeader: Array;
9 | constructor(childrenDialogData: IDialogData) {
10 | this.childrenDialogData = childrenDialogData;
11 | this.tHeader = ['开始时间','id', '通知方式', '结束时间', '标题', '类型;postpone:延后)', '内容', '备注'];
12 | }
13 | /**
14 | *
15 | * @param title 对话框标题
16 | * @param isShowSubmit 是否显示提交取消按钮
17 | * @param isCloseModal 是否可点击对话框之外的空间,关闭对话框
18 | * @param show 是否显示对话框(默认是打开)
19 | */
20 | showDialog(title: string,isShowSubmit: boolean, isCloseModal: boolean, show: boolean = true ) {
21 | this.childrenDialogData.title = title;
22 | this.childrenDialogData.isShowSubmit = isShowSubmit;
23 | this.childrenDialogData.isCloseModal = isCloseModal;
24 |
25 | this.childrenDialogData.show = show;
26 | }
27 |
28 | }
29 |
30 |
31 |
32 |
33 | export {
34 | AgentEvent
35 | }
--------------------------------------------------------------------------------
/src/views/me/modules/features-dev/options.ts:
--------------------------------------------------------------------------------
1 | // 前端front-end的option
2 | const frontEndTypeOptions = [
3 | { value: 'html', label: 'HTML' },
4 | { value: 'css', label: 'CSS' },
5 | { value: 'javascript', label: 'Javascript' },
6 | { value: 'vue', label: 'Vue' },
7 | { value: 'ui', label: 'Ui' },
8 | { value: '面试', label: '面试' }
9 | ]
10 |
11 | // 后端rear-end的option
12 | const rearEndTypeOptions = [
13 | { value: 'java', label: 'Java' },
14 | { value: 'node', label: 'Node' },
15 | { value: 'mysql', label: 'Mysql' },
16 | { value: 'oracle', label: 'Oracle' },
17 | { value: '面试', label: '面试' }
18 | ]
19 |
20 |
21 | // 算法algorithm的option
22 | const algorithmTypeOptions = [
23 | { value: '算法', label: '算法' }
24 | ]
25 |
26 |
27 |
28 |
29 | export {
30 | frontEndTypeOptions,
31 | rearEndTypeOptions,
32 | algorithmTypeOptions
33 | }
--------------------------------------------------------------------------------
/src/views/music/components/Header.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
12 |
13 |
14 |
15 |
29 |
30 |
40 |
41 |
--------------------------------------------------------------------------------
/src/views/music/modules/music-singer/formData.ts:
--------------------------------------------------------------------------------
1 | // 歌手表单信息
2 | const singerInfo = {
3 | name: "singerInfo",
4 | position: "left",
5 | labelWidth: 100,
6 | size: "medium",
7 | info: {
8 | "singerName": {
9 | label: 'music.singerName',
10 | name: "singerName",
11 | value: "",
12 | disabled: false,
13 | hidden: false,
14 | // 规则必须也得定义在form绑定的model中
15 | rule: {
16 | required: true, message: "歌手名不能为空"
17 | }
18 | }
19 | }
20 | }
21 |
22 |
23 |
24 | export {
25 | singerInfo
26 | }
--------------------------------------------------------------------------------
/src/views/music/modules/singer-song-list/index.ts:
--------------------------------------------------------------------------------
1 | class SingerSongList {
2 | musicInfo:Object;
3 | y:string;
4 | constructor(musicInfo:Object, y:string) {
5 | this.musicInfo = musicInfo;
6 | this.y = y;
7 | }
8 | toString() {
9 | // return '输入项:(' + this.x + ', ' + this.y + ')';
10 | }
11 | doStuff() {
12 | console.log('stuff');
13 | }
14 | }
15 |
16 | export default SingerSongList
--------------------------------------------------------------------------------
/src/views/music/test.ts:
--------------------------------------------------------------------------------
1 | class Point {
2 | x:string;
3 | y:string;
4 | constructor(x:string, y:string) {
5 | this.x = x;
6 | this.y = y;
7 | }
8 | toString() {
9 | return '输入项:(' + this.x + ', ' + this.y + ')';
10 | }
11 | doStuff() {
12 | console.log('stuff');
13 | }
14 | }
15 |
16 | export default Point
--------------------------------------------------------------------------------
/src/views/nested/menu1/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
25 |
--------------------------------------------------------------------------------
/src/views/nested/menu1/menu1-1/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
9 |
10 |
11 |
12 |
13 |
21 |
--------------------------------------------------------------------------------
/src/views/nested/menu1/menu1-2/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
26 |
--------------------------------------------------------------------------------
/src/views/nested/menu1/menu1-2/menu1-2-1/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
9 |
10 |
11 |
19 |
--------------------------------------------------------------------------------
/src/views/nested/menu1/menu1-2/menu1-2-2/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
9 |
10 |
11 |
19 |
--------------------------------------------------------------------------------
/src/views/nested/menu1/menu1-3/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
9 |
10 |
11 |
19 |
--------------------------------------------------------------------------------
/src/views/nested/menu2/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 |
8 |
9 |
10 |
18 |
--------------------------------------------------------------------------------
/src/views/pdf/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
10 |
11 | Click to download PDF
12 |
13 |
14 |
15 |
16 |
17 |
25 |
--------------------------------------------------------------------------------
/src/views/permission/components/SwitchRoles.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {{ $t('permission.roles') }}: {{ roles }}
5 |
6 | {{ $t('permission.switchRoles') }}:
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
37 |
--------------------------------------------------------------------------------
/src/views/permission/page.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
23 |
--------------------------------------------------------------------------------
/src/views/personal/personal-view/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 |
8 |
9 |
10 |
11 |
12 |
20 |
--------------------------------------------------------------------------------
/src/views/profile/components/Account.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
14 | Update
15 |
16 |
17 |
18 |
19 |
20 |
39 |
--------------------------------------------------------------------------------
/src/views/redirect/index.vue:
--------------------------------------------------------------------------------
1 |
19 |
--------------------------------------------------------------------------------
/src/views/sys/modules/options.ts:
--------------------------------------------------------------------------------
1 | const calendarTypeOptions = [
2 | { value: 'assignment', label: '任务分配' },
3 | { value: 'security-role', label: '管理角色' },
4 | { value: 'user', label: '普通角色' }
5 | ]
6 |
7 | const statusOptions = [
8 | { value: 0, label: '否' },
9 | { value: 1, label: '是' }
10 | ]
11 |
12 |
13 | export {
14 | calendarTypeOptions,
15 | statusOptions
16 | }
--------------------------------------------------------------------------------
/src/views/sys/modules/user/tableData.ts:
--------------------------------------------------------------------------------
1 |
2 | const userTableColumns = {
3 | "username": {
4 | prop: "username",
5 | label: "用户名",
6 | width: "10%"
7 | },
8 | "photo": {
9 | prop: "photo",
10 | label: "头像",
11 | isPhoto:true,
12 | width: "10%"
13 | },
14 | "phone": {
15 | prop: "phone",
16 | label: "手机号码",
17 | width: "15%"
18 | },
19 | "roles": {
20 | prop: "roles",
21 | label: "角色",
22 | width: "15%",
23 | sortable: "true"
24 | },
25 | "handSolt": {
26 | prop: "handSolt",
27 | width: "50%",
28 | label: "操作"
29 | }
30 | }
31 |
32 |
33 |
34 | export {
35 | userTableColumns
36 | }
--------------------------------------------------------------------------------
/src/views/sys/sys-menu.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | 同步菜单
5 |
6 |
7 |
8 |
9 |
10 |
31 |
--------------------------------------------------------------------------------
/src/views/table/dynamic-table/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {{ $t('table.dynamicTips1') }}
5 |
6 |
7 |
8 |
9 | {{ $t('table.dynamicTips2') }}
10 |
11 |
12 |
13 |
14 |
15 |
29 |
--------------------------------------------------------------------------------
/src/views/usualWebsite/design.vue:
--------------------------------------------------------------------------------
1 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
29 |
30 |
32 |
--------------------------------------------------------------------------------
/src/views/usualWebsite/modules/formUtils.ts:
--------------------------------------------------------------------------------
1 | /*
2 | * @Author: your name
3 | * @Date: 2021-10-06 14:50:44
4 | * @LastEditTime: 2021-10-06 18:38:40
5 | * @LastEditors: Please set LastEditors
6 | * @Description: In User Settings Edit
7 | * @FilePath: \vueAndTsAndKoa2\src\views\usualWebsite\modules\formUtils.ts
8 | */
9 | // Form工具方法
10 |
11 | import { programTypeOptions, designTypeOptions, toolTypeOptions, movieTypeOptions,otherTypeOptions } from './options';
12 |
13 | /**
14 | * 设置表单的type类型的option
15 | * @param type 类别(前端:1;后端:2)
16 | */
17 | const setType = (type:number, Form:any) =>{
18 | switch(type){
19 | case 1:
20 | Form.info.type.options = programTypeOptions
21 | break
22 | case 2:
23 | Form.info.type.options = designTypeOptions
24 | break
25 | case 3:
26 | Form.info.type.options = toolTypeOptions
27 | break
28 | case 4:
29 | Form.info.type.options = movieTypeOptions
30 | break
31 | case 5:
32 | Form.info.type.options = otherTypeOptions
33 | break
34 | default:
35 | Form.info.type.options = programTypeOptions
36 | }
37 | }
38 |
39 |
40 |
41 | export {
42 | setType
43 | }
--------------------------------------------------------------------------------
/src/views/usualWebsite/modules/index.ts:
--------------------------------------------------------------------------------
1 | import { IDialogData } from '@/components/Dialog/types/index'
2 |
3 |
4 |
5 |
6 | class AgentEvent {
7 | childrenDialogData: IDialogData;
8 | tHeader: Array;
9 | constructor(childrenDialogData: IDialogData) {
10 | this.childrenDialogData = childrenDialogData;
11 | this.tHeader = ['开始时间','id', '通知方式', '结束时间', '标题', '类型;postpone:延后)', '内容', '备注'];
12 | }
13 | /**
14 | *
15 | * @param title 对话框标题
16 | * @param isShowSubmit 是否显示提交取消按钮
17 | * @param isCloseModal 是否可点击对话框之外的空间,关闭对话框
18 | * @param show 是否显示对话框(默认是打开)
19 | */
20 | showDialog(title: string,isShowSubmit: boolean, isCloseModal: boolean, show: boolean = true ) {
21 | this.childrenDialogData.title = title;
22 | this.childrenDialogData.isShowSubmit = isShowSubmit;
23 | this.childrenDialogData.isCloseModal = isCloseModal;
24 |
25 | this.childrenDialogData.show = show;
26 | }
27 |
28 | }
29 |
30 |
31 |
32 |
33 | export {
34 | AgentEvent
35 | }
--------------------------------------------------------------------------------
/src/views/usualWebsite/modules/options.ts:
--------------------------------------------------------------------------------
1 | /*
2 | * @Author: zemin zheng
3 | * @Date: 2021-10-06 14:50:44
4 | * @LastEditTime: 2021-11-06 14:56:04
5 | * @LastEditors: Please set LastEditors
6 | * @Description: 常用网站 -- option类型下拉框选项
7 | * @FilePath: \vueAndTsAndKoa2\src\views\usualWebsite\modules\options.ts
8 | */
9 |
10 |
11 | // 编程program的option
12 | const programTypeOptions = [
13 | { value: '前端', label: '前端' },
14 | { value: '后端', label: '后端' },
15 | { value: '前后端', label: '前后端' },
16 | { value: '其他', label: '其他' }
17 | ]
18 |
19 | // 设计design的option
20 | const designTypeOptions = [
21 | { value: '设计', label: '设计' }
22 | ]
23 |
24 |
25 | // 工具tool的option
26 | const toolTypeOptions = [
27 | { value: '算法', label: '算法' },
28 | { value: '工具', label: '工具' },
29 | { value: '颜色', label: '颜色' },
30 | ]
31 |
32 |
33 | // 电影movie的option
34 | const movieTypeOptions = [
35 | { value: '电影Vip观看', label: '电影Vip观看' },
36 | { value: '视频格式转换', label: '视频格式转换' },
37 | ]
38 |
39 | // 电影movie的option
40 | const otherTypeOptions = [
41 | { value: '其他', label: '其他' },
42 | ]
43 |
44 |
45 |
46 | export {
47 | programTypeOptions,
48 | designTypeOptions,
49 | toolTypeOptions,
50 | movieTypeOptions,
51 | otherTypeOptions
52 | }
--------------------------------------------------------------------------------
/src/views/usualWebsite/movie.vue:
--------------------------------------------------------------------------------
1 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
29 |
30 |
32 |
--------------------------------------------------------------------------------
/src/views/usualWebsite/other.vue:
--------------------------------------------------------------------------------
1 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
29 |
30 |
32 |
--------------------------------------------------------------------------------
/src/views/usualWebsite/program.vue:
--------------------------------------------------------------------------------
1 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
29 |
30 |
32 |
--------------------------------------------------------------------------------
/src/views/usualWebsite/tool.vue:
--------------------------------------------------------------------------------
1 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
29 |
30 |
32 |
--------------------------------------------------------------------------------
/tests/unit/utils/parseTime.spec.ts:
--------------------------------------------------------------------------------
1 | import { parseTime } from '@/utils/index.ts'
2 |
3 | describe('Utils:parseTime', () => {
4 | const d = +new Date('2018-07-13 17:54:01') // "2018-07-13 17:54:01"
5 |
6 | it('timestamp', () => {
7 | expect(parseTime(d)).toBe('2018-07-13 17:54:01')
8 | })
9 |
10 | it('timestamp string', () => {
11 | expect(parseTime((d + ''))).toBe('2018-07-13 17:54:01')
12 | })
13 |
14 | it('ten digits timestamp', () => {
15 | expect(parseTime((d / 1000).toFixed(0))).toBe('2018-07-13 17:54:01')
16 | })
17 |
18 | it('new Date', () => {
19 | expect(parseTime(new Date(d))).toBe('2018-07-13 17:54:01')
20 | })
21 |
22 | it('format', () => {
23 | expect(parseTime(d, '{y}-{m}-{d} {h}:{i}')).toBe('2018-07-13 17:54')
24 | expect(parseTime(d, '{y}-{m}-{d}')).toBe('2018-07-13')
25 | expect(parseTime(d, '{y}/{m}/{d} {h}-{i}')).toBe('2018/07/13 17-54')
26 | })
27 |
28 | it('get the day of the week', () => {
29 | expect(parseTime(d, '{a}')).toBe('五') // 星期五
30 | })
31 |
32 | it('get the day of the week', () => {
33 | expect(parseTime(+d + 1000 * 60 * 60 * 24 * 2, '{a}')).toBe('日') // 星期日
34 | })
35 |
36 | it('empty argument', () => {
37 | expect(parseTime()).toBeNull()
38 | })
39 | })
40 |
--------------------------------------------------------------------------------
/tests/unit/utils/validate.spec.ts:
--------------------------------------------------------------------------------
1 | import { isValidUsername, isExternal } from '@/utils/validate'
2 |
3 | describe('Utils:validate', () => {
4 | it('isValidUsername', () => {
5 | expect(isValidUsername('admin')).toBe(true)
6 | expect(isValidUsername('editor')).toBe(true)
7 | expect(isValidUsername('xxxx')).toBe(false)
8 | })
9 |
10 | it('isExternal', () => {
11 | expect(isExternal('https://www.armour.com/')).toBe(true)
12 | expect(isExternal('mailto:someone@test.com')).toBe(true)
13 | expect(isExternal('123aBC')).toBe(false)
14 | })
15 | })
16 |
--------------------------------------------------------------------------------
/typings-custom/javascript-tool-class.d.ts:
--------------------------------------------------------------------------------
1 | declare module 'javascript-tool-class/src/App'
--------------------------------------------------------------------------------
/typings-custom/lrc-file-parser.d.ts:
--------------------------------------------------------------------------------
1 | declare module 'lrc-file-parser'
--------------------------------------------------------------------------------
/typings-custom/zzmcomponentlib.d.ts:
--------------------------------------------------------------------------------
1 | declare module 'zzmcomponentlib'
--------------------------------------------------------------------------------