├── static ├── .gitkeep ├── api.json ├── img │ ├── head.jpg │ └── test.gif └── image │ ├── begin.png │ ├── food1.png │ ├── food2.png │ ├── food3.png │ ├── food4.png │ ├── food5.png │ ├── food6.png │ ├── food7.png │ ├── food8.png │ ├── food9.png │ └── icon_tabbar.png ├── .eslintignore ├── .vscode └── settings.json ├── config ├── prod.env.js ├── dev.env.js └── index.js ├── src ├── assets │ ├── head.jpg │ ├── icon.png │ ├── logo.png │ ├── fontIcon │ │ ├── iconfont.eot │ │ ├── iconfont.ttf │ │ ├── iconfont.woff │ │ ├── iconfont.css │ │ ├── iconfont.svg │ │ └── iconfont.js │ ├── mixin.scss │ └── common.scss ├── directives │ ├── index.js │ ├── autofix.js │ └── myclickoutside.js ├── components │ ├── global │ │ ├── backtop │ │ │ ├── index.js │ │ │ └── src │ │ │ │ └── main.vue │ │ ├── utils │ │ │ └── dispatch.js │ │ ├── sidebar │ │ │ └── src │ │ │ │ ├── menu-item.vue │ │ │ │ ├── my-submenu.vue │ │ │ │ └── my-menu.vue │ │ └── dropdown │ │ │ ├── item.vue │ │ │ └── index.vue │ ├── index.js │ └── header.vue ├── views │ ├── test.vue │ ├── mirrow.vue │ ├── when.vue │ ├── home │ │ ├── setColor.vue │ │ └── home.vue │ ├── editName.vue │ ├── editFood.vue │ ├── memo.vue │ ├── info.vue │ ├── EatWhat.vue │ ├── icon.vue │ ├── setIcon.vue │ ├── DatePlan.vue │ ├── moneyRecord.vue │ └── money.vue ├── utils │ ├── bus.js │ └── utils.js ├── services │ └── api.js ├── main.js ├── router │ └── index.js └── App.vue ├── .jsbeautifyrc ├── .editorconfig ├── .gitignore ├── .postcssrc.js ├── .babelrc ├── index.html ├── .eslintrc.js ├── README.md └── package.json /static/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | build/*.js 2 | config/*.js 3 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "git.ignoreLimitWarning": true 3 | } -------------------------------------------------------------------------------- /static/api.json: -------------------------------------------------------------------------------- 1 | { 2 | "code": 0, 3 | "data": "helloword" 4 | } -------------------------------------------------------------------------------- /config/prod.env.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | NODE_ENV: '"production"' 3 | } 4 | -------------------------------------------------------------------------------- /src/assets/head.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sxzy/vue-assistant/HEAD/src/assets/head.jpg -------------------------------------------------------------------------------- /src/assets/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sxzy/vue-assistant/HEAD/src/assets/icon.png -------------------------------------------------------------------------------- /src/assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sxzy/vue-assistant/HEAD/src/assets/logo.png -------------------------------------------------------------------------------- /static/img/head.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sxzy/vue-assistant/HEAD/static/img/head.jpg -------------------------------------------------------------------------------- /static/img/test.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sxzy/vue-assistant/HEAD/static/img/test.gif -------------------------------------------------------------------------------- /static/image/begin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sxzy/vue-assistant/HEAD/static/image/begin.png -------------------------------------------------------------------------------- /static/image/food1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sxzy/vue-assistant/HEAD/static/image/food1.png -------------------------------------------------------------------------------- /static/image/food2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sxzy/vue-assistant/HEAD/static/image/food2.png -------------------------------------------------------------------------------- /static/image/food3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sxzy/vue-assistant/HEAD/static/image/food3.png -------------------------------------------------------------------------------- /static/image/food4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sxzy/vue-assistant/HEAD/static/image/food4.png -------------------------------------------------------------------------------- /static/image/food5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sxzy/vue-assistant/HEAD/static/image/food5.png -------------------------------------------------------------------------------- /static/image/food6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sxzy/vue-assistant/HEAD/static/image/food6.png -------------------------------------------------------------------------------- /static/image/food7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sxzy/vue-assistant/HEAD/static/image/food7.png -------------------------------------------------------------------------------- /static/image/food8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sxzy/vue-assistant/HEAD/static/image/food8.png -------------------------------------------------------------------------------- /static/image/food9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sxzy/vue-assistant/HEAD/static/image/food9.png -------------------------------------------------------------------------------- /static/image/icon_tabbar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sxzy/vue-assistant/HEAD/static/image/icon_tabbar.png -------------------------------------------------------------------------------- /.jsbeautifyrc: -------------------------------------------------------------------------------- 1 | { 2 | "indent_size": 2, 3 | "indent_char": " ", 4 | "css": { 5 | "indent_size": 2 6 | } 7 | } -------------------------------------------------------------------------------- /src/assets/fontIcon/iconfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sxzy/vue-assistant/HEAD/src/assets/fontIcon/iconfont.eot -------------------------------------------------------------------------------- /src/assets/fontIcon/iconfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sxzy/vue-assistant/HEAD/src/assets/fontIcon/iconfont.ttf -------------------------------------------------------------------------------- /src/assets/mixin.scss: -------------------------------------------------------------------------------- 1 | $colors: #f04134, #00a854, #108ee9, #f5317f, #f56a00, #7265e6, #ffbf00, #00a2ae, #2e3238; 2 | -------------------------------------------------------------------------------- /src/assets/fontIcon/iconfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sxzy/vue-assistant/HEAD/src/assets/fontIcon/iconfont.woff -------------------------------------------------------------------------------- /config/dev.env.js: -------------------------------------------------------------------------------- 1 | var merge = require('webpack-merge') 2 | var prodEnv = require('./prod.env') 3 | 4 | module.exports = merge(prodEnv, { 5 | NODE_ENV: '"development"' 6 | }) 7 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | indent_style = space 6 | indent_size = 4 7 | end_of_line = lf 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | -------------------------------------------------------------------------------- /src/directives/index.js: -------------------------------------------------------------------------------- 1 | import clickOutSide from './myclickOutSide.js' 2 | import autofix from './autofix.js' 3 | 4 | export default function (Vue) { 5 | Vue.use(clickOutSide) 6 | Vue.use(autofix) 7 | } 8 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules/ 3 | dist/ 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | 8 | # Editor directories and files 9 | .idea 10 | *.suo 11 | *.ntvs* 12 | *.njsproj 13 | *.sln 14 | -------------------------------------------------------------------------------- /src/components/global/backtop/index.js: -------------------------------------------------------------------------------- 1 | import BackTop from './backtop/src/main'; 2 | 3 | /* istanbul ignore next */ 4 | BackTop.install = function(Vue) { 5 | Vue.component(BackTop.name, BackTop); 6 | }; 7 | 8 | export default BackTop; -------------------------------------------------------------------------------- /.postcssrc.js: -------------------------------------------------------------------------------- 1 | // https://github.com/michael-ciniawsky/postcss-load-config 2 | 3 | module.exports = { 4 | "plugins": { 5 | // to edit target browsers: use "browserslist" field in package.json 6 | "autoprefixer": {} 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/assets/common.scss: -------------------------------------------------------------------------------- 1 | @import './mixin.scss'; 2 | /* 设置几个主题颜色 */ 3 | @for $i from 1 to 10 { 4 | .color#{$i} { 5 | color: nth($colors, $i) 6 | } 7 | } 8 | a { 9 | text-decoration: none; 10 | } 11 | a:link{ 12 | color: #000; 13 | } 14 | a:visited{ 15 | color: #000; 16 | } 17 | a:hover{ 18 | color: inherit; 19 | } -------------------------------------------------------------------------------- /src/views/test.vue: -------------------------------------------------------------------------------- 1 | 17 | -------------------------------------------------------------------------------- /src/utils/bus.js: -------------------------------------------------------------------------------- 1 | /* 这里用来做事件中心,负责分发事件 */ 2 | 3 | export default (Vue) => { 4 | let eventHub = new Vue() 5 | Vue.prototype.$bus = { 6 | $on (...arg) { 7 | eventHub.$on(...arg) 8 | }, 9 | $off (...arg) { 10 | eventHub.$off(...arg) 11 | }, 12 | $emit (...arg) { 13 | eventHub.$emit(...arg) 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | ["env", { 4 | "modules": false, 5 | "targets": { 6 | "browsers": ["> 1%", "last 2 versions", "not ie <= 8"] 7 | } 8 | }], 9 | "stage-2" 10 | ], 11 | "plugins": ["transform-runtime"], 12 | "env": { 13 | "test": { 14 | "presets": ["env", "stage-2"], 15 | "plugins": ["istanbul"] 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | my-tool 6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /src/utils/utils.js: -------------------------------------------------------------------------------- 1 | export default { 2 | hexToRgba (hex, opacity = 0.3) { 3 | let color = [] 4 | let rgb = [] 5 | hex = hex.replace(/#/, '') 6 | 7 | if (hex.length === 3) { // 处理 "#abc" 成 "#aabbcc" 8 | var tmp = [] 9 | for (let i = 0; i < 3; i++) { 10 | tmp.push(hex.charAt(i) + hex.charAt(i)) 11 | } 12 | hex = tmp.join('') 13 | } 14 | 15 | for (var i = 0; i < 3; i++) { 16 | color[i] = '0x' + hex.substr(i * 2, 2) 17 | rgb.push(parseInt(Number(color[i]))) 18 | } 19 | return 'rgba(' + rgb.join(',') + `,${opacity})` 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/components/global/utils/dispatch.js: -------------------------------------------------------------------------------- 1 | /* 用于模拟dispatch, 找到父组件, 并且触发父组件方法 如果_componentTag 找不到,那就打印vue 的¥parent 看是什么咯 */ 2 | export default { 3 | methods: { 4 | dispatch (componentName, eventName, params = []) { 5 | let parent = this.$parent || this.$root 6 | let name = parent.$options._componentTag 7 | 8 | while (parent && (!name || name !== componentName)) { 9 | parent = parent.$parent 10 | if (parent) { 11 | name = parent.$options._componentTag 12 | } 13 | } 14 | if (parent) { 15 | parent.$emit(eventName, params) 16 | } 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/components/global/sidebar/src/menu-item.vue: -------------------------------------------------------------------------------- 1 | 8 | 28 | 29 | -------------------------------------------------------------------------------- /src/views/mirrow.vue: -------------------------------------------------------------------------------- 1 | 9 | 27 | -------------------------------------------------------------------------------- /.eslintrc.js: -------------------------------------------------------------------------------- 1 | // http://eslint.org/docs/user-guide/configuring 2 | 3 | module.exports = { 4 | root: true, 5 | parser: 'babel-eslint', 6 | parserOptions: { 7 | sourceType: 'module' 8 | }, 9 | env: { 10 | browser: true, 11 | }, 12 | // https://github.com/standard/standard/blob/master/docs/RULES-en.md 13 | extends: 'standard', 14 | // required to lint *.vue files 15 | plugins: [ 16 | 'html' 17 | ], 18 | // add your custom rules here 19 | 'rules': { 20 | // allow paren-less arrow functions 21 | 'arrow-parens': 0, 22 | // allow async-await 23 | 'generator-star-spacing': 0, 24 | // "indent": ["error", 4], 25 | // allow debugger during development 26 | 'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/services/api.js: -------------------------------------------------------------------------------- 1 | import axios from 'axios' 2 | 3 | export default (Vue) => { 4 | axios.interceptors.request.use( 5 | config => { 6 | // 一个习惯, 本地开发时候,通常需要设置代理来支持跨域,于是加上'/api' 前缀用于脚手架config文件的识别设置 7 | // config.url = location.host.indexOf('localhost') >= 0 ? `/api${config.url}` : config.url 8 | return config 9 | }, 10 | err => { 11 | return Promise.reject(err) 12 | }) 13 | 14 | // http response 拦截器 15 | axios.interceptors.response.use( 16 | response => { 17 | // 对错误码进行统一的处理 18 | if (response.data.code !== 0) { 19 | return Promise.reject('有错') 20 | } 21 | return response 22 | }, 23 | error => { 24 | return Promise.reject(error.response.data) // 返回接口返回的错误信息 25 | }) 26 | Vue.prototype.$axios = axios 27 | } 28 | -------------------------------------------------------------------------------- /src/main.js: -------------------------------------------------------------------------------- 1 | // The Vue build version to load with the `import` command 2 | // (runtime-only or standalone) has been set in webpack.base.conf with an alias. 3 | import Vue from 'vue' 4 | import App from './App' 5 | import Bus from '@/utils/bus.js' 6 | import globalUI from '@/components' 7 | import directives from '@/directives' 8 | import router from './router' 9 | import MintUI from 'mint-ui' 10 | import api from '@/services/api' 11 | import 'mint-ui/lib/style.css' 12 | import '@/assets/fontIcon/iconfont.css' 13 | 14 | Bus(Vue) 15 | 16 | /* 注册指令插件 */ 17 | directives(Vue) 18 | 19 | /* 全局组件 */ 20 | Vue.use(MintUI) 21 | Vue.use(globalUI) 22 | 23 | // 给axios添加拦截器并添加到全局 24 | api(Vue) 25 | 26 | Vue.config.productionTip = false 27 | 28 | /* eslint-disable no-new */ 29 | new Vue({ 30 | el: '#app', 31 | router, 32 | template: '', 33 | components: { App } 34 | }) 35 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # my-tool 2 | 基于vue.js的前端开发,没有后台,只需要用localstorage进行本地的数据存储。 3 | 主要实现了几个模块,分别是换肤功能,头像更换,todolist,还有记账功能,同时还有备忘录,当然,如果你是一个选择困难症,还可以让它帮你选择今天吃什么。 4 | 一个十足的date-helper. 5 | > A Vue.js project 6 | > 安装,部分电脑安装nodesass经常出错,推荐cnpm安装,请戳 https://npm.taobao.org/ 7 | ## 演示 8 | ![看看我的演示吧](https://github.com/sxzy/vue-assistant/blob/master/static/img/test.gif) 9 | ## 项目在线demo(移动端) 10 | http://kimy.coding.me/vue-assistant/#/ 11 | 12 | ## Build Setup 13 | 14 | ``` bash 15 | # install dependencies 16 | npm install 17 | 18 | # serve with hot reload at localhost:8080 19 | npm run dev 20 | 21 | # build for production with minification 22 | npm run build 23 | 24 | # build for production and view the bundle analyzer report 25 | npm run build --report 26 | ``` 27 | 28 | For detailed explanation on how things work, checkout the [guide](http://vuejs-templates.github.io/webpack/) and [docs for vue-loader](http://vuejs.github.io/vue-loader). 29 | -------------------------------------------------------------------------------- /src/components/index.js: -------------------------------------------------------------------------------- 1 | import dropdown from '@/components/global/dropdown' 2 | import item from '@/components/global/dropdown/item.vue' 3 | 4 | import mymenu from '@/components/global/sidebar//src/my-menu.vue' 5 | import menuitem from '@/components/global/sidebar/src/menu-item.vue' 6 | import mysubmenu from '@/components/global/sidebar/src/my-submenu.vue' 7 | import BackTop from '@/components/global/backtop/src/main' 8 | 9 | const components = [ 10 | dropdown, 11 | item, 12 | mymenu, 13 | menuitem, 14 | mysubmenu, 15 | BackTop 16 | ] 17 | 18 | const install = (Vue, OPts) => { 19 | if (install.installed) { 20 | return 21 | } 22 | components.map(component => { 23 | Vue.component(component.name, component) 24 | }) 25 | } 26 | 27 | export default { 28 | version: '0.0.1', 29 | author: 'kimmy', 30 | install, 31 | dropdown, 32 | item, 33 | mymenu, 34 | menuitem, 35 | mysubmenu, 36 | BackTop 37 | } 38 | -------------------------------------------------------------------------------- /src/directives/autofix.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by kimmy on 2017/10/06. 3 | * 图片自动根据宽高比例压缩,并在父div偏移,达到定位居中的功能 4 | */ 5 | 6 | export default { 7 | install (Vue) { 8 | Vue.directive('autofix', { 9 | bind (el, binding, vnode) { 10 | }, 11 | update (el, binding, vnode) { 12 | console.log('carry', binding) 13 | let img = new Image() 14 | let boxWidth = el.parentNode.offsetWidth 15 | img.onload = () => { 16 | // 以长度小的边为基准, 按比例缩放,然后偏移最长边和当前边框长度差的一半 17 | if (img.width < img.height) { 18 | el.style.height = Math.floor(img.height / img.width * boxWidth) + 'px' 19 | el.style.width = boxWidth + 'px' 20 | el.style.marginTop = -(el.offsetHeight - boxWidth) / 2 + 'px' 21 | } else { 22 | el.style.width = Math.floor(img.width / img.height * boxWidth) + 'px' 23 | el.style.height = boxWidth + 'px' 24 | el.style.marginLeft = -(el.offsetWidth - boxWidth) / 2 + 'px' 25 | } 26 | } 27 | img.src = el.src 28 | }, 29 | unbind (el) { 30 | } 31 | }) 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/directives/myclickoutside.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by kimmy on 2017/5/13. 3 | * 鼠标点击外部事件,用于收起下拉框等操作,示例: v-myclickoutside = 'handler' 4 | */ 5 | 6 | export default { 7 | install (Vue) { 8 | let myNode = [] 9 | document.body.addEventListener('mousedown', (e) => { 10 | for (let i = myNode.length; i--;) { 11 | myNode[i].handlerfn(e, myNode[i]) 12 | } 13 | }) 14 | Vue.directive('myclickoutside', { 15 | bind (el, binding, vnode) { 16 | // id 这里用长度加随机数,防止删除了一些组件后,再次生成的id重复 17 | el.id = myNode.push(el) - 1 + Math.round(Math.random() * 100).toString() 18 | const handlefn = (e) => { 19 | // 是否在组件内部 20 | if (el.contains(e.target)) { 21 | return false 22 | } else { 23 | // 执行处理 24 | vnode.context[binding.expression]() 25 | } 26 | } 27 | el.handlerfn = handlefn 28 | }, 29 | unbind (el) { 30 | let len = myNode.length 31 | for (let i = 0; i < len; i++) { 32 | if (myNode[i].id === el.id) { 33 | myNode.splice(i, 1) 34 | break 35 | } 36 | } 37 | } 38 | }) 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /src/components/global/dropdown/item.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 23 | 24 | 25 | 57 | -------------------------------------------------------------------------------- /src/components/header.vue: -------------------------------------------------------------------------------- 1 | 23 | 24 | 47 | 48 | 49 | 55 | -------------------------------------------------------------------------------- /src/views/when.vue: -------------------------------------------------------------------------------- 1 | 9 | 41 | 59 | -------------------------------------------------------------------------------- /config/index.js: -------------------------------------------------------------------------------- 1 | // see http://vuejs-templates.github.io/webpack for documentation. 2 | var path = require('path') 3 | 4 | module.exports = { 5 | build: { 6 | env: require('./prod.env'), 7 | index: path.resolve(__dirname, '../dist/index.html'), 8 | assetsRoot: path.resolve(__dirname, '../dist'), 9 | assetsSubDirectory: './static', 10 | assetsPublicPath: './', 11 | productionSourceMap: true, 12 | // Gzip off by default as many popular static hosts such as 13 | // Surge or Netlify already gzip all static assets for you. 14 | // Before setting to `true`, make sure to: 15 | // npm install --save-dev compression-webpack-plugin 16 | productionGzip: false, 17 | productionGzipExtensions: ['js', 'css'], 18 | // Run the build command with an extra argument to 19 | // View the bundle analyzer report after build finishes: 20 | // `npm run build --report` 21 | // Set to `true` or `false` to always turn it on or off 22 | bundleAnalyzerReport: process.env.npm_config_report 23 | }, 24 | dev: { 25 | env: require('./dev.env'), 26 | port: 8888, 27 | autoOpenBrowser: true, 28 | assetsSubDirectory: 'static', 29 | assetsPublicPath: '/', 30 | proxyTable: {}, 31 | // CSS Sourcemaps off by default because relative paths are "buggy" 32 | // with this option, according to the CSS-Loader README 33 | // (https://github.com/webpack/css-loader#sourcemaps) 34 | // In our experience, they generally work as expected, 35 | // just be aware of this issue when enabling this option. 36 | cssSourceMap: false 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /src/components/global/dropdown/index.vue: -------------------------------------------------------------------------------- 1 | 16 | 35 | 36 | 37 | 71 | -------------------------------------------------------------------------------- /src/views/home/setColor.vue: -------------------------------------------------------------------------------- 1 | 11 | 12 | 38 | 39 | 40 | 71 | -------------------------------------------------------------------------------- /src/router/index.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import Router from 'vue-router' 3 | import home from '@/views/home/home.vue' 4 | import info from '@/views/info.vue' 5 | 6 | import DatePlan from '@/views/DatePlan' 7 | import EatWhat from '@/views/EatWhat' 8 | import icon from '@/views/icon' 9 | import memo from '@/views/memo' 10 | import mirrow from '@/views/mirrow' 11 | import when from '@/views/when' 12 | import editName from '@/views/editName' 13 | import editFood from '@/views/editFood' 14 | import money from '@/views/money' 15 | import moneyRecord from '@/views/moneyRecord' 16 | import setIcon from '@/views/setIcon' 17 | 18 | Vue.use(Router) 19 | 20 | export default new Router({ 21 | routes: [ 22 | { 23 | path: '/', 24 | name: 'home', 25 | component: home 26 | }, 27 | { 28 | path: '/info', 29 | name: 'info', 30 | component: info 31 | }, 32 | { 33 | component: EatWhat, 34 | name: 'EatWhat', 35 | path: '/EatWhat' 36 | }, 37 | { 38 | component: icon, 39 | name: 'icon', 40 | path: '/icon' 41 | }, 42 | { 43 | component: memo, 44 | name: 'memo', 45 | path: '/memo' 46 | }, 47 | { 48 | component: mirrow, 49 | name: 'mirrow', 50 | path: '/mirrow' 51 | }, 52 | { 53 | component: when, 54 | name: 'when', 55 | path: '/when' 56 | }, 57 | { 58 | component: editName, 59 | name: 'editName', 60 | path: '/editName' 61 | }, 62 | { 63 | component: DatePlan, 64 | name: 'DatePlan', 65 | path: '/DatePlan' 66 | }, 67 | { 68 | component: editFood, 69 | name: 'editFood', 70 | path: '/editFood' 71 | }, 72 | { 73 | component: money, 74 | name: 'money', 75 | path: '/money' 76 | }, 77 | { 78 | component: moneyRecord, 79 | name: 'moneyRecord', 80 | path: '/moneyRecord' 81 | }, 82 | { 83 | component: setIcon, 84 | name: 'setIcon', 85 | path: '/setIcon' 86 | } 87 | ] 88 | }) 89 | -------------------------------------------------------------------------------- /src/views/editName.vue: -------------------------------------------------------------------------------- 1 | 16 | 35 | 76 | -------------------------------------------------------------------------------- /src/components/global/sidebar/src/my-submenu.vue: -------------------------------------------------------------------------------- 1 | 15 | 62 | 65 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "my-tool", 3 | "version": "1.0.0", 4 | "description": "A Vue.js project", 5 | "author": "kimmy", 6 | "private": true, 7 | "scripts": { 8 | "dev": "node build/dev-server.js", 9 | "start": "node build/dev-server.js", 10 | "build": "node build/build.js", 11 | "lint": "eslint --ext .js,.vue src" 12 | }, 13 | "dependencies": { 14 | "axios": "^0.16.2", 15 | "css-loader": "^0.28.7", 16 | "mint-ui": "^2.2.9", 17 | "node-sass": "^4.5.3", 18 | "sass": "^1.0.0-beta.2", 19 | "sass-loader": "^6.0.6", 20 | "vue": "^2.4.2", 21 | "vue-loader": "^13.0.5", 22 | "vue-router": "^2.7.0", 23 | "vue-style-loader": "^3.0.3" 24 | }, 25 | "devDependencies": { 26 | "autoprefixer": "^7.1.2", 27 | "babel-core": "^6.22.1", 28 | "babel-eslint": "^7.1.1", 29 | "babel-loader": "^7.1.1", 30 | "babel-plugin-transform-runtime": "^6.22.0", 31 | "babel-preset-env": "^1.3.2", 32 | "babel-preset-stage-2": "^6.22.0", 33 | "babel-register": "^6.22.0", 34 | "chalk": "^2.0.1", 35 | "connect-history-api-fallback": "^1.3.0", 36 | "copy-webpack-plugin": "^4.0.1", 37 | "css-loader": "^0.28.0", 38 | "cssnano": "^3.10.0", 39 | "eslint": "^3.19.0", 40 | "eslint-friendly-formatter": "^3.0.0", 41 | "eslint-loader": "^1.7.1", 42 | "eslint-plugin-html": "^3.0.0", 43 | "eslint-config-standard": "^6.2.1", 44 | "eslint-plugin-promise": "^3.4.0", 45 | "eslint-plugin-standard": "^2.0.1", 46 | "eventsource-polyfill": "^0.9.6", 47 | "express": "^4.14.1", 48 | "extract-text-webpack-plugin": "^2.0.0", 49 | "file-loader": "^0.11.1", 50 | "friendly-errors-webpack-plugin": "^1.1.3", 51 | "html-webpack-plugin": "^2.28.0", 52 | "http-proxy-middleware": "^0.17.3", 53 | "webpack-bundle-analyzer": "^2.2.1", 54 | "semver": "^5.3.0", 55 | "shelljs": "^0.7.6", 56 | "opn": "^5.1.0", 57 | "optimize-css-assets-webpack-plugin": "^2.0.0", 58 | "ora": "^1.2.0", 59 | "rimraf": "^2.6.0", 60 | "url-loader": "^0.5.8", 61 | "vue-loader": "^13.0.4", 62 | "vue-style-loader": "^3.0.1", 63 | "vue-template-compiler": "^2.4.2", 64 | "webpack": "^2.6.1", 65 | "webpack-dev-middleware": "^1.10.0", 66 | "webpack-hot-middleware": "^2.18.0", 67 | "webpack-merge": "^4.1.0" 68 | }, 69 | "engines": { 70 | "node": ">= 4.0.0", 71 | "npm": ">= 3.0.0" 72 | }, 73 | "browserslist": [ 74 | "> 1%", 75 | "last 2 versions", 76 | "not ie <= 8" 77 | ] 78 | } 79 | -------------------------------------------------------------------------------- /src/components/global/backtop/src/main.vue: -------------------------------------------------------------------------------- 1 | 8 | 65 | 103 | -------------------------------------------------------------------------------- /src/views/editFood.vue: -------------------------------------------------------------------------------- 1 | 14 | 62 | 96 | 97 | -------------------------------------------------------------------------------- /src/views/memo.vue: -------------------------------------------------------------------------------- 1 | 33 | 83 | 126 | -------------------------------------------------------------------------------- /src/views/info.vue: -------------------------------------------------------------------------------- 1 | 28 | 29 | 94 | 95 | 158 | -------------------------------------------------------------------------------- /src/App.vue: -------------------------------------------------------------------------------- 1 | 45 | 46 | 104 | 105 | 132 | -------------------------------------------------------------------------------- /src/components/global/sidebar/src/my-menu.vue: -------------------------------------------------------------------------------- 1 | 10 | 61 | 196 | -------------------------------------------------------------------------------- /src/views/EatWhat.vue: -------------------------------------------------------------------------------- 1 | 21 | 130 | 131 | 152 | -------------------------------------------------------------------------------- /src/views/home/home.vue: -------------------------------------------------------------------------------- 1 | 32 | 33 | 82 | 83 | 84 | 176 | -------------------------------------------------------------------------------- /src/views/icon.vue: -------------------------------------------------------------------------------- 1 | 20 | 71 | 187 | -------------------------------------------------------------------------------- /src/assets/fontIcon/iconfont.css: -------------------------------------------------------------------------------- 1 | 2 | @font-face {font-family: "iconfont"; 3 | src: url('iconfont.eot?t=1507424161312'); /* IE9*/ 4 | src: url('iconfont.eot?t=1507424161312#iefix') format('embedded-opentype'), /* IE6-IE8 */ 5 | url('data:application/x-font-woff;charset=utf-8;base64,d09GRgABAAAAAA8QAAsAAAAAFgQAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABHU1VCAAABCAAAADMAAABCsP6z7U9TLzIAAAE8AAAARAAAAFZW7krNY21hcAAAAYAAAAC8AAACWDdz1d1nbHlmAAACPAAAClgAAA5czjetIGhlYWQAAAyUAAAAMAAAADYPHXU/aGhlYQAADMQAAAAgAAAAJAfeA5BobXR4AAAM5AAAABwAAAA4N+v//mxvY2EAAA0AAAAAHgAAAB4dTBn6bWF4cAAADSAAAAAfAAAAIAEkAOBuYW1lAAANQAAAAUUAAAJtPlT+fXBvc3QAAA6IAAAAiAAAALP1iOcmeJxjYGRgYOBikGPQYWB0cfMJYeBgYGGAAJAMY05meiJQDMoDyrGAaQ4gZoOIAgCKIwNPAHicY2Bk/s84gYGVgYOpk+kMAwNDP4RmfM1gxMjBwMDEwMrMgBUEpLmmMDgwVLy4w9zwv4EhhrmBoQEozAiSAwA2HQ1ReJzFkk0OgkAMhd/Ij4KQuICEGI/gXbgO8UCugBOxfuEW+Dplo3Gtbb5J5k3SNn0DIAOQiLtIgTAiwOIpNUQ9QRn1FA/dG1ykpBgIZizZsmPPeV22Ta+mJlKbqE67+hlBVSw75TXmLaoJjjhpojMOqNQ1V58ahZ7yL1V+FOF/rd+jiue432ox7GhEwjEvuaNtgqmjvcovxzxn6WjXYONo62DrWDd2jvnP3pEn4OTYf+Hs2Dzr4qB4AcJJOS54nHVXfYwbVxHfeW93335517ve9frj7nxrn3dzudxdbJ/tXJLz5a5JqhylfJT2kqA2n02T0kBpK9KSCNKQQkFFQghUKGpDq4YUpP6RSA1UlAT6QSWKUClpKGkgKq2EFKRK+YfyR7zHvPW1vQrVsmffm5n33sy+md+MBUkQFt6iz9GckBGWCTVhvfBpQQB5BMom6YcgmhgjI+AFkue7Jo0qUcAq5TE6BX5ZdrP11kToy0y2wIQBaAT1VjRGImhOdMgaqGf7AfLFwg1Otc+h3wMtFw08EM+RJ8ArVfqszmi8acW0Wx/MKAcMx8k7zkOKLEkKIaJlwn4/q0qqJsdPSlbBe640TEpg5KPCdVtSg0Vnx4MTX+yv+irA4cOQKQ6aJ6btgo3fQ4VsxsmzdErJFVKVIRcOvKPnMkZ/+LaAHxF9PUPP0BnhFuEx4RfCaUGQamE0BpEJTGblcRiD9kSrjYxKmfNx3IE10AFkNcPWNLQaWX8AfGS0GvUS+sxM8JDRqGd9N+vKngkj+C6Ym/Wz+FbkKNvgu6F+ByaSk3AYlVHC5HIUjkNYYQOAq3AfN9nalZnfarRb7Vbdz/qLK5BvAkWt3tljQB4opI1WX19bs/OGdqelKSqQmZpkuiIoCoiuJdZmCKiKZn1FM/K23uwrNnU7r2t3WRoDFWZroumJiiJ6plibRQbTrHs0E8jtRAeydT0wBuu3EtDJXgqGZq+8sZbWdaD7qQ5bN4Asw4atoNPbCBh6uj5fs/X7ZjYDbJ6ZnSdkfnZkNcDqkRWTAJMz4JjLKR02HZCu0UMH+p2JjZBzxdXrJkU3Bxubdj84ob5BAicVERKmHHF9omc3E73JdasTvQmnpydOQkeO8ptulVitUWPy7rlcJE+BrqWGqinNgGk5ys3tlhOhdOumPBem9FQYpfS/ws0bN95MCKeQhs7Y2BTA1NhYB0MeY+NBup3eK6zDCb/qNoYEjwsLMMQx9sOI3woXcL5FZMajg8/DDmu7JmHk+zkvclMpWVILesq8Z1vGy6xszvSXy+NWenTkuqiyorZ8byt/S7gM9y3kQolKkjNy7ea9d+xvWNn+FByQmS6LdVfPj6Qz6Yqdts1SESRJv87v++SmBzZMNaZbP5hf/tjUNW6p8KnWZ3VRHpzcd9+9d863xeCOQ1+fEFgS4y/QWYHiWBcszOsBAR3M2IHNvKCZh8CGhlep4o/xcPUaXsOu+GXWbjQrrIE+JdGM+RBGzQrGZBJx0/RoePVlOtn99apVkJ+cvCJWAnkuKv+96JsHf9wfUHXA7q/AYKlYhmUAzS1rAFp09uohXPfUU1dfJl/o/pDCqlWr3g6swVch3GZtqB6jZnpooDgMgwXGRuowuWJ81ft5elgU6GEcG2j9GN5IkBX8ltAOhUgWAC2zuZm+NABoqCRjbng2JlCrXW1NRNWQCLEgQXDhAgSSFF+6cCG+BNuKAUBQ9LIQZDwvE1/K5FKKktINCFw3vqTBYdSSlqyK21EA1weRcUIvDZX0EwacBl+JTyk+AXZC79NP4MsmC/HCb0SgG4XdwlnEk0qQIEcUtm3M8RBznIQcV5DX5rAxja9zmrR4qmc5gHBaTyQoQz46hZxsT1gCL5uAK9/JZglMVBFlUTnTTm4Gl0TN5ADEkmhlGPF4lRcjl7MSwThUWDkRcGzC7fmXDBBujm+7A8RvkGdL8XFzwFBsSQaJWdW0xla6mmLIpkRlIvo6k07KaSNXDVzZlkwEGYs5+Yys+sUUFSXDSSv5oGI5xiOqqmsSMyUgprRb63PTBQ2HmhXGD8IepaCIFEoFzXQsRncoRFSZmtFwkWG1JKJTKmmZsOilnAHfyKtElo0pi2nsJGOY20BEzWRKtiapKSmluxUqI8TNiorkGJ4H2ymVJV1h466iGrKly24qW1SZ9DQ6IQOhRBV1A7cQmYg76RqV8FgJQNFTDyOE6hKzUzLz+qWdho9ey/G3JMPHjKwRUVTglJfXVNFU6C2aIjOFqY72sCoTwI9MJEW1LEkkIKmSrRNVRiBmTzNZNVVCJYwzhfnjskxBNj03vglvSAIhiW9h4Xf0LJ3GUU4YElrCrHC9sFXYI9wlfE14UvgLxj4WpnCihfUGK0wj4GUJSy2vNkvGrFYOm/YEwhHOLLBdGfMDy3NU4ZWl3eCJgkUd9/ETjt/gFYlV+A68VuMOH+FzzR4fAgwaLFEeCr1EhU9kDFGfl74AY9ceg4wJSeg3K2EkY7XsgN9uRsl5yRPLmI/4gnxur09GmHxMNizpp5J+Pt6k6LoCv1Q0LW4iUeAVpO8qmvS4ZBnyT/R4+3xpeLg0X1q+vDSfcpzUvGnbt/amiQCnZk/w/zzype6Oah3svozjZPgPqKj3Qb1KjoU1gJoKBbe7wy2AKqZViUBKchwp1aMAaZajqECOoQI8gzZbOtpsGaBhPUxrDy0+v4v2+wr3xpIfia8oOty3vLMcAMk+sIuOU7SfgOEeZ3jvIuduGJ4eBk72OpzhkJ9BPZwRq8sGQ2VCCacTWjL7U/3yTFgHFJI/hvWrF91i0f28CWBnjT5sDA4Qc1Xv0TeQAmsLF/PY4r3dC/QSeQNrgSsUhUhoCEI18IJ2OYGoKQg8N0EK6DUWiDQIU9UOZGVGl4wRQ56KN5/bsfmmb1Sr9Ffh0NEbN3f/pb93+vR7enyeeQ5hgBthUD/34URirw+trqLqlu2Os33LjUeHqvCHZ94VxXef6baYqJisyxjVWXxxyQQtFRaep8/TjuChvasx+qOwzBC5KO+p1kC11eYVl3MkOeTVF3qZ0UZHeJ4gaxFZZfr43wZvCuJtOalppHJVA8ZLDjw+CHAu/odqxF2vSEeJCmWjZJw3vhkYg6nXDSPQbJX9UxQRaza+USrFuzID8Z8zYSrflHLwaGlkxSvx2yoZpX3ugqHCgGG8ZpS+XTFAf80YNAJVpLhYE2X+/pEsvENP0D6sw23srD8j3CzsQ4+WJFcGU5jXsnaDz3jvmNQxTCpM5jBa1ERnbLzuMt4Y4gD21a4cLJ34AddbBIIEFNoBT3hy+3nVMNTzqq7/qfu1Ed6OjYScE+bL5Tw5wmnA50Ei63JtxzDg7t4ziFdyIbzK6ZIxeZRLHaN7LawdJdboWsAJDBW7V4pDgE9i4ZOz1o52r4yuJbsN9ed88UfImd4e58CwEdeRCMndL9D7yX/xfflChVf9DwGOLvHrI+N13cPFITw0od2jyfhQsVotLuGTAzDUHsJv/HsYanEjW0Pxbz8YLvYcz9Jz9HOLZ4/zf0ECe7/roB/TiC/lE/nF+CoGjvjiS4CNXdx96eRlSbp88tRlUbx8aucRQo7s3HU/pffvun4XIbfNfeIOSvbRG7jikoVXf/TBkpOXyUFc01u580i8DxfN3UbIjrm5/e/n9xnMlVns8XyhD/+/TfDo8irY0vFfo8kRl3d1SH0PyceaPjx1ED890ul8dWpqz9kYXTjbo8ffFMU3jyeUfGfqP3s6U1NvHew8e/DpL++Bf3+gdTa+eka8ePz4RTGhwv8Aq55TNXicY2BkYGAA4eUH++P5bb4ycLMwgMDV/zMWwuj///43sDAyNwC5HAxMIFEAcPUN0HicY2BkYGBu+N/AEMPC9P/f//8sjAxAERTABwCg6AZ1eJxjYWBgYH7JwMDCAMVMMPb/f3AxLBgAb/UDIAAAAAAAdgGEAegCSgKgA8AE7gVIBa4GRgaEBt4HLgAAeJxjYGRgYOBjuMLAwwACTEDMBYQMDP/BfAYAH4wCBQB4nGWPTU7DMBCFX/oHpBKqqGCH5AViASj9EatuWFRq911036ZOmyqJI8et1ANwHo7ACTgC3IA78EgnmzaWx9+8eWNPANzgBx6O3y33kT1cMjtyDRe4F65TfxBukF+Em2jjVbhF/U3YxzOmwm10YXmD17hi9oR3YQ8dfAjXcI1P4Tr1L+EG+Vu4iTv8CrfQ8erCPuZeV7iNRy/2x1YvnF6p5UHFockikzm/gple75KFrdLqnGtbxCZTg6BfSVOdaVvdU+zXQ+ciFVmTqgmrOkmMyq3Z6tAFG+fyUa8XiR6EJuVYY/62xgKOcQWFJQ6MMUIYZIjK6Og7VWb0r7FDwl57Vj3N53RbFNT/c4UBAvTPXFO6stJ5Ok+BPV8bUnV0K27LnpQ0kV7NSRKyQl7WtlRC6gE2ZVeOEXpc0Yk/KGdI/wAJWm7IAAAAeJxtiksSgjAUBDMQQFBg6yVYuPQ4iYbkKT4oMcXn9Cbl1l71TLVIxI9K/KdBghQSGXIUOKBEhSNOqNGgFVjz2Znd0Xl2NJBiG5wN27unNc6rfIe/fioKwaRod2qUE/W+eERnm/aKS21oCT74LNYX+TLs843YamoXQ5rU+KGuu43TJsQXFXkqbQ==') format('woff'), 6 | url('iconfont.ttf?t=1507424161312') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+*/ 7 | url('iconfont.svg?t=1507424161312#iconfont') format('svg'); /* iOS 4.1- */ 8 | } 9 | 10 | .iconfont { 11 | font-family:"iconfont" !important; 12 | font-size:16px; 13 | font-style:normal; 14 | -webkit-font-smoothing: antialiased; 15 | -moz-osx-font-smoothing: grayscale; 16 | } 17 | 18 | .icon-shezhi:before { content: "\e614"; } 19 | 20 | .icon-shiliangzhinengduixiang9:before { content: "\e600"; } 21 | 22 | .icon-rili:before { content: "\e6ad"; } 23 | 24 | .icon-kaishipaizhao:before { content: "\e605"; } 25 | 26 | .icon-pifu:before { content: "\e64f"; } 27 | 28 | .icon-jizhang:before { content: "\e603"; } 29 | 30 | .icon-fan:before { content: "\e604"; } 31 | 32 | .icon-beiwanglu:before { content: "\e8dc"; } 33 | 34 | .icon-rili1:before { content: "\e618"; } 35 | 36 | .icon-menu:before { content: "\e60a"; } 37 | 38 | .icon-yingbi:before { content: "\e615"; } 39 | 40 | .icon-weibiaoti--copy:before { content: "\e6ae"; } 41 | 42 | -------------------------------------------------------------------------------- /src/views/setIcon.vue: -------------------------------------------------------------------------------- 1 | 40 | 153 | 215 | -------------------------------------------------------------------------------- /src/views/DatePlan.vue: -------------------------------------------------------------------------------- 1 | 69 | 175 | 245 | 246 | -------------------------------------------------------------------------------- /src/views/moneyRecord.vue: -------------------------------------------------------------------------------- 1 | 46 | 199 | 296 | 297 | -------------------------------------------------------------------------------- /src/views/money.vue: -------------------------------------------------------------------------------- 1 | 53 | 251 | 329 | -------------------------------------------------------------------------------- /src/assets/fontIcon/iconfont.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 7 | 8 | Created by iconfont 9 | 10 | 11 | 12 | 13 | 21 | 22 | 23 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | -------------------------------------------------------------------------------- /src/assets/fontIcon/iconfont.js: -------------------------------------------------------------------------------- 1 | (function(window){var svgSprite='';var script=function(){var scripts=document.getElementsByTagName("script");return scripts[scripts.length-1]}();var shouldInjectCss=script.getAttribute("data-injectcss");var ready=function(fn){if(document.addEventListener){if(~["complete","loaded","interactive"].indexOf(document.readyState)){setTimeout(fn,0)}else{var loadFn=function(){document.removeEventListener("DOMContentLoaded",loadFn,false);fn()};document.addEventListener("DOMContentLoaded",loadFn,false)}}else if(document.attachEvent){IEContentLoaded(window,fn)}function IEContentLoaded(w,fn){var d=w.document,done=false,init=function(){if(!done){done=true;fn()}};var polling=function(){try{d.documentElement.doScroll("left")}catch(e){setTimeout(polling,50);return}init()};polling();d.onreadystatechange=function(){if(d.readyState=="complete"){d.onreadystatechange=null;init()}}}};var before=function(el,target){target.parentNode.insertBefore(el,target)};var prepend=function(el,target){if(target.firstChild){before(el,target.firstChild)}else{target.appendChild(el)}};function appendSvg(){var div,svg;div=document.createElement("div");div.innerHTML=svgSprite;svgSprite=null;svg=div.getElementsByTagName("svg")[0];if(svg){svg.setAttribute("aria-hidden","true");svg.style.position="absolute";svg.style.width=0;svg.style.height=0;svg.style.overflow="hidden";prepend(svg,document.body)}}if(shouldInjectCss&&!window.__iconfont__svg__cssinject__){window.__iconfont__svg__cssinject__=true;try{document.write("")}catch(e){console&&console.log(e)}}ready(appendSvg)})(window) --------------------------------------------------------------------------------