├── .babelrc
├── .editorconfig
├── .gitignore
├── .postcssrc.js
├── README.md
├── build
├── build.js
├── check-versions.js
├── logo.png
├── package.json
├── utils.js
├── vue-loader.conf.js
├── webpack.base.conf.js
├── webpack.dev.conf.js
└── webpack.prod.conf.js
├── config
├── dev.env.js
├── index.js
└── prod.env.js
├── index.html
├── package.json
├── src
├── App.vue
├── assets
│ └── logo.png
├── iconfont
│ ├── iconfont.css
│ ├── iconfont.eot
│ ├── iconfont.js
│ ├── iconfont.svg
│ ├── iconfont.ttf
│ └── iconfont.woff
├── main.js
├── pages
│ ├── HelloWorld.vue
│ ├── add.vue
│ ├── ceshi.vue
│ ├── complete.vue
│ ├── footer.vue
│ ├── header.vue
│ └── index.vue
├── router
│ └── index.js
├── style
│ ├── rem.js
│ └── style.css
└── vuex
│ ├── actions.js
│ ├── index.js
│ ├── mutations.js
│ ├── state.js
│ └── type.js
└── static
└── .gitkeep
/.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-vue-jsx", "transform-runtime"]
12 | }
13 |
--------------------------------------------------------------------------------
/.editorconfig:
--------------------------------------------------------------------------------
1 | root = true
2 |
3 | [*]
4 | charset = utf-8
5 | indent_style = space
6 | indent_size = 2
7 | end_of_line = lf
8 | insert_final_newline = true
9 | trim_trailing_whitespace = true
10 |
--------------------------------------------------------------------------------
/.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 | .vscode
11 | *.suo
12 | *.ntvs*
13 | *.njsproj
14 | *.sln
15 |
--------------------------------------------------------------------------------
/.postcssrc.js:
--------------------------------------------------------------------------------
1 | // https://github.com/michael-ciniawsky/postcss-load-config
2 |
3 | module.exports = {
4 | "plugins": {
5 | "postcss-import": {},
6 | "postcss-url": {},
7 | // to edit target browsers: use "browserslist" field in package.json
8 | "autoprefixer": {}
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # 基于vue2.0+vuex+localStorage写的记事本
2 |
3 | ## 写在前面
4 |
5 | > 这个demo虽然功能少,但是其知识点很精华 基本上vuex知识点大部分都在这里面了,麻雀虽小 五脏俱全
6 |
7 | > 如果你觉的对你有帮助帮忙点个star谢谢 感谢大佬!
8 |
9 | > 前端交流群740625675
10 |
11 |
12 |
13 | ## 代码预览
14 |
15 | > vuex官方文档 https://vuex.vuejs.org/ 我觉的官方文档说明很详细
16 |
17 | > localStorage用来本地储存
18 |
19 | ```bash
20 | const state={
21 | home:localStorage["home"]?JSON.parse(localStorage["home"]): [],
22 | item:localStorage["item"]?JSON.parse(localStorage["item"]): [],
23 | }
24 |
25 | export default state
26 | ```
27 |
28 | ```bash
29 | const mutations={
30 |
31 | [types.SET_SHIXIANG](state,data){
32 | state.home.push(data)
33 | localStorage.setItem("home",JSON.stringify(state.home));
34 | },
35 |
36 | [types.SET_YES](state,data){
37 | state.item.push(data)
38 | localStorage.setItem("item",JSON.stringify(state.item));
39 | }
40 | }
41 |
42 | export default mutations
43 |
44 | ```
45 |
46 |
47 | ```bash
48 | const actions={
49 | setOrder ({commit}, data) {
50 | commit('SET_SHIXIANG', data);
51 | },
52 | setYes({commit},data){
53 | commit('SET_YES',data)
54 | }
55 | }
56 |
57 | export default actions
58 |
59 | ```
60 |
61 | ## 项目截图
62 |
63 |
64 |
65 |
66 |
67 | ## 项目运行
68 |
69 | ``` bash
70 | # install dependencies
71 | npm install
72 |
73 | # serve with hot reload at localhost:8080
74 | npm run dev
75 |
76 | # build for production with minification
77 | npm run build
78 | ```
79 |
80 | ## 写在最后
81 | 前端实习生一枚,做的不好,还望大佬嘴下留情 轻喷 大佬我想要个star
82 |
83 |
84 |
--------------------------------------------------------------------------------
/build/build.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 | require('./check-versions')()
3 |
4 | process.env.NODE_ENV = 'production'
5 |
6 | const ora = require('ora')
7 | const rm = require('rimraf')
8 | const path = require('path')
9 | const chalk = require('chalk')
10 | const webpack = require('webpack')
11 | const config = require('../config')
12 | const webpackConfig = require('./webpack.prod.conf')
13 |
14 | const spinner = ora('building for production...')
15 | spinner.start()
16 |
17 | rm(path.join(config.build.assetsRoot, config.build.assetsSubDirectory), err => {
18 | if (err) throw err
19 | webpack(webpackConfig, (err, stats) => {
20 | spinner.stop()
21 | if (err) throw err
22 | process.stdout.write(stats.toString({
23 | colors: true,
24 | modules: false,
25 | children: false, // If you are using ts-loader, setting this to true will make TypeScript errors show up during build.
26 | chunks: false,
27 | chunkModules: false
28 | }) + '\n\n')
29 |
30 | if (stats.hasErrors()) {
31 | console.log(chalk.red(' Build failed with errors.\n'))
32 | process.exit(1)
33 | }
34 |
35 | console.log(chalk.cyan(' Build complete.\n'))
36 | console.log(chalk.yellow(
37 | ' Tip: built files are meant to be served over an HTTP server.\n' +
38 | ' Opening index.html over file:// won\'t work.\n'
39 | ))
40 | })
41 | })
42 |
--------------------------------------------------------------------------------
/build/check-versions.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 | const chalk = require('chalk')
3 | const semver = require('semver')
4 | const packageConfig = require('../package.json')
5 | const shell = require('shelljs')
6 |
7 | function exec (cmd) {
8 | return require('child_process').execSync(cmd).toString().trim()
9 | }
10 |
11 | const versionRequirements = [
12 | {
13 | name: 'node',
14 | currentVersion: semver.clean(process.version),
15 | versionRequirement: packageConfig.engines.node
16 | }
17 | ]
18 |
19 | if (shell.which('npm')) {
20 | versionRequirements.push({
21 | name: 'npm',
22 | currentVersion: exec('npm --version'),
23 | versionRequirement: packageConfig.engines.npm
24 | })
25 | }
26 |
27 | module.exports = function () {
28 | const warnings = []
29 |
30 | for (let i = 0; i < versionRequirements.length; i++) {
31 | const mod = versionRequirements[i]
32 |
33 | if (!semver.satisfies(mod.currentVersion, mod.versionRequirement)) {
34 | warnings.push(mod.name + ': ' +
35 | chalk.red(mod.currentVersion) + ' should be ' +
36 | chalk.green(mod.versionRequirement)
37 | )
38 | }
39 | }
40 |
41 | if (warnings.length) {
42 | console.log('')
43 | console.log(chalk.yellow('To use this template, you must update following to modules:'))
44 | console.log()
45 |
46 | for (let i = 0; i < warnings.length; i++) {
47 | const warning = warnings[i]
48 | console.log(' ' + warning)
49 | }
50 |
51 | console.log()
52 | process.exit(1)
53 | }
54 | }
55 |
--------------------------------------------------------------------------------
/build/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mynameisfwk/vue-Todo-list/3d8796f078fae784d7e337999d91cc2265a60aa6/build/logo.png
--------------------------------------------------------------------------------
/build/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "dependencies": {
3 | "vuex": "^3.0.1"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/build/utils.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 | const path = require('path')
3 | const config = require('../config')
4 | const ExtractTextPlugin = require('extract-text-webpack-plugin')
5 | const packageConfig = require('../package.json')
6 |
7 | exports.assetsPath = function (_path) {
8 | const assetsSubDirectory = process.env.NODE_ENV === 'production'
9 | ? config.build.assetsSubDirectory
10 | : config.dev.assetsSubDirectory
11 |
12 | return path.posix.join(assetsSubDirectory, _path)
13 | }
14 |
15 | exports.cssLoaders = function (options) {
16 | options = options || {}
17 |
18 | const cssLoader = {
19 | loader: 'css-loader',
20 | options: {
21 | sourceMap: options.sourceMap
22 | }
23 | }
24 |
25 | const postcssLoader = {
26 | loader: 'postcss-loader',
27 | options: {
28 | sourceMap: options.sourceMap
29 | }
30 | }
31 |
32 | // generate loader string to be used with extract text plugin
33 | function generateLoaders (loader, loaderOptions) {
34 | const loaders = options.usePostCSS ? [cssLoader, postcssLoader] : [cssLoader]
35 |
36 | if (loader) {
37 | loaders.push({
38 | loader: loader + '-loader',
39 | options: Object.assign({}, loaderOptions, {
40 | sourceMap: options.sourceMap
41 | })
42 | })
43 | }
44 |
45 | // Extract CSS when that option is specified
46 | // (which is the case during production build)
47 | if (options.extract) {
48 | return ExtractTextPlugin.extract({
49 | use: loaders,
50 | fallback: 'vue-style-loader'
51 | })
52 | } else {
53 | return ['vue-style-loader'].concat(loaders)
54 | }
55 | }
56 |
57 | // https://vue-loader.vuejs.org/en/configurations/extract-css.html
58 | return {
59 | css: generateLoaders(),
60 | postcss: generateLoaders(),
61 | less: generateLoaders('less'),
62 | sass: generateLoaders('sass', { indentedSyntax: true }),
63 | scss: generateLoaders('sass'),
64 | stylus: generateLoaders('stylus'),
65 | styl: generateLoaders('stylus')
66 | }
67 | }
68 |
69 | // Generate loaders for standalone style files (outside of .vue)
70 | exports.styleLoaders = function (options) {
71 | const output = []
72 | const loaders = exports.cssLoaders(options)
73 |
74 | for (const extension in loaders) {
75 | const loader = loaders[extension]
76 | output.push({
77 | test: new RegExp('\\.' + extension + '$'),
78 | use: loader
79 | })
80 | }
81 |
82 | return output
83 | }
84 |
85 | exports.createNotifierCallback = () => {
86 | const notifier = require('node-notifier')
87 |
88 | return (severity, errors) => {
89 | if (severity !== 'error') return
90 |
91 | const error = errors[0]
92 | const filename = error.file && error.file.split('!').pop()
93 |
94 | notifier.notify({
95 | title: packageConfig.name,
96 | message: severity + ': ' + error.name,
97 | subtitle: filename || '',
98 | icon: path.join(__dirname, 'logo.png')
99 | })
100 | }
101 | }
102 |
--------------------------------------------------------------------------------
/build/vue-loader.conf.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 | const utils = require('./utils')
3 | const config = require('../config')
4 | const isProduction = process.env.NODE_ENV === 'production'
5 | const sourceMapEnabled = isProduction
6 | ? config.build.productionSourceMap
7 | : config.dev.cssSourceMap
8 |
9 | module.exports = {
10 | loaders: utils.cssLoaders({
11 | sourceMap: sourceMapEnabled,
12 | extract: isProduction
13 | }),
14 | cssSourceMap: sourceMapEnabled,
15 | cacheBusting: config.dev.cacheBusting,
16 | transformToRequire: {
17 | video: ['src', 'poster'],
18 | source: 'src',
19 | img: 'src',
20 | image: 'xlink:href'
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/build/webpack.base.conf.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 | const path = require('path')
3 | const utils = require('./utils')
4 | const config = require('../config')
5 | const vueLoaderConfig = require('./vue-loader.conf')
6 |
7 | function resolve (dir) {
8 | return path.join(__dirname, '..', dir)
9 | }
10 |
11 |
12 |
13 | module.exports = {
14 | context: path.resolve(__dirname, '../'),
15 | entry: {
16 | app: './src/main.js'
17 | },
18 | output: {
19 | path: config.build.assetsRoot,
20 | filename: '[name].js',
21 | publicPath: process.env.NODE_ENV === 'production'
22 | ? config.build.assetsPublicPath
23 | : config.dev.assetsPublicPath
24 | },
25 | resolve: {
26 | extensions: ['.js', '.vue', '.json'],
27 | alias: {
28 | 'vue$': 'vue/dist/vue.esm.js',
29 | '@': resolve('src'),
30 | }
31 | },
32 | module: {
33 | rules: [
34 | {
35 | test: /\.vue$/,
36 | loader: 'vue-loader',
37 | options: vueLoaderConfig
38 | },
39 | {
40 | test: /\.js$/,
41 | loader: 'babel-loader',
42 | include: [resolve('src'), resolve('test'), resolve('node_modules/webpack-dev-server/client')]
43 | },
44 | {
45 | test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
46 | loader: 'url-loader',
47 | options: {
48 | limit: 10000,
49 | name: utils.assetsPath('img/[name].[hash:7].[ext]')
50 | }
51 | },
52 | {
53 | test: /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/,
54 | loader: 'url-loader',
55 | options: {
56 | limit: 10000,
57 | name: utils.assetsPath('media/[name].[hash:7].[ext]')
58 | }
59 | },
60 | {
61 | test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
62 | loader: 'url-loader',
63 | options: {
64 | limit: 10000,
65 | name: utils.assetsPath('fonts/[name].[hash:7].[ext]')
66 | }
67 | }
68 | ]
69 | },
70 | node: {
71 | // prevent webpack from injecting useless setImmediate polyfill because Vue
72 | // source contains it (although only uses it if it's native).
73 | setImmediate: false,
74 | // prevent webpack from injecting mocks to Node native modules
75 | // that does not make sense for the client
76 | dgram: 'empty',
77 | fs: 'empty',
78 | net: 'empty',
79 | tls: 'empty',
80 | child_process: 'empty'
81 | }
82 | }
83 |
--------------------------------------------------------------------------------
/build/webpack.dev.conf.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 | const utils = require('./utils')
3 | const webpack = require('webpack')
4 | const config = require('../config')
5 | const merge = require('webpack-merge')
6 | const path = require('path')
7 | const baseWebpackConfig = require('./webpack.base.conf')
8 | const CopyWebpackPlugin = require('copy-webpack-plugin')
9 | const HtmlWebpackPlugin = require('html-webpack-plugin')
10 | const FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin')
11 | const portfinder = require('portfinder')
12 |
13 | const HOST = process.env.HOST
14 | const PORT = process.env.PORT && Number(process.env.PORT)
15 |
16 | const devWebpackConfig = merge(baseWebpackConfig, {
17 | module: {
18 | rules: utils.styleLoaders({ sourceMap: config.dev.cssSourceMap, usePostCSS: true })
19 | },
20 | // cheap-module-eval-source-map is faster for development
21 | devtool: config.dev.devtool,
22 |
23 | // these devServer options should be customized in /config/index.js
24 | devServer: {
25 | clientLogLevel: 'warning',
26 | historyApiFallback: {
27 | rewrites: [
28 | { from: /.*/, to: path.posix.join(config.dev.assetsPublicPath, 'index.html') },
29 | ],
30 | },
31 | hot: true,
32 | contentBase: false, // since we use CopyWebpackPlugin.
33 | compress: true,
34 | host: HOST || config.dev.host,
35 | port: PORT || config.dev.port,
36 | open: config.dev.autoOpenBrowser,
37 | overlay: config.dev.errorOverlay
38 | ? { warnings: false, errors: true }
39 | : false,
40 | publicPath: config.dev.assetsPublicPath,
41 | proxy: config.dev.proxyTable,
42 | quiet: true, // necessary for FriendlyErrorsPlugin
43 | watchOptions: {
44 | poll: config.dev.poll,
45 | }
46 | },
47 | plugins: [
48 | new webpack.DefinePlugin({
49 | 'process.env': require('../config/dev.env')
50 | }),
51 | new webpack.HotModuleReplacementPlugin(),
52 | new webpack.NamedModulesPlugin(), // HMR shows correct file names in console on update.
53 | new webpack.NoEmitOnErrorsPlugin(),
54 | // https://github.com/ampedandwired/html-webpack-plugin
55 | new HtmlWebpackPlugin({
56 | filename: 'index.html',
57 | template: 'index.html',
58 | inject: true
59 | }),
60 | // copy custom static assets
61 | new CopyWebpackPlugin([
62 | {
63 | from: path.resolve(__dirname, '../static'),
64 | to: config.dev.assetsSubDirectory,
65 | ignore: ['.*']
66 | }
67 | ])
68 | ]
69 | })
70 |
71 | module.exports = new Promise((resolve, reject) => {
72 | portfinder.basePort = process.env.PORT || config.dev.port
73 | portfinder.getPort((err, port) => {
74 | if (err) {
75 | reject(err)
76 | } else {
77 | // publish the new Port, necessary for e2e tests
78 | process.env.PORT = port
79 | // add port to devServer config
80 | devWebpackConfig.devServer.port = port
81 |
82 | // Add FriendlyErrorsPlugin
83 | devWebpackConfig.plugins.push(new FriendlyErrorsPlugin({
84 | compilationSuccessInfo: {
85 | messages: [`Your application is running here: http://${devWebpackConfig.devServer.host}:${port}`],
86 | },
87 | onErrors: config.dev.notifyOnErrors
88 | ? utils.createNotifierCallback()
89 | : undefined
90 | }))
91 |
92 | resolve(devWebpackConfig)
93 | }
94 | })
95 | })
96 |
--------------------------------------------------------------------------------
/build/webpack.prod.conf.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 | const path = require('path')
3 | const utils = require('./utils')
4 | const webpack = require('webpack')
5 | const config = require('../config')
6 | const merge = require('webpack-merge')
7 | const baseWebpackConfig = require('./webpack.base.conf')
8 | const CopyWebpackPlugin = require('copy-webpack-plugin')
9 | const HtmlWebpackPlugin = require('html-webpack-plugin')
10 | const ExtractTextPlugin = require('extract-text-webpack-plugin')
11 | const OptimizeCSSPlugin = require('optimize-css-assets-webpack-plugin')
12 | const UglifyJsPlugin = require('uglifyjs-webpack-plugin')
13 |
14 | const env = require('../config/prod.env')
15 |
16 | const webpackConfig = merge(baseWebpackConfig, {
17 | module: {
18 | rules: utils.styleLoaders({
19 | sourceMap: config.build.productionSourceMap,
20 | extract: true,
21 | usePostCSS: true
22 | })
23 | },
24 | devtool: config.build.productionSourceMap ? config.build.devtool : false,
25 | output: {
26 | path: config.build.assetsRoot,
27 | filename: utils.assetsPath('js/[name].[chunkhash].js'),
28 | chunkFilename: utils.assetsPath('js/[id].[chunkhash].js')
29 | },
30 | plugins: [
31 | // http://vuejs.github.io/vue-loader/en/workflow/production.html
32 | new webpack.DefinePlugin({
33 | 'process.env': env
34 | }),
35 | new UglifyJsPlugin({
36 | uglifyOptions: {
37 | compress: {
38 | warnings: false
39 | }
40 | },
41 | sourceMap: config.build.productionSourceMap,
42 | parallel: true
43 | }),
44 | // extract css into its own file
45 | new ExtractTextPlugin({
46 | filename: utils.assetsPath('css/[name].[contenthash].css'),
47 | // Setting the following option to `false` will not extract CSS from codesplit chunks.
48 | // Their CSS will instead be inserted dynamically with style-loader when the codesplit chunk has been loaded by webpack.
49 | // It's currently set to `true` because we are seeing that sourcemaps are included in the codesplit bundle as well when it's `false`,
50 | // increasing file size: https://github.com/vuejs-templates/webpack/issues/1110
51 | allChunks: true,
52 | }),
53 | // Compress extracted CSS. We are using this plugin so that possible
54 | // duplicated CSS from different components can be deduped.
55 | new OptimizeCSSPlugin({
56 | cssProcessorOptions: config.build.productionSourceMap
57 | ? { safe: true, map: { inline: false } }
58 | : { safe: true }
59 | }),
60 | // generate dist index.html with correct asset hash for caching.
61 | // you can customize output by editing /index.html
62 | // see https://github.com/ampedandwired/html-webpack-plugin
63 | new HtmlWebpackPlugin({
64 | filename: config.build.index,
65 | template: 'index.html',
66 | inject: true,
67 | minify: {
68 | removeComments: true,
69 | collapseWhitespace: true,
70 | removeAttributeQuotes: true
71 | // more options:
72 | // https://github.com/kangax/html-minifier#options-quick-reference
73 | },
74 | // necessary to consistently work with multiple chunks via CommonsChunkPlugin
75 | chunksSortMode: 'dependency'
76 | }),
77 | // keep module.id stable when vendor modules does not change
78 | new webpack.HashedModuleIdsPlugin(),
79 | // enable scope hoisting
80 | new webpack.optimize.ModuleConcatenationPlugin(),
81 | // split vendor js into its own file
82 | new webpack.optimize.CommonsChunkPlugin({
83 | name: 'vendor',
84 | minChunks (module) {
85 | // any required modules inside node_modules are extracted to vendor
86 | return (
87 | module.resource &&
88 | /\.js$/.test(module.resource) &&
89 | module.resource.indexOf(
90 | path.join(__dirname, '../node_modules')
91 | ) === 0
92 | )
93 | }
94 | }),
95 | // extract webpack runtime and module manifest to its own file in order to
96 | // prevent vendor hash from being updated whenever app bundle is updated
97 | new webpack.optimize.CommonsChunkPlugin({
98 | name: 'manifest',
99 | minChunks: Infinity
100 | }),
101 | // This instance extracts shared chunks from code splitted chunks and bundles them
102 | // in a separate chunk, similar to the vendor chunk
103 | // see: https://webpack.js.org/plugins/commons-chunk-plugin/#extra-async-commons-chunk
104 | new webpack.optimize.CommonsChunkPlugin({
105 | name: 'app',
106 | async: 'vendor-async',
107 | children: true,
108 | minChunks: 3
109 | }),
110 |
111 | // copy custom static assets
112 | new CopyWebpackPlugin([
113 | {
114 | from: path.resolve(__dirname, '../static'),
115 | to: config.build.assetsSubDirectory,
116 | ignore: ['.*']
117 | }
118 | ])
119 | ]
120 | })
121 |
122 | if (config.build.productionGzip) {
123 | const CompressionWebpackPlugin = require('compression-webpack-plugin')
124 |
125 | webpackConfig.plugins.push(
126 | new CompressionWebpackPlugin({
127 | asset: '[path].gz[query]',
128 | algorithm: 'gzip',
129 | test: new RegExp(
130 | '\\.(' +
131 | config.build.productionGzipExtensions.join('|') +
132 | ')$'
133 | ),
134 | threshold: 10240,
135 | minRatio: 0.8
136 | })
137 | )
138 | }
139 |
140 | if (config.build.bundleAnalyzerReport) {
141 | const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin
142 | webpackConfig.plugins.push(new BundleAnalyzerPlugin())
143 | }
144 |
145 | module.exports = webpackConfig
146 |
--------------------------------------------------------------------------------
/config/dev.env.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 | const merge = require('webpack-merge')
3 | const prodEnv = require('./prod.env')
4 |
5 | module.exports = merge(prodEnv, {
6 | NODE_ENV: '"development"'
7 | })
8 |
--------------------------------------------------------------------------------
/config/index.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 | // Template version: 1.3.1
3 | // see http://vuejs-templates.github.io/webpack for documentation.
4 |
5 | const path = require('path')
6 |
7 | module.exports = {
8 | dev: {
9 |
10 | // Paths
11 | assetsSubDirectory: 'static',
12 | assetsPublicPath: '/',
13 | proxyTable: {},
14 |
15 | // Various Dev Server settings
16 | host: 'localhost', // can be overwritten by process.env.HOST
17 | port: 8080, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined
18 | autoOpenBrowser: false,
19 | errorOverlay: true,
20 | notifyOnErrors: true,
21 | poll: false, // https://webpack.js.org/configuration/dev-server/#devserver-watchoptions-
22 |
23 |
24 | /**
25 | * Source Maps
26 | */
27 |
28 | // https://webpack.js.org/configuration/devtool/#development
29 | devtool: 'cheap-module-eval-source-map',
30 |
31 | // If you have problems debugging vue-files in devtools,
32 | // set this to false - it *may* help
33 | // https://vue-loader.vuejs.org/en/options.html#cachebusting
34 | cacheBusting: true,
35 |
36 | cssSourceMap: true
37 | },
38 |
39 | build: {
40 | // Template for index.html
41 | index: path.resolve(__dirname, '../dist/index.html'),
42 |
43 | // Paths
44 | assetsRoot: path.resolve(__dirname, '../dist'),
45 | assetsSubDirectory: 'static',
46 | assetsPublicPath: './',
47 |
48 | /**
49 | * Source Maps
50 | */
51 |
52 | productionSourceMap: true,
53 | // https://webpack.js.org/configuration/devtool/#production
54 | devtool: '#source-map',
55 |
56 | // Gzip off by default as many popular static hosts such as
57 | // Surge or Netlify already gzip all static assets for you.
58 | // Before setting to `true`, make sure to:
59 | // npm install --save-dev compression-webpack-plugin
60 | productionGzip: false,
61 | productionGzipExtensions: ['js', 'css'],
62 |
63 | // Run the build command with an extra argument to
64 | // View the bundle analyzer report after build finishes:
65 | // `npm run build --report`
66 | // Set to `true` or `false` to always turn it on or off
67 | bundleAnalyzerReport: process.env.npm_config_report
68 | }
69 | }
70 |
--------------------------------------------------------------------------------
/config/prod.env.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 | module.exports = {
3 | NODE_ENV: '"production"'
4 | }
5 |
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | app
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "app",
3 | "version": "1.0.0",
4 | "description": "A Vue.js project",
5 | "author": "Mynameisfwk <2239657654@qq.com>",
6 | "private": true,
7 | "scripts": {
8 | "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js",
9 | "start": "npm run dev",
10 | "build": "node build/build.js"
11 | },
12 | "dependencies": {
13 | "better-scroll": "^1.11.1",
14 | "mint-ui": "^2.2.13",
15 | "vue": "^2.5.16",
16 | "vue-router": "^3.0.1",
17 | "vuex": "^3.0.1"
18 | },
19 | "devDependencies": {
20 | "autoprefixer": "^7.1.2",
21 | "babel-core": "^6.22.1",
22 | "babel-helper-vue-jsx-merge-props": "^2.0.3",
23 | "babel-loader": "^7.1.1",
24 | "babel-plugin-syntax-jsx": "^6.18.0",
25 | "babel-plugin-transform-runtime": "^6.22.0",
26 | "babel-plugin-transform-vue-jsx": "^3.5.0",
27 | "babel-preset-env": "^1.3.2",
28 | "babel-preset-stage-2": "^6.22.0",
29 | "chalk": "^2.0.1",
30 | "copy-webpack-plugin": "^4.0.1",
31 | "css-loader": "^0.28.0",
32 | "extract-text-webpack-plugin": "^3.0.0",
33 | "file-loader": "^1.1.4",
34 | "friendly-errors-webpack-plugin": "^1.6.1",
35 | "html-webpack-plugin": "^2.30.1",
36 | "node-notifier": "^5.1.2",
37 | "optimize-css-assets-webpack-plugin": "^3.2.0",
38 | "ora": "^1.2.0",
39 | "portfinder": "^1.0.13",
40 | "postcss-import": "^11.0.0",
41 | "postcss-loader": "^2.0.8",
42 | "postcss-url": "^7.2.1",
43 | "rimraf": "^2.6.0",
44 | "semver": "^5.3.0",
45 | "shelljs": "^0.7.6",
46 | "uglifyjs-webpack-plugin": "^1.1.1",
47 | "url-loader": "^0.5.8",
48 | "vue-loader": "^13.3.0",
49 | "vue-style-loader": "^3.0.1",
50 | "vue-template-compiler": "^2.5.2",
51 | "webpack": "^3.6.0",
52 | "webpack-bundle-analyzer": "^2.9.0",
53 | "webpack-dev-server": "^2.9.1",
54 | "webpack-merge": "^4.1.0"
55 | },
56 | "engines": {
57 | "node": ">= 6.0.0",
58 | "npm": ">= 3.0.0"
59 | },
60 | "browserslist": [
61 | "> 1%",
62 | "last 2 versions",
63 | "not ie <= 8"
64 | ]
65 | }
66 |
--------------------------------------------------------------------------------
/src/App.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
13 |
14 |
21 |
--------------------------------------------------------------------------------
/src/assets/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mynameisfwk/vue-Todo-list/3d8796f078fae784d7e337999d91cc2265a60aa6/src/assets/logo.png
--------------------------------------------------------------------------------
/src/iconfont/iconfont.css:
--------------------------------------------------------------------------------
1 |
2 | @font-face {font-family: "iconfont";
3 | src: url('iconfont.eot?t=1527598658354'); /* IE9*/
4 | src: url('iconfont.eot?t=1527598658354#iefix') format('embedded-opentype'), /* IE6-IE8 */
5 | url('data:application/x-font-woff;charset=utf-8;base64,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') format('woff'),
6 | url('iconfont.ttf?t=1527598658354') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+*/
7 | url('iconfont.svg?t=1527598658354#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-sousuo:before { content: "\e600"; }
19 |
20 | .icon-dianpu:before { content: "\e601"; }
21 |
22 | .icon-huiyuanqia:before { content: "\e602"; }
23 |
24 | .icon-xiugaioryijian:before { content: "\e603"; }
25 |
26 | .icon-shoucangxuanzhong:before { content: "\e604"; }
27 |
28 | .icon-shoucang:before { content: "\e607"; }
29 |
30 | .icon-quanbudingdan:before { content: "\e608"; }
31 |
32 | .icon-dianzan:before { content: "\e625"; }
33 |
34 | .icon-app:before { content: "\e605"; }
35 |
36 | .icon-browser:before { content: "\e606"; }
37 |
38 | .icon-form:before { content: "\e6a2"; }
39 |
40 | .icon-cart:before { content: "\e609"; }
41 |
42 | .icon-home:before { content: "\e60a"; }
43 |
44 | .icon-mine:before { content: "\e60b"; }
45 |
46 | .icon-31daifahuo:before { content: "\e60c"; }
47 |
48 | .icon-31daifukuan:before { content: "\e60d"; }
49 |
50 | .icon-31daishouhuo:before { content: "\e60e"; }
51 |
52 | .icon-31daipingjia:before { content: "\e60f"; }
53 |
54 | .icon-tuikuantuihuo:before { content: "\e610"; }
55 |
56 | .icon-zhongtumoshi:before { content: "\e611"; }
57 |
58 | .icon-xuanzekuangmoren:before { content: "\e6c1"; }
59 |
60 | .icon-shanchu:before { content: "\e614"; }
61 |
62 | .icon-gouwuchetianjia:before { content: "\e640"; }
63 |
64 | .icon-shouhuodizhi:before { content: "\e64f"; }
65 |
66 | .icon-wodefankui:before { content: "\e657"; }
67 |
68 | .icon-yijianfankui:before { content: "\e664"; }
69 |
70 | .icon-shanchu3:before { content: "\e68f"; }
71 |
72 | .icon-bianji:before { content: "\e62c"; }
73 |
74 | .icon-huishouzhan7:before { content: "\e717"; }
75 |
76 | .icon-fenlei-copy:before { content: "\e6be"; }
77 |
78 | .icon-chenggong:before { content: "\e61e"; }
79 |
80 | .icon-xuanzekuangxuanzhong:before { content: "\e678"; }
81 |
82 | .icon-bangzhuguanyuwomen:before { content: "\e649"; }
83 |
84 | .icon-cancel-1-copy:before { content: "\e61b"; }
85 |
86 | .icon-chenggong1:before { content: "\e613"; }
87 |
88 | .icon-wodedaifahuo3dtouchshangpinxiangqing:before { content: "\e669"; }
89 |
90 | .icon-lajitong:before { content: "\e62a"; }
91 |
92 | .icon-shangpin:before { content: "\e67b"; }
93 |
94 | .icon-zhifu:before { content: "\e655"; }
95 |
96 | .icon-gouwu:before { content: "\e68c"; }
97 |
98 | .icon-faxian:before { content: "\e627"; }
99 |
100 | .icon-vivo:before { content: "\e82e"; }
101 |
102 | .icon-discover:before { content: "\e64d"; }
103 |
104 | .icon-shouye1:before { content: "\e61c"; }
105 |
106 | .icon-yunshuzhongwuliu-xianxing:before { content: "\e882"; }
107 |
108 | .icon-baoguofahuo-xianxing:before { content: "\e884"; }
109 |
110 | .icon-shezhi-xianxing:before { content: "\e8b7"; }
111 |
112 | .icon-shouquan:before { content: "\e6c4"; }
113 |
114 | .icon-dianzan1:before { content: "\e628"; }
115 |
116 | .icon-share_icon:before { content: "\e662"; }
117 |
118 | .icon-dongtaixuanzhong:before { content: "\e665"; }
119 |
120 | .icon-tijiao:before { content: "\e616"; }
121 |
122 | .icon-VIVO:before { content: "\e9a1"; }
123 |
124 | .icon-warning:before { content: "\e62e"; }
125 |
126 | .icon-daibanrenwu:before { content: "\e65c"; }
127 |
128 | .icon-youjiantou:before { content: "\e619"; }
129 |
130 | .icon-zuojiantou:before { content: "\e61a"; }
131 |
132 | .icon-gouwuche:before { content: "\e626"; }
133 |
134 | .icon-dingdan:before { content: "\e635"; }
135 |
136 | .icon-wode:before { content: "\e653"; }
137 |
138 | .icon-shanchu1:before { content: "\e663"; }
139 |
140 | .icon-qijiandian:before { content: "\e641"; }
141 |
142 | .icon-shanchu2:before { content: "\e615"; }
143 |
144 | .icon-shouye2:before { content: "\e621"; }
145 |
146 | .icon-shouye:before { content: "\e634"; }
147 |
148 | .icon-wo:before { content: "\e639"; }
149 |
150 | .icon-shangchao:before { content: "\e643"; }
151 |
152 | .icon-wancheng:before { content: "\e62d"; }
153 |
154 | .icon-changyonggoupiaorenshanchu:before { content: "\e645"; }
155 |
156 | .icon-praise:before { content: "\e629"; }
157 |
158 | .icon-dongtai:before { content: "\e622"; }
159 |
160 | .icon-shouye_xuanzhong:before { content: "\e66b"; }
161 |
162 | .icon-collection:before { content: "\e612"; }
163 |
164 | .icon-jia:before { content: "\e666"; }
165 |
166 | .icon-wode-:before { content: "\e6a8"; }
167 |
168 | .icon-gouwuche-xuanzhong:before { content: "\e64e"; }
169 |
170 | .icon-icon--:before { content: "\e71c"; }
171 |
172 | .icon-fenleixuanzhong:before { content: "\e624"; }
173 |
174 | .icon-tubiaolunkuo-:before { content: "\e61f"; }
175 |
176 | .icon-tubiaolunkuo-1:before { content: "\e620"; }
177 |
178 | .icon-qingdan:before { content: "\e62b"; }
179 |
180 | .icon-fenlei3:before { content: "\e61d"; }
181 |
182 | .icon-dingdanquxiao:before { content: "\e617"; }
183 |
184 | .icon-jia1:before { content: "\e685"; }
185 |
186 | .icon-shoucangxuanzhong1:before { content: "\e623"; }
187 |
188 | .icon-zy_peisong:before { content: "\e618"; }
189 |
190 |
--------------------------------------------------------------------------------
/src/iconfont/iconfont.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mynameisfwk/vue-Todo-list/3d8796f078fae784d7e337999d91cc2265a60aa6/src/iconfont/iconfont.eot
--------------------------------------------------------------------------------
/src/iconfont/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)
--------------------------------------------------------------------------------
/src/iconfont/iconfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mynameisfwk/vue-Todo-list/3d8796f078fae784d7e337999d91cc2265a60aa6/src/iconfont/iconfont.ttf
--------------------------------------------------------------------------------
/src/iconfont/iconfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mynameisfwk/vue-Todo-list/3d8796f078fae784d7e337999d91cc2265a60aa6/src/iconfont/iconfont.woff
--------------------------------------------------------------------------------
/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 router from './router'
6 | import vuex from 'vuex'
7 | import store from './vuex/index'
8 | Vue.use(vuex)
9 |
10 |
11 | import Mint from 'mint-ui';
12 | import 'mint-ui/lib/style.css'
13 | Vue.use(Mint);
14 |
15 | Vue.config.productionTip = false
16 |
17 | /* eslint-disable no-new */
18 | new Vue({
19 | el: '#app',
20 | router,
21 | store,
22 | components: { App },
23 | template: ''
24 | })
25 |
--------------------------------------------------------------------------------
/src/pages/HelloWorld.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
{{ msg }}
4 |
Essential Links
5 |
48 |
Ecosystem
49 |
83 |
84 |
85 |
86 |
96 |
97 |
98 |
114 |
--------------------------------------------------------------------------------
/src/pages/add.vue:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
10 |
56 |
57 |
58 |
90 |
--------------------------------------------------------------------------------
/src/pages/ceshi.vue:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
8 |
17 |
18 |
19 |
43 |
44 |
58 |
59 |
--------------------------------------------------------------------------------
/src/pages/complete.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
7 |
8 | 已完成
9 | {{list.name}}
10 |
11 |
12 |
13 |

14 |
你暂时还没有完成的任务哦~~
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
49 |
50 |
51 |
--------------------------------------------------------------------------------
/src/pages/footer.vue:
--------------------------------------------------------------------------------
1 |
2 |
12 |
13 |
14 |
18 |
19 |
58 |
59 |
--------------------------------------------------------------------------------
/src/pages/header.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
7 |
8 |
9 |
10 |
11 |
16 |
17 |
--------------------------------------------------------------------------------
/src/pages/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | {{list.currentdate}}
7 | {{list.text}}
8 |
9 |
10 |
11 |

12 |
每天记录一点点~~
13 |
14 |
15 |
16 |
17 |
18 |
19 |
59 |
60 |
--------------------------------------------------------------------------------
/src/router/index.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import Router from 'vue-router'
3 | import HelloWorld from '@/pages/HelloWorld'
4 | import index from '@/pages/index'
5 | import add from '@/pages/add'
6 | import ceshi from '@/pages/ceshi'
7 | import complete from '@/pages/complete'
8 | Vue.use(Router)
9 |
10 | export default new Router({
11 | routes: [
12 | {
13 | path: '/',
14 | name: 'ceshi',
15 | component: ceshi
16 | },
17 | {
18 | path: '/index',
19 | name: 'index',
20 | component: index
21 | },
22 | {
23 | path: '/HelloWorld',
24 | name: 'HelloWorld',
25 | component: HelloWorld
26 | },
27 | {
28 | path:'/add',
29 | name:'add',
30 | component:add
31 | },
32 | {
33 | path:'/complete',
34 | name:'complete',
35 | component:complete
36 | }
37 | ]
38 | })
39 |
--------------------------------------------------------------------------------
/src/style/rem.js:
--------------------------------------------------------------------------------
1 | (function flexible (window, document) {
2 | var docEl = document.documentElement
3 | var dpr = window.devicePixelRatio || 1
4 |
5 | // adjust body font size
6 | function setBodyFontSize () {
7 | if (document.body) {
8 | document.body.style.fontSize = (12 * dpr) + 'px'
9 | }
10 | else {
11 | document.addEventListener('DOMContentLoaded', setBodyFontSize)
12 | }
13 | }
14 | setBodyFontSize();
15 |
16 | // set 1rem = viewWidth / 10
17 | function setRemUnit () {
18 | var rem = docEl.clientWidth / 10
19 | docEl.style.fontSize = rem + 'px'
20 | }
21 |
22 | setRemUnit()
23 |
24 | // reset rem unit on page resize
25 | window.addEventListener('resize', setRemUnit)
26 | window.addEventListener('pageshow', function (e) {
27 | if (e.persisted) {
28 | setRemUnit()
29 | }
30 | })
31 |
32 | // detect 0.5px supports
33 | if (dpr >= 2) {
34 | var fakeBody = document.createElement('body')
35 | var testElement = document.createElement('div')
36 | testElement.style.border = '.5px solid transparent'
37 | fakeBody.appendChild(testElement)
38 | docEl.appendChild(fakeBody)
39 | if (testElement.offsetHeight === 1) {
40 | docEl.classList.add('hairlines')
41 | }
42 | docEl.removeChild(fakeBody)
43 | }
44 | }(window, document))
--------------------------------------------------------------------------------
/src/style/style.css:
--------------------------------------------------------------------------------
1 | body,dd,div,dl,dt,form,h1,h2,h3,h4,h5,h6,html,input,li,ol,p,select,td,textarea,th,ul{margin:0;padding:0}
2 | *{box-sizing:border-box;list-style:none}
3 | body,html{min-height:100%;font-size:50px}
4 | body{font-family:"microsoft yahei,HanHei SC,PingHei,PingFang SC,STHeitiSC-Light,Helvetica Neue,Helvetica,Arial,sans-serif";font-size:14px;color:#333}
5 | h1,h2,h3,h4,h5,h6{font-weight:400}
6 | ol,ul{list-style:none}
7 | img{border:0;vertical-align:middle}
8 | a{text-decoration:none;color:#232323}
9 | table{border-collapse:collapse;table-layout:fixed}
10 | input,textarea{outline:0;border:0}
11 | textarea{resize:none;overflow:auto}
12 | .clearfix{zoom:1}
13 | .clearfix:after{content:".";width:0;height:0;visibility:hidden;display:block;clear:both;overflow:hidden}
14 | .fl{float:left}
15 | .fr{float:right}
16 | .tl{text-align:left}
17 | .tc{text-align:center}
18 | .tr{text-align:right}
19 | .ellipse{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
20 | .inline{display:inline-block}
21 | /* .container{padding-top: 1.45rem} */
22 |
--------------------------------------------------------------------------------
/src/vuex/actions.js:
--------------------------------------------------------------------------------
1 | const actions={
2 | setOrder ({commit}, data) {
3 | commit('SET_SHIXIANG', data);
4 | },
5 | setYes({commit},data){
6 | commit('SET_YES',data)
7 | }
8 | }
9 |
10 | export default actions
--------------------------------------------------------------------------------
/src/vuex/index.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import Vuex from 'vuex'
3 | import state from './state'
4 | import mutations from './mutations'
5 | import actions from './actions';
6 |
7 | Vue.use(Vuex)
8 |
9 | export default new Vuex.Store({
10 | state,
11 | mutations,
12 | actions
13 | })
--------------------------------------------------------------------------------
/src/vuex/mutations.js:
--------------------------------------------------------------------------------
1 | import state from './state'
2 | import * as types from './type.js'
3 | const mutations={
4 | //事项
5 | [types.SET_SHIXIANG](state,data){
6 | state.home.push(data)
7 | localStorage.setItem("home",JSON.stringify(state.home));
8 | },
9 | //完成
10 | [types.SET_YES](state,data){
11 | state.item.push(data)
12 | localStorage.setItem("item",JSON.stringify(state.item));
13 | }
14 | }
15 |
16 | export default mutations
--------------------------------------------------------------------------------
/src/vuex/state.js:
--------------------------------------------------------------------------------
1 | const state={
2 | home:localStorage["home"]?JSON.parse(localStorage["home"]): [],
3 | item:localStorage["item"]?JSON.parse(localStorage["item"]): [],
4 | }
5 |
6 | export default state
--------------------------------------------------------------------------------
/src/vuex/type.js:
--------------------------------------------------------------------------------
1 |
2 | export const SET_SHIXIANG = 'SET_SHIXIANG' //事项
3 | export const SET_YES='SET_YES' //完成
--------------------------------------------------------------------------------
/static/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mynameisfwk/vue-Todo-list/3d8796f078fae784d7e337999d91cc2265a60aa6/static/.gitkeep
--------------------------------------------------------------------------------