Jelajahi Sumber

0911一些零星修改提交

tom.xu 10 bulan lalu
induk
melakukan
b33c69b1d8
52 mengubah file dengan 2940 tambahan dan 1710 penghapusan
  1. 77 78
      config/index.js
  2. 4 3
      index.html
  3. 2 0
      src/App.vue
  4. 44 66
      src/assets/css/index.css
  5. TEMPAT SAMPAH
      src/assets/excel/temp.xlsx
  6. TEMPAT SAMPAH
      src/assets/images/34567.png
  7. TEMPAT SAMPAH
      src/assets/images/345672.png
  8. TEMPAT SAMPAH
      src/assets/images/WechatIMG5377.png
  9. TEMPAT SAMPAH
      src/assets/images/bg.png
  10. TEMPAT SAMPAH
      src/assets/images/bg1.png
  11. TEMPAT SAMPAH
      src/assets/images/bg2.png
  12. TEMPAT SAMPAH
      src/assets/images/systemless.png
  13. TEMPAT SAMPAH
      src/assets/video/5373_1668503119.mp4
  14. 4 1
      src/components/Pagination.vue
  15. 1 1
      src/components/PopUpPrompt.vue
  16. 15 14
      src/config.js
  17. 119 107
      src/main.js
  18. 3 1
      src/modules/404Error.vue
  19. 21 115
      src/modules/Home.vue
  20. 235 0
      src/modules/Login.vue
  21. 2 2
      src/modules/createmodel/ModelContainer.vue
  22. 182 0
      src/modules/createmodel/alipay/components/DetailTable.vue
  23. 241 152
      src/modules/createmodel/alipay/components/ResultTable.vue
  24. 148 76
      src/modules/createmodel/alipay/components/SearchSort.vue
  25. 106 0
      src/modules/createmodel/components/DetailTable.vue
  26. 2 0
      src/modules/createmodel/components/FileName.vue
  27. 328 135
      src/modules/createmodel/components/FileTable.vue
  28. 285 0
      src/modules/createmodel/components/MultidimensionalTable.vue
  29. 2 8
      src/modules/createmodel/file/File.vue
  30. 145 137
      src/modules/createmodel/file/components/ImportFile.vue
  31. 124 107
      src/modules/createmodel/file/components/ResultTable.vue
  32. 151 150
      src/modules/createmodel/group/Group.vue
  33. 28 34
      src/modules/createmodel/model/components/ResultTable.vue
  34. 14 0
      src/modules/home/Footer.vue
  35. 116 0
      src/modules/home/Grouper.vue
  36. 71 0
      src/modules/home/Header.vue
  37. 143 0
      src/modules/home/Sidebar.vue
  38. 66 65
      src/router/index.js
  39. 0 1
      src/service/commonService.js
  40. 2 0
      src/service/createmodel/aliPayService.js
  41. 8 0
      src/service/createmodel/apiLogin.js
  42. 30 16
      src/service/createmodel/fileService.js
  43. 1 1
      src/service/createmodel/groupService.js
  44. 1 3
      src/service/createmodel/modelService.js
  45. 3 0
      src/service/generate-map/ImageService.js
  46. 37 146
      src/store/commonStore.js
  47. 17 21
      src/store/createmodel/aliPayStore.js
  48. 80 147
      src/store/createmodel/fileStore.js
  49. 26 53
      src/store/createmodel/groupStore.js
  50. 4 19
      src/store/createmodel/modelStore.js
  51. 52 51
      src/utils/fetch.js
  52. TEMPAT SAMPAH
      static/excel/temp.xlsx

+ 77 - 78
config/index.js

@@ -1,93 +1,92 @@
-'use strict'
+"use strict";
 // Template version: 1.2.3
 // see http://vuejs-templates.github.io/webpack for documentation.
 
-const path = require('path')
+const path = require("path");
 
 module.exports = {
-  dev: {
-
-    // Paths
-    assetsSubDirectory: 'static',
-    assetsPublicPath: '/',
-    proxyTable: {
-        //开发环境以ts开头的都被代理,实现跨域
-        '/api':{
-            changeOrigin: true,
-            //204是线上地址
-            // target: 'http://192.168.0.181:9315/',
-            target: 'http://127.0.0.1:9315/',
-            secure: false,
-            pathRewrite: {
-              '^/api': ''
+    dev: {
+        // Paths
+        assetsSubDirectory: "static",
+        assetsPublicPath: "/",
+        proxyTable: {
+            // 开发环境以ts开头的都被代理,实现跨域
+            "/api": {
+                changeOrigin: true,
+                // 204是线上地址
+                // target: 'http://192.168.0.181:9315/',
+                target: "http://ieven.wenzhouteck.net/",
+                secure: false,
+                pathRewrite: {
+                    "^/api": ""
+                }
             }
-        }
-    },
+        },
+
+        // Various Dev Server settings
+        host: "localhost", // can be overwritten by process.env.HOST
+        port: 8087, // can be overwritten by process.env.HOST, if port is in use, a free one will be determined
+        autoOpenBrowser: false,
+        errorOverlay: true,
+        notifyOnErrors: true, // should to be true
+        poll: false, // https://webpack.js.org/configuration/dev-server/#devserver-watchoptions-
 
-    // Various Dev Server settings
-    host: 'localhost', // can be overwritten by process.env.HOST
-    port: 8087, // can be overwritten by process.env.HOST, if port is in use, a free one will be determined
-    autoOpenBrowser: false,
-    errorOverlay: true,
-    notifyOnErrors: true, // should to be true
-    poll: false, // https://webpack.js.org/configuration/dev-server/#devserver-watchoptions-
+        // Use Eslint Loader?
+        // If true, your code will be linted during bundling and
+        // linting errors and warnings will be shown in the console.
+        useEslint: false,
+        // If true, eslint errors and warnings will also be shown in the error overlay
+        // in the browser.
+        showEslintErrorsInOverlay: false,
 
-    // Use Eslint Loader?
-    // If true, your code will be linted during bundling and
-    // linting errors and warnings will be shown in the console.
-    useEslint: false,
-    // If true, eslint errors and warnings will also be shown in the error overlay
-    // in the browser.
-    showEslintErrorsInOverlay: false,
+        /**
+         * Source Maps
+         */
 
-    /**
-     * Source Maps
-     */
+        // https://webpack.js.org/configuration/devtool/#development
+        devtool: "eval-source-map",
+
+        // If you have problems debugging vue-files in devtools,
+        // set this to false - it *may* help
+        // https://vue-loader.vuejs.org/en/options.html#cachebusting
+        cacheBusting: true,
+
+        // CSS Sourcemaps off by default because relative paths are "buggy"
+        // with this option, according to the CSS-Loader README
+        // (https://github.com/webpack/css-loader#sourcemaps)
+        // In our experience, they generally work as expected,
+        // just be aware of this issue when enabling this option.
+        cssSourceMap: false
+    },
 
-    // https://webpack.js.org/configuration/devtool/#development
-    devtool: 'eval-source-map',
+    build: {
+        // Template for index.html
+        index: path.resolve(__dirname, "../dist/index.html"),
 
-    // If you have problems debugging vue-files in devtools,
-    // set this to false - it *may* help
-    // https://vue-loader.vuejs.org/en/options.html#cachebusting
-    cacheBusting: true,
+        // Paths
+        assetsRoot: path.resolve(__dirname, "../dist"),
+        assetsSubDirectory: "static",
+        assetsPublicPath: "/",
 
-    // CSS Sourcemaps off by default because relative paths are "buggy"
-    // with this option, according to the CSS-Loader README
-    // (https://github.com/webpack/css-loader#sourcemaps)
-    // In our experience, they generally work as expected,
-    // just be aware of this issue when enabling this option.
-    cssSourceMap: false,
-  },
-  
-  build: {
-    // Template for index.html
-    index: path.resolve(__dirname, '../dist/index.html'),
+        /**
+         * Source Maps
+         */
 
-    // Paths
-    assetsRoot: path.resolve(__dirname, '../dist'),
-    assetsSubDirectory: 'static',
-    assetsPublicPath: '/',
+        productionSourceMap: false,
+        // https://webpack.js.org/configuration/devtool/#production
+        devtool: "#source-map",
 
-    /**
-     * Source Maps
-     */
+        // Gzip off by default as many popular static hosts such as
+        // Surge or Netlify already gzip all static assets for you.
+        // Before setting to `true`, make sure to:
+        // npm install --save-dev compression-webpack-plugin
+        productionGzip: false,
+        productionGzipExtensions: ["js", "css"],
 
-    productionSourceMap: false,
-    // https://webpack.js.org/configuration/devtool/#production
-    devtool: '#source-map',
-    
-    // Gzip off by default as many popular static hosts such as
-    // Surge or Netlify already gzip all static assets for you.
-    // Before setting to `true`, make sure to:
-    // npm install --save-dev compression-webpack-plugin
-    productionGzip: false,
-    productionGzipExtensions: ['js', 'css'],
-    
-    // Run the build command with an extra argument to
-    // View the bundle analyzer report after build finishes:
-    // `npm run build --report`
-    // Set to `true` or `false` to always turn it on or off
-    bundleAnalyzerReport: process.env.npm_config_report
-  }
-}
+        // Run the build command with an extra argument to
+        // View the bundle analyzer report after build finishes:
+        // `npm run build --report`
+        // Set to `true` or `false` to always turn it on or off
+        bundleAnalyzerReport: process.env.npm_config_report
+    }
+};

+ 4 - 3
index.html

@@ -3,9 +3,10 @@
 
 <head>
     <meta charset="utf-8">
-    <meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,minimum-scale=1.0,user-scalable=no">
+    <meta name="viewport"
+        content="width=device-width,initial-scale=1.0,maximum-scale=1.0,minimum-scale=1.0,user-scalable=no">
     <meta http-equiv="X-UA-Compatible" content="IE=edge">
-    <title>追迹者-资金清洗研判系统</title>
+    <title>追迹者-三方支付数据分析 </title>
 </head>
 
 <body>
@@ -13,4 +14,4 @@
     <!--<script src="./static/settings/settings-base.js" type="text/javascript"></script>-->
 </body>
 
-</html>
+</html>

+ 2 - 0
src/App.vue

@@ -82,6 +82,8 @@
         position: absolute;
         top: 0;
         bottom: 0;
+        left:0;
+        right: 0;
         min-width: 1240px;
         width: 100%;
         font-family: "Helvetica Neue", Helvetica, "PingFang SC", "Hiragino Sans GB",

+ 44 - 66
src/assets/css/index.css

@@ -5,7 +5,7 @@
 
 /*未匹配列名、异常数据diglog middle*/
 .el-dialog .el-dialog__middle {
-    color: #fff;
+    color: whitesmoke;
     text-align: left;
     height: 36px;
     line-height: 36px;
@@ -20,29 +20,17 @@
 
 
 
-
 /* table */
 .nb-table {
     width: 100%;
     overflow: hidden;
-}
-
-.nb-table--bgc {
     border: 2px outset #3ae6b2;
 }
 
-.nb-table--border,
-.nb-topsearch--border {
-    border: 1px solid #506d8b;
-}
-
-
-
-
 .case-inselect .el-input__inner {
     background-color: #032d58;
     border: 1px solid #409eff;
-    color: #fff;
+    color: whitesmoke;
 }
 
 /********** ElementUI  公用样式 调整 *********/
@@ -65,19 +53,14 @@
     margin-left: 10px;
     margin-bottom: 10px;
 }
-
 .el-tabs--left .el-tabs__header {
     position: absolute;
     width: 100px;
 }
 
-.el-collapse-item__arrow {
-    margin-right: 18px;
-}
-
 .el-form-item .el-form-item__label {
     min-width: 80px;
-    color: rgba(37, 39, 56, 0.75);
+    color: whitesmoke;
     font-weight: 600;
 }
 
@@ -89,7 +72,6 @@
 /* select */
 
 /* 下拉框显示区域 */
-
 .el-select-dropdown,
 .el-cascader-menus {
     max-width: 90vw;
@@ -104,13 +86,13 @@
 .el-cascader .el-input__inner {
     border-radius: 0;
     border: 1px solid #506d8b;
-    color: #fff;
+    color: whitesmoke;
     background-color: #032d58;
 }
 
 .el-select-dropdown,
 .el-cascader-menus {
-    color: #fff;
+    color: whitesmoke;
     border: none;
     background: none;
 }
@@ -121,7 +103,7 @@
 }
 
 .el-select-dropdown__empty {
-    color: #fff;
+    color: whitesmoke;
     background-color: #1f679d;
 }
 
@@ -129,7 +111,7 @@
 .el-cascader-menu__item,
 .el-cascader__label,
 .el-cascader__label span {
-    color: #fff;
+    color: whitesmoke;
 }
 
 .el-select-dropdown.is-multiple .el-select-dropdown__item.selected,
@@ -141,16 +123,15 @@
 .el-cascader-menu__item:hover,
 .el-cascader-menu__item.is-active {
     background-color: #032d58;
-    color: #fff;
+    color: whitesmoke;
 }
-
 .el-select .el-tag {
     background-color: rgba(0, 0, 0, 0);
 }
 
 .el-tag--info,
 .el-tag--info .el-tag__close {
-    color: #fff;
+    color: whitesmoke;
 }
 
 .el-cascader-menu {
@@ -159,19 +140,18 @@
 
 
 /* el-pagination */
-
 .el-pagination button,
 .el-pagination span:not([class*="suffix"]) {
     display: inline;
 }
 
 .el-pagination span:not([class*="suffix"]) {
-    color: #fff;
+    color: whitesmoke;
 }
 
 .el-pagination .btn-next,
 .el-pagination .btn-prev {
-    color: #fff;
+    color: whitesmoke;
     background: center center no-repeat #104072;
 }
 
@@ -179,7 +159,7 @@
 .el-pagination .el-select .el-input .el-input__inner,
 .el-pagination__editor.el-input .el-input__inner {
     background-color: #104072;
-    color: #fff;
+    color: whitesmoke;
 }
 
 .el-pagination button:disabled {
@@ -206,11 +186,11 @@
 .el-table__expanded-cell,
 .el-table__header-wrapper {
     background-color: #104072;
-    background: transparent;
+    /* background: transparent; */
 }
 
 .el-table__empty-text {
-    color: #fff;
+    color: whitesmoke;
 }
 
 .el-table__fixed-footer-wrapper .el-table-column--selection {
@@ -258,13 +238,13 @@
 .el-table thead.is-group th {
     text-align: center;
     border-left: 1px solid #fafafa;
-    color: #fff;
+    color: whitesmoke;
     background: #104072;
     border: none;
 }
 
 .el-table thead th .cell {
-    color: #fff;
+    color: whitesmoke;
     font-weight: 600;
     font-size: 13px;
     background: #104072;
@@ -291,20 +271,20 @@
 .el-table tr,
 .el-table .hover-row {
     background-color: #104072;
-    color: #fff;
+    color: whitesmoke;
     height: 40px;
 }
 
 .el-table__fixed tbody td {
     background-color: #104072;
-    color: #fff;
+    color: whitesmoke;
     height: 40px;
 }
 
 .el-table__footer-wrapper tbody td,
 .el-table__header-wrapper tbody td {
     background-color: #104072;
-    color: #fff;
+    color: whitesmoke;
     height: 40px;
     border-top: 1px solid #506d8b;
 }
@@ -321,7 +301,7 @@
 
 .el-table .el-table__body tr .el-button {
     background-color: #104072;
-    color: #fff;
+    color: whitesmoke;
     border: none;
     border: 1px solid #506d8b;
 }
@@ -339,7 +319,7 @@
 .el-table .el-table__body tr .el-button:active,
 .el-table .el-table__body tr .el-button:hover {
     background-color: #032d58;
-    color: #fff;
+    color: whitesmoke;
 }
 
 .el-table .el-table__body tr .el-button.is-disabled,
@@ -365,7 +345,7 @@
     padding: 10px;
 }
 .el-drawer__header>:first-child {
-    color: white;
+    color: whitesmoke;
     font-size: 16px;
     margin-left: 10px;
 }
@@ -377,7 +357,7 @@
 .el-card {
     border:none;
     background-color: #104072;
-    color: #ffffff;
+    color: whitesmoke;
 }
 
 .el-card__header {
@@ -387,13 +367,13 @@
 /* el-dialog */
 
 .el-dialog__header .el-dialog__title {
-    color: white;
+    color: whitesmoke;
     line-height: 16px;
     font-size: 16px;
 }
 
 .el-dialog__headerbtn .el-dialog__close {
-    color: white;
+    color: whitesmoke;
 }
 
 .el-dialog__headerbtn {
@@ -402,7 +382,7 @@
 }
 
 .el-dialog {
-    border: 3px outset #3ae6b2;
+    border: 2px outset #3ae6b2;
     background-color: #032d58;
     padding:5px;
 }
@@ -410,7 +390,7 @@
 .el-dialog .el-dialog__header {
     background-color: #104072;
     text-align: center;
-    color: white;
+    color: whitesmoke;
     overflow: hidden;
     padding: 10px;
     border-bottom: 3px solid #2d5783;
@@ -422,7 +402,7 @@
 }
 
 .el-dialog .el-dialog__body .el-checkbox {
-    color: #fff;
+    color: whitesmoke;
 }
 
 .el-dialog .el-checkbox.is-bordered {
@@ -439,7 +419,7 @@
 .el-upload-list__item,
 .el-upload-list__item-name,
 .el-upload-list__item .el-icon-close {
-    color: #fff;
+    color: whitesmoke;
 }
 
 .el-upload-list__item:hover {
@@ -450,7 +430,7 @@
 /* el-radio */
 
 .el-radio {
-    color: #fff;
+    color: whitesmoke;
 }
 
 .el-radio+.el-radio {
@@ -458,7 +438,7 @@
 }
 
 .el-checkbox__label {
-    color: white;
+    color: whitesmoke;
 }
 
 
@@ -478,7 +458,7 @@
 }
 
 .el-collapse-item__content {
-    color: #fff;
+    color: whitesmoke;
     text-align: left;
     padding: 15px;
 }
@@ -491,7 +471,7 @@
     padding-left: 10px;
     background-color: #104072;
     text-align: left;
-    color: white;
+    color: whitesmoke;
     border-bottom: 3px solid #2d5783;
 }
 
@@ -507,7 +487,7 @@
     background: #032d58;
     border: 1px solid transparent !important;
     padding: 8px;
-    color: #fff;
+    color: whitesmoke;
 }
 
 .el-tabs__nav-wrap {
@@ -516,12 +496,10 @@
 
 
 /* 进度条 百分数 */
-
 .el-progress__text {
-    color: #fff;
+    color: whitesmoke;
 }
 
-
 /* 进度条 动态显示条位置 */
 .el-upload-list__item:first-child {
     margin-bottom: 10px;
@@ -530,7 +508,7 @@
 
 /*  文字提示tooltip  */
 .el-tooltip__popper.is-light {
-    color: #fff;
+    color: whitesmoke;
     background-color: #1f679d;
 }
 
@@ -553,22 +531,21 @@
     margin-right: 12px;
 }
 
-
 /* el-descriptions */
 .el-descriptions__body {
-    color: #ecf0f4;
+    color: whitesmoke;
     background-color: #032d58;
 }
 .el-descriptions__title {
     font-size: 16px;
     font-weight: 700;
-    color: white;
+    color: whitesmoke;
 }
 .el-descriptions .is-bordered .el-descriptions-item__cell {
     border: 1px solid #104072;
 }
 .el-descriptions-item__label.is-bordered-label {
-    color: #ffffff;
+    color: whitesmoke;
     background: #032d58;
 }
 
@@ -581,12 +558,12 @@
     width: 100%;
     height: 28px;
     background-color: #032d58;
-    color: #fff;
+    color: whitesmoke;
 }
 .el-input.is-disabled .el-input__inner {
     background-color: #032d58;
     border: 1px solid #2767cb;
-    color: #fff;
+    color: whitesmoke;
     cursor: not-allowed;
 }
 
@@ -599,7 +576,8 @@
     margin: 0 0;
 }
 .el-tabs__item{
-    color:#fefefe;
+    padding:0px;
+    color:whitesmoke;
     width: 50%;
     text-align: center;
     background: #032d58;
@@ -614,4 +592,4 @@
 .el-tabs__content {
     height: 0px;
     background: #2d5783;
-}
+}

TEMPAT SAMPAH
src/assets/excel/temp.xlsx


TEMPAT SAMPAH
src/assets/images/34567.png


TEMPAT SAMPAH
src/assets/images/345672.png


TEMPAT SAMPAH
src/assets/images/WechatIMG5377.png


TEMPAT SAMPAH
src/assets/images/bg.png


TEMPAT SAMPAH
src/assets/images/bg1.png


TEMPAT SAMPAH
src/assets/images/bg2.png


TEMPAT SAMPAH
src/assets/images/systemless.png


TEMPAT SAMPAH
src/assets/video/5373_1668503119.mp4


+ 4 - 1
src/components/Pagination.vue

@@ -52,17 +52,20 @@
         mounted(){},
         methods: {
              handleSizeChange(val) {
+                 console.log('come in')
                 let payload = {
                     ...this.upParam
                 };
+                payload.page = 1
                 payload.pageSize = val;
+                this.$store.commit('set_current_temp_pagesize', val) 
                 this.$emit("loadMethod", payload);
-                // this.$emit("loadMethod", payload, this);
             },
             handleCurrentChange(val) {
                 let payload = {
                     ...this.upParam
                 };
+                payload.pageSize = this.$store.getters.getTpagesize;
                 payload.page = val;
                 this.$emit("loadMethod", payload);
             },

+ 1 - 1
src/components/PopUpPrompt.vue

@@ -41,7 +41,7 @@
     }
 
     .el-message-box__title {
-        color: #fff;
+        color: whitesmoke;
     }
 
     .el-message-box__message .left {

+ 15 - 14
src/config.js

@@ -13,15 +13,15 @@ import copyUrl from "@/assets/images/copy.png";
  ****/
 let settingbak = {
     default: {
-        proName: "数据分析", //系统名字
-        proLoginTitle: "数据分析", //登录页title
-        proLoginShowBadge: 1, //登录页是否显示警徽 显示 1 or 隐藏2,
-        proHeaderShowBadge: 1, //header页是否显示警徽 显示 1 or 隐藏2,
-        proHeaderTitle: "数据分析", //header页title
-        proHelpDoc: "资金数据分析系统操作手册.pdf", //帮助文档系统,
-        proLoginMidImage: "systemless.png", //登录页中间图片地址,
-        proHomeMidImage: "homeless.jpg" //home页中间图片地址
-    },
+        proName: "追 迹 者 - 三 方 支 付     系 统", // 系统名字
+        proLoginTitle: "追 迹 者 - 三 方 支 付     系 统", // 登录页title
+        proLoginShowBadge: 1, // 登录页是否显示警徽 显示 1 or 隐藏2,
+        proHeaderShowBadge: 1, // header页是否显示警徽 显示 1 or 隐藏2,
+        proHeaderTitle: "追 迹 者 - 三 方 支 付     系 统", // header页title
+        proHelpDoc: "追迹者-三方支付分析系统操作手册.pdf", // 帮助文档系统,
+        proLoginMidImage: "systemless.png", // 登录页中间图片地址,
+        proHomeMidImage: "homeless.jpg" // home页中间图片地址
+    }
 };
 
 let baseFetchUrl = "";
@@ -29,7 +29,7 @@ let baseRouterUrl = "";
 let routerMode = "history";
 let defaultPageSize = 10;
 let devFlag = true;
-let portFlag = true; //false老版接口
+let portFlag = true; // false老版接口
 
 let websock = {
     wsInstance: null,
@@ -44,7 +44,7 @@ let versionObj = {
 };
 
 let versinoFlag = {
-    tryVersion: false, //true 部分菜单版, false 全菜单版
+    tryVersion: false, // true 部分菜单版, false 全菜单版
     hasExport: true
 };
 
@@ -53,9 +53,10 @@ let settingbakValue = settingbak["default"];
 // Just for development http://127.0.0.1:9315/
 
 let apiUrl = process.env.NODE_ENV === "development" ? "/api/" : "/";
-apiUrl = 'http://192.168.0.101:9090/'
-apiUrl = 'http://localhost:9090/'
-//apiUrl = '/'
+// apiUrl = "http://ieven.wenzhouteck.net/";
+
+// apiUrl = 'http://localhost:8080/'
+// apiUrl = "/";
 
 export {
     baseFetchUrl,

+ 119 - 107
src/main.js

@@ -1,166 +1,175 @@
 // #主入口文件
-import Vue from 'vue'
+import Vue from "vue";
 // 样式依赖
-import ElementUI from 'element-ui'
+import ElementUI from "element-ui";
 // 皮肤选择
-import 'element-ui/lib/theme-chalk/index.css'
+import "element-ui/lib/theme-chalk/index.css";
 // 路由
-import router from './router'
+import router from "./router";
 // 主入口
-import App from './App.vue'
+import App from "./App.vue";
 // 状态
-import store from './store'
+import store from "./store";
 
 // import * as d3 from 'd3';
 
 // global style
-import '@/assets/css/index.css';
+import "@/assets/css/index.css";
 
-Vue.use(ElementUI)
-Vue.config.productionTip = false
+// 基础设置
+import { settingbakValue } from "@/config.js";
+
+Vue.use(ElementUI);
+Vue.config.productionTip = false;
 
 Vue.mixin({
+    data() {
+        return {
+            tableHeight: 680
+        };
+    },
     methods: {
+        getTableHeight(initHeight) {
+            return document.documentElement.clientHeight - initHeight - 20;
+        },
         setModelId(obj) {
-            let currentModel = this.$store.getters.getCurrentModelGroup
-            obj.modelId = currentModel.id ? currentModel.id : ''
-            return Object.assign({}, obj)
+            let currentModel = this.$store.getters.getCurrentModelGroup;
+            obj.modelId = currentModel.id ? currentModel.id : "";
+            return Object.assign({}, obj);
         },
         getModelId() {
-            let currentModel = this.$store.getters.getCurrentModelGroup
-            let modelId = currentModel.id ? currentModel.id : ''
-            return modelId
+            let currentModel = this.$store.getters.getCurrentModelGroup;
+            let modelId = currentModel.id ? currentModel.id : "";
+            return modelId;
         },
         hasModelId() {
-            let currentModel = this.$store.getters.getCurrentModelGroup
-            let modelId = currentModel.id ? currentModel.id : ''
-            return modelId ? true : false
+            let currentModel = this.$store.getters.getCurrentModelGroup;
+            let modelId = currentModel.id ? currentModel.id : "";
+            return !!modelId;
         },
         hasModelIdMsg() {
-            let currentModel = this.$store.getters.getCurrentModelGroup
-            let modelId = currentModel.id ? currentModel.id : ''
-            if(!modelId){
+            let currentModel = this.$store.getters.getCurrentModelGroup;
+            let modelId = currentModel.id ? currentModel.id : "";
+            if (!modelId) {
                 this.$message({
                     showClose: true,
-                    duration: 10000, 
+                    duration: 3000,
                     type: "error",
-                    message: "请在右上角选择分组模型" 
+                    message: "请在 案件列表 选择案件"
                 });
             }
         }
     }
-})
+});
 
 new Vue({
     store,
     router,
     render: h => h(App)
-}).$mount('#app')
-
-
-
-
-//基础设置
-import {
-    settingbakValue
-} from '@/config.js'
+}).$mount("#app");
 Vue.prototype.$settingsBase = settingbakValue;
-document.title = settingbakValue.proName
+document.title = settingbakValue.proName;
 
 String.prototype.replaceAll = function(s1, s2) {
     return this.replace(new RegExp(s1, "gm"), s2);
-}
+};
 
 // 自定义指令
-Vue.directive('loadmore', {
+Vue.directive("loadmore", {
     bind(el, binding) {
-        const selectWrap = el.querySelector('.el-table__body-wrapper')
-        selectWrap.addEventListener('scroll', function() {
-            let sign = 40
-            const scrollDistance = this.scrollHeight - this.scrollTop - this.clientHeight
-            console.log(scrollDistance)
+        const selectWrap = el.querySelector(".el-table__body-wrapper");
+        selectWrap.addEventListener("scroll", function() {
+            let sign = 40;
+            const scrollDistance =
+                this.scrollHeight - this.scrollTop - this.clientHeight;
+            console.log(scrollDistance);
             if (scrollDistance <= sign) {
-                binding.value()
+                binding.value();
             }
-        })
+        });
     }
-})
-Vue.directive('drag', {
+});
+Vue.directive("drag", {
     bind(el, binding) {
-        let oDiv = el //当前元素
-        let self = this //上下文
-        oDiv.onmousedown = (e) => {
-            //鼠标按下,计算当前元素距离可视区的距离
-            let disX = e.clientX - oDiv.offsetLeft
-            let disY = e.clientY - oDiv.offsetTop
-            document.onmousemove = (e) => {
-                //通过事件委托,计算移动的距离 
-                let l = e.clientX - disX
-                let t = e.clientY - disY
-                    //移动当前元素  
-                oDiv.style.left = l + 'px'
-                oDiv.style.top = t + 'px'
-                    //将此时的位置传出去
-                    //binding.value({x:e.pageX, y:e.pageY})
-            }
-            document.onmouseup = (e) => {
-                document.onmousemove = null
-                document.onmouseup = null
-            }
-        }
+        let oDiv = el; // 当前元素
+        let self = this; // 上下文
+        oDiv.onmousedown = e => {
+            // 鼠标按下,计算当前元素距离可视区的距离
+            let disX = e.clientX - oDiv.offsetLeft;
+            let disY = e.clientY - oDiv.offsetTop;
+            document.onmousemove = e => {
+                // 通过事件委托,计算移动的距离
+                let l = e.clientX - disX;
+                let t = e.clientY - disY;
+                // 移动当前元素
+                oDiv.style.left = l + "px";
+                oDiv.style.top = t + "px";
+                // 将此时的位置传出去
+                // binding.value({x:e.pageX, y:e.pageY})
+            };
+            document.onmouseup = e => {
+                document.onmousemove = null;
+                document.onmouseup = null;
+            };
+        };
     }
-})
-Vue.directive('dialogDrag', {
+});
+Vue.directive("dialogDrag", {
     bind(el, binding, vnode, oldVnode) {
-        const dialogHeaderEl = el.querySelector('.el-dialog__header')
-        const dragDom = el.querySelector('.el-dialog')
-        dialogHeaderEl.style.cursor = 'move'
-            // 获取原有属性 ie dom元素.currentStyle 火狐谷歌 window.getComputedStyle(dom元素, null);
-        const sty = dragDom.currentStyle || window.getComputedStyle(dragDom, null)
-        dialogHeaderEl.onmousedown = (e) => {
+        const dialogHeaderEl = el.querySelector(".el-dialog__header");
+        const dragDom = el.querySelector(".el-dialog");
+        dialogHeaderEl.style.cursor = "move";
+        // 获取原有属性 ie dom元素.currentStyle 火狐谷歌 window.getComputedStyle(dom元素, null);
+        const sty =
+            dragDom.currentStyle || window.getComputedStyle(dragDom, null);
+        dialogHeaderEl.onmousedown = e => {
             // 鼠标按下,计算当前元素距离可视区的距离
-            const disX = e.clientX - dialogHeaderEl.offsetLeft
-            const disY = e.clientY - dialogHeaderEl.offsetTop
+            const disX = e.clientX - dialogHeaderEl.offsetLeft;
+            const disY = e.clientY - dialogHeaderEl.offsetTop;
 
             // 获取到的值带px 正则匹配替换
-            let styL, styT
+            let styL, styT;
 
             // 注意在ie中 第一次获取到的值为组件自带50% 移动之后赋值为px
-            if (sty.left.includes('%')) {
-                styL = +document.body.clientWidth * (+sty.left.replace(/\%/g, '') / 100)
-                styT = +document.body.clientHeight * (+sty.top.replace(/\%/g, '') / 100)
+            if (sty.left.includes("%")) {
+                styL =
+                    +document.body.clientWidth *
+                    (+sty.left.replace(/\%/g, "") / 100);
+                styT =
+                    +document.body.clientHeight *
+                    (+sty.top.replace(/\%/g, "") / 100);
             } else {
-                styL = +sty.left.replace(/\px/g, '')
-                styT = +sty.top.replace(/\px/g, '')
-            };
+                styL = +sty.left.replace(/\px/g, "");
+                styT = +sty.top.replace(/\px/g, "");
+            }
 
             document.onmousemove = function(e) {
-                // 通过事件委托,计算移动的距离 
-                const l = e.clientX - disX
-                const t = e.clientY - disY
+                // 通过事件委托,计算移动的距离
+                const l = e.clientX - disX;
+                const t = e.clientY - disY;
 
-                // 移动当前元素  
-                dragDom.style.left = `${l + styL}px`
-                dragDom.style.top = `${t + styT}px`
+                // 移动当前元素
+                dragDom.style.left = `${l + styL}px`;
+                dragDom.style.top = `${t + styT}px`;
 
-                //将此时的位置传出去
-                //binding.value({x:e.pageX,y:e.pageY})
+                // 将此时的位置传出去
+                // binding.value({x:e.pageX,y:e.pageY})
             };
 
             document.onmouseup = function(e) {
-                document.onmousemove = null
-                document.onmouseup = null
+                document.onmousemove = null;
+                document.onmouseup = null;
             };
-        }
+        };
     }
-})
+});
 
 /*
  * 金额格式过滤
  */
-Vue.filter('amountFormat', (num, type) => {
-    if (num === 0 || num === '0') {
-        return 0
+Vue.filter("amountFormat", (num, type) => {
+    if (num === 0 || num === "0") {
+        return 0;
     }
     if (!num) return 0;
     let s = Number(num);
@@ -168,22 +177,23 @@ Vue.filter('amountFormat', (num, type) => {
     //     s = 0 - s;
     // if (/(-)?[^0-9\.]/.test(s))
     //     s =0;
-    if (s == null || s == "")
+    if (s == null || s == "") {
         s = 0;
-    if (typeof(type) == 'undefined') {
-        type = 2
+    }
+    if (typeof type === "undefined") {
+        type = 2;
     }
     if (type > 6) {
-        alert('小数位最长6位!');
+        alert("小数位最长6位!");
         s = 0;
     }
     if (s == 0) {
         if (type == 0) {
             return s;
         }
-        s = s.toString() + '.';
+        s = s.toString() + ".";
         for (let i = 0; i < type; i++) {
-            s += '0';
+            s += "0";
         }
         return s;
     }
@@ -192,13 +202,15 @@ Vue.filter('amountFormat', (num, type) => {
     s = s.replace(/(\d*\.\d*)\d*/, "$1");
     s = s.replace(".", ",");
     let re = /(\d)(\d{3},)/;
-    while (re.test(s))
+    while (re.test(s)) {
         s = s.replace(re, "$1,$2");
+    }
     s = s.replace(/,(\d*)$/, ".$1");
 
-    if (type == 0) { // 不带小数位(默认是有小数位)
+    if (type == 0) {
+        // 不带小数位(默认是有小数位)
         let a = s.split(".");
         s = a[0];
     }
     return s;
-})
+});

+ 3 - 1
src/modules/404Error.vue

@@ -36,11 +36,13 @@
         -webkit-box-shadow: inset 2px 2px 1px 1px #d5d5d5,
             inset -2px -2px 1px 1px #d5d5d5, 2px 2px 1px 1px #d5d5d5,
             -2px -2px 1px 1px #d5d5d5;
+        background-color: #032d58;
     }
 
     .wrap404 .title {
-        text-shadow: 5px 1px 6px #f93;
+        text-shadow: 5px 1px 6px rgb(241, 232, 222);
         margin-top: 40px;
+        color: lightblue;
     }
 
     .wrap404 .link {

+ 21 - 115
src/modules/Home.vue

@@ -1,139 +1,45 @@
 <template>
-    <div class="home-wrapper">
-        <!-- <v-head></v-head> -->
-        <v-sidebar :default-openeds="defaultOpeneds"></v-sidebar>
-
-        <div class="cm-title">
-            <div class="left-title">
-                <span>{{groupData.modelName}}</span>&nbsp;&nbsp;模型
-            </div> 
-            <div class="right-select">
-                <el-select size="small" v-model="groupValue" filterable clearable placeholder="请选择分组模型"
-                    @change="groupChange">
-                    <el-option v-for="(item, index) in groupNameList" :key="index" :label="item.modelName"
-                        :value="item">
-                    </el-option>
-                </el-select>
-            </div>
-        </div>
-
+    <div class="cm-home">
+        <cm-head></cm-head>
+        <cm-sidebar :default-openeds="defaultOpeneds"></cm-sidebar>
+        <cm-grouper></cm-grouper>
         <transition mode="out-in">
             <router-view></router-view>
         </transition>
-
     </div>
 </template>
 
 <script>
-    import _ from "lodash";
-    import vHead from "./Header.vue";
-    import vSidebar from "./Sidebar.vue";
+    import cmGrouper from "./home/Grouper.vue";
+    import cmHead from "./home/Header.vue";
+    import cmSidebar from "./home/Sidebar.vue";
 
     export default {
+        components: {
+            cmHead,
+            cmSidebar,
+            cmGrouper
+        },
         data() {
             return {
-                placeholder: "请选择模板",
                 defaultOpeneds: [],
-                num: "-1",
-                caseTitleShow:true,
             };
         },
-        computed: {
-            groupData: {
-                get() {
-                    return this.$store.getters.getCurrentModelGroup;
-                },
-                set(val) {
-                    console.log(this.$store.getters.getCurrentModelGroup);
-                }
-            },
-            groupNameList:{
-                get() {
-                    return this.$store.getters.getModelGroupList.result;
-                },
-                set(val) {
-                    console.log(this.$store.getters.getModelGroupList);
-                }
-            },
-            groupValue: {
-                get() {
-                    return this.$store.getters.getCurrentModelGroup.modelName;
-                },
-                set(val) {
-                    //console.log(this.$store.getters.getCurrentModelGroup);
-                }
-            },
+        methods: {
         },
-        components: {
-            vHead,
-            vSidebar
+        created(){
+            window.addEventListener('resize', this.getTableHeight, false)
+        },
+        mounted() {
+            
         },
-        methods: {
-            loadFLTable(){
-                const loading = this.$loading({
-                    lock: true,
-                    text: "请耐心等待,正在加载数据。。",
-                    spinner: "el-icon-loading",
-                    background: "rgba(0, 0, 0, 0.7)"
-                });
-                let payload = {
-                    page:1,
-                    pageSize:20,
-                }
-                this.$store.dispatch("view_files_list", this.setModelId(payload)).then(data => {
-                    loading.close()
-                    if (data.code == 200) {
-                        this.$store.commit("set_files_list", data);
-                    } else {
-                        this.$message({ type: "error",  message: data.message ? data.message : "加载失败" });
-                    }
-                });
-            },
-            groupChange(val){
-                this.$store.commit("current_model_group_info", val);
-                this.loadFLTable()
-            },
-        }
     };
 </script>
-
 <style>
-    .home-wrapper {
+    .cm-home {
         height: 100%;
-        background: rgb(8, 27, 67) url("../assets/images/34567.png") no-repeat center;
+        background: url("../assets/images/34567.png") no-repeat center;
         background-size: 100% 100%;
-    }
-    .cm-title {
-        width: 100%;
-        height: 40px;
-        line-height: 40px;
-        font-size: 16px;
-        color: #fff;
-        text-align: center;
-        background: linear-gradient( -180deg, rgba(70, 109, 155, 0.82) 0%, rgba(2, 23, 50, 0.35) 100%);
-    }
-    .left-title {
-        display: inline-block;
-        width: 65%;
-    }
-    .left-title>span {
-        display: inline-block;
-        max-width: 200px;
-        vertical-align: top;
-        overflow: hidden;
-        text-overflow: ellipsis;
-        white-space: nowrap;
-    }
-    .right-select {
-        display: inline-block;
-        margin-right: 40px;
-        float: right;
-    }
-    .right-select .el-input__inner {
-        width: 200px;
-        color: #fff;
-        background-color: rgba(0, 0, 0, 0.01);
-        text-align: center;
-        border: none;
+        position: relative;
     }
 </style>

File diff ditekan karena terlalu besar
+ 235 - 0
src/modules/Login.vue


+ 2 - 2
src/modules/createmodel/ModelContainer.vue

@@ -19,8 +19,8 @@
 <style>
     .cm-container {
         width: 100%;
-        height: calc(100vh - 138px);
-        padding: 0px 16px;
+        height: calc(100vh - 100px);
+        padding: 5px 0;
         overflow-y: auto;
     }
 </style>

+ 182 - 0
src/modules/createmodel/alipay/components/DetailTable.vue

@@ -0,0 +1,182 @@
+<template>
+    <el-dialog 
+        class="detail-ali-cell"
+        :append-to-body="true" 
+        :title="currentFileName"  
+        width="80%"
+        :visible.sync="isDetailAli"
+        @open="onOpen"
+        :show-close="true" >
+            <div class="alidetai-btns">
+                <el-button type="success" size="mini"  @click="exportFile(1)">导出</el-button>
+            </div>
+            <!-- {{fileAliHeaders}}fileAliHeaders -->
+            <el-table :data="fileAliContent.result" size="mini" 
+                :height="tableHeight" tooltip-effect="dark" ref="fileTable" :key="currentFileName + '2'" 
+                highlight-current-row style="width: 100%">
+                 <template v-for="(key, value) in fileAliHeaders">
+                    <el-table-column 
+                        :prop="key.label" 
+                        :label="key.label" 
+                        :min-width="50+key.label.length*20" 
+                        :show-overflow-tooltip="true" 
+                        :align="key.alignment " 
+                        :key="key.label" >
+                        <template slot-scope="scope">
+                            <span v-if="key.valueType == 'money'"> {{ parseFloat(scope.row[key.label]) | amountFormat }}</span>
+                            <span v-else> {{scope.row[key.label]}}</span>
+                        </template>
+                    </el-table-column>
+                </template>
+            </el-table>
+            <pagination :dataList="fileAliContent" :upParam="beforePayload" @loadMethod="loadTableDataById"></pagination>
+    </el-dialog>
+</template>
+
+<script>
+import pagination from "@/components/Pagination.vue";
+import { downloadAndDeleteById } from "@/service/createmodel/fileService.js";
+export default {
+    components: {
+        pagination
+    },
+    data() {
+        return {
+            beforePayload: {
+                page: 1,
+                pageSize: 20
+            },
+            currentFileName: "",
+            fileAliContent: {
+                result: [],
+                total: 2,
+                code: 200,
+                pageSize: 20,
+                page: 1,
+                currentPage: 1,
+                message: ""
+            }
+        };
+    },
+    computed: {
+        fileAliHeaders: {
+            get() {
+                return this.$store.getters.getFileAliHeaders;
+            }
+        },
+        isDetailAli: {
+            get() {
+                return this.$store.getters.getIsDetailTableAli;
+            },
+            set(val) {
+                this.$store.commit("is_detail_table_ali", false);
+            }
+        }
+    },
+    created() {
+        this.tableHeight = this.getTableHeight(400);
+    },
+    methods: {
+        onOpen() {
+            let fileObj = this.$store.getters.getCurrentFile;
+            let cellObj = this.$store.getters.getAliCellObj;
+            let payload = {
+                page: 1,
+                pageSize: 20,
+                fileId: fileObj.id,
+                lineId: cellObj.id,
+                filename: fileObj.filename,
+                clickHeader: cellObj.label
+            };
+            this.currentFileName = fileObj.filename;
+            this.loadTableDataById(payload);
+        },
+        exportFile() {
+            let fileObj = this.$store.getters.getCurrentFile;
+            let cellObj = this.$store.getters.getAliCellObj;
+            let payload = {
+                page: 1,
+                pageSize: 20,
+                fileId: fileObj.id,
+                lineId: cellObj.id,
+                filename: fileObj.filename,
+                clickHeader: cellObj.label
+            };
+            if (payload.fileId) {
+                this.exportFileById(payload);
+            } else {
+                this.$message({
+                    type: "error",
+                    message: data.message ? data.message : "请选择文件"
+                });
+            }
+        },
+        exportFileById(payload) {
+            const loading = this.$loading({
+                lock: true,
+                text: "请耐心等待,正在加载数据。。",
+                spinner: "el-icon-loading",
+                background: "rgba(0, 0, 0, 0.7)"
+            });
+            let dispatchStr = "export_view_detail_content";
+            this.$store
+                .dispatch(dispatchStr, this.setModelId(payload))
+                .then(data => {
+                    loading.close();
+                    if (data.code == 200) {
+                        let iframe = document.createElement("iframe");
+                        iframe.style.display = "none";
+                        iframe.src =
+                            downloadAndDeleteById + "?id=" + data.result;
+                        iframe.id = "myIframe2";
+                        document.body.appendChild(iframe);
+                    } else {
+                        this.$message({
+                            type: "error",
+                            message: data.message ? data.message : "加载失败"
+                        });
+                    }
+                });
+        },
+
+        loadTableDataById(payload) {
+            const loading = this.$loading({
+                lock: true,
+                text: "请耐心等待,正在加载数据。。",
+                spinner: "el-icon-loading",
+                background: "rgba(0, 0, 0, 0.7)"
+            });
+
+            let fileObj = this.$store.getters.getCurrentFile;
+            let cellObj = this.$store.getters.getAliCellObj;
+            payload.fileId = fileObj.id;
+            payload.filename = fileObj.filename;
+            payload.lineId = cellObj.id;
+            payload.clickHeader = cellObj.label;
+            this.beforePayload = payload;
+            this.$store
+                .dispatch("view_detail_content", this.setModelId(payload))
+                .then(data => {
+                    loading.close();
+                    if (data.code == 200) {
+                        this.fileAliContent = data;
+                    } else {
+                        this.$message({
+                            type: "error",
+                            message: data.message ? data.message : "加载失败"
+                        });
+                    }
+                });
+        }
+    }
+};
+</script>
+<style scoped>
+.detail-ali-cell .alidetai-btns {
+    height: 42px;
+    position: absolute;
+    z-index: 999;
+    right: 65px;
+    top: 10px;
+}
+</style>

+ 241 - 152
src/modules/createmodel/alipay/components/ResultTable.vue

@@ -1,191 +1,280 @@
 <template>
     <div class="left-wrapper" style="background-color: #032d58;">
-        <div class="nb-table nb-table--bgc cmright1">
+        <div class="nb-table cmright1">
             <file-name></file-name>
             <search-sort></search-sort>
             <div class="excel-btns">
-                <el-button type="primary" size="mini"  @click="oneKeyGenerate()">一键生成</el-button>
-                <el-button type="primary" size="mini"  @click="exportFile()">导出</el-button>
-                <el-button type="success" size="mini"  @click="openSettings()">搜索排序</el-button>
+                <el-button type="primary" size="mini" @click="exportFile(1)">导出</el-button>
+
+                <el-button type="success" size="mini" @click="openSettings(1)">搜索排序</el-button>
+                <el-button v-if="isDetailAble" type="success" size="mini" @click="exportFile(2)">导出全部明细</el-button>
+                <!-- <el-button type="primary" size="mini"  @click="exportFile(3)">导出</el-button> -->
             </div>
-            <el-table :data="fileContent.result" 
-                border size="mini" :height="tableHeight" tooltip-effect="dark"
-                :key="currentFileName" style="width: 100%"
-                ref="alipayTable" highlight-current-row>
-                <template v-for="(key, value) in fileContent.header">
-                    <el-table-column 
-                        :prop="value" 
-                        :label="key" 
-                        :min-width="150" 
-                        :show-overflow-tooltip="true" 
-                        :key="value">
-                    </el-table-column> 
+            <el-table :data="fileContent.result" border size="mini" :height="tableHeight" tooltip-effect="dark"
+                :key="currentFileName" style="width: 100%" ref="alipayTable" highlight-current-row>
+                <template v-for="(key, value) in conHeaders">
+                    <el-table-column v-if="key.clickable !== 'true'" :prop="key.label" :label="key.label"
+                        :min-width="50 + key.label.length * 20" :show-overflow-tooltip="false" :align="key.alignment"
+                        :key="key.label">
+                        <template slot-scope="scope">
+                            <el-tooltip class="item" effect="dark" placement="top">
+
+                                <span class="oneLine" v-if="key.valueType == 'money'"> {{
+                                        parseFloat(scope.row[key.label]) | amountFormat
+                                }}</span>
+                                <span class="oneLine" v-else> {{ scope.row[key.label] }}</span>
+                                <div slot="content">
+                                    <span v-if="key.valueType == 'money'"> {{ parseFloat(scope.row[key.label]) |
+                                            amountFormat
+                                    }}</span>
+                                    <span v-else> {{ scope.row[key.label] }}</span>
+                                </div>
+                            </el-tooltip>
+                        </template>
+                    </el-table-column>
+
+                    <el-table-column v-else :prop="key.label" :label="key.label" :min-width="50 + key.label.length * 20"
+                        :show-overflow-tooltip="false" :align="key.alignment" :key="key.label">
+                        <template slot-scope="scope">
+                            <el-tooltip class="item" effect="dark" placement="top">
+                                <el-button class="oneLine" v-if="key.valueType == 'money'" type="text" round
+                                    @click="viewDetail(scope.row, key.label)" size="small">
+                                    {{ parseFloat(scope.row[key.label]) | amountFormat }}</el-button>
+                                <el-button v-else type="text" class="oneLine" round
+                                    @click="viewDetail(scope.row, key.label)" size="small">
+                                    {{ scope.row[key.label] }}</el-button>
+
+                                <div slot="content">
+                                    <el-button v-if="key.valueType == 'money'" type="text" round
+                                        @click="viewDetail(scope.row, key.label)" size="small">
+                                        {{ parseFloat(scope.row[key.label]) | amountFormat }}</el-button>
+                                    <el-button v-else type="text" round @click="viewDetail(scope.row, key.label)"
+                                        size="small">
+                                        {{ scope.row[key.label] }}</el-button>
+                                </div>
+                            </el-tooltip>
+                        </template>
+                    </el-table-column>
                 </template>
             </el-table>
             <pagination :dataList="fileContent" :upParam="beforePayload" @loadMethod="loadSearchSortData"></pagination>
         </div>
+        <detail-table></detail-table>
     </div>
 </template>
 
 <script>
-    import pagination from "@/components/Pagination.vue";
-    import searchSort from "./SearchSort.vue";
-    import fileName from "../../components/FileName.vue";
-    import { downloadAndDeleteById } from '@/service/createmodel/fileService.js'
-
-    export default {
-        components: {
-            pagination,
-            searchSort,
-            fileName
+import pagination from "@/components/Pagination.vue";
+import searchSort from "./SearchSort.vue";
+import fileName from "../../components/FileName.vue";
+import { downloadAndDeleteById } from "@/service/createmodel/fileService.js";
+import detailTable from "./DetailTable.vue";
+
+export default {
+    components: {
+        pagination,
+        searchSort,
+        fileName,
+        detailTable
+    },
+    data() {
+        return {
+            beforePayload: {
+                page: 1,
+                pageSize: 20
+            }
+        };
+    },
+    computed: {
+        fileContent: {
+            get() {
+                if (this.$refs.alipayTable) this.$refs.alipayTable.doLayout();
+                return this.$store.getters.getFileContentById;
+            }
         },
-        data() {
-            return {
-                beforePayload:{
-                    page:1,
-                    pageSize:20
-                },
-                collapseName:['1','2'],
-                tableHeight:480,
-            };
+        isDetailAble: {
+            get() {
+                let headResult = this.$store.getters.getTableHeaders;
+                return headResult.detailsExportable;
+            }
         },
-        computed: {
-            fileContent: {
-                get() {
-                    return this.$store.getters.getFileContentById;
-                }
-            },
-            currentFileName:{
-                get() {
-                    let fileObj = this.$store.getters.getCurrentFile;
-                    return fileObj.filename;
+        conHeaders: {
+            get() {
+                let headResult = this.$store.getters.getTableHeaders;
+                let finalHeaders = {};
+                for (let v in headResult.fields) {
+                    finalHeaders[v] = {
+                        label: headResult.fields[v],
+                        alignment: "left",
+                        clickable: "none",
+                        valueType: "none"
+                    };
+                    for (let k in headResult.mainProps) {
+                        if (v == k) {
+                            finalHeaders[v] = {
+                                label: headResult.fields[v],
+                                alignment: headResult.mainProps[v].alignment,
+                                clickable: headResult.mainProps[v].clickable,
+                                valueType: headResult.mainProps[v].valueType
+                            };
+                        }
+                    }
                 }
-            },
+                return finalHeaders;
+            }
         },
-        mounted() {
-            this.loadInitTable()
-            this.getTableHeight()
-            window.addEventListener('resize', this.getTableHeight, false)
+        currentFileName: {
+            get() {
+                let fileObj = this.$store.getters.getCurrentFile;
+                return fileObj.filename;
+            }
+        }
+    },
+    created() {
+        this.$nextTick(() => {
+            this.tableHeight = this.getTableHeight(225);
+        });
+    },
+    mounted() {
+        this.loadInitTable();
+    },
+    methods: {
+        // 查看文件
+        viewDetail(row, label) {
+            row.label = label;
+            this.$store.commit("is_detail_table_ali", true);
+            this.$store.commit("set_current_ali_cell", row);
         },
-        methods: {
-            getTableHeight(){
-                this.tableHeight = document.documentElement.clientHeight - 420
-            },
-            openSettings(){
-                this.$store.commit('is_search_sort_settings', true)
-            },
-            oneKeyGenerate(){
-                const loading = this.$loading({
-                    lock: true,
-                    text: "请耐心等待,正在加载数据。。",
-                    spinner: "el-icon-loading",
-                    background: "rgba(0, 0, 0, 0.7)"
-                });
-                this.$store.dispatch('get_alipay_tables', this.setModelId({})).then(data => {
-                    if (data.code == 200) {
-                        this.$store.dispatch("view_files_list", this.setModelId({ page:1, pageSize:20 })).then(res => {
-                            loading.close();
-                            if (res.code == 200) {
-                                this.$store.commit("set_files_list", res);
-                            } else {
-                                this.$message({ type: "error",  message: res.message ? res.message : "加载失败" });
-                            }
-                        });
-                    } else {
-                        loading.close()
-                        this.$message({ type: "error",  message: data.message ? data.message : "加载失败" });
-                    }
-                });
-            },
-            exportFile(){
-                let payload = this.$store.getters.getUpSearchSortParams;
-                if(payload.fileId){
-                    this.exportFileById(payload)
-                }
-            },
-            exportFileById(payload){
-                const loading = this.$loading({
-                    lock: true,
-                    text: "请耐心等待,正在加载数据。。",
-                    spinner: "el-icon-loading",
-                    background: "rgba(0, 0, 0, 0.7)"
+        openSettings(num) {
+            this.$store.commit("is_search_sort_settings", {
+                num: num,
+                show: true
+            });
+        },
+        exportFile(num) {
+            let payload = this.$store.getters.getUpSearchSortParams;
+            if (payload.fileId) {
+                this.exportFileById(payload, num);
+            } else {
+                this.$message({
+                    type: "error",
+                    message: data.message ? data.message : "请选择文件"
                 });
-                this.$store.dispatch("export_by_query", this.setModelId(payload)).then(data => {
+            }
+        },
+        exportFileById(payload, num) {
+            const loading = this.$loading({
+                lock: true,
+                text: "请耐心等待,正在加载数据。。",
+                spinner: "el-icon-loading",
+                background: "rgba(0, 0, 0, 0.7)"
+            });
+            let dispatchStr = "export_all_detail";
+            if (num == 1) {
+                dispatchStr = "export_by_query";
+            } else {
+                let fileObj = this.$store.getters.getCurrentFile;
+                payload.filename = fileObj.filename;
+                dispatchStr = "export_all_detail";
+            }
+            this.$store
+                .dispatch(dispatchStr, this.setModelId(payload))
+                .then(data => {
                     loading.close();
                     if (data.code == 200) {
-                            let iframe = document.createElement('iframe');
-                            iframe.style.display = 'none';
-                            iframe.src = downloadAndDeleteById + '?id='+data.result;
-                            iframe.id = 'myIframe2';
-                            document.body.appendChild(iframe);
+                        let iframe = document.createElement("iframe");
+                        iframe.style.display = "none";
+                        iframe.src =
+                            downloadAndDeleteById + "?id=" + data.result;
+                        iframe.id = "myIframe2";
+                        document.body.appendChild(iframe);
                     } else {
-                        this.$message({ type: "error",  message: data.message ? data.message : "加载失败" });
+                        this.$message({
+                            type: "error",
+                            message: data.message ? data.message : "加载失败"
+                        });
                     }
                 });
-            },
+        },
 
-            loadInitTable(){
-                let payload = this.$store.getters.getBasicParams;
-                if(payload && payload.fileId){
-                    this.loadSearchSortData(payload)
-                }
-            },
-
-            // 搜索排序加载文件
-            loadSearchSortData(payload){
-                const loading = this.$loading({
-                    lock: true,
-                    text: "请耐心等待,正在加载数据。。",
-                    spinner: "el-icon-loading",
-                    background: "rgba(0, 0, 0, 0.7)"
-                });
+        loadInitTable() {
+            let payload = this.$store.getters.getUpSearchSortParams;
+            if (payload && payload.fileId) {
+                this.loadSearchSortData(payload);
+            }
+        },
+
+        // 搜索排序加载文件
+        loadSearchSortData(payload) {
+            const loading = this.$loading({
+                lock: true,
+                text: "请耐心等待,正在加载数据。。",
+                spinner: "el-icon-loading",
+                background: "rgba(0, 0, 0, 0.7)"
+            });
 
-                let upSearchSortParams = this.$store.getters.getUpSearchSortParams;
-                let currentFile = this.$store.getters.getCurrentFile;
+            let upSearchSortParams = this.$store.getters.getUpSearchSortParams;
+            let currentFile = this.$store.getters.getCurrentFile;
 
-                payload.fileId = currentFile.id;
-                payload.orders = upSearchSortParams.orders;
-                payload.values = upSearchSortParams.values;
-                payload.mode = upSearchSortParams.mode;
-                
-                this.beforePayload = payload
+            payload.fileId = currentFile.id;
+            payload.orders = upSearchSortParams.orders;
+            payload.values = upSearchSortParams.values;
+            payload.mode = upSearchSortParams.mode;
 
-                this.$store.dispatch('view_data_by_query', this.setModelId(payload)).then(data => {
-                    loading.close()
+            this.beforePayload = payload;
+
+            this.$store
+                .dispatch("view_data_by_query", this.setModelId(payload))
+                .then(data => {
+                    loading.close();
                     if (data.code == 200) {
-                       this.$store.commit("set_file_content_by_id", data);
+                        this.$store.commit("set_file_content_by_id", data);
                     } else {
-                        this.$message({ type: "error",  message: data.message ? data.message : "加载失败" });
+                        this.$message({
+                            type: "error",
+                            message: data.message ? data.message : "加载失败"
+                        });
                     }
                 });
-            },
         }
-    };
+    }
+};
 </script>
 <style>
-    .el-collapse-item__content{
-        padding:2px 2px;
-    }
+.el-collapse-item__content {
+    padding: 2px 2px;
+}
 </style>
 <style scoped>
-    .excel-btns{
-        border: 2px outset wheat;
-        padding: 5px 2px;
-        text-align: left;
-    }
-    .cmright1{
-        position: relative;
-        width: 100%;
-        height: calc(100vh - 150px);
-        min-height: 750px;
-    }
-    .bottom-table{
-        position: absolute;
-        bottom: 0;
-        width: 100%;
-    }
-    .left-wrapper {
-        padding-top: 0px;
-        height: 100%;
-    }
+.excel-btns {
+    border-top: 2px outset wheat;
+    border-bottom: 2px outset wheat;
+    padding: 5px 10px;
+    text-align: left;
+    height: 42px;
+}
+
+.cmright1 {
+    position: relative;
+    width: 100%;
+    height: calc(100vh - 110px);
+    min-height: 700px;
+}
+
+.bottom-table {
+    position: absolute;
+    bottom: 0;
+    width: 100%;
+}
+
+.left-wrapper {
+    padding-top: 0px;
+    height: 100%;
+}
+
+.oneLine {
+    overflow: hidden;
+    white-space: nowrap;
+    text-overflow: ellipsis;
+}
 </style>

+ 148 - 76
src/modules/createmodel/alipay/components/SearchSort.vue

@@ -4,76 +4,83 @@
         append-to-body
         :modal="drawerModel"
         :visible.sync="isOpenSS"
+        @open="openDrawer"
         direction="ttb"
         class="search-sort-drawer"
         size="500">
-
-        <el-card>
-            <div slot="header" class="clearfix" style="font-size:16px;">
-                <span>搜索</span>&nbsp;&nbsp; <el-switch v-model="isAndOr" active-color="orange" inactive-color="#409EFF"></el-switch>
-                <span style="font-size:14px;color:orange;">{{isAndOr ? '交集' : '并集'}}</span>
-                &nbsp;&nbsp;<span style="font-size:11px;color:white;font-style:italic;">交集:&nbsp;必须满足全部条件,并集:&nbsp;满足一个条件即可</span>
-            </div>
-
-            <div class="setting-add-search">
-                <el-select default-first-option placeholder="请选择字段名"  
-                    filterable allow-create class="case-inselect" size="mini" v-model="headerSearchValue">
-                    <el-option v-for="(item, key) in dynamicHeaders" :key="key" :label="item" :value="key"></el-option>
-                </el-select>
-                <div class="is-like">
-                    <el-radio v-model="isLike" label="is">精准</el-radio>
-                    <el-radio v-model="isLike" label="like">模糊</el-radio>
+        <!-- <div style="width:100%;text-align:center;color:orange;letter-spacing: 2px;padding:2px;font-size:16px;">搜索条件与排序条件一起满足加载数据</div> -->
+        <div class="close-ss" @click="closeSS">X</div>
+        <div class="close-sc">
+            <el-button type="primary" size="big"  @click="searchSort(2)">确定</el-button>
+        </div>
+        <div class="search-warp">
+            <el-card>
+                <div slot="header" class="clearfix" style="font-size:16px;">
+                    <span>搜索</span>&nbsp;&nbsp; <el-switch v-model="isAndOr" active-color="orange" inactive-color="#409EFF"></el-switch>
+                    <span style="font-size:14px;color:orange;">{{isAndOr ? '交集' : '并集'}}</span>
+                    &nbsp;&nbsp;<span style="font-size:11px;color:whitesmoke;">交集:&nbsp;必须满足全部条件,并集:&nbsp;满足一个条件即可</span>
                 </div>
-                <div class="is-like">
-                    <el-button type="primary" size="mini"  @click="addColumn(1)">添加</el-button>
-                </div>
-            </div>
-            <el-divider></el-divider>
-            <el-descriptions title="搜索字段" :column="1" size="small" border>
-                <template slot="extra">
-                    <el-button type="primary" size="mini"  @click="searchSort(1)">搜索</el-button>
-                </template>
-                <el-descriptions-item  v-for="(item, index) in searchList" :key="item.key">
-                    <template slot="label">
-                        <span @click="deleteItem(1,item)">X</span>&nbsp;
-                        {{item.label}}&nbsp;<span style="font-size:11px;color:orange;">{{item.rule === 'is' ? '精准' : '模糊'}}</span>
-                    </template>
-                    <el-input  v-model="item.value"  placeholder="支持批量查询,空格逗号隔开" size="small"></el-input>
-                </el-descriptions-item>
-            </el-descriptions>
-        </el-card>
 
-        <el-card>
-            <div slot="header" class="clearfix" style="font-size:16px;">
-                <span>排序</span>
-            </div>
-            <div class="setting-add-search">
-                <el-select default-first-option placeholder="请选择字段名"  
-                    filterable allow-create class="case-inselect" size="mini" v-model="headerSortValue">
-                    <el-option v-for="(item, key) in dynamicHeaders" :key="key" :label="item" :value="key"></el-option>
-                </el-select>
-                <div class="is-like">
-                    <el-radio v-model="isAdesc" label="asc">升序</el-radio>
-                    <el-radio v-model="isAdesc" label="desc">降序</el-radio>
+                <div class="setting-add-search">
+                    <el-select default-first-option placeholder="请选择字段名"  
+                        filterable allow-create class="case-inselect" size="mini" v-model="headerSearchValue">
+                        <el-option v-for="(item, key) in dynamicHeaders" :key="key" :label="item" :value="key"></el-option>
+                    </el-select>
+                    <div class="is-like">
+                        <el-radio v-model="isLike" label="is">精准</el-radio>
+                        <el-radio v-model="isLike" label="like">模糊</el-radio>
+                    </div>
+                    <div class="is-like">
+                        <el-button type="primary" size="mini"  @click="addColumn(1)">添加</el-button>
+                    </div>
+                </div>
+                <el-divider></el-divider>
+                <el-descriptions title="搜索字段" :column="1" size="mini" border>
+                    <el-descriptions-item  v-for="(item, index) in searchList" :key="item.key">
+                        <template slot="label">
+                            <span @click="deleteItem(1,item)">X</span>&nbsp;
+                            {{item.label}}&nbsp;<span style="font-size:11px;color:orange;">{{item.rule === 'is' ? '精准' : '模糊'}}</span>
+                        </template>
+                        <el-input  v-model="item.value"  placeholder="支持批量查询,空格逗号隔开" size="small"></el-input>
+                    </el-descriptions-item>
+                </el-descriptions>
+            </el-card>
+        </div>
+        <div class="sort-warp">
+            <el-card>
+                <div slot="header" class="clearfix" style="font-size:16px;">
+                    <span>排序</span> &nbsp;&nbsp;<span style="font-size:11px;color:whitesmoke;">排序搜索条件一起确定数据</span>
                 </div>
-                <div class="is-like">
-                    <el-button type="primary" size="mini" @click="addColumn(2)">添加</el-button>
+                <div class="setting-add-search">
+                    <el-select default-first-option placeholder="请选择字段名"  
+                        filterable allow-create class="case-inselect" size="mini" v-model="headerSortValue">
+                        <el-option v-for="(item, key) in dynamicHeaders" :key="key" :label="item" :value="key"></el-option>
+                    </el-select>
+                    <div class="is-like">
+                        <el-radio v-model="isAdesc" label="asc">升序</el-radio>
+                        <el-radio v-model="isAdesc" label="desc">降序</el-radio>
+                    </div>
+                    <div class="is-like">
+                        <el-button type="primary" size="mini" @click="addColumn(2)">添加</el-button>
+                    </div>
                 </div>
-            </div>
-            <el-divider></el-divider>
-            <el-descriptions title="排序字段" :column="1" size="small" border>
-                <template slot="extra">
-                    <el-button type="primary" size="mini"  @click="searchSort(2)">排序</el-button>
-                </template>
-                <el-descriptions-item  v-for="(item, index) in sortList" :key="item.key">
-                    <template slot="label">
-                        <span @click="deleteItem(2,item)">X</span>&nbsp;
-                        {{item.label}}&nbsp;<span style="font-size:11px;color:orange;">{{item.rule === 'asc' ? '升序' : '降序'}}</span>
-                    </template>
-                    <el-input  v-model="item.rule" placeholder="支持批量查询,空格逗号隔开" disabled  size="small"></el-input>
-                </el-descriptions-item>
-            </el-descriptions>
-        </el-card>
+                <el-divider></el-divider>
+                <el-descriptions title="排序字段" :column="1" size="mini" border>
+                    
+                    <el-descriptions-item  v-for="(item, index) in sortList" :key="item.key">
+                        <template slot="label">
+                            <div style="width:100%;height:32px;line-height:32px;">
+                                <span @click="deleteItem(2,item)">X</span>
+                                &nbsp;{{item.label}}&nbsp;
+                                <span style="font-size:11px;color:orange;">{{item.rule === 'asc' ? '升序' : '降序'}}</span>
+                            </div>
+                        </template>
+                        <span style="font-size:11px;color:orange;">{{item.rule === 'asc' ? '升序' : '降序'}}</span>
+                        <!-- <el-input v-model="item.rule" placeholder="支持批量查询,空格逗号隔开" disabled  size="small"></el-input> -->
+                    </el-descriptions-item>
+                </el-descriptions>
+            </el-card>
+        </div>
     </el-drawer>
 </template>
 
@@ -82,7 +89,6 @@
         data() {
             return {
                 drawerModel:false,
-
                 isLike:'is',
                 isAdesc:'asc',
                 headerSearchValue:'',
@@ -95,22 +101,36 @@
         computed: {
             dynamicHeaders: {
                 get() {
-                    return this.$store.getters.getTableHeaders;
+                    return this.$store.getters.getTableHeaders.fields;
                 }
             },
             isOpenSS:{
                 get() {
-                    return this.$store.getters.getIsSearchSort;
+                    let temObj = this.$store.getters.getIsSearchSort
+                    return temObj.show;
                 },
                 set(val) {
-                    this.$store.commit("is_search_sort_settings", false);
+                    this.$store.commit("is_search_sort_settings", {num:1, show:false});
                 }
-            }
+            },
+            showSearch:{
+                get() {
+                    let temObj = this.$store.getters.getIsSearchSort
+                    return temObj.num == 1;
+                },
+            },
         },
         mounted() {
             //
         },
         methods: {
+            closeSS(){
+                this.$store.commit("is_search_sort_settings", {num:1, show:false});
+            },
+            openDrawer(){
+                this.headerSearchValue = '';
+                this.headerSortValue = '';
+            },
             loadSearchSortData(payload){
                 const loading = this.$loading({
                     lock: true,
@@ -218,16 +238,68 @@
     };
 </script>
 <style scoped>
-    .topbtn-width{
-        width: 90px;
-        margin-right: 10px;
-    }
-    .nb-toparea__leftbtn1 {
-        width: 150px;
-        left: 200px;
-    }
     .is-like{
         display: inline-block;
         margin-left: 10px;
     }
 </style>
+<style>
+    .search-sort-drawer{
+        min-width: 1240px;
+        overflow-x: auto;
+    }
+    .search-sort-drawer .el-drawer__body{
+        background: #104072;
+    }
+    .search-sort-drawer .el-drawer__header {
+        display: none;
+    }
+    .search-sort-drawer .el-card__header,
+    .search-sort-drawer .el-card__body{
+        padding:9px 20px;
+    }
+    .search-sort-drawer .el-divider--horizontal {
+        margin: 10px 0;
+    }
+    .search-sort-drawer  .el-descriptions__header{
+        margin-bottom: 8px;
+    }
+    .search-sort-drawer .close-ss{
+        position: absolute;
+        color: whitesmoke;
+        right: 12px;
+        top: 12px;
+        border: 1px solid #409eff;
+        width: 20px;
+        height: 20px;
+        text-align: center;
+        border-radius: 50%;
+        line-height: 20px;
+        cursor: pointer;
+    }
+    .close-sc{
+        position: absolute;
+        right: 54px;
+        top: 100px;
+        text-align: center;
+    }
+    .search-warp{
+        display: inline-block;
+        width: 45%;
+        vertical-align: top;
+        border-right: 1px solid #727c93;
+    }
+    .sort-warp{
+        display: inline-block;
+        width: 45%;
+        vertical-align: top;
+        margin-left: -5px;
+        border-left: 1px solid #727c93;
+    }
+   .search-sort-drawer .el-card.is-always-shadow,
+   .search-sort-drawer .el-card.is-hover-shadow:focus, 
+   .search-sort-drawer .el-card.is-hover-shadow:hover{
+       box-shadow:none;
+    }
+
+</style>

+ 106 - 0
src/modules/createmodel/components/DetailTable.vue

@@ -0,0 +1,106 @@
+<template>
+    <el-dialog 
+        :append-to-body="true" 
+        :title="currentFileName"  
+        width="80%"
+        :visible.sync="isDetailCon"
+        @open="onOpen"
+        :show-close="true" >
+            <el-table :data="fileContent.result" size="mini" 
+                :height="tableHeight" tooltip-effect="dark" ref="fileTable" :key="currentFileName + '2'" 
+                highlight-current-row style="width: 100%">
+                <template v-for="(key, value) in fileContent.header">
+                    <el-table-column 
+                        :prop="value" 
+                        :label="key" 
+                        :min-width="150" 
+                        :show-overflow-tooltip="true" 
+                        :key="value">
+                    </el-table-column> 
+                </template>
+            </el-table>
+            <pagination :dataList="fileContent" :upParam="beforePayload" @loadMethod="loadTableDataById"></pagination>
+    </el-dialog>
+</template>
+
+<script>
+import pagination from "@/components/Pagination.vue";
+import dTable from "@/components/DragTable.vue";
+export default {
+    components: {
+        pagination,
+        dTable
+    },
+    data() {
+        return {
+            sortable: "",
+            beforePayload: {
+                page: 1,
+                pageSize: 20
+            },
+            currentFileName: "",
+
+            tableHeader: [],
+            tableData: []
+        };
+    },
+    computed: {
+        fileContent: {
+            get() {
+                return this.$store.getters.getFileContentById;
+            }
+        },
+        isDetailCon: {
+            get() {
+                return this.$store.getters.getIsDetailTable;
+            },
+            set(val) {
+                this.$store.commit("is_detail_table_con", false);
+            }
+        }
+    },
+    created() {
+        this.tableHeight = this.getTableHeight(400);
+    },
+    mounted() {},
+    methods: {
+        alertMsg() {
+            console.log("just for test drag");
+        },
+        onOpen() {
+            let fileObj = this.$store.getters.getCurrentFile;
+            let payload = {
+                page: 1,
+                pageSize: 20,
+                fileId: fileObj.id
+            };
+            this.currentFileName = fileObj.filename;
+            this.loadTableDataById(payload);
+        },
+        loadTableDataById(payload) {
+            const loading = this.$loading({
+                lock: true,
+                text: "请耐心等待,正在加载数据。。",
+                spinner: "el-icon-loading",
+                background: "rgba(0, 0, 0, 0.7)"
+            });
+            let fileObj = this.$store.getters.getCurrentFile;
+            payload.fileId = fileObj.id;
+            this.beforePayload = payload;
+            this.$store
+                .dispatch("view_file_content_by_id", this.setModelId(payload))
+                .then(data => {
+                    loading.close();
+                    if (data.code == 200) {
+                        this.$store.commit("set_file_content_by_id", data);
+                    } else {
+                        this.$message({
+                            type: "error",
+                            message: data.message ? data.message : "加载失败"
+                        });
+                    }
+                });
+        }
+    }
+};
+</script>

+ 2 - 0
src/modules/createmodel/components/FileName.vue

@@ -21,5 +21,7 @@
         color: rgb(250, 177, 6);
         font-size: 16px;
         border-bottom:1px solid #506d8b;
+        height: 40px;
+        line-height: 30px;
     }
 </style>

+ 328 - 135
src/modules/createmodel/components/FileTable.vue

@@ -1,167 +1,360 @@
 <template>
-    <div class="left-wrapper">
-        <div class="nb-table nb-table--bgc" style="height: calc(100vh - 150px);border-right: none;">
-            <el-tabs v-model="activeName" @tab-click="handleClick">
-                <el-tab-pane label="原始文件" name="first">1</el-tab-pane>
-                <el-tab-pane label="生成文件" name="second">2</el-tab-pane>
-            </el-tabs>
-            <el-table  element-loading-text="数据加载中" element-loading-spinner="el-icon-loading"
-                :data="fileLists.result" border size="mini" :height="tableHeight" highlight-current-row
-                tooltip-effect="dark" ref="fileListsTable" @row-click="loadTableHeader"  style="width: 100%">
-                <el-table-column prop="count" label="序号" width="50"></el-table-column>
-                <el-table-column prop="filename" label="文件名称" :show-overflow-tooltip="true" min-width="120"></el-table-column>
-                <el-table-column prop="generatedStr" label="类型" min-width="50"> </el-table-column>
-            </el-table>
-            <pagination :dataList="fileLists" :simple="true" :upParam="beforePayload" @loadMethod="loadFLTable"></pagination>
-                    
+    <div class="nb-table left-files">
+        <el-tabs v-model="activeName" @tab-click="handleClick">
+            <el-tab-pane label="原始文件" name="first">1</el-tab-pane>
+            <el-tab-pane label="多维分析" name="second">2</el-tab-pane>
+        </el-tabs>
+        <div class="excel-btns">
+            <!-- <el-button v-if="!isAliPay"type="primary" size="mini"  @click="oneKeyGenerate()">查看</el-button> -->
+            <el-button
+                v-if="isAliPay"
+                type="primary"
+                size="mini"
+                @click="oneKeyGenerate()"
+                >一键生成</el-button
+            >
+            <el-button
+                v-if="isAliPay"
+                type="primary"
+                size="mini"
+                @click="onExport()"
+                >一键导出</el-button
+            >
         </div>
+        <template v-if="activeName === 'first'">
+            <el-table
+                :data="fileLists.result"
+                border
+                size="mini"
+                :height="tableHeight"
+                highlight-current-row
+                tooltip-effect="dark"
+                ref="fileListsTable"
+                @row-click="loadTableHeader"
+                style="width: 100%; height: 100%;"
+            >
+                <el-table-column
+                    prop="count"
+                    label="序号"
+                    width="50"
+                ></el-table-column>
+                <el-table-column
+                    prop="filename"
+                    label="文件名称"
+                    :show-overflow-tooltip="true"
+                    min-width="120"
+                ></el-table-column>
+                <!-- <el-table-column prop="generatedStr" label="类型" min-width="50"> </el-table-column> -->
+            </el-table>
+            <pagination
+                :dataList="fileLists"
+                :simple="true"
+                :upParam="beforePayload"
+                @loadMethod="loadFLTable"
+            ></pagination>
+        </template>
+        <MultidimensionalTable v-else />
     </div>
 </template>
 
 <script>
-    import pagination from "@/components/Pagination.vue";
-    export default {
-        components: {
-            pagination
+import pagination from "@/components/Pagination.vue";
+import MultidimensionalTable from "./MultidimensionalTable.vue";
+import { batchExportDownload } from "@/service/createmodel/fileService.js";
+
+export default {
+    components: {
+        pagination,
+        MultidimensionalTable
+    },
+    data() {
+        return {
+            beforePayload: {
+                page: 1,
+                pageSize: 20,
+                generated: "false"
+            },
+            activeName: "first",
+            isAliPay: true
+        };
+    },
+    computed: {
+        fileLists: {
+            get() {
+                let fileLists = this.$store.getters.getFilesList;
+                return fileLists;
+            }
         },
-        data() {
-            return {
-                beforePayload:{
-                    page:1,
-                    pageSize:20,
-                    generated:'false'
-                },
-                tableHeight:680,
-                activeName: 'second'
+        activeName1: {
+            get() {
+                return this.$store.getters.getFileActiveName;
+            },
+            set(val) {
+                this.$store.commit("set_file_active_name", "first");
+            }
+        }
+    },
+    created() {
+        let offsetHeight = 42;
+        // let locationhref = window.location.href;
+        // if(locationhref.indexOf('alipay') !== -1){
+        //     this.isAliPay = true
+        //     offsetHeight = 42
+        // }
+        this.tableHeight = this.getTableHeight(183 + offsetHeight);
+    },
+    mounted() {
+        this.init();
+    },
+    methods: {
+        handleClick(tab) {
+            let payload = {
+                page: 1,
+                pageSize: 20,
+                generated: "false"
             };
-        },
-        computed: {
-            fileLists: {
-                get() {
-                    let fileLists = this.$store.getters.getFilesList;
-                    return fileLists;
-                }
+            if (this.activeName === "first") {
+                payload.generated = "false";
+            } else {
+                payload.generated = "true";
             }
+
+            this.$store.commit("set_file_active_name", payload.generated);
+            if (this.activeName !== "first") return;
+            this.loadFLTable(payload);
+        },
+        loadDetailHeaders(id) {
+            let payload = {
+                fileId: id
+            };
+            this.$store
+                .dispatch("view_detail_ali_headers", this.setModelId(payload))
+                .then(data => {
+                    if (data.code == 200) {
+                        let headResult = data.result;
+                        let finalHeaders = {};
+                        for (let v in headResult.fields) {
+                            finalHeaders[v] = {
+                                label: headResult.fields[v],
+                                alignment: "left",
+                                clickable: "none",
+                                valueType: "none"
+                            };
+                            for (let k in headResult.mainProps) {
+                                if (v == k) {
+                                    finalHeaders[v] = {
+                                        label: headResult.fields[v],
+                                        alignment:
+                                            headResult.mainProps[v].alignment,
+                                        clickable:
+                                            headResult.mainProps[v].clickable,
+                                        valueType:
+                                            headResult.mainProps[v].valueType
+                                    };
+                                }
+                            }
+                        }
+
+                        this.$store.commit(
+                            "set_current_ali_headers",
+                            finalHeaders
+                        );
+                    } else {
+                        let msg = data.message ? data.message : "加载失败";
+                        console.log(msg);
+                        //this.$message({ type: "error",  message: data.message ? data.message : "加载失败" });
+                    }
+                });
         },
-        mounted() {
-            this.init()
-            this.getTableHeight()
-            window.addEventListener('resize', this.getTableHeight, false)
+        filterTag(value, row) {
+            return row.tag === value;
         },
-        methods: {
-            handleClick(tab) {
-                let payload = {
-                    page: 1,
-                    pageSize: 20,
-                    generated: 'false'
-                }
-                if(this.activeName === 'first'){
-                    payload.generated = 'false'
-                } else {
-                    payload.generated = 'true'
-                }
-                
-                this.loadFLTable(payload)
-            },
-            getTableHeight(){
-                this.tableHeight = document.documentElement.clientHeight - 200
-            },
-            filterTag(value, row) {
-                return row.tag === value;
-            },
-            init(){
-                let payload = {
-                    page:1,
-                    pageSize:20,
-                    generated:'false'
-                }
-                this.loadFLTable(payload)
-            },
-            loadFLTable(payload){
-                const loading = this.$loading({
-                    lock: true,
-                    text: "请耐心等待,正在加载数据。。",
-                    spinner: "el-icon-loading",
-                    background: "rgba(0, 0, 0, 0.7)"
+        oneKeyGenerate() {
+            const loading = this.$loading({
+                lock: true,
+                text: "请耐心等待,正在加载数据。。",
+                spinner: "el-icon-loading",
+                background: "rgba(0, 0, 0, 0.7)"
+            });
+            this.$store
+                .dispatch("get_alipay_tables", this.setModelId({}))
+                .then(data => {
+                    if (data.code == 200) {
+                        this.activeName = "second";
+                        this.$store
+                            .dispatch(
+                                "view_uploaded_group_list",
+                                this.setModelId({
+                                    page: 1,
+                                    pageSize: 20,
+                                    generated: true
+                                })
+                            )
+                            .then(res => {
+                                loading.close();
+                                if (res.code == 200) {
+                                    this.$store.commit("set_files_list", res);
+                                } else {
+                                    this.$message({
+                                        type: "error",
+                                        message: res.message
+                                            ? res.message
+                                            : "加载失败"
+                                    });
+                                }
+                            });
+                    } else {
+                        loading.close();
+                        this.$message({
+                            type: "error",
+                            message: data.message ? data.message : "加载失败"
+                        });
+                    }
                 });
-                this.beforePayload = payload
-                this.$store.dispatch("view_files_list", this.setModelId(payload)).then(data => {
+        },
+        // 导出
+        onExport() {
+            const loading = this.$loading({
+                lock: true,
+                text: "请耐心等待,正在加载数据。。",
+                spinner: "el-icon-loading",
+                background: "rgba(0, 0, 0, 0.7)"
+            });
+            let payload = this.$store.getters.getUpSearchSortParams;
+            this.$store
+                .dispatch("export_view_detail_batchExport", this.setModelId(payload))
+                .then(data => {
                     loading.close();
                     if (data.code == 200) {
-                        this.$store.commit("set_files_list", data);
+                        let iframe = document.createElement("iframe");
+                        iframe.style.display = "none";
+                        iframe.src =
+                            batchExportDownload + "?filepath=" + data.filepath;
+                        iframe.id = "myIframe2";
+                        console.log( batchExportDownload + "?filepath=" + data.filepath,'dd')
+                        document.body.appendChild(iframe);
                     } else {
-                        this.$message({ type: "error",  message: data.message ? data.message : "加载失败" });
+                        this.$message({
+                            type: "error",
+                            message: data.message ? data.message : "加载失败"
+                        });
                     }
                 });
-            },
-            loadTableHeader(row, column, cell, event) {
-                this.$store.commit('set_current_fileobj', row) 
-                let payload = {
-                    page:1,
-                    pageSize:20,
-                    fileId:row.id
-                }
-                this.$store.commit('set_up_search_sort_params', payload); // 保存文件基础信心
-                this.loadSearchSortData(payload) // 加载文件内容
-                this.loadTableHeaderDataById(payload) // 加载文件headers
-            },
-            // 搜索排序加载文件
-            loadSearchSortData(payload){
-                const loading = this.$loading({
-                    lock: true,
-                    text: "请耐心等待,正在加载数据。。",
-                    spinner: "el-icon-loading",
-                    background: "rgba(0, 0, 0, 0.7)"
+        },
+        init() {
+            let payload = {
+                page: 1,
+                pageSize: 20,
+                generated: "false"
+            };
+            this.loadFLTable(payload);
+        },
+        loadFLTable(payload) {
+            const loading = this.$loading({
+                lock: true,
+                text: "请耐心等待,正在加载数据。。",
+                spinner: "el-icon-loading",
+                background: "rgba(0, 0, 0, 0.7)"
+            });
+            this.beforePayload = payload;
+            this.$store
+                .dispatch("view_files_list", this.setModelId(payload))
+                .then(data => {
+                    loading.close();
+                    if (data.code == 200) {
+                        this.$store.commit("set_files_list", data);
+                    } else {
+                        this.$message({
+                            type: "error",
+                            message: data.message ? data.message : "加载失败"
+                        });
+                    }
                 });
+        },
+        loadTableHeader(row, column, cell, event) {
+            this.$store.commit("set_current_fileobj", row);
+            let payload = {
+                page: 1,
+                pageSize: 20,
+                fileId: row.id
+            };
+            this.$store.commit("set_current_temp_pagesize", 20);
+            this.$store.commit("set_up_search_sort_params", payload); // 保存文件基础信心
+            this.loadSearchSortData(payload); // 加载文件内容
+            this.loadTableHeaderDataById(payload); // 加载文件headers
+        },
+        // 搜索排序加载文件
+        loadSearchSortData(payload) {
+            const loading = this.$loading({
+                lock: true,
+                text: "请耐心等待,正在加载数据。。",
+                spinner: "el-icon-loading",
+                background: "rgba(0, 0, 0, 0.7)"
+            });
 
-                let upSearchSortParams = this.$store.getters.getUpSearchSortParams;
-                let currentFile = this.$store.getters.getCurrentFile;
+            let upSearchSortParams = this.$store.getters.getUpSearchSortParams;
+            let currentFile = this.$store.getters.getCurrentFile;
 
-                payload.fileId = currentFile.id;
-                payload.orders = upSearchSortParams.orders;
-                payload.values = upSearchSortParams.values;
-                payload.mode = upSearchSortParams.mode;
-                
-                this.beforePayload = payload
-                this.$store.dispatch('view_data_by_query', this.setModelId(payload)).then(data => {
-                    loading.close()
+            payload.fileId = currentFile.id;
+            payload.orders = upSearchSortParams.orders;
+            payload.values = upSearchSortParams.values;
+            payload.mode = upSearchSortParams.mode;
+
+            this.beforePayload = payload;
+            this.$store
+                .dispatch("view_data_by_query", this.setModelId(payload))
+                .then(data => {
+                    loading.close();
                     if (data.code == 200) {
-                       this.$store.commit("set_file_content_by_id", data);
+                        this.$store.commit("set_file_content_by_id", data);
                     } else {
-                        this.$message({ type: "error",  message: data.message ? data.message : "加载失败" });
+                        this.$message({
+                            type: "error",
+                            message: data.message ? data.message : "加载失败"
+                        });
                     }
                 });
-            },
-            loadTableHeaderDataById(payload){
-                const loading = this.$loading({
-                    lock: true,
-                    text: "请耐心等待。。",
-                    spinner: "el-icon-loading",
-                    background: "rgba(0, 0, 0, 0.7)"
-                });
-                let params = { fileId: payload.fileId }
-                this.$store.commit('set_table_header', {})
-                this.$store.dispatch("get_headers_by_id", this.setModelId(params)).then(data => {
+        },
+        loadTableHeaderDataById(payload) {
+            const loading = this.$loading({
+                lock: true,
+                text: "请耐心等待。。",
+                spinner: "el-icon-loading",
+                background: "rgba(0, 0, 0, 0.7)"
+            });
+            let params = { fileId: payload.fileId };
+            this.$store.commit("set_table_header", {});
+            this.$store
+                .dispatch("get_headers_by_id", this.setModelId(params))
+                .then(data => {
                     loading.close();
                     if (data.code == 200) {
-                        this.$store.commit('set_table_header', data.result.fields)
+                        this.$store.commit("set_table_header", data.result);
+                        this.loadDetailHeaders(payload.fileId);
                     } else {
-                        this.$message({ type: "error",  message: data.message ? data.message : "失败" });
+                        this.$message({
+                            type: "error",
+                            message: data.message ? data.message : "失败"
+                        });
                     }
                 });
-            }
         }
-    };
+    }
+};
 </script>
 <style scoped>
-    .left-wrapper {
-        padding-top: 0px;
-    }
-    .clear-hint {
-        float: right;
-        color: #e33f3f;
-        font-size: 14px;
-        line-height: 56px;
-        margin-right: 180px;
-    }
-</style>
+.excel-btns {
+    border-top: 2px outset wheat;
+    border-bottom: 2px outset wheat;
+    padding: 5px 10px;
+    text-align: right;
+}
+.left-files {
+    height: 100%;
+    padding-top: 0px;
+    height: calc(100vh - 110px);
+    border-right: none;
+    background: #032d58;
+    min-height: 700px;
+}
+</style>

+ 285 - 0
src/modules/createmodel/components/MultidimensionalTable.vue

@@ -0,0 +1,285 @@
+<template>
+    <el-table
+        row-key="id"
+        :tree-props="{ children: 'children' }"
+        :data="fileLists.result"
+        border
+        size="mini"
+        :height="tableHeight"
+        highlight-current-row
+        tooltip-effect="dark"
+        ref="fileListsTable"
+        @row-click="(row, column, e) => loadTableHeader(row, column, e)"
+        style="width: 100%; height: 100%;"
+        class="multidimensional-table"
+    >
+        <el-table-column prop="count" label="" width="50"></el-table-column>
+        <el-table-column
+            prop="filename"
+            label="文件名称"
+            :show-overflow-tooltip="true"
+            min-width="120"
+        ></el-table-column>
+        <!-- <el-table-column prop="generatedStr" label="类型" min-width="50"> </el-table-column> -->
+    </el-table>
+</template>
+
+<script>
+import pagination from "@/components/Pagination.vue";
+import { uploadedGroupList } from "@/service/createmodel/apiLogin";
+
+export default {
+    components: {
+        pagination
+    },
+    data() {
+        return {
+            beforePayload: {
+                page: 1,
+                pageSize: 20,
+                generated: "false"
+            },
+            activeName: "first",
+            isAliPay: true,
+            // 要展开的行,数值的元素是row的key值
+            expands: []
+        };
+    },
+    computed: {
+        fileLists: {
+            get() {
+                let fileLists = this.$store.getters.getFilesList;
+                fileLists.result = fileLists.result.map((res, idx) => {
+                    return {
+                        ...res,
+                        count: "",
+                        filename: res.groupName
+                    };
+                });
+                console.log(fileLists, "dddd");
+                return fileLists;
+            }
+        },
+        activeName1: {
+            get() {
+                return this.$store.getters.getFileActiveName;
+            },
+            set(val) {
+                this.$store.commit("set_file_active_name", "first");
+            }
+        }
+    },
+    created() {
+        let offsetHeight = 42;
+        // let locationhref = window.location.href;
+        // if(locationhref.indexOf('alipay') !== -1){
+        //     this.isAliPay = true
+        //     offsetHeight = 42
+        // }
+        this.tableHeight = this.getTableHeight(183 + offsetHeight);
+    },
+    mounted() {
+        this.init();
+    },
+    methods: {
+        handleClick(tab) {
+            let payload = {
+                page: 1,
+                pageSize: 20,
+                generated: "false"
+            };
+            if (this.activeName === "first") {
+                payload.generated = "false";
+            } else {
+                payload.generated = "true";
+            }
+            this.$store.commit("set_file_active_name", payload.generated);
+            this.loadFLTable(payload);
+        },
+        filterTag(value, row) {
+            return row.tag === value;
+        },
+        init() {
+            let payload = {
+                page: 1,
+                pageSize: 20,
+                generated: "true"
+            };
+            // uploadedGroupList (this.setModelId(payload)).then(res=> {
+            // debugger
+            // })
+            this.loadFLTable(payload);
+        },
+        loadFLTable(payload) {
+            const loading = this.$loading({
+                lock: true,
+                text: "请耐心等待,正在加载数据。。",
+                spinner: "el-icon-loading",
+                background: "rgba(0, 0, 0, 0.7)"
+            });
+            this.beforePayload = payload;
+            this.$store
+                .dispatch("view_uploaded_group_list", this.setModelId(payload))
+                .then(data => {
+                    loading.close();
+                    if (data.code == 200) {
+                        this.$store.commit("set_files_list", data);
+                    } else {
+                        this.$message({
+                            type: "error",
+                            message: data.message ? data.message : "加载失败"
+                        });
+                    }
+                });
+        },
+        loadTableHeader(row, column, e) {
+            if (row.children && row.children.length > 0) {
+                if (
+                    e.currentTarget.firstElementChild.firstElementChild
+                        .firstElementChild.tagName == "DIV"
+                ) {
+                    e.currentTarget.firstElementChild.firstElementChild.firstElementChild.click();
+                } else {
+                    e.currentTarget.firstElementChild.firstElementChild.firstElementChild.nextElementSibling.click();
+                }
+                return;
+            }
+            this.$store.commit("set_current_fileobj", row);
+            let payload = {
+                page: 1,
+                pageSize: 20,
+                fileId: row.id
+            };
+            this.$store.commit("set_current_temp_pagesize", 20);
+            this.$store.commit("set_up_search_sort_params", payload); // 保存文件基础信心
+            this.loadSearchSortData(payload); // 加载文件内容
+            this.loadTableHeaderDataById(payload); // 加载文件headers
+        },
+        // 搜索排序加载文件
+        loadSearchSortData(payload) {
+            const loading = this.$loading({
+                lock: true,
+                text: "请耐心等待,正在加载数据。。",
+                spinner: "el-icon-loading",
+                background: "rgba(0, 0, 0, 0.7)"
+            });
+
+            let upSearchSortParams = this.$store.getters.getUpSearchSortParams;
+            let currentFile = this.$store.getters.getCurrentFile;
+
+            payload.fileId = currentFile.id;
+            payload.orders = upSearchSortParams.orders;
+            payload.values = upSearchSortParams.values;
+            payload.mode = upSearchSortParams.mode;
+
+            this.beforePayload = payload;
+            this.$store
+                .dispatch("view_data_by_query", this.setModelId(payload))
+                .then(data => {
+                    loading.close();
+                    if (data.code == 200) {
+                        this.$store.commit("set_file_content_by_id", data);
+                    } else {
+                        this.$message({
+                            type: "error",
+                            message: data.message ? data.message : "加载失败"
+                        });
+                    }
+                });
+        },
+        loadTableHeaderDataById(payload) {
+            const loading = this.$loading({
+                lock: true,
+                text: "请耐心等待。。",
+                spinner: "el-icon-loading",
+                background: "rgba(0, 0, 0, 0.7)"
+            });
+            let params = { fileId: payload.fileId };
+            this.$store.commit("set_table_header", {});
+            this.$store
+                .dispatch("get_headers_by_id", this.setModelId(params))
+                .then(data => {
+                    loading.close();
+                    if (data.code == 200) {
+                        this.$store.commit("set_table_header", data.result);
+                        this.loadDetailHeaders(payload.fileId);
+                    } else {
+                        this.$message({
+                            type: "error",
+                            message: data.message ? data.message : "失败"
+                        });
+                    }
+                });
+        },
+        loadDetailHeaders(id) {
+            let payload = {
+                fileId: id
+            };
+            this.$store
+                .dispatch("view_detail_ali_headers", this.setModelId(payload))
+                .then(data => {
+                    if (data.code == 200) {
+                        let headResult = data.result;
+                        let finalHeaders = {};
+                        for (let v in headResult.fields) {
+                            finalHeaders[v] = {
+                                label: headResult.fields[v],
+                                alignment: "left",
+                                clickable: "none",
+                                valueType: "none"
+                            };
+                            for (let k in headResult.mainProps) {
+                                if (v == k) {
+                                    finalHeaders[v] = {
+                                        label: headResult.fields[v],
+                                        alignment:
+                                            headResult.mainProps[v].alignment,
+                                        clickable:
+                                            headResult.mainProps[v].clickable,
+                                        valueType:
+                                            headResult.mainProps[v].valueType
+                                    };
+                                }
+                            }
+                        }
+
+                        this.$store.commit(
+                            "set_current_ali_headers",
+                            finalHeaders
+                        );
+                    } else {
+                        let msg = data.message ? data.message : "加载失败";
+                        console.log(msg);
+                        //this.$message({ type: "error",  message: data.message ? data.message : "加载失败" });
+                    }
+                });
+        }
+    }
+};
+</script>
+<style scoped>
+.excel-btns {
+    border-top: 2px outset wheat;
+    border-bottom: 2px outset wheat;
+    padding: 5px 10px;
+    text-align: right;
+}
+
+.left-files {
+    height: 100%;
+    padding-top: 0px;
+    height: calc(100vh - 110px);
+    border-right: none;
+    background: #032d58;
+    min-height: 700px;
+}
+</style>
+
+<style>
+.multidimensional-table .el-table__row--level-1 .cell {
+    padding-left: 25px;
+}
+.multidimensional-table [class*="el-table__row--level"] .el-table__expand-icon {
+    color: #fff;
+}
+</style>

+ 2 - 8
src/modules/createmodel/file/File.vue

@@ -1,5 +1,5 @@
 <template>
-    <div class="con-wrapper">
+    <div>
         <result-table></result-table>
         <import-file :upload-url="uploadUrl" :title="title"></import-file>
     </div>
@@ -24,10 +24,4 @@
         },
     };
 
-</script>
-<style scoped>
-    .con-wrapper {
-        min-height: 300px;
-        width: 100%;
-    }
-</style>
+</script>

+ 145 - 137
src/modules/createmodel/file/components/ImportFile.vue

@@ -1,160 +1,168 @@
 <template>
-    <div class="right-wrapper openFil">
-        <el-dialog 
-            :append-to-body="true" :title="title"  width="36%"
-            :visible.sync="importOn"
-            :before-close="handleClose" 
-            :close-on-click-modal="hasClose" 
-            :show-close="false"
-            :close-on-press-escape="hasClose">
+    <el-dialog 
+        :append-to-body="true" :title="title"  width="36%"
+        :visible.sync="importOn"
+        :before-close="handleClose" 
+        :close-on-click-modal="hasClose" 
+        :show-close="false"
+        :close-on-press-escape="hasClose">
 
-            <div class="upload">
-                <el-upload
-                    multiple
-                    class="upload-demo"
-                    ref="upload" 
-                    :action="apiUrl + uploadUrl"
-                    :on-remove="handleRemove"
-                    :on-success="handleSuccess"
-                    :limit="50"
-                    :data="modelId"
-                    :on-error="exportError" 
-                    :on-exceed="exportExceed"
-                    :on-progress="exportProgress" 
-                    :file-list="filelist">
-                    <el-button slot="trigger" size="small" type="primary">上 传 文 件</el-button>
-                    <div slot="tip" class="el-upload__tip" style="font-size:14px;"> 只能上传excel,csv文件,上传最大数量为50个文件 </div>
-                </el-upload>
-            </div>
-            <span slot="footer">
-                <el-button size="mini"  @click="cancel(0)">关闭</el-button>
-            </span>
-        </el-dialog>
-    </div>
+        <div class="upload">
+            <el-upload
+                multiple
+                class="upload-demo"
+                ref="upload" 
+                :action="apiUrl + uploadUrl"
+                :on-remove="handleRemove"
+                :on-success="handleSuccess"
+                :limit="300"
+                :data="modelId"
+                :on-error="exportError" 
+                :on-exceed="exportExceed"
+                :on-progress="exportProgress" 
+                :file-list="filelist">
+                <el-button slot="trigger" size="small" type="primary">上 传 文 件</el-button>
+                <div slot="tip" class="el-upload__tip" style="font-size:14px;"> 只能上传excel,csv文件,上传最大数量为300个文件 </div>
+            </el-upload>
+        </div>
+        <span slot="footer">
+            <el-button size="mini"  @click="cancel(0)">关闭</el-button>
+        </span>
+    </el-dialog>
 </template>
 
 <script>
-    import { apiUrl } from "@/config.js";
-    export default {
-        props: {
-            uploadUrl: {
-                type: String,
-                required: true
-            },
-            title: {
-                type: String,
-                required: true
-            }
+import { apiUrl } from "@/config.js";
+export default {
+    props: {
+        uploadUrl: {
+            type: String,
+            required: true
         },
+        title: {
+            type: String,
+            required: true
+        }
+    },
 
-        data() {
-            return {
-                apiUrl: apiUrl,
-                uploading: false,  //上传过程按钮 loading 状态
-                hasClose: true,  //上传过程(无头部X关闭按钮 ,以及点击空白地方无法关闭) 只能点击取消关闭弹框 ,
-                modelId:{
-                    modelId:this.$store.getters.getCurrentModelGroup.id
-                }
-            };
-        },
-        computed: {
-            filelist: {
-                get() {
-                    return this.$store.getters.getFile;
-                },
-                set(val) {
-                    console.log(this.$store.getters.getFile);
-                }
+    data() {
+        return {
+            apiUrl: apiUrl,
+            uploading: false, //上传过程按钮 loading 状态
+            hasClose: true, //上传过程(无头部X关闭按钮 ,以及点击空白地方无法关闭) 只能点击取消关闭弹框 ,
+            modelId: {
+                modelId: this.$store.getters.getCurrentModelGroup.id
+            }
+        };
+    },
+    computed: {
+        filelist: {
+            get() {
+                return this.$store.getters.getFile;
             },
-            importOn: {
-                get() {
-                    return this.$store.getters.getImportOn;
-                },
-                set(val) {
-                    console.log(this.$store.getters.getImportOn);
-                }
+            set(val) {
+                console.log(this.$store.getters.getFile);
+            }
+        },
+        importOn: {
+            get() {
+                return this.$store.getters.getImportOn;
             },
+            set(val) {
+                console.log(this.$store.getters.getImportOn);
+            }
+        }
+    },
+    mounted() {
+        // this.init();
+    },
+    methods: {
+        handleClose(done) {
+            this.$store.commit("set_import_on", false);
+            this.uploading = false;
+            this.hasClose = true;
+            this.$refs.upload.clearFiles();
+            done();
         },
-        mounted() {
-            // this.init();
+        cancel(type) {
+            this.$store.commit("set_import_on", false);
+            this.uploading = false;
+            this.hasClose = true;
+            this.$refs.upload.clearFiles();
         },
-        methods: {
-            handleClose(done) {
-                this.$store.commit("set_import_on", false);
-                this.uploading = false;
-                this.hasClose = true;
-                this.$refs.upload.clearFiles();
-                done();
-            },
-            cancel(type) {
-                this.$store.commit("set_import_on", false);
-                this.uploading = false;
-                this.hasClose = true;
-                this.$refs.upload.clearFiles();
-            },
-            handleRemove(file, fileList) {
-                this.$message({ type: "success", message: "成功移除文件" });
-            },
-            handleSuccess(response, file, fileList){
-                let param = {
-                    page:1,
-                    pageSize:20,
-                }
-                const loading = this.$loading({
-                    lock: true,
-                    text: "请耐心等待,正在加载数据。。",
-                    spinner: "el-icon-loading",
-                    background: "rgba(0, 0, 0, 0.7)"
-                });
-                this.$store.dispatch("view_files_list", this.setModelId(param)).then(data => {
+        handleRemove(file, fileList) {
+            this.$message({ type: "success", message: "成功移除文件" });
+        },
+        handleSuccess(response, file, fileList) {
+            let param = {
+                page: 1,
+                pageSize: 20
+            };
+            const loading = this.$loading({
+                lock: true,
+                text: "请耐心等待,正在加载数据。。",
+                spinner: "el-icon-loading",
+                background: "rgba(0, 0, 0, 0.7)"
+            });
+
+            param.generated = "false";
+            this.$store
+                .dispatch("view_files_list", this.setModelId(param))
+                .then(data => {
                     loading.close();
                     if (data.code == 200) {
                         this.$store.commit("set_files_list", data);
                     } else {
-                        this.$message({ type: "error",  message: data.message ? data.message : "加载失败" });
+                        this.$message({
+                            type: "error",
+                            message: data.message ? data.message : "加载失败"
+                        });
                     }
                 });
-            },
-            exportProgress(response, file, fileList) {
-                //文件上传过程中的函数(在这里获取进度条的进度)
-                this.uploading = true;
-                this.hasClose = false;
-                fileList.forEach(item => {
-                    if (item.uid === file.uid) {
-                        if (response.percent == 100 && item.status == "uploading") {
-                            response.percent = item.progressPercent;
+        },
+        exportProgress(response, file, fileList) {
+            //文件上传过程中的函数(在这里获取进度条的进度)
+            this.uploading = true;
+            this.hasClose = false;
+            fileList.forEach(item => {
+                if (item.uid === file.uid) {
+                    if (response.percent == 100 && item.status == "uploading") {
+                        response.percent = item.progressPercent;
+                    } else {
+                        if (response.percent == 100) {
+                            response.percent = 99;
                         } else {
-                            if (response.percent == 100) {
-                                response.percent = 99;
-                            } else {
-                                item.progressFlag = true;
-                                item.progressPercent = Math.abs( item.percentage.toFixed(0) );
-                            }
+                            item.progressFlag = true;
+                            item.progressPercent = Math.abs(
+                                item.percentage.toFixed(0)
+                            );
                         }
                     }
-                });
-            },
-            exportExceed(files, fileList) {
-                this.uploading = false;
-                this.hasClose = true;
-                let length = files.length;
-                this.$message({
-                    showClose: true,
-                    duration: 10000,
-                    type: "warning",
-                    message: "当前选择文件数量为" + length + "已超出最大文件上传限制"
-                });
-            },
-            exportError(err, file, fileList) {
-                this.uploading = false;
-                this.hasClose = true;
-            },
+                }
+            });
+        },
+        exportExceed(files, fileList) {
+            this.uploading = false;
+            this.hasClose = true;
+            let length = files.length;
+            this.$message({
+                showClose: true,
+                duration: 10000,
+                type: "warning",
+                message:
+                    "当前选择文件数量为" + length + "已超出最大文件上传限制"
+            });
+        },
+        exportError(err, file, fileList) {
+            this.uploading = false;
+            this.hasClose = true;
         }
-    };
+    }
+};
 </script>
 <style scoped>
-    .upload {
-        max-height: 500px;
-        margin-top: 12px;
-    }
-</style>
+.upload {
+    max-height: 500px;
+    margin-top: 12px;
+}
+</style>

+ 124 - 107
src/modules/createmodel/file/components/ResultTable.vue

@@ -1,14 +1,17 @@
 <template>
-    <div class="left-wrapper">
-        <div style="text-align:left;padding:5px 0;">
+    <div class="filel-wrapper">
+        <div style="text-align:left;padding:5px 0;margin-left:20px;">
             <el-button type="primary" size="small"  @click="openImport('A')">导 入 动 态 数 据</el-button>
+            <el-button type="primary" size="small" style="position: relative;" >数 据 模 板
+            <a style="position: absolute;width: 100%;height: 100%;left: 0;top: 0; opacity: 0;z-index: 9;" href="/static/excel/temp.xlsx" download="数据模板.xlsx">数据模板</a>
+            </el-button>
         </div>
-        <div class="nb-table nb-table--bgc">
+        <div class="nb-table">
             <el-table 
-                :data="filesGenerateList.result" 
+                :data="filesList.result" 
                 border 
                 size="mini" 
-                height="560" 
+                :height="tableHeight"
                 highlight-current-row
                 tooltip-effect="dark" 
                 ref="fileListsTable" 
@@ -16,7 +19,7 @@
                     <el-table-column prop="count" label="序号" width="80"></el-table-column>
                     <el-table-column prop="filename" label="文件名称" :show-overflow-tooltip="true" min-width="120">
                     </el-table-column>
-                    <el-table-column prop="modelName" label="分组名称" :show-overflow-tooltip="true" min-width="120">
+                    <el-table-column prop="modelName" label="案件名称" :show-overflow-tooltip="true" min-width="120">
                     </el-table-column>
                     <el-table-column prop="uploadDate" label="创建时间" :show-overflow-tooltip="true" min-width="120">
                     </el-table-column>
@@ -29,127 +32,141 @@
                         </template>
                     </el-table-column>
             </el-table>
-            <pagination :dataList="filesGenerateList" :upParam="beforePayload" @loadMethod="loadFLTable"></pagination>
+            <pagination :dataList="filesList" :upParam="beforePayload" @loadMethod="loadFLTable"></pagination>
         </div>
         <detail-table></detail-table>
     </div>
 </template>
 
 <script>
-    import pagination from "@/components/Pagination.vue";
-    import { downloadAndDeleteById } from '@/service/createmodel/fileService.js'
-    import detailTable from './DetailTable.vue'
-    export default {
-        components: {
-            pagination,
-            detailTable,
+import pagination from "@/components/Pagination.vue";
+import { downloadAndDeleteById } from "@/service/createmodel/fileService.js";
+import detailTable from "../../components/DetailTable.vue";
+export default {
+    components: {
+        pagination,
+        detailTable
+    },
+    data() {
+        return {
+            beforePayload: {
+                page: 1,
+                pageSize: 20,
+                generated: "false"
+            }
+        };
+    },
+    computed: {
+        filesList: {
+            get() {
+                let fileListsObj = this.$store.getters.getFilesList;
+                return fileListsObj;
+            }
+        }
+    },
+    created() {
+        this.tableHeight = this.getTableHeight(210);
+    },
+    mounted() {
+        this.loadFLTable({ page: 1, pageSize: 20 });
+    },
+    methods: {
+        createmodel() {
+            this.$router.push("/model");
         },
-        data() {
-            return {
-                beforePayload:{
-                    page:1,
-                    pageSize:20,
-                    generated:"false"
-                },
-            };
+        openImport() {
+            this.$store.commit("set_import_on", true);
         },
-        computed: {
-            filesGenerateList: {
-                get() {
-                    let fileListsObj = this.$store.getters.getFilesGenerateList;
-                    return fileListsObj;
-                }
+        loadFLTable(payload) {
+            const loading = this.$loading({
+                lock: true,
+                text: "请耐心等待,正在加载数据。。",
+                spinner: "el-icon-loading",
+                background: "rgba(0, 0, 0, 0.7)"
+            });
+            payload.generated = "false";
+            this.beforePayload = payload;
+            try {
+                this.$store
+                    .dispatch("view_files_list", this.setModelId(payload))
+                    .then(data => {
+                        loading.close();
+                        if (data.code == 200) {
+                            this.$store.commit("set_files_list", data);
+                        } else {
+                            this.$message({
+                                type: "error",
+                                message: data.message
+                                    ? data.message
+                                    : "加载失败"
+                            });
+                        }
+                    });
+            } catch (e) {
+                console.log(e, "error");
             }
         },
-        mounted() {
-            this.loadFLTable({ page:1,pageSize:20})
+        // 查看文件
+        viewFileById(file) {
+            this.$store.commit("is_detail_table_con", true);
+            this.$store.commit("set_current_fileobj", file);
         },
-        methods: {
-            createmodel(){
-                this.$router.push('/model');
-            },
-            openImport() {
-                this.$store.commit("set_import_on", true);
-            },
-            loadFLTable(payload){
-                const loading = this.$loading({
-                    lock: true,
-                    text: "请耐心等待,正在加载数据。。",
-                    spinner: "el-icon-loading",
-                    background: "rgba(0, 0, 0, 0.7)"
-                });
-                payload.generated = "false"
-                this.beforePayload = payload
-                this.$store.dispatch("view_files_list", this.setModelId(payload)).then(data => {
-                    loading.close();
-                    if (data.code == 200) {
-                        this.$store.commit("set_files_generate_list", data);
-                    } else {
-                        this.$message({ type: "error",  message: data.message ? data.message : "加载失败" });
-                    }
-                });
-            },
-            // 查看文件
-            viewFileById(file){
-                this.$store.commit("is_detail_table_con", true);
-                this.$store.commit('set_current_fileobj', file) 
-            },
-            // 下载文件
-            downloadFile(file){
-                const loading = this.$loading({
-                    lock: true,
-                    text: "请耐心等待,正在加载数据。。",
-                    spinner: "el-icon-loading",
-                    background: "rgba(0, 0, 0, 0.7)"
-                });
-                this.$store.dispatch("export_by_query", this.setModelId({ id: file.id, fileId: file.id })).then(data => {
+        // 下载文件
+        downloadFile(file) {
+            const loading = this.$loading({
+                lock: true,
+                text: "请耐心等待,正在加载数据。。",
+                spinner: "el-icon-loading",
+                background: "rgba(0, 0, 0, 0.7)"
+            });
+            this.$store
+                .dispatch(
+                    "export_by_query",
+                    this.setModelId({ id: file.id, fileId: file.id })
+                )
+                .then(data => {
                     loading.close();
                     if (data.code == 200) {
-                            let iframe = document.createElement('iframe');
-                            iframe.style.display = 'none';
-                            iframe.src = downloadAndDeleteById + '?id='+data.result;
-                            iframe.id = 'myIframe2';
-                            document.body.appendChild(iframe);
+                        let iframe = document.createElement("iframe");
+                        iframe.style.display = "none";
+                        iframe.src =
+                            downloadAndDeleteById + "?id=" + data.result;
+                        iframe.id = "myIframe2";
+                        document.body.appendChild(iframe);
                     } else {
-                        this.$message({ type: "error",  message: data.message ? data.message : "加载失败" });
+                        this.$message({
+                            type: "error",
+                            message: data.message ? data.message : "加载失败"
+                        });
                     }
                 });
-            },
-            // 删除文件
-            deleteLeftFile(file){
-                const loading = this.$loading({
-                    lock: true,
-                    text: "请耐心等待。。",
-                    spinner: "el-icon-loading",
-                    background: "rgba(0, 0, 0, 0.7)"
-                });
-                this.$store.dispatch("delete_file_by_id", this.setModelId({id:file.id})).then(data => {
+        },
+        // 删除文件
+        deleteLeftFile(file) {
+            const loading = this.$loading({
+                lock: true,
+                text: "请耐心等待。。",
+                spinner: "el-icon-loading",
+                background: "rgba(0, 0, 0, 0.7)"
+            });
+            this.$store
+                .dispatch("delete_file_by_id", this.setModelId({ id: file.id }))
+                .then(data => {
                     loading.close();
                     if (data.code == 200) {
-                        this.loadFLTable({page:1,pageSize:20})
-                        this.$message({ type: "success",  message: data.message ? data.message : "成功" });
+                        this.loadFLTable({ page: 1, pageSize: 20 });
+                        this.$message({
+                            type: "success",
+                            message: data.message ? data.message : "成功"
+                        });
                     } else {
-                        this.$message({ type: "error",  message: data.message ? data.message : "失败" });
+                        this.$message({
+                            type: "error",
+                            message: data.message ? data.message : "失败"
+                        });
                     }
                 });
-            },
         }
-    };
-</script>
-<style scoped>
-    .nb-toparea {
-        margin: 10px 0 6px;
-    }
-
-    .nb-toparea__leftbtn1 {
-        width: 160px;
     }
-
-    .nb-toparea__rightbtn0 {
-        width: 150px;
-    }
-
-    .left-wrapper {
-        padding-top: 0px;
-    }
-</style>
+};
+</script>

+ 151 - 150
src/modules/createmodel/group/Group.vue

@@ -1,15 +1,14 @@
 <template>
-    <div class="left-wrapper">
-        <div style="text-align:left;padding:5px 0;">
-            <el-button type="primary" size="small"  @click="showAddGroup()">创 建 分 组</el-button>
+    <div class="group-wrapper">
+        <div style="text-align:left;padding:5px 0;margin-left:20px;">
+            <el-button type="primary" size="small"  @click="showAddGroup()">创 建 案 件</el-button>
+         
         </div>
-        <div class="nb-table nb-table--bgc">
-            <el-table element-loading-text="数据加载中" element-loading-spinner="el-icon-loading"
-                :data="groupLists.result" border size="mini" height="650" highlight-current-row
-                max-height="400" tooltip-effect="dark" ref="groupListsTable"  style="width: 100%">
-                <!-- <el-table-column prop="id" class-name="id-key" label="" width="0"></el-table-column> -->
-                <!-- <el-table-column prop="count" label="序号" width="80"></el-table-column> -->
-                <el-table-column prop="modelName" label="分组名称" :show-overflow-tooltip="true" min-width="120">
+        <div class="nb-table">
+            <el-table
+                :data="groupLists.result" border size="mini" :height="tableHeight" highlight-current-row
+                tooltip-effect="dark" ref="groupListsTable"  style="width: 100%">
+                <el-table-column prop="modelName" label="案件名称" :show-overflow-tooltip="true" min-width="120">
                 </el-table-column>
                 <el-table-column prop="lastModifyTime" label="时间" :show-overflow-tooltip="true" min-width="120">
                 </el-table-column>
@@ -24,12 +23,12 @@
             <pagination :dataList="groupLists" :upParam="beforePayload" @loadMethod="loadGroupListTable"></pagination>
         </div>
 
-        <el-dialog   class="dialog-task-list dialogbg"  width="50%"
+        <el-dialog width="50%"
             :append-to-body="true" :title="currentFileName" 
             :visible.sync="showAddGroupFlag"
             :show-close="true" >
                  <el-form :inline="true" :model="groupForm" ref="groupForm" label-width="100px" label-position="left" size="mini">
-                    <el-form-item label="分组名称" prop="modelName">
+                    <el-form-item label="案件名称" prop="modelName">
                         <el-input clearable v-model="groupForm.modelName"></el-input>
                     </el-form-item>
                     <el-form-item>
@@ -42,152 +41,154 @@
 </template>
 
 <script>
-    import pagination from "@/components/Pagination.vue";
-    export default {
-        components: {
-            pagination
-        },
-        data() {
-            return {
-                beforePayload:{
-                    page:1,
-                    pageSize:20
-                },
-                groupForm: {
-                    modelName:''
-                },
-                currentFileName:'创建分组',
-                editFlag:true,
-                showAddGroupFlag:false,
-            };
+import pagination from "@/components/Pagination.vue";
+
+export default {
+    components: {
+        pagination
+    },
+    data() {
+        return {
+            beforePayload: {
+                page: 1,
+                pageSize: 20
+            },
+            groupForm: {
+                modelName: ""
+            },
+            currentFileName: "创建案件",
+            editFlag: true,
+            showAddGroupFlag: false
+        };
+    },
+    computed: {
+        groupLists: {
+            get() {
+                let groupLists = this.$store.getters.getModelGroupList;
+                return groupLists;
+            }
+        }
+    },
+    created() {
+        this.tableHeight = this.getTableHeight(210);
+    },
+    mounted() {
+        this.loadGroupListTable({ page: 1, pageSize: 20 });
+    },
+    methods: {
+        // 添加分组
+        cancel() {
+            this.showAddGroupFlag = false;
+            this.groupForm.modelName = "";
         },
-        computed: {
-            groupLists: {
-                get() {
-                    let groupLists = this.$store.getters.getModelGroupList;
-                    return groupLists;
+        onSubmit() {
+            this.$refs.groupForm.validate(valid => {
+                if (valid) {
+                    let payload = {
+                        ...this.groupForm
+                    };
+                    let dispatchStr = this.editFlag
+                        ? "update_model_group"
+                        : "save_model_group";
+                    this.$store.dispatch(dispatchStr, payload).then(data => {
+                        if (data.code == 200) {
+                            this.showAddGroupFlag = false;
+                            this.loadGroupListTable({ page: 1, pageSize: 20 });
+                            this.$message({
+                                type: "success",
+                                message: data.message ? data.message : "成功"
+                            });
+                        } else {
+                            this.$message({
+                                type: "error",
+                                message: data.message ? data.message : "失败"
+                            });
+                        }
+                    });
+                } else {
+                    return false;
                 }
-            }
+            });
         },
-        mounted() {
-            this.loadGroupListTable({ page:1,pageSize:20 })
+        showAddGroup() {
+            this.showAddGroupFlag = true;
+            this.currentFileName = "创建案件";
+            this.editFlag = false;
+            this.groupForm.modelName = "";
+            this.groupForm.id = "";
         },
-        methods: {
-            // 添加分组
-            cancel() {
-                this.showAddGroupFlag = false
-                this.groupForm.modelName = ''
-            },
-            onSubmit() {
-                this.$refs.groupForm.validate(valid => {
-                    if (valid) {
-                        let payload = {
-                            ...this.groupForm 
-                        };
-                        let dispatchStr  = this.editFlag ? 'update_model_group' : 'save_model_group'
-                        this.$store.dispatch(dispatchStr, payload).then(data => {
-                            if (data.code == 200) {
-                                this.showAddGroupFlag = false
-                                this.loadGroupListTable({ page:1, pageSize:20 })
-                                this.$message({ type: "success", message: data.message ? data.message : "成功"});
-                            } else {
-                                this.$message({ type: "error", message: data.message ? data.message : "失败"});
-                            }
-                        });
-                    } else {
-                        return false;
-                    }
-                });
-            },
-            showAddGroup() {
-                this.showAddGroupFlag = true
-                this.currentFileName = '创建分组'
-                this.editFlag = false
-                this.groupForm.modelName = ''
-                this.groupForm.id = ''
-            },
 
-            // 进入分组
-            goInto(group){
-                this.$store.commit("current_model_group_info", group);
-                this.$router.push('/file');
-            },
-            // 编辑分组
-            editGroup(group){
-                this.showAddGroupFlag = true
-                this.editFlag = true
-                this.groupForm.modelName = group.modelName
-                this.currentFileName = '编辑分组'
-                this.groupForm.id = group.id
-            },
-            
+        // 进入分组
+        goInto(group) {
+            this.$store.commit("current_model_group_info", group);
+            this.$router.push("/file");
+        },
+        // 编辑分组
+        editGroup(group) {
+            this.showAddGroupFlag = true;
+            this.editFlag = true;
+            this.groupForm.modelName = group.modelName;
+            this.currentFileName = "编辑案件";
+            this.groupForm.id = group.id;
+        },
 
-            // 删除分组
-            deleteGroup(group){
-                let payload = {
-                    id:group.id
+        // 删除分组
+        deleteGroup(group) {
+            let payload = {
+                id: group.id
+            };
+            this.deleteGroupById(payload);
+        },
+        deleteGroupById(payload) {
+            const loading = this.$loading({
+                lock: true,
+                text: "请耐心等待。。",
+                spinner: "el-icon-loading",
+                background: "rgba(0, 0, 0, 0.7)"
+            });
+            this.beforePayload = payload;
+            this.$store.dispatch("delete_model_group", payload).then(data => {
+                loading.close();
+                if (data.code == 200) {
+                    this.loadGroupListTable({ page: 1, pageSize: 20 });
+                    this.$message({
+                        type: "success",
+                        message: data.message ? data.message : "成功"
+                    });
+                } else {
+                    this.$message({
+                        type: "error",
+                        message: data.message ? data.message : "失败"
+                    });
                 }
-                this.deleteGroupById(payload)
-            },
-            deleteGroupById(payload){
-                const loading = this.$loading({
-                    lock: true,
-                    text: "请耐心等待。。",
-                    spinner: "el-icon-loading",
-                    background: "rgba(0, 0, 0, 0.7)"
-                });
-                this.beforePayload = payload
-                this.$store.dispatch("delete_model_group", payload).then(data => {
-                    loading.close();
-                    if (data.code == 200) {
-                        this.loadGroupListTable({page:1,pageSize:20})
-                        this.$message({ type: "success",  message: data.message ? data.message : "成功" });
-                    } else {
-                        this.$message({ type: "error",  message: data.message ? data.message : "失败" });
-                    }
-                });
-            },
-            // 加载分组列表
-            loadGroupListTable(payload){
-                const loading = this.$loading({
-                    lock: true,
-                    text: "请耐心等待,正在加载数据。。",
-                    spinner: "el-icon-loading",
-                    background: "rgba(0, 0, 0, 0.7)"
-                });
-                this.beforePayload = payload
-                this.$store.dispatch("get_model_group_list", payload).then(data => {
-                    loading.close();
-                    if (data.code == 200) {
-                        this.$store.commit("set_model_group_list", data);
-                    } else {
-                        this.$message({ type: "error",  message: data.message ? data.message : "加载失败" });
-                    }
-                });
-            },
+            });
+        },
+        // 加载分组列表
+        loadGroupListTable(payload) {
+            const loading = this.$loading({
+                lock: true,
+                text: "请耐心等待,正在加载数据。。",
+                spinner: "el-icon-loading",
+                background: "rgba(0, 0, 0, 0.7)"
+            });
+            this.beforePayload = payload;
+            this.$store.dispatch("get_model_group_list", payload).then(data => {
+                loading.close();
+                if (data.code == 200) {
+                    this.$store.commit("set_model_group_list", data);
+                } else {
+                    this.$message({
+                        type: "error",
+                        message: data.message ? data.message : "加载失败"
+                    });
+                }
+            });
         }
-    };
+    }
+};
 </script>
 <style scoped>
-    .nb-toparea {
-        margin: 10px 0 6px;
-    }
-    .nb-toparea__leftbtn0 {
-        width: 200px;
-    }
-
-    .nb-toparea__leftbtn1 {
-        width: 160px;
-        left: 220px;
-    }
-
-    .nb-toparea__rightbtn0 {
-        width: 150px;
-    }
-
-    .left-wrapper {
-        padding-top: 0px;
-    }
+.group-wrapper {
+    padding-top: 0px;
+}
 </style>
-
-

+ 28 - 34
src/modules/createmodel/model/components/ResultTable.vue

@@ -1,9 +1,14 @@
 <template>
     <div class="left-wrapper" style="background-color: #032d58;">
-        <div class="nb-table nb-table--bgc cmright">
-            
+        <div class="nb-table  cmright">
             <file-name></file-name>
-
+            <div class="excel-btns">
+                <!-- <el-button type="primary" size="mini"  @click="oneKeyGenerate()">一键生成</el-button> -->
+                <el-button type="primary" size="mini"  @click="exportFile()">导出</el-button>
+                <el-button type="success" size="mini"  @click="openSettings(1)">搜索</el-button>
+                <el-button type="success" size="mini"  @click="openSettings(2)">排序</el-button>
+                <el-button type="success" size="mini" @click="viewNewTable">检查新表格数据</el-button>
+            </div>
             <div class="table-header-wrapper"> 
                 <div class="th-wrapper">
                     <div class="tagspan" :key="tag" v-for="(tag,index) in dynamicHeaders">
@@ -12,23 +17,18 @@
                         <el-button icon="el-icon-close" circle @click="handleClose(tag)"></el-button>
                         &nbsp;&nbsp;
                     </div>
-
                     <el-input
                         class="input-new-tag"
                         v-if="inputVisible"
                         v-model="inputValue"
                         ref="saveTagInput"
-                        size="small"
+                        size="mini"
                         @keyup.enter.native="handleInputConfirm"
                         @blur="handleInputConfirm">
                     </el-input>
-                    <el-button v-else class="button-new-tag" type="primary"  size="mini" @click="showInput">添加新字段</el-button>
-                </div>
-                <div class="thw-footer">
-                    <el-button class="button-new-tag" type="success" size="mini" @click="viewNewTable">查看新表格数据</el-button>
+                    <el-button v-else type="primary"  size="mini" @click="showInput">添加新字段</el-button>
                 </div>
             </div>
-
             <div class="bottom-table">
                 <el-table v-loading="loading" element-loading-text="数据加载中" element-loading-spinner="el-icon-loading"
                     :data="file100Data.result" border size="mini" :height="tableHeight"  tooltip-effect="dark"
@@ -90,16 +90,18 @@
                 }
             },
         },
+        created(){
+            this.tableHeight =  this.getTableHeight(380)
+        },
         mounted() {
             //this.loadTableData({ type:"A",page:1,pageSize:20 })
-            this.getTableHeight()
-            window.addEventListener('resize', this.getTableHeight, false)
         },
         methods: {
-            getTableHeight(){
-                this.tableHeight = document.documentElement.clientHeight - 420
+            openSettings(num){
             },
-             handleClose(tag) {
+            exportFile(){
+            },
+            handleClose(tag) {
                 this.dynamicTags.splice(this.dynamicTags.indexOf(tag), 1);
             },
             showInput() {
@@ -118,7 +120,7 @@
             },
 
             viewNewTable(){
-                let payload = this.$store.getters.getBasicParams;
+                let payload = this.$store.getters.getUpSearchSortParams;
                 this.loadTableDataById(payload)
             },
             loadTableDataById(payload){
@@ -142,8 +144,14 @@
     };
 </script>
 <style scoped>
+    .excel-btns{
+        border-top: 2px outset wheat;
+        border-bottom: 2px outset wheat;
+        padding: 5px 10px;
+        text-align: left;
+        height: 42px;
+    }
     .table-header-wrapper{
-        padding: 5px 20px;
         border-bottom:1px solid #506d8b;
         text-align: left;
         height: 400px;
@@ -157,7 +165,7 @@
     }
     .table-header-wrapper .is-circle:hover {
         padding: 2px;
-        color: white;
+        color: whitesmoke;
         border-color: #3a8ee6;
         background: #3a8ee6;
     }
@@ -185,8 +193,8 @@
     .cmright{
         position: relative;
         width: 100%;
-        min-height: 750px;
-        height: calc(100vh - 150px);
+        min-height: 700px;
+        height: calc(100vh - 110px);
     }
     .bottom-table{
         position: absolute;
@@ -198,20 +206,6 @@
         padding-top: 0px;
         height: 100%;
     }
-    .clear-hint {
-        float: right;
-        color: #e33f3f;
-        font-size: 14px;
-        line-height: 56px;
-        margin-right: 180px;
-    }
-    .button-new-tag {
-        margin-left: 10px;
-        height: 32px;
-        line-height: 30px;
-        padding-top: 0;
-        padding-bottom: 0;
-    }
     .input-new-tag {
         width: 90px;
         margin-left: 10px;

+ 14 - 0
src/modules/home/Footer.vue

@@ -0,0 +1,14 @@
+<template>
+    <div class="footer">Copyright</div>
+</template>
+<style scoped>
+    .footer {
+        position: absolute;
+        bottom: 0;
+        width: 100%;
+        height: 50px;
+        line-height: 50px;
+        text-align: center;
+        border: 1px solid #ccc;
+    }
+</style>

+ 116 - 0
src/modules/home/Grouper.vue

@@ -0,0 +1,116 @@
+<template>
+    <div class="cm-title">
+        <div class="right-select">
+            {{groupValue}}
+        </div>
+    </div>
+</template>
+
+<script>
+    export default {
+        data() {
+            return {
+                placeholder: "请选择模板",
+                defaultOpeneds: [],
+                num: "-1",
+                caseTitleShow:true,
+            };
+        },
+        computed: {
+            groupData: {
+                get() {
+                    return this.$store.getters.getCurrentModelGroup;
+                },
+                set(val) {
+                    console.log(this.$store.getters.getCurrentModelGroup);
+                }
+            },
+            groupNameList:{
+                get() {
+                    return this.$store.getters.getModelGroupList.result;
+                },
+                set(val) {
+                    console.log(this.$store.getters.getModelGroupList);
+                }
+            },
+            groupValue: {
+                get() {
+                    return this.$store.getters.getCurrentModelGroup.modelName;
+                },
+                set(val) {
+                    //console.log(this.$store.getters.getCurrentModelGroup);
+                }
+            },
+        },
+        
+        methods: {
+            // loadFLTable(){
+            //     const loading = this.$loading({
+            //         lock: true,
+            //         text: "请耐心等待,正在加载数据。。",
+            //         spinner: "el-icon-loading",
+            //         background: "rgba(0, 0, 0, 0.7)"
+            //     });
+            //     let payload = {
+            //         page:1,
+            //         pageSize:20,
+            //     }
+            //     payload.generated = "false"
+            //     this.$store.dispatch("view_files_list", this.setModelId(payload)).then(data => {
+            //         loading.close()
+            //         if (data.code == 200) {
+            //             this.$store.commit("set_files_list", data);
+            //         } else {
+            //             this.$message({ type: "error",  message: data.message ? data.message : "加载失败" });
+            //         }
+            //     });
+            // },
+            // groupChange(val){
+            //     this.$store.commit("current_model_group_info", val);
+            //     this.loadFLTable()
+            // },
+        }
+    };
+</script>
+
+<style>
+    .cm-title {
+        width: 100%;
+        height: 45px;
+        line-height: 45px;
+        font-size: 16px;
+        color: whitesmoke;
+        text-align: center;
+        background: linear-gradient( -180deg, rgba(70, 109, 155, 0.9) 0%, rgba(2, 23, 50, 0.4) 100%);
+    }
+    .left-title {
+        width: 100px;
+        right: 220px;
+        position:absolute;
+        text-align: right;
+        color: #ffd04b;
+    }
+    .right-select {
+        right: 50px;
+        position: absolute;
+        width: 500px;
+        overflow: hidden;
+        height: 45px;
+        text-align: right;
+    }
+    .left-title>span {
+        display: inline-block;
+        max-width: 200px;
+        vertical-align: top;
+        overflow: hidden;
+        text-overflow: ellipsis;
+        white-space: nowrap;
+    }
+    .right-select .el-input__inner {
+        width: 200px;
+        color: whitesmoke;
+        background-color: rgba(0, 0, 0, 0.01);
+        text-align: center;
+        border: none;
+    }
+</style>

+ 71 - 0
src/modules/home/Header.vue

@@ -0,0 +1,71 @@
+<template>
+    <div class="header">
+         <div class="proname">{{$settingsBase.proHeaderTitle}}</div>
+    </div>
+</template>
+<script>
+    export default {
+        data(){
+            return {
+                  pageSizes: this.$store.getters.getpageSizes, 
+                  beforePayload:{},
+            }
+        },
+        mounted() {
+            if(!this.hasModelId()){
+                // 加载分组列表
+                this.loadGroupListTable({page:1,pageSize:100})
+            }
+        },
+        methods: {
+            isMenuShow() {
+                this.$store.commit("set_menu_show");
+            },
+            menuToggle() {
+                this.isMenuShow();
+            },
+            loadGroupListTable(payload){
+                const loading = this.$loading({
+                    lock: true,
+                    text: "请耐心等待,正在加载数据。。",
+                    spinner: "el-icon-loading",
+                    background: "rgba(0, 0, 0, 0.7)"
+                });
+                this.$store.dispatch("get_model_group_list", payload).then(data => {
+                    loading.close();
+                    if (data.code == 200) {
+                        this.$store.commit("set_model_group_list", data);
+                    } else {
+                        this.$message({ type: "error",  message: data.message ? data.message : "加载失败" });
+                    }
+                });
+            },
+        }
+    };
+
+</script>
+<style scoped>
+    .header {
+        width: 100%;
+        height: 50px;
+        line-height: 47px;
+        border-bottom: 3px solid #144b80;
+        text-align: center;
+    }
+    .header .proname{
+        margin-left: 50%;
+        -webkit-transform: translate(-50%);
+        transform: translate(-50%);
+        width: 350px;
+        height: 47px;
+        text-align: center;
+        line-height: 47px;
+        color: whitesmoke;
+        font-weight: 800;
+        font-size: 18px;
+        background: -webkit-gradient( linear, left top, left bottom, from(rgb(72 63 47 / 90%)), to(rgb(221 210 127 / 40%)));
+        background: linear-gradient( 
+    -180deg, rgb(16 64 114) 0%, rgb(221 210 127 / 40%) 100%);
+        border-radius: 29%;
+    }
+</style>

+ 143 - 0
src/modules/home/Sidebar.vue

@@ -0,0 +1,143 @@
+<template>
+    <div class="sidebar">
+        <el-menu :default-active="getOpen" class="cm-menu" :default-openeds="defaultOpeneds"  
+            background-color="transparent"  mode="horizontal" text-color="#fff" active-text-color="#ffd04b" unique-opened 
+            router>
+            <el-menu-item v-for="jtem in menusDataList" :key="jtem.pathTitle" :index="jtem.pathUrl">
+                    {{jtem.pathTitle}}</el-menu-item>
+            <!-- <el-submenu :index="item.menusIndex" v-for="item in menusDataList" :key="item.title"  :index="item.pathUrl">
+                <template slot="title">
+                    <span>{{item.menusTitle}}</span>
+                </template>
+                <el-menu-item v-for="jtem in item.children" :key="jtem.pathTitle" :index="jtem.pathUrl">
+                    {{jtem.pathTitle}}</el-menu-item>
+            </el-submenu> -->
+        </el-menu>
+    </div>
+</template>
+
+<script>
+    import {
+        versinoFlag
+    } from "@/config.js";
+    export default {
+        props: {
+            defaultOpeneds: {
+                type: Array,
+                required: true
+            }
+        },
+        data() {
+            return {
+                menusDataList: []
+            };
+        },
+        computed: {
+            getOpen() {
+                return this.$route.path;
+            },
+        },
+        mounted() {
+            this.createMenu();
+        },
+        methods: {
+            createMenu() {
+                let menusData = this.$store.getters.getMenusList;
+                let { tryVersion } = versinoFlag;
+                let children = menusData.standardVersion[0].children
+                if (tryVersion) {
+                    this.menusDataList = [...menusData.tryVersion];
+                } else {
+                    this.menusDataList = [...children];
+                }
+            },
+        }
+    };
+
+</script>
+
+<style>
+    .sidebar {
+        transition: margin 0.1s linear;
+        color: white;
+        text-align: left;
+        position: absolute;
+    }
+    .sidebar .el-menu {
+        border-right: none;
+        background-color: rgba(0, 0, 0, 0) !important;
+        border: none;
+    }
+    .sidebar .el-menu .el-menu--inline {
+        padding: 10px 0;
+        background-size: 70% 100%;
+    }
+    .sidebar>ul {
+        height: 100%;
+    }
+    .sidebar .el-submenu {
+        margin-bottom: 1px;
+
+    }
+    .sidebar .menu-item {
+        min-height: 100px;
+        text-align: center;
+        padding-top: 15px;
+        border-bottom: 1px solid #d5d5d5;
+        color: white;
+    }
+    .sidebar .el-menu--horizontal>.el-submenu .el-submenu__title{
+        height: 45px;
+        line-height: 43px;
+        font-size: 14px;
+        font-weight: 700;
+    }
+    .sidebar .el-menu--horizontal>.el-menu-item{
+        height: 45px;
+        line-height: 43px;
+        font-size: 14px;
+        font-weight: 700;
+        width: 150px;
+        text-align:center;
+    }
+    .sidebar .menu-icon {
+        background-size: cover;
+        background-position: center;
+        width: 35px;
+        height: 35px;
+        margin: 0 auto;
+        display: block;
+    }
+    .sidebar .is-active {
+        background-color: rgba(0, 0, 0, 0) !important;
+        background: linear-gradient( -180deg, rgba(155, 139, 70, 0.9) 0%, rgba(50, 43, 2, 0.4) 100%);
+        
+    }
+    .sidebar .is-opened .el-submenu__title {
+        padding-left: 50px !important;
+        background-position: center center;
+        transition: background-position 1.3s ease 0s, padding-left 1.3s ease 0s;
+    }
+    .sidebar .itemmenu {
+        padding-left: 10px !important;
+        text-align: center;
+        line-height: 45px;
+        background-color: rgba(0, 0, 0, 0) !important;
+        background-size: 100% 100%;
+        margin-bottom: 10px;
+    }
+    .sidebar .el-submenu__title {
+        text-align: center;
+        background-color: rgba(0, 0, 0, 0) !important;
+        transition: background-position 1.3s ease 0s, padding-left 1.3s ease 0s;
+        background-size: 100% 100%;
+    }
+    .sidebar .el-submenu__title i {
+        color: whitesmoke !important;
+        display: none;
+    }
+    .sidebar .is-active .menu-name {
+        color: #000;
+        font-weight: 800;
+    }
+</style>

+ 66 - 65
src/router/index.js

@@ -1,5 +1,5 @@
-import Vue from 'vue';
-import Router from 'vue-router';
+import Vue from "vue";
+import Router from "vue-router";
 /**
  * 重写路由的push方法
  */
@@ -9,87 +9,88 @@ import Router from 'vue-router';
 // }
 
 Vue.use(Router);
-import {
-    baseRouterUrl,
-    routerMode
-} from '../config.js'
-import createmodel from './createmodel.js' // 类案应用
+import { baseRouterUrl, routerMode } from "../config.js";
+import createmodel from "./createmodel.js"; // 类案应用
 
 const router = new Router({
-        mode: routerMode,
-        base: baseRouterUrl,
-        routes: [
-            {
-                path: '/',
-                redirect: '/group'
-            },
-            {
-                path: '/home',
-                component: resolve => require(['../modules/Home.vue'], resolve),
-                children: [
-                    {
-                        path: '/',
-                        redirect: '/group',
-                    },
-                    createmodel,
-                ]
-            },
-            {
-                path: '/404',
-                meta: {
-                    requireAuth: false,
+    mode: routerMode,
+    base: baseRouterUrl,
+    routes: [
+        {
+            path: "/",
+            redirect: "/group",
+        },
+        {
+            path: "/home",
+            component: (resolve) => require(["../modules/Home.vue"], resolve),
+            children: [
+                {
+                    path: "/",
+                    redirect: "/group",
                 },
-                component: resolve => require(['../modules/404Error.vue'], resolve)
-            }
-        ],
-        scrollBehavior(to, from, savedPosition) {
-            if (savedPosition) {
-                return savedPosition
-            } else if (to.hash) {
-                return {
-                    selector: to.hash
-                }
-            } else {
-                return {
-                    x: 0,
-                    y: 0
-                }
-            }
+                createmodel,
+            ],
+        },
+        {
+            path: "/login",
+            component: (resolve) => require(["../modules/Login.vue"], resolve),
+        },
+        {
+            path: "/404",
+            meta: {
+                requireAuth: false,
+            },
+            component: (resolve) =>
+                require(["../modules/404Error.vue"], resolve),
+        },
+    ],
+    scrollBehavior(to, from, savedPosition) {
+        if (savedPosition) {
+            return savedPosition;
+        } else if (to.hash) {
+            return {
+                selector: to.hash,
+            };
+        } else {
+            return {
+                x: 0,
+                y: 0,
+            };
         }
-    })
+    },
+});
 const auth = {
     loggedIn() {
-        let logined = false
-        let user = window.sessionStorage.getItem('user')
-        if (user && user != '') {
-            logined = true
+        let logined = false;
+        let user = window.sessionStorage.getItem("user");
+        if (user && user != "") {
+            logined = true;
         }
-        return logined
-    }
-}
+        return logined;
+    },
+};
 router.beforeEach((to, from, next) => {
     if (to.matched.length === 0) {
         next({
-            path: '/404',
+            path: "/404",
             query: {
-                redirect: to.fullPath
-            }
-        })
+                redirect: to.fullPath,
+            },
+        });
     } else {
-        next()
+        next();
     }
-    if (to.matched.some(record => record.meta.requireAuth)) {
+    if (to.matched.some((record) => record.meta.requireAuth)) {
         if (!auth.loggedIn()) {
             next({
                 //path: '/login'
-            })
+            });
         } else {
-            next()
+            next();
         }
     } else {
-        next()
+        next();
     }
+});
 
-})
-
-export default router
+export default router;

+ 0 - 1
src/service/commonService.js

@@ -12,6 +12,5 @@ var getCasesListC = payload => Fetch('POST', apiUrl + 'file/uploadedList', paylo
 
 
 export {
-    /*****查看案件列表*********/
     getCasesListC,
 }

+ 2 - 0
src/service/createmodel/aliPayService.js

@@ -8,7 +8,9 @@ import {
 
 //1.获得支付宝数据
 var getAlipayTables = payload => Fetch('POST', apiUrl + 'alipay/extractPersonInfo', payload)
+var viewDetailAliHeaders = payload => Fetch('POST', apiUrl + 'alipay/viewDetailHeaders', payload)
 
 export {
     getAlipayTables,
+    viewDetailAliHeaders
 }

+ 8 - 0
src/service/createmodel/apiLogin.js

@@ -0,0 +1,8 @@
+import { Fetch, Utils } from "@/utils/index.js";
+import { apiUrl } from "@/config.js";
+
+// 1.获得支付宝数据
+export const postLogin = payload =>
+    Fetch("POST", apiUrl + "user/login", payload);
+export const uploadedGroupList = payload =>
+    Fetch("POST", apiUrl + "file/uploadedGroupList", payload);

+ 30 - 16
src/service/createmodel/fileService.js

@@ -3,34 +3,44 @@ import {
     Utils
 } from '@/utils/index.js'
 import {
-    apiUrl,
+    apiUrl
 } from '@/config.js'
 
-
-/*****导入模块*********/
-//1.查看文件列表
+/** ***导入模块*********/
+// 1.查看文件列表
 var viewFilesList = payload => Fetch('POST', apiUrl + 'file/uploadedList', payload)
-//2.查看某个文件的内容
+// 2.查看某个文件的内容
 var viewFileContentById = payload => Fetch('POST', apiUrl + 'data/viewDataByFileId', payload)
-//3.清空文件
+// 3.清空文件
 var clearFilesList = payload => Fetch('POST', apiUrl + 'view/clear', payload)
-//4.删除某个文件
+// 4.删除某个文件
 var deleteFilesById = payload => Fetch('POST', apiUrl + 'file/deleteById', payload)
-//5.下载某个文件
+// 5.下载某个文件
 var downLoadFilesById = payload => Fetch('POST', apiUrl + 'file/downloadById', payload)
-
-//7.某个文件的搜索排序
+// 7.某个文件的搜索排序
 var viewDataByQuery = payload => Fetch('POST', apiUrl + 'data/viewDataByQuery', payload)
-//8.生成要导出的文件搜索排序
+// 8.生成要导出的文件搜索排序
 var exportByQuery = payload => Fetch('POST', apiUrl + 'data/exportByQuery', payload)
-//9.下载文件
+// 9.接口下载文件
 // var downloadAndDeleteById = payload => Fetch('GET', apiUrl + 'file/downloadAndDeleteById', payload)
-
+// 10.链接下载文件链接
 var downloadAndDeleteById = apiUrl + 'file/downloadAndDeleteById'
+var batchExportDownload = apiUrl + 'data/batchExport/download'
+// 10.下载文件链接1
 var downloadFiles = apiUrl + 'view/downloadFile'
+// 11.点击数 查看明细
+var viewDetaiContent = payload => Fetch('POST', apiUrl + 'alipay/viewDetailContent', payload)
+
+// 12.导出全部明细
+var exportAllDetail = payload => Fetch('POST', apiUrl + 'alipay/exportAllDetail', payload)
+// 13.导出点击出来的明细
+var exportViewDetailContent = payload => Fetch('POST', apiUrl + 'alipay/exportViewDetailContent', payload)
+var batchExport = payload => Fetch('POST', apiUrl + 'data/batchExport', payload)
+
 
 export {
-    /*****导入模块*********/
+    /** ***导入模块*********/
+    batchExport,
     viewFilesList,
     viewFileContentById,
     clearFilesList,
@@ -39,6 +49,10 @@ export {
     downloadAndDeleteById,
     viewDataByQuery,
     exportByQuery,
+    viewDetaiContent,
 
-    downloadFiles,
-}
+    exportAllDetail,
+    exportViewDetailContent,
+    batchExportDownload,
+    downloadFiles
+}

+ 1 - 1
src/service/createmodel/groupService.js

@@ -16,8 +16,8 @@ var saveModelGroup = payload => Fetch('POST', apiUrl + 'model/save', payload)
 //4.更新分组
 var updateModelGroup = payload => Fetch('POST', apiUrl + 'model/update', payload)
 
+
 export {
-    /*****查看分组列表*********/
     getModelGroupList,
     deleteModelGroup,
     saveModelGroup,

+ 1 - 3
src/service/createmodel/modelService.js

@@ -6,12 +6,10 @@ import {
     apiUrl,
 } from '@/config.js'
 
-/*****表格表头操作*********/
+
 //1.通过文件Id获得文件表头
 var getHeadersById = payload => Fetch('POST', apiUrl + 'data/viewHeaders', payload)
 
-
 export {
-    /*****导入模块*********/
     getHeadersById,
 }

+ 3 - 0
src/service/generate-map/ImageService.js

@@ -5,7 +5,10 @@ import {
     apiUrl,
 } from '@/config.js'
 
+
+//1.接口下载图片
 var downloadImage = payload => Fetch('POST', apiUrl + 'download/downloadChannel', payload)
+//2.链接下载图片
 var downloadImageUrl = apiUrl + 'download/downloadImage'
 
 

+ 37 - 146
src/store/commonStore.js

@@ -13,6 +13,7 @@ export default {
             "pageSize": 2,
             "page": 1
         },
+        tpagesize:20,
         
         // titlePrefix: '数据管理', //title前缀
         titleName: '账单清洗',
@@ -24,179 +25,69 @@ export default {
         pageLimit: 15,
         pageSize: 15,
         pageSizes: [20, 50, 100, 200, 300],
-
         tableMLoading: false,
-
-  
         contentShow: 0, //;1第二步显示;2第三步显示
-        // tabsValue: '1', //头部菜单栏选中tab
-        // tableTabs: [ //头部菜单数组对象
-        //     {
-        //         title: '数据分析',
-        //         name: '1',
-        //         labelContent: 'createmodel'
-        //     }
-        // ],
         menusList: {
             //正式版
             standardVersion: [
                 {
                     menusIndex: "1",
-                    menusTitle: "数据分析",
+                    menusTitle: "模型分析",
                     children: [
                         {
                             pathUrl: "/group",
-                            pathTitle: "分组列表",
+                            pathTitle: "案件列表",
                         },
                         {
                             pathUrl: "/file",
                             pathTitle: "动态导入",
                         },
-                        {
-                            pathUrl: "/model",
-                            pathTitle: "模型创建",
-                        },
+                        // {
+                        //     pathUrl: "/model",
+                        //     pathTitle: "模型创建",
+                        // },
                         {
                             pathUrl: "/alipay",
-                            pathTitle: "支付宝分析",
+                            pathTitle: "支付宝财付通分析",
                         },
                     ]
+                },
+                {
+                    menusIndex: "2",
+                    pathUrl: "/group",
+                    menusTitle: "其他分析",
+                    children: []
                 }
             ],
-            // standardVersion:  [
-            //             {
-            //                 pathUrl: "/group",
-            //                 pathTitle: "分组列表",
-            //             },
-            //             {
-            //                 pathUrl: "/file",
-            //                 pathTitle: "动态导入",
-            //             },
-            //             {
-            //                 pathUrl: "/model",
-            //                 pathTitle: "模型创建",
-            //             },
-            //             {
-            //                 pathUrl: "/alipay",
-            //                 pathTitle: "支付宝分析",
-            //             },
-            // ],
         }
     },
     mutations: {
-
-        // 通用loading table and map
-        set_tablem_loading(state, data) {
-            state.tableMLoading = data
-        },
-   
-        // set_menu_show(state) {
-        //     state.isMenuShow = !state.isMenuShow
-        // },
- 
-        set_current_page(state, data) {
-            state.currentPage = data
-        },
-        set_page_size(state, data) {
-            state.pageSize = data
-        },
-
-        set_show_dialog(state, data) {
-            state.isShowDialog = data
-        },
-        set_show_content(state, data) {
-            state.contentShow = data
-        },
-        // set_tabs_value(state, data) {
-        //     state.tabsValue = data
-        // },
-        // set_table_tabs(state, data) {
-        //     state.tableTabs = data
-        // },
-        // set_title_prefix(state, data) {
-        //     state.titlePrefix = data
-        // },
-        set_title_name(state, data) {
-            state.titleName = data
-        },
-    
-        // set_tabletabs_empty(state, data) {
-        //     state.tableTabs = [
-        //         {
-        //             title: '数据分析',
-        //             name: '1',
-        //             labelContent: 'dynamicexport'
-        //         }
-        //     ]
-        //     state.tabsValue = 1
-        // },
-        set_cases_list_c(state, data) {
-            state.caseLists = data
-        },
+        set_tablem_loading: (state, data) => state.tableMLoading = data,
+        set_current_page: (state, data) => state.currentPage = data,
+        set_page_size: (state, data) => state.pageSize = data,
+        set_show_dialog: (state, data) => state.isShowDialog = data,
+        set_show_content: (state, data) => state.contentShow = data,
+        set_title_name: (state, data) => state.titleName = data,
+        set_cases_list_c: (state, data) => state.caseLists = data,
+        set_current_temp_pagesize: (state, data) => state.tpagesize = data,
     },
     actions: {
-        //统一下载图片
-        async download_image_file({
-            commit
-        }, payload) {
-            let res = await ImageService.downloadImage(payload)
-            return res
-        },
-        //获得案件列表
-        async get_cases_list_c({
-            commit
-        }, payload) {
-            let res = await CommonService.getCasesListC(payload)
-            return res
-        },
+        //1.统一下载图片
+        download_image_file: async({commit, state}, payload) => await ImageService.downloadImage(payload),
+        //2.获得案件列表
+        get_cases_list_c: async({commit, state}, payload) => await CommonService.getCasesListC(payload),
     },
     getters: {
-
-        // 通用loading table and map
-        getTableMLoading(state) {
-            return state.tableMLoading
-        },
-        getCurrentPage(state) {
-            return state.currentPage
-        },
-        getPageLimit(state) {
-            return state.pageLimit
-        },
-        getPageSize(state) {
-            return state.pageSize
-        },
-        getpageSizes(state) {
-            return state.pageSizes
-        },
-        // getIsShowMenus(state) {
-        //     return state.isMenuShow
-        // },
-    
-        getIsShowDialog(state) {
-            return state.isShowDialog
-        },
-        getcontentShow(state) {
-            return state.contentShow
-        },
-        // gettabsValue(state) {
-        //     return state.tabsValue
-        // },
-        // gettableTabs(state) {
-        //     return state.tableTabs
-        // },
-        // gettitlePrefix(state) {
-        //     return state.titlePrefix
-        // },
-        gettitleName(state) {
-            return state.titleName
-        },
- 
-        getMenusList(state) {
-            return state.menusList
-        },
-
-        getCasesListC(state) {
-            return state.caseLists
-        }
+        getTableMLoading: state => state.tableMLoading,
+        getCurrentPage: state => state.currentPage,
+        getPageLimit: state => state.pageLimit,
+        getPageSize: state => state.pageSize,
+        getpageSizes: state => state.pageSizes,
+        getIsShowDialog: state => state.isShowDialog,
+        getcontentShow: state => state.contentShow,
+        gettitleName: state => state.titleName,
+        getMenusList: state => state.menusList,
+        getCasesListC: state => state.caseLists,
+        getTpagesize: state => state.tpagesize,
     }
 }

+ 17 - 21
src/store/createmodel/aliPayStore.js

@@ -6,32 +6,28 @@ export default {
         upSearchSortParams: {
             page: 1,
             pageSize: 20,
-        }
+        },
+        isDetailTableAli: false,
+        aliCellObj: '',
+        fileAliHeaders:''
     },
     mutations: {
-        set_alipay_tables(state, data) {
-            state.alipayTables = data
-        },
-        set_up_search_sort_params(state, data) {
-            state.upSearchSortParams = data
-        },
+        set_alipay_tables: (state, data) => state.alipayTables = data,
+        set_up_search_sort_params: (state, data) => state.upSearchSortParams = data,
+        is_detail_table_ali: (state, data) => state.isDetailTableAli = data,
+        set_current_ali_cell: (state, data) => state.aliCellObj = data,
+        set_current_ali_headers: (state, data) => state.fileAliHeaders = data,
     },
     actions: {
-        // 一键生成支付宝5张信息表
-        async get_alipay_tables({
-            commit,
-            state
-        }, payload) {
-            let res = await aliPayService.getAlipayTables(payload)
-            return res
-        },
+        //1.一键生成支付宝5张信息表
+        get_alipay_tables: async ({ commit, state }, payload) => await aliPayService.getAlipayTables(payload),
+        view_detail_ali_headers: async ({ commit, state }, payload) => await aliPayService.viewDetailAliHeaders(payload),
     },
     getters: {
-        getAlipayTables(state) {
-            return state.alipayTables
-        },
-        getUpSearchSortParams(state) {
-            return state.upSearchSortParams
-        },
+        getAlipayTables: state => state.alipayTables,
+        getUpSearchSortParams: state => state.upSearchSortParams,
+        getIsDetailTableAli: state => state.isDetailTableAli,
+        getAliCellObj: state => state.aliCellObj,
+        getFileAliHeaders: state => state.fileAliHeaders,
     }
 }

+ 80 - 147
src/store/createmodel/fileStore.js

@@ -1,174 +1,107 @@
-import * as fileService from '@/service/createmodel/fileService.js'
+import * as fileService from "@/service/createmodel/fileService.js";
+import { uploadedGroupList } from "@/service/createmodel/apiLogin";
 
 export default {
     state: {
-        // ============ 关联模型 ============== 
-        filesList:{
-            "result": [],
-            "total": 2,
-            "code": 200,
-            "pageSize": 20,
-            "page": 1,
-            "currentPage":1,
-        },
-        filesGenerateList: {
-            "result": [],
-            "total": 2,
-            "code": 200,
-            "pageSize": 20,
-            "page": 1,
-            "currentPage":1,
-        },
-        fileContent:{"result":[],"pageSize":20,"page":1,"message":""},
+        filesList: {
+            result: [],
+            total: 2,
+            code: 200,
+            pageSize: 20,
+            page: 1,
+            currentPage: 1,
+            message: ""
+        },
+        fileActiveName: "first",
+        fileContent: { result: [], pageSize: 20, page: 1, message: "" },
         isImportOn: false,
-        isSearchSort: false,
+        isSearchSort: { num: 1, show: false },
         headers: {
-            "f0": "序号",
+            f0: "序号"
         },
         fileobj: {
-            filename:' '
+            filename: " "
         },
-        isDetailTable:false,
+        isDetailTable: false
     },
     mutations: {
-        // ============ 关联模型 ============== 
-        set_files_list(state, data) {
-            data.result.forEach(item => {
-                if (item.generated) {
-                    item.generatedStr = '生成'
-                } else {
-                    item.generatedStr = '导入'
-                }
-            });
-            state.filesList = data
-        },
-        set_files_generate_list(state, data) {
+        set_files_list: (state, data) => {
             data.result.forEach(item => {
                 if (item.generated) {
-                    item.generatedStr = '生成'
+                    item.generatedStr = "生成";
                 } else {
-                    item.generatedStr = '导入'
+                    item.generatedStr = "导入";
                 }
             });
-            state.filesGenerateList = data
-        },
-        set_file_content_by_id(state, data) {
-            state.fileContent = data
-        },
-        set_import_on(state, data) {
-            state.isImportOn = data
-        },
-        is_search_sort_settings(state, data) {
-            state.isSearchSort = data
-        },
-        set_table_header(state, data) {
-            state.headers = data
-        },
-        set_current_fileobj(state, data) {
-            state.fileobj = data
-        },
-        is_detail_table_con(state, data) {
-            state.isDetailTable = data
-        },
+            state.filesList = data;
+        },
+        set_file_active_name: (state, data) => (state.fileActiveName = data),
+        set_file_content_by_id: (state, data) => (state.fileContent = data),
+        set_import_on: (state, data) => (state.isImportOn = data),
+        is_search_sort_settings: (state, data) => (state.isSearchSort = data),
+        set_table_header: (state, data) => (state.headers = data),
+        set_current_fileobj: (state, data) => (state.fileobj = data),
+        is_detail_table_con: (state, data) => (state.isDetailTable = data)
     },
     actions: {
+        // 1.查看文件列表
+        view_files_list: async ({ commit, state }, payload) =>
+            await fileService.viewFilesList(payload),
+        view_uploaded_group_list: async ({ commit, state }, payload) =>
+            await uploadedGroupList(payload),
 
-        /*****AC模块*********/
-        //1.查看文件列表
-        async view_files_list({
-            commit,
-            state
-        }, payload) {
-            let res = await fileService.viewFilesList(payload)
-            // commit('set_file_tree_data',fileTreeData)
-            return res
-        },
-
-        //2.查看某个文件的内容
-        async view_file_content_by_id({
-            commit,
-            state
-        }, payload) {
-            let res = await fileService.viewFileContentById(payload)
-            return res
-        },
+        // 2.查看某个文件的内容
+        view_file_content_by_id: async ({ commit, state }, payload) =>
+            await fileService.viewFileContentById(payload),
 
         // 3.清空文件
-        async clear_files_list({
-            commit
-        }, payload) {
-            let res = await fileService.clearFilesList(payload)
-            return res
-        },
+        clear_files_list: async ({ commit, state }, payload) =>
+            await fileService.clearFilesList(payload),
 
         // 4.删除某个文件
-        async delete_file_by_id({
-            commit
-        }, payload) {
-            let res = await fileService.deleteFilesById(payload)
-            return res
-        },
+        delete_file_by_id: async ({ commit, state }, payload) =>
+            await fileService.deleteFilesById(payload),
 
         // 5.下载某个文件
-        async download_file_by_id({
-            commit
-        }, payload) {
-            let res = await fileService.downLoadFilesById(payload)
-            return res
-        },
-        
-        //6.某个文件的搜索排序
-        async view_data_by_query({
-            commit,
-            state
-        }, payload) {
-            let res = await fileService.viewDataByQuery(payload)
-            return res
-        },
-        //7.某个文件的搜索排序生成导出结果
-        async export_by_query({
-            commit,
-            state
-        }, payload) {
-            let res = await fileService.exportByQuery(payload)
-            return res
-        },
-        //8.某个文件的搜索排序下载文件
-        async download_and_delete_by_id({
-            commit,
-            state
-        }, payload) {
-            let res = await fileService.downloadAndDeleteById(payload)
-            return res
-        },
-        
+        download_file_by_id: async ({ commit, state }, payload) =>
+            await fileService.downLoadFilesById(payload),
+
+        // 6.某个文件的搜索排序
+        view_data_by_query: async ({ commit, state }, payload) =>
+            await fileService.viewDataByQuery(payload),
+
+        // 7.某个文件的搜索排序生成导出结果
+        export_by_query: async ({ commit, state }, payload) =>
+            await fileService.exportByQuery(payload),
+
+        // 8.某个文件的搜索排序下载文件
+        download_and_delete_by_id: async ({ commit, state }, payload) =>
+            await fileService.downloadAndDeleteById(payload),
+
+        // 9.点击数 查看明细
+        view_detail_content: async ({ commit, state }, payload) =>
+            await fileService.viewDetaiContent(payload),
+
+        // 10.导出全部明细
+        export_all_detail: async ({ commit, state }, payload) =>
+            await fileService.exportAllDetail(payload),
+
+        // 11.导出点击出来的明细
+        export_view_detail_content: async ({ commit, state }, payload) =>
+            await fileService.exportViewDetailContent(payload),
+
+            export_view_detail_batchExport: async ({ commit, state }, payload) =>
+            await fileService.batchExport(payload), 
     },
-    
+
     getters: {
-        // ============ 关联模型 ============== 
-        getFilesList(state) {
-            return state.filesList
-        },
-        getFilesGenerateList(state) {
-            return state.filesGenerateList
-        },
-        getFileContentById(state) {
-            return state.fileContent
-        },
-        getImportOn(state) {
-            return state.isImportOn
-        },
-        getIsSearchSort(state) {
-            return state.isSearchSort
-        },
-        getTableHeaders(state) {
-            return state.headers
-        },
-        getCurrentFile(state) {
-            return state.fileobj
-        },
-        getIsDetailTable(state) {
-            return state.isDetailTable
-        },
+        getFilesList: state => state.filesList,
+        getFileContentById: state => state.fileContent,
+        getImportOn: state => state.isImportOn,
+        getIsSearchSort: state => state.isSearchSort,
+        getTableHeaders: state => state.headers,
+        getCurrentFile: state => state.fileobj,
+        getIsDetailTable: state => state.isDetailTable,
+        getFileActiveName: state => state.fileActiveName
     }
-}
+};

+ 26 - 53
src/store/createmodel/groupStore.js

@@ -1,55 +1,28 @@
 import * as groupService from '@/service/createmodel/groupService.js'
 export default {
-    state: {
-        // 分页相关
-        modelGroupList: {},
-        currentModelGroup:{}
-    },
-    mutations: {
-        set_model_group_list(state, data) {
-            state.modelGroupList = data
-        },
-        current_model_group_info(state, data) {
-            state.currentModelGroup = data
-        },
-    },
-    actions: {
-        //查看分组列表
-        async get_model_group_list({
-            commit
-        }, payload) {
-            let res = await groupService.getModelGroupList(payload)
-            return res
-        },
-        //删除分组
-        async delete_model_group({
-            commit
-        }, payload) {
-            let res = await groupService.deleteModelGroup(payload)
-            return res
-        },
-        //保存分组
-        async save_model_group({
-            commit
-        }, payload) {
-            let res = await groupService.saveModelGroup(payload)
-            return res
-        },
-        //更新分组
-        async update_model_group({
-            commit
-        }, payload) {
-            let res = await groupService.updateModelGroup(payload)
-            return res
-        },
-    },
-    getters: {
-        // 通用model group list
-        getModelGroupList(state) {
-            return state.modelGroupList
-        },
-        getCurrentModelGroup(state) {
-            return state.currentModelGroup
-        },
-    }
-}
+  state: {
+    modelGroupList: {},
+    currentModelGroup: {}
+  },
+  mutations: {
+    set_model_group_list: (state, data) => state.modelGroupList = data,
+    current_model_group_info: (state, data) => state.currentModelGroup = data
+  },
+  actions: {
+        // 1.查看分组列表
+    get_model_group_list: async({commit, state}, payload) => await groupService.getModelGroupList(payload),
+
+        // 2.删除分组
+    delete_model_group: async({commit, state}, payload) => await groupService.deleteModelGroup(payload),
+
+        // 3.保存分组
+    save_model_group: async({commit, state}, payload) => await groupService.saveModelGroup(payload),
+
+        // 4.更新分组
+    update_model_group: async({commit, state}, payload) => await groupService.updateModelGroup(payload)
+  },
+  getters: {
+    getModelGroupList: state => state.modelGroupList,
+    getCurrentModelGroup: state => state.currentModelGroup
+  }
+}

+ 4 - 19
src/store/createmodel/modelStore.js

@@ -2,7 +2,6 @@ import * as modelService from '@/service/createmodel/modelService.js'
 
 export default {
     state: {
-
         file100data: {
             "result": [],
             "total": 100,
@@ -13,28 +12,14 @@ export default {
         }
     },
     mutations: {
-        
-        set_current_file100_data(state, data) {
-            state.file100data = data
-        },
+        set_current_file100_data: (state, data) => state.file100data = data,
     },
     actions: {
-
-        /*****表格表头操作*********/
-        ////1.通过文件Id获得文件表头
-        async get_headers_by_id({
-            commit,
-            state
-        }, payload) {
-            let res = await modelService.getHeadersById(payload)
-            return res
-        },
+        //1.通过文件Id获得文件表头
+        get_headers_by_id: async({commit, state}, payload) => await modelService.getHeadersById(payload),
     },
     
     getters: {
-
-        getFile100Data(state) {
-            return state.file100data
-        },
+        getFile100Data: state => state.file100data,
     }
 }

+ 52 - 51
src/utils/fetch.js

@@ -1,87 +1,88 @@
-import {
-    baseFetchUrl
-} from '../config.js'
-import router from '../router/index.js'
-import {
-    Message
-} from 'element-ui'
+import { baseFetchUrl } from "../config.js";
+import router from "../router/index.js";
+import { Message } from "element-ui";
 
-export default async(type = 'GET', url = '', data = {}, method = 'fetch') => {
-    type = type.toUpperCase()
-    url = baseFetchUrl + url
-    if (type == 'GET') {
-        let dataStr = '' //数据拼接字符串
-        Object.keys(data).forEach(key => {
-            dataStr += key + '=' + data[key] + '&'
-        })
-        if (dataStr !== '') {
-            dataStr = dataStr.substr(0, dataStr.lastIndexOf('&'))
-            url = url + '?' + dataStr
+export default async (type = "GET", url = "", data = {}, method = "fetch") => {
+    type = type.toUpperCase();
+    url = baseFetchUrl + url;
+    if (type == "GET") {
+        let dataStr = ""; //数据拼接字符串
+        Object.keys(data).forEach((key) => {
+            dataStr += key + "=" + data[key] + "&";
+        });
+        if (dataStr !== "") {
+            dataStr = dataStr.substr(0, dataStr.lastIndexOf("&"));
+            url = url + "?" + dataStr;
         }
     }
-    if (window.fetch && method == 'fetch') {
+    if (window.fetch && method == "fetch") {
         let requestConfig = {
-            credentials: 'include',
+            credentials: "include",
             method: type,
             headers: {
-                'Accept': 'application/json',
-                'Content-Type': 'application/json;charset=UTF-8'
+                Accept: "application/json",
+                "Content-Type": "application/json;charset=UTF-8",
             },
             mode: "cors",
-            cache: "no-cache"
-        }
-        if (type == 'POST') {
+            cache: "no-cache",
+            withCredentials: true,
+        };
+        if (type == "POST") {
             // data.modelId = "1";
-            Object.defineProperty(requestConfig, 'body', {
-                value: JSON.stringify(data)
-            })
+            Object.defineProperty(requestConfig, "body", {
+                value: JSON.stringify(data),
+            });
         }
         try {
-            var response = await fetch(url, requestConfig)
-            var responseJson = await response.json()
+            var response = await fetch(url, requestConfig);
+            var responseJson = await response.json();
         } catch (error) {
             Message({
                 showClose: true,
-                message: 'error!,请联系管理员!',
-                type: 'error'
+                message: "error!,请联系管理员!",
+                type: "error",
             });
-            throw new Error(error)
+            throw new Error(error);
         }
-        if (responseJson.status == 302) { //未登录 添加重定向 到login页
-            //router.push('/login')
+        if (responseJson.code == 401) {
+            //未登录 添加重定向 到login页
+            router.push("/login");
         } else {
-            return responseJson
+            return responseJson;
         }
     } else {
         return new Promise((resolve, reject) => {
             let requestObj;
             if (window.XMLHttpRequest) {
-                requestObj = new XMLHttpRequest()
+                requestObj = new XMLHttpRequest();
             } else {
-                requestObj = new ActiveXObject
+                requestObj = new ActiveXObject();
             }
 
-            let sendData = '';
+            let sendData = "";
             data.modelId = "1";
-            if (type == 'POST') {
-                sendData = JSON.stringify(data)
+            if (type == "POST") {
+                sendData = JSON.stringify(data);
             }
-            requestObj.open(type, url, true)
-            requestObj.setRequestHeader("Content-type", "application/x-www-form-urlencoded;charset=UTF-8")
+            requestObj.open(type, url, true);
+            requestObj.setRequestHeader(
+                "Content-type",
+                "application/x-www-form-urlencoded;charset=UTF-8"
+            );
             requestObj.send(sendData);
             requestObj.onreadystatechange = () => {
                 if (requestObj.readyState == 4) {
                     if (requestObj.status == 200) {
-                        let obj = requestObj.response
-                        if (typeof obj !== 'object') {
-                            obj = JSON.parse(obj)
+                        let obj = requestObj.response;
+                        if (typeof obj !== "object") {
+                            obj = JSON.parse(obj);
                         }
-                        resolve(obj)
+                        resolve(obj);
                     } else {
-                        reject(requestObj)
+                        reject(requestObj);
                     }
                 }
-            }
-        })
+            };
+        });
     }
-}
+};

TEMPAT SAMPAH
static/excel/temp.xlsx


Beberapa file tidak ditampilkan karena terlalu banyak file yang berubah dalam diff ini