├── .babelrc ├── .editorconfig ├── .gitignore ├── .postcssrc.js ├── .prettierrc.json ├── 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 ├── build.path.js ├── dev.env.js ├── index.js └── prod.env.js ├── dist ├── index.html └── static │ ├── css │ └── app.3b9ad2e9fbcb06491a02b66843bac9c8.css │ ├── fonts │ ├── element-icons.535877f.woff │ └── element-icons.732389d.ttf │ ├── img │ ├── bg2.ee3e0f3.jpg │ └── bg3.ce136b5.jpg │ └── js │ ├── 0.50c13355aa4aa1a19998.js │ ├── 1.ec7fc1aa7570c9c97f81.js │ ├── 10.bd9ee421c64a2a11b240.js │ ├── 11.f4f55d7e3535b3333b5d.js │ ├── 12.2b059bb92dfdac93d442.js │ ├── 13.f752f1b9a5057a726184.js │ ├── 14.822e3e8f911cdf3d56a6.js │ ├── 15.42af932ff7639cc16eb2.js │ ├── 16.2730096b2f1072730259.js │ ├── 17.981ceb99e20d51d9d85b.js │ ├── 18.3050355b5c0736678fa2.js │ ├── 19.93182766585fa556af29.js │ ├── 2.c8bc5e73ae4374e38fcc.js │ ├── 20.c78353af9efe36bfeb17.js │ ├── 21.6bbf030d3cfa5a56f35f.js │ ├── 22.cdb173076033fe4dcbdd.js │ ├── 23.de2c1f8d054bb5740e5e.js │ ├── 24.18e1305ccb635a3c57df.js │ ├── 25.3563c4667f2753649add.js │ ├── 3.10b9be4b37758abf1781.js │ ├── 4.f27f430cc4b776dd1f8c.js │ ├── 5.ad7e489f9266cacd209a.js │ ├── 6.538d6cfe5d6551d41425.js │ ├── 7.1b01405d1a7fb1d34ae1.js │ ├── 8.6387bc26b1ba1261e814.js │ ├── 9.412de981536ada137937.js │ ├── app.ecd4fa7f2b499584c6a6.js │ ├── manifest.4fe9449a120f407564df.js │ └── vendor.3bb00ee700ade6ffe502.js ├── favicon.ico ├── index.html ├── package.json ├── src ├── App.vue ├── assets │ ├── css │ │ └── style.css │ ├── img │ │ ├── bg2.jpg │ │ ├── bg3.jpg │ │ └── bg4.jpg │ └── preview │ │ ├── e1.jpg │ │ ├── e2.jpg │ │ ├── e3.jpg │ │ └── e4.jpg ├── components │ ├── common │ │ ├── Breadcrumb.vue │ │ ├── ContentWarp.vue │ │ ├── Header.vue │ │ ├── SearchWarp.vue │ │ └── SideBar.vue │ ├── form │ │ ├── SelectAddress.vue │ │ ├── SelectCompany.vue │ │ ├── SelectDepartment.vue │ │ ├── SelectProcess.vue │ │ ├── SelectProduct.vue │ │ └── SelectRole.vue │ ├── home.vue │ ├── imgPreview │ │ ├── index.js │ │ └── index.vue │ ├── index.js │ └── qrCode │ │ ├── index.js │ │ └── index.vue ├── config.js ├── data │ └── menus.js ├── main.js ├── methods.js ├── router │ └── index.js └── view │ ├── Expired.vue │ ├── Login.vue │ ├── NotFound.vue │ ├── collection │ └── strategy │ │ ├── Edit.vue │ │ ├── List.vue │ │ ├── edit.js │ │ └── list.js │ ├── group │ ├── Department.vue │ ├── Power.vue │ ├── company │ │ ├── Company.vue │ │ ├── Staff.vue │ │ ├── Warp.vue │ │ ├── company.js │ │ └── staff.js │ ├── department.js │ ├── power.js │ └── role │ │ ├── Power.vue │ │ ├── Role.vue │ │ ├── power.js │ │ └── role.js │ ├── order │ ├── Intend.vue │ ├── Loan.vue │ ├── intend.js │ └── loan.js │ ├── product │ ├── Config.vue │ ├── Material.vue │ ├── config.js │ └── material.js │ ├── sms │ ├── Config.vue │ ├── Enabled.vue │ ├── Review.vue │ ├── config.js │ ├── enabled.js │ └── review.js │ ├── user │ ├── Find.vue │ └── Password.vue │ └── work │ ├── Assignment.vue │ ├── Delegate.vue │ ├── Process.vue │ ├── assignment.js │ ├── delegate.js │ └── process.js └── static └── .gitkeep /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | [ 4 | "env", 5 | { 6 | "modules": false, 7 | "targets": { 8 | "browsers": ["> 1%", "last 2 versions", "not ie <= 8"] 9 | } 10 | } 11 | ], 12 | "stage-2" 13 | ], 14 | "plugins": [ 15 | "transform-vue-jsx", 16 | "transform-runtime", 17 | [ 18 | "component", 19 | [ 20 | { 21 | "libraryName": "element-ui", 22 | "styleLibraryName": "theme-chalk" 23 | } 24 | ] 25 | ] 26 | ] 27 | } 28 | -------------------------------------------------------------------------------- /.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 | npm-debug.log* 4 | yarn-debug.log* 5 | yarn-error.log* 6 | /test/unit/coverage/ 7 | /test/e2e/reports/ 8 | selenium-debug.log 9 | 10 | # Editor directories and files 11 | .idea 12 | .project 13 | .vscode 14 | *.suo 15 | *.ntvs* 16 | *.njsproj 17 | *.sln 18 | -------------------------------------------------------------------------------- /.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 | -------------------------------------------------------------------------------- /.prettierrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "singleQuote": false, 3 | "semi": true, 4 | "jsxBracketSameLine": true, 5 | "tabWidth": 2, 6 | "bracketSpacing": true 7 | } 8 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # vue-admin 2 | 3 | 整理的后台管理/配置界面,使用 vue + router + element-ui + scss。 4 | 5 | 效果预览可以[点击这里](https://jingjingke.github.io/vue-admin/dist/) 6 | 7 | 项目文件基本都在 src 目录中,这个不用细说了。(现在只做了前面的几块,其它差不多的) 8 | 9 | ## 其它话 10 | 11 | 这个界面不完全参照公司后台系统,不过我当时是用 bootstrap 配合 VUE 去做,组件基本也是自己封装,现在看上去页面已经有点旧了,有点不太顺眼。所以前段时间萌生了想法,想把 UI 界面换一换,然后就看上了 element-ui。虽然 element-ui 做不到十全十美,但是里面很多封装好的组件感觉都非常好用的~ 12 | 13 | ## 效果 14 | 15 | ![效果图1](https://jingjingke.github.io/vue-admin/src/assets/preview/e1.jpg) 16 | ![效果图2](https://jingjingke.github.io/vue-admin/src/assets/preview/e2.jpg) 17 | ![效果图3](https://jingjingke.github.io/vue-admin/src/assets/preview/e3.jpg) 18 | ![效果图4](https://jingjingke.github.io/vue-admin/src/assets/preview/e4.jpg) 19 | -------------------------------------------------------------------------------- /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( 23 | stats.toString({ 24 | colors: true, 25 | modules: false, 26 | children: false, // If you are using ts-loader, setting this to true will make TypeScript errors show up during build. 27 | chunks: false, 28 | chunkModules: false 29 | }) + "\n\n" 30 | ); 31 | 32 | if (stats.hasErrors()) { 33 | console.log(chalk.red(" Build failed with errors.\n")); 34 | process.exit(1); 35 | } 36 | 37 | console.log(chalk.cyan(" Build complete.\n")); 38 | console.log( 39 | chalk.yellow( 40 | " Tip: built files are meant to be served over an HTTP server.\n" + 41 | " Opening index.html over file:// won't work.\n" 42 | ) 43 | ); 44 | }); 45 | }); 46 | -------------------------------------------------------------------------------- /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") 9 | .execSync(cmd) 10 | .toString() 11 | .trim(); 12 | } 13 | 14 | const versionRequirements = [ 15 | { 16 | name: "node", 17 | currentVersion: semver.clean(process.version), 18 | versionRequirement: packageConfig.engines.node 19 | } 20 | ]; 21 | 22 | if (shell.which("npm")) { 23 | versionRequirements.push({ 24 | name: "npm", 25 | currentVersion: exec("npm --version"), 26 | versionRequirement: packageConfig.engines.npm 27 | }); 28 | } 29 | 30 | module.exports = function() { 31 | const warnings = []; 32 | 33 | for (let i = 0; i < versionRequirements.length; i++) { 34 | const mod = versionRequirements[i]; 35 | 36 | if (!semver.satisfies(mod.currentVersion, mod.versionRequirement)) { 37 | warnings.push( 38 | mod.name + 39 | ": " + 40 | chalk.red(mod.currentVersion) + 41 | " should be " + 42 | chalk.green(mod.versionRequirement) 43 | ); 44 | } 45 | } 46 | 47 | if (warnings.length) { 48 | console.log(""); 49 | console.log( 50 | chalk.yellow( 51 | "To use this template, you must update following to modules:" 52 | ) 53 | ); 54 | console.log(); 55 | 56 | for (let i = 0; i < warnings.length; i++) { 57 | const warning = warnings[i]; 58 | console.log(" " + warning); 59 | } 60 | 61 | console.log(); 62 | process.exit(1); 63 | } 64 | }; 65 | -------------------------------------------------------------------------------- /build/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jingjingke/vue-admin/f331518063c3988c43dd19f55a6c07a3052ff4a5/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 = 9 | process.env.NODE_ENV === "production" 10 | ? config.build.assetsSubDirectory 11 | : config.dev.assetsSubDirectory; 12 | 13 | return path.posix.join(assetsSubDirectory, _path); 14 | }; 15 | 16 | exports.cssLoaders = function(options) { 17 | options = options || {}; 18 | 19 | const cssLoader = { 20 | loader: "css-loader", 21 | options: { 22 | sourceMap: options.sourceMap 23 | } 24 | }; 25 | 26 | const postcssLoader = { 27 | loader: "postcss-loader", 28 | options: { 29 | sourceMap: options.sourceMap 30 | } 31 | }; 32 | 33 | // generate loader string to be used with extract text plugin 34 | function generateLoaders(loader, loaderOptions) { 35 | const loaders = options.usePostCSS 36 | ? [cssLoader, postcssLoader] 37 | : [cssLoader]; 38 | 39 | if (loader) { 40 | loaders.push({ 41 | loader: loader + "-loader", 42 | options: Object.assign({}, loaderOptions, { 43 | sourceMap: options.sourceMap 44 | }) 45 | }); 46 | } 47 | 48 | // Extract CSS when that option is specified 49 | // (which is the case during production build) 50 | if (options.extract) { 51 | return ExtractTextPlugin.extract({ 52 | use: loaders, 53 | fallback: "vue-style-loader" 54 | }); 55 | } else { 56 | return ["vue-style-loader"].concat(loaders); 57 | } 58 | } 59 | 60 | // https://vue-loader.vuejs.org/en/configurations/extract-css.html 61 | return { 62 | css: generateLoaders(), 63 | postcss: generateLoaders(), 64 | less: generateLoaders("less"), 65 | sass: generateLoaders("sass", { indentedSyntax: true }), 66 | scss: generateLoaders("sass"), 67 | stylus: generateLoaders("stylus"), 68 | styl: generateLoaders("stylus") 69 | }; 70 | }; 71 | 72 | // Generate loaders for standalone style files (outside of .vue) 73 | exports.styleLoaders = function(options) { 74 | const output = []; 75 | const loaders = exports.cssLoaders(options); 76 | 77 | for (const extension in loaders) { 78 | const loader = loaders[extension]; 79 | output.push({ 80 | test: new RegExp("\\." + extension + "$"), 81 | use: loader 82 | }); 83 | } 84 | 85 | return output; 86 | }; 87 | 88 | exports.createNotifierCallback = () => { 89 | const notifier = require("node-notifier"); 90 | 91 | return (severity, errors) => { 92 | if (severity !== "error") return; 93 | 94 | const error = errors[0]; 95 | const filename = error.file && error.file.split("!").pop(); 96 | 97 | notifier.notify({ 98 | title: packageConfig.name, 99 | message: severity + ": " + error.name, 100 | subtitle: filename || "", 101 | icon: path.join(__dirname, "logo.png") 102 | }); 103 | }; 104 | }; 105 | -------------------------------------------------------------------------------- /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 | module.exports = { 12 | context: path.resolve(__dirname, "../"), 13 | entry: { 14 | app: "./src/main.js" 15 | }, 16 | output: { 17 | path: config.build.assetsRoot, 18 | filename: "[name].js", 19 | publicPath: 20 | process.env.NODE_ENV === "production" 21 | ? config.build.assetsPublicPath 22 | : config.dev.assetsPublicPath 23 | }, 24 | resolve: { 25 | extensions: [".js", ".vue", ".json"], 26 | alias: { 27 | vue$: "vue/dist/vue.esm.js", 28 | "@": resolve("src") 29 | } 30 | }, 31 | module: { 32 | rules: [ 33 | { 34 | test: /\.vue$/, 35 | loader: "vue-loader", 36 | options: vueLoaderConfig 37 | }, 38 | { 39 | test: /\.js$/, 40 | loader: "babel-loader", 41 | include: [ 42 | resolve("src"), 43 | resolve("test"), 44 | resolve("node_modules/webpack-dev-server/client") 45 | ] 46 | }, 47 | { 48 | test: /\.(png|jpe?g|gif|svg)(\?.*)?$/, 49 | loader: "url-loader", 50 | options: { 51 | limit: 10000, 52 | name: utils.assetsPath("img/[name].[hash:7].[ext]") 53 | } 54 | }, 55 | { 56 | test: /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/, 57 | loader: "url-loader", 58 | options: { 59 | limit: 10000, 60 | name: utils.assetsPath("media/[name].[hash:7].[ext]") 61 | } 62 | }, 63 | { 64 | test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/, 65 | loader: "url-loader", 66 | options: { 67 | limit: 10000, 68 | name: utils.assetsPath("fonts/[name].[hash:7].[ext]") 69 | } 70 | } 71 | ] 72 | }, 73 | node: { 74 | // prevent webpack from injecting useless setImmediate polyfill because Vue 75 | // source contains it (although only uses it if it's native). 76 | setImmediate: false, 77 | // prevent webpack from injecting mocks to Node native modules 78 | // that does not make sense for the client 79 | dgram: "empty", 80 | fs: "empty", 81 | net: "empty", 82 | tls: "empty", 83 | child_process: "empty" 84 | } 85 | }; 86 | -------------------------------------------------------------------------------- /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({ 19 | sourceMap: config.dev.cssSourceMap, 20 | usePostCSS: true 21 | }) 22 | }, 23 | // cheap-module-eval-source-map is faster for development 24 | devtool: config.dev.devtool, 25 | 26 | // these devServer options should be customized in /config/index.js 27 | devServer: { 28 | clientLogLevel: "warning", 29 | historyApiFallback: { 30 | rewrites: [ 31 | { 32 | from: /.*/, 33 | to: path.posix.join(config.dev.assetsPublicPath, "index.html") 34 | } 35 | ] 36 | }, 37 | hot: true, 38 | contentBase: false, // since we use CopyWebpackPlugin. 39 | compress: true, 40 | host: HOST || config.dev.host, 41 | port: PORT || config.dev.port, 42 | open: config.dev.autoOpenBrowser, 43 | overlay: config.dev.errorOverlay 44 | ? { warnings: false, errors: true } 45 | : false, 46 | publicPath: config.dev.assetsPublicPath, 47 | proxy: config.dev.proxyTable, 48 | quiet: true, // necessary for FriendlyErrorsPlugin 49 | watchOptions: { 50 | poll: config.dev.poll 51 | } 52 | }, 53 | plugins: [ 54 | new webpack.DefinePlugin({ 55 | "process.env": require("../config/dev.env") 56 | }), 57 | new webpack.HotModuleReplacementPlugin(), 58 | new webpack.NamedModulesPlugin(), // HMR shows correct file names in console on update. 59 | new webpack.NoEmitOnErrorsPlugin(), 60 | // https://github.com/ampedandwired/html-webpack-plugin 61 | new HtmlWebpackPlugin({ 62 | filename: "index.html", 63 | template: "index.html", 64 | inject: true 65 | }), 66 | // copy custom static assets 67 | new CopyWebpackPlugin([ 68 | { 69 | from: path.resolve(__dirname, "../static"), 70 | to: config.dev.assetsSubDirectory, 71 | ignore: [".*"] 72 | } 73 | ]) 74 | ] 75 | }); 76 | 77 | module.exports = new Promise((resolve, reject) => { 78 | portfinder.basePort = process.env.PORT || config.dev.port; 79 | portfinder.getPort((err, port) => { 80 | if (err) { 81 | reject(err); 82 | } else { 83 | // publish the new Port, necessary for e2e tests 84 | process.env.PORT = port; 85 | // add port to devServer config 86 | devWebpackConfig.devServer.port = port; 87 | 88 | // Add FriendlyErrorsPlugin 89 | devWebpackConfig.plugins.push( 90 | new FriendlyErrorsPlugin({ 91 | compilationSuccessInfo: { 92 | messages: [ 93 | `Your application is running here: http://${ 94 | devWebpackConfig.devServer.host 95 | }:${port}` 96 | ] 97 | }, 98 | onErrors: config.dev.notifyOnErrors 99 | ? utils.createNotifierCallback() 100 | : undefined 101 | }) 102 | ); 103 | 104 | resolve(devWebpackConfig); 105 | } 106 | }); 107 | }); 108 | -------------------------------------------------------------------------------- /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(path.join(__dirname, "../node_modules")) === 0 90 | ); 91 | } 92 | }), 93 | // extract webpack runtime and module manifest to its own file in order to 94 | // prevent vendor hash from being updated whenever app bundle is updated 95 | new webpack.optimize.CommonsChunkPlugin({ 96 | name: "manifest", 97 | minChunks: Infinity 98 | }), 99 | // This instance extracts shared chunks from code splitted chunks and bundles them 100 | // in a separate chunk, similar to the vendor chunk 101 | // see: https://webpack.js.org/plugins/commons-chunk-plugin/#extra-async-commons-chunk 102 | new webpack.optimize.CommonsChunkPlugin({ 103 | name: "app", 104 | async: "vendor-async", 105 | children: true, 106 | minChunks: 3 107 | }), 108 | 109 | // copy custom static assets 110 | new CopyWebpackPlugin([ 111 | { 112 | from: path.resolve(__dirname, "../static"), 113 | to: config.build.assetsSubDirectory, 114 | ignore: [".*"] 115 | } 116 | ]) 117 | ] 118 | }); 119 | 120 | if (config.build.productionGzip) { 121 | const CompressionWebpackPlugin = require("compression-webpack-plugin"); 122 | 123 | webpackConfig.plugins.push( 124 | new CompressionWebpackPlugin({ 125 | asset: "[path].gz[query]", 126 | algorithm: "gzip", 127 | test: new RegExp( 128 | "\\.(" + config.build.productionGzipExtensions.join("|") + ")$" 129 | ), 130 | threshold: 10240, 131 | minRatio: 0.8 132 | }) 133 | ); 134 | } 135 | 136 | if (config.build.bundleAnalyzerReport) { 137 | const BundleAnalyzerPlugin = require("webpack-bundle-analyzer") 138 | .BundleAnalyzerPlugin; 139 | webpackConfig.plugins.push(new BundleAnalyzerPlugin()); 140 | } 141 | 142 | module.exports = webpackConfig; 143 | -------------------------------------------------------------------------------- /config/build.path.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | // 测试环境 3 | // JAVA:'http://172.16.34.21:9320/cgjr/', 4 | URL: "https://jingjingke.github.io/vue-admin/dist/" 5 | 6 | // 预发环境 7 | // JAVA: 8 | // URL: 9 | 10 | // 线上环境 11 | // JAVA: 12 | // URL: 13 | }; 14 | -------------------------------------------------------------------------------- /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 | const BUILD = require("./build.path"); 7 | 8 | module.exports = { 9 | dev: { 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 | * Source Maps 25 | */ 26 | 27 | // https://webpack.js.org/configuration/devtool/#development 28 | devtool: "cheap-module-eval-source-map", 29 | 30 | // If you have problems debugging vue-files in devtools, 31 | // set this to false - it *may* help 32 | // https://vue-loader.vuejs.org/en/options.html#cachebusting 33 | cacheBusting: true, 34 | 35 | cssSourceMap: true 36 | }, 37 | 38 | build: { 39 | // Template for index.html 40 | index: path.resolve(__dirname, "../dist/index.html"), 41 | 42 | // Paths 43 | assetsRoot: path.resolve(__dirname, "../dist"), 44 | assetsSubDirectory: "static", 45 | assetsPublicPath: BUILD.URL, 46 | 47 | /** 48 | * Source Maps 49 | */ 50 | 51 | productionSourceMap: false, 52 | // https://webpack.js.org/configuration/devtool/#production 53 | devtool: "#source-map", 54 | 55 | // Gzip off by default as many popular static hosts such as 56 | // Surge or Netlify already gzip all static assets for you. 57 | // Before setting to `true`, make sure to: 58 | // npm install --save-dev compression-webpack-plugin 59 | productionGzip: false, 60 | productionGzipExtensions: ["js", "css"], 61 | 62 | // Run the build command with an extra argument to 63 | // View the bundle analyzer report after build finishes: 64 | // `npm run build --report` 65 | // Set to `true` or `false` to always turn it on or off 66 | bundleAnalyzerReport: process.env.npm_config_report 67 | } 68 | }; 69 | -------------------------------------------------------------------------------- /config/prod.env.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | module.exports = { 3 | NODE_ENV: '"production"' 4 | }; 5 | -------------------------------------------------------------------------------- /dist/index.html: -------------------------------------------------------------------------------- 1 | 后台系统
-------------------------------------------------------------------------------- /dist/static/fonts/element-icons.535877f.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jingjingke/vue-admin/f331518063c3988c43dd19f55a6c07a3052ff4a5/dist/static/fonts/element-icons.535877f.woff -------------------------------------------------------------------------------- /dist/static/fonts/element-icons.732389d.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jingjingke/vue-admin/f331518063c3988c43dd19f55a6c07a3052ff4a5/dist/static/fonts/element-icons.732389d.ttf -------------------------------------------------------------------------------- /dist/static/img/bg2.ee3e0f3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jingjingke/vue-admin/f331518063c3988c43dd19f55a6c07a3052ff4a5/dist/static/img/bg2.ee3e0f3.jpg -------------------------------------------------------------------------------- /dist/static/img/bg3.ce136b5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jingjingke/vue-admin/f331518063c3988c43dd19f55a6c07a3052ff4a5/dist/static/img/bg3.ce136b5.jpg -------------------------------------------------------------------------------- /dist/static/js/0.50c13355aa4aa1a19998.js: -------------------------------------------------------------------------------- 1 | webpackJsonp([0],{"3cXf":function(n,t,i){n.exports={default:i("q1bu"),__esModule:!0}},q1bu:function(n,t,i){var f=i("Rv9F"),r=f.JSON||(f.JSON={stringify:JSON.stringify});n.exports=function(n){return r.stringify.apply(r,arguments)}}}); -------------------------------------------------------------------------------- /dist/static/js/1.ec7fc1aa7570c9c97f81.js: -------------------------------------------------------------------------------- 1 | webpackJsonp([1],{CUTj:function(e,t,o){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var a={companyCode:"0001",companyName:"浙江金爱农网络科技有限公司",debtPolicyStepBoList:[{debtPolicyStepStaffBoList:[{id:101,policyStepId:2,staffId:684,staffName:"尹佳倩"}],id:2,policyId:2,stepName:"收息前手"},{debtPolicyStepStaffBoList:[{id:105,policyStepId:3,staffId:695,staffName:"张财银"},{id:106,policyStepId:3,staffId:696,staffName:"吴顺"}],id:3,policyId:2,stepName:"电催前手"},{debtPolicyStepStaffBoList:[{id:120,policyStepId:4,staffId:684,staffName:"尹佳倩"},{id:121,policyStepId:4,staffId:685,staffName:"王露颖"}],id:4,policyId:2,stepName:"电催中手"},{debtPolicyStepStaffBoList:[{id:124,policyStepId:5,staffId:708,staffName:"邹继攀"}],id:5,policyId:2,stepName:"上门催收"},{debtPolicyStepStaffBoList:[{id:130,policyStepId:6,staffId:717,staffName:"朱梦莎"}],id:6,policyId:2,stepName:"法务"}],id:2,name:"浙江微农贷催收策略",productCode:"WND",productName:"微农贷"},i={data:function(){return{title:"",isLock:!1,form:{},strategyRoleList:[],addInfo:{isOpen:!1,form:{stepName:"",debtPolicyStepStaffBoList:[]}},rules:{name:[{required:!0,message:"角色名称不能为空",trigger:"change"}],debtPolicyStepStaffBoList:[{type:"array",required:!0,message:"员工不能为空",trigger:"change"}]}}},watch:{"$route.path":"checkRoute"},methods:{checkRoute:function(){this.resetDefaultForm(),void 0===this.$route.params.id?(this.title="新增",this.isLock=!1):(this.title="修改",this.isLock=!0,this.form={id:a,name:a.name,companyCode:a.companyCode,productCode:a.productCode,stepStaffJSON:a.debtPolicyStepBoList})},resetDefaultForm:function(){this.form={companyCode:"",productCode:"",name:"",stepStaffJSON:[]}},formatValue:function(e,t,o){if("debtPolicyStepStaffBoList"===t.property){var a=[];return o.forEach(function(e){a.push(e.staffName)}),a.join(",")}},submitForm:function(e){console.log("整页保存提交")},sendAddAjax:function(e){var t=this;this.$refs[e].validate(function(e){if(!e)return!1;console.log("在此发送addInfo.form数据"),console.log(t.addInfo.form)})},resetAddInfo:function(){this.resetForm("formByAdd"),this.addInfo.isOpen=!1}},created:function(){this.checkRoute()}},r={render:function(){var e=this,t=e.$createElement,o=e._self._c||t;return o("el-main",[o("Breadcrumb",[o("el-breadcrumb-item",[e._v(e._s(e.title))])],1),e._v(" "),o("ContentWarp",[o("el-form",{ref:"form",staticClass:"content-form-warp",attrs:{rules:e.rules,model:e.form,"label-width":"100px"}},[o("el-form-item",{attrs:{label:"所属公司"}},[o("SelectCompany",{attrs:{disabled:e.isLock},model:{value:e.form.companyCode,callback:function(t){e.$set(e.form,"companyCode",t)},expression:"form.companyCode"}})],1),e._v(" "),o("el-form-item",{attrs:{label:"所属产品"}},[o("SelectProduct",{attrs:{disabled:e.isLock},model:{value:e.form.productCode,callback:function(t){e.$set(e.form,"productCode",t)},expression:"form.productCode"}})],1),e._v(" "),o("el-form-item",{attrs:{label:"策略名称"}},[o("el-input",{attrs:{placeholder:"请输入名称"},model:{value:e.form.name,callback:function(t){e.$set(e.form,"name",t)},expression:"form.name"}})],1),e._v(" "),o("el-form-item",{attrs:{label:"策略角色"}},[o("el-button",{attrs:{size:"mini",type:"primary",plain:""},on:{click:function(t){e.addInfo.isOpen=!0}}},[e._v("新增")]),e._v(" "),o("el-table",{attrs:{border:"",stripe:"",data:e.form.stepStaffJSON,size:"small"}},[o("el-table-column",{attrs:{align:"center",label:"角色名称",prop:"stepName"}}),e._v(" "),o("el-table-column",{attrs:{align:"center",label:"员工姓名",prop:"debtPolicyStepStaffBoList",formatter:e.formatValue}}),e._v(" "),o("el-table-column",{attrs:{align:"center",label:"操作",width:"200px"},scopedSlots:e._u([{key:"default",fn:function(t){return[o("el-button",{attrs:{size:"mini",type:"primary",icon:"el-icon-edit",plain:""},on:{click:function(o){return e.openChange(t.row)}}},[e._v("\n 修改\n ")]),e._v(" "),o("el-button",{attrs:{size:"mini",type:"danger",plain:""},on:{click:function(o){return e.openDelete(t.row)}}},[e._v("删除")])]}}])})],1)],1),e._v(" "),o("el-form-item",[o("el-button",{attrs:{type:"primary"},on:{click:function(t){return e.submitForm("form")}}},[e._v("保存")])],1)],1)],1),e._v(" "),o("el-dialog",{attrs:{title:"新增策略角色",width:"600px",center:"",visible:e.addInfo.isOpen,"show-close":!1},on:{"update:visible":function(t){return e.$set(e.addInfo,"isOpen",t)}}},[o("el-form",{ref:"formByAdd",attrs:{model:e.addInfo.form,rules:e.rules,"label-width":"80px"}},[o("el-form-item",{attrs:{label:"角色名称",prop:"name"}},[o("el-input",{attrs:{placeholder:"请输入名称"},model:{value:e.addInfo.form.name,callback:function(t){e.$set(e.addInfo.form,"name",t)},expression:"addInfo.form.name"}})],1),e._v(" "),o("el-form-item",{attrs:{label:"选择员工",prop:"debtPolicyStepStaffBoList"}},[o("el-select",{attrs:{multiple:"",placeholder:"请选择"},model:{value:e.addInfo.form.debtPolicyStepStaffBoList,callback:function(t){e.$set(e.addInfo.form,"debtPolicyStepStaffBoList",t)},expression:"addInfo.form.debtPolicyStepStaffBoList"}},[o("el-option",{attrs:{label:"王露颖",value:"685"}}),e._v(" "),o("el-option",{attrs:{label:"邹继攀",value:"708"}})],1)],1)],1),e._v(" "),o("div",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[o("el-button",{attrs:{type:"primary"},on:{click:function(t){return e.sendAddAjax("formByAdd")}}},[e._v("新 增")]),e._v(" "),o("el-button",{on:{click:e.resetAddInfo}},[e._v("取 消")])],1)],1)],1)},staticRenderFns:[]},l=o("C7Lr")(i,r,!1,null,null,null);t.default=l.exports}}); -------------------------------------------------------------------------------- /dist/static/js/10.bd9ee421c64a2a11b240.js: -------------------------------------------------------------------------------- 1 | webpackJsonp([10],{"5KWD":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=a("3cXf"),r=a.n(o),n={name:"WorkProcess",data:function(){return{searchInfo:{list:[],form:{name:""}},addInfo:{isOpen:!1,form:{name:"",file:"",desc:""}},rules:{name:[{required:!0,message:"请输入流程名称",trigger:"blur"},{min:2,max:20,message:"长度为2-20个字符",trigger:"blur"}],desc:[{required:!0,message:"流程描述不能为空",trigger:"blur"},{min:5,max:100,message:"长度为5-100个字符",trigger:"blur"}],file:[{required:!0,message:"文件不能为空"}]}}},methods:{resetAddInfo:function(){this.resetForm("formByAdd"),this.$refs.addUpload.clearFiles(),this.addInfo.isOpen=!1},getListAjax:function(){console.log("发送ajax查询数据或分页规则处理"),this.searchInfo.list=[{addDate:"2016-05-02",processName:"浙江申请减免",definedName:"orderApply:1:1",litpic:"http://www.jingjingke.com/uploads/allimg/171026/1-1G026135P50-L.gif"}]},sendAddAjax:function(e){var t=this;this.$refs[e].validate(function(e){if(!e)return!1;console.log("在此发送addInfo.form数据"),console.log(t.addInfo.form)})},changeAddFile:function(e){this.$refs.addUpload.clearFiles(),this.$refs.addUpload.uploadFiles[0]=e,this.addInfo.form.file=r()(e)},removeAddFile:function(e){this.$refs.addUpload.uploadFiles=[],this.addInfo.form.file=""}},mounted:function(){this.getListAjax()}},l={render:function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("el-main",[a("Breadcrumb"),e._v(" "),a("SearchWarp",[a("el-form",{ref:"searchInfo.form",attrs:{inline:!0,model:e.searchInfo.form}},[a("el-form-item",{attrs:{label:"流程名称"}},[a("el-input",{attrs:{placeholder:"请输入流程名称"},model:{value:e.searchInfo.form.name,callback:function(t){e.$set(e.searchInfo.form,"name",t)},expression:"searchInfo.form.name"}})],1),e._v(" "),a("el-form-item",[a("el-button",{attrs:{type:"success"},on:{click:e.getListAjax}},[e._v("查询")]),e._v(" "),a("el-button",{attrs:{type:"danger"},on:{click:function(t){e.addInfo.isOpen=!0}}},[e._v("新增")])],1)],1)],1),e._v(" "),a("ContentWarp",[a("el-table",{attrs:{border:"",stripe:"",data:e.searchInfo.list,size:"small"}},[a("el-table-column",{attrs:{align:"center",label:"流程名称",prop:"processName","min-width":"200px"}}),e._v(" "),a("el-table-column",{attrs:{align:"center",label:"定义名称",prop:"definedName","min-width":"200px"}}),e._v(" "),a("el-table-column",{attrs:{align:"center",label:"日期",prop:"addDate",width:"140"}}),e._v(" "),a("el-table-column",{attrs:{align:"center",label:"操作",width:"180"},scopedSlots:e._u([{key:"default",fn:function(t){return[a("el-button",{attrs:{size:"mini",icon:"el-icon-search"},on:{click:function(a){return e.$imgPreview([t.row.litpic,t.row.processName])}}},[e._v("查看流程图\n ")])]}}])})],1)],1),e._v(" "),a("el-dialog",{attrs:{title:"新增流程",width:"600px",center:"",visible:e.addInfo.isOpen,"show-close":!1},on:{"update:visible":function(t){return e.$set(e.addInfo,"isOpen",t)}}},[a("el-form",{ref:"formByAdd",attrs:{model:e.addInfo.form,rules:e.rules,"label-width":"80px"}},[a("el-form-item",{attrs:{label:"流程名称",prop:"name"}},[a("el-input",{attrs:{type:"text"},model:{value:e.addInfo.form.name,callback:function(t){e.$set(e.addInfo.form,"name",t)},expression:"addInfo.form.name"}})],1),e._v(" "),a("el-form-item",{attrs:{label:"选择流程",prop:"file"}},[a("el-upload",{ref:"addUpload",attrs:{action:"xxx","auto-upload":!1,"on-change":e.changeAddFile,"on-remove":e.removeAddFile}},[a("el-button",{attrs:{size:"small",type:"primary"}},[e._v("点击上传")]),e._v(" "),a("div",{staticClass:"el-upload__tip",attrs:{slot:"tip"},slot:"tip"},[e._v("\n 请选择需要上传的*.zip文件!\n ")])],1),e._v(" "),a("div",{staticClass:"disNone"},[a("el-input",{attrs:{type:"text"},model:{value:e.addInfo.form.file,callback:function(t){e.$set(e.addInfo.form,"file",t)},expression:"addInfo.form.file"}})],1)],1),e._v(" "),a("el-form-item",{attrs:{label:"流程描述",prop:"desc"}},[a("el-input",{attrs:{type:"textarea"},model:{value:e.addInfo.form.desc,callback:function(t){e.$set(e.addInfo.form,"desc",t)},expression:"addInfo.form.desc"}})],1)],1),e._v(" "),a("div",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[a("el-button",{attrs:{type:"primary"},on:{click:function(t){return e.sendAddAjax("formByAdd")}}},[e._v("新 增")]),e._v(" "),a("el-button",{on:{click:e.resetAddInfo}},[e._v("取 消")])],1)],1)],1)},staticRenderFns:[]},s=a("C7Lr")(n,l,!1,null,null,null);t.default=s.exports}}); -------------------------------------------------------------------------------- /dist/static/js/13.f752f1b9a5057a726184.js: -------------------------------------------------------------------------------- 1 | webpackJsonp([13],{qhji:function(e,s,r){"use strict";Object.defineProperty(s,"__esModule",{value:!0});var t={name:"Password",data:function(){return{form:{name:"admin-lixi",passOld:"",passNew1:"",passNew2:""},rules:{passOld:[{required:!0,message:"旧密码不能为空!",trigger:"blur"},{min:6,max:20,message:"密码为6-20个字符"}],passNew1:[{required:!0,message:"新密码不能为空!",trigger:"blur"},{min:6,max:20,message:"密码为6-20个字符"}],passNew2:[{required:!0,message:"确认密码不能为空!",trigger:"blur"},{min:6,max:20,message:"密码为6-20个字符"}]}}},methods:{submitForm:function(e){this.$refs[e].validate(function(e){e?console.log("验证通过"):console.log("不通过")})},resetForm:function(e){this.$refs[e].resetFields()}}},a={render:function(){var e=this,s=e.$createElement,r=e._self._c||s;return r("el-main",[r("el-breadcrumb",{attrs:{separator:"/"}},[r("el-breadcrumb-item",[e._v("用户管理")]),e._v(" "),r("el-breadcrumb-item",[e._v("重置密码")])],1),e._v(" "),r("el-form",{ref:"form",staticClass:"content-form-warp",attrs:{rules:e.rules,model:e.form,"label-width":"100px"}},[r("el-form-item",{attrs:{label:"用户名"}},[r("el-input",{attrs:{disabled:!0},model:{value:e.form.name,callback:function(s){e.$set(e.form,"name",s)},expression:"form.name"}})],1),e._v(" "),r("el-form-item",{attrs:{label:"旧密码",prop:"passOld"}},[r("el-input",{attrs:{type:"text"},model:{value:e.form.passOld,callback:function(s){e.$set(e.form,"passOld",s)},expression:"form.passOld"}})],1),e._v(" "),r("el-form-item",{attrs:{label:"新密码",prop:"passNew1"}},[r("el-input",{attrs:{type:"password"},model:{value:e.form.passNew1,callback:function(s){e.$set(e.form,"passNew1",s)},expression:"form.passNew1"}})],1),e._v(" "),r("el-form-item",{attrs:{label:"确认新密码",prop:"passNew2"}},[r("el-input",{attrs:{type:"password"},model:{value:e.form.passNew2,callback:function(s){e.$set(e.form,"passNew2",s)},expression:"form.passNew2"}})],1),e._v(" "),r("el-form-item",[r("el-button",{attrs:{type:"primary"},on:{click:function(s){return e.submitForm("form")}}},[e._v("点击确认")]),e._v(" "),r("el-button",{on:{click:function(s){return e.resetForm("form")}}},[e._v("重置")])],1)],1)],1)},staticRenderFns:[]},l=r("C7Lr")(t,a,!1,null,null,null);s.default=l.exports}}); -------------------------------------------------------------------------------- /dist/static/js/14.822e3e8f911cdf3d56a6.js: -------------------------------------------------------------------------------- 1 | webpackJsonp([14],{Iogj:function(e,t,l){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n={render:function(){var e=this,t=e.$createElement,l=e._self._c||t;return l("el-main",[l("Breadcrumb"),e._v(" "),l("SearchWarp",[l("el-form",{ref:"searchInfo.form",attrs:{inline:!0,model:e.searchInfo.form}},[l("el-form-item",{attrs:{label:"姓名"}},[l("el-input",{attrs:{placeholder:"请输入员工姓名"},model:{value:e.searchInfo.form.name,callback:function(t){e.$set(e.searchInfo.form,"name",t)},expression:"searchInfo.form.name"}})],1),e._v(" "),l("el-form-item",{attrs:{label:"手机号"}},[l("el-input",{attrs:{placeholder:"请输入手机号码"},model:{value:e.searchInfo.form.phone,callback:function(t){e.$set(e.searchInfo.form,"phone",t)},expression:"searchInfo.form.phone"}})],1),e._v(" "),l("el-form-item",{attrs:{label:"身份证"}},[l("el-input",{attrs:{placeholder:"请输入身份证号码"},model:{value:e.searchInfo.form.name,callback:function(t){e.$set(e.searchInfo.form,"name",t)},expression:"searchInfo.form.name"}})],1),e._v(" "),l("el-form-item",{attrs:{label:"状态"}},[l("el-select",{attrs:{placeholder:"请选择",clearable:""},model:{value:e.searchInfo.form.status,callback:function(t){e.$set(e.searchInfo.form,"status",t)},expression:"searchInfo.form.status"}},[l("el-option",{attrs:{label:"正常",value:1}}),e._v(" "),l("el-option",{attrs:{label:"注销",value:0}})],1)],1),e._v(" "),l("el-form-item",[l("el-button",{attrs:{type:"success"}},[e._v("查询")])],1)],1)],1),e._v(" "),l("ContentWarp",[l("el-table",{attrs:{border:"",stripe:"",data:e.searchInfo.list,size:"small"}},[l("el-table-column",{attrs:{align:"center",label:"ID",prop:"id",width:"60px"}}),e._v(" "),l("el-table-column",{attrs:{align:"center",label:"姓名",prop:"name","min-width":"100"}}),e._v(" "),l("el-table-column",{attrs:{align:"center",label:"手机号",prop:"phone","min-width":"120"}}),e._v(" "),l("el-table-column",{attrs:{align:"center",label:"身份证号",prop:"code","min-width":"160"}}),e._v(" "),l("el-table-column",{attrs:{align:"center",label:"地区",prop:"area","min-width":"320"}}),e._v(" "),l("el-table-column",{attrs:{align:"center",label:"状态",prop:"status",width:"80"}}),e._v(" "),l("el-table-column",{attrs:{align:"center",label:"操作",width:"120px"},scopedSlots:e._u([{key:"default",fn:function(t){return[l("el-button",{attrs:{size:"mini",icon:"el-icon-search",plain:""},on:{click:function(l){return e.openFind(t.row)}}},[e._v("查看")])]}}])})],1)],1),e._v(" "),l("el-dialog",{attrs:{title:"查看用户信息",width:"400px",center:"",visible:e.findInfo.isOpen,"show-close":!1},on:{"update:visible":function(t){return e.$set(e.findInfo,"isOpen",t)}}},[l("el-form",{staticClass:"find-info-warp",attrs:{model:e.findInfo.form,"label-position":"right","label-width":"110px"}},[l("el-form-item",{attrs:{label:"姓名:"}},[e._v(e._s(e.findInfo.form.name))]),e._v(" "),l("el-form-item",{attrs:{label:"手机号:"}},[e._v(e._s(e.findInfo.form.phone))]),e._v(" "),l("el-form-item",{attrs:{label:"身份证号:"}},[e._v(e._s(e.findInfo.form.code))]),e._v(" "),l("el-form-item",{attrs:{label:"身份证有效期:"}},[e._v(e._s(e.findInfo.form.valid))]),e._v(" "),l("el-form-item",{attrs:{label:"地区:"}},[e._v(e._s(e.findInfo.form.area))]),e._v(" "),l("el-form-item",{attrs:{label:"状态:"}},[e._v(e._s(e.findInfo.form.status))])],1),e._v(" "),l("div",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[l("el-button",{attrs:{type:"primary"},on:{click:function(t){e.findInfo.isOpen=!1}}},[e._v("关 闭")])],1)],1)],1)},staticRenderFns:[]},a=l("C7Lr")({name:"UserFind",data:function(){return{searchInfo:{list:[{id:1,name:"张三",phone:"15012345678",code:"222123199910102323",valid:"2027-10-10",status:"正常",area:"南京市玄武区花园路12号"}],form:{name:"",phone:"",code:"",status:""}},findInfo:{isOpen:!1,form:{}}}},methods:{openFind:function(e){this.findInfo={isOpen:!0,form:e}}}},n,!1,null,null,null);t.default=a.exports}}); -------------------------------------------------------------------------------- /dist/static/js/19.93182766585fa556af29.js: -------------------------------------------------------------------------------- 1 | webpackJsonp([19],{"6b/d":function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r={name:"OrderLoan",data:function(){return{searchTime:"",searchInfo:{list:[],form:{orderNo:"",phone:"",status:"",beginTime:"",endTime:""}},statusList:["初始化","审批中","审批通过","审批不通过"]}},methods:{checkSearchData:function(e,t){this.searchInfo.form.beginTime=e,this.searchInfo.form.endTime=t},getListAjax:function(){console.log("发送this.searchInfo.form的数据去查询"),console.log(this.searchInfo.form),this.searchInfo.list=[{id:1,orderNo:20171223000001,name:"测试2",phone:15012345678,loanAmount:4e4,creditAmount:0,status:0}]},formatValue:function(e,t,a){return this.statusList[a]}},created:function(){this.getListAjax()}},l={render:function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("el-main",[a("Breadcrumb"),e._v(" "),a("SearchWarp",[a("el-form",{ref:"searchInfo.form",attrs:{inline:!0,model:e.searchInfo.form}},[a("el-form-item",{attrs:{label:"订单号"}},[a("el-input",{attrs:{type:"text",placeholder:"请输入订单号"},model:{value:e.searchInfo.form.orderNo,callback:function(t){e.$set(e.searchInfo.form,"orderNo",t)},expression:"searchInfo.form.orderNo"}})],1),e._v(" "),a("el-form-item",{attrs:{label:"手机号"}},[a("el-input",{attrs:{type:"text",placeholder:"请输入手机号"},model:{value:e.searchInfo.form.phone,callback:function(t){e.$set(e.searchInfo.form,"phone",t)},expression:"searchInfo.form.phone"}})],1),e._v(" "),a("el-form-item",{attrs:{label:"状态"}},[a("el-select",{attrs:{placeholder:"请选择",clearable:""},model:{value:e.searchInfo.form.status,callback:function(t){e.$set(e.searchInfo.form,"status",t)},expression:"searchInfo.form.status"}},[e._l(e.statusList,function(e,t){return[a("el-option",{key:"statusList"+t,attrs:{label:e,value:t}})]})],2)],1),e._v(" "),a("el-form-item",{attrs:{label:"下单时间"}},[a("el-date-picker",{attrs:{type:"daterange","start-placeholder":"开始日期","end-placeholder":"结束日期","range-separator":"至","value-format":"yyyy-MM-dd"},on:{change:e.checkSearchData},model:{value:e.searchTime,callback:function(t){e.searchTime=t},expression:"searchTime"}})],1),e._v(" "),a("el-form-item",[a("el-button",{attrs:{type:"success"},on:{click:e.getListAjax}},[e._v("查询")]),e._v(" "),a("el-button",[e._v("导出")])],1)],1)],1),e._v(" "),a("ContentWarp",[a("el-table",{attrs:{border:"",stripe:"",data:e.searchInfo.list,size:"small"}},[a("el-table-column",{attrs:{align:"center",label:"订单号",prop:"orderNo",width:"130"}}),e._v(" "),a("el-table-column",{attrs:{align:"center",label:"姓名",prop:"name","min-width":"100"}}),e._v(" "),a("el-table-column",{attrs:{align:"center",label:"手机号",prop:"phone",width:"110"}}),e._v(" "),a("el-table-column",{attrs:{align:"center",label:"借款金额",prop:"loanAmount","min-width":"140"}}),e._v(" "),a("el-table-column",{attrs:{align:"center",label:"授信金额",prop:"creditAmount","min-width":"140"}}),e._v(" "),a("el-table-column",{attrs:{align:"center",label:"状态",prop:"status",formatter:e.formatValue,width:"100"}}),e._v(" "),a("el-table-column",{attrs:{align:"center",label:"操作",width:"120px"}},[[a("el-button",{attrs:{size:"mini",plain:""}},[e._v("查看")])]],2)],1)],1)],1)},staticRenderFns:[]},o=a("C7Lr")(r,l,!1,null,null,null);t.default=o.exports}}); -------------------------------------------------------------------------------- /dist/static/js/24.18e1305ccb635a3c57df.js: -------------------------------------------------------------------------------- 1 | webpackJsonp([24],{TwDw:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o={name:"GroupDepartment",data:function(){return{searchInfo:{list:[],form:{name:""}},addInfo:{isOpen:!1,form:{name:"",description:""}},changeInfo:{isOpen:!1,form:{}},deleteInfo:{isOpen:!1,form:{}},rules:{name:[{required:!0,message:"部门名称不能为空",trigger:"change"}],description:[{required:!0,message:"部门职责不能为空",trigger:"change"}]}}},methods:{getListAjax:function(){console.log("发送ajax查询数据或分页规则处理"),this.searchInfo.list=[{description:"内务1",id:43,name:"内务部",status:"0"},{description:"风控",id:42,name:"风控部",status:"0"},{description:"超级",id:41,name:"超级管理员",status:"0"},{description:"核算支持",id:36,name:"财务部",status:"0"},{description:"管理",id:35,name:"总经理",status:"0"},{description:"外访支持",id:34,name:"外访部",status:"0"},{description:"业务支持",id:33,name:"业务部",status:"0"}]},sendAddAjax:function(e){var t=this;this.$refs[e].validate(function(e){if(!e)return!1;console.log("在此发送addInfo.form数据"),console.log(t.addInfo.form)})},resetAddInfo:function(){this.resetForm("formByAdd"),this.addInfo.isOpen=!1},openChange:function(e){var t=this;this.changeInfo.isOpen=!0,setTimeout(function(){t.$refs.formByChange.resetFields(),t.changeInfo.form={id:e.id,name:e.name,description:e.description}},100)},sendChangeAjax:function(e){var t=this;this.$refs[e].validate(function(e){if(!e)return!1;console.log("在此发送changeInfo.form数据"),console.log(t.changeInfo.form)})},resetChangeInfo:function(){this.$refs.formByChange.resetFields(),this.changeInfo.isOpen=!1},openDelete:function(e){this.deleteInfo={isOpen:!0,form:e}},sendDeleteAjax:function(){console.log("确认删除ID为"+this.deleteInfo.form.id+"的部门")}},mounted:function(){this.getListAjax()}},r={render:function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("el-main",[n("Breadcrumb"),e._v(" "),n("SearchWarp",[n("el-form",{ref:"searchInfo.form",attrs:{inline:!0,model:e.searchInfo.form}},[n("el-form-item",{attrs:{label:"部门名称"}},[n("el-input",{attrs:{placeholder:"请输入部门名称"},model:{value:e.searchInfo.form.name,callback:function(t){e.$set(e.searchInfo.form,"name",t)},expression:"searchInfo.form.name"}})],1),e._v(" "),n("el-form-item",[n("el-button",{attrs:{type:"success"},on:{click:e.getListAjax}},[e._v("查询")]),e._v(" "),n("el-button",{attrs:{type:"danger"},on:{click:function(t){e.addInfo.isOpen=!0}}},[e._v("新增")])],1)],1)],1),e._v(" "),n("ContentWarp",[n("el-table",{attrs:{border:"",stripe:"",data:e.searchInfo.list,size:"small"}},[n("el-table-column",{attrs:{align:"center",label:"ID",prop:"id",width:"80"}}),e._v(" "),n("el-table-column",{attrs:{align:"center",label:"部门名称",prop:"name","min-width":"160"}}),e._v(" "),n("el-table-column",{attrs:{align:"center",label:"部门描述",prop:"description","min-width":"300"}}),e._v(" "),n("el-table-column",{attrs:{align:"center",label:"操作",width:"260px"},scopedSlots:e._u([{key:"default",fn:function(t){return[n("el-button",{attrs:{size:"mini",type:"primary",icon:"el-icon-edit",plain:""},on:{click:function(n){return e.openChange(t.row)}}},[e._v("修改\n ")]),e._v(" "),n("el-button",{attrs:{size:"mini",type:"danger",plain:""},on:{click:function(n){return e.openDelete(t.row)}}},[e._v("删除")])]}}])})],1)],1),e._v(" "),n("el-dialog",{attrs:{title:"新增部门",width:"600px",center:"",visible:e.addInfo.isOpen,"show-close":!1},on:{"update:visible":function(t){return e.$set(e.addInfo,"isOpen",t)}}},[n("el-form",{ref:"formByAdd",attrs:{model:e.addInfo.form,rules:e.rules,"label-width":"100px"}},[n("el-form-item",{attrs:{label:"部门名称",prop:"name"}},[n("el-input",{model:{value:e.addInfo.form.name,callback:function(t){e.$set(e.addInfo.form,"name",t)},expression:"addInfo.form.name"}})],1),e._v(" "),n("el-form-item",{attrs:{label:"部门职责",prop:"description"}},[n("el-input",{attrs:{type:"textarea"},model:{value:e.addInfo.form.description,callback:function(t){e.$set(e.addInfo.form,"description",t)},expression:"addInfo.form.description"}})],1)],1),e._v(" "),n("div",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[n("el-button",{attrs:{type:"primary"},on:{click:function(t){return e.sendAddAjax("formByAdd")}}},[e._v("新 增")]),e._v(" "),n("el-button",{on:{click:e.resetAddInfo}},[e._v("取 消")])],1)],1),e._v(" "),n("el-dialog",{attrs:{title:"修改角色",width:"600px",center:"",visible:e.changeInfo.isOpen,"show-close":!1},on:{"update:visible":function(t){return e.$set(e.changeInfo,"isOpen",t)}}},[n("el-form",{ref:"formByChange",attrs:{model:e.changeInfo.form,rules:e.rules,"label-width":"100px"}},[n("el-form-item",{attrs:{label:"部门名称",prop:"name"}},[n("el-input",{model:{value:e.changeInfo.form.name,callback:function(t){e.$set(e.changeInfo.form,"name",t)},expression:"changeInfo.form.name"}})],1),e._v(" "),n("el-form-item",{attrs:{label:"部门职责",prop:"description"}},[n("el-input",{attrs:{type:"textarea"},model:{value:e.changeInfo.form.description,callback:function(t){e.$set(e.changeInfo.form,"description",t)},expression:"changeInfo.form.description"}})],1)],1),e._v(" "),n("div",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[n("el-button",{attrs:{type:"primary"},on:{click:function(t){return e.sendChangeAjax("formByChange")}}},[e._v("修 改")]),e._v(" "),n("el-button",{on:{click:e.resetChangeInfo}},[e._v("取 消 ")])],1)],1),e._v(" "),n("el-dialog",{attrs:{title:"删除",width:"600px",center:"",visible:e.deleteInfo.isOpen,"show-close":!1},on:{"update:visible":function(t){return e.$set(e.deleteInfo,"isOpen",t)}}},[n("p",{staticClass:"text-center"},[e._v("\n 确定删除"),n("span",{staticClass:"text-red"},[e._v(" "+e._s(e.deleteInfo.form.name)+" ")]),e._v("吗?\n ")]),e._v(" "),n("div",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[n("el-button",{attrs:{type:"primary"},on:{click:e.sendDeleteAjax}},[e._v("确 认")]),e._v(" "),n("el-button",{on:{click:function(t){e.deleteInfo.isOpen=!1}}},[e._v("取 消")])],1)])],1)},staticRenderFns:[]},i=n("C7Lr")(o,r,!1,null,null,null);t.default=i.exports}}); -------------------------------------------------------------------------------- /dist/static/js/25.3563c4667f2753649add.js: -------------------------------------------------------------------------------- 1 | webpackJsonp([25],{xWma:function(e,t,o){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var a={name:"CollectionStrategy",data:function(){return{searchInfo:{list:[],form:{productCode:"",companyCode:""}},deleteInfo:{isOpen:!1,form:{}}}},methods:{getListAjax:function(){console.log("发送ajax查询数据或分页规则处理"),this.searchInfo.list=[{companyCode:"0001",companyName:"浙江金爱农网络科技有限公司",debtPolicyStepBoList:[{debtPolicyStepStaffBoList:[{id:101,policyStepId:2,staffId:684,staffName:"尹佳倩"}],id:2,policyId:2,stepName:"收息前手"},{debtPolicyStepStaffBoList:[{id:105,policyStepId:3,staffId:695,staffName:"张财银"},{id:106,policyStepId:3,staffId:696,staffName:"吴顺"}],id:3,policyId:2,stepName:"电催前手"},{debtPolicyStepStaffBoList:[{id:120,policyStepId:4,staffId:684,staffName:"尹佳倩"},{id:121,policyStepId:4,staffId:685,staffName:"王露颖"}],id:4,policyId:2,stepName:"电催中手"},{debtPolicyStepStaffBoList:[{id:124,policyStepId:5,staffId:708,staffName:"邹继攀"}],id:5,policyId:2,stepName:"上门催收"},{debtPolicyStepStaffBoList:[{id:130,policyStepId:6,staffId:717,staffName:"朱梦莎"}],id:6,policyId:2,stepName:"法务"}],id:2,name:"浙江微农贷催收策略",productCode:"WND",productName:"微农贷"}]},formatValue:function(e,t,o){if("debtPolicyStepBoList"===t.property){var a=[];return o.forEach(function(e){var t=[];e.debtPolicyStepStaffBoList.forEach(function(e){t.push(e.staffName)}),a.push(e.stepName+"("+t.join(",")+")")}),a.join(",")}},openDelete:function(e){this.deleteInfo={isOpen:!0,form:e}},sendDeleteAjax:function(){console.log("确认删除ID为"+this.deleteInfo.form.id+"的策略")}},created:function(){this.getListAjax()}},n={render:function(){var e=this,t=e.$createElement,o=e._self._c||t;return o("el-main",[o("Breadcrumb"),e._v(" "),o("SearchWarp",[o("el-form",{ref:"searchInfo.form",attrs:{inline:!0,model:e.searchInfo.form}},[o("el-form-item",{attrs:{label:"所属产品"}},[o("SelectProduct",{model:{value:e.searchInfo.form.productCode,callback:function(t){e.$set(e.searchInfo.form,"productCode",t)},expression:"searchInfo.form.productCode"}})],1),e._v(" "),o("el-form-item",{attrs:{label:"所属公司"}},[o("SelectCompany",{model:{value:e.searchInfo.form.companyCode,callback:function(t){e.$set(e.searchInfo.form,"companyCode",t)},expression:"searchInfo.form.companyCode"}})],1),e._v(" "),o("el-form-item",[o("el-button",{attrs:{type:"success"},on:{click:e.getListAjax}},[e._v("查询")]),e._v(" "),o("el-button",{attrs:{type:"danger"},on:{click:function(t){return e.$router.push("/collection/strategy/edit")}}},[e._v("新增")])],1)],1)],1),e._v(" "),o("ContentWarp",[o("el-table",{attrs:{border:"",stripe:"",data:e.searchInfo.list,size:"small"}},[o("el-table-column",{attrs:{align:"center",label:"策略名称",prop:"name","min-width":"120px"}}),e._v(" "),o("el-table-column",{attrs:{align:"center",label:"所属公司",prop:"companyName",width:"320"}}),e._v(" "),o("el-table-column",{attrs:{align:"center",label:"所属产品",prop:"productName","min-width":"120px"}}),e._v(" "),o("el-table-column",{attrs:{align:"center",label:"策略角色",prop:"debtPolicyStepBoList",formatter:e.formatValue,"min-width":"400px"}}),e._v(" "),o("el-table-column",{attrs:{align:"center",label:"操作",width:"170px"},scopedSlots:e._u([{key:"default",fn:function(t){return[o("el-button",{attrs:{size:"mini",type:"primary",icon:"el-icon-edit",plain:""},on:{click:function(o){return e.$router.push("/collection/strategy/edit/"+t.row.id)}}},[e._v("修改")]),e._v(" "),o("el-button",{attrs:{size:"mini",type:"danger",plain:""},on:{click:function(o){return e.openDelete(t.row)}}},[e._v("删除")])]}}])})],1)],1),e._v(" "),o("el-dialog",{attrs:{title:"删除",width:"600px",center:"",visible:e.deleteInfo.isOpen,"show-close":!1},on:{"update:visible":function(t){return e.$set(e.deleteInfo,"isOpen",t)}}},[o("p",{staticClass:"text-center"},[e._v("\n 确定删除"),o("span",{staticClass:"text-red"},[e._v(" "+e._s(e.deleteInfo.form.name)+" ")]),e._v("吗?\n ")]),e._v(" "),o("div",{staticClass:"dialog-footer",attrs:{slot:"footer"},slot:"footer"},[o("el-button",{attrs:{type:"primary"},on:{click:e.sendDeleteAjax}},[e._v("确 认")]),e._v(" "),o("el-button",{on:{click:function(t){e.deleteInfo.isOpen=!1}}},[e._v("取 消")])],1)])],1)},staticRenderFns:[]},i=o("C7Lr")(a,n,!1,null,null,null);t.default=i.exports}}); -------------------------------------------------------------------------------- /dist/static/js/4.f27f430cc4b776dd1f8c.js: -------------------------------------------------------------------------------- 1 | webpackJsonp([4],{"98a6":function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var a={data:function(){return{companyTree:[{area:"",code:"0",hasChild:"1",id:1,isEnd:"0",name:"总公司",parentId:"",principalArea:"",principalUserId:"",status:"0",type:"-1",children:[{area:"330000",code:"0001",guaranteed:"55",hasChild:"1",id:24,isEnd:"0",name:"浙江金爱农网络科技有限公司",parentId:"1",principalArea:"330000",status:"0",type:"0"}]}]}},methods:{handleNodeClick:function(e){console.log("点击了公司:"+e.name+"ID为:"+e.id)}}},r={render:function(){var e=this.$createElement,t=this._self._c||e;return t("el-main",[t("Breadcrumb"),this._v(" "),t("ContentWarp",[t("el-row",{attrs:{gutter:20}},[t("el-col",{attrs:{span:4}},[t("el-form",[t("el-form-item",[t("el-button",{attrs:{plain:""}},[this._v("一键生成推广二维码")])],1)],1),this._v(" "),t("el-tree",{attrs:{data:this.companyTree,props:{children:"children",label:"name"},accordion:""},on:{"node-click":this.handleNodeClick}})],1),this._v(" "),t("router-view")],1)],1)],1)},staticRenderFns:[]};var i=n("C7Lr")(a,r,!1,function(e){n("YT7y")},null,null);t.default=i.exports},YT7y:function(e,t){}}); -------------------------------------------------------------------------------- /dist/static/js/5.ad7e489f9266cacd209a.js: -------------------------------------------------------------------------------- 1 | webpackJsonp([5],{dLWD:function(e,l,c){"use strict";Object.defineProperty(l,"__esModule",{value:!0});var t={name:"GroupRolePower",data:function(){return{powerList:[],level01:!1,level02:!1,level03:!1,checkList:[],checklevel01:[],checklevel02:[],checklevel03:[],listlevel01:[],listlevel02:[],listlevel03:[]}},methods:{getRolePower:function(){var e=this;this.powerList=[{children:[{children:[{children:[],hasRelevance:"1",id:169,name:"查询资料列表",parentId:"101",seq:4,type:"3"},{children:[],hasRelevance:"1",id:159,name:"查询资料树",parentId:"101",seq:0,type:"3"},{children:[],hasRelevance:"1",id:117,name:"隐藏/显示",parentId:"101",seq:3,type:"3"},{children:[],hasRelevance:"1",id:116,name:"删除",parentId:"101",seq:2,type:"3"},{children:[],hasRelevance:"1",id:115,name:"修改",parentId:"101",seq:1,type:"3"},{children:[],hasRelevance:"1",id:114,name:"新增",parentId:"101",seq:0,type:"3"}],hasRelevance:"1",id:101,name:"资料配置",parentId:"18",seq:1,type:"1"},{children:[{children:[],hasRelevance:"1",id:167,name:"产品模型查询",parentId:"19",seq:3,type:"2"},{children:[],hasRelevance:"1",id:113,name:"启用/禁用",parentId:"19",seq:2,type:"3"},{children:[],hasRelevance:"1",id:112,name:"修改",parentId:"19",seq:1,type:"3"},{children:[],hasRelevance:"1",id:111,name:"新增",parentId:"19",seq:0,type:"3"}],hasRelevance:"1",id:19,name:"产品设置",parentId:"18",seq:0,type:"1"}],hasRelevance:"1",id:18,name:"产品管理",parentId:"",seq:12,type:"0"}],this.powerList.forEach(function(l){e.checkList[l.id]=[],e.listlevel01.push(l.id),"1"===l.hasRelevance&&e.checklevel01.push(l.id),l.children.forEach(function(c){e.checkList[l.id].push(c.id),e.listlevel02.push(c.id),"1"===c.hasRelevance&&e.checklevel02.push(c.id),c.children.forEach(function(l){e.listlevel03.push(l.id),"1"===l.hasRelevance&&e.checklevel03.push(l.id)})})})},level01Change:function(e){var l=this;this.checklevel01.indexOf(e)>=0?this.checkList[e].forEach(function(e){l.checklevel02.indexOf(e)<0&&l.checklevel02.push(e)}):this.checkList[e].forEach(function(e){var c=l.checklevel02.indexOf(e);c>=0&&l.checklevel02.splice(c,1)})},checkHas:function(e,l){for(var c=0;c 2 | 3 | 4 | 5 | 6 | 后台系统 7 | 8 | 9 |
10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vue-admin", 3 | "version": "1.0.0", 4 | "description": "A Vue.js project", 5 | "author": "jingjingke", 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.10.1", 14 | "vue": "^2.5.2", 15 | "vue-router": "^3.0.1" 16 | }, 17 | "devDependencies": { 18 | "autoprefixer": "^7.1.2", 19 | "babel-core": "^6.22.1", 20 | "babel-helper-vue-jsx-merge-props": "^2.0.3", 21 | "babel-loader": "^7.1.1", 22 | "babel-plugin-component": "^1.1.1", 23 | "babel-plugin-syntax-jsx": "^6.18.0", 24 | "babel-plugin-transform-runtime": "^6.22.0", 25 | "babel-plugin-transform-vue-jsx": "^3.5.0", 26 | "babel-preset-env": "^1.3.2", 27 | "babel-preset-stage-2": "^6.22.0", 28 | "chalk": "^2.0.1", 29 | "copy-webpack-plugin": "^4.0.1", 30 | "css-loader": "^0.28.0", 31 | "extract-text-webpack-plugin": "^3.0.0", 32 | "file-loader": "^1.1.4", 33 | "friendly-errors-webpack-plugin": "^1.6.1", 34 | "html-webpack-plugin": "^2.30.1", 35 | "node-notifier": "^5.1.2", 36 | "node-sass": "^4.12.0", 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 | "sass-loader": "^7.1.0", 45 | "semver": "^5.3.0", 46 | "shelljs": "^0.7.6", 47 | "uglifyjs-webpack-plugin": "^1.1.1", 48 | "url-loader": "^0.5.8", 49 | "vue-loader": "^13.3.0", 50 | "vue-style-loader": "^3.0.1", 51 | "vue-template-compiler": "^2.5.2", 52 | "webpack": "^3.6.0", 53 | "webpack-bundle-analyzer": "^2.9.0", 54 | "webpack-dev-server": "^2.9.1", 55 | "webpack-merge": "^4.1.0" 56 | }, 57 | "engines": { 58 | "node": ">= 6.0.0", 59 | "npm": ">= 3.0.0" 60 | }, 61 | "browserslist": [ 62 | "> 1%", 63 | "last 2 versions", 64 | "not ie <= 8" 65 | ] 66 | } 67 | -------------------------------------------------------------------------------- /src/App.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | -------------------------------------------------------------------------------- /src/assets/css/style.css: -------------------------------------------------------------------------------- 1 | .el-upload__tip { 2 | display: inline; 3 | margin-left: 10px; 4 | } 5 | 6 | .disNone { 7 | display: none; 8 | } 9 | 10 | /* 针对弹层上面的下拉选框大小 */ 11 | 12 | .el-dialog .el-select { 13 | width: 100%; 14 | } 15 | 16 | .el-textarea__inner { 17 | font-family: "微软雅黑"; 18 | font-size: 13px; 19 | } 20 | 21 | .text-center { 22 | text-align: center; 23 | } 24 | 25 | .text-red { 26 | color: #c00; 27 | } 28 | 29 | .mt30 { 30 | margin-top: 30px; 31 | } 32 | 33 | /* 三栏样式右侧标题样式 */ 34 | .content-right-title { 35 | font-size: 18px; 36 | font-weight: bold; 37 | padding-bottom: 32px; 38 | } 39 | .content-right-title .el-button { 40 | float: right; 41 | } 42 | 43 | /* 页面表单外套 */ 44 | .content-form-warp { 45 | width: 800px; 46 | margin: 0 auto; 47 | padding: 50px 100px 50px 50px; 48 | } 49 | .content-form-warp .el-select { 50 | width: 100%; 51 | } 52 | 53 | /* 表单组件下的表格样式控制 */ 54 | .el-form-item__content .el-table { 55 | line-height: initial; 56 | } 57 | 58 | /* 查看窗口 */ 59 | .find-info-warp .el-form-item { 60 | margin-bottom: 0; 61 | border-bottom: 1px dotted #eaeaea; 62 | } 63 | -------------------------------------------------------------------------------- /src/assets/img/bg2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jingjingke/vue-admin/f331518063c3988c43dd19f55a6c07a3052ff4a5/src/assets/img/bg2.jpg -------------------------------------------------------------------------------- /src/assets/img/bg3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jingjingke/vue-admin/f331518063c3988c43dd19f55a6c07a3052ff4a5/src/assets/img/bg3.jpg -------------------------------------------------------------------------------- /src/assets/img/bg4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jingjingke/vue-admin/f331518063c3988c43dd19f55a6c07a3052ff4a5/src/assets/img/bg4.jpg -------------------------------------------------------------------------------- /src/assets/preview/e1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jingjingke/vue-admin/f331518063c3988c43dd19f55a6c07a3052ff4a5/src/assets/preview/e1.jpg -------------------------------------------------------------------------------- /src/assets/preview/e2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jingjingke/vue-admin/f331518063c3988c43dd19f55a6c07a3052ff4a5/src/assets/preview/e2.jpg -------------------------------------------------------------------------------- /src/assets/preview/e3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jingjingke/vue-admin/f331518063c3988c43dd19f55a6c07a3052ff4a5/src/assets/preview/e3.jpg -------------------------------------------------------------------------------- /src/assets/preview/e4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jingjingke/vue-admin/f331518063c3988c43dd19f55a6c07a3052ff4a5/src/assets/preview/e4.jpg -------------------------------------------------------------------------------- /src/components/common/Breadcrumb.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | -------------------------------------------------------------------------------- /src/components/common/ContentWarp.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /src/components/common/Header.vue: -------------------------------------------------------------------------------- 1 | 14 | 15 | 36 | 37 | -------------------------------------------------------------------------------- /src/components/common/SearchWarp.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /src/components/common/SideBar.vue: -------------------------------------------------------------------------------- 1 | 24 | 25 | 70 | 71 | -------------------------------------------------------------------------------- /src/components/form/SelectCompany.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | -------------------------------------------------------------------------------- /src/components/form/SelectDepartment.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | -------------------------------------------------------------------------------- /src/components/form/SelectProcess.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | -------------------------------------------------------------------------------- /src/components/form/SelectProduct.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | -------------------------------------------------------------------------------- /src/components/form/SelectRole.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | -------------------------------------------------------------------------------- /src/components/home.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 16 | 17 | -------------------------------------------------------------------------------- /src/components/imgPreview/index.js: -------------------------------------------------------------------------------- 1 | import Vue from "vue"; 2 | import preview from "./index.vue"; 3 | 4 | // 构造子类 5 | const PreviewConstructor = Vue.extend(preview); 6 | 7 | // 创建实例并挂到一个新建的DIV节点上--后面会放进body 8 | let instance = new PreviewConstructor({ 9 | el: document.createElement("div") 10 | }); 11 | 12 | // 抛出的主方法 13 | const ImgPreview = function(options) { 14 | // 如果传进来的是字符串, 则应该是图片地址 15 | if (typeof options === "string") { 16 | options = { 17 | imgSrc: options, 18 | imgName: "" 19 | }; 20 | } else { 21 | options = { 22 | imgSrc: options[0], 23 | imgName: options[1] 24 | }; 25 | } 26 | // 判断并将值挂到实例上 27 | for (let prop in options) { 28 | if (options.hasOwnProperty(prop)) { 29 | instance[prop] = options[prop]; 30 | } 31 | } 32 | // 显示的值 33 | instance.visible = true; 34 | // 将实例放入body 35 | document.body.appendChild(instance.$el); 36 | }; 37 | 38 | export default ImgPreview; 39 | -------------------------------------------------------------------------------- /src/components/imgPreview/index.vue: -------------------------------------------------------------------------------- 1 | 30 | 31 | 141 | 142 | 190 | -------------------------------------------------------------------------------- /src/components/index.js: -------------------------------------------------------------------------------- 1 | // 通过组件 2 | import Header from "./common/Header"; 3 | import SideBar from "./common/SideBar"; 4 | import Breadcrumb from "./common/Breadcrumb"; 5 | import SearchWarp from "./common/SearchWarp"; 6 | import ContentWarp from "./common/ContentWarp"; 7 | 8 | import SelectCompany from "./form/SelectCompany"; 9 | import SelectProduct from "./form/SelectProduct"; 10 | import SelectProcess from "./form/SelectProcess"; 11 | import SelectRole from "./form/SelectRole"; 12 | import SelectAddress from "./form/SelectAddress"; 13 | import SelectDepartment from "./form/SelectDepartment"; 14 | 15 | export default { 16 | Header, 17 | SideBar, 18 | Breadcrumb, 19 | SearchWarp, 20 | ContentWarp, 21 | SelectCompany, 22 | SelectProduct, 23 | SelectProcess, 24 | SelectRole, 25 | SelectAddress, 26 | SelectDepartment 27 | }; 28 | -------------------------------------------------------------------------------- /src/components/qrCode/index.js: -------------------------------------------------------------------------------- 1 | import Vue from "vue"; 2 | import qr from "./index.vue"; 3 | 4 | // 构造子类 5 | const QrConstructor = Vue.extend(qr); 6 | 7 | // 创建实例并挂到一个新建的DIV节点上--后面会放进body 8 | let instance = new QrConstructor({ 9 | el: document.createElement("div") 10 | }); 11 | 12 | // 抛出的主方法 13 | const qrCode = function(options) { 14 | // 如果传进来的是字符串, 则应该是图片地址 15 | if (typeof options === "object") { 16 | options = { 17 | imgSrc: options[0], 18 | imgName: options[1] 19 | }; 20 | // 判断并将值挂到实例上 21 | for (let prop in options) { 22 | if (options.hasOwnProperty(prop)) { 23 | instance[prop] = options[prop]; 24 | } 25 | } 26 | // 显示的值 27 | instance.visible = true; 28 | // 将实例放入body 29 | document.body.appendChild(instance.$el); 30 | } 31 | }; 32 | 33 | export default qrCode; 34 | -------------------------------------------------------------------------------- /src/components/qrCode/index.vue: -------------------------------------------------------------------------------- 1 | 15 | 16 | 21 | 22 | 33 | -------------------------------------------------------------------------------- /src/config.js: -------------------------------------------------------------------------------- 1 | const info = { 2 | name: "金爱农运营后台", 3 | copy: "浙江金爱农网络科技有限公司" 4 | }; 5 | export default info; 6 | -------------------------------------------------------------------------------- /src/data/menus.js: -------------------------------------------------------------------------------- 1 | const data = [ 2 | { 3 | name: "工作流设置", 4 | icon: "el-icon-sort", 5 | children: [ 6 | { 7 | name: "流程管理", 8 | route: "/work/process" 9 | }, 10 | { 11 | name: "产品流程分配", 12 | route: "/work/assignment" 13 | }, 14 | { 15 | name: "委派规则配置", 16 | route: "/work/delegate" 17 | } 18 | ] 19 | }, 20 | { 21 | name: "组织架构", 22 | icon: "el-icon-share", 23 | children: [ 24 | { 25 | name: "公司管理", 26 | route: "/group/company" 27 | }, 28 | { 29 | name: "角色管理", 30 | route: "/group/role" 31 | }, 32 | { 33 | name: "部门管理", 34 | route: "/group/department" 35 | }, 36 | { 37 | name: "权限管理", 38 | route: "/group/power" 39 | } 40 | ] 41 | }, 42 | { 43 | name: "产品管理", 44 | icon: "el-icon-menu", 45 | children: [ 46 | { 47 | name: "产品设置", 48 | route: "/product/config" 49 | }, 50 | { 51 | name: "资料配置", 52 | route: "/product/material" 53 | } 54 | ] 55 | }, 56 | // { 57 | // name: "任务管理", 58 | // icon: "el-icon-setting", 59 | // children: [ 60 | // { 61 | // name: "任务概况", 62 | // route: "/task/info" 63 | // }, 64 | // { 65 | // name: "我的任务", 66 | // route: "/task/my" 67 | // }, 68 | // { 69 | // name: "任务派发", 70 | // route: "/task/dispatch" 71 | // } 72 | // ] 73 | // }, 74 | { 75 | name: "订单管理", 76 | icon: "el-icon-star-on", 77 | children: [ 78 | { 79 | name: "借款订单查询", 80 | route: "/order/loan" 81 | }, 82 | { 83 | name: "意向订单查询", 84 | route: "/order/intend" 85 | } 86 | ] 87 | }, 88 | { 89 | name: "用户管理", 90 | icon: "el-icon-search", 91 | children: [ 92 | { 93 | name: "用户查询", 94 | route: "/user/find" 95 | } 96 | ] 97 | }, 98 | { 99 | name: "短信管理", 100 | icon: "el-icon-message", 101 | children: [ 102 | { 103 | name: "模板配置", 104 | route: "/sms/config" 105 | }, 106 | { 107 | name: "模板审核", 108 | route: "/sms/review" 109 | }, 110 | { 111 | name: "模板启用", 112 | route: "/sms/enabled" 113 | } 114 | ] 115 | }, 116 | { 117 | name: "催收管理", 118 | icon: "el-icon-bell", 119 | children: [ 120 | { 121 | name: "策略", 122 | route: "/collection/strategy" 123 | } 124 | // { 125 | // name: "催收流程", 126 | // route: "/collection/process" 127 | // }, 128 | // { 129 | // name: "角色催收地区", 130 | // route: "/collection/area" 131 | // } 132 | ] 133 | } 134 | // { 135 | // name: "案件管理", 136 | // icon: "el-icon-document", 137 | // children: [ 138 | // { 139 | // name: "案件列表", 140 | // route: "/board/all" 141 | // }, 142 | // { 143 | // name: "所有未催", 144 | // route: "/board/not-reminder" 145 | // }, 146 | // { 147 | // name: "所有已催", 148 | // route: "/board/has-reminded" 149 | // }, 150 | // { 151 | // name: "答应会还", 152 | // route: "/board/promised" 153 | // }, 154 | // { 155 | // name: "重点关注", 156 | // route: "/board/focus" 157 | // } 158 | // ] 159 | // } 160 | ]; 161 | 162 | export default data; 163 | -------------------------------------------------------------------------------- /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 | 7 | // 引入站点全局信息 8 | import config from "./config"; 9 | 10 | // 单独使用element组件 11 | import { 12 | DatePicker, 13 | Checkbox, 14 | InputNumber, 15 | Tag, 16 | Cascader, 17 | Row, 18 | Col, 19 | Tree, 20 | Upload, 21 | Dialog, 22 | Pagination, 23 | Table, 24 | TableColumn, 25 | Breadcrumb, 26 | BreadcrumbItem, 27 | Menu, 28 | Submenu, 29 | MenuItem, 30 | MenuItemGroup, 31 | Dropdown, 32 | DropdownMenu, 33 | DropdownItem, 34 | MessageBox, 35 | Message, 36 | Radio, 37 | RadioGroup, 38 | Input, 39 | Option, 40 | Select, 41 | Button, 42 | Form, 43 | FormItem, 44 | Container, 45 | Header, 46 | Aside, 47 | Main, 48 | Footer 49 | } from "element-ui"; 50 | 51 | Vue.use(DatePicker); 52 | Vue.use(Checkbox); 53 | Vue.use(InputNumber); 54 | Vue.use(Tag); 55 | Vue.use(Cascader); 56 | Vue.use(Row); 57 | Vue.use(Col); 58 | Vue.use(Tree); 59 | Vue.use(Upload); 60 | Vue.use(Dialog); 61 | Vue.use(Pagination); 62 | Vue.use(Table); 63 | Vue.use(TableColumn); 64 | Vue.use(Breadcrumb); 65 | Vue.use(BreadcrumbItem); 66 | Vue.use(Menu); 67 | Vue.use(Submenu); 68 | Vue.use(MenuItem); 69 | Vue.use(MenuItemGroup); 70 | Vue.use(Dropdown); 71 | Vue.use(DropdownMenu); 72 | Vue.use(DropdownItem); 73 | Vue.use(Radio); 74 | Vue.use(RadioGroup); 75 | Vue.use(Input); 76 | Vue.use(Option); 77 | Vue.use(Select); 78 | Vue.use(Button); 79 | Vue.use(Form); 80 | Vue.use(FormItem); 81 | Vue.use(Container); 82 | Vue.use(Header); 83 | Vue.use(Aside); 84 | Vue.use(Main); 85 | Vue.use(Footer); 86 | 87 | Vue.prototype.$message = Message; 88 | // Vue.prototype.$msgbox = MessageBox 89 | Vue.prototype.$alert = MessageBox.alert; 90 | 91 | // 注册全局组件开始 92 | import components from "./components/"; 93 | Object.keys(components).forEach(key => { 94 | Vue.component(key, components[key]); 95 | }); 96 | // 注册全局组件完成 97 | 98 | // 引入全局方法开始 99 | import methods from "./methods"; 100 | Object.keys(methods).forEach(key => { 101 | Vue.prototype[key] = methods[key]; 102 | }); 103 | // 引入全局方法结束 104 | 105 | Vue.config.productionTip = false; 106 | 107 | // 添加路由钩子修改每个页面标题 108 | router.beforeEach((to, form, next) => { 109 | // 如果自定义了标题就取标题,否则拿全局的 110 | window.document.title = 111 | to.meta.title !== undefined 112 | ? to.meta.title + "-" + config.name 113 | : config.name; 114 | next(); 115 | }); 116 | 117 | /* eslint-disable no-new */ 118 | new Vue({ 119 | el: "#app", 120 | router, 121 | template: "", 122 | components: { App } 123 | }); 124 | -------------------------------------------------------------------------------- /src/methods.js: -------------------------------------------------------------------------------- 1 | // 引入调用图像预览的组件 2 | import ImgPreview from "@/components/imgPreview/index.js"; 3 | import qrCode from "@/components/qrCode/index.js"; 4 | import webInfo from "./config.js"; 5 | 6 | var methods = { 7 | // 后台基础信息 8 | webInfo: webInfo, 9 | // 重置表达数据 10 | resetForm: function(formName) { 11 | this.$refs[formName].resetFields(); 12 | }, 13 | // 全局-查看图片 14 | $imgPreview: ImgPreview, 15 | // 全局-查看二维码 16 | $qr: qrCode, 17 | // 精确小数点位置 18 | fomatFloat(value, pos) { 19 | return Math.round(value * Math.pow(10, pos)) / Math.pow(10, pos); 20 | }, 21 | // 循环取得值(转换字段由数字转为汉字用) 22 | fomatLoopValue(val, arr) { 23 | for (let i = 0; i < arr.length; i++) { 24 | if (arr[i].text === val) { 25 | return arr[i].value; 26 | } 27 | } 28 | // 如果没有的话就返回val 29 | return val; 30 | }, 31 | // 格式化时间 32 | fomatTime(row, column, cellValue) { 33 | let time = new Date(cellValue); 34 | let year = time.getFullYear(); 35 | let month = time.getMonth() + 1; 36 | let day = time.getDate(); 37 | return ( 38 | year + 39 | "-" + 40 | (month >= 10 ? month : "0" + month) + 41 | "-" + 42 | (day >= 10 ? day : "0" + day) 43 | ); 44 | } 45 | }; 46 | export default methods; 47 | -------------------------------------------------------------------------------- /src/view/Expired.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 41 | 42 | -------------------------------------------------------------------------------- /src/view/Login.vue: -------------------------------------------------------------------------------- 1 | 18 | 19 | 56 | 57 | -------------------------------------------------------------------------------- /src/view/NotFound.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 42 | 43 | -------------------------------------------------------------------------------- /src/view/collection/strategy/Edit.vue: -------------------------------------------------------------------------------- 1 | 58 | 59 | -------------------------------------------------------------------------------- /src/view/collection/strategy/List.vue: -------------------------------------------------------------------------------- 1 | 47 | 48 | -------------------------------------------------------------------------------- /src/view/collection/strategy/edit.js: -------------------------------------------------------------------------------- 1 | const pageData = { 2 | companyCode: "0001", 3 | companyName: "浙江金爱农网络科技有限公司", 4 | debtPolicyStepBoList: [ 5 | { 6 | debtPolicyStepStaffBoList: [ 7 | { 8 | id: 101, 9 | policyStepId: 2, 10 | staffId: 684, 11 | staffName: "尹佳倩" 12 | } 13 | ], 14 | id: 2, 15 | policyId: 2, 16 | stepName: "收息前手" 17 | }, 18 | { 19 | debtPolicyStepStaffBoList: [ 20 | { 21 | id: 105, 22 | policyStepId: 3, 23 | staffId: 695, 24 | staffName: "张财银" 25 | }, 26 | { 27 | id: 106, 28 | policyStepId: 3, 29 | staffId: 696, 30 | staffName: "吴顺" 31 | } 32 | ], 33 | id: 3, 34 | policyId: 2, 35 | stepName: "电催前手" 36 | }, 37 | { 38 | debtPolicyStepStaffBoList: [ 39 | { 40 | id: 120, 41 | policyStepId: 4, 42 | staffId: 684, 43 | staffName: "尹佳倩" 44 | }, 45 | { 46 | id: 121, 47 | policyStepId: 4, 48 | staffId: 685, 49 | staffName: "王露颖" 50 | } 51 | ], 52 | id: 4, 53 | policyId: 2, 54 | stepName: "电催中手" 55 | }, 56 | { 57 | debtPolicyStepStaffBoList: [ 58 | { 59 | id: 124, 60 | policyStepId: 5, 61 | staffId: 708, 62 | staffName: "邹继攀" 63 | } 64 | ], 65 | id: 5, 66 | policyId: 2, 67 | stepName: "上门催收" 68 | }, 69 | { 70 | debtPolicyStepStaffBoList: [ 71 | { 72 | id: 130, 73 | policyStepId: 6, 74 | staffId: 717, 75 | staffName: "朱梦莎" 76 | } 77 | ], 78 | id: 6, 79 | policyId: 2, 80 | stepName: "法务" 81 | } 82 | ], 83 | id: 2, 84 | name: "浙江微农贷催收策略", 85 | productCode: "WND", 86 | productName: "微农贷" 87 | }; 88 | 89 | export default { 90 | data() { 91 | return { 92 | title: "", 93 | isLock: false, 94 | form: {}, 95 | strategyRoleList: [], 96 | addInfo: { 97 | // 存放新增窗口显示状态及它的表单数据 98 | isOpen: false, 99 | form: { 100 | stepName: "", 101 | debtPolicyStepStaffBoList: [] 102 | } 103 | }, 104 | rules: { 105 | name: [ 106 | { 107 | required: true, 108 | message: "角色名称不能为空", 109 | trigger: "change" 110 | } 111 | ], 112 | debtPolicyStepStaffBoList: [ 113 | { 114 | type: "array", 115 | required: true, 116 | message: "员工不能为空", 117 | trigger: "change" 118 | } 119 | ] 120 | } 121 | }; 122 | }, 123 | watch: { 124 | "$route.path": "checkRoute" 125 | }, 126 | methods: { 127 | // 观察路由 128 | checkRoute() { 129 | // 初始表单 130 | this.resetDefaultForm(); 131 | // 获取路由参数 132 | let id = this.$route.params.id; 133 | // 由路由参数判断模板是新增还是修改 134 | if (id === undefined) { 135 | this.title = "新增"; 136 | this.isLock = false; 137 | } else { 138 | this.title = "修改"; 139 | this.isLock = true; 140 | this.form = { 141 | id: pageData, 142 | name: pageData.name, 143 | companyCode: pageData.companyCode, 144 | productCode: pageData.productCode, 145 | stepStaffJSON: pageData.debtPolicyStepBoList 146 | }; 147 | } 148 | }, 149 | // 初始化表单 150 | resetDefaultForm() { 151 | this.form = { 152 | companyCode: "", 153 | productCode: "", 154 | name: "", 155 | stepStaffJSON: [] 156 | }; 157 | }, 158 | // 格式化数字转成字符串名 159 | formatValue(row, column, cellValue) { 160 | // 根据传入的prop值确认规则列表 161 | if (column.property === "debtPolicyStepStaffBoList") { 162 | let nameArr = []; 163 | cellValue.forEach(item => { 164 | nameArr.push(item.staffName); 165 | }); 166 | return nameArr.join(","); 167 | } 168 | }, 169 | // 保存 170 | submitForm(form) { 171 | console.log("整页保存提交"); 172 | }, 173 | // 新增ajax 174 | sendAddAjax(formName) { 175 | this.$refs[formName].validate(valid => { 176 | // 字段验证是否成功 177 | if (valid) { 178 | console.log("在此发送addInfo.form数据"); 179 | console.log(this.addInfo.form); 180 | } else { 181 | return false; 182 | } 183 | }); 184 | }, 185 | // 重置新值数据-关闭窗口 186 | resetAddInfo() { 187 | // 清空表单 188 | this.resetForm("formByAdd"); 189 | // 关闭窗口 190 | this.addInfo.isOpen = false; 191 | } 192 | }, 193 | created() { 194 | // 初始化 195 | this.checkRoute(); 196 | } 197 | }; 198 | -------------------------------------------------------------------------------- /src/view/collection/strategy/list.js: -------------------------------------------------------------------------------- 1 | export default { 2 | name: "CollectionStrategy", 3 | data() { 4 | return { 5 | searchInfo: { 6 | // 存放查询表单及列表数据 7 | list: [], 8 | form: { 9 | productCode: "", 10 | companyCode: "" 11 | } 12 | }, 13 | deleteInfo: { 14 | isOpen: false, 15 | form: {} 16 | } 17 | }; 18 | }, 19 | methods: { 20 | // 查询列表 21 | getListAjax() { 22 | console.log("发送ajax查询数据或分页规则处理"); 23 | // 模拟取得列表 24 | this.searchInfo.list = [ 25 | { 26 | companyCode: "0001", 27 | companyName: "浙江金爱农网络科技有限公司", 28 | debtPolicyStepBoList: [ 29 | { 30 | debtPolicyStepStaffBoList: [ 31 | { 32 | id: 101, 33 | policyStepId: 2, 34 | staffId: 684, 35 | staffName: "尹佳倩" 36 | } 37 | ], 38 | id: 2, 39 | policyId: 2, 40 | stepName: "收息前手" 41 | }, 42 | { 43 | debtPolicyStepStaffBoList: [ 44 | { 45 | id: 105, 46 | policyStepId: 3, 47 | staffId: 695, 48 | staffName: "张财银" 49 | }, 50 | { 51 | id: 106, 52 | policyStepId: 3, 53 | staffId: 696, 54 | staffName: "吴顺" 55 | } 56 | ], 57 | id: 3, 58 | policyId: 2, 59 | stepName: "电催前手" 60 | }, 61 | { 62 | debtPolicyStepStaffBoList: [ 63 | { 64 | id: 120, 65 | policyStepId: 4, 66 | staffId: 684, 67 | staffName: "尹佳倩" 68 | }, 69 | { 70 | id: 121, 71 | policyStepId: 4, 72 | staffId: 685, 73 | staffName: "王露颖" 74 | } 75 | ], 76 | id: 4, 77 | policyId: 2, 78 | stepName: "电催中手" 79 | }, 80 | { 81 | debtPolicyStepStaffBoList: [ 82 | { 83 | id: 124, 84 | policyStepId: 5, 85 | staffId: 708, 86 | staffName: "邹继攀" 87 | } 88 | ], 89 | id: 5, 90 | policyId: 2, 91 | stepName: "上门催收" 92 | }, 93 | { 94 | debtPolicyStepStaffBoList: [ 95 | { 96 | id: 130, 97 | policyStepId: 6, 98 | staffId: 717, 99 | staffName: "朱梦莎" 100 | } 101 | ], 102 | id: 6, 103 | policyId: 2, 104 | stepName: "法务" 105 | } 106 | ], 107 | id: 2, 108 | name: "浙江微农贷催收策略", 109 | productCode: "WND", 110 | productName: "微农贷" 111 | } 112 | ]; 113 | }, 114 | // 格式化数字转成字符串名 115 | formatValue(row, column, cellValue) { 116 | // 根据传入的prop值确认规则列表 117 | if (column.property === "debtPolicyStepBoList") { 118 | let nameArr = []; 119 | cellValue.forEach(item => { 120 | let valueArr = []; 121 | item.debtPolicyStepStaffBoList.forEach(list => { 122 | valueArr.push(list.staffName); 123 | }); 124 | nameArr.push(item.stepName + "(" + valueArr.join(",") + ")"); 125 | }); 126 | return nameArr.join(","); 127 | } 128 | }, 129 | // 打开删除窗口 130 | openDelete(obj) { 131 | this.deleteInfo = { 132 | isOpen: true, 133 | form: obj 134 | }; 135 | }, 136 | // 启用禁用ajax 137 | sendDeleteAjax() { 138 | console.log("确认删除ID为" + this.deleteInfo.form.id + "的策略"); 139 | } 140 | }, 141 | created() { 142 | this.getListAjax(); 143 | } 144 | }; 145 | -------------------------------------------------------------------------------- /src/view/group/Department.vue: -------------------------------------------------------------------------------- 1 | 78 | 79 | -------------------------------------------------------------------------------- /src/view/group/Power.vue: -------------------------------------------------------------------------------- 1 | 111 | 112 | -------------------------------------------------------------------------------- /src/view/group/company/Warp.vue: -------------------------------------------------------------------------------- 1 | 20 | 21 | 64 | 65 | -------------------------------------------------------------------------------- /src/view/group/department.js: -------------------------------------------------------------------------------- 1 | export default { 2 | name: "GroupDepartment", 3 | data() { 4 | return { 5 | searchInfo: { 6 | // 存放查询表单及列表数据 7 | list: [], 8 | form: { 9 | name: "" 10 | } 11 | }, 12 | addInfo: { 13 | // 存放新增窗口显示状态及它的表单数据 14 | isOpen: false, 15 | form: { 16 | name: "", 17 | description: "" 18 | } 19 | }, 20 | changeInfo: { 21 | isOpen: false, 22 | form: {} 23 | }, 24 | deleteInfo: { 25 | isOpen: false, 26 | form: {} 27 | }, 28 | rules: { 29 | name: [ 30 | { 31 | required: true, 32 | message: "部门名称不能为空", 33 | trigger: "change" 34 | } 35 | ], 36 | description: [ 37 | { 38 | required: true, 39 | message: "部门职责不能为空", 40 | trigger: "change" 41 | } 42 | ] 43 | } 44 | }; 45 | }, 46 | methods: { 47 | // 查询列表 48 | getListAjax() { 49 | console.log("发送ajax查询数据或分页规则处理"); 50 | // 模拟取得列表 51 | this.searchInfo.list = [ 52 | { 53 | description: "内务1", 54 | id: 43, 55 | name: "内务部", 56 | status: "0" 57 | }, 58 | { 59 | description: "风控", 60 | id: 42, 61 | name: "风控部", 62 | status: "0" 63 | }, 64 | { 65 | description: "超级", 66 | id: 41, 67 | name: "超级管理员", 68 | status: "0" 69 | }, 70 | { 71 | description: "核算支持", 72 | id: 36, 73 | name: "财务部", 74 | status: "0" 75 | }, 76 | { 77 | description: "管理", 78 | id: 35, 79 | name: "总经理", 80 | status: "0" 81 | }, 82 | { 83 | description: "外访支持", 84 | id: 34, 85 | name: "外访部", 86 | status: "0" 87 | }, 88 | { 89 | description: "业务支持", 90 | id: 33, 91 | name: "业务部", 92 | status: "0" 93 | } 94 | ]; 95 | }, 96 | // 新增ajax 97 | sendAddAjax(formName) { 98 | this.$refs[formName].validate(valid => { 99 | // 字段验证是否成功 100 | if (valid) { 101 | console.log("在此发送addInfo.form数据"); 102 | console.log(this.addInfo.form); 103 | } else { 104 | return false; 105 | } 106 | }); 107 | }, 108 | // 重置新值数据-关闭窗口 109 | resetAddInfo() { 110 | // 清空表单 111 | this.resetForm("formByAdd"); 112 | // 关闭窗口 113 | this.addInfo.isOpen = false; 114 | }, 115 | // 打开修改窗口 116 | openChange(obj) { 117 | this.changeInfo.isOpen = true; 118 | setTimeout(() => { 119 | // 去掉表单验证处带颜色的边框先 120 | this.$refs["formByChange"].resetFields(); 121 | // 提取列表中的值 122 | this.changeInfo.form = { 123 | id: obj.id, 124 | name: obj.name, 125 | description: obj.description 126 | }; 127 | }, 100); 128 | }, 129 | // 修改ajax 130 | sendChangeAjax(formName) { 131 | this.$refs[formName].validate(valid => { 132 | // 字段验证是否成功 133 | if (valid) { 134 | console.log("在此发送changeInfo.form数据"); 135 | console.log(this.changeInfo.form); 136 | } else { 137 | return false; 138 | } 139 | }); 140 | }, 141 | // 重置修改窗口 142 | resetChangeInfo() { 143 | // 清空表单 144 | this.$refs["formByChange"].resetFields(); 145 | // 关闭窗口 146 | this.changeInfo.isOpen = false; 147 | }, 148 | // 打开删除窗口 149 | openDelete(obj) { 150 | this.deleteInfo = { 151 | isOpen: true, 152 | form: obj 153 | }; 154 | }, 155 | // 启用禁用ajax 156 | sendDeleteAjax() { 157 | console.log("确认删除ID为" + this.deleteInfo.form.id + "的部门"); 158 | } 159 | }, 160 | mounted() { 161 | // 查询默认列表 162 | this.getListAjax(); 163 | } 164 | }; 165 | -------------------------------------------------------------------------------- /src/view/group/power.js: -------------------------------------------------------------------------------- 1 | export default { 2 | name: "GroupPower", 3 | data() { 4 | return { 5 | powerTree: [ 6 | { 7 | children: [ 8 | { 9 | id: 19, 10 | name: "产品设置", 11 | parentId: "18", 12 | seq: 0, 13 | type: "1" 14 | }, 15 | { 16 | id: 101, 17 | name: "资料配置", 18 | parentId: "18", 19 | seq: 1, 20 | type: "1" 21 | } 22 | ], 23 | id: 18, 24 | name: "产品管理", 25 | seq: 12, 26 | type: "0" 27 | } 28 | ], 29 | searchInfo: { 30 | // 存放查询表单及列表数据 31 | list: [] 32 | }, 33 | typeList: ["一级菜单", "二级菜单", "页面", "动作"], 34 | addInfo: { 35 | // 存放新增窗口显示状态及它的表单数据 36 | isOpen: false, 37 | form: { 38 | name: "", 39 | type: "", 40 | url: "", 41 | projectPath: "", 42 | href: "", 43 | seq: 0, 44 | parentId: 1 // 根据左侧的树状态来决定 45 | } 46 | }, 47 | changeInfo: { 48 | isOpen: false, 49 | form: {} 50 | }, 51 | deleteInfo: { 52 | isOpen: false, 53 | form: {} 54 | }, 55 | rules: { 56 | name: [ 57 | { 58 | required: true, 59 | message: "名称不能为空", 60 | trigger: "change" 61 | } 62 | ], 63 | type: [ 64 | { 65 | type: "number", 66 | required: true, 67 | message: "类型不能为空", 68 | trigger: "change" 69 | } 70 | ] 71 | } 72 | }; 73 | }, 74 | methods: { 75 | // 点击树上节点 76 | handleNodeClick(data) { 77 | console.log("点击的权限:" + data.name + "ID为:" + data.id); 78 | // 根据id查询相应的列表 79 | this.getListAjax(data.id); 80 | }, 81 | // 查询列表 82 | getListAjax(id) { 83 | console.log("发送ajax查询数据或分页规则处理"); 84 | // 模拟取得列表 85 | this.searchInfo.list = [ 86 | { 87 | href: "/product/config", 88 | id: 18, 89 | name: "产品管理", 90 | seq: 12, 91 | type: "0" 92 | } 93 | ]; 94 | }, 95 | // 格式化数字转成字符串名 96 | formatValue(row, column, cellValue) { 97 | return this.typeList[cellValue]; 98 | }, 99 | // 新增ajax 100 | sendAddAjax(formName) { 101 | this.$refs[formName].validate(valid => { 102 | // 字段验证是否成功 103 | if (valid) { 104 | console.log("在此发送addInfo.form数据"); 105 | console.log(this.addInfo.form); 106 | } else { 107 | return false; 108 | } 109 | }); 110 | }, 111 | // 重置新值数据-关闭窗口 112 | resetAddInfo() { 113 | // 清空表单 114 | this.resetForm("formByAdd"); 115 | // 关闭窗口 116 | this.addInfo.isOpen = false; 117 | }, 118 | // 打开修改窗口 119 | openChange(obj) { 120 | this.changeInfo.isOpen = true; 121 | setTimeout(() => { 122 | // 去掉表单验证处带颜色的边框先 123 | this.$refs["formByChange"].resetFields(); 124 | // 提取列表中的值 125 | this.changeInfo.form = { 126 | id: obj.id, 127 | name: obj.name, 128 | type: parseInt(obj.type), 129 | url: obj.url, 130 | projectPath: obj.projectPath, 131 | href: obj.href, 132 | seq: obj.seq 133 | }; 134 | }, 100); 135 | }, 136 | // 修改ajax 137 | sendChangeAjax(formName) { 138 | this.$refs[formName].validate(valid => { 139 | // 字段验证是否成功 140 | if (valid) { 141 | console.log("在此发送changeInfo.form数据"); 142 | console.log(this.changeInfo.form); 143 | } else { 144 | return false; 145 | } 146 | }); 147 | }, 148 | // 重置修改窗口 149 | resetChangeInfo() { 150 | // 清空表单 151 | this.$refs["formByChange"].resetFields(); 152 | // 关闭窗口 153 | this.changeInfo.isOpen = false; 154 | }, 155 | // 打开删除窗口 156 | openDelete(obj) { 157 | this.deleteInfo = { 158 | isOpen: true, 159 | form: obj 160 | }; 161 | }, 162 | // 启用禁用ajax 163 | sendDeleteAjax() { 164 | console.log("确认删除ID为" + this.deleteInfo.form.id + "的权限"); 165 | } 166 | }, 167 | mounted() { 168 | // 初始化查询顶级列表 169 | this.getListAjax(1); 170 | } 171 | }; 172 | -------------------------------------------------------------------------------- /src/view/group/role/Power.vue: -------------------------------------------------------------------------------- 1 | 65 | 66 | 70 | 71 | -------------------------------------------------------------------------------- /src/view/group/role/Role.vue: -------------------------------------------------------------------------------- 1 | 87 | -------------------------------------------------------------------------------- /src/view/group/role/role.js: -------------------------------------------------------------------------------- 1 | export default { 2 | name: "GroupRole", 3 | data() { 4 | return { 5 | searchInfo: { 6 | // 存放查询表单及列表数据 7 | list: [], 8 | form: { 9 | name: "", 10 | type: "" 11 | } 12 | }, 13 | addInfo: { 14 | // 存放新增窗口显示状态及它的表单数据 15 | isOpen: false, 16 | form: { 17 | name: "", 18 | type: "", 19 | hideLevel: 0 20 | } 21 | }, 22 | changeInfo: { 23 | isOpen: false, 24 | form: {} 25 | }, 26 | typeList: ["后台", "省级", "市级", "县级"], 27 | rules: { 28 | name: [ 29 | { 30 | required: true, 31 | message: "角色名称不能为空", 32 | trigger: "change" 33 | } 34 | ], 35 | type: [ 36 | { 37 | type: "number", 38 | required: true, 39 | message: "角色分类不能为空", 40 | trigger: "change" 41 | } 42 | ], 43 | hideLevel: [ 44 | { 45 | type: "number", 46 | required: true, 47 | message: "资料等级不能为空", 48 | trigger: "change" 49 | } 50 | ] 51 | } 52 | }; 53 | }, 54 | methods: { 55 | // 查询列表 56 | getListAjax() { 57 | console.log("发送ajax查询数据或分页规则处理"); 58 | // 模拟取得列表 59 | this.searchInfo.list = [ 60 | { 61 | hideLevel: 0, 62 | id: 25, 63 | name: "副总经理", 64 | status: "0", 65 | type: "1" 66 | }, 67 | { 68 | hideLevel: 0, 69 | id: 24, 70 | name: "市级指派员", 71 | status: "0", 72 | type: "0" 73 | }, 74 | { 75 | hideLevel: 0, 76 | id: 22, 77 | name: "市级管理员", 78 | status: "0", 79 | type: "0" 80 | }, 81 | { 82 | hideLevel: 100, 83 | id: 21, 84 | name: "超级管理员", 85 | status: "0", 86 | type: "0" 87 | }, 88 | { 89 | hideLevel: 0, 90 | id: 20, 91 | name: "省级风控", 92 | roleNo: "0010", 93 | status: "0", 94 | type: "1" 95 | }, 96 | { 97 | hideLevel: 90, 98 | id: 10, 99 | name: "市级财务", 100 | roleNo: "0009", 101 | status: "0", 102 | type: "2" 103 | }, 104 | { 105 | hideLevel: 80, 106 | id: 9, 107 | name: "县级内务", 108 | roleNo: "0008", 109 | status: "0", 110 | type: "3" 111 | }, 112 | { 113 | hideLevel: 99, 114 | id: 8, 115 | name: "总经理", 116 | roleNo: "0007", 117 | status: "0", 118 | type: "1" 119 | }, 120 | { 121 | hideLevel: 98, 122 | id: 7, 123 | name: "市级负责人", 124 | roleNo: "0006", 125 | status: "0", 126 | type: "2" 127 | }, 128 | { 129 | hideLevel: 90, 130 | id: 6, 131 | name: "市级风控", 132 | roleNo: "0005", 133 | status: "0", 134 | type: "2" 135 | } 136 | ]; 137 | }, 138 | // 格式化数字转成字符串名 139 | formatValue(row, column, cellValue) { 140 | return this.typeList[cellValue]; 141 | }, 142 | // 新增ajax 143 | sendAddAjax(formName) { 144 | this.$refs[formName].validate(valid => { 145 | // 字段验证是否成功 146 | if (valid) { 147 | console.log("在此发送addInfo.form数据"); 148 | console.log(this.addInfo.form); 149 | } else { 150 | return false; 151 | } 152 | }); 153 | }, 154 | // 重置新值数据-关闭窗口 155 | resetAddInfo() { 156 | // 清空表单 157 | this.resetForm("formByAdd"); 158 | // 关闭窗口 159 | this.addInfo.isOpen = false; 160 | }, 161 | // 打开修改窗口 162 | openChange(obj) { 163 | this.changeInfo.isOpen = true; 164 | setTimeout(() => { 165 | // 去掉表单验证处带颜色的边框先 166 | this.$refs["formByChange"].resetFields(); 167 | // 提取列表中的值 168 | this.changeInfo.form = { 169 | id: obj.id, 170 | name: obj.name, 171 | type: parseInt(obj.type), 172 | hideLevel: obj.hideLevel 173 | }; 174 | }, 100); 175 | }, 176 | // 修改ajax 177 | sendChangeAjax(formName) { 178 | this.$refs[formName].validate(valid => { 179 | // 字段验证是否成功 180 | if (valid) { 181 | console.log("在此发送changeInfo.form数据"); 182 | console.log(this.changeInfo.form); 183 | } else { 184 | return false; 185 | } 186 | }); 187 | }, 188 | // 重置修改窗口 189 | resetChangeInfo() { 190 | // 清空表单 191 | this.$refs["formByChange"].resetFields(); 192 | // 关闭窗口 193 | this.changeInfo.isOpen = false; 194 | } 195 | }, 196 | mounted() { 197 | // 查询默认列表 198 | this.getListAjax(); 199 | } 200 | }; 201 | -------------------------------------------------------------------------------- /src/view/order/Loan.vue: -------------------------------------------------------------------------------- 1 | 46 | 47 | -------------------------------------------------------------------------------- /src/view/order/intend.js: -------------------------------------------------------------------------------- 1 | export default { 2 | name: "OrderIntend", 3 | data() { 4 | return { 5 | searchInfo: { 6 | // 存放查询表单及列表数据 7 | list: [], 8 | form: { 9 | orderNo: "", 10 | phone: "", 11 | status: "", 12 | beginTime: "", 13 | endTime: "" 14 | } 15 | }, 16 | addInfo: { 17 | // 存放新增窗口显示状态及它的表单数据 18 | isOpen: false, 19 | form: { 20 | name: "", 21 | phone: "", 22 | productCode: "", 23 | loanAmount: "", 24 | loanDay: "", 25 | used: "", 26 | area: "", 27 | income: "", 28 | creditInfo: "", 29 | building: "", 30 | other: "" 31 | } 32 | }, 33 | rules: { 34 | name: [ 35 | { 36 | required: true, 37 | message: "姓名不能为空", 38 | trigger: "change" 39 | } 40 | ], 41 | phone: [ 42 | { 43 | required: true, 44 | message: "手机号不能为空", 45 | trigger: "change" 46 | } 47 | ], 48 | productCode: [ 49 | { 50 | required: true, 51 | message: "请选择产品", 52 | trigger: "change" 53 | } 54 | ], 55 | loanAmount: [ 56 | { 57 | type: "number", 58 | required: true, 59 | message: "请选择申请金额", 60 | trigger: "change" 61 | } 62 | ], 63 | loanDay: [ 64 | { 65 | type: "number", 66 | required: true, 67 | message: "请选择借款期限", 68 | trigger: "change" 69 | } 70 | ], 71 | used: [ 72 | { 73 | required: true, 74 | message: "用途不能为空", 75 | trigger: "change" 76 | } 77 | ], 78 | area: [ 79 | { 80 | required: true, 81 | message: "请选择并确认地址区域", 82 | trigger: "change" 83 | } 84 | ], 85 | income: [ 86 | { 87 | required: true, 88 | message: "收入来源不能为空", 89 | trigger: "change" 90 | } 91 | ], 92 | creditInfo: [ 93 | { 94 | required: true, 95 | message: "征信情况不能为空", 96 | trigger: "change" 97 | } 98 | ], 99 | building: [ 100 | { 101 | required: true, 102 | message: "自建房不能为空", 103 | trigger: "change" 104 | } 105 | ] 106 | }, 107 | findInfo: { 108 | isOpen: false, 109 | form: {} 110 | }, 111 | changeInfo: { 112 | isOpen: false, 113 | form: {} 114 | }, 115 | statusList: ["未分配", "已分配"], 116 | amountList: ["3万", "4万", "5万", "6万", "7万", "8万", "9万", "10万"], 117 | dayList: ["180天"] 118 | }; 119 | }, 120 | methods: { 121 | getListAjax() { 122 | console.log("发送this.searchInfo.form的数据去查询"); 123 | console.log(this.searchInfo.form); 124 | // 模拟ajax取得列表数据 125 | this.searchInfo.list = [ 126 | { 127 | id: 1, 128 | orderNo: 20171223000001, 129 | name: "测试1", 130 | phone: 15012345678, 131 | loanAmount: 40000, 132 | loanDay: 180, 133 | areaName: "浙江省衢州市江山市", 134 | used: "装修房子", 135 | productName: "微农贷", 136 | productCode: "WND", 137 | createTime: "2017-11-11 05:05:12", 138 | status: 0 139 | }, 140 | { 141 | id: 2, 142 | orderNo: 20171223000002, 143 | name: "测试2", 144 | phone: 13098765432, 145 | loanAmount: 50000, 146 | loanDay: 180, 147 | areaName: "浙江省杭州市余杭区", 148 | used: "扩大经营", 149 | productName: "微农贷", 150 | productCode: "WND", 151 | createTime: "2017-11-20 17:07:07", 152 | status: 1 153 | } 154 | ]; 155 | }, 156 | // 格式化数字转成字符串名 157 | formatValue(row, column, cellValue) { 158 | return this.statusList[cellValue]; 159 | }, 160 | // 新增ajax 161 | sendAddAjax(formName) { 162 | this.$refs[formName].validate(valid => { 163 | // 字段验证是否成功 164 | if (valid) { 165 | console.log("在此发送addInfo.form数据"); 166 | console.log(this.addInfo.form); 167 | } else { 168 | return false; 169 | } 170 | }); 171 | }, 172 | // 重置新值数据-关闭窗口 173 | resetAddInfo() { 174 | // 清空表单 175 | this.resetForm("formByAdd"); 176 | // 关闭窗口 177 | this.addInfo.isOpen = false; 178 | }, 179 | // 打开查看窗口 180 | openFind(obj) { 181 | this.findInfo = { 182 | isOpen: true, 183 | form: obj 184 | }; 185 | }, 186 | // 打开修改窗口 187 | openChange(obj) { 188 | this.changeInfo.isOpen = true; 189 | setTimeout(() => { 190 | // 去掉表单验证处带颜色的边框先 191 | this.$refs["formByChange"].resetFields(); 192 | // 提取列表中的值 193 | this.changeInfo.form = JSON.parse(JSON.stringify(obj)); 194 | }, 100); 195 | }, 196 | // 修改ajax 197 | sendChangeAjax(formName) { 198 | this.$refs[formName].validate(valid => { 199 | // 字段验证是否成功 200 | if (valid) { 201 | console.log("在此发送changeInfo.form数据"); 202 | console.log(this.changeInfo.form); 203 | } else { 204 | return false; 205 | } 206 | }); 207 | }, 208 | // 重置修改窗口 209 | resetChangeInfo() { 210 | // 清空表单 211 | this.$refs["formByChange"].resetFields(); 212 | // 关闭窗口 213 | this.changeInfo.isOpen = false; 214 | } 215 | }, 216 | created() { 217 | this.getListAjax(); 218 | } 219 | }; 220 | -------------------------------------------------------------------------------- /src/view/order/loan.js: -------------------------------------------------------------------------------- 1 | export default { 2 | name: "OrderLoan", 3 | data() { 4 | return { 5 | searchTime: "", 6 | searchInfo: { 7 | // 存放查询表单及列表数据 8 | list: [], 9 | form: { 10 | orderNo: "", 11 | phone: "", 12 | status: "", 13 | beginTime: "", 14 | endTime: "" 15 | } 16 | }, 17 | statusList: ["初始化", "审批中", "审批通过", "审批不通过"] 18 | }; 19 | }, 20 | methods: { 21 | // 选中搜索日期时 22 | checkSearchData(minDate, maxDate) { 23 | this.searchInfo.form.beginTime = minDate; 24 | this.searchInfo.form.endTime = maxDate; 25 | }, 26 | getListAjax() { 27 | console.log("发送this.searchInfo.form的数据去查询"); 28 | console.log(this.searchInfo.form); 29 | // 模拟ajax取得列表数据 30 | this.searchInfo.list = [ 31 | { 32 | id: 1, 33 | orderNo: 20171223000001, 34 | name: "测试2", 35 | phone: 15012345678, 36 | loanAmount: 40000, 37 | creditAmount: 0, 38 | status: 0 39 | } 40 | ]; 41 | }, 42 | // 格式化数字转成字符串名 43 | formatValue(row, column, cellValue) { 44 | return this.statusList[cellValue]; 45 | } 46 | }, 47 | created() { 48 | this.getListAjax(); 49 | } 50 | }; 51 | -------------------------------------------------------------------------------- /src/view/product/Config.vue: -------------------------------------------------------------------------------- 1 | 89 | 90 | -------------------------------------------------------------------------------- /src/view/product/config.js: -------------------------------------------------------------------------------- 1 | export default { 2 | name: "ProductConfig", 3 | data() { 4 | return { 5 | searchInfo: { 6 | // 存放查询表单及列表数据 7 | list: [], 8 | form: { 9 | name: "" 10 | } 11 | }, 12 | addInfo: { 13 | // 存放新增窗口显示状态及它的表单数据 14 | isOpen: false, 15 | form: { 16 | name: "", 17 | code: "", 18 | modelId: "" 19 | } 20 | }, 21 | changeInfo: { 22 | isOpen: false, 23 | form: {} 24 | }, 25 | statusInfo: { 26 | isOpen: false, 27 | form: {} 28 | }, 29 | rules: { 30 | name: [ 31 | { 32 | required: true, 33 | message: "名称不能为空", 34 | trigger: "change" 35 | } 36 | ], 37 | code: [ 38 | { 39 | required: true, 40 | message: "产品码不能为空", 41 | trigger: "change" 42 | } 43 | ], 44 | modelId: [ 45 | { 46 | required: true, 47 | message: "模型ID不能为空", 48 | trigger: "change" 49 | } 50 | ] 51 | } 52 | }; 53 | }, 54 | methods: { 55 | // 查询列表 56 | getListAjax() { 57 | console.log("发送ajax查询数据或分页规则处理"); 58 | // 模拟取得列表 59 | this.searchInfo.list = [ 60 | { 61 | code: "WND", 62 | id: 82, 63 | modelId: "6", 64 | name: "微农贷1.0", 65 | status: "0" 66 | } 67 | ]; 68 | }, 69 | // 格式化数字转成字符串名 70 | formatValue(row, column, cellValue) { 71 | return this.fomatLoopValue(cellValue, [ 72 | { 73 | text: "0", 74 | value: "启用" 75 | }, 76 | { 77 | text: "1", 78 | value: "禁用" 79 | } 80 | ]); 81 | }, 82 | // 新增ajax 83 | sendAddAjax(formName) { 84 | this.$refs[formName].validate(valid => { 85 | // 字段验证是否成功 86 | if (valid) { 87 | // 如果分配方式自动的话就清除指派角色 88 | if (this.addInfo.form.type !== "2") { 89 | this.addInfo.form.roleId = ""; 90 | } 91 | console.log("在此发送addInfo.form数据"); 92 | console.log(this.addInfo.form); 93 | } else { 94 | return false; 95 | } 96 | }); 97 | }, 98 | // 重置新值数据-关闭窗口 99 | resetAddInfo() { 100 | // 清空表单 101 | this.resetForm("formByAdd"); 102 | // 关闭窗口 103 | this.addInfo.isOpen = false; 104 | }, 105 | // 打开修改窗口 106 | openChange(obj) { 107 | this.changeInfo.isOpen = true; 108 | setTimeout(() => { 109 | // 去掉表单验证处带颜色的边框先 110 | this.$refs["formByChange"].resetFields(); 111 | // 提取列表中的值 112 | this.changeInfo.form = { 113 | id: obj.id, 114 | name: obj.name, 115 | code: obj.code, 116 | modelId: obj.modelId 117 | }; 118 | }, 100); 119 | }, 120 | // 修改ajax 121 | sendChangeAjax(formName) { 122 | this.$refs[formName].validate(valid => { 123 | // 字段验证是否成功 124 | if (valid) { 125 | // 如果分配方式自动的话就清除指派角色 126 | if (this.changeInfo.form.type !== "2") { 127 | this.changeInfo.form.roleId = ""; 128 | } 129 | console.log("在此发送changeInfo.form数据"); 130 | console.log(this.changeInfo.form); 131 | } else { 132 | return false; 133 | } 134 | }); 135 | }, 136 | // 重置修改窗口 137 | resetChangeInfo() { 138 | // 清空表单 139 | this.$refs["formByChange"].resetFields(); 140 | // 关闭窗口 141 | this.changeInfo.isOpen = false; 142 | }, 143 | // 打开启用禁用窗口 144 | openStatus(obj) { 145 | this.statusInfo = { 146 | isOpen: true, 147 | form: obj 148 | }; 149 | }, 150 | // 启用禁用ajax 151 | sendStatusAjax() { 152 | console.log("确认启用或禁用"); 153 | } 154 | }, 155 | mounted() { 156 | // 查询默认列表 157 | this.getListAjax(); 158 | } 159 | }; 160 | -------------------------------------------------------------------------------- /src/view/sms/Enabled.vue: -------------------------------------------------------------------------------- 1 | 105 | 106 | -------------------------------------------------------------------------------- /src/view/sms/Review.vue: -------------------------------------------------------------------------------- 1 | 100 | 101 | -------------------------------------------------------------------------------- /src/view/sms/enabled.js: -------------------------------------------------------------------------------- 1 | export default { 2 | name: "SmsEnabled", 3 | data() { 4 | return { 5 | searchInfo: { 6 | // 存放查询表单及列表数据 7 | list: [], 8 | form: { 9 | name: "", 10 | status: "", 11 | sceneId: "" 12 | } 13 | }, 14 | changeInfo: { 15 | isOpen: false, 16 | form: {} 17 | }, 18 | statusInfo: { 19 | isOpen: false, 20 | form: {} 21 | }, 22 | sceneList: ["逾期"], 23 | statusList: [ 24 | { 25 | value: 4, 26 | name: "启用" 27 | }, 28 | { 29 | value: 5, 30 | name: "禁用" 31 | } 32 | ], 33 | rules: { 34 | senceExt: [ 35 | { 36 | required: true, 37 | message: "扩展字段不能为空", 38 | trigger: "change" 39 | } 40 | ], 41 | msgSign: [ 42 | { 43 | required: true, 44 | message: "短信签名不能为空", 45 | trigger: "change" 46 | } 47 | ], 48 | templateContent: [ 49 | { 50 | required: true, 51 | message: "短信模板不能为空", 52 | trigger: "change" 53 | } 54 | ], 55 | verifyFailReason: [ 56 | { 57 | required: true, 58 | message: "请输入不过理由", 59 | trigger: "change" 60 | } 61 | ], 62 | taskName: [ 63 | { 64 | required: true, 65 | message: "任务名称不能为空", 66 | trigger: "change" 67 | } 68 | ], 69 | taskCron: [ 70 | { 71 | required: true, 72 | message: "时间表达式不能为空", 73 | trigger: "change" 74 | } 75 | ], 76 | taskUrl: [ 77 | { 78 | required: true, 79 | message: "调用url不能为空", 80 | trigger: "change" 81 | } 82 | ], 83 | taskDesc: [ 84 | { 85 | required: true, 86 | message: "任务描述不能为空", 87 | trigger: "change" 88 | } 89 | ] 90 | } 91 | }; 92 | }, 93 | methods: { 94 | // 查询列表 95 | getListAjax() { 96 | console.log("发送ajax查询数据或分页规则处理"); 97 | // 模拟取得列表 98 | this.searchInfo.list = [ 99 | { 100 | taskId: 179, 101 | page_size: 10, 102 | senceExt: "1,2,3,4,5,6,7,8", 103 | status: 5, 104 | productCode: "WND", 105 | remark: "看看", 106 | sceneId: 1, 107 | taskDesc: "欠款1-8天的逾期短信", 108 | msgSign: "朗格集团草根事业部", 109 | sendType: 1, 110 | platCode: "1", 111 | companyName: "江苏金爱农网络科技有限公司", 112 | taskName: "欠款1-8天的逾期短信", 113 | taskCron: "0 0 23 * * ?", 114 | companyCode: "0003", 115 | id: 64, 116 | platName: "金爱农", 117 | templateContent: 118 | "尊敬地用户${username},您好,借钱不还不太好吧。请于下月${date}前还给我,保底金额${amount} 如有超期利息另算。", 119 | taskUrl: 120 | "http://172.16.34.174:9990/com.cgtz.module.cgjr.task.OutOfRangeRepayTask", 121 | senceName: "逾期", 122 | productName: "微农贷", 123 | targetType: 1, 124 | templateName: "" 125 | } 126 | ]; 127 | }, 128 | formatValue(row, column, cellValue) { 129 | // 根据传入的prop值确认规则列表 130 | if (column.property === "status") { 131 | return this.statusList[cellValue - 1]; 132 | } else if (column.property === "sceneId") { 133 | return this.sceneList[cellValue - 1]; 134 | } 135 | }, 136 | // 打开修改窗口 137 | openChange(obj) { 138 | this.changeInfo.isOpen = true; 139 | setTimeout(() => { 140 | // 去掉表单验证处带颜色的边框先 141 | this.$refs["formByChange"].resetFields(); 142 | // 提取列表中的值 143 | this.changeInfo.form = { 144 | id: obj.id, 145 | companyName: obj.companyName, 146 | productName: obj.productName, 147 | sceneId: obj.sceneId, 148 | senceExt: obj.senceExt, 149 | msgSign: obj.msgSign, 150 | templateContent: obj.templateContent, 151 | taskName: obj.taskName, 152 | taskCron: obj.taskCron, 153 | taskUrl: obj.taskUrl, 154 | taskDesc: obj.taskDesc 155 | }; 156 | }, 100); 157 | }, 158 | // 修改ajax 159 | sendChangeAjax(formName) { 160 | this.$refs[formName].validate(valid => { 161 | // 字段验证是否成功 162 | if (valid) { 163 | console.log("在此发送changeInfo.form数据"); 164 | console.log(this.changeInfo.form); 165 | } else { 166 | return false; 167 | } 168 | }); 169 | }, 170 | // 重置修改窗口 171 | resetChangeInfo() { 172 | // 清空表单 173 | this.$refs["formByChange"].resetFields(); 174 | // 关闭窗口 175 | this.changeInfo.isOpen = false; 176 | }, 177 | // 打开启用禁用窗口 178 | openStatus(obj) { 179 | this.statusInfo = { 180 | isOpen: true, 181 | form: obj 182 | }; 183 | }, 184 | // 启用禁用ajax 185 | sendStatusAjax() { 186 | console.log("确认启用或禁用"); 187 | } 188 | }, 189 | mounted() { 190 | // 查询默认列表 191 | this.getListAjax(); 192 | } 193 | }; 194 | -------------------------------------------------------------------------------- /src/view/sms/review.js: -------------------------------------------------------------------------------- 1 | export default { 2 | name: "SmsReview", 3 | data() { 4 | return { 5 | searchInfo: { 6 | // 存放查询表单及列表数据 7 | list: [], 8 | form: { 9 | name: "", 10 | status: "", 11 | sceneId: "" 12 | } 13 | }, 14 | sceneList: ["逾期"], 15 | statusList: ["审核中"], 16 | failInfo: { 17 | isOpen: false, 18 | form: {} 19 | }, 20 | passInfo: { 21 | isOpen: false, 22 | form: {} 23 | }, 24 | rules: { 25 | senceExt: [ 26 | { 27 | required: true, 28 | message: "扩展字段不能为空", 29 | trigger: "change" 30 | } 31 | ], 32 | msgSign: [ 33 | { 34 | required: true, 35 | message: "短信签名不能为空", 36 | trigger: "change" 37 | } 38 | ], 39 | templateContent: [ 40 | { 41 | required: true, 42 | message: "短信模板不能为空", 43 | trigger: "change" 44 | } 45 | ], 46 | verifyFailReason: [ 47 | { 48 | required: true, 49 | message: "请输入不过理由", 50 | trigger: "change" 51 | } 52 | ], 53 | taskName: [ 54 | { 55 | required: true, 56 | message: "任务名称不能为空", 57 | trigger: "change" 58 | } 59 | ], 60 | taskCron: [ 61 | { 62 | required: true, 63 | message: "时间表达式不能为空", 64 | trigger: "change" 65 | } 66 | ], 67 | taskUrl: [ 68 | { 69 | required: true, 70 | message: "调用url不能为空", 71 | trigger: "change" 72 | } 73 | ], 74 | taskDesc: [ 75 | { 76 | required: true, 77 | message: "任务描述不能为空", 78 | trigger: "change" 79 | } 80 | ] 81 | } 82 | }; 83 | }, 84 | methods: { 85 | // 查询列表 86 | getListAjax() { 87 | console.log("发送ajax查询数据或分页规则处理"); 88 | // 模拟取得列表 89 | this.searchInfo.list = [ 90 | { 91 | senceExt: "4", 92 | status: 1, 93 | productCode: "WND", 94 | remark: "11", 95 | sceneId: 1, 96 | msgSign: "【农游】", 97 | sendType: 1, 98 | platCode: "1", 99 | companyName: "浙江金爱农龙游分公司", 100 | companyCode: "000100010002", 101 | id: 70, 102 | platName: "金爱农", 103 | templateContent: 104 | "尊敬的${username},你有一笔应还金额¥${amount}元的借 款在${date}到期,请你马上还款,逾 期超过30天,我们将通知你的紧急联系人和相关亲友。", 105 | senceName: "逾期", 106 | productName: "微农贷", 107 | targetType: 1, 108 | templateName: "" 109 | } 110 | ]; 111 | }, 112 | // 格式化数字转成字符串名 113 | formatValue(row, column, cellValue) { 114 | // 根据传入的prop值确认规则列表 115 | if (column.property === "status") { 116 | return this.statusList[cellValue - 1]; 117 | } else if (column.property === "sceneId") { 118 | return this.sceneList[cellValue - 1]; 119 | } 120 | }, 121 | // 打开不通过窗口 122 | openFail(obj) { 123 | this.failInfo = { 124 | isOpen: true, 125 | form: { 126 | id: obj.id, 127 | verifyFailReason: "" 128 | } 129 | }; 130 | }, 131 | // 发送不通过理由 132 | sendFailAjax(formName) { 133 | this.$refs[formName].validate(valid => { 134 | // 字段验证是否成功 135 | if (valid) { 136 | console.log("在此发送failInfo.form数据"); 137 | console.log(this.failInfo.form); 138 | } else { 139 | return false; 140 | } 141 | }); 142 | }, 143 | // 重置不过通窗口 144 | resetFailInfo() { 145 | // 清空表单 146 | this.$refs["formByFail"].resetFields(); 147 | // 关闭窗口 148 | this.failInfo.isOpen = false; 149 | }, 150 | // 打开通过窗口 151 | openPass(obj) { 152 | this.passInfo.isOpen = true; 153 | setTimeout(() => { 154 | // 去掉表单验证处带颜色的边框先 155 | this.$refs["formByPass"].resetFields(); 156 | // 提取列表中的值 157 | this.passInfo.form = { 158 | id: obj.id, 159 | companyName: obj.companyName, 160 | productName: obj.productName, 161 | sceneId: obj.sceneId, 162 | senceExt: obj.senceExt, 163 | msgSign: obj.msgSign, 164 | templateContent: obj.templateContent, 165 | taskName: "", 166 | taskCron: "", 167 | taskUrl: "", 168 | taskDesc: "" 169 | }; 170 | }, 100); 171 | }, 172 | // 通过ajax 173 | sendPassAjax(formName) { 174 | this.$refs[formName].validate(valid => { 175 | // 字段验证是否成功 176 | if (valid) { 177 | console.log("在此发送passInfo.form数据"); 178 | console.log(this.passInfo.form); 179 | } else { 180 | return false; 181 | } 182 | }); 183 | }, 184 | // 重置通过窗口 185 | resetPassInfo() { 186 | // 清空表单 187 | this.$refs["formByPass"].resetFields(); 188 | // 关闭窗口 189 | this.passInfo.isOpen = false; 190 | } 191 | }, 192 | mounted() { 193 | // 查询默认列表 194 | this.getListAjax(); 195 | } 196 | }; 197 | -------------------------------------------------------------------------------- /src/view/user/Find.vue: -------------------------------------------------------------------------------- 1 | 62 | 63 | -------------------------------------------------------------------------------- /src/view/user/Password.vue: -------------------------------------------------------------------------------- 1 | 27 | 28 | -------------------------------------------------------------------------------- /src/view/work/Assignment.vue: -------------------------------------------------------------------------------- 1 | 113 | 114 | -------------------------------------------------------------------------------- /src/view/work/Process.vue: -------------------------------------------------------------------------------- 1 | 63 | 64 | -------------------------------------------------------------------------------- /src/view/work/assignment.js: -------------------------------------------------------------------------------- 1 | export default { 2 | name: "WorkAssignment", 3 | data() { 4 | return { 5 | searchInfo: { 6 | // 存放查询表单及列表数据 7 | list: [], 8 | form: { 9 | productCode: "", 10 | companyCode: "", 11 | processId: "" 12 | } 13 | }, 14 | addInfo: { 15 | // 存放新增窗口显示状态及它的表单数据 16 | isOpen: false, 17 | form: { 18 | productCode: "", 19 | companyCode: "", 20 | processId: "" 21 | } 22 | }, 23 | changeInfo: { 24 | isOpen: false, 25 | form: {} 26 | }, 27 | statusInfo: { 28 | isOpen: false, 29 | form: {} 30 | }, 31 | rules: { 32 | productCode: [ 33 | { 34 | required: true, 35 | message: "请选择产品", 36 | trigger: "change" 37 | } 38 | ], 39 | companyCode: [ 40 | { 41 | required: true, 42 | message: "请选择公司", 43 | trigger: "change" 44 | } 45 | ], 46 | processId: [ 47 | { 48 | required: true, 49 | message: "请选择流程", 50 | trigger: "change" 51 | } 52 | ] 53 | } 54 | }; 55 | }, 56 | methods: { 57 | // 查询列表 58 | getListAjax() { 59 | console.log("发送ajax查询数据或分页规则处理"); 60 | // 模拟取得列表 61 | this.searchInfo.list = [ 62 | { 63 | productName: "微农贷", 64 | productCode: "WND", 65 | companyName: "杭州金爱农总公司", 66 | companyCode: "0001", 67 | status: 0, 68 | isAutoCreated: 1, 69 | processId: "1", 70 | processName: "20171031-浙江", 71 | definedName: "orderApply:1:1" 72 | } 73 | ]; 74 | }, 75 | // 格式化数字转成字符串名 76 | formatValue(row, column, cellValue) { 77 | // 根据传入的prop值确认规则列表 78 | if (column.property === "status") { 79 | return this.fomatLoopValue(cellValue, [ 80 | { 81 | text: 0, 82 | value: "禁用" 83 | }, 84 | { 85 | text: 1, 86 | value: "启用" 87 | } 88 | ]); 89 | } else if (column.property === "isAutoCreated") { 90 | return this.fomatLoopValue(cellValue, [ 91 | { 92 | text: 0, 93 | value: "未分配" 94 | }, 95 | { 96 | text: 1, 97 | value: "已分配" 98 | } 99 | ]); 100 | } 101 | }, 102 | // 新增ajax 103 | sendAddAjax(formName) { 104 | this.$refs[formName].validate(valid => { 105 | // 字段验证是否成功 106 | if (valid) { 107 | console.log("在此发送addInfo.form数据"); 108 | console.log(this.addInfo.form); 109 | } else { 110 | return false; 111 | } 112 | }); 113 | }, 114 | // 重置新值数据-关闭窗口 115 | resetAddInfo() { 116 | // 清空表单 117 | this.resetForm("formByAdd"); 118 | // 关闭窗口 119 | this.addInfo.isOpen = false; 120 | }, 121 | // 打开修改窗口 122 | openChange(obj) { 123 | this.changeInfo.isOpen = true; 124 | setTimeout(() => { 125 | // 去掉表单验证处带颜色的边框先 126 | this.$refs["formByChange"].resetFields(); 127 | // 提取列表中的值 128 | this.changeInfo.form = { 129 | id: obj.id, 130 | productCode: obj.productCode, 131 | companyCode: obj.companyCode, 132 | processId: obj.processId 133 | }; 134 | }, 100); 135 | }, 136 | // 修改ajax 137 | sendChangeAjax(formName) { 138 | this.$refs[formName].validate(valid => { 139 | // 字段验证是否成功 140 | if (valid) { 141 | console.log("在此发送changeInfo.form数据"); 142 | console.log(this.changeInfo.form); 143 | } else { 144 | return false; 145 | } 146 | }); 147 | }, 148 | // 重置修改窗口 149 | resetChangeInfo() { 150 | // 清空表单 151 | this.$refs["formByChange"].resetFields(); 152 | // 关闭窗口 153 | this.changeInfo.isOpen = false; 154 | }, 155 | // 打开启用禁用窗口 156 | openStatus(obj) { 157 | this.statusInfo = { 158 | isOpen: true, 159 | form: obj 160 | }; 161 | }, 162 | // 启用禁用ajax 163 | sendStatusAjax() { 164 | console.log("确认启用或禁用"); 165 | } 166 | }, 167 | mounted() { 168 | // 查询默认列表 169 | this.getListAjax(); 170 | } 171 | }; 172 | -------------------------------------------------------------------------------- /src/view/work/process.js: -------------------------------------------------------------------------------- 1 | export default { 2 | name: "WorkProcess", 3 | data() { 4 | return { 5 | searchInfo: { 6 | // 存放查询表单及列表数据 7 | list: [], 8 | form: { 9 | name: "" 10 | } 11 | }, 12 | addInfo: { 13 | // 存放新增窗口显示状态及它的表单数据 14 | isOpen: false, 15 | form: { 16 | name: "", 17 | file: "", 18 | desc: "" 19 | } 20 | }, 21 | rules: { 22 | name: [ 23 | { 24 | required: true, 25 | message: "请输入流程名称", 26 | trigger: "blur" 27 | }, 28 | { 29 | min: 2, 30 | max: 20, 31 | message: "长度为2-20个字符", 32 | trigger: "blur" 33 | } 34 | ], 35 | desc: [ 36 | { 37 | required: true, 38 | message: "流程描述不能为空", 39 | trigger: "blur" 40 | }, 41 | { 42 | min: 5, 43 | max: 100, 44 | message: "长度为5-100个字符", 45 | trigger: "blur" 46 | } 47 | ], 48 | file: [ 49 | { 50 | required: true, 51 | message: "文件不能为空" 52 | } 53 | ] 54 | } 55 | }; 56 | }, 57 | methods: { 58 | // 重置新值数据-关闭窗口 59 | resetAddInfo() { 60 | // 清空表单 61 | this.resetForm("formByAdd"); 62 | // 清除上传文件列表 63 | this.$refs.addUpload.clearFiles(); 64 | // 关闭窗口 65 | this.addInfo.isOpen = false; 66 | }, 67 | // 查询列表 68 | getListAjax() { 69 | console.log("发送ajax查询数据或分页规则处理"); 70 | // 模拟取得列表 71 | this.searchInfo.list = [ 72 | { 73 | addDate: "2016-05-02", 74 | processName: "浙江申请减免", 75 | definedName: "orderApply:1:1", 76 | litpic: 77 | "http://www.jingjingke.com/uploads/allimg/171026/1-1G026135P50-L.gif" 78 | } 79 | ]; 80 | }, 81 | // 新增ajax 82 | sendAddAjax(formName) { 83 | this.$refs[formName].validate(valid => { 84 | // 字段验证是否成功 85 | if (valid) { 86 | console.log("在此发送addInfo.form数据"); 87 | console.log(this.addInfo.form); 88 | } else { 89 | return false; 90 | } 91 | }); 92 | }, 93 | // 新增窗口--上传文件 94 | changeAddFile(file) { 95 | // 清空原有文件列表 96 | this.$refs.addUpload.clearFiles(); 97 | // 赋值 98 | this.$refs.addUpload.uploadFiles[0] = file; 99 | this.addInfo.form.file = JSON.stringify(file); 100 | }, 101 | // 新增窗口--删除上传文件 102 | removeAddFile(file) { 103 | // 清空对应数据 104 | this.$refs.addUpload.uploadFiles = []; 105 | this.addInfo.form.file = ""; 106 | } 107 | }, 108 | mounted() { 109 | // 查询默认列表 110 | this.getListAjax(); 111 | } 112 | }; 113 | -------------------------------------------------------------------------------- /static/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jingjingke/vue-admin/f331518063c3988c43dd19f55a6c07a3052ff4a5/static/.gitkeep --------------------------------------------------------------------------------