Ver Fonte

首次保存

戴艳蓉 há 3 anos atrás
commit
6fea4e8e83
100 ficheiros alterados com 3387 adições e 0 exclusões
  1. 14 0
      .editorconfig
  2. 5 0
      .env.development
  3. 6 0
      .env.production
  4. 8 0
      .env.staging
  5. 4 0
      .eslintignore
  6. 198 0
      .eslintrc.js
  7. 23 0
      .gitignore
  8. 5 0
      .travis.yml
  9. 22 0
      README.md
  10. 14 0
      babel.config.js
  11. 35 0
      build/index.js
  12. 64 0
      dist/index.html
  13. 1 0
      dist/static/axios@0.21.0.min.js
  14. 0 0
      dist/static/dingtalk.open.2.10.3.js
  15. BIN
      dist/static/fonts/element-icons.535877f5.woff
  16. BIN
      dist/static/fonts/element-icons.732389de.ttf
  17. BIN
      dist/static/img/401.089007e7.gif
  18. BIN
      dist/static/img/404.a57b6f31.png
  19. BIN
      dist/static/img/404_cloud.0f4bc32b.png
  20. BIN
      dist/static/img/avatar.ecba1844.gif
  21. BIN
      dist/static/img/developing.750f7ed1.jpg
  22. BIN
      dist/static/img/loading.190c78aa.gif
  23. BIN
      dist/static/img/loginbg.51c61d67.png
  24. BIN
      dist/static/img/loginlan.1ecbd4ab.png
  25. BIN
      dist/static/img/logo.66bee2dc.gif
  26. BIN
      dist/static/img/welcome.6cf0f25b.gif
  27. 9 0
      dist/static/js/0.js
  28. 9 0
      dist/static/js/1.js
  29. 9 0
      dist/static/js/app.js
  30. 20 0
      dist/static/js/chunk-elementUI.js
  31. 58 0
      dist/static/js/chunk-libs.js
  32. 223 0
      dist/static/js/runtime.js
  33. BIN
      dist/static/loading.gif
  34. 0 0
      dist/static/reset.min.css
  35. 5 0
      dist/static/vue-router.min.js
  36. 5 0
      dist/static/vue.min.js
  37. 24 0
      jest.config.js
  38. 9 0
      jsconfig.json
  39. 107 0
      package.json
  40. 9 0
      plopfile.js
  41. 5 0
      postcss.config.js
  42. 64 0
      public/index.html
  43. 1 0
      public/static/axios@0.21.0.min.js
  44. 0 0
      public/static/dingtalk.open.2.10.3.js
  45. BIN
      public/static/loading.gif
  46. 0 0
      public/static/reset.min.css
  47. 5 0
      public/static/vue-router.min.js
  48. 5 0
      public/static/vue.min.js
  49. 93 0
      scripts/generateComponent.js
  50. 123 0
      scripts/generatePage.js
  51. 93 0
      scripts/generateView.js
  52. 275 0
      scripts/page/addEditPage.js
  53. 301 0
      scripts/page/indexPage.js
  54. 23 0
      scripts/page/modelPage.js
  55. 18 0
      scripts/page/servicePage.js
  56. 27 0
      scripts/template.js
  57. 83 0
      src/App.vue
  58. 101 0
      src/apis/axios.js
  59. 26 0
      src/apis/service/InvoiceSales/capitalClaim/index.js
  60. 26 0
      src/apis/service/InvoiceSales/capitalPool/index.js
  61. 10 0
      src/apis/service/InvoiceSales/clients/index.js
  62. 38 0
      src/apis/service/InvoiceSales/invoiceApply/index.js
  63. 31 0
      src/apis/service/InvoiceSales/invoicePool/index.js
  64. 42 0
      src/apis/service/InvoiceSales/orderBatchBilling/index.js
  65. 18 0
      src/apis/service/InvoiceSales/refund/index.js
  66. 20 0
      src/apis/service/InvoiceSales/relation/index.js
  67. 12 0
      src/apis/service/InvoiceSales/relationQuery/index.js
  68. 18 0
      src/apis/service/InvoiceSales/returnTicket/index.js
  69. 10 0
      src/apis/service/InvoiceSales/sheetOrderPool/index.js
  70. 23 0
      src/apis/service/interest/account/index.js
  71. 13 0
      src/apis/service/interest/action/index.js
  72. 24 0
      src/apis/service/interest/dataShare/index.js
  73. 20 0
      src/apis/service/interest/group/index.js
  74. 22 0
      src/apis/service/interest/role/index.js
  75. 15 0
      src/apis/service/parameter/finance/index.js
  76. 64 0
      src/apis/service/purchase/orderRecord/index.js
  77. 15 0
      src/apis/service/purchase/porder/index.js
  78. 10 0
      src/apis/service/purchase/supplierPay/index.js
  79. 18 0
      src/apis/service/report/index.js
  80. 42 0
      src/apis/service/search/standBook/index.js
  81. 101 0
      src/apis/service/search/table/axios.js
  82. 7 0
      src/apis/service/search/table/index.js
  83. 22 0
      src/apis/service/system/menu/index.js
  84. 7 0
      src/apis/service/system/oplog/index.js
  85. 11 0
      src/apis/service/system/parameter/index.js
  86. 15 0
      src/apis/service/system/talent/index.js
  87. 7 0
      src/apis/service/system/updates/index.js
  88. 22 0
      src/apis/service/user/index.js
  89. 10 0
      src/apis/url-config.js
  90. 82 0
      src/apis/user/axios.js
  91. 38 0
      src/apis/user/index.js
  92. BIN
      src/assets/401_images/401.gif
  93. BIN
      src/assets/404_images/404.png
  94. BIN
      src/assets/404_images/404_cloud.png
  95. 49 0
      src/assets/css/btn.scss
  96. 220 0
      src/assets/css/common.scss
  97. 38 0
      src/assets/css/index.scss
  98. 71 0
      src/assets/css/mixin.scss
  99. 24 0
      src/assets/css/scrollbar.less
  100. 43 0
      src/assets/css/scss/base.scss

+ 14 - 0
.editorconfig

@@ -0,0 +1,14 @@
+# https://editorconfig.org
+root = true
+
+[*]
+charset = utf-8
+indent_style = space
+indent_size = 2
+end_of_line = lf
+insert_final_newline = true
+trim_trailing_whitespace = true
+
+[*.md]
+insert_final_newline = false
+trim_trailing_whitespace = false

+ 5 - 0
.env.development

@@ -0,0 +1,5 @@
+# just a flag
+ENV = 'development'
+
+# base api
+VUE_APP_BASE_API = '/dev-api'

+ 6 - 0
.env.production

@@ -0,0 +1,6 @@
+# just a flag
+ENV = 'production'
+
+# base api
+VUE_APP_BASE_API = '/prod-api'
+

+ 8 - 0
.env.staging

@@ -0,0 +1,8 @@
+NODE_ENV = production
+
+# just a flag
+ENV = 'staging'
+
+# base api
+VUE_APP_BASE_API = '/stage-api'
+

+ 4 - 0
.eslintignore

@@ -0,0 +1,4 @@
+build/*.js
+src/assets
+public
+dist

+ 198 - 0
.eslintrc.js

@@ -0,0 +1,198 @@
+module.exports = {
+  root: true,
+  parserOptions: {
+    parser: 'babel-eslint',
+    sourceType: 'module'
+  },
+  env: {
+    browser: true,
+    node: true,
+    es6: true,
+  },
+  extends: ['plugin:vue/recommended', 'eslint:recommended'],
+
+  // add your custom rules here
+  //it is base on https://github.com/vuejs/eslint-config-vue
+  rules: {
+    "vue/max-attributes-per-line": [2, {
+      "singleline": 10,
+      "multiline": {
+        "max": 1,
+        "allowFirstLine": false
+      }
+    }],
+    "vue/singleline-html-element-content-newline": "off",
+    "vue/multiline-html-element-content-newline":"off",
+    "vue/name-property-casing": ["error", "PascalCase"],
+    "vue/no-v-html": "off",
+    'accessor-pairs': 2,
+    'arrow-spacing': [2, {
+      'before': true,
+      'after': true
+    }],
+    'block-spacing': [2, 'always'],
+    'brace-style': [2, '1tbs', {
+      'allowSingleLine': true
+    }],
+    'camelcase': [0, {
+      'properties': 'always'
+    }],
+    'comma-dangle': [2, 'never'],
+    'comma-spacing': [2, {
+      'before': false,
+      'after': true
+    }],
+    'comma-style': [2, 'last'],
+    'constructor-super': 2,
+    'curly': [2, 'multi-line'],
+    'dot-location': [2, 'property'],
+    'eol-last': 2,
+    'eqeqeq': ["error", "always", {"null": "ignore"}],
+    'generator-star-spacing': [2, {
+      'before': true,
+      'after': true
+    }],
+    'handle-callback-err': [2, '^(err|error)$'],
+    'indent': [2, 2, {
+      'SwitchCase': 1
+    }],
+    'jsx-quotes': [2, 'prefer-single'],
+    'key-spacing': [2, {
+      'beforeColon': false,
+      'afterColon': true
+    }],
+    'keyword-spacing': [2, {
+      'before': true,
+      'after': true
+    }],
+    'new-cap': [2, {
+      'newIsCap': true,
+      'capIsNew': false
+    }],
+    'new-parens': 2,
+    'no-array-constructor': 2,
+    'no-caller': 2,
+    'no-console': 'off',
+    'no-class-assign': 2,
+    'no-cond-assign': 2,
+    'no-const-assign': 2,
+    'no-control-regex': 0,
+    'no-delete-var': 2,
+    'no-dupe-args': 2,
+    'no-dupe-class-members': 2,
+    'no-dupe-keys': 2,
+    'no-duplicate-case': 2,
+    'no-empty-character-class': 2,
+    'no-empty-pattern': 2,
+    'no-eval': 2,
+    'no-ex-assign': 2,
+    'no-extend-native': 2,
+    'no-extra-bind': 2,
+    'no-extra-boolean-cast': 2,
+    'no-extra-parens': [2, 'functions'],
+    'no-fallthrough': 2,
+    'no-floating-decimal': 2,
+    'no-func-assign': 2,
+    'no-implied-eval': 2,
+    'no-inner-declarations': [2, 'functions'],
+    'no-invalid-regexp': 2,
+    'no-irregular-whitespace': 2,
+    'no-iterator': 2,
+    'no-label-var': 2,
+    'no-labels': [2, {
+      'allowLoop': false,
+      'allowSwitch': false
+    }],
+    'no-lone-blocks': 2,
+    'no-mixed-spaces-and-tabs': 2,
+    'no-multi-spaces': 2,
+    'no-multi-str': 2,
+    'no-multiple-empty-lines': [2, {
+      'max': 1
+    }],
+    'no-native-reassign': 2,
+    'no-negated-in-lhs': 2,
+    'no-new-object': 2,
+    'no-new-require': 2,
+    'no-new-symbol': 2,
+    'no-new-wrappers': 2,
+    'no-obj-calls': 2,
+    'no-octal': 2,
+    'no-octal-escape': 2,
+    'no-path-concat': 2,
+    'no-proto': 2,
+    'no-redeclare': 2,
+    'no-regex-spaces': 2,
+    'no-return-assign': [2, 'except-parens'],
+    'no-self-assign': 2,
+    'no-self-compare': 2,
+    'no-sequences': 2,
+    'no-shadow-restricted-names': 2,
+    'no-spaced-func': 2,
+    'no-sparse-arrays': 2,
+    'no-this-before-super': 2,
+    'no-throw-literal': 2,
+    'no-trailing-spaces': 2,
+    'no-undef': 2,
+    'no-undef-init': 2,
+    'no-unexpected-multiline': 2,
+    'no-unmodified-loop-condition': 2,
+    'no-unneeded-ternary': [2, {
+      'defaultAssignment': false
+    }],
+    'no-unreachable': 2,
+    'no-unsafe-finally': 2,
+    'no-unused-vars': [2, {
+      'vars': 'all',
+      'args': 'none'
+    }],
+    'no-useless-call': 2,
+    'no-useless-computed-key': 2,
+    'no-useless-constructor': 2,
+    'no-useless-escape': 0,
+    'no-whitespace-before-property': 2,
+    'no-with': 2,
+    'one-var': [2, {
+      'initialized': 'never'
+    }],
+    'operator-linebreak': [2, 'after', {
+      'overrides': {
+        '?': 'before',
+        ':': 'before'
+      }
+    }],
+    'padded-blocks': [2, 'never'],
+    'quotes': [2, 'single', {
+      'avoidEscape': true,
+      'allowTemplateLiterals': true
+    }],
+    'semi': [2, 'never'],
+    'semi-spacing': [2, {
+      'before': false,
+      'after': true
+    }],
+    'space-before-blocks': [2, 'always'],
+    'space-before-function-paren': [2, 'never'],
+    'space-in-parens': [2, 'never'],
+    'space-infix-ops': 2,
+    'space-unary-ops': [2, {
+      'words': true,
+      'nonwords': false
+    }],
+    'spaced-comment': [2, 'always', {
+      'markers': ['global', 'globals', 'eslint', 'eslint-disable', '*package', '!', ',']
+    }],
+    'template-curly-spacing': [2, 'never'],
+    'use-isnan': 2,
+    'valid-typeof': 2,
+    'wrap-iife': [2, 'any'],
+    'yield-star-spacing': [2, 'both'],
+    'yoda': [2, 'never'],
+    'prefer-const': 2,
+    'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0,
+    'object-curly-spacing': [2, 'always', {
+      objectsInObjects: false
+    }],
+    'array-bracket-spacing': [2, 'never']
+  }
+}

+ 23 - 0
.gitignore

@@ -0,0 +1,23 @@
+.DS_Store
+node_modules/
+# dist/
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+**/*.log
+
+tests/**/coverage/
+tests/e2e/reports
+selenium-debug.log
+
+# Editor directories and files
+.idea
+.vscode
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.local
+
+package-lock.json
+yarn.lock

+ 5 - 0
.travis.yml

@@ -0,0 +1,5 @@
+language: node_js
+node_js: 10
+script: npm run test
+notifications:
+  email: false

+ 22 - 0
README.md

@@ -0,0 +1,22 @@
+
+
+# install dependency
+npm install
+
+# develop
+npm run dev
+```
+
+This will automatically open http://localhost:8080
+
+## Build
+
+```bash
+# build for test environment
+npm run build:stage
+
+# build for production environment
+npm run build:prod
+```
+
+

+ 14 - 0
babel.config.js

@@ -0,0 +1,14 @@
+module.exports = {
+  presets: [
+    // https://github.com/vuejs/vue-cli/tree/master/packages/@vue/babel-preset-app
+    '@vue/cli-plugin-babel/preset'
+  ],
+  'env': {
+    'development': {
+      // babel-plugin-dynamic-import-node plugin only does one thing by converting all import() to require().
+      // This plugin can significantly increase the speed of hot updates, when you have a large number of pages.
+      // https://panjiachen.github.io/vue-element-admin-site/guide/advanced/lazy-loading.html
+      'plugins': ['dynamic-import-node']
+    }
+  }
+}

+ 35 - 0
build/index.js

@@ -0,0 +1,35 @@
+const { run } = require('runjs')
+const chalk = require('chalk')
+const config = require('../vue.config.js')
+const rawArgv = process.argv.slice(2)
+const args = rawArgv.join(' ')
+
+if (process.env.npm_config_preview || rawArgv.includes('--preview')) {
+  const report = rawArgv.includes('--report')
+
+  run(`vue-cli-service build ${args}`)
+
+  const port = 9526
+  const publicPath = config.publicPath
+
+  var connect = require('connect')
+  var serveStatic = require('serve-static')
+  const app = connect()
+
+  app.use(
+    publicPath,
+    serveStatic('./dist', {
+      index: ['index.html', '/']
+    })
+  )
+
+  app.listen(port, function () {
+    console.log(chalk.green(`> Preview at  http://localhost:${port}${publicPath}`))
+    if (report) {
+      console.log(chalk.green(`> Report at  http://localhost:${port}${publicPath}report.html`))
+    }
+
+  })
+} else {
+  run(`vue-cli-service build ${args}`)
+}

+ 64 - 0
dist/index.html

@@ -0,0 +1,64 @@
+<!DOCTYPE html>
+<html>
+
+<head>
+  <meta charset="utf-8">
+  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+  <meta name="renderer" content="webkit">
+  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
+  <!--钉钉监控-->
+  <meta name="wpk-bid" content="dta_1_1184953963">
+  <script>
+    !(function (c, i, e, b) {
+      var h = i.createElement("script");
+      var f = i.getElementsByTagName("script")[0];
+      h.type = "text/javascript";
+      h.crossorigin = true;
+      h.onload = function () {
+        c[b] || (c[b] = new c.wpkReporter({ bid: "dta_1_1184953963" }));
+        c[b].installAll()
+      };
+      f.parentNode.insertBefore(h, f);
+      h.src = e
+    })(window, document, "https://g.alicdn.com/woodpeckerx/jssdk??wpkReporter.js", "__wpk");
+  </script>
+  <!--钉钉监控end-->
+  <!-- <link rel="icon" href="/favicon.ico"> -->
+  <title>采销平台结算系统</title>
+  <style>
+    [v-cloak] {
+      display: none;
+    }
+  </style>
+  <script src="./static/vue.min.js" rel="preload" as="script"></script>
+  <script src="./static/vue-router.min.js" rel="preload" as="script"></script>
+  <script src="./static/axios@0.21.0.min.js" rel="preload" as="script"></script>
+  <script src="./static/dingtalk.open.2.10.3.js" rel="preload" as="script"></script>
+  <meta name="wpk-bid" content="dta_1_1184953963">
+  <script>
+    !(function (c, i, e, b) {
+      var h = i.createElement("script");
+      var f = i.getElementsByTagName("script")[0];
+      h.type = "text/javascript";
+      h.crossorigin = true;
+      h.onload = function () {
+        c[b] || (c[b] = new c.wpkReporter({ bid: "dta_1_1184953963" }));
+        c[b].installAll()
+      };
+      f.parentNode.insertBefore(h, f);
+      h.src = e
+    })(window, document, "https://g.alicdn.com/woodpeckerx/jssdk??wpkReporter.js", "__wpk");
+  </script>
+<link href="/static/js/app.js" rel="preload" as="script"><link href="/static/js/chunk-elementUI.js" rel="preload" as="script"><link href="/static/js/chunk-libs.js" rel="preload" as="script"><link href="/static/js/runtime.js" rel="preload" as="script"></head>
+
+<body>
+  <div id="app">
+    <div style="width: 152px;margin: 0 auto;padding-top: 100px;">
+      <img style="width: 100%;" src="./static/loading.gif" alt="">
+      <!-- <p style="width: 100%;text-align: center;color: #606266;">努力加载中...</p> -->
+    </div>
+  </div>
+  <!-- built files will be auto injected -->
+<script type="text/javascript" src="/static/js/runtime.js"></script><script type="text/javascript" src="/static/js/chunk-elementUI.js"></script><script type="text/javascript" src="/static/js/chunk-libs.js"></script><script type="text/javascript" src="/static/js/app.js"></script></body>
+
+</html>

Diff do ficheiro suprimidas por serem muito extensas
+ 1 - 0
dist/static/axios@0.21.0.min.js


Diff do ficheiro suprimidas por serem muito extensas
+ 0 - 0
dist/static/dingtalk.open.2.10.3.js


BIN
dist/static/fonts/element-icons.535877f5.woff


BIN
dist/static/fonts/element-icons.732389de.ttf


BIN
dist/static/img/401.089007e7.gif


BIN
dist/static/img/404.a57b6f31.png


BIN
dist/static/img/404_cloud.0f4bc32b.png


BIN
dist/static/img/avatar.ecba1844.gif


BIN
dist/static/img/developing.750f7ed1.jpg


BIN
dist/static/img/loading.190c78aa.gif


BIN
dist/static/img/loginbg.51c61d67.png


BIN
dist/static/img/loginlan.1ecbd4ab.png


BIN
dist/static/img/logo.66bee2dc.gif


BIN
dist/static/img/welcome.6cf0f25b.gif


Diff do ficheiro suprimidas por serem muito extensas
+ 9 - 0
dist/static/js/0.js


Diff do ficheiro suprimidas por serem muito extensas
+ 9 - 0
dist/static/js/1.js


Diff do ficheiro suprimidas por serem muito extensas
+ 9 - 0
dist/static/js/app.js


Diff do ficheiro suprimidas por serem muito extensas
+ 20 - 0
dist/static/js/chunk-elementUI.js


Diff do ficheiro suprimidas por serem muito extensas
+ 58 - 0
dist/static/js/chunk-libs.js


+ 223 - 0
dist/static/js/runtime.js

@@ -0,0 +1,223 @@
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// install a JSONP callback for chunk loading
+/******/ 	function webpackJsonpCallback(data) {
+/******/ 		var chunkIds = data[0];
+/******/ 		var moreModules = data[1];
+/******/ 		var executeModules = data[2];
+/******/
+/******/ 		// add "moreModules" to the modules object,
+/******/ 		// then flag all "chunkIds" as loaded and fire callback
+/******/ 		var moduleId, chunkId, i = 0, resolves = [];
+/******/ 		for(;i < chunkIds.length; i++) {
+/******/ 			chunkId = chunkIds[i];
+/******/ 			if(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {
+/******/ 				resolves.push(installedChunks[chunkId][0]);
+/******/ 			}
+/******/ 			installedChunks[chunkId] = 0;
+/******/ 		}
+/******/ 		for(moduleId in moreModules) {
+/******/ 			if(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {
+/******/ 				modules[moduleId] = moreModules[moduleId];
+/******/ 			}
+/******/ 		}
+/******/ 		if(parentJsonpFunction) parentJsonpFunction(data);
+/******/
+/******/ 		while(resolves.length) {
+/******/ 			resolves.shift()();
+/******/ 		}
+/******/
+/******/ 		// add entry modules from loaded chunk to deferred list
+/******/ 		deferredModules.push.apply(deferredModules, executeModules || []);
+/******/
+/******/ 		// run deferred modules when all chunks ready
+/******/ 		return checkDeferredModules();
+/******/ 	};
+/******/ 	function checkDeferredModules() {
+/******/ 		var result;
+/******/ 		for(var i = 0; i < deferredModules.length; i++) {
+/******/ 			var deferredModule = deferredModules[i];
+/******/ 			var fulfilled = true;
+/******/ 			for(var j = 1; j < deferredModule.length; j++) {
+/******/ 				var depId = deferredModule[j];
+/******/ 				if(installedChunks[depId] !== 0) fulfilled = false;
+/******/ 			}
+/******/ 			if(fulfilled) {
+/******/ 				deferredModules.splice(i--, 1);
+/******/ 				result = __webpack_require__(__webpack_require__.s = deferredModule[0]);
+/******/ 			}
+/******/ 		}
+/******/
+/******/ 		return result;
+/******/ 	}
+/******/
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+/******/
+/******/ 	// object to store loaded and loading chunks
+/******/ 	// undefined = chunk not loaded, null = chunk preloaded/prefetched
+/******/ 	// Promise = chunk loading, 0 = chunk loaded
+/******/ 	var installedChunks = {
+/******/ 		"runtime": 0
+/******/ 	};
+/******/
+/******/ 	var deferredModules = [];
+/******/
+/******/ 	// script path function
+/******/ 	function jsonpScriptSrc(chunkId) {
+/******/ 		return __webpack_require__.p + "static/js/" + ({}[chunkId]||chunkId) + ".js"
+/******/ 	}
+/******/
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+/******/
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId]) {
+/******/ 			return installedModules[moduleId].exports;
+/******/ 		}
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			i: moduleId,
+/******/ 			l: false,
+/******/ 			exports: {}
+/******/ 		};
+/******/
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ 		// Flag the module as loaded
+/******/ 		module.l = true;
+/******/
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+/******/
+/******/ 	// This file contains only the entry chunk.
+/******/ 	// The chunk loading function for additional chunks
+/******/ 	__webpack_require__.e = function requireEnsure(chunkId) {
+/******/ 		var promises = [];
+/******/
+/******/
+/******/ 		// JSONP chunk loading for javascript
+/******/
+/******/ 		var installedChunkData = installedChunks[chunkId];
+/******/ 		if(installedChunkData !== 0) { // 0 means "already installed".
+/******/
+/******/ 			// a Promise means "currently loading".
+/******/ 			if(installedChunkData) {
+/******/ 				promises.push(installedChunkData[2]);
+/******/ 			} else {
+/******/ 				// setup Promise in chunk cache
+/******/ 				var promise = new Promise(function(resolve, reject) {
+/******/ 					installedChunkData = installedChunks[chunkId] = [resolve, reject];
+/******/ 				});
+/******/ 				promises.push(installedChunkData[2] = promise);
+/******/
+/******/ 				// start chunk loading
+/******/ 				var script = document.createElement('script');
+/******/ 				var onScriptComplete;
+/******/
+/******/ 				script.charset = 'utf-8';
+/******/ 				script.timeout = 120;
+/******/ 				if (__webpack_require__.nc) {
+/******/ 					script.setAttribute("nonce", __webpack_require__.nc);
+/******/ 				}
+/******/ 				script.src = jsonpScriptSrc(chunkId);
+/******/
+/******/ 				// create error before stack unwound to get useful stacktrace later
+/******/ 				var error = new Error();
+/******/ 				onScriptComplete = function (event) {
+/******/ 					// avoid mem leaks in IE.
+/******/ 					script.onerror = script.onload = null;
+/******/ 					clearTimeout(timeout);
+/******/ 					var chunk = installedChunks[chunkId];
+/******/ 					if(chunk !== 0) {
+/******/ 						if(chunk) {
+/******/ 							var errorType = event && (event.type === 'load' ? 'missing' : event.type);
+/******/ 							var realSrc = event && event.target && event.target.src;
+/******/ 							error.message = 'Loading chunk ' + chunkId + ' failed.\n(' + errorType + ': ' + realSrc + ')';
+/******/ 							error.name = 'ChunkLoadError';
+/******/ 							error.type = errorType;
+/******/ 							error.request = realSrc;
+/******/ 							chunk[1](error);
+/******/ 						}
+/******/ 						installedChunks[chunkId] = undefined;
+/******/ 					}
+/******/ 				};
+/******/ 				var timeout = setTimeout(function(){
+/******/ 					onScriptComplete({ type: 'timeout', target: script });
+/******/ 				}, 120000);
+/******/ 				script.onerror = script.onload = onScriptComplete;
+/******/ 				document.head.appendChild(script);
+/******/ 			}
+/******/ 		}
+/******/ 		return Promise.all(promises);
+/******/ 	};
+/******/
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+/******/
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+/******/
+/******/ 	// define getter function for harmony exports
+/******/ 	__webpack_require__.d = function(exports, name, getter) {
+/******/ 		if(!__webpack_require__.o(exports, name)) {
+/******/ 			Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ 		}
+/******/ 	};
+/******/
+/******/ 	// define __esModule on exports
+/******/ 	__webpack_require__.r = function(exports) {
+/******/ 		if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ 			Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ 		}
+/******/ 		Object.defineProperty(exports, '__esModule', { value: true });
+/******/ 	};
+/******/
+/******/ 	// create a fake namespace object
+/******/ 	// mode & 1: value is a module id, require it
+/******/ 	// mode & 2: merge all properties of value into the ns
+/******/ 	// mode & 4: return value when already ns object
+/******/ 	// mode & 8|1: behave like require
+/******/ 	__webpack_require__.t = function(value, mode) {
+/******/ 		if(mode & 1) value = __webpack_require__(value);
+/******/ 		if(mode & 8) return value;
+/******/ 		if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ 		var ns = Object.create(null);
+/******/ 		__webpack_require__.r(ns);
+/******/ 		Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ 		if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ 		return ns;
+/******/ 	};
+/******/
+/******/ 	// getDefaultExport function for compatibility with non-harmony modules
+/******/ 	__webpack_require__.n = function(module) {
+/******/ 		var getter = module && module.__esModule ?
+/******/ 			function getDefault() { return module['default']; } :
+/******/ 			function getModuleExports() { return module; };
+/******/ 		__webpack_require__.d(getter, 'a', getter);
+/******/ 		return getter;
+/******/ 	};
+/******/
+/******/ 	// Object.prototype.hasOwnProperty.call
+/******/ 	__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "/";
+/******/
+/******/ 	// on error function for async loading
+/******/ 	__webpack_require__.oe = function(err) { console.error(err); throw err; };
+/******/
+/******/ 	var jsonpArray = window["webpackJsonp"] = window["webpackJsonp"] || [];
+/******/ 	var oldJsonpFunction = jsonpArray.push.bind(jsonpArray);
+/******/ 	jsonpArray.push = webpackJsonpCallback;
+/******/ 	jsonpArray = jsonpArray.slice();
+/******/ 	for(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);
+/******/ 	var parentJsonpFunction = oldJsonpFunction;
+/******/
+/******/
+/******/ 	// run deferred modules from other chunks
+/******/ 	checkDeferredModules();
+/******/ })
+/************************************************************************/
+/******/ ([]);

BIN
dist/static/loading.gif


Diff do ficheiro suprimidas por serem muito extensas
+ 0 - 0
dist/static/reset.min.css


Diff do ficheiro suprimidas por serem muito extensas
+ 5 - 0
dist/static/vue-router.min.js


Diff do ficheiro suprimidas por serem muito extensas
+ 5 - 0
dist/static/vue.min.js


+ 24 - 0
jest.config.js

@@ -0,0 +1,24 @@
+module.exports = {
+  moduleFileExtensions: ['js', 'jsx', 'json', 'vue'],
+  transform: {
+    '^.+\\.vue$': 'vue-jest',
+    '.+\\.(css|styl|less|sass|scss|svg|png|jpg|ttf|woff|woff2)$':
+      'jest-transform-stub',
+    '^.+\\.jsx?$': 'babel-jest'
+  },
+  moduleNameMapper: {
+    '^@/(.*)$': '<rootDir>/src/$1'
+  },
+  snapshotSerializers: ['jest-serializer-vue'],
+  testMatch: [
+    '**/tests/unit/**/*.spec.(js|jsx|ts|tsx)|**/__tests__/*.(js|jsx|ts|tsx)'
+  ],
+  collectCoverageFrom: ['src/utils/**/*.{js,vue}', '!src/utils/auth.js', '!src/utils/request.js', 'src/components/**/*.{js,vue}'],
+  coverageDirectory: '<rootDir>/tests/unit/coverage',
+  // 'collectCoverage': true,
+  'coverageReporters': [
+    'lcov',
+    'text-summary'
+  ],
+  testURL: 'http://localhost/'
+}

+ 9 - 0
jsconfig.json

@@ -0,0 +1,9 @@
+{ 
+  "compilerOptions": {
+    "baseUrl": "./",
+    "paths": {
+        "@/*": ["src/*"]
+    }
+  },
+  "exclude": ["node_modules", "dist"]
+}

+ 107 - 0
package.json

@@ -0,0 +1,107 @@
+{
+  "name": "account-ui",
+  "version": "4.4.0",
+  "description": "A magical vue admin. An out-of-box UI solution for enterprise applications. Newest development stack of vue. Lots of awesome features",
+  "author": "daiyanrong <836647807@qq.com>",
+  "scripts": {
+    "dev": "vue-cli-service serve",
+    "lint": "eslint --ext .js,.vue src",
+    "build:prod": "vue-cli-service build --mode production",
+    "build:stage": "vue-cli-service build --mode staging",
+    "build:dev": "vue-cli-service build --mode development",
+    "preview": "node build/index.js --preview",
+    "new": "plop",
+    "svgo": "svgo -f src/icons/svg --config=src/icons/svgo.yml",
+    "test:unit": "jest --clearCache && vue-cli-service test:unit",
+    "test:ci": "npm run lint && npm run test:unit",
+    "format": "prettier --write \"src/**/*.js\" \"src/**/*.less\" \"src/**/*.scss\" \"src/**/*.vue\"",
+    "new:comp": "node ./scripts/generateComponent",
+    "new:view": "node ./scripts/generateView",
+    "new:page": "node ./scripts/generatePage"
+  },
+  "dependencies": {
+    "babel-eslint": "^7.2.3",
+    "babel-polyfill": "^6.26.0",
+    "clipboard": "2.0.4",
+    "codemirror": "5.45.0",
+    "compression-webpack-plugin": "^6.1.1",
+    "core-js": "3.6.5",
+    "crypto-js": "^4.0.0",
+    "dayjs": "^1.10.4",
+    "driver.js": "0.9.5",
+    "dropzone": "5.5.1",
+    "echarts": "4.2.1",
+    "element-ui": "^2.12.0",
+    "file-saver": "2.0.1",
+    "fuse.js": "3.4.4",
+    "js-cookie": "2.2.0",
+    "jsonlint": "1.6.3",
+    "jszip": "3.2.1",
+    "node-sass": "^4.14.1",
+    "normalize.css": "7.0.0",
+    "nprogress": "0.2.0",
+    "path-to-regexp": "2.4.0",
+    "sass-loader": "^8.0.2",
+    "screenfull": "4.2.0",
+    "script-loader": "0.7.2",
+    "sortablejs": "1.8.4",
+    "tui-editor": "1.3.3",
+    "uglifyjs-webpack-plugin": "^2.2.0",
+    "v-viewer": "^1.6.3",
+    "vue-count-to": "1.0.13",
+    "vue-puzzle-verification": "^1.0.2",
+    "vue-quill-editor": "^3.0.6",
+    "vue-splitpane": "1.0.4",
+    "vuedraggable": "2.20.0",
+    "vuex": "^3.1.0",
+    "xlsx": "0.14.1"
+  },
+  "devDependencies": {
+    "@vue/cli-plugin-babel": "4.4.4",
+    "@vue/cli-plugin-eslint": "4.4.4",
+    "@vue/cli-plugin-unit-jest": "4.4.4",
+    "@vue/cli-service": "4.4.4",
+    "@vue/test-utils": "1.0.0-beta.29",
+    "autoprefixer": "9.5.1",
+    "babel-jest": "23.6.0",
+    "babel-plugin-dynamic-import-node": "2.3.3",
+    "chalk": "2.4.2",
+    "chokidar": "2.1.5",
+    "connect": "3.6.6",
+    "eslint": "6.7.2",
+    "eslint-plugin-vue": "6.2.2",
+    "html-webpack-plugin": "3.2.0",
+    "lint-staged": "8.1.5",
+    "plop": "2.3.0",
+    "runjs": "4.3.2",
+    "script-ext-html-webpack-plugin": "2.1.3",
+    "serve-static": "1.13.2",
+    "svg-sprite-loader": "4.1.3",
+    "svgo": "1.2.0",
+    "vue-template-compiler": "2.6.10"
+  },
+  "browserslist": [
+    "> 1%",
+    "last 2 versions"
+  ],
+  "engines": {
+    "node": ">=8.9",
+    "npm": ">= 3.0.0"
+  },
+  "keywords": [
+    "vue",
+    "admin",
+    "dashboard",
+    "element-ui",
+    "boilerplate",
+    "admin-template",
+    "management-system"
+  ],
+  "license": "MIT",
+  "lint-staged": {
+    "src/**/*.{js,vue}": [
+      "eslint --fix",
+      "git add"
+    ]
+  }
+}

+ 9 - 0
plopfile.js

@@ -0,0 +1,9 @@
+const viewGenerator = require('./plop-templates/view/prompt')
+const componentGenerator = require('./plop-templates/component/prompt')
+const storeGenerator = require('./plop-templates/store/prompt.js')
+
+module.exports = function(plop) {
+  plop.setGenerator('view', viewGenerator)
+  plop.setGenerator('component', componentGenerator)
+  plop.setGenerator('store', storeGenerator)
+}

+ 5 - 0
postcss.config.js

@@ -0,0 +1,5 @@
+module.exports = {
+  plugins: {
+    autoprefixer: {}
+  }
+}

+ 64 - 0
public/index.html

@@ -0,0 +1,64 @@
+<!DOCTYPE html>
+<html>
+
+<head>
+  <meta charset="utf-8">
+  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+  <meta name="renderer" content="webkit">
+  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
+  <!--钉钉监控-->
+  <meta name="wpk-bid" content="dta_1_1184953963">
+  <script>
+    !(function (c, i, e, b) {
+      var h = i.createElement("script");
+      var f = i.getElementsByTagName("script")[0];
+      h.type = "text/javascript";
+      h.crossorigin = true;
+      h.onload = function () {
+        c[b] || (c[b] = new c.wpkReporter({ bid: "dta_1_1184953963" }));
+        c[b].installAll()
+      };
+      f.parentNode.insertBefore(h, f);
+      h.src = e
+    })(window, document, "https://g.alicdn.com/woodpeckerx/jssdk??wpkReporter.js", "__wpk");
+  </script>
+  <!--钉钉监控end-->
+  <!-- <link rel="icon" href="<%= BASE_URL %>favicon.ico"> -->
+  <title>采销平台结算系统</title>
+  <style>
+    [v-cloak] {
+      display: none;
+    }
+  </style>
+  <script src="./static/vue.min.js" rel="preload" as="script"></script>
+  <script src="./static/vue-router.min.js" rel="preload" as="script"></script>
+  <script src="./static/axios@0.21.0.min.js" rel="preload" as="script"></script>
+  <script src="./static/dingtalk.open.2.10.3.js" rel="preload" as="script"></script>
+  <meta name="wpk-bid" content="dta_1_1184953963">
+  <script>
+    !(function (c, i, e, b) {
+      var h = i.createElement("script");
+      var f = i.getElementsByTagName("script")[0];
+      h.type = "text/javascript";
+      h.crossorigin = true;
+      h.onload = function () {
+        c[b] || (c[b] = new c.wpkReporter({ bid: "dta_1_1184953963" }));
+        c[b].installAll()
+      };
+      f.parentNode.insertBefore(h, f);
+      h.src = e
+    })(window, document, "https://g.alicdn.com/woodpeckerx/jssdk??wpkReporter.js", "__wpk");
+  </script>
+</head>
+
+<body>
+  <div id="app">
+    <div style="width: 152px;margin: 0 auto;padding-top: 100px;">
+      <img style="width: 100%;" src="./static/loading.gif" alt="">
+      <!-- <p style="width: 100%;text-align: center;color: #606266;">努力加载中...</p> -->
+    </div>
+  </div>
+  <!-- built files will be auto injected -->
+</body>
+
+</html>

Diff do ficheiro suprimidas por serem muito extensas
+ 1 - 0
public/static/axios@0.21.0.min.js


Diff do ficheiro suprimidas por serem muito extensas
+ 0 - 0
public/static/dingtalk.open.2.10.3.js


BIN
public/static/loading.gif


Diff do ficheiro suprimidas por serem muito extensas
+ 0 - 0
public/static/reset.min.css


Diff do ficheiro suprimidas por serem muito extensas
+ 5 - 0
public/static/vue-router.min.js


Diff do ficheiro suprimidas por serem muito extensas
+ 5 - 0
public/static/vue.min.js


+ 93 - 0
scripts/generateComponent.js

@@ -0,0 +1,93 @@
+// generateComponent.js 文件,放置生成组件的代码
+const chalk = require("chalk");
+const path = require("path");
+const fs = require("fs");
+const resolve = (...file) => path.resolve(__dirname, ...file);
+// const log = message => console.log(chalk.green(`${message}`));
+// const successLog = message => console.log(chalk.blue(`${message}`));
+const log = message => console.log(chalk.yellow(`${message}`));
+const successLog = message => console.log(chalk.green(`${message}`));
+const errorLog = error => console.log(chalk.red(`${error}`));
+const { vueTemplate, entryTemplate } = require("./template");
+
+const generateFile = (path, data) => {
+  if (fs.existsSync(path)) {
+    errorLog(`${path}文件已存在`);
+    return;
+  }
+  return new Promise((resolve, reject) => {
+    fs.writeFile(path, data, "utf8", err => {
+      if (err) {
+        errorLog(err.message);
+        reject(err);
+      } else {
+        resolve(true);
+      }
+    });
+  });
+};
+log("请输入要生成的组件名称、如需生成全局组件,请加 global/ 前缀");
+let componentName = "";
+process.stdin.on("data", async chunk => {
+  const inputName = String(chunk)
+    .trim()
+    .toString();
+  // 组件目录路径
+  const componentDirectory = resolve("../src/components", inputName);
+
+  // vue组件路径
+  const componentVueName = resolve(componentDirectory, "main.vue");
+  // 入口文件路径
+  const entryComponentName = resolve(componentDirectory, "index.js");
+
+  const hasComponentDirectory = fs.existsSync(componentDirectory);
+  if (hasComponentDirectory) {
+    errorLog(`${inputName}组件目录已存在,请重新输入`);
+    return;
+  } else {
+    log(`正在生成 component 目录 ${componentDirectory}`);
+    await dotExistDirectoryCreate(componentDirectory);
+    // fs.mkdirSync(componentDirectory);
+  }
+  try {
+    if (inputName.includes("/")) {
+      const inputArr = inputName.split("/");
+      componentName = inputArr[inputArr.length - 1];
+    } else {
+      componentName = inputName;
+    }
+    log(`正在生成 vue 文件 ${componentVueName}`);
+    await generateFile(componentVueName, vueTemplate(componentName));
+    log(`正在生成 entry 文件 ${entryComponentName}`);
+    await generateFile(entryComponentName, entryTemplate);
+    successLog("生成成功");
+  } catch (e) {
+    errorLog(e.message);
+  }
+
+  process.stdin.emit("end");
+});
+process.stdin.on("end", () => {
+  log("exit");
+  process.exit();
+});
+function dotExistDirectoryCreate(directory) {
+  return new Promise(resolve => {
+    mkdirs(directory, function() {
+      resolve(true);
+    });
+  });
+}
+
+// 递归创建目录
+function mkdirs(directory, callback) {
+  var exists = fs.existsSync(directory);
+  if (exists) {
+    callback();
+  } else {
+    mkdirs(path.dirname(directory), function() {
+      fs.mkdirSync(directory);
+      callback();
+    });
+  }
+}

+ 123 - 0
scripts/generatePage.js

@@ -0,0 +1,123 @@
+// generatePage.js 文件,放置生成组件的代码
+const chalk = require("chalk");
+const path = require("path");
+const fs = require("fs");
+const resolve = (...file) => path.resolve(__dirname, ...file);
+const log = message => console.log(chalk.yellow(`${message}`));
+const successLog = message => console.log(chalk.green(`${message}`));
+const errorLog = error => console.log(chalk.red(`${error}`));
+const {
+  indexPage,
+  addEditPage,
+  servicePage,
+  // modelPage
+} = require("./template");
+
+const generateFile = (path, data) => {
+  if (fs.existsSync(path)) {
+    errorLog(`${path}文件已存在`);
+    return;
+  }
+  return new Promise((resolve, reject) => {
+    fs.writeFile(path, data, "utf8", err => {
+      if (err) {
+        errorLog(err.message);
+        reject(err);
+      } else {
+        resolve(true);
+      }
+    });
+  });
+};
+log("请输入要生成的页面名称:");
+let componentName = "";
+process.stdin.on("data", async chunk => {
+  const inputName = String(chunk)
+    .trim()
+    .toString();
+  // 页面组件目录路径
+  const componentDirectory = resolve("../src/views", inputName);
+  // apis-service 目录路径
+  const apisServiceDirectory = resolve("../src/apis/service", inputName);
+  // // apis-model 目录路径
+  // const apisModelDirectory = resolve("../src/apis/model", inputName);
+  // vue组件路径--首页--列表页
+  const listTablePath = resolve(componentDirectory, "index.vue");
+  // vue组件路径--添加修改详情
+  const addEditPath = resolve(componentDirectory, "addEdit.vue");
+  // service文件路径
+  const servicePath = resolve(apisServiceDirectory, "index.js");
+  // // model文件路径
+  // const moldePath = resolve(apisModelDirectory, "index.js");
+  // views页面文件目录
+  const hasComponentDirectory = fs.existsSync(componentDirectory);
+  if (hasComponentDirectory) {
+    errorLog(`${inputName}组件目录已存在,请重新输入`);
+    return;
+  } else {
+    log(`正在生成 component 目录 ${componentDirectory}`);
+    await dotExistDirectoryCreate(componentDirectory);
+  }
+  // service文件目录
+  const hasService = fs.existsSync(apisServiceDirectory);
+  if (hasService) {
+    errorLog(`${inputName}service目录已存在,请重新输入`);
+    return;
+  } else {
+    log(`正在生成 apis/service 目录 ${apisServiceDirectory}`);
+    await dotExistDirectoryCreate(apisServiceDirectory);
+  }
+  // model 文件目录
+  // const hasModel = fs.existsSync(apisModelDirectory);
+  // if (hasModel) {
+  //   errorLog(`${inputName}组件目录已存在,请重新输入`);
+  //   return;
+  // } else {
+  //   log(`正在生成 apis/model 目录 ${apisModelDirectory}`);
+  //   await dotExistDirectoryCreate(apisModelDirectory);
+  // }
+  try {
+    if (inputName.includes("/")) {
+      const inputArr = inputName.split("/");
+      componentName = inputArr[inputArr.length - 1];
+    } else {
+      componentName = inputName;
+    }
+    log(`正在生成 views-列表 文件 ${listTablePath}`);
+    await generateFile(listTablePath, indexPage(componentName));
+    log(`正在生成 views-添加修改详情 文件 ${addEditPath}`);
+    await generateFile(addEditPath, addEditPage(componentName));
+    log(`正在生成 apis-service 文件 ${servicePath}`);
+    await generateFile(servicePath, servicePage);
+    // log(`正在生成 apis-model 文件 ${moldePath}`);
+    // await generateFile(moldePath, modelPage(componentName));
+    successLog("生成成功");
+  } catch (e) {
+    errorLog(e.message);
+  }
+  process.stdin.emit("end");
+});
+process.stdin.on("end", () => {
+  log("exit");
+  process.exit();
+});
+function dotExistDirectoryCreate(directory) {
+  return new Promise(resolve => {
+    mkdirs(directory, function() {
+      resolve(true);
+    });
+  });
+}
+
+// 递归创建目录
+function mkdirs(directory, callback) {
+  var exists = fs.existsSync(directory);
+  if (exists) {
+    callback();
+  } else {
+    mkdirs(path.dirname(directory), function() {
+      fs.mkdirSync(directory);
+      callback();
+    });
+  }
+}

+ 93 - 0
scripts/generateView.js

@@ -0,0 +1,93 @@
+// generateView.js 文件,放置生成页面组件的代码
+const chalk = require("chalk");
+const path = require("path");
+const fs = require("fs");
+const resolve = (...file) => path.resolve(__dirname, ...file);
+const log = message => console.log(chalk.green(`${message}`));
+const successLog = message => console.log(chalk.blue(`${message}`));
+const errorLog = error => console.log(chalk.red(`${error}`));
+const { vueTemplate } = require("./template");
+
+const generateFile = (path, data) => {
+  if (fs.existsSync(path)) {
+    errorLog(`${path}文件已存在`);
+    return;
+  }
+  return new Promise((resolve, reject) => {
+    fs.writeFile(path, data, "utf8", err => {
+      if (err) {
+        errorLog(err.message);
+        reject(err);
+      } else {
+        resolve(true);
+      }
+    });
+  });
+};
+log("请输入要生成的页面组件名称、会生成在 views/目录下");
+let componentName = "";
+process.stdin.on("data", async chunk => {
+  const inputName = String(chunk)
+    .trim()
+    .toString();
+  /**
+   * Vue页面组件路径
+   */
+  let componentVueName = resolve("../src/views", inputName);
+  // 如果不是以 .vue 结尾的话,自动加上
+  if (!componentVueName.endsWith(".vue")) {
+    componentVueName += ".vue";
+  }
+  /**
+   * vue组件目录路径
+   */
+  const componentDirectory = path.dirname(componentVueName);
+
+  const hasComponentExists = fs.existsSync(componentVueName);
+  if (hasComponentExists) {
+    errorLog(`${inputName}页面组件已存在,请重新输入`);
+    return;
+  } else {
+    log(`正在生成 component 目录 ${componentDirectory}`);
+    await dotExistDirectoryCreate(componentDirectory);
+  }
+  try {
+    if (inputName.includes("/")) {
+      const inputArr = inputName.split("/");
+      componentName = inputArr[inputArr.length - 1];
+    } else {
+      componentName = inputName;
+    }
+    log(`正在生成 vue 文件 ${componentVueName}`);
+    await generateFile(componentVueName, vueTemplate(componentName));
+    successLog("生成成功");
+  } catch (e) {
+    errorLog(e.message);
+  }
+
+  process.stdin.emit("end");
+});
+process.stdin.on("end", () => {
+  log("exit");
+  process.exit();
+});
+function dotExistDirectoryCreate(directory) {
+  return new Promise(resolve => {
+    mkdirs(directory, function() {
+      resolve(true);
+    });
+  });
+}
+
+// 递归创建目录
+function mkdirs(directory, callback) {
+  var exists = fs.existsSync(directory);
+  if (exists) {
+    callback();
+  } else {
+    mkdirs(path.dirname(directory), function() {
+      fs.mkdirSync(directory);
+      callback();
+    });
+  }
+}

+ 275 - 0
scripts/page/addEditPage.js

@@ -0,0 +1,275 @@
+module.exports = function(compoenntName) {
+  return `<template>
+  <el-dialog
+    :title="title"
+    :center="true"
+    align="left"
+    top="5vh"
+    width="1040px"
+    @close="closeModel"
+    :close-on-click-modal="false"
+    :visible.sync="showModelThis"
+    v-loading="loading"
+    element-loading-text="拼命加载中"
+    element-loading-spinner="el-icon-loading"
+    element-loading-background="rgba(0, 0, 0, 0.8)"
+  >
+    <el-card>
+      <el-row :gutter="10">
+        <el-col :span="24">
+          <el-form
+            :model="ruleForm"
+            status-icon
+            :rules="rulesThis"
+            ref="ruleForm"
+            label-width="110px"
+            class="demo-ruleForm"
+          >
+            <el-form-item
+              label="登录名"
+              prop="loginName"
+              v-if="id === 'add' || isDetail"
+            >
+              <el-input
+                v-model="ruleForm.loginName"
+                :disabled="isDetail"
+              ></el-input>
+            </el-form-item>
+            <el-form-item label="姓名" prop="fullName">
+              <el-input
+                v-model="ruleForm.fullName"
+                :disabled="isDetail"
+              ></el-input>
+            </el-form-item>
+            <el-form-item label="手机号" prop="tel">
+              <el-input v-model="ruleForm.tel" :disabled="isDetail"></el-input>
+            </el-form-item>
+            <el-form-item label="密码" prop="password" v-if="id === 'add'">
+              <el-input
+                type="password"
+                placeholder="密码"
+                :maxlength="20"
+                v-model="ruleForm.password"
+              ></el-input>
+            </el-form-item>
+            <el-form-item label="确认密码" prop="password2" v-if="id === 'add'">
+              <el-input
+                type="password"
+                placeholder="再次输入密码"
+                :maxlength="20"
+                v-model="ruleForm.password2"
+              ></el-input>
+            </el-form-item>
+          </el-form>
+        </el-col>
+        <el-col :span="24" style="text-align: right;">
+          <el-button type="primary" @click="submitForm" v-if="!isDetail"
+            >保 存
+          </el-button>
+          <el-button @click="showModelThis = false">{{ isDetail ? "关 闭" : "取 消" }}</el-button>
+        </el-col>
+      </el-row>
+    </el-card>
+  </el-dialog>
+   </template>
+   <script>
+   import asyncRequest from "@/apis/service/${compoenntName}";
+
+   export default {
+    name: '${compoenntName}',
+    props: ["showModel", "id", "isDetail"],
+    data() {
+      let validatePass = (rule, value, callback) => {
+        if (value === "" || value === undefined) {
+          callback(new Error("请输入新密码"));
+        } else {
+          if (value.length < 6 || value.length > 15) {
+            callback(new Error("必须是6到15位,支持数字、字母、符号组合"));
+          } else {
+            if (this.ruleForm.password2 !== "") {
+              this.$refs.ruleForm.validateField("password2");
+            }
+            callback();
+          }
+        }
+      };
+      let validatePass2 = (rule, value, callback) => {
+        if (value === "" || value === undefined) {
+          callback(new Error("请再次输入密码"));
+        } else if (value !== this.ruleForm.password) {
+          callback(new Error("两次输入密码不一致!"));
+        } else {
+          if (value.length < 6 || value.length > 15) {
+            callback(new Error("必须是6到15位,支持数字、字母、符号组合"));
+          } else {
+            callback();
+          }
+        }
+      };
+      return {
+        loading: false,
+        title: "添加管理人员",
+        showModelThis: this.showModel,
+        ruleForm: {
+          tel: "",
+          fullName: "",
+          loginName: "",
+          passport: ""
+          // isAdmin: 0
+        },
+        rulesThis: this.rules,
+        rules: {
+          loginName: [
+            {
+              required: true,
+              message: "请输入登录名",
+              trigger: "blur"
+            },
+            {
+              min: 2,
+              max: 30,
+              message: "长度在 2 到 30 个字符",
+              trigger: "blur"
+            }
+          ],
+          fullName: [
+            {
+              required: true,
+              message: "请输入姓名",
+              trigger: "blur"
+            },
+            {
+              min: 2,
+              max: 30,
+              message: "长度在 2 到 30 个字符",
+              trigger: "blur"
+            }
+          ],
+          password: [
+            {
+              required: true,
+              validator: validatePass,
+              trigger: "blur"
+            }
+          ],
+          password2: [
+            {
+              required: true,
+              validator: validatePass2,
+              trigger: "blur"
+            }
+          ],
+          tel: [
+            {
+              required: true,
+              message: "请输入手机号码",
+              trigger: "blur"
+            },
+            {
+              validator: this.$rulesPhone,
+              trigger: "blur"
+            }
+          ]
+        }
+      };
+    },
+    methods: {
+      closeModel() {
+        console.log("closeModel!!");
+      },
+      async initForm() {
+        if (this.id === "add") {
+          this.title = "添加管理人员";
+          // this.ruleForm.isAdmin = 0;
+          this.loading = false;
+          this.rulesThis = this.rules;
+          await this.resetForm();
+        } else {
+          if (this.isDetail) {
+            this.title = "管理人员详情";
+            this.rulesThis = {};
+          } else {
+            this.title = "修改管理人员";
+            this.rulesThis = this.rules;
+          }
+          await this.resetForm();
+          await this.initData();
+        }
+      },
+      async initData() {
+        this.loading = true;
+        let res = await asyncRequest.detail({id:this.id});
+        this.loading = false;
+        if (res.code === 0) {
+          this.ruleForm = res.data;
+        }
+      },
+      async resetForm() {
+        // 重置
+        await this.$nextTick(() => {
+          if (this.$refs.ruleForm) {
+            this.$refs.ruleForm.resetFields();
+            this.$refs.ruleForm.clearValidate();
+            this.ruleForm = {
+              tel: "",
+              fullName: "",
+              loginName: "",
+              passport: ""
+              // isAdmin: 0
+            };
+          }
+        });
+      },
+      async submitForm() {
+        await this.$refs.ruleForm.validate(async valid => {
+          if (valid) {
+            this.loading = true;
+            let obj = JSON.parse(JSON.stringify(this.ruleForm));
+            let res = {};
+            if (this.id === "add") {
+              obj.passport = obj.password;
+              res = await asyncRequest.add(obj);
+            } else {
+              res = await asyncRequest.update(obj);
+            }
+            this.loading = false;
+            if (res.code === 0) {
+              let title = this.id === "add" ? "添加成功" : "修改成功";
+              this.$notify.success({
+                title,
+                message: ""
+              });
+              this.showModelThis = false;
+              // 刷新
+              this.$emit("refresh");
+            }
+          } else {
+            console.log("error submit!!");
+            return false;
+          }
+        });
+      }
+    },
+    watch: {
+      showModel: function(val) {
+        this.showModelThis = val;
+        if (val) {
+          this.initForm();
+        }
+      },
+      showModelThis(val) {
+        if (!val) {
+          this.$emit("cancel");
+        }
+      }
+    }
+  };
+  </script>
+
+   <style lang="scss" scoped>
+   .${compoenntName} {
+    
+   }
+   </style>
+   `;
+};

+ 301 - 0
scripts/page/indexPage.js

@@ -0,0 +1,301 @@
+module.exports = function (compoenntName) {
+  return `<template>
+    <div class="${compoenntName} pagePadding">
+      <el-row :gutter="10">
+        <el-col :span="24" style="padding:  0 0 18px 0">
+          <el-col :span="3">
+            <el-input
+            :size="searchSize"
+              v-model="parmValue.loginName"
+              :maxlength="40"
+              placeholder="账户"
+            ></el-input>
+          </el-col>
+          <el-col :span="3">
+            <el-input
+            :size="searchSize"
+              v-model="parmValue.fullName"
+              :maxlength="40"
+              placeholder="姓名"
+            ></el-input>
+          </el-col>
+          <el-col :span="3" style="width: 152px;">
+            <el-button
+              type="primary"
+              :size="searchSize"
+              @click="searchList"
+              icon="el-icon-search"
+            ></el-button>
+            <el-button type="warning" :size="searchSize" @click="restSearch">
+              重置
+            </el-button>
+          </el-col>
+          <el-col :span="3" style="width: 195px;float:right;">
+            <el-button
+              type="primary"
+              :size="searchSize"
+              style="float:right;margin-left:5px;"
+              @click="searchList"
+            >
+              刷新
+            </el-button>
+            <el-button
+              type="success"
+              :size="searchSize"
+              style="float:right;"
+              @click="openModal('add', false)"
+            >
+              添加
+            </el-button>
+          </el-col>
+        </el-col>
+      </el-row>
+      <el-table
+        :data="tableData"
+        stripe
+        v-loading="loading"
+        border
+        :size="size"
+        style="width: 100%;"
+      >
+        <el-table-column
+          prop="loginName"
+          label="账户"
+          show-overflow-tooltip
+          align="center"
+        ></el-table-column>
+        <el-table-column
+          prop="fullName"
+          label="姓名"
+          show-overflow-tooltip
+          align="center"
+        ></el-table-column>
+        <!-- <el-table-column
+          prop="userId"
+          label="所属用户"
+          show-overflow-tooltip
+          align="center"
+        ></el-table-column> -->
+        <el-table-column
+          prop="tel"
+          label="手机号"
+          show-overflow-tooltip
+          align="center"
+        ></el-table-column>
+        <el-table-column label="用户类型" show-overflow-tooltip align="center">
+          <template slot-scope="scope">
+            <el-tag type="success"   :size="tablebtnSize" v-if="scope.row.type === 1">运营人员</el-tag>
+            <el-tag type="warning"   :size="tablebtnSize" v-else>物业人员</el-tag>
+          </template>
+        </el-table-column>
+        <el-table-column label="状态" show-overflow-tooltip align="center">
+        <template slot-scope="scope">
+          <el-tooltip
+            class="item"
+            effect="dark"
+            :content="scope.row.status === '1' ? '改为禁用' : '改为启用'"
+            placement="top"
+          >
+            <el-tag
+              :size="tablebtnSize"
+              v-if="scope.row.status === '1'"
+              type="success"
+              @click="statusConfirm(scope.row.id, scope.row.status)"
+              >启用</el-tag
+            >
+            <el-tag
+              v-else
+              :size="tablebtnSize"
+              type="warning"
+              @click="statusConfirm(scope.row.id, scope.row.status)"
+              >禁用</el-tag
+            >
+          </el-tooltip>
+        </template>
+      </el-table-column>
+        <el-table-column
+          prop="createTime"
+          label="创建时间"
+          show-overflow-tooltip
+          align="center"
+        ></el-table-column>
+        <el-table-column label="是否超管" show-overflow-tooltip align="center">
+          <template slot-scope="scope">
+            <el-tag type="warning"   :size="tablebtnSize" v-if="scope.row.isAdmin === 0">否</el-tag>
+            <el-tag type="success"   :size="tablebtnSize" v-else>是</el-tag>
+          </template>
+        </el-table-column>
+        <el-table-column fixed="right" label="操作" align="center" width="250">
+          <template slot-scope="scope">
+            <el-button
+              type="success"
+              :size="tablebtnSize"
+              @click="openModal(scope.row.id, false)"
+            >
+              修改
+            </el-button>
+            <el-button
+              type="danger"
+              :size="tablebtnSize"
+              :disabled="scope.row.isAdmin === 1"
+              @click="deleteById(scope.row.id)"
+            >
+              删除
+            </el-button>
+            <el-button
+              type="warning"
+              :size="tablebtnSize"
+              @click="openModal(scope.row.id, true)"
+            >
+              详情
+            </el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <div
+        class="Pagination"
+        style="text-align: right;margin-top: 10px;"
+        v-show="count > 0"
+      >
+      <el-pagination
+      :size="searchSize"
+       @size-change="handleSizeChange"
+       @current-change="handlePageChange"
+       :current-page="parmValue.page"
+       :page-sizes="[10, 15, 20, 30, 40]"
+       :page-size="parmValue.size"
+       layout="total, sizes, prev, pager, next, jumper"
+       :total="count"
+     ></el-pagination>
+      </div>
+      <add-edit
+        :showModel="showModel"
+        :id="modelId"
+        :isDetail="isDetail"
+        @refresh="searchList"
+        @cancel="showModel = false"
+      ></add-edit>
+    </div>
+   </template>
+   <script>
+    import mixinPage from "@/mixins/elPaginationHandle";
+    import asyncRequest from "@/apis/service/${compoenntName}";
+    import addEdit from "./addEdit";
+    import { mapGetters } from "vuex";
+   export default {
+    name: '${compoenntName}',
+    computed: {
+      ...mapGetters(["tablebtnSize", "searchSize", "size"]),
+    },
+    data() {
+      return {
+        loading: true,
+        showModel: false,
+        isDetail: false,
+        modelId: 0,
+        parmValue: {
+          loginName: "", // 账户
+          fullName: "", // 姓名
+          type: 2, // 用户类型(1运营人员 2物业人员)
+          page: 1, // 页码
+          size: 10 // 每页显示条数
+        },
+        count: 0, // 总条数
+        tableData: []
+      };
+    },
+    mixins: [mixinPage],
+    mounted() {
+      this.searchList();
+    },
+    components: {
+      addEdit
+    },
+    methods: {
+      restSearch() {
+        this.parmValue = {
+          loginName: "", // 账户
+          fullName: "", // 姓名
+          type: 2, // 用户类型(1运营人员 2物业人员)
+          page: 1, // 页码
+          size: 10 // 每页显示条数
+        };
+        this.searchList();
+      },
+      openModal(id, isDetail) {
+        this.showModel = true;
+        this.modelId = id;
+        this.isDetail = isDetail;
+      },
+      async deleteById(id) {
+        await this.$confirm("确定要删除?", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        })
+          .then(async () => {
+            let res = await asyncRequest.delete({ id });
+            if (res.code === 0) {
+              this.$notify.success({
+                title: "删除成功",
+                message: ""
+              });
+              this.searchList();
+            }
+          })
+          .catch(() => {
+            console.log("取消");
+          });
+      },
+      async searchList() {
+        this.loading = true;
+        let res = await asyncRequest.list(this.parmValue);
+        if (res.code === 0 && res.data) {
+          this.tableData = res.data.list;
+          this.count = Number(res.data.count);
+        } else {
+          this.tableData = [];
+          this.count = 0;
+        }
+        this.loading = false;
+      },
+      async statusConfirm(id, status) {
+        console.log(id, status);
+        let str= status === "1" ? "禁用" : "启用"
+        await this.$confirm('确定要改为'+str, {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning",
+        })
+          .then(async () => {
+            this.loading = true;
+            const model = {
+              id: id,
+              status: status === "1" ? "0" : "1",
+            };
+            const res = await asyncRequest.status(model);
+            if (res.code === 0) {
+              this.loading = false;
+              this.$notify.success({
+                title: "状态修改成功!",
+                message: "",
+              });
+              await this.searchList();
+            } else {
+              this.loading = false;
+            }
+          })
+          .catch(() => {
+            console.log("取消");
+          });
+      },
+    }
+   }
+   </script>
+   <style lang="scss" scoped>
+   .${compoenntName} {
+    
+   }
+   </style>
+   `;
+};

+ 23 - 0
scripts/page/modelPage.js

@@ -0,0 +1,23 @@
+module.exports = function(compoenntName) {
+  return `import asyncService from "@/apis/service/${compoenntName}/index";
+
+    const asyncFn = async (name, data) => {
+      let res = await asyncService[name](data);
+      return res;
+    };
+    export default {
+      // 添加
+      add: async data => await asyncFn("add", data),
+      // 删除
+      delete: async data => await asyncFn("delete", data),
+      // 分页查询
+      list: async data => await asyncFn("list", data),
+      // 详情
+      detail: async data => await asyncFn("detail", data),
+      // 更新
+      update: async data => await asyncFn("update", data),
+      //修改状态
+      status: async data => await asyncFn("accountstatus", data),
+    };
+     `;
+};

+ 18 - 0
scripts/page/servicePage.js

@@ -0,0 +1,18 @@
+module.exports = `// 物业管理员
+import http from "@/apis/axios";
+const api = "admin/";
+export default {
+  // 添加
+  add: (data, params) => http(api + "add", data, "post", params),
+  // 删除
+  delete: (data, params) => http(api + "delete", data, "post", params),
+  // 分页查询
+  list: (data, params) => http(api + "list", data, "post", params),
+  // 详情
+  detail: (data, params) => http(api + "detail", data, "post", params),
+  // 更新
+  update: (data, params) => http(api + "update", data, "post", params),
+  // 修改状态
+  status: (data, params) => http(api + "accountstatus", data, "post", params),
+};
+   `;

+ 27 - 0
scripts/template.js

@@ -0,0 +1,27 @@
+// template.js 文件,放置组件模板的代码
+module.exports = {
+  indexPage: require("./page/indexPage"),
+  addEditPage: require("./page/addEditPage"),
+  servicePage: require("./page/servicePage"),
+  // modelPage: require("./page/modelPage"),
+  vueTemplate: compoenntName => {
+    return `<template>
+    <div class="${compoenntName}">
+    ${compoenntName}组件
+    </div>
+   </template>
+   <script>
+   export default {
+    name: '${compoenntName}'
+   }
+   </script>
+   <style lang="scss" scoped>
+   .${compoenntName} {
+    
+   }
+   </style>
+   `;
+  },
+  entryTemplate: `import Main from './main.vue'
+   export default Main`
+};

+ 83 - 0
src/App.vue

@@ -0,0 +1,83 @@
+<template>
+  <div id="app" v-cloak>
+    <router-view />
+  </div>
+</template>
+
+<script>
+import { JudgeEnvironment } from "@/utils/validate";
+import { getCode } from "@/utils/dingding";
+export default {
+  name: "App",
+  data() {
+    return {
+      code: "",
+    };
+  },
+  async created() {
+    if (JudgeEnvironment() === "isDingDing") {
+      await this.testing();
+    } else {
+      await this.getMenu();
+    }
+  },
+  methods: {
+    async testing() {
+      await getCode(async (code) => {
+        this.code = code;
+        if (this.code != null && this.code != "") {
+          await this.setcode(this.code);
+        } else {
+          await this.logout();
+        }
+      });
+    },
+    async setcode(code) {
+      let model = { code: code };
+      this.$store
+        .dispatch("user/dingUserInfor", model)
+        .then(async (res) => {
+          if (res === "success") {
+            await this.getMenu();
+          } else {
+            await this.logout();
+          }
+        })
+        .catch(async (err) => {
+          await this.logout();
+        });
+    },
+    async getMenu() {
+      this.$store
+        .dispatch("user/getMenuList", this)
+        .then(async (res) => {
+          if (res === "noToken") {
+            await this.logout();
+          } else if (res === "success") {
+            if (
+              this.$route.path === "/loadingPage" ||
+              this.$route.path === "/" ||
+              this.$route.path === "/login"
+            ) {
+              window.vm.$router.replace("/welcome");
+            }
+          } else {
+            await this.logout();
+          }
+        })
+        .catch(async (err) => {
+          await this.logout();
+        });
+    },
+    async logout() {
+      if (this.$route.path !== "/login") {
+        await this.$store.dispatch("user/logout");
+        this.$router.push(`/login`);
+      }
+    },
+  },
+};
+</script>
+<style lang="scss">
+@import "./assets/css/index.scss";
+</style>

+ 101 - 0
src/apis/axios.js

@@ -0,0 +1,101 @@
+// import axios from 'axios'
+import Router from '@/router/index'
+// import store from '@/store'
+import urlConfig from '@/apis/url-config'
+import {
+  getToken, removeMenu,
+  removeBtn, removeToken
+} from '@/utils/auth'
+const header = {
+  // "X-Requested-With": "XMLHttpRequest",
+  // "X-Frame-Options": "DENY", // 告诉浏览器不要(DENY)把这个网页放在iFrame内,通常的目的就是要帮助用户对抗点击劫持。
+  // "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8"
+}
+window.ajaxTimeout = 20000
+export default async (
+  url = '',
+  data = {},
+  type = 'GET',
+  params = {},
+  headers = header,
+  onUploadProgress
+) => {
+  type = type.toLowerCase()
+  console.log(headers)
+  const obj = {
+    method: type,
+    baseURL: '',
+    url: urlConfig.baseURL + url,
+    data,
+    params,
+    // // `onUploadProgress` 允许为上传处理进度事件
+    // onUploadProgress: function(progressEvent) {
+    //   // 对原生进度事件的处理
+    // },
+    // // `onDownloadProgress` 允许为下载处理进度事件
+    // onDownloadProgress: function(progressEvent) {
+    //   // 对原生进度事件的处理
+    // },
+    // `cancelToken` 指定用于取消请求的 cancel token
+    // (查看后面的 Cancellation 这节了解更多)
+    // cancelToken: new CancelToken(function (cancel) {
+    // }),
+    processData: true, // 告诉axios不要去处理发送的数据(重要参数)
+    timeout: window.ajaxTimeout,
+    headers,
+    onUploadProgress
+  }
+  if (onUploadProgress && typeof onUploadProgress === 'function') {
+    obj.onUploadProgress = onUploadProgress
+  }
+  // return await axios(obj)
+  //   .then(response => {
+  //     return response;
+  //   })
+  //   .catch(res => {
+  //     return res;
+  //   });
+  // 请求拦截器
+  axios.interceptors.request.use(
+    config => {
+      if (!config.data.token) {
+        config.data.token = getToken()
+      }
+      return config
+    },
+    error => {
+      // 错误抛到业务代码
+      return Promise.reject(new Error('服务器异常,请联系管理员!'))
+    }
+  )
+  // 添加响应拦截器
+  axios.interceptors.response.use(
+    async response => {
+      if (response.status === 200) {
+        const code = response.data.code
+        if (code >= 100 && code <= 104) {
+          removeToken()
+          removeMenu()
+          removeBtn()
+        }
+      }
+      return response
+    },
+    error => {
+      return Promise.reject(error.response.data)
+    }
+  )
+  return new Promise((resolve, reject) => {
+    axios(obj)
+      .then(response => {
+        resolve(response.data)
+      })
+      .catch(res => {
+        if (res.response && res.response.data) {
+          reject(res.response.data);
+        } else {
+          reject(res);
+        }
+      });
+  })
+}

+ 26 - 0
src/apis/service/InvoiceSales/capitalClaim/index.js

@@ -0,0 +1,26 @@
+// 企业客户/供应商账号相关
+import http from "@/apis/axios";
+const api = "Admin/";
+export default {
+  // 分页查询
+  list: (data, params) => http(api + "tradelist", data, "post", params),
+  // 分页查询企业客户
+  clist: (data, params) => http(api + "customerlist", data, "post", params),
+  // 导入数据
+  add: (data, params) => http(api + "tradecreate", data, "post", params),
+  // 详情
+  detail: (data, params) => http(api + "tradeinfo", data, "post", params),
+  // (取消认领申请)
+  delete: (data, params) => http(api + 'tradedel', data, 'post', params),
+  // 审核
+  status: (data, params) => http(api + 'tradeupdate', data, 'post', params),
+  // 资金认领
+  tradesave: (data, params) => http(api + "tradesave", data, "post", params),
+  // 查询关联发票信息
+  tradein: (data, params) => http(api + "tradein", data, "post", params),
+  // 导入资金详情
+  tradelog: (data, params) => http(api + "tradelog", data, "post", params),
+  // 资金认领到退款
+  traderefund: (data, params) => http(api + "traderefund", data, "post", params),
+
+};

+ 26 - 0
src/apis/service/InvoiceSales/capitalPool/index.js

@@ -0,0 +1,26 @@
+// 企业客户/供应商账号相关
+import http from "@/apis/axios";
+const api = "Admin/";
+export default {
+  // 分页查询
+  list: (data, params) => http(api + "tradepool", data, "post", params),
+  // 分页查询企业客户
+  clist: (data, params) => http(api + "customerlist", data, "post", params),
+  // // 导入数据
+  // add: (data, params) => http(api + "tradecreate", data, "post", params),
+  // // 详情
+  // detail: (data, params) => http(api + "tradeinfo", data, "post", params),
+  // // (取消认领申请)
+  // delete: (data, params) => http(api + 'tradedel', data, 'post', params),
+  // // 审核
+  // status: (data, params) => http(api + 'tradeupdate', data, 'post', params),
+  // // 资金认领
+  // tradesave: (data, params) => http(api + "tradesave", data, "post", params),
+  // // 查询关联发票信息
+  // tradein: (data, params) => http(api + "tradein", data, "post", params),
+
+
+
+
+
+};

+ 10 - 0
src/apis/service/InvoiceSales/clients/index.js

@@ -0,0 +1,10 @@
+// 企业客户/供应商账号相关
+import http from "@/apis/axios";
+const api = "Admin/";
+export default {
+  // 分页查询
+  list: (data, params) => http(api + "customerlist", data, "post", params),
+  // 详情
+  detail: (data, params) => http(api + "customer", data, "post", params),
+
+};

+ 38 - 0
src/apis/service/InvoiceSales/invoiceApply/index.js

@@ -0,0 +1,38 @@
+// 企业客户/供应商账号相关
+import http from "@/apis/axios";
+const api = "Admin/";
+export default {
+  // 分页查询
+  list: (data, params) => http(api + "receiptlist", data, "post", params),
+  // 分页查询企业客户
+  clist: (data, params) => http(api + "customerlist", data, "post", params),
+  // 查询财务信息
+  cwlist: (data, params) => http(api + "customerinfo", data, "post", params),
+  // 分页查询确认单列表
+  qrdlist: (data, params) => http(api + "qrdlist", data, "post", params),
+  // 发票新建(金额)
+  madd: (data, params) => http(api + "receiptadd", data, "post", params),
+  // 发票编辑(金额)
+  mupdate: (data, params) => http(api + "receiptedit", data, "post", params),
+  // 发票新建(确认单)
+  oadd: (data, params) => http(api + "receiptcreate", data, "post", params),
+  // 发票编辑(确认单)
+  oupdate: (data, params) => http(api + "receiptsave", data, "post", params),
+  // 发票详情
+  detail: (data, params) => http(api + "receiptinfo", data, "post", params),
+  // 删除(取消申请)
+  delete: (data, params) => http(api + 'receiptdel', data, 'post', params),
+  // 发票状态修改
+  status: (data, params) => http(api + 'receiptstatus', data, 'post', params),
+  // 发票物流信息添加
+  post: (data, params) => http(api + 'receiptpost', data, 'post', params),
+
+  // 关联其他企业
+  invoicelist: (data, params) => http(api + 'invoicelist', data, 'post', params),
+
+  // 认领资金申请开票
+  receiptbytrade: (data, params) => http(api + 'receiptbytrade', data, 'post', params),
+  // 认领资金开票编辑
+  editbytrade: (data, params) => http(api + 'editbytrade', data, 'post', params),
+
+};

+ 31 - 0
src/apis/service/InvoiceSales/invoicePool/index.js

@@ -0,0 +1,31 @@
+// 企业客户/供应商账号相关
+import http from "@/apis/axios";
+const api = "Admin/";
+export default {
+  // 分页查询
+  list: (data, params) => http(api + "getreceiptlist", data, "post", params),
+  // 分页查询企业客户
+  clist: (data, params) => http(api + "customerlist", data, "post", params),
+  // 导入数据
+  add: (data, params) => http(api + "tradecreate", data, "post", params),
+  // 详情
+  detail: (data, params) => http(api + "tradeinfo", data, "post", params),
+
+  // 分页查询确认单列表
+  tradesave: (data, params) => http(api + "tradesave", data, "post", params),
+  // 发票新建(金额)
+  madd: (data, params) => http(api + "receiptadd", data, "post", params),
+  // 发票编辑(金额)
+  mupdate: (data, params) => http(api + "receiptedit", data, "post", params),
+  // 发票新建(确认单)
+  oadd: (data, params) => http(api + "receiptcreate", data, "post", params),
+  // 发票编辑(确认单)
+  oupdate: (data, params) => http(api + "receiptsave", data, "post", params),
+
+  // 删除(取消申请)
+  delete: (data, params) => http(api + 'receiptdel', data, 'post', params),
+  // 发票状态修改
+  status: (data, params) => http(api + 'receiptstatus', data, 'post', params),
+
+
+};

+ 42 - 0
src/apis/service/InvoiceSales/orderBatchBilling/index.js

@@ -0,0 +1,42 @@
+// 企业客户/供应商账号相关
+import http from "@/apis/axios";
+const api = "Admin/";
+export default {
+  // 分页查询
+  list: (data, params) => http(api + "receiptlist", data, "post", params),
+  // 分页查询企业客户
+  clist: (data, params) => http(api + "customerlist", data, "post", params),
+  // 发票开票数据导出
+  receiptexport: (data, params) => http(api + "receiptexport", data, "post", params),
+  // 发票数据导入
+  receiptimport: (data, params) => http(api + "receiptimport", data, "post", params),
+  // // 查询财务信息
+  // cwlist: (data, params) => http(api + "customerinfo", data, "post", params),
+  // // 分页查询确认单列表
+  // qrdlist: (data, params) => http(api + "qrdlist", data, "post", params),
+  // // 发票新建(金额)
+  // madd: (data, params) => http(api + "receiptadd", data, "post", params),
+  // // 发票编辑(金额)
+  // mupdate: (data, params) => http(api + "receiptedit", data, "post", params),
+  // // 发票新建(确认单)
+  // oadd: (data, params) => http(api + "receiptcreate", data, "post", params),
+  // // 发票编辑(确认单)
+  // oupdate: (data, params) => http(api + "receiptsave", data, "post", params),
+  // // 发票详情
+  // detail: (data, params) => http(api + "receiptinfo", data, "post", params),
+  // // 删除(取消申请)
+  // delete: (data, params) => http(api + 'receiptdel', data, 'post', params),
+  // // 发票状态修改
+  // status: (data, params) => http(api + 'receiptstatus', data, 'post', params),
+  // // 发票物流信息添加
+  // post: (data, params) => http(api + 'receiptpost', data, 'post', params),
+
+  // // 关联其他企业
+  // invoicelist: (data, params) => http(api + 'invoicelist', data, 'post', params),
+
+  // // 认领资金申请开票
+  // receiptbytrade: (data, params) => http(api + 'receiptbytrade', data, 'post', params),
+  // // 认领资金开票编辑
+  // editbytrade: (data, params) => http(api + 'editbytrade', data, 'post', params),
+
+};

+ 18 - 0
src/apis/service/InvoiceSales/refund/index.js

@@ -0,0 +1,18 @@
+// 企业客户/供应商账号相关
+import http from "@/apis/axios";
+const api = "Admin/";
+export default {
+  // 分页查询
+  list: (data, params) => http(api + "refundlist", data, "post", params),
+  // 分页查询企业客户
+  clist: (data, params) => http(api + "customerlist", data, "post", params),
+  // 退票退款新建
+  add: (data, params) => http(api + "refundcreate", data, "post", params),
+  // 发票详情
+  detail: (data, params) => http(api + "refundinfo", data, "post", params),
+  // 删除(取消申请)
+  delete: (data, params) => http(api + 'refunddel', data, 'post', params),
+  // 发票状态修改
+  status: (data, params) => http(api + 'refundexam', data, 'post', params),
+
+};

+ 20 - 0
src/apis/service/InvoiceSales/relation/index.js

@@ -0,0 +1,20 @@
+// 企业客户/供应商账号相关
+import http from "@/apis/axios";
+const api = "Admin/";
+export default {
+    // 分页查询关联关系
+    list: (data, params) => http(api + "assoclist", data, "post", params),
+    // 分页查询企业客户
+    clist: (data, params) => http(api + "customerlist", data, "post", params),
+    // 款票关联
+    assocadd: (data, params) => http(api + "assocadd", data, "post", params),
+    // 确认单关联款票
+    assoccreate: (data, params) => http(api + "assoccreate", data, "post", params),
+    // 审核关联关系
+    exam: (data, params) => http(api + "assocexam", data, "post", params),
+    // 关联关系详情
+    detail: (data, params) => http(api + 'associnfo', data, 'post', params),
+    // 删除(取消核销申请)
+    delete: (data, params) => http(api + 'assocdel', data, 'post', params),
+
+};

+ 12 - 0
src/apis/service/InvoiceSales/relationQuery/index.js

@@ -0,0 +1,12 @@
+// 企业客户/供应商账号相关
+import http from "@/apis/axios";
+const api = "Admin/";
+export default {
+  // 分页查询
+  list: (data, params) => http(api + "assocall", data, "post", params),
+  // 分页查询
+  clist: (data, params) => http(api + "customerlist", data, "post", params),
+  // 关联记录
+  detail: (data, params) => http(api + 'assocrela', data, 'post', params),
+
+};

+ 18 - 0
src/apis/service/InvoiceSales/returnTicket/index.js

@@ -0,0 +1,18 @@
+// 企业客户/供应商账号相关
+import http from "@/apis/axios";
+const api = "Admin/";
+export default {
+  // 分页查询
+  list: (data, params) => http(api + "refundlist", data, "post", params),
+  // 分页查询企业客户
+  clist: (data, params) => http(api + "customerlist", data, "post", params),
+  // 退票退款新建
+  add: (data, params) => http(api + "refundcreate", data, "post", params),
+  // 发票详情
+  detail: (data, params) => http(api + "refundinfo", data, "post", params),
+  // 删除(取消申请)
+  delete: (data, params) => http(api + 'refunddel', data, 'post', params),
+  // 发票状态修改
+  status: (data, params) => http(api + 'refundexam', data, 'post', params),
+
+};

+ 10 - 0
src/apis/service/InvoiceSales/sheetOrderPool/index.js

@@ -0,0 +1,10 @@
+// 企业客户/供应商账号相关
+import http from "@/apis/axios";
+const api = "Admin/";
+export default {
+  // 分页查询
+  list: (data, params) => http(api + "qrdlist", data, "post", params),
+  // 分页查询
+  clist: (data, params) => http(api + "customerlist", data, "post", params),
+
+};

+ 23 - 0
src/apis/service/interest/account/index.js

@@ -0,0 +1,23 @@
+// 物业管理员
+import http from '@/apis/axios'
+const api = 'Api/'
+export default {
+
+ // 分页查询
+ list: (data, params) => http('Admin/userlist', data, 'post', params),
+ // 详情
+ detail: (data, params) => http(api + 'userinfo', data, 'post', params),
+ // 更新
+ update: (data, params) => http(api + 'usersave', data, 'post', params),
+
+  // 添加
+  add: (data, params) => http(api + 'accountadd', data, 'post', params),
+  // 删除
+  delete: (data, params) => http(api + 'delete', data, 'post', params),
+  // 修改密码
+  setpwd: (data, params) => http(api + 'passset', data, 'post', params),
+  // 修改状态
+  status: (data, params) => http(api + 'userstatus', data, 'post', params),
+  // 拉取角色列表
+  getRole: (data, params) => http('Admin/roleall', data, 'post', params)
+}

+ 13 - 0
src/apis/service/interest/action/index.js

@@ -0,0 +1,13 @@
+// 功能权限
+import http from '@/apis/axios'
+const api = 'Admin/'
+export default {
+  // 详情
+  detail: (data, params) => http(api + 'roleinfo', data, 'post', params),
+  // 更新
+  update: (data, params) => http(api + 'rolesave', data, 'post', params),
+  // 拉取角色列表
+  getRole: (data, params) => http(api + 'roleall', data, 'post', params),
+  // 功能权限列表
+  actionList: (data, params) => http(api + 'menuactionlist', data, 'post', params)
+}

+ 24 - 0
src/apis/service/interest/dataShare/index.js

@@ -0,0 +1,24 @@
+// 物业管理员
+import http from '@/apis/axios'
+const api = 'Admin/'
+export default {
+  // 添加
+  add: (data, params) => http(api + 'shareadd', data, 'post', params),
+  // 删除
+  delete: (data, params) => http(api + 'sharedel', data, 'post', params),
+  // 分页查询
+  list: (data, params) => http(api + 'sharelist', data, 'post', params),
+  // 详情
+  detail: (data, params) => http(api + 'shareinfo', data, 'post', params),
+  // 更新
+  update: (data, params) => http(api + 'sharesave', data, 'post', params),
+  // 修改状态
+  status: (data, params) => http(api + 'sharestatus', data, 'post', params),
+  // 获取全部账户列表
+  accountall: (data, params) => http(api + 'userall', data, 'post', params),
+  // 获取全部用户组
+  groupall: (data, params) => http(api + 'groupall', data, 'post', params),
+  // 功能权限列表
+  actionList: (data, params) => http(api + 'menuactionlist', data, 'post', params)
+
+}

+ 20 - 0
src/apis/service/interest/group/index.js

@@ -0,0 +1,20 @@
+// 物业管理员
+import http from '@/apis/axios'
+const api = 'Admin/'
+export default {
+  // 添加
+  add: (data, params) => http(api + 'groupadd', data, 'post', params),
+  // 删除
+  delete: (data, params) => http(api + 'delete', data, 'post', params),
+  // 分页查询
+  list: (data, params) => http(api + 'grouplist', data, 'post', params),
+  // 详情
+  detail: (data, params) => http(api + 'groupinfo', data, 'post', params),
+  // 更新
+  update: (data, params) => http(api + 'groupsave', data, 'post', params),
+  // 修改状态
+  status: (data, params) => http(api + 'groupstatus', data, 'post', params),
+  // 获取全部账户列表
+  accountall: (data, params) => http(api + 'userall', data, 'post', params)
+
+}

+ 22 - 0
src/apis/service/interest/role/index.js

@@ -0,0 +1,22 @@
+// 物业管理员
+import http from '@/apis/axios'
+const api = 'Admin/'
+export default {
+  // 添加
+  add: (data, params) => http(api + 'roleadd', data, 'post', params),
+  // 删除
+  delete: (data, params) => http(api + 'rolestatus', data, 'post', params),
+  // 查询列表
+  list: (data, params) => http(api + 'rolelist', data, 'post', params),
+  // 详情
+  detail: (data, params) => http(api + 'roleinfo', data, 'post', params),
+  // 更新
+  update: (data, params) => http(api + 'rolesave', data, 'post', params),
+
+  // 修改状态
+  status: (data, params) => http(api + 'rolestatus', data, 'post', params),
+  // // 数据权限列表
+  // dataList: (data, params) => http(api + "actiondata", data, "post", params),
+  // 功能权限列表
+  actionList: (data, params) => http(api + 'menuactionlist', data, 'post', params)
+}

+ 15 - 0
src/apis/service/parameter/finance/index.js

@@ -0,0 +1,15 @@
+// 业务参数
+import http from '@/apis/axios'
+const api = 'Admin/'
+export default {
+  // 添加
+  add: (data, params) => http(api + 'companyadd', data, 'post', params),
+  // 详情
+  detail: (data, params) => http(api + 'companyinfo', data, 'post', params),
+// 修改状态
+status: (data, params) => http(api + 'companystatus', data, 'post', params),
+  // 列表
+  list: (data, params) => http(api + 'companylist', data, 'post', params),
+  // 更新
+  update: (data, params) => http(api + 'companysave', data, 'post', params)
+}

+ 64 - 0
src/apis/service/purchase/orderRecord/index.js

@@ -0,0 +1,64 @@
+// 物业管理员
+import http from "@/apis/axios";
+const api = "Admin/";
+export default {
+  // 分页查询
+  list: (data, params) => http(api + "paymentlist", data, "post", params),
+  // 分页查询供应商
+  supplierlist: (data, params) => http(api + "supplierlist", data, "post", params),
+  // 采购单未对账信息
+  paymentcgdlist: (data, params) => http(api + "paymentcgdlist", data, "post", params),
+  // 修改状态
+  status: (data, params) => http(api + 'paymentstatus', data, 'post', params),
+  // 申请付款/业务审核
+  again: (data, params) => http(api + 'paymentaduit', data, 'post', params),
+  // 添加
+  add: (data, params) => http(api + "paymentadd", data, "post", params),
+  // 详情
+  detail: (data, params) => http(api + "paymentpayinfo", data, "post", params),
+
+  // 企业信息所有财务数据
+  companyall: (data, params) => http(api + 'companyall', data, 'post', params),
+
+  // 发票上传
+  invoiceadd: (data, params) => http(api + 'invoiceadd', data, 'post', params),
+  // 发票信息
+  invoiceinfo: (data, params) => http(api + 'invoiceinfo', data, 'post', params),
+  // 企业发票信息详情
+  companydetail: (data, params) => http(api + "companyinfo", data, "post", params),
+  // 发票删除
+  invoicedel: (data, params) => http(api + "invoicedel", data, "post", params),
+  // 发票校验结果保存
+  invoicesave: (data, params) => http(api + "invoicesave", data, "post", params),
+  // 发票提交验证
+  invoicecheck: (data, params) => http(api + "invoicecheck", data, "post", params),
+  // 更新
+  update: (data, params) => http(api + "companysave", data, "post", params),
+
+  // 发票图片审核状态修改
+  invoicestatus: (data, params) => http(api + "invoicestatus", data, "post", params),
+
+  // 财务审核发票
+  invoiceexam: (data, params) => http(api + "invoiceexam", data, "post", params),
+
+  // 对账修改
+  save: (data, params) => http(api + "paymentpaysave", data, "post", params),
+
+  // 获取所有税率
+  ratelist: (data, params) => http(api + "ratelist", data, "post", params),
+  // 采购单对账资金付款审核
+  paymentexam: (data, params) => http(api + 'paymentexam', data, 'post', params),
+  // // 企业财务信息
+  // bank: (data, params) => http(api + 'companybank', data, 'post', params),
+  // // 企业财务录入
+  // attrAdd: (data, params) => http(api + 'companyattradd', data, 'post', params),
+  // // 省级列表
+  // pList: (data, params) => http('api/getprovince', data, 'post', params),
+  // // 市级列表
+  // cList: (data, params) => http('api/getcity', data, 'post', params),
+  // // 县区列表
+  // aList: (data, params) => http('api/getarea', data, 'post', params),
+
+
+
+};

+ 15 - 0
src/apis/service/purchase/porder/index.js

@@ -0,0 +1,15 @@
+// 业务参数
+import http from '@/apis/axios'
+const api = 'Admin/'
+export default {
+  // 列表
+  list: (data, params) => http(api + 'paymentcgdlist', data, 'post', params),
+  // 分页查询供应商
+  supplierlist: (data, params) => http(api + "supplierlist", data, "post", params),
+  // 财务信息列表
+  companylist: (data, params) => http(api + 'companyall', data, 'post', params),
+  // 财务信息列表
+  inv: (data, params) => http(api + 'paymentcgdinv', data, 'post', params),
+  // 财务信息列表
+  exam: (data, params) => http(api + 'paymentcgdexam', data, 'post', params),
+}

+ 10 - 0
src/apis/service/purchase/supplierPay/index.js

@@ -0,0 +1,10 @@
+// 企业客户/供应商账号相关
+import http from "@/apis/axios";
+const api = "Admin/";
+export default {
+  // 分页查询
+  list: (data, params) => http(api + "supplierlist", data, "post", params),
+  // 详情
+  detail: (data, params) => http(api + "supplierinfo", data, "post", params),
+
+};

+ 18 - 0
src/apis/service/report/index.js

@@ -0,0 +1,18 @@
+// 物业管理员
+import http from "@/apis/axios";
+const api = "admin/";
+export default {
+  // 添加
+  add: (data, params) => http(api + "add", data, "post", params),
+  // 删除
+  delete: (data, params) => http(api + "delete", data, "post", params),
+  // 分页查询
+  list: (data, params) => http(api + "accountlist", data, "post", params),
+  // 详情
+  detail: (data, params) => http(api + "detail", data, "post", params),
+  // 更新
+  update: (data, params) => http(api + "update", data, "post", params),
+  // 修改状态
+  status: (data, params) => http(api + "accountstatus", data, "post", params),
+};
+   

+ 42 - 0
src/apis/service/search/standBook/index.js

@@ -0,0 +1,42 @@
+// 企业客户/供应商账号相关
+import http from "@/apis/axios";
+const api = "Admin/";
+export default {
+  // 分页查询
+  list: (data, params) => http(api + "receiptlist", data, "post", params),
+  // 分页查询企业客户
+  clist: (data, params) => http(api + "customerlist", data, "post", params),
+  // 发票开票数据导出
+  receiptexport: (data, params) => http(api + "receiptexport", data, "post", params),
+  // 发票数据导入
+  receiptimport: (data, params) => http(api + "receiptimport", data, "post", params),
+  // // 查询财务信息
+  // cwlist: (data, params) => http(api + "customerinfo", data, "post", params),
+  // // 分页查询确认单列表
+  // qrdlist: (data, params) => http(api + "qrdlist", data, "post", params),
+  // // 发票新建(金额)
+  // madd: (data, params) => http(api + "receiptadd", data, "post", params),
+  // // 发票编辑(金额)
+  // mupdate: (data, params) => http(api + "receiptedit", data, "post", params),
+  // // 发票新建(确认单)
+  // oadd: (data, params) => http(api + "receiptcreate", data, "post", params),
+  // // 发票编辑(确认单)
+  // oupdate: (data, params) => http(api + "receiptsave", data, "post", params),
+  // // 发票详情
+  // detail: (data, params) => http(api + "receiptinfo", data, "post", params),
+  // // 删除(取消申请)
+  // delete: (data, params) => http(api + 'receiptdel', data, 'post', params),
+  // // 发票状态修改
+  // status: (data, params) => http(api + 'receiptstatus', data, 'post', params),
+  // // 发票物流信息添加
+  // post: (data, params) => http(api + 'receiptpost', data, 'post', params),
+
+  // // 关联其他企业
+  // invoicelist: (data, params) => http(api + 'invoicelist', data, 'post', params),
+
+  // // 认领资金申请开票
+  // receiptbytrade: (data, params) => http(api + 'receiptbytrade', data, 'post', params),
+  // // 认领资金开票编辑
+  // editbytrade: (data, params) => http(api + 'editbytrade', data, 'post', params),
+
+};

+ 101 - 0
src/apis/service/search/table/axios.js

@@ -0,0 +1,101 @@
+// import axios from 'axios'
+import Router from '@/router/index'
+// import store from '@/store'
+import urlConfig from '@/apis/url-config'
+import {
+  getToken, removeMenu,
+  removeBtn, removeToken
+} from '@/utils/auth'
+const header = {
+  // "X-Requested-With": "XMLHttpRequest",
+  // "X-Frame-Options": "DENY", // 告诉浏览器不要(DENY)把这个网页放在iFrame内,通常的目的就是要帮助用户对抗点击劫持。
+  // "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8"
+}
+window.ajaxTimeout = 20000
+export default async (
+  url = '',
+  data = {},
+  type = 'GET',
+  params = {},
+  headers = header,
+  onUploadProgress
+) => {
+  type = type.toLowerCase()
+  console.log(headers)
+  const obj = {
+    method: type,
+    baseURL: '',
+    url: urlConfig.tableURL + url,
+    data,
+    params,
+    // // `onUploadProgress` 允许为上传处理进度事件
+    // onUploadProgress: function(progressEvent) {
+    //   // 对原生进度事件的处理
+    // },
+    // // `onDownloadProgress` 允许为下载处理进度事件
+    // onDownloadProgress: function(progressEvent) {
+    //   // 对原生进度事件的处理
+    // },
+    // `cancelToken` 指定用于取消请求的 cancel token
+    // (查看后面的 Cancellation 这节了解更多)
+    // cancelToken: new CancelToken(function (cancel) {
+    // }),
+    processData: true, // 告诉axios不要去处理发送的数据(重要参数)
+    timeout: window.ajaxTimeout,
+    headers,
+    onUploadProgress
+  }
+  if (onUploadProgress && typeof onUploadProgress === 'function') {
+    obj.onUploadProgress = onUploadProgress
+  }
+  // return await axios(obj)
+  //   .then(response => {
+  //     return response;
+  //   })
+  //   .catch(res => {
+  //     return res;
+  //   });
+  // 请求拦截器
+  axios.interceptors.request.use(
+    config => {
+      if (!config.data.token) {
+        config.data.token = getToken()
+      }
+      return config
+    },
+    error => {
+      // 错误抛到业务代码
+      return Promise.reject(new Error('服务器异常,请联系管理员!'))
+    }
+  )
+  // 添加响应拦截器
+  axios.interceptors.response.use(
+    async response => {
+      if (response.status === 200) {
+        const code = response.data.code
+        if (code >= 100 && code <= 104) {
+          removeToken()
+          removeMenu()
+          removeBtn()
+        }
+      }
+      return response
+    },
+    error => {
+      return Promise.reject(error.response.data)
+    }
+  )
+  return new Promise((resolve, reject) => {
+    axios(obj)
+      .then(response => {
+        resolve(response.data)
+      })
+      .catch(res => {
+        if (res.response && res.response.data) {
+          reject(res.response.data);
+        } else {
+          reject(res);
+        }
+      });
+  })
+}

+ 7 - 0
src/apis/service/search/table/index.js

@@ -0,0 +1,7 @@
+// 企业客户/供应商账号相关
+import http from "@/apis/service/search/table/axios";
+const api = "Stats/";
+export default {
+  // 退货统计
+  list: (data, params) => http(api + "qrdcptj", data, "post", params),
+};

+ 22 - 0
src/apis/service/system/menu/index.js

@@ -0,0 +1,22 @@
+// 系统权限-菜单管理-贾增超
+import http from '@/apis/axios'
+const api = 'Admin/'
+export default {
+  // 分页查询
+  list: (data, params) => http(api + 'menulist', data, 'post', params),
+  // 更新
+  update: (data, params) => http(api + 'menusave', data, 'post', params),
+  // 菜单状态
+  menustatus: (data, params) => http(api + 'menustatus', data, 'post', params),
+
+  // 按钮
+  // 列表
+  actionList: (data, params) => http(api + 'menuaction', data, 'post', params),
+  // 添加
+  actionadd: (data, params) => http(api + 'menuactionadd', data, 'post', params),
+  // 更新
+  actionedit: (data, params) => http(api + 'menuactionsave', data, 'post', params),
+  // 状态
+  actionstatus: (data, params) =>
+    http(api + 'menuactionstatus', data, 'post', params)
+}

+ 7 - 0
src/apis/service/system/oplog/index.js

@@ -0,0 +1,7 @@
+// 物业管理员
+import http from '@/apis/axios'
+const api = 'Admin/'
+export default {
+  // 分页查询
+  list: (data, params) => http(api + 'loglist', data, 'post', params)
+}

+ 11 - 0
src/apis/service/system/parameter/index.js

@@ -0,0 +1,11 @@
+// 业务参数
+import http from '@/apis/axios'
+const api = 'admin/'
+export default {
+  // 详情
+  detail: (data, params) => http(api + 'system', data, 'post', params),
+  // 列表
+  list: (data, params) => http(api + 'system', data, 'post', params),
+  // 更新
+  update: (data, params) => http(api + 'setconf', data, 'post', params)
+}

+ 15 - 0
src/apis/service/system/talent/index.js

@@ -0,0 +1,15 @@
+// 物业管理员
+import http from '@/apis/axios'
+const api = '/apis/ditpcs/company/sysManager/'
+export default {
+  // 添加
+  add: (data, params) => http(api + 'add', data, 'post', params),
+  // 删除
+  delete: (data, params) => http(api + 'delete', data, 'post', params),
+  // 分页查询
+  list: (data, params) => http(api + 'list', data, 'post', params),
+  // 详情
+  detail: (data, params) => http(api + 'detail', data, 'post', params),
+  // 更新
+  update: (data, params) => http(api + 'update', data, 'post', params)
+}

+ 7 - 0
src/apis/service/system/updates/index.js

@@ -0,0 +1,7 @@
+// 版本日志
+import http from '@/apis/axios'
+const api = 'Admin/'
+export default {
+  // 分页查询
+  list: (data, params) => http(api + 'versionlist', data, 'post', params)
+}

+ 22 - 0
src/apis/service/user/index.js

@@ -0,0 +1,22 @@
+import http from '@/apis/axios'
+
+export default {
+  // 获取验证码
+  verfiy: (data, params) => http(`Api/verify_code`, data, 'post', params),
+  // 密码重置
+  resetpwd: (data, params) => http(`Api/passmobile`, data, 'post', params),
+  // 手机号更换
+  resetmobile: (data, params) =>
+    http(`Api/resetmobile`, data, 'post', params),
+  // 密码修改
+  setpwd: (data, params) => http(`Api/passsave`, data, 'post', params),
+  // 获取导航列表
+  list: (data, params) => http(`admin/menu`, data, 'post', params),
+  // 获取个人信息
+  detail: (data, params) => http(`Admin/userinfo`, data, 'post', params),
+  // 获取最新版本号
+  version: (data, params) => http(`Admin/lastversion`, data, 'post', params),
+   // 个人信息完善
+   prefect: (data, params) => http(`Api/prefect`, data, 'post', params),
+  
+}

+ 10 - 0
src/apis/url-config.js

@@ -0,0 +1,10 @@
+import { api, ding } from '@/config'
+export default {
+  //后端接口url
+  baseURL: api.baseApi,
+  //企业id
+  corpId: ding.CorpId,
+  //应用凭证
+  agentId: ding.AgentId,
+  tableURL: 'http://inv.sit.wanyuhengtong.com/',
+}

+ 82 - 0
src/apis/user/axios.js

@@ -0,0 +1,82 @@
+// import axios from 'axios'
+// import Router from '@/router/index'
+// import store from '@/store'
+import urlConfig from '@/apis/url-config'
+import {
+  getToken, removeMenu,
+  removeBtn, removeToken
+} from '@/utils/auth'
+const header = {
+  // "X-Requested-With": "XMLHttpRequest",
+  // "X-Frame-Options": "DENY", // 告诉浏览器不要(DENY)把这个网页放在iFrame内,通常的目的就是要帮助用户对抗点击劫持。
+  // "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8"
+}
+window.ajaxTimeout = 20000
+export default async (
+  url = '',
+  data = {},
+  type = 'GET',
+  params = {},
+  headers = header,
+  onUploadProgress
+) => {
+  type = url.method.toLowerCase()
+  // console.log(url)
+  const obj = {
+    method: type,
+    baseURL: '',
+    url: urlConfig.baseURL + url.url,
+    data: url.data,
+    params,
+    // // `onUploadProgress` 允许为上传处理进度事件
+    // onUploadProgress: function(progressEvent) {
+    //   // 对原生进度事件的处理
+    // },
+    // // `onDownloadProgress` 允许为下载处理进度事件
+    // onDownloadProgress: function(progressEvent) {
+    //   // 对原生进度事件的处理
+    // },
+    // `cancelToken` 指定用于取消请求的 cancel token
+    // (查看后面的 Cancellation 这节了解更多)
+    // cancelToken: new CancelToken(function (cancel) {
+    // }),
+    processData: true, // 告诉axios不要去处理发送的数据(重要参数)
+    timeout: window.ajaxTimeout,
+    headers,
+    onUploadProgress
+  }
+  if (onUploadProgress && typeof onUploadProgress === 'function') {
+    obj.onUploadProgress = onUploadProgress
+  }
+  // 请求拦截器
+  axios.interceptors.request.use(
+    config => {
+      if (!config.data.token) {
+        config.data.token = getToken()
+      }
+      return config
+    },
+    error => {
+      // 错误抛到业务代码
+      return Promise.reject(new Error('服务器异常,请联系管理员!'))
+    }
+  )
+  // 添加响应拦截器
+  axios.interceptors.response.use(
+    async response => {
+      return response
+    },
+    error => {
+      return Promise.reject(error.response.data)
+    }
+  )
+  return new Promise((resolve, reject) => {
+    axios(obj)
+      .then(response => {
+        resolve(response.data)
+      })
+      .catch(res => {
+        reject(res)
+      })
+  })
+}

+ 38 - 0
src/apis/user/index.js

@@ -0,0 +1,38 @@
+import http from '@/apis/user/axios'
+// import http from "@/apis/axios";
+// 登录
+export function login(data) {
+  return http({
+    url: `Api/login`,
+    method: 'post',
+    data
+  })
+}
+// 获取个人信息
+export function userinfo(data) {
+  return http({
+    url: `Api/userinfo`,
+    method: 'post',
+    data
+  })
+}
+// 获取导航列表
+export function menuList(data) {
+  console.log(data)
+  return http({
+    url: `Admin/menu`,
+    method: 'post',
+    data
+  })
+}
+// 钉钉获取用户信息
+export function dingdingdetail(data) {
+  return http({
+    url: `Api/dintalk`,
+    method: 'post',
+    data
+  })
+}
+
+
+

BIN
src/assets/401_images/401.gif


BIN
src/assets/404_images/404.png


BIN
src/assets/404_images/404_cloud.png


+ 49 - 0
src/assets/css/btn.scss

@@ -0,0 +1,49 @@
+// 点击超链接 闪烁效果
+.text-white {
+  cursor: pointer;
+}
+.text-white:active {
+  color: #000;
+  cursor: pointer;
+  opacity: 0.8; // 这里重要,就是通过这个透明度来设置
+}
+// 点击按钮白光闪过
+.btn-white {
+  cursor: pointer;
+}
+.btn-white:active {
+  color: #fff;
+  border-radius: 5px;
+  cursor: pointer;
+  // background: #000;
+  opacity: 0.5; // 这里重要,就是通过这个透明度来设置
+}
+// 水波纹特效
+.btn-ripple {
+  position: relative;
+  cursor: pointer;
+  overflow: hidden;
+}
+
+.btn-ripple:after {
+  content: "";
+  background: rgba(255, 255, 255, 0.3);
+  display: block;
+  position: absolute;
+  border-radius: 50%;
+  padding-top: 240%;
+  padding-left: 240%;
+  margin-top: -160%;
+  margin-left: -50%;
+  opacity: 0;
+  transition: all 0.8s;
+}
+
+.btn-ripple:active:after {
+  padding-top: 0;
+  padding-left: 0;
+  margin-top: 0;
+  margin-left: 0;
+  opacity: 1;
+  transition: 0s;
+}

+ 220 - 0
src/assets/css/common.scss

@@ -0,0 +1,220 @@
+body,
+div,
+span,
+header,
+footer,
+nav,
+section,
+aside,
+article,
+ul,
+dl,
+dt,
+dd,
+li,
+a,
+p,
+h1,
+h2,
+h3,
+h4,
+h5,
+h6,
+i,
+b,
+textarea,
+button,
+input,
+select,
+figure,
+figcaption {
+  padding: 0;
+  margin: 0;
+  list-style: none;
+  font-style: normal;
+  text-decoration: none;
+  border: none;
+  font-weight: 500;
+  font-family: "Microsoft Yahei", sans-serif;
+  -webkit-tap-highlight-color: transparent;
+  -webkit-font-smoothing: antialiased;
+
+  &:focus {
+    outline: none;
+  }
+}
+
+ul,
+li {
+  margin: 0;
+  padding: 0;
+  list-style: none;
+}
+ul {
+  list-style-type: none;
+  width: auto;
+  margin: 0 auto;
+}
+li {
+  display: block;
+}
+
+input[type="button"],
+input[type="submit"],
+input[type="search"],
+input[type="reset"] {
+  -webkit-appearance: none;
+}
+
+textarea {
+  -webkit-appearance: none;
+}
+
+html,
+body {
+  height: 100%;
+  width: 100%;
+  background-color: #fff;
+}
+
+.fillcontain {
+  height: 100%;
+  width: 100%;
+}
+
+.clear:after {
+  content: "";
+  display: block;
+  clear: both;
+}
+
+.clear {
+  zoom: 1;
+}
+
+.back_img {
+  background-repeat: no-repeat;
+  background-size: 100% 100%;
+}
+
+.margin {
+  margin: 0 auto;
+}
+
+.left {
+  float: left;
+}
+
+.right {
+  float: right;
+}
+
+.hide {
+  display: none;
+}
+
+.show {
+  display: block;
+}
+
+.ellipsis {
+  overflow: hidden;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+}
+
+.pointer {
+  cursor: pointer;
+}
+
+input::-webkit-input-placeholder,
+textarea::-webkit-input-placeholder {
+  color: #666;
+  font-size: 16px;
+}
+
+input:-moz-placeholder,
+textarea:-moz-placeholder {
+  color: #666;
+  font-size: 16px;
+}
+
+input::-moz-placeholder,
+textarea::-moz-placeholder {
+  color: #666;
+  font-size: 16px;
+}
+
+input:-ms-input-placeholder,
+textarea:-ms-input-placeholder {
+  color: #666;
+  font-size: 16px;
+}
+
+/**图片抖动**/
+.shake {
+  cursor: pointer;
+
+  &:hover {
+    img {
+      animation: tada 0.6s 0.2s ease both;
+    }
+  }
+}
+.shake-flipInY {
+  cursor: pointer;
+
+  &:hover {
+    img {
+      animation: flipInY 0.6s 0.2s ease both;
+    }
+  }
+}
+
+@keyframes tada {
+  0% {
+    transform: scale(1);
+  }
+
+  10%,
+  20% {
+    transform: scale(0.9) rotate(-3deg);
+  }
+
+  30%,
+  50%,
+  70%,
+  90% {
+    transform: scale(1.1) rotate(3deg);
+  }
+
+  40%,
+  60%,
+  80% {
+    transform: scale(1.1) rotate(-3deg);
+  }
+
+  100% {
+    transform: scale(1) rotate(0);
+  }
+}
+
+@keyframes flipInY {
+  0% {
+    transform: perspective(400px) rotateY(90deg);
+    opacity: 0;
+  }
+
+  40% {
+    transform: perspective(400px) rotateY(-10deg);
+  }
+
+  70% {
+    transform: perspective(400px) rotateY(10deg);
+  }
+
+  100% {
+    transform: perspective(400px) rotateY(0deg);
+    opacity: 1;
+  }
+}

+ 38 - 0
src/assets/css/index.scss

@@ -0,0 +1,38 @@
+@import "./common.scss";
+@import "./btn.scss";
+// // @import "./scrollbar.scss";
+// @import "./scss/index-ic.css";
+// @import "./scss/iconFont.css";
+
+#app {
+  height: 100%;
+  width: 100%;
+  background-color: #fff;
+}
+.box-home {
+  width: 1196px;
+  margin: 0 auto;
+}
+.scale-big {
+  &:hover {
+    transition: all 0.3s ease-in-out;
+    transform: scale(1.05);
+  }
+}
+.scale-big-img {
+  &:hover {
+    img {
+      transition: all 0.6s ease-in-out;
+      transform: scale(1.05);
+    }
+  }
+}
+
+input[type="number"] {
+  -moz-appearance: textfield;
+}
+input[type="number"]::-webkit-inner-spin-button,
+input[type="number"]::-webkit-outer-spin-button {
+  -webkit-appearance: none;
+  margin: 0;
+}

+ 71 - 0
src/assets/css/mixin.scss

@@ -0,0 +1,71 @@
+$blue: #3190e8;
+$bc: #e4e4e4;
+$fc: #fff;
+
+// 背景图片地址和大小
+@mixin bis($url) {
+  background-image: url($url);
+  background-repeat: no-repeat;
+  background-size: 100% 100%;
+}
+
+//定位全屏
+@mixin allcover {
+  position: absolute;
+  top: 0;
+  right: 0;
+}
+
+//transform上下左右居中
+@mixin ctt {
+  position: absolute;
+  top: 50%;
+  left: 50%;
+  transform: translate(-50%, -50%);
+}
+//定位上下左右居中
+@mixin ctp($width, $height) {
+  position: absolute;
+  top: 50%;
+  left: 50%;
+  margin-top: -$height / 2;
+  margin-left: -$width / 2;
+}
+
+//定位上下居中
+@mixin tb {
+  position: absolute;
+  top: 50%;
+  transform: translateY(-50%);
+}
+
+//定位左右居中
+@mixin lr {
+  position: absolute;
+  left: 50%;
+  transform: translateX(-50%);
+}
+
+//宽高
+@mixin wh($width, $height) {
+  width: $width;
+  height: $height;
+}
+
+//字体大小、行高、字体
+@mixin ft($size, $line-height) {
+  font-size: $size;
+  line-height: $line-height;
+}
+
+//字体大小,颜色
+@mixin sc($size, $color) {
+  font-size: $size;
+  color: $color;
+}
+
+//flex 布局和 子元素 对其方式
+@mixin fj($type: space-between) {
+  display: flex;
+  justify-content: $type;
+}

+ 24 - 0
src/assets/css/scrollbar.less

@@ -0,0 +1,24 @@
+/*定义滚动条高宽及背景 高宽分别对应横竖滚动条的尺寸*/
+// ::-webkit-scrollbar {
+//   // width: 10px;
+//   // height: 10px;
+//   width: 0px;
+//   height: 0px;
+//   background-color: #f5f5f5;
+// }
+
+// /*定义滚动条轨道 内阴影+圆角*/
+// ::-webkit-scrollbar-track {
+//   -webkit-box-shadow: inset 0 0 1px rgba(0, 0, 0, 0);
+//   // border-radius: 10px;
+//   border-radius: 0px;
+//   background-color: #f5f5f5;
+// }
+
+// /*定义滑块 内阴影+圆角*/
+// ::-webkit-scrollbar-thumb {
+//   // border-radius: 10px;
+//   border-radius: 0px;
+//   -webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3);
+//   background-color: #5555553b;
+// }

+ 43 - 0
src/assets/css/scss/base.scss

@@ -0,0 +1,43 @@
+body,
+html {
+  line-height: 1;
+  font-weight: 200;
+  font-family: "PingFang SC", "STHeitiSC-Light", "Helvetica-Light", arial,
+    sans-serif;
+}
+
+.clearfix {
+  display: inline-block;
+
+  &::after {
+    display: block;
+    content: ".";
+    height: 0;
+    line-height: 0;
+    clear: both;
+    visibility: hidden;
+  }
+}
+$media: screen;
+$feature-webkit: -webkit-min-device-pixel-ratio; //设备像素比
+$feature: min-device-pixel-ratio; //设备像素比
+$value15: 1.5;
+$value2: 2; // 为了实现手机上的1像素做准备
+// 实现不同缩放比手机上,做正确的缩放根据Y轴
+// 根据设备的最小DPI去指定缩放的比例scaleY(0.7)或者0.5倍,这样就能实现真正的一像素
+@media #{$media} and ($feature-webkit: $value15),($feature: $value15) {
+  .border-1px {
+    &::after {
+      -webkit-transform: scaleY(0.7);
+      transform: scaleY(0.7);
+    }
+  }
+}
+@media #{$media} and ($feature-webkit: $value2),($feature: $value2) {
+  .border-1px {
+    &::after {
+      -webkit-transform: scaleY(0.5);
+      transform: scaleY(0.5);
+    }
+  }
+}

Alguns ficheiros não foram mostrados porque muitos ficheiros mudaram neste diff