├── running ├── .browserslistrc ├── src ├── constant │ └── api.js ├── assets │ ├── logo.png │ └── img │ │ ├── 404.png │ │ ├── del.png │ │ ├── admire.png │ │ ├── avatar.jpg │ │ ├── home.jpg │ │ ├── icons.png │ │ ├── pic_bg.png │ │ ├── reply.png │ │ ├── collect.png │ │ ├── imgicon.png │ │ ├── login_bg.jpg │ │ ├── selected.png │ │ ├── toutiao.png │ │ ├── logo_admin.png │ │ ├── logo_index.png │ │ └── collect_select.png ├── App.vue ├── utils │ ├── eventBus.js │ └── axios.config.js ├── api │ └── login.js ├── views │ ├── 404.vue │ ├── home │ │ ├── main.vue │ │ └── index.vue │ ├── page.vue │ ├── async.vue │ ├── login │ │ └── index.vue │ ├── account │ │ └── index.vue │ ├── comment │ │ └── index.vue │ ├── publish │ │ └── index.vue │ ├── material │ │ └── index.vue │ ├── fans │ │ └── index.vue │ └── articles │ │ └── index.vue ├── components │ ├── common │ │ └── bread-crumb.vue │ ├── index.js │ ├── publish │ │ ├── cover-image.vue │ │ └── select-images.vue │ └── home │ │ ├── layout-aside.vue │ │ └── layout-header.vue ├── permission.js ├── styles │ └── index.less ├── router.js └── main.js ├── postcss.config.js ├── public ├── favicon.ico └── index.html ├── .editorconfig ├── babel.config.js ├── .gitignore ├── .eslintrc.js ├── README.md └── package.json /running: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.browserslistrc: -------------------------------------------------------------------------------- 1 | > 1% 2 | last 2 versions 3 | -------------------------------------------------------------------------------- /src/constant/api.js: -------------------------------------------------------------------------------- 1 | export default { 2 | APP_LOGIN: '/authorizations' 3 | } 4 | -------------------------------------------------------------------------------- /postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | autoprefixer: {} 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuiruohanyu/81heimatoutiao/HEAD/public/favicon.ico -------------------------------------------------------------------------------- /src/assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuiruohanyu/81heimatoutiao/HEAD/src/assets/logo.png -------------------------------------------------------------------------------- /src/assets/img/404.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuiruohanyu/81heimatoutiao/HEAD/src/assets/img/404.png -------------------------------------------------------------------------------- /src/assets/img/del.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuiruohanyu/81heimatoutiao/HEAD/src/assets/img/del.png -------------------------------------------------------------------------------- /src/assets/img/admire.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuiruohanyu/81heimatoutiao/HEAD/src/assets/img/admire.png -------------------------------------------------------------------------------- /src/assets/img/avatar.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuiruohanyu/81heimatoutiao/HEAD/src/assets/img/avatar.jpg -------------------------------------------------------------------------------- /src/assets/img/home.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuiruohanyu/81heimatoutiao/HEAD/src/assets/img/home.jpg -------------------------------------------------------------------------------- /src/assets/img/icons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuiruohanyu/81heimatoutiao/HEAD/src/assets/img/icons.png -------------------------------------------------------------------------------- /src/assets/img/pic_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuiruohanyu/81heimatoutiao/HEAD/src/assets/img/pic_bg.png -------------------------------------------------------------------------------- /src/assets/img/reply.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuiruohanyu/81heimatoutiao/HEAD/src/assets/img/reply.png -------------------------------------------------------------------------------- /src/assets/img/collect.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuiruohanyu/81heimatoutiao/HEAD/src/assets/img/collect.png -------------------------------------------------------------------------------- /src/assets/img/imgicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuiruohanyu/81heimatoutiao/HEAD/src/assets/img/imgicon.png -------------------------------------------------------------------------------- /src/assets/img/login_bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuiruohanyu/81heimatoutiao/HEAD/src/assets/img/login_bg.jpg -------------------------------------------------------------------------------- /src/assets/img/selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuiruohanyu/81heimatoutiao/HEAD/src/assets/img/selected.png -------------------------------------------------------------------------------- /src/assets/img/toutiao.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuiruohanyu/81heimatoutiao/HEAD/src/assets/img/toutiao.png -------------------------------------------------------------------------------- /src/assets/img/logo_admin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuiruohanyu/81heimatoutiao/HEAD/src/assets/img/logo_admin.png -------------------------------------------------------------------------------- /src/assets/img/logo_index.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuiruohanyu/81heimatoutiao/HEAD/src/assets/img/logo_index.png -------------------------------------------------------------------------------- /src/assets/img/collect_select.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shuiruohanyu/81heimatoutiao/HEAD/src/assets/img/collect_select.png -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | [*.{js,jsx,ts,tsx,vue}] 2 | indent_style = space 3 | indent_size = 2 4 | trim_trailing_whitespace = true 5 | insert_final_newline = true 6 | -------------------------------------------------------------------------------- /src/App.vue: -------------------------------------------------------------------------------- 1 | 5 | 6 | 10 | -------------------------------------------------------------------------------- /src/utils/eventBus.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | export default new Vue() 3 | // new Vue 实例化了一个Vue实例 4 | // a 引入了这个实例 5 | // a.$emit("自定义事件",参数) 6 | // b 引入了这个实例 是同一个实例 因为是同一个文件 7 | // b 监听事件 因为a和b用eventBus就是同一个Vue实例 8 | -------------------------------------------------------------------------------- /babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: [ 3 | '@vue/app' 4 | ], 5 | plugins: [ 6 | [ 7 | 'component', 8 | { 9 | 'libraryName': 'element-ui', 10 | 'styleLibraryName': 'theme-chalk' 11 | } 12 | ] 13 | ] 14 | } 15 | -------------------------------------------------------------------------------- /src/api/login.js: -------------------------------------------------------------------------------- 1 | import axios from '../utils/axios.config' 2 | import URL from '../constant/api' 3 | // 存放所有登录逻辑的代码 4 | export function LoginByMobile (data) { 5 | return axios({ 6 | method: 'post', 7 | url: URL.APP_LOGIN, // 由于地址是常量 而且有可能变化 8 | data 9 | }) 10 | // 相当于返回一个promise对象 11 | } 12 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | /dist 4 | 5 | # local env files 6 | .env.local 7 | .env.*.local 8 | 9 | # Log files 10 | npm-debug.log* 11 | yarn-debug.log* 12 | yarn-error.log* 13 | 14 | # Editor directories and files 15 | .idea 16 | .vscode 17 | *.suo 18 | *.ntvs* 19 | *.njsproj 20 | *.sln 21 | *.sw? 22 | -------------------------------------------------------------------------------- /src/views/404.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 10 | 11 | 19 | -------------------------------------------------------------------------------- /src/views/home/main.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 10 | 11 | 19 | -------------------------------------------------------------------------------- /src/components/common/bread-crumb.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 14 | 15 | 17 | -------------------------------------------------------------------------------- /.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | root: true, 3 | env: { 4 | node: true 5 | }, 6 | 'extends': [ 7 | 'plugin:vue/essential', 8 | '@vue/standard' 9 | ], 10 | rules: { 11 | 'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off', 12 | 'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off' 13 | }, 14 | parserOptions: { 15 | parser: 'babel-eslint' 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 81heimatoutiao 2 | 3 | ## Project setup 4 | ``` 5 | npm install 6 | ``` 7 | 8 | ### Compiles and hot-reloads for development 9 | ``` 10 | npm run serve 11 | ``` 12 | 13 | ### Compiles and minifies for production 14 | ``` 15 | npm run build 16 | ``` 17 | 18 | ### Run your tests 19 | ``` 20 | npm run test 21 | ``` 22 | 23 | ### Lints and fixes files 24 | ``` 25 | npm run lint 26 | ``` 27 | 28 | ### Customize configuration 29 | See [Configuration Reference](https://cli.vuejs.org/config/). 30 | -------------------------------------------------------------------------------- /public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 81heimatoutiao 9 | 10 | 11 | 14 |
15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /src/permission.js: -------------------------------------------------------------------------------- 1 | import router from './router' 2 | import nprogress from 'nprogress' // 引入文件 3 | import 'nprogress/nprogress.css' // 引入样式 4 | // 全局导航前置守卫 5 | router.beforeEach(function (to, from, next) { 6 | nprogress.start() // 开始进度条 7 | // 如果是以home为起始 就认为 进入了需要检查token的区域 8 | if (to.path.startsWith('/home')) { 9 | // 获取前端的token 10 | let result = window.localStorage.getItem('user-info') 11 | if (result) { 12 | let userInfo = JSON.parse(result) // 将存储的字符串转化对象 13 | if (userInfo && userInfo.token) { 14 | // 满足token存在的情形 15 | next() 16 | } else { 17 | next('/login') // 跳转到login 18 | } 19 | } else { 20 | next('/login') // 跳转到login 21 | } 22 | } else { 23 | next() // 直接放行 24 | } 25 | // 如果没有进去home的领地 就不需要再管了 26 | }) 27 | router.afterEach(() => { 28 | nprogress.done() 29 | }) 30 | export default router 31 | -------------------------------------------------------------------------------- /src/views/home/index.vue: -------------------------------------------------------------------------------- 1 | 23 | 24 | 39 | 40 | 43 | -------------------------------------------------------------------------------- /src/components/index.js: -------------------------------------------------------------------------------- 1 | import layoutAside from './home/layout-aside' 2 | import layoutHeader from './home/layout-header' 3 | import breadCrumb from './common/bread-crumb' 4 | import 'quill/dist/quill.core.css' 5 | import 'quill/dist/quill.snow.css' 6 | import 'quill/dist/quill.bubble.css' 7 | 8 | import { quillEditor } from 'vue-quill-editor' 9 | import coverImg from './publish/cover-image' 10 | import selectImg from './publish/select-images' 11 | // elementUI导出的对象 对象里有一个方法 install 12 | // Vue.use(elementUI) => 调用其提供的install方法,并且在方法中传入Vue对象 13 | export default { 14 | install (Vue) { 15 | Vue.component('layout-header', layoutHeader) // 注册了layout-header组件 16 | Vue.component('layout-aside', layoutAside) // 注册左侧菜单组件 17 | Vue.component('bread-crumb', breadCrumb) // 注册面包屑组件 18 | Vue.component('quill-editor', quillEditor) // 注册quill组件成为全局对象 19 | Vue.component('cover-image', coverImg) 20 | Vue.component('select-images', selectImg) 21 | 22 | // Vue.prototype.$demo = 23 | // this.$message 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/styles/index.less: -------------------------------------------------------------------------------- 1 | body { 2 | margin: 0; 3 | padding: 0; 4 | } 5 | *, 6 | *:before, 7 | *:after { 8 | box-sizing: inherit; 9 | } 10 | 11 | li { 12 | list-style: none; 13 | } 14 | dl, 15 | dd, 16 | dt, 17 | ul, 18 | li { 19 | margin: 0; 20 | padding: 0; 21 | } 22 | 23 | .no-padding { 24 | padding: 0px !important; 25 | } 26 | 27 | .padding-content { 28 | padding: 4px 0; 29 | } 30 | 31 | a:focus, 32 | a:active { 33 | outline: none; 34 | } 35 | 36 | a, 37 | a:focus, 38 | a:hover { 39 | cursor: pointer; 40 | color: inherit; 41 | text-decoration: none; 42 | } 43 | 44 | b { 45 | font-weight: normal; 46 | } 47 | 48 | div:focus { 49 | outline: none; 50 | } 51 | 52 | .fr { 53 | float: right; 54 | } 55 | 56 | .fl { 57 | float: left; 58 | } 59 | 60 | .pr-5 { 61 | padding-right: 5px; 62 | } 63 | 64 | .pl-5 { 65 | padding-left: 5px; 66 | } 67 | 68 | .block { 69 | display: block; 70 | } 71 | 72 | .pointer { 73 | cursor: pointer; 74 | } 75 | 76 | .inlineBlock { 77 | display: block; 78 | } 79 | -------------------------------------------------------------------------------- /src/views/page.vue: -------------------------------------------------------------------------------- 1 | 18 | 19 | 47 | 48 | 50 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "81heimatoutiao", 3 | "version": "0.1.0", 4 | "private": true, 5 | "scripts": { 6 | "serve": "vue-cli-service serve", 7 | "build": "vue-cli-service build", 8 | "lint": "vue-cli-service lint" 9 | }, 10 | "dependencies": { 11 | "axios": "^0.19.0", 12 | "core-js": "^2.6.5", 13 | "echarts": "^4.2.1", 14 | "element-ui": "^2.11.1", 15 | "json-bigint": "^0.3.0", 16 | "nprogress": "^0.2.0", 17 | "vue": "^2.6.10", 18 | "vue-quill-editor": "^3.0.6", 19 | "vue-router": "^3.0.3" 20 | }, 21 | "devDependencies": { 22 | "@vue/cli-plugin-babel": "^3.10.0", 23 | "@vue/cli-plugin-eslint": "^3.10.0", 24 | "@vue/cli-service": "^3.10.0", 25 | "@vue/eslint-config-standard": "^4.0.0", 26 | "babel-eslint": "^10.0.1", 27 | "babel-plugin-component": "^1.1.1", 28 | "eslint": "^5.16.0", 29 | "eslint-plugin-vue": "^5.0.0", 30 | "less": "3.9.0", 31 | "less-loader": "^4.1.0", 32 | "lint-staged": "^8.1.5", 33 | "vue-template-compiler": "^2.6.10" 34 | }, 35 | "gitHooks": { 36 | "pre-commit": "lint-staged" 37 | }, 38 | "lint-staged": { 39 | "*.{js,vue}": [ 40 | "vue-cli-service lint", 41 | "git add" 42 | ] 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /src/components/publish/cover-image.vue: -------------------------------------------------------------------------------- 1 | 13 | 14 | 41 | 42 | 60 | -------------------------------------------------------------------------------- /src/views/async.vue: -------------------------------------------------------------------------------- 1 | 15 | 16 | 68 | 69 | 72 | -------------------------------------------------------------------------------- /src/utils/axios.config.js: -------------------------------------------------------------------------------- 1 | import axios from 'axios' 2 | import { Message } from 'element-ui' // 引入message模块 3 | import JSONBig from 'json-bigint' // 引入大数字处理模块 4 | axios.defaults.baseURL = 'http://ttapi.research.itcast.cn/mp/v1_0' // 将后台接口的地址给axios的baseURL 5 | // axios.defaults // 默认axios选项 6 | axios.defaults.transformResponse = [function (data) { 7 | return data ? JSONBig.parse(data) : {} // 处理大数字 8 | }] 9 | // 请求拦截器 10 | axios.interceptors.request.use(function (config) { 11 | // 在发起请求请做一些业务处理 12 | // 进行配置的注入 13 | let userInfo = window.localStorage.getItem('user-info') // 获取用户存储信息 存储信息里有token 14 | let token = userInfo ? JSON.parse(userInfo).token : null // 获取token 15 | config.headers.Authorization = `Bearer ${token}` // 直接将token注入到 请求参数中 16 | return config 17 | }, function (error) { 18 | // 对请求失败做处理 19 | return Promise.reject(error) 20 | }) 21 | // 响应拦截器 22 | axios.interceptors.response.use(function (response) { 23 | // 对响应数据做处理 24 | return response.data ? response.data : {} 25 | }, function (error) { 26 | // 对响应错误做处理 27 | let code = error.response ? error.response.status : '' // 获取错误的状态码 28 | let message = '' 29 | switch (code) { 30 | case 400: 31 | message = '请求参数错误' 32 | break 33 | case 403: 34 | message = '用户非实名认证用户' 35 | break 36 | case 507: 37 | message = '服务器数据库异常' 38 | break 39 | case 404: 40 | message = '手机号码不正确' 41 | break 42 | case 409: 43 | message = '用户名已存在' 44 | break 45 | case 401: 46 | // 针对token过期或者失效的特殊处理 47 | message = 'token过期或未传' 48 | window.localStorage.clear() // 只清除本项目的缓存 49 | window.location.hash = '#/login' // 跳转到登录页 50 | break 51 | default: 52 | message = '未知错误!' 53 | break 54 | } 55 | Message({ message, type: 'warning' }) 56 | return new Promise(function () {}) // 如果不return 就会抛出异常 控制台会看到错误 57 | // 返回一个新的promise对象 就意味着 一个新的没有错误的promise返回了 之前的错误被终止了 58 | }) 59 | export default axios 60 | -------------------------------------------------------------------------------- /src/router.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import Router from 'vue-router' 3 | import Home from './views/home' 4 | import Login from './views/login' 5 | import Main from './views/home/main' 6 | Vue.use(Router) 7 | 8 | export default new Router({ 9 | routes: [ 10 | { 11 | path: '*', // 通配符 匹配找不到家的路由 12 | component: () => import('./views/404') 13 | }, 14 | { 15 | path: '/login', 16 | name: 'login', 17 | component: Login 18 | }, 19 | { 20 | path: '/', 21 | redirect: '/home' 22 | }, 23 | { 24 | path: '/home', 25 | name: 'home', 26 | component: Home, 27 | children: [{ 28 | path: '', 29 | component: Main // 默认二级路由组件 30 | }, { 31 | path: '/home/comment', // 评论列表 32 | component: () => import('./views/comment') // 按需加载的写法 33 | }, { 34 | path: '/home/material', // 素材列表 35 | component: () => import('./views/material') // 按需加载的写法 36 | }, { 37 | path: '/home/articles', // 内容列表 38 | component: () => import('./views/articles') // 按需加载的写法 39 | }, { 40 | path: '/home/publish', // 发表文章 41 | component: () => import('./views/publish') // 按需加载的写法 42 | }, { 43 | path: '/home/publish/:articleId', // 编辑文章 动态路由 定义了一个articleId 44 | component: () => import('./views/publish') // 按需加载的写法 45 | }, { 46 | path: '/home/account', // 账户信息 47 | component: () => import('./views/account') // 按需加载的写法 48 | }, { 49 | path: '/home/fansdata', // 账户信息 50 | component: () => import('./views/fans') // 按需加载的写法 51 | }, { 52 | path: '/home/async', // 异步解决方案 53 | component: () => import('./views/async') // 按需加载的写法 54 | } 55 | ] 56 | } 57 | // { 58 | // path: '/about', 59 | // name: 'about', 60 | // // route level code-splitting 61 | // // this generates a separate chunk (about.[hash].js) for this route 62 | // // which is lazy-loaded when the route is visited. 63 | // component: () => import(/* webpackChunkName: "about" */ './views/About.vue') 64 | // } 65 | ] 66 | }) 67 | -------------------------------------------------------------------------------- /src/main.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import App from './App.vue' 3 | import router from './permission' 4 | import Component from './components' // 引入我们自己定义的插件 5 | import 'element-ui/lib/theme-chalk/index.css' // 引入样式1 6 | import './styles/index.less' // 引文重置的基础样式 7 | import axios from './utils/axios.config' // 把axios插件给了Vue对象的原型属性 8 | import { 9 | Pagination, 10 | Dialog, 11 | Dropdown, 12 | DropdownMenu, 13 | DropdownItem, 14 | Menu, 15 | Submenu, 16 | MenuItem, 17 | Input, 18 | Radio, 19 | RadioGroup, 20 | Checkbox, 21 | Select, 22 | Option, 23 | Button, 24 | Table, 25 | TableColumn, 26 | DatePicker, 27 | Breadcrumb, 28 | BreadcrumbItem, 29 | Form, 30 | FormItem, 31 | Tabs, 32 | TabPane, 33 | Tag, 34 | Icon, 35 | Row, 36 | Col, 37 | Upload, 38 | Card, 39 | Container, 40 | Header, 41 | Aside, 42 | Main, 43 | Footer, 44 | Loading, 45 | Message, 46 | MessageBox, 47 | Image 48 | } from 'element-ui' // 引入自定义的axios 49 | Vue.prototype.$axios = axios 50 | Vue.use(Image) 51 | Vue.use(Pagination) 52 | Vue.use(Dialog) 53 | Vue.use(Dropdown) 54 | Vue.use(DropdownMenu) 55 | Vue.use(DropdownItem) 56 | Vue.use(Menu) 57 | Vue.use(Submenu) 58 | Vue.use(MenuItem) 59 | Vue.use(Input) 60 | Vue.use(Radio) 61 | Vue.use(RadioGroup) 62 | Vue.use(Checkbox) 63 | Vue.use(Select) 64 | Vue.use(Option) 65 | Vue.use(Button) 66 | Vue.use(Table) 67 | Vue.use(TableColumn) 68 | Vue.use(DatePicker) 69 | Vue.use(Breadcrumb) 70 | Vue.use(BreadcrumbItem) 71 | Vue.use(Form) 72 | Vue.use(FormItem) 73 | Vue.use(Tabs) 74 | Vue.use(TabPane) 75 | Vue.use(Tag) 76 | Vue.use(Icon) 77 | Vue.use(Row) 78 | Vue.use(Col) 79 | Vue.use(Upload) 80 | Vue.use(Card) 81 | Vue.use(Container) 82 | Vue.use(Header) 83 | Vue.use(Aside) 84 | Vue.use(Main) 85 | Vue.use(Footer) 86 | Vue.use(Image) 87 | 88 | Vue.use(Loading.directive) 89 | 90 | Vue.prototype.$loading = Loading.service 91 | 92 | Vue.prototype.$confirm = MessageBox.confirm 93 | Vue.prototype.$message = Message 94 | 95 | Vue.use(Component) // 注册全局的自定义组件 96 | Vue.config.productionTip = false 97 | 98 | new Vue({ 99 | router, 100 | render: h => h(App) 101 | }).$mount('#app') 102 | -------------------------------------------------------------------------------- /src/components/home/layout-aside.vue: -------------------------------------------------------------------------------- 1 | 53 | 54 | 74 | 75 | 89 | -------------------------------------------------------------------------------- /src/components/home/layout-header.vue: -------------------------------------------------------------------------------- 1 | 28 | 29 | 80 | 81 | 105 | -------------------------------------------------------------------------------- /src/components/publish/select-images.vue: -------------------------------------------------------------------------------- 1 | 29 | 30 | 88 | 89 | 129 | -------------------------------------------------------------------------------- /src/views/login/index.vue: -------------------------------------------------------------------------------- 1 | 30 | 31 | 95 | 96 | 119 | -------------------------------------------------------------------------------- /src/views/account/index.vue: -------------------------------------------------------------------------------- 1 | 33 | 34 | 103 | 104 | 116 | -------------------------------------------------------------------------------- /src/views/comment/index.vue: -------------------------------------------------------------------------------- 1 | 44 | 45 | 131 | 132 | 134 | -------------------------------------------------------------------------------- /src/views/publish/index.vue: -------------------------------------------------------------------------------- 1 | 37 | 38 | 135 | 136 | 141 | -------------------------------------------------------------------------------- /src/views/material/index.vue: -------------------------------------------------------------------------------- 1 | 56 | 57 | 138 | 139 | 172 | -------------------------------------------------------------------------------- /src/views/fans/index.vue: -------------------------------------------------------------------------------- 1 | 14 | 15 | 193 | 194 | 200 | -------------------------------------------------------------------------------- /src/views/articles/index.vue: -------------------------------------------------------------------------------- 1 | 70 | 71 | 191 | 237 | --------------------------------------------------------------------------------