├── .babelrc
├── .editorconfig
├── .github
└── workflows
│ └── githubPage.yml
├── .gitignore
├── .postcssrc.js
├── README.md
├── build
├── build.js
├── check-versions.js
├── logo.png
├── 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
├── dist
├── index.html
└── static
│ ├── css
│ ├── app.af06d60eb780f246588140c829271043.css
│ └── app.af06d60eb780f246588140c829271043.css.map
│ ├── fonts
│ ├── element-icons.535877f.woff
│ └── element-icons.732389d.ttf
│ └── js
│ ├── app.9d872590fdad62001de8.js
│ ├── app.9d872590fdad62001de8.js.map
│ ├── manifest.2ae2e69a05c33dfc65f8.js
│ ├── manifest.2ae2e69a05c33dfc65f8.js.map
│ ├── vendor.2f4ec5209661a6a61c60.js
│ └── vendor.2f4ec5209661a6a61c60.js.map
├── docs
├── index.html
└── static
│ ├── css
│ ├── app.59ec99a5f493b80a4ad18a87f562259a.css
│ └── app.59ec99a5f493b80a4ad18a87f562259a.css.map
│ ├── fonts
│ ├── element-icons.535877f.woff
│ └── element-icons.732389d.ttf
│ └── js
│ ├── app.8378bd806e837dc7b965.js
│ ├── app.8378bd806e837dc7b965.js.map
│ ├── manifest.35719c9b69ffefca99b4.js
│ ├── manifest.35719c9b69ffefca99b4.js.map
│ ├── vendor.ac888d8ebd38a0023523.js
│ └── vendor.ac888d8ebd38a0023523.js.map
├── index.html
├── package-lock.json
├── package.json
├── src
├── App.vue
├── assets
│ └── logo.png
├── components
│ ├── apppush.vue
│ ├── index.vue
│ ├── mail.vue
│ └── message.vue
└── main.js
├── static
└── .gitkeep
└── yarn.lock
/.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 |
--------------------------------------------------------------------------------
/.github/workflows/githubPage.yml:
--------------------------------------------------------------------------------
1 | name: github page
2 | on:
3 | push:
4 | jobs:
5 | build-and-deploy:
6 | runs-on: ubuntu-latest
7 | steps:
8 | - name: Checkout
9 | uses: actions/checkout@master
10 |
11 | - name: Install and Build
12 | run: |
13 | npm install
14 | npm run build
15 |
16 | - name: Build and Deploy
17 | uses: JamesIves/github-pages-deploy-action@master
18 | env:
19 | ACCESS_TOKEN: 2e8eba0fdc0a36508b087ad4df854971b4e4c354
20 | BRANCH: gh-pages
21 | FOLDER: docs
--------------------------------------------------------------------------------
/.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 |
2 | ## 背景
3 | 当我们在做后台管理系统时,经常会遇到非常复杂的表单:
4 | > + 表单项非常多
5 | > + 在各种表单类型下,显示不同的表单项
6 | > + 在某些条件下,某些表单项会关闭验证
7 | > + 每个表单项还会有其他自定义逻辑,比如**输入框可以插入模板变量、输入字符数量显示、图片上传并显示、富文本**。。。
8 | > + 在这种错综复杂的情况下,完成表单的验证和提交
9 | > + [可以查看具体例子](https://kevinlij.github.io/Verification-of-complex-forms/):例子中省略了很多琐碎的功能,只保留整体的复杂表单框架,用于展示解决方案
10 |
11 | ## 方案1: 在一个`vue`文件中
12 | 所有的表单项显示隐藏、验证、数据获取、提交、自定义等逻辑放在一起
13 | > + 根据表单类型,使用`v-if/v-show`处理表单项显示隐藏
14 | > + 在`elementui`自定义验证中,根据表单类型,判断表单项是否验证
15 | > + 根据表单类型,获取不同的数据,并提交到不同的接口
16 | > + 其余所有的自定义逻辑
17 |
18 | #### 缺点
19 | + 乱
20 | + 乱
21 | + 还是乱
22 | + 一个`vue`文件,轻轻松松上`2000`行
23 | + 在我尝试加入一种新的表单类型时,我发现我已经无。从。下。手。
24 |
25 |
26 | ## 方案2:分离组件
27 | > 其实很容易想到**根据不同的表单类型,分离出多个相应类型的子表单**。但我在实践时还是遇到了很多问题:**父子表单验证、整体提交数据的获取**等等,并总结出一套解决方案:
28 |
29 | ### 1. 子组件
30 | 所有的子组件中都需要包含两个方法`validate`、`getData`供父组件调用。
31 |
32 | #### (1) **`validate`方法**
33 | 用于验证本身组件的表单项,并返回一个`promise`对象
34 | ```js
35 | vaildate() {
36 | // 返回`elementUI`表单验证的结果(为`promise`对象)
37 | return this.$refs["ruleForm"].validate();
38 | },
39 |
40 | ```
41 | #### (2) **`getData`方法**
42 | 提供子组件中的数据
43 | ```js
44 | getData() {
45 | // 返回子组件的form
46 | return this.ruleForm;
47 | },
48 | ```
49 |
50 | ### 2. 父组件
51 |
52 | #### (1) [策略模式](https://www.cnblogs.com/xiaohuochai/p/8029651.html)
53 | 使用策略模式存储并获取**子表单的`ref`**(用于获取子表单的方法)和**提交函数** 。省略了大量的`if-else`判断。
54 |
55 | ```js
56 | data:{
57 | // type和ref名称的映射
58 | typeRefMap: {
59 | 1: "message",
60 | 2: "mail",
61 | 3: "apppush"
62 | },
63 | // type和提交函数的映射。不同类型,接口可能不同
64 | typeSubmitMap: {
65 | 1: data => alert(`短信模板创建成功${JSON.stringify(data)}`),
66 | 2: data => alert(`邮件模板创建成功${JSON.stringify(data)}`),
67 | 3: data => alert(`push模板创建成功${JSON.stringify(data)}`)
68 | },
69 | }
70 | ```
71 |
72 | #### (2) **`submit`方法**
73 | 用于**父子组件表单验证、获取整体数据、调用当前类型提交函数提交数据**
74 | > **因为`elementUI`表单验证的`validate`方法可以返回`promise`结果**,可以利用`promise`的特性来处理父子表单的验证。
75 | 比如[`then`函数可以返回另一个`promise`对象](https://juejin.im/post/5cc17448f265da0379417cfc#heading-0)、[`catch`可以获取它以上所有`then`的`reject`](https://juejin.im/post/5cc17448f265da0379417cfc#heading-1)、[`Promise.all`](https://juejin.im/post/5cc17448f265da0379417cfc#heading-6)。
76 |
77 | + 父表单验证通过才会验证子表单,存在先后顺序
78 | ```js
79 | // 父表单验证通过才会验证子表单,存在先后顺序
80 | submitForm() {
81 | const templateType = this.typeRefMap[this.indexForm.type];
82 | this.$refs["indexForm"]
83 | .validate()
84 | .then(res => {
85 | // 父表单验证成功后,验证子表单
86 | return this.$refs[templateType].vaildate();
87 | })
88 | .then(res => {
89 | // 全部验证通过
90 | // 获取整体数据
91 | const reqData = {
92 | // 获取子组件数据
93 | ...this.$refs[templateType].getData(),
94 | ...this.indexForm
95 | };
96 | // 获取当前表单类型的提交函数,并提交
97 | this.typeSubmitMap[this.indexForm.type](reqData);
98 | })
99 | .catch(err => {
100 | console.log(err);
101 | });
102 | },
103 | ```
104 | + 父表单,子表单一起验证
105 | ```js
106 | submitForm1() {
107 | const templateType = this.typeRefMap[this.indexForm.type];
108 | const validate1 = this.$refs["indexForm"].validate();
109 | const validate2 = this.$refs[templateType].vaildate();
110 | // 父子表单一起验证
111 | Promise.all([validate1, validate2])
112 | .then(res => {
113 | // 都通过时,发送请求
114 | const reqData = {
115 | ...this.$refs[templateType].getData(),
116 | ...this.indexForm
117 | };
118 | this.typeSubmitMap[this.indexForm.type](reqData);
119 | })
120 | .catch(err => {
121 | console.log(err);
122 | });
123 | },
124 | ```
125 |
126 | #### 查看[在线项目](https://kevinlij.github.io/Verification-of-complex-forms/)、[项目github](https://github.com/kevinLiJ/Verification-of-complex-forms)和[组件代码](https://github.com/kevinLiJ/Verification-of-complex-forms/tree/master/src/components)
127 |
128 | > 总结:很多项目我都遇到这种复杂的表单,也用了很多种解决方案,在此总结出了一种比较整洁简便的方案。当然还有其他很多方案,比如**可以把数据提交的方法放在每一个子组件中,公共的表单项数据通过`props`传递给子组件用于提交**。有其他更加简洁的方案,欢迎评论,或者[`github`上提`issue`](https://github.com/kevinLiJ/Verification-of-complex-forms/issues)
129 |
130 |
131 | > 题外话: 看了[前端架构师亲述:前端工程师成长之路的 N 问 及 回答](https://juejin.im/post/5d0ba00af265da1bc7524043#heading-3)中的几个回答后,对我有很大的启发。在**对自己的技术方向、前景迷茫时、或者在埋怨自己的项目太low时、或者埋怨自己每天在做重复工作时、或者每天对层出不穷的新技术焦头烂额时**,不妨**认真的审视下自己的项目**,
132 | + 每天重复的工作,是不是可以自己造轮子了;
133 | + 技术栈太low,是不是可以平滑过渡到新技术,提高开发效率;
134 | + 学再多的新技术,最终也会回归并实践到项目中。
135 |
136 | 从**工作流程和项目的痛点**出发,**你会在实践、总结并解决实际问题中进步的更加迅速**。
137 |
138 | ---
139 |
140 | > 写这篇文章的感受:**把这些东西表达出来的难度 `>>` 文章本身所包含的技术难度**
141 |
--------------------------------------------------------------------------------
/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/kevinLiJ/Verification-of-complex-forms/d3b12ccc1e96741b8fa70b46f24e7fa55f9c115d/build/logo.png
--------------------------------------------------------------------------------
/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, '../docs/index.html'),
42 |
43 | // Paths
44 | assetsRoot: path.resolve(__dirname, '../docs'),
45 | assetsSubDirectory: 'static',
46 | assetsPublicPath: '/Verification-of-complex-forms/',
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 |
--------------------------------------------------------------------------------
/dist/index.html:
--------------------------------------------------------------------------------
1 |
validate_test
--------------------------------------------------------------------------------
/dist/static/fonts/element-icons.535877f.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kevinLiJ/Verification-of-complex-forms/d3b12ccc1e96741b8fa70b46f24e7fa55f9c115d/dist/static/fonts/element-icons.535877f.woff
--------------------------------------------------------------------------------
/dist/static/fonts/element-icons.732389d.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kevinLiJ/Verification-of-complex-forms/d3b12ccc1e96741b8fa70b46f24e7fa55f9c115d/dist/static/fonts/element-icons.732389d.ttf
--------------------------------------------------------------------------------
/dist/static/js/app.9d872590fdad62001de8.js:
--------------------------------------------------------------------------------
1 | webpackJsonp([1],{NHnr:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var l=r("7+uW"),n=r("//Fk"),i=r.n(n),a=r("Dd8w"),o=r.n(a),s=r("mvHQ"),u=r.n(s),m={render:function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("div",[r("el-form",{ref:"ruleForm",staticClass:"demo-ruleForm",attrs:{model:e.ruleForm,rules:e.rules,"label-width":"100px",size:"mini"}},[r("el-form-item",{attrs:{label:"主题",prop:"title"}},[r("el-input",{model:{value:e.ruleForm.title,callback:function(t){e.$set(e.ruleForm,"title",t)},expression:"ruleForm.title"}})],1),e._v(" "),r("el-form-item",{attrs:{label:"内容",prop:"content"}},[r("el-input",{model:{value:e.ruleForm.content,callback:function(t){e.$set(e.ruleForm,"content",t)},expression:"ruleForm.content"}})],1),e._v(" "),r("el-form-item",{attrs:{label:"落地页",prop:"targetUrl"}},[r("el-input",{model:{value:e.ruleForm.targetUrl,callback:function(t){e.$set(e.ruleForm,"targetUrl",t)},expression:"ruleForm.targetUrl"}})],1)],1)],1)},staticRenderFns:[]},c=r("VU/8")({data:function(){return{ruleForm:{content:"",title:""},rules:{content:[{required:!0,message:"请输入内容",trigger:"blur"},{min:3,max:5,message:"长度在 3 到 5 个字符",trigger:"blur"}],title:[{required:!0,message:"请输入主题",trigger:"blur"},{min:3,max:5,message:"长度在 3 到 5 个字符",trigger:"blur"}],targetUrl:[{required:!0,message:"请输入落地页链接",trigger:"blur"},{min:3,max:5,message:"长度在 3 到 5 个字符",trigger:"blur"}]}}},methods:{vaildate:function(){return this.$refs.ruleForm.validate()},getData:function(){return this.ruleForm},resetForm:function(){this.$refs.ruleForm.resetFields()}}},m,!1,null,null,null).exports,p={render:function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("div",[r("el-form",{ref:"ruleForm",staticClass:"demo-ruleForm",attrs:{model:e.ruleForm,rules:e.rules,"label-width":"100px",size:"mini"}},[r("el-form-item",{attrs:{label:"内容",prop:"content"}},[r("el-input",{model:{value:e.ruleForm.content,callback:function(t){e.$set(e.ruleForm,"content",t)},expression:"ruleForm.content"}})],1)],1)],1)},staticRenderFns:[]},d=r("VU/8")({data:function(){return{ruleForm:{content:""},rules:{content:[{required:!0,message:"请输入内容",trigger:"blur"},{min:3,max:5,message:"长度在 3 到 5 个字符",trigger:"blur"}]}}},methods:{vaildate:function(){return this.$refs.ruleForm.validate()},getData:function(){return this.ruleForm},resetForm:function(){this.$refs.ruleForm.resetFields()}}},p,!1,null,null,null).exports,f={render:function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("div",[r("el-form",{ref:"ruleForm",staticClass:"demo-ruleForm",attrs:{model:e.ruleForm,rules:e.rules,"label-width":"100px",size:"mini"}},[r("el-form-item",{attrs:{label:"主题",prop:"title"}},[r("el-input",{model:{value:e.ruleForm.title,callback:function(t){e.$set(e.ruleForm,"title",t)},expression:"ruleForm.title"}})],1),e._v(" "),r("el-form-item",{attrs:{label:"内容",prop:"content"}},[r("el-input",{model:{value:e.ruleForm.content,callback:function(t){e.$set(e.ruleForm,"content",t)},expression:"ruleForm.content"}})],1)],1)],1)},staticRenderFns:[]},F={data:function(){return{indexForm:{type:"1",name:""},rules:{name:[{required:!0,message:"请输入活动名称",trigger:"blur"},{min:3,max:5,message:"长度在 3 到 5 个字符",trigger:"blur"}]},typeMap:{1:"message",2:"mail",3:"apppush"},fakeApi:{1:function(e){return alert("短信模板创建成功"+u()(e))},2:function(e){return alert("邮件模板创建成功"+u()(e))},3:function(e){return alert("push模板创建成功"+u()(e))}},templateType:"message"}},components:{apppush:c,mail:r("VU/8")({data:function(){return{ruleForm:{content:"",title:""},rules:{content:[{required:!0,message:"请输入内容",trigger:"blur"}],title:[{required:!0,message:"请输入主题",trigger:"blur"}]}}},methods:{vaildate:function(){return this.$refs.ruleForm.validate()},getData:function(){return this.ruleForm},resetForm:function(){this.$refs.ruleForm.resetFields()}}},f,!1,null,null,null).exports,message:d},methods:{submitForm:function(){var e=this;this.$refs.indexForm.validate().then(function(t){return e.$refs[e.templateType].vaildate()}).then(function(t){var r=o()({},e.$refs[e.templateType].getData(),e.indexForm);e.fakeApi[e.indexForm.type](r)}).catch(function(e){console.log(e)})},submitForm1:function(){var e=this,t=this.$refs.indexForm.validate(),r=this.$refs[this.templateType].vaildate();i.a.all([t,r]).then(function(t){var r=o()({},e.$refs[e.templateType].getData(),e.indexForm);e.fakeApi[e.indexForm.type](r)}).catch(function(e){console.log(e)})},typeChange:function(e){this.templateType=this.typeMap[e]}}},g={render:function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("el-form",{ref:"indexForm",staticClass:"demo-indexForm",staticStyle:{width:"800px",margin:"0 auto"},attrs:{model:e.indexForm,rules:e.rules,"label-width":"100px",size:"mini"}},[r("el-form-item",{attrs:{label:"类型",prop:"type"}},[r("el-select",{attrs:{placeholder:"请选择类型"},on:{change:e.typeChange},model:{value:e.indexForm.type,callback:function(t){e.$set(e.indexForm,"type",t)},expression:"indexForm.type"}},[r("el-option",{attrs:{label:"短信",value:"1"}}),e._v(" "),r("el-option",{attrs:{label:"邮件",value:"2"}}),e._v(" "),r("el-option",{attrs:{label:"apppush",value:"3"}})],1)],1),e._v(" "),r("el-form-item",{attrs:{label:"名称",prop:"name"}},[r("el-input",{model:{value:e.indexForm.name,callback:function(t){e.$set(e.indexForm,"name",t)},expression:"indexForm.name"}})],1),e._v(" "),"1"===e.indexForm.type?r("message",{ref:"message"}):e._e(),e._v(" "),"2"===e.indexForm.type?r("mail",{ref:"mail"}):e._e(),e._v(" "),"3"===e.indexForm.type?r("apppush",{ref:"apppush"}):e._e(),e._v(" "),r("el-form-item",[r("el-button",{attrs:{type:"primary"},on:{click:function(t){return e.submitForm1()}}},[e._v("立即创建")])],1)],1)},staticRenderFns:[]},v={name:"App",components:{index:r("VU/8")(F,g,!1,null,null,null).exports}},h={render:function(){var e=this.$createElement,t=this._self._c||e;return t("div",{attrs:{id:"app"}},[t("index")],1)},staticRenderFns:[]};var x=r("VU/8")(v,h,!1,function(e){r("TeaL")},null,null).exports,b=r("zL8q"),_=r.n(b);r("tvR6");l.default.config.productionTip=!1,l.default.use(_.a),new l.default({el:"#app",components:{App:x},template:""})},TeaL:function(e,t){},tvR6:function(e,t){}},["NHnr"]);
2 | //# sourceMappingURL=app.9d872590fdad62001de8.js.map
--------------------------------------------------------------------------------
/dist/static/js/app.9d872590fdad62001de8.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"sources":["webpack:///./src/components/apppush.vue?d92c","webpack:///./src/components/apppush.vue","webpack:///src/components/apppush.vue","webpack:///./src/components/message.vue?f52a","webpack:///./src/components/message.vue","webpack:///src/components/message.vue","webpack:///./src/components/mail.vue?3fcb","webpack:///src/components/index.vue","webpack:///./src/components/mail.vue","webpack:///src/components/mail.vue","webpack:///./src/components/index.vue?02f5","webpack:///src/App.vue","webpack:///./src/components/index.vue","webpack:///./src/App.vue?1832","webpack:///./src/App.vue","webpack:///./src/main.js"],"names":["components_apppush","render","_vm","this","_h","$createElement","_c","_self","ref","staticClass","attrs","model","ruleForm","rules","label-width","size","label","prop","value","callback","$$v","$set","expression","_v","staticRenderFns","src_components_apppush","__webpack_require__","normalizeComponent","data","content","title","required","message","trigger","min","max","targetUrl","methods","vaildate","$refs","validate","getData","resetForm","resetFields","components_message","src_components_message","message_normalizeComponent","components_mail","components","indexForm","type","name","typeMap","1","2","3","fakeApi","alert","stringify_default","templateType","apppush","mail","mail_normalizeComponent","submitForm","_this","then","res","reqData","extends_default","catch","err","console","log","submitForm1","_this2","validate1","validate2","promise_default","a","all","typeChange","selectortype_template_index_0_src_components","staticStyle","width","margin","placeholder","on","change","_e","click","$event","App","index","components_normalizeComponent","selectortype_template_index_0_src_App","id","src_App","App_normalizeComponent","ssrContext","Vue","config","productionTip","use","ElementUI","el","template"],"mappings":"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","file":"static/js/app.9d872590fdad62001de8.js","sourcesContent":["var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('el-form',{ref:\"ruleForm\",staticClass:\"demo-ruleForm\",attrs:{\"model\":_vm.ruleForm,\"rules\":_vm.rules,\"label-width\":\"100px\",\"size\":\"mini\"}},[_c('el-form-item',{attrs:{\"label\":\"主题\",\"prop\":\"title\"}},[_c('el-input',{model:{value:(_vm.ruleForm.title),callback:function ($$v) {_vm.$set(_vm.ruleForm, \"title\", $$v)},expression:\"ruleForm.title\"}})],1),_vm._v(\" \"),_c('el-form-item',{attrs:{\"label\":\"内容\",\"prop\":\"content\"}},[_c('el-input',{model:{value:(_vm.ruleForm.content),callback:function ($$v) {_vm.$set(_vm.ruleForm, \"content\", $$v)},expression:\"ruleForm.content\"}})],1),_vm._v(\" \"),_c('el-form-item',{attrs:{\"label\":\"落地页\",\"prop\":\"targetUrl\"}},[_c('el-input',{model:{value:(_vm.ruleForm.targetUrl),callback:function ($$v) {_vm.$set(_vm.ruleForm, \"targetUrl\", $$v)},expression:\"ruleForm.targetUrl\"}})],1)],1)],1)}\nvar staticRenderFns = []\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\nexport default esExports\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/vue-loader/lib/template-compiler?{\"id\":\"data-v-63b80445\",\"hasScoped\":false,\"transformToRequire\":{\"video\":[\"src\",\"poster\"],\"source\":\"src\",\"img\":\"src\",\"image\":\"xlink:href\"},\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./src/components/apppush.vue\n// module id = null\n// module chunks = ","var normalizeComponent = require(\"!../../node_modules/vue-loader/lib/component-normalizer\")\n/* script */\nexport * from \"!!babel-loader!../../node_modules/vue-loader/lib/selector?type=script&index=0!./apppush.vue\"\nimport __vue_script__ from \"!!babel-loader!../../node_modules/vue-loader/lib/selector?type=script&index=0!./apppush.vue\"\n/* template */\nimport __vue_template__ from \"!!../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-63b80445\\\",\\\"hasScoped\\\":false,\\\"transformToRequire\\\":{\\\"video\\\":[\\\"src\\\",\\\"poster\\\"],\\\"source\\\":\\\"src\\\",\\\"img\\\":\\\"src\\\",\\\"image\\\":\\\"xlink:href\\\"},\\\"buble\\\":{\\\"transforms\\\":{}}}!../../node_modules/vue-loader/lib/selector?type=template&index=0!./apppush.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_template__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/apppush.vue\n// module id = null\n// module chunks = ","\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n\r\n\r\n\n\n\n// WEBPACK FOOTER //\n// src/components/apppush.vue","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('el-form',{ref:\"ruleForm\",staticClass:\"demo-ruleForm\",attrs:{\"model\":_vm.ruleForm,\"rules\":_vm.rules,\"label-width\":\"100px\",\"size\":\"mini\"}},[_c('el-form-item',{attrs:{\"label\":\"内容\",\"prop\":\"content\"}},[_c('el-input',{model:{value:(_vm.ruleForm.content),callback:function ($$v) {_vm.$set(_vm.ruleForm, \"content\", $$v)},expression:\"ruleForm.content\"}})],1)],1)],1)}\nvar staticRenderFns = []\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\nexport default esExports\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/vue-loader/lib/template-compiler?{\"id\":\"data-v-62f60a8b\",\"hasScoped\":false,\"transformToRequire\":{\"video\":[\"src\",\"poster\"],\"source\":\"src\",\"img\":\"src\",\"image\":\"xlink:href\"},\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./src/components/message.vue\n// module id = null\n// module chunks = ","var normalizeComponent = require(\"!../../node_modules/vue-loader/lib/component-normalizer\")\n/* script */\nexport * from \"!!babel-loader!../../node_modules/vue-loader/lib/selector?type=script&index=0!./message.vue\"\nimport __vue_script__ from \"!!babel-loader!../../node_modules/vue-loader/lib/selector?type=script&index=0!./message.vue\"\n/* template */\nimport __vue_template__ from \"!!../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-62f60a8b\\\",\\\"hasScoped\\\":false,\\\"transformToRequire\\\":{\\\"video\\\":[\\\"src\\\",\\\"poster\\\"],\\\"source\\\":\\\"src\\\",\\\"img\\\":\\\"src\\\",\\\"image\\\":\\\"xlink:href\\\"},\\\"buble\\\":{\\\"transforms\\\":{}}}!../../node_modules/vue-loader/lib/selector?type=template&index=0!./message.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_template__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/message.vue\n// module id = null\n// module chunks = ","\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n
\r\n\r\n\r\n\n\n\n// WEBPACK FOOTER //\n// src/components/message.vue","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('el-form',{ref:\"ruleForm\",staticClass:\"demo-ruleForm\",attrs:{\"model\":_vm.ruleForm,\"rules\":_vm.rules,\"label-width\":\"100px\",\"size\":\"mini\"}},[_c('el-form-item',{attrs:{\"label\":\"主题\",\"prop\":\"title\"}},[_c('el-input',{model:{value:(_vm.ruleForm.title),callback:function ($$v) {_vm.$set(_vm.ruleForm, \"title\", $$v)},expression:\"ruleForm.title\"}})],1),_vm._v(\" \"),_c('el-form-item',{attrs:{\"label\":\"内容\",\"prop\":\"content\"}},[_c('el-input',{model:{value:(_vm.ruleForm.content),callback:function ($$v) {_vm.$set(_vm.ruleForm, \"content\", $$v)},expression:\"ruleForm.content\"}})],1)],1)],1)}\nvar staticRenderFns = []\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\nexport default esExports\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/vue-loader/lib/template-compiler?{\"id\":\"data-v-ec70073c\",\"hasScoped\":false,\"transformToRequire\":{\"video\":[\"src\",\"poster\"],\"source\":\"src\",\"img\":\"src\",\"image\":\"xlink:href\"},\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./src/components/mail.vue\n// module id = null\n// module chunks = ","\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 立即创建\n \n \n\n\n\n\n\n// WEBPACK FOOTER //\n// src/components/index.vue","var normalizeComponent = require(\"!../../node_modules/vue-loader/lib/component-normalizer\")\n/* script */\nexport * from \"!!babel-loader!../../node_modules/vue-loader/lib/selector?type=script&index=0!./mail.vue\"\nimport __vue_script__ from \"!!babel-loader!../../node_modules/vue-loader/lib/selector?type=script&index=0!./mail.vue\"\n/* template */\nimport __vue_template__ from \"!!../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-ec70073c\\\",\\\"hasScoped\\\":false,\\\"transformToRequire\\\":{\\\"video\\\":[\\\"src\\\",\\\"poster\\\"],\\\"source\\\":\\\"src\\\",\\\"img\\\":\\\"src\\\",\\\"image\\\":\\\"xlink:href\\\"},\\\"buble\\\":{\\\"transforms\\\":{}}}!../../node_modules/vue-loader/lib/selector?type=template&index=0!./mail.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_template__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/mail.vue\n// module id = null\n// module chunks = ","\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n\r\n\r\n\r\n\n\n\n// WEBPACK FOOTER //\n// src/components/mail.vue","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('el-form',{ref:\"indexForm\",staticClass:\"demo-indexForm\",staticStyle:{\"width\":\"800px\",\"margin\":\"0 auto\"},attrs:{\"model\":_vm.indexForm,\"rules\":_vm.rules,\"label-width\":\"100px\",\"size\":\"mini\"}},[_c('el-form-item',{attrs:{\"label\":\"类型\",\"prop\":\"type\"}},[_c('el-select',{attrs:{\"placeholder\":\"请选择类型\"},on:{\"change\":_vm.typeChange},model:{value:(_vm.indexForm.type),callback:function ($$v) {_vm.$set(_vm.indexForm, \"type\", $$v)},expression:\"indexForm.type\"}},[_c('el-option',{attrs:{\"label\":\"短信\",\"value\":\"1\"}}),_vm._v(\" \"),_c('el-option',{attrs:{\"label\":\"邮件\",\"value\":\"2\"}}),_vm._v(\" \"),_c('el-option',{attrs:{\"label\":\"apppush\",\"value\":\"3\"}})],1)],1),_vm._v(\" \"),_c('el-form-item',{attrs:{\"label\":\"名称\",\"prop\":\"name\"}},[_c('el-input',{model:{value:(_vm.indexForm.name),callback:function ($$v) {_vm.$set(_vm.indexForm, \"name\", $$v)},expression:\"indexForm.name\"}})],1),_vm._v(\" \"),(_vm.indexForm.type==='1')?_c('message',{ref:\"message\"}):_vm._e(),_vm._v(\" \"),(_vm.indexForm.type==='2')?_c('mail',{ref:\"mail\"}):_vm._e(),_vm._v(\" \"),(_vm.indexForm.type==='3')?_c('apppush',{ref:\"apppush\"}):_vm._e(),_vm._v(\" \"),_c('el-form-item',[_c('el-button',{attrs:{\"type\":\"primary\"},on:{\"click\":function($event){return _vm.submitForm1()}}},[_vm._v(\"立即创建\")])],1)],1)}\nvar staticRenderFns = []\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\nexport default esExports\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/vue-loader/lib/template-compiler?{\"id\":\"data-v-5e7c500e\",\"hasScoped\":false,\"transformToRequire\":{\"video\":[\"src\",\"poster\"],\"source\":\"src\",\"img\":\"src\",\"image\":\"xlink:href\"},\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./src/components/index.vue\n// module id = null\n// module chunks = ","\n \n \n
\n\n\n\n\n\n\n\n\n// WEBPACK FOOTER //\n// src/App.vue","var normalizeComponent = require(\"!../../node_modules/vue-loader/lib/component-normalizer\")\n/* script */\nexport * from \"!!babel-loader!../../node_modules/vue-loader/lib/selector?type=script&index=0!./index.vue\"\nimport __vue_script__ from \"!!babel-loader!../../node_modules/vue-loader/lib/selector?type=script&index=0!./index.vue\"\n/* template */\nimport __vue_template__ from \"!!../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-5e7c500e\\\",\\\"hasScoped\\\":false,\\\"transformToRequire\\\":{\\\"video\\\":[\\\"src\\\",\\\"poster\\\"],\\\"source\\\":\\\"src\\\",\\\"img\\\":\\\"src\\\",\\\"image\\\":\\\"xlink:href\\\"},\\\"buble\\\":{\\\"transforms\\\":{}}}!../../node_modules/vue-loader/lib/selector?type=template&index=0!./index.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_template__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/index.vue\n// module id = null\n// module chunks = ","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"app\"}},[_c('index')],1)}\nvar staticRenderFns = []\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\nexport default esExports\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/vue-loader/lib/template-compiler?{\"id\":\"data-v-d461aeba\",\"hasScoped\":false,\"transformToRequire\":{\"video\":[\"src\",\"poster\"],\"source\":\"src\",\"img\":\"src\",\"image\":\"xlink:href\"},\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./src/App.vue\n// module id = null\n// module chunks = ","function injectStyle (ssrContext) {\n require(\"!!../node_modules/extract-text-webpack-plugin/dist/loader.js?{\\\"omit\\\":1,\\\"remove\\\":true}!vue-style-loader!css-loader?{\\\"sourceMap\\\":true}!../node_modules/vue-loader/lib/style-compiler/index?{\\\"vue\\\":true,\\\"id\\\":\\\"data-v-d461aeba\\\",\\\"scoped\\\":false,\\\"hasInlineConfig\\\":false}!../node_modules/vue-loader/lib/selector?type=styles&index=0!./App.vue\")\n}\nvar normalizeComponent = require(\"!../node_modules/vue-loader/lib/component-normalizer\")\n/* script */\nexport * from \"!!babel-loader!../node_modules/vue-loader/lib/selector?type=script&index=0!./App.vue\"\nimport __vue_script__ from \"!!babel-loader!../node_modules/vue-loader/lib/selector?type=script&index=0!./App.vue\"\n/* template */\nimport __vue_template__ from \"!!../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-d461aeba\\\",\\\"hasScoped\\\":false,\\\"transformToRequire\\\":{\\\"video\\\":[\\\"src\\\",\\\"poster\\\"],\\\"source\\\":\\\"src\\\",\\\"img\\\":\\\"src\\\",\\\"image\\\":\\\"xlink:href\\\"},\\\"buble\\\":{\\\"transforms\\\":{}}}!../node_modules/vue-loader/lib/selector?type=template&index=0!./App.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_template__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/App.vue\n// module id = null\n// module chunks = ","// The Vue build version to load with the `import` command\n// (runtime-only or standalone) has been set in webpack.base.conf with an alias.\nimport Vue from 'vue'\nimport App from './App'\n\nimport ElementUI from 'element-ui';\nimport 'element-ui/lib/theme-chalk/index.css';\nVue.config.productionTip = false\nVue.use(ElementUI);\n/* eslint-disable no-new */\nnew Vue({\n el: '#app',\n components: { App },\n template: ''\n})\n\n\n\n// WEBPACK FOOTER //\n// ./src/main.js"],"sourceRoot":""}
--------------------------------------------------------------------------------
/dist/static/js/manifest.2ae2e69a05c33dfc65f8.js:
--------------------------------------------------------------------------------
1 | !function(r){var n=window.webpackJsonp;window.webpackJsonp=function(e,u,c){for(var f,i,p,a=0,l=[];avalidate-test
--------------------------------------------------------------------------------
/docs/static/fonts/element-icons.535877f.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kevinLiJ/Verification-of-complex-forms/d3b12ccc1e96741b8fa70b46f24e7fa55f9c115d/docs/static/fonts/element-icons.535877f.woff
--------------------------------------------------------------------------------
/docs/static/fonts/element-icons.732389d.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kevinLiJ/Verification-of-complex-forms/d3b12ccc1e96741b8fa70b46f24e7fa55f9c115d/docs/static/fonts/element-icons.732389d.ttf
--------------------------------------------------------------------------------
/docs/static/js/app.8378bd806e837dc7b965.js:
--------------------------------------------------------------------------------
1 | webpackJsonp([1],{NHnr:function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var l=r("7+uW"),n=r("//Fk"),o=r.n(n),i=r("Dd8w"),a=r.n(i),s=r("mvHQ"),u=r.n(s),m={props:["customerType"],data:function(){var e=this;return{ruleForm:{content:"",title:"",targetUrl:""},rules:{content:[{required:!0,message:"请输入内容",trigger:"blur"},{min:3,max:5,message:"长度在 3 到 5 个字符",trigger:"blur"}],title:[{required:!0,message:"请输入主题",trigger:"blur"},{min:3,max:5,message:"长度在 3 到 5 个字符",trigger:"blur"}],targetUrl:[{validator:function(t,r,l){"1"===e.customerType&&""===r?l(new Error("请输入落地页链接")):l()}}]}}},methods:{vaildate:function(){return this.$refs.ruleForm.validate()},getData:function(){return this.ruleForm},resetForm:function(){this.$refs.ruleForm.resetFields()}}},c={render:function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("div",[r("el-form",{ref:"ruleForm",staticClass:"demo-ruleForm",attrs:{model:e.ruleForm,rules:e.rules,"label-width":"100px",size:"mini"}},[r("el-form-item",{attrs:{label:"主题",prop:"title"}},[r("el-input",{model:{value:e.ruleForm.title,callback:function(t){e.$set(e.ruleForm,"title",t)},expression:"ruleForm.title"}})],1),e._v(" "),r("el-form-item",{attrs:{label:"内容",prop:"content"}},[r("el-input",{model:{value:e.ruleForm.content,callback:function(t){e.$set(e.ruleForm,"content",t)},expression:"ruleForm.content"}})],1),e._v(" "),r("el-form-item",{attrs:{label:"落地页",prop:"targetUrl"}},[r("el-input",{model:{value:e.ruleForm.targetUrl,callback:function(t){e.$set(e.ruleForm,"targetUrl",t)},expression:"ruleForm.targetUrl"}}),e._v(" "),r("span",{staticStyle:{color:"red","font-size":"12px"}},[e._v("C端 落地页链接不是必填")])],1)],1)],1)},staticRenderFns:[]},p=r("VU/8")(m,c,!1,null,null,null).exports,d={render:function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("div",[r("el-form",{ref:"ruleForm",staticClass:"demo-ruleForm",attrs:{model:e.ruleForm,rules:e.rules,"label-width":"100px",size:"mini"}},[r("el-form-item",{attrs:{label:"内容",prop:"content"}},[r("el-input",{model:{value:e.ruleForm.content,callback:function(t){e.$set(e.ruleForm,"content",t)},expression:"ruleForm.content"}})],1)],1)],1)},staticRenderFns:[]},f=r("VU/8")({data:function(){return{ruleForm:{content:""},rules:{content:[{required:!0,message:"请输入内容",trigger:"blur"},{min:3,max:5,message:"长度在 3 到 5 个字符",trigger:"blur"}]}}},methods:{vaildate:function(){return this.$refs.ruleForm.validate()},getData:function(){return this.ruleForm},resetForm:function(){this.$refs.ruleForm.resetFields()}}},d,!1,null,null,null).exports,F={render:function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("div",[r("el-form",{ref:"ruleForm",staticClass:"demo-ruleForm",attrs:{model:e.ruleForm,rules:e.rules,"label-width":"100px",size:"mini"}},[r("el-form-item",{attrs:{label:"主题",prop:"title"}},[r("el-input",{model:{value:e.ruleForm.title,callback:function(t){e.$set(e.ruleForm,"title",t)},expression:"ruleForm.title"}})],1),e._v(" "),r("el-form-item",{attrs:{label:"内容",prop:"content"}},[r("el-input",{model:{value:e.ruleForm.content,callback:function(t){e.$set(e.ruleForm,"content",t)},expression:"ruleForm.content"}})],1)],1)],1)},staticRenderFns:[]},v={data:function(){return{indexForm:{type:"1",name:"",customerType:"1"},rules:{name:[{required:!0,message:"请输入活动名称",trigger:"blur"},{min:3,max:5,message:"长度在 3 到 5 个字符",trigger:"blur"}]},typeMap:{1:"message",2:"mail",3:"apppush"},fakeSubmit:{1:function(e){return alert("短信模板创建成功"+u()(e))},2:function(e){return alert("邮件模板创建成功"+u()(e))},3:function(e){return alert("push模板创建成功"+u()(e))}}}},components:{apppush:p,mail:r("VU/8")({data:function(){return{ruleForm:{content:"",title:""},rules:{content:[{required:!0,message:"请输入内容",trigger:"blur"}],title:[{required:!0,message:"请输入主题",trigger:"blur"}]}}},methods:{vaildate:function(){return this.$refs.ruleForm.validate()},getData:function(){return this.ruleForm},resetForm:function(){this.$refs.ruleForm.resetFields()}}},F,!1,null,null,null).exports,message:f},methods:{submitForm:function(){var e=this,t=this.typeMap[this.indexForm.type];this.$refs.indexForm.validate().then(function(r){return e.$refs[t].vaildate()}).then(function(r){var l=a()({},e.$refs[t].getData(),e.indexForm);e.fakeSubmit[e.indexForm.type](l)}).catch(function(e){console.log(e)})},submitForm1:function(){var e=this,t=this.typeMap[this.indexForm.type],r=this.$refs.indexForm.validate(),l=this.$refs[t].vaildate();父子表单一起验证,o.a.all([r,l]).then(function(r){var l=a()({},e.$refs[t].getData(),e.indexForm);e.fakeSubmit[e.indexForm.type](l)}).catch(function(e){console.log(e)})}}},x={render:function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("el-form",{ref:"indexForm",staticClass:"demo-indexForm",staticStyle:{width:"800px",margin:"0 auto"},attrs:{model:e.indexForm,rules:e.rules,"label-width":"100px",size:"mini"}},[r("el-form-item",{attrs:{label:"人群类型",prop:"customerType"}},[r("el-select",{attrs:{placeholder:"请选择人群类型"},model:{value:e.indexForm.customerType,callback:function(t){e.$set(e.indexForm,"customerType",t)},expression:"indexForm.customerType"}},[r("el-option",{attrs:{label:"B端",value:"1"}}),e._v(" "),r("el-option",{attrs:{label:"C端",value:"2"}})],1)],1),e._v(" "),r("el-form-item",{attrs:{label:"类型",prop:"type"}},[r("el-select",{attrs:{placeholder:"请选择类型"},model:{value:e.indexForm.type,callback:function(t){e.$set(e.indexForm,"type",t)},expression:"indexForm.type"}},[r("el-option",{attrs:{label:"短信",value:"1"}}),e._v(" "),r("el-option",{attrs:{label:"邮件",value:"2"}}),e._v(" "),r("el-option",{attrs:{label:"App Push",value:"3"}})],1)],1),e._v(" "),r("el-form-item",{attrs:{label:"名称",prop:"name"}},[r("el-input",{model:{value:e.indexForm.name,callback:function(t){e.$set(e.indexForm,"name",t)},expression:"indexForm.name"}})],1),e._v(" "),"1"===e.indexForm.type?r("message",{ref:"message"}):e._e(),e._v(" "),"2"===e.indexForm.type?r("mail",{ref:"mail"}):e._e(),e._v(" "),"3"===e.indexForm.type?r("apppush",{ref:"apppush",attrs:{customerType:e.indexForm.customerType}}):e._e(),e._v(" "),r("el-form-item",[r("el-button",{attrs:{type:"primary"},on:{click:function(t){return e.submitForm1()}}},[e._v("立即创建")])],1)],1)},staticRenderFns:[]},g={name:"App",components:{index:r("VU/8")(v,x,!1,null,null,null).exports}},h={render:function(){var e=this.$createElement,t=this._self._c||e;return t("div",{attrs:{id:"app"}},[t("index")],1)},staticRenderFns:[]};var b=r("VU/8")(g,h,!1,function(e){r("TeaL")},null,null).exports,_=r("zL8q"),y=r.n(_);r("tvR6");l.default.config.productionTip=!1,l.default.use(y.a),new l.default({el:"#app",components:{App:b},template:""})},TeaL:function(e,t){},tvR6:function(e,t){}},["NHnr"]);
2 | //# sourceMappingURL=app.8378bd806e837dc7b965.js.map
--------------------------------------------------------------------------------
/docs/static/js/app.8378bd806e837dc7b965.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"sources":["webpack:///src/components/apppush.vue","webpack:///./src/components/apppush.vue?7dbd","webpack:///./src/components/apppush.vue","webpack:///./src/components/message.vue?fb5a","webpack:///./src/components/message.vue","webpack:///src/components/message.vue","webpack:///./src/components/mail.vue?6e9f","webpack:///src/components/index.vue","webpack:///./src/components/mail.vue","webpack:///src/components/mail.vue","webpack:///./src/components/index.vue?f805","webpack:///src/App.vue","webpack:///./src/components/index.vue","webpack:///./src/App.vue?1832","webpack:///./src/App.vue","webpack:///./src/main.js"],"names":["apppush","props","data","_this","this","ruleForm","content","title","targetUrl","rules","required","message","trigger","min","max","validator","rule","value","callback","customerType","Error","methods","vaildate","$refs","validate","getData","resetForm","resetFields","components_apppush","render","_vm","_h","$createElement","_c","_self","ref","staticClass","attrs","model","label-width","size","label","prop","$$v","$set","expression","_v","staticStyle","color","font-size","staticRenderFns","src_components_apppush","__webpack_require__","normalizeComponent","components_message","src_components_message","message_normalizeComponent","components_mail","components","indexForm","type","name","typeMap","1","2","3","fakeSubmit","alert","stringify_default","mail","mail_normalizeComponent","submitForm","templateType","then","res","reqData","extends_default","catch","err","console","log","submitForm1","_this2","validate1","validate2","父子表单一起验证","promise_default","a","all","selectortype_template_index_0_src_components","width","margin","placeholder","_e","on","click","$event","App","index","components_normalizeComponent","selectortype_template_index_0_src_App","id","src_App","App_normalizeComponent","ssrContext","Vue","config","productionTip","use","ElementUI","el","template"],"mappings":"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","file":"static/js/app.8378bd806e837dc7b965.js","sourcesContent":["\n\n \n \n \n \n \n \n \n \n \n \n C端 落地页链接不是必填\n \n \n
\n\n\n\n\n\n// WEBPACK FOOTER //\n// src/components/apppush.vue","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('el-form',{ref:\"ruleForm\",staticClass:\"demo-ruleForm\",attrs:{\"model\":_vm.ruleForm,\"rules\":_vm.rules,\"label-width\":\"100px\",\"size\":\"mini\"}},[_c('el-form-item',{attrs:{\"label\":\"主题\",\"prop\":\"title\"}},[_c('el-input',{model:{value:(_vm.ruleForm.title),callback:function ($$v) {_vm.$set(_vm.ruleForm, \"title\", $$v)},expression:\"ruleForm.title\"}})],1),_vm._v(\" \"),_c('el-form-item',{attrs:{\"label\":\"内容\",\"prop\":\"content\"}},[_c('el-input',{model:{value:(_vm.ruleForm.content),callback:function ($$v) {_vm.$set(_vm.ruleForm, \"content\", $$v)},expression:\"ruleForm.content\"}})],1),_vm._v(\" \"),_c('el-form-item',{attrs:{\"label\":\"落地页\",\"prop\":\"targetUrl\"}},[_c('el-input',{model:{value:(_vm.ruleForm.targetUrl),callback:function ($$v) {_vm.$set(_vm.ruleForm, \"targetUrl\", $$v)},expression:\"ruleForm.targetUrl\"}}),_vm._v(\" \"),_c('span',{staticStyle:{\"color\":\"red\",\"font-size\":\"12px\"}},[_vm._v(\"C端 落地页链接不是必填\")])],1)],1)],1)}\nvar staticRenderFns = []\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\nexport default esExports\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/vue-loader/lib/template-compiler?{\"id\":\"data-v-74c5bcfb\",\"hasScoped\":false,\"transformToRequire\":{\"video\":[\"src\",\"poster\"],\"source\":\"src\",\"img\":\"src\",\"image\":\"xlink:href\"},\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./src/components/apppush.vue\n// module id = null\n// module chunks = ","var normalizeComponent = require(\"!../../node_modules/vue-loader/lib/component-normalizer\")\n/* script */\nexport * from \"!!babel-loader!../../node_modules/vue-loader/lib/selector?type=script&index=0!./apppush.vue\"\nimport __vue_script__ from \"!!babel-loader!../../node_modules/vue-loader/lib/selector?type=script&index=0!./apppush.vue\"\n/* template */\nimport __vue_template__ from \"!!../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-74c5bcfb\\\",\\\"hasScoped\\\":false,\\\"transformToRequire\\\":{\\\"video\\\":[\\\"src\\\",\\\"poster\\\"],\\\"source\\\":\\\"src\\\",\\\"img\\\":\\\"src\\\",\\\"image\\\":\\\"xlink:href\\\"},\\\"buble\\\":{\\\"transforms\\\":{}}}!../../node_modules/vue-loader/lib/selector?type=template&index=0!./apppush.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_template__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/apppush.vue\n// module id = null\n// module chunks = ","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('el-form',{ref:\"ruleForm\",staticClass:\"demo-ruleForm\",attrs:{\"model\":_vm.ruleForm,\"rules\":_vm.rules,\"label-width\":\"100px\",\"size\":\"mini\"}},[_c('el-form-item',{attrs:{\"label\":\"内容\",\"prop\":\"content\"}},[_c('el-input',{model:{value:(_vm.ruleForm.content),callback:function ($$v) {_vm.$set(_vm.ruleForm, \"content\", $$v)},expression:\"ruleForm.content\"}})],1)],1)],1)}\nvar staticRenderFns = []\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\nexport default esExports\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/vue-loader/lib/template-compiler?{\"id\":\"data-v-562d5864\",\"hasScoped\":false,\"transformToRequire\":{\"video\":[\"src\",\"poster\"],\"source\":\"src\",\"img\":\"src\",\"image\":\"xlink:href\"},\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./src/components/message.vue\n// module id = null\n// module chunks = ","var normalizeComponent = require(\"!../../node_modules/vue-loader/lib/component-normalizer\")\n/* script */\nexport * from \"!!babel-loader!../../node_modules/vue-loader/lib/selector?type=script&index=0!./message.vue\"\nimport __vue_script__ from \"!!babel-loader!../../node_modules/vue-loader/lib/selector?type=script&index=0!./message.vue\"\n/* template */\nimport __vue_template__ from \"!!../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-562d5864\\\",\\\"hasScoped\\\":false,\\\"transformToRequire\\\":{\\\"video\\\":[\\\"src\\\",\\\"poster\\\"],\\\"source\\\":\\\"src\\\",\\\"img\\\":\\\"src\\\",\\\"image\\\":\\\"xlink:href\\\"},\\\"buble\\\":{\\\"transforms\\\":{}}}!../../node_modules/vue-loader/lib/selector?type=template&index=0!./message.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_template__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/message.vue\n// module id = null\n// module chunks = ","\n\n\n \n \n \n \n \n
\n\n\n\n\n\n// WEBPACK FOOTER //\n// src/components/message.vue","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('el-form',{ref:\"ruleForm\",staticClass:\"demo-ruleForm\",attrs:{\"model\":_vm.ruleForm,\"rules\":_vm.rules,\"label-width\":\"100px\",\"size\":\"mini\"}},[_c('el-form-item',{attrs:{\"label\":\"主题\",\"prop\":\"title\"}},[_c('el-input',{model:{value:(_vm.ruleForm.title),callback:function ($$v) {_vm.$set(_vm.ruleForm, \"title\", $$v)},expression:\"ruleForm.title\"}})],1),_vm._v(\" \"),_c('el-form-item',{attrs:{\"label\":\"内容\",\"prop\":\"content\"}},[_c('el-input',{model:{value:(_vm.ruleForm.content),callback:function ($$v) {_vm.$set(_vm.ruleForm, \"content\", $$v)},expression:\"ruleForm.content\"}})],1)],1)],1)}\nvar staticRenderFns = []\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\nexport default esExports\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/vue-loader/lib/template-compiler?{\"id\":\"data-v-1747ca00\",\"hasScoped\":false,\"transformToRequire\":{\"video\":[\"src\",\"poster\"],\"source\":\"src\",\"img\":\"src\",\"image\":\"xlink:href\"},\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./src/components/mail.vue\n// module id = null\n// module chunks = ","\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 立即创建\n \n \n\n\n\n\n\n// WEBPACK FOOTER //\n// src/components/index.vue","var normalizeComponent = require(\"!../../node_modules/vue-loader/lib/component-normalizer\")\n/* script */\nexport * from \"!!babel-loader!../../node_modules/vue-loader/lib/selector?type=script&index=0!./mail.vue\"\nimport __vue_script__ from \"!!babel-loader!../../node_modules/vue-loader/lib/selector?type=script&index=0!./mail.vue\"\n/* template */\nimport __vue_template__ from \"!!../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-1747ca00\\\",\\\"hasScoped\\\":false,\\\"transformToRequire\\\":{\\\"video\\\":[\\\"src\\\",\\\"poster\\\"],\\\"source\\\":\\\"src\\\",\\\"img\\\":\\\"src\\\",\\\"image\\\":\\\"xlink:href\\\"},\\\"buble\\\":{\\\"transforms\\\":{}}}!../../node_modules/vue-loader/lib/selector?type=template&index=0!./mail.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_template__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/mail.vue\n// module id = null\n// module chunks = ","\n\n\n \n \n \n \n \n \n \n \n
\n\n\n\n\n\n\n// WEBPACK FOOTER //\n// src/components/mail.vue","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('el-form',{ref:\"indexForm\",staticClass:\"demo-indexForm\",staticStyle:{\"width\":\"800px\",\"margin\":\"0 auto\"},attrs:{\"model\":_vm.indexForm,\"rules\":_vm.rules,\"label-width\":\"100px\",\"size\":\"mini\"}},[_c('el-form-item',{attrs:{\"label\":\"人群类型\",\"prop\":\"customerType\"}},[_c('el-select',{attrs:{\"placeholder\":\"请选择人群类型\"},model:{value:(_vm.indexForm.customerType),callback:function ($$v) {_vm.$set(_vm.indexForm, \"customerType\", $$v)},expression:\"indexForm.customerType\"}},[_c('el-option',{attrs:{\"label\":\"B端\",\"value\":\"1\"}}),_vm._v(\" \"),_c('el-option',{attrs:{\"label\":\"C端\",\"value\":\"2\"}})],1)],1),_vm._v(\" \"),_c('el-form-item',{attrs:{\"label\":\"类型\",\"prop\":\"type\"}},[_c('el-select',{attrs:{\"placeholder\":\"请选择类型\"},model:{value:(_vm.indexForm.type),callback:function ($$v) {_vm.$set(_vm.indexForm, \"type\", $$v)},expression:\"indexForm.type\"}},[_c('el-option',{attrs:{\"label\":\"短信\",\"value\":\"1\"}}),_vm._v(\" \"),_c('el-option',{attrs:{\"label\":\"邮件\",\"value\":\"2\"}}),_vm._v(\" \"),_c('el-option',{attrs:{\"label\":\"App Push\",\"value\":\"3\"}})],1)],1),_vm._v(\" \"),_c('el-form-item',{attrs:{\"label\":\"名称\",\"prop\":\"name\"}},[_c('el-input',{model:{value:(_vm.indexForm.name),callback:function ($$v) {_vm.$set(_vm.indexForm, \"name\", $$v)},expression:\"indexForm.name\"}})],1),_vm._v(\" \"),(_vm.indexForm.type==='1')?_c('message',{ref:\"message\"}):_vm._e(),_vm._v(\" \"),(_vm.indexForm.type==='2')?_c('mail',{ref:\"mail\"}):_vm._e(),_vm._v(\" \"),(_vm.indexForm.type==='3')?_c('apppush',{ref:\"apppush\",attrs:{\"customerType\":_vm.indexForm.customerType}}):_vm._e(),_vm._v(\" \"),_c('el-form-item',[_c('el-button',{attrs:{\"type\":\"primary\"},on:{\"click\":function($event){return _vm.submitForm1()}}},[_vm._v(\"立即创建\")])],1)],1)}\nvar staticRenderFns = []\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\nexport default esExports\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/vue-loader/lib/template-compiler?{\"id\":\"data-v-f35b3c66\",\"hasScoped\":false,\"transformToRequire\":{\"video\":[\"src\",\"poster\"],\"source\":\"src\",\"img\":\"src\",\"image\":\"xlink:href\"},\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./src/components/index.vue\n// module id = null\n// module chunks = ","\n \n \n
\n\n\n\n\n\n\n\n\n// WEBPACK FOOTER //\n// src/App.vue","var normalizeComponent = require(\"!../../node_modules/vue-loader/lib/component-normalizer\")\n/* script */\nexport * from \"!!babel-loader!../../node_modules/vue-loader/lib/selector?type=script&index=0!./index.vue\"\nimport __vue_script__ from \"!!babel-loader!../../node_modules/vue-loader/lib/selector?type=script&index=0!./index.vue\"\n/* template */\nimport __vue_template__ from \"!!../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-f35b3c66\\\",\\\"hasScoped\\\":false,\\\"transformToRequire\\\":{\\\"video\\\":[\\\"src\\\",\\\"poster\\\"],\\\"source\\\":\\\"src\\\",\\\"img\\\":\\\"src\\\",\\\"image\\\":\\\"xlink:href\\\"},\\\"buble\\\":{\\\"transforms\\\":{}}}!../../node_modules/vue-loader/lib/selector?type=template&index=0!./index.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_template__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/index.vue\n// module id = null\n// module chunks = ","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"app\"}},[_c('index')],1)}\nvar staticRenderFns = []\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\nexport default esExports\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/vue-loader/lib/template-compiler?{\"id\":\"data-v-d461aeba\",\"hasScoped\":false,\"transformToRequire\":{\"video\":[\"src\",\"poster\"],\"source\":\"src\",\"img\":\"src\",\"image\":\"xlink:href\"},\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./src/App.vue\n// module id = null\n// module chunks = ","function injectStyle (ssrContext) {\n require(\"!!../node_modules/extract-text-webpack-plugin/dist/loader.js?{\\\"omit\\\":1,\\\"remove\\\":true}!vue-style-loader!css-loader?{\\\"sourceMap\\\":true}!../node_modules/vue-loader/lib/style-compiler/index?{\\\"vue\\\":true,\\\"id\\\":\\\"data-v-d461aeba\\\",\\\"scoped\\\":false,\\\"hasInlineConfig\\\":false}!../node_modules/vue-loader/lib/selector?type=styles&index=0!./App.vue\")\n}\nvar normalizeComponent = require(\"!../node_modules/vue-loader/lib/component-normalizer\")\n/* script */\nexport * from \"!!babel-loader!../node_modules/vue-loader/lib/selector?type=script&index=0!./App.vue\"\nimport __vue_script__ from \"!!babel-loader!../node_modules/vue-loader/lib/selector?type=script&index=0!./App.vue\"\n/* template */\nimport __vue_template__ from \"!!../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-d461aeba\\\",\\\"hasScoped\\\":false,\\\"transformToRequire\\\":{\\\"video\\\":[\\\"src\\\",\\\"poster\\\"],\\\"source\\\":\\\"src\\\",\\\"img\\\":\\\"src\\\",\\\"image\\\":\\\"xlink:href\\\"},\\\"buble\\\":{\\\"transforms\\\":{}}}!../node_modules/vue-loader/lib/selector?type=template&index=0!./App.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_template__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/App.vue\n// module id = null\n// module chunks = ","// The Vue build version to load with the `import` command\n// (runtime-only or standalone) has been set in webpack.base.conf with an alias.\nimport Vue from 'vue'\nimport App from './App'\n\nimport ElementUI from 'element-ui';\nimport 'element-ui/lib/theme-chalk/index.css';\nVue.config.productionTip = false\nVue.use(ElementUI);\n/* eslint-disable no-new */\nnew Vue({\n el: '#app',\n components: { App },\n template: ''\n})\n\n\n\n// WEBPACK FOOTER //\n// ./src/main.js"],"sourceRoot":""}
--------------------------------------------------------------------------------
/docs/static/js/manifest.35719c9b69ffefca99b4.js:
--------------------------------------------------------------------------------
1 | !function(r){var o=window.webpackJsonp;window.webpackJsonp=function(n,c,f){for(var i,u,p,a=0,l=[];a
2 |
3 |
4 |
5 |
6 |
7 | validate test1
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "validate_test",
3 | "version": "1.0.0",
4 | "description": "A Vue.js project",
5 | "author": "jianyang.li ",
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 | "element-ui": "^2.9.1",
14 | "vue": "^2.5.2"
15 | },
16 | "devDependencies": {
17 | "autoprefixer": "^7.1.2",
18 | "babel-core": "^6.22.1",
19 | "babel-helper-vue-jsx-merge-props": "^2.0.3",
20 | "babel-loader": "^7.1.1",
21 | "babel-plugin-syntax-jsx": "^6.18.0",
22 | "babel-plugin-transform-runtime": "^6.22.0",
23 | "babel-plugin-transform-vue-jsx": "^3.5.0",
24 | "babel-preset-env": "^1.3.2",
25 | "babel-preset-stage-2": "^6.22.0",
26 | "chalk": "^2.0.1",
27 | "copy-webpack-plugin": "^4.0.1",
28 | "css-loader": "^0.28.0",
29 | "extract-text-webpack-plugin": "^3.0.0",
30 | "file-loader": "^1.1.4",
31 | "friendly-errors-webpack-plugin": "^1.6.1",
32 | "html-webpack-plugin": "^2.30.1",
33 | "node-notifier": "^5.1.2",
34 | "optimize-css-assets-webpack-plugin": "^3.2.0",
35 | "ora": "^1.2.0",
36 | "portfinder": "^1.0.13",
37 | "postcss-import": "^11.0.0",
38 | "postcss-loader": "^2.0.8",
39 | "postcss-url": "^7.2.1",
40 | "rimraf": "^2.6.0",
41 | "semver": "^5.3.0",
42 | "shelljs": "^0.7.6",
43 | "uglifyjs-webpack-plugin": "^1.1.1",
44 | "url-loader": "^0.5.8",
45 | "vue-loader": "^13.3.0",
46 | "vue-style-loader": "^3.0.1",
47 | "vue-template-compiler": "^2.5.2",
48 | "webpack": "^3.6.0",
49 | "webpack-bundle-analyzer": "^2.9.0",
50 | "webpack-dev-server": "^2.9.1",
51 | "webpack-merge": "^4.1.0"
52 | },
53 | "engines": {
54 | "node": ">= 6.0.0",
55 | "npm": ">= 3.0.0"
56 | },
57 | "browserslist": [
58 | "> 1%",
59 | "last 2 versions",
60 | "not ie <= 8"
61 | ]
62 | }
63 |
--------------------------------------------------------------------------------
/src/App.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
17 |
18 |
28 |
--------------------------------------------------------------------------------
/src/assets/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kevinLiJ/Verification-of-complex-forms/d3b12ccc1e96741b8fa70b46f24e7fa55f9c115d/src/assets/logo.png
--------------------------------------------------------------------------------
/src/components/apppush.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 | C端 落地页链接不是必填
14 |
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/src/components/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 | 立即创建
33 |
34 |
35 |
36 |
37 |
--------------------------------------------------------------------------------
/src/components/mail.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/src/components/message.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/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 |
6 | import ElementUI from 'element-ui';
7 | import 'element-ui/lib/theme-chalk/index.css';
8 | Vue.config.productionTip = false
9 | Vue.use(ElementUI);
10 | /* eslint-disable no-new */
11 | new Vue({
12 | el: '#app',
13 | components: { App },
14 | template: ''
15 | })
16 |
--------------------------------------------------------------------------------
/static/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kevinLiJ/Verification-of-complex-forms/d3b12ccc1e96741b8fa70b46f24e7fa55f9c115d/static/.gitkeep
--------------------------------------------------------------------------------