├── .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 | 
16 | 
17 | 
18 | 
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 |
2 |
3 |
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 |
2 |
3 |
4 | {{ startName }}
5 |
6 | {{ endName }}
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/src/components/common/ContentWarp.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
12 |
13 |
--------------------------------------------------------------------------------
/src/components/common/Header.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | admin-lixi
6 |
7 |
8 | 重置密码
9 | 退出
10 |
11 |
12 |
13 |
14 |
15 |
36 |
37 |
--------------------------------------------------------------------------------
/src/components/common/SearchWarp.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
12 |
13 |
--------------------------------------------------------------------------------
/src/components/common/SideBar.vue:
--------------------------------------------------------------------------------
1 |
2 |
23 |
24 |
25 |
70 |
71 |
--------------------------------------------------------------------------------
/src/components/form/SelectCompany.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | {{ formatOptionName(option.type, option.name) }}
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/src/components/form/SelectDepartment.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/src/components/form/SelectProcess.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/src/components/form/SelectProduct.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/src/components/form/SelectRole.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/src/components/home.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
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 |
2 |
29 |
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 |
2 |
3 |
4 |
5 | 下面是
{{ imgName }} 的二维码
6 |
![]()
7 |
8 |
12 |
13 |
14 |
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 |
2 |
3 |
您的登录信息已过期,需要重新登录
4 |
5 | {{time}} 秒后将为您跳转至登录页
6 |
7 |
8 |
9 |
10 |
41 |
42 |
--------------------------------------------------------------------------------
/src/view/Login.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
{{webInfo.name}}
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 | 点击登录
13 |
14 |
© {{year}} {{webInfo.copy}}
15 |
16 |
17 |
18 |
19 |
56 |
57 |
--------------------------------------------------------------------------------
/src/view/NotFound.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
您要找的页面正在躲猫猫···
4 |
是不是地址输错了?或者页面还在开发中?
5 |
6 | {{time}} 秒后将为您跳转至登录页
7 |
8 |
9 |
10 |
11 |
42 |
43 |
--------------------------------------------------------------------------------
/src/view/collection/strategy/Edit.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {{ title }}
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 | 新增
19 |
20 |
21 |
22 |
23 |
24 |
25 | 修改
26 |
27 | 删除
28 |
29 |
30 |
31 |
32 |
33 | 保存
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
55 |
56 |
57 |
58 |
59 |
--------------------------------------------------------------------------------
/src/view/collection/strategy/List.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 | 查询
14 | 新增
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
25 |
26 |
27 | 修改
29 | 删除
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 | 确定删除 {{ deleteInfo.form.name }} 吗?
39 |
40 |
44 |
45 |
46 |
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 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 | 查询
11 | 新增
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 | 修改
23 |
24 | 删除
25 |
26 |
27 |
28 |
29 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
64 |
65 |
66 |
67 |
68 |
69 | 确定删除 {{ deleteInfo.form.name }} 吗?
70 |
71 |
75 |
76 |
77 |
78 |
79 |
--------------------------------------------------------------------------------
/src/view/group/Power.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 | 管理顶级权限
10 |
11 |
12 |
14 |
15 |
16 |
17 | 顶级权限
18 | 新 增
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 | 修改
30 |
31 | 删除
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
97 |
98 |
99 |
100 |
101 |
102 | 确定删除 {{ deleteInfo.form.name }} 吗?
103 |
104 |
108 |
109 |
110 |
111 |
112 |
--------------------------------------------------------------------------------
/src/view/group/company/Warp.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 | 一键生成推广二维码
10 |
11 |
12 |
14 |
15 |
16 |
17 |
18 |
19 |
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 |
2 |
3 |
4 | 分配权限
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 | 一级菜单
13 |
14 | |
15 |
16 | 二级菜单
17 |
18 | |
19 |
20 | 页面或动作
21 |
22 | |
23 |
24 |
25 |
26 |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 |
34 |
35 |
36 |
37 |
38 |
39 | |
40 | {{ list.name }} |
41 |
42 |
43 |
44 | |
45 | {{ item.name }} |
46 |
47 |
48 |
49 | {{ sub.name }}
50 |
51 |
52 | |
53 |
54 |
55 |
56 |
57 |
58 |
59 | 保 存
60 | 取 消
61 |
62 |
63 |
64 |
65 |
66 |
70 |
71 |
--------------------------------------------------------------------------------
/src/view/group/role/Role.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 | 查询
17 | 新增
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 | 修改
30 |
31 | 分配权限
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
84 |
85 |
86 |
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 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
22 |
23 |
24 | 查询
25 | 导出
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 | 查看
40 |
41 |
42 |
43 |
44 |
45 |
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 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 | 查询
11 | 新增
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 | 修改
24 |
25 | {{ scope.row.status === 0 ? "启用" : "禁用" }}
27 |
28 |
29 |
30 |
31 |
32 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
73 |
74 |
75 |
76 |
78 |
79 | 确定{{ statusInfo.form.status === "1" ? "启用" : "禁用"
80 | }} {{ statusInfo.form.name }} 吗?
81 |
82 |
86 |
87 |
88 |
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 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 | 查询
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 | 修改
39 |
40 | {{ scope.row.status === 5 ? "启用" : "禁用" }}
42 |
43 |
44 |
45 |
46 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
89 |
90 |
91 |
92 |
94 |
95 | 确定{{ statusInfo.form.status === 5 ? "启用" : "禁用"
96 | }} {{ statusInfo.form.taskName }} 吗?
97 |
98 |
102 |
103 |
104 |
105 |
106 |
--------------------------------------------------------------------------------
/src/view/sms/Review.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 | 查询
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 | 通过
36 | 不通过
37 |
38 |
39 |
40 |
41 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
97 |
98 |
99 |
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 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 | 查询
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 | 查看
37 |
38 |
39 |
40 |
41 |
45 |
46 |
47 |
48 |
49 | {{ findInfo.form.name }}
50 | {{ findInfo.form.phone }}
51 | {{ findInfo.form.code }}
52 | {{ findInfo.form.valid }}
53 | {{ findInfo.form.area }}
54 | {{ findInfo.form.status }}
55 |
56 |
59 |
60 |
61 |
62 |
63 |
--------------------------------------------------------------------------------
/src/view/user/Password.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | 用户管理
5 | 重置密码
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 | 点击确认
22 | 重置
23 |
24 |
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/src/view/work/Assignment.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 | 查询
14 | 新增
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 | 修改
30 |
31 | {{ scope.row.status === 0 ? "启用" : "禁用" }}
33 |
34 |
35 |
36 |
37 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
96 |
97 |
98 |
99 |
101 |
102 | 确定{{ statusInfo.form.status === 0 ? "启用" : "禁用"
103 | }} {{ statusInfo.form.companyName }} -
104 | {{ statusInfo.form.productName }} - {{ statusInfo.form.processName }} 吗?
105 |
106 |
110 |
111 |
112 |
113 |
114 |
--------------------------------------------------------------------------------
/src/view/work/Process.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 | 查询
11 | 新增
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 | 查看流程图
24 |
25 |
26 |
27 |
28 |
29 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
43 | 点击上传
44 |
45 | 请选择需要上传的*.zip文件!
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
60 |
61 |
62 |
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
--------------------------------------------------------------------------------