浏览代码

Merge remote-tracking branch 'origin/master'

# Conflicts:
#	src/components/common/query.vue
tianyabing 2 年之前
父节点
当前提交
7db2d03536

+ 239 - 1
package-lock.json

@@ -21,7 +21,8 @@
         "qs": "^6.11.0",
         "three": "^0.151.2",
         "vue": "^2.7.14",
-        "vue-router": "^3.5.4"
+        "vue-router": "^3.5.4",
+        "xlsx": "^0.16.0"
       },
       "devDependencies": {
         "@antfu/eslint-config": "^0.34.1",
@@ -1072,6 +1073,21 @@
         "object-assign": "4.x"
       }
     },
+    "node_modules/adler-32": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmmirror.com/adler-32/-/adler-32-1.2.0.tgz",
+      "integrity": "sha512-/vUqU/UY4MVeFsg+SsK6c+/05RZXIHZMGJA+PX5JyWI0ZRcBpupnRuPLU/NXXoFwMYCPCoxIfElM2eS+DUXCqQ==",
+      "dependencies": {
+        "exit-on-epipe": "~1.0.1",
+        "printj": "~1.1.0"
+      },
+      "bin": {
+        "adler32": "bin/adler32.njs"
+      },
+      "engines": {
+        "node": ">=0.8"
+      }
+    },
     "node_modules/ajv": {
       "version": "6.12.6",
       "resolved": "https://registry.npmmirror.com/ajv/-/ajv-6.12.6.tgz",
@@ -1412,6 +1428,26 @@
       "dev": true,
       "peer": true
     },
+    "node_modules/cfb": {
+      "version": "1.2.2",
+      "resolved": "https://registry.npmmirror.com/cfb/-/cfb-1.2.2.tgz",
+      "integrity": "sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==",
+      "dependencies": {
+        "adler-32": "~1.3.0",
+        "crc-32": "~1.2.0"
+      },
+      "engines": {
+        "node": ">=0.8"
+      }
+    },
+    "node_modules/cfb/node_modules/adler-32": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmmirror.com/adler-32/-/adler-32-1.3.1.tgz",
+      "integrity": "sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==",
+      "engines": {
+        "node": ">=0.8"
+      }
+    },
     "node_modules/chalk": {
       "version": "4.1.2",
       "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
@@ -1535,6 +1571,26 @@
         "node": ">=12"
       }
     },
+    "node_modules/codepage": {
+      "version": "1.14.0",
+      "resolved": "https://registry.npmmirror.com/codepage/-/codepage-1.14.0.tgz",
+      "integrity": "sha512-iz3zJLhlrg37/gYRWgEPkaFTtzmnEv1h+r7NgZum2lFElYQPi0/5bnmuDfODHxfp0INEfnRqyfyeIJDbb7ahRw==",
+      "dependencies": {
+        "commander": "~2.14.1",
+        "exit-on-epipe": "~1.0.1"
+      },
+      "bin": {
+        "codepage": "bin/codepage.njs"
+      },
+      "engines": {
+        "node": ">=0.8"
+      }
+    },
+    "node_modules/codepage/node_modules/commander": {
+      "version": "2.14.1",
+      "resolved": "https://registry.npmmirror.com/commander/-/commander-2.14.1.tgz",
+      "integrity": "sha512-+YR16o3rK53SmWHU3rEM3tPAh2rwb1yPcQX5irVn7mb0gXbwuCCrnkbV5+PBfETdfg1vui07nM6PCG1zndcjQw=="
+    },
     "node_modules/color-convert": {
       "version": "2.0.1",
       "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
@@ -1637,6 +1693,17 @@
       "integrity": "sha512-9ashVQskuh5AZEZ1JdQWp1GqSoC1e1G87MzRqg2gIfVAQ7Qn9K+uFj8EcniUFA4P2NLZfV+TOlX1SzoKfo+s7w==",
       "hasInstallScript": true
     },
+    "node_modules/crc-32": {
+      "version": "1.2.2",
+      "resolved": "https://registry.npmmirror.com/crc-32/-/crc-32-1.2.2.tgz",
+      "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==",
+      "bin": {
+        "crc32": "bin/crc32.njs"
+      },
+      "engines": {
+        "node": ">=0.8"
+      }
+    },
     "node_modules/cross-spawn": {
       "version": "7.0.3",
       "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.3.tgz",
@@ -2978,6 +3045,14 @@
         "node": ">=10"
       }
     },
+    "node_modules/exit-on-epipe": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz",
+      "integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==",
+      "engines": {
+        "node": ">=0.8"
+      }
+    },
     "node_modules/fast-deep-equal": {
       "version": "3.1.3",
       "resolved": "https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
@@ -3157,6 +3232,14 @@
         "node": ">= 6"
       }
     },
+    "node_modules/frac": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmmirror.com/frac/-/frac-1.1.2.tgz",
+      "integrity": "sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==",
+      "engines": {
+        "node": ">=0.8"
+      }
+    },
     "node_modules/fs-extra": {
       "version": "10.1.0",
       "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-10.1.0.tgz",
@@ -4857,6 +4940,17 @@
         "node": ">= 0.8.0"
       }
     },
+    "node_modules/printj": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmmirror.com/printj/-/printj-1.1.2.tgz",
+      "integrity": "sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ==",
+      "bin": {
+        "printj": "bin/printj.njs"
+      },
+      "engines": {
+        "node": ">=0.8"
+      }
+    },
     "node_modules/proxy-from-env": {
       "version": "1.1.0",
       "resolved": "https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
@@ -5395,6 +5489,20 @@
       "integrity": "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==",
       "dev": true
     },
+    "node_modules/ssf": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmmirror.com/ssf/-/ssf-0.10.3.tgz",
+      "integrity": "sha512-pRuUdW0WwyB2doSqqjWyzwCD6PkfxpHAHdZp39K3dp/Hq7f+xfMwNAWIi16DyrRg4gg9c/RvLYkJTSawTPTm1w==",
+      "dependencies": {
+        "frac": "~1.1.2"
+      },
+      "bin": {
+        "ssf": "bin/ssf.njs"
+      },
+      "engines": {
+        "node": ">=0.8"
+      }
+    },
     "node_modules/statuses": {
       "version": "1.5.0",
       "resolved": "https://registry.npmmirror.com/statuses/-/statuses-1.5.0.tgz",
@@ -6349,6 +6457,14 @@
         "node": ">= 0.4"
       }
     },
+    "node_modules/wmf": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/wmf/-/wmf-1.0.2.tgz",
+      "integrity": "sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==",
+      "engines": {
+        "node": ">=0.8"
+      }
+    },
     "node_modules/word-wrap": {
       "version": "1.2.3",
       "resolved": "https://registry.npmmirror.com/word-wrap/-/word-wrap-1.2.3.tgz",
@@ -6378,6 +6494,32 @@
       "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
       "dev": true
     },
+    "node_modules/xlsx": {
+      "version": "0.16.0",
+      "resolved": "https://registry.npmmirror.com/xlsx/-/xlsx-0.16.0.tgz",
+      "integrity": "sha512-W/LQZjh6o7WDGmCIUXp2FUPSej2XRdaiTgZN31Oh68JlL7jpm796p3eI5zOpphYNT12qkgnXYaCysAsoiyZvOQ==",
+      "dependencies": {
+        "adler-32": "~1.2.0",
+        "cfb": "^1.1.4",
+        "codepage": "~1.14.0",
+        "commander": "~2.17.1",
+        "crc-32": "~1.2.0",
+        "exit-on-epipe": "~1.0.1",
+        "ssf": "~0.10.3",
+        "wmf": "~1.0.1"
+      },
+      "bin": {
+        "xlsx": "bin/xlsx.njs"
+      },
+      "engines": {
+        "node": ">=0.8"
+      }
+    },
+    "node_modules/xlsx/node_modules/commander": {
+      "version": "2.17.1",
+      "resolved": "https://registry.npmmirror.com/commander/-/commander-2.17.1.tgz",
+      "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg=="
+    },
     "node_modules/xml-name-validator": {
       "version": "4.0.0",
       "resolved": "https://registry.npmmirror.com/xml-name-validator/-/xml-name-validator-4.0.0.tgz",
@@ -7304,6 +7446,15 @@
         "object-assign": "4.x"
       }
     },
+    "adler-32": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmmirror.com/adler-32/-/adler-32-1.2.0.tgz",
+      "integrity": "sha512-/vUqU/UY4MVeFsg+SsK6c+/05RZXIHZMGJA+PX5JyWI0ZRcBpupnRuPLU/NXXoFwMYCPCoxIfElM2eS+DUXCqQ==",
+      "requires": {
+        "exit-on-epipe": "~1.0.1",
+        "printj": "~1.1.0"
+      }
+    },
     "ajv": {
       "version": "6.12.6",
       "resolved": "https://registry.npmmirror.com/ajv/-/ajv-6.12.6.tgz",
@@ -7595,6 +7746,22 @@
       "dev": true,
       "peer": true
     },
+    "cfb": {
+      "version": "1.2.2",
+      "resolved": "https://registry.npmmirror.com/cfb/-/cfb-1.2.2.tgz",
+      "integrity": "sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==",
+      "requires": {
+        "adler-32": "~1.3.0",
+        "crc-32": "~1.2.0"
+      },
+      "dependencies": {
+        "adler-32": {
+          "version": "1.3.1",
+          "resolved": "https://registry.npmmirror.com/adler-32/-/adler-32-1.3.1.tgz",
+          "integrity": "sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A=="
+        }
+      }
+    },
     "chalk": {
       "version": "4.1.2",
       "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
@@ -7696,6 +7863,22 @@
         "wrap-ansi": "^7.0.0"
       }
     },
+    "codepage": {
+      "version": "1.14.0",
+      "resolved": "https://registry.npmmirror.com/codepage/-/codepage-1.14.0.tgz",
+      "integrity": "sha512-iz3zJLhlrg37/gYRWgEPkaFTtzmnEv1h+r7NgZum2lFElYQPi0/5bnmuDfODHxfp0INEfnRqyfyeIJDbb7ahRw==",
+      "requires": {
+        "commander": "~2.14.1",
+        "exit-on-epipe": "~1.0.1"
+      },
+      "dependencies": {
+        "commander": {
+          "version": "2.14.1",
+          "resolved": "https://registry.npmmirror.com/commander/-/commander-2.14.1.tgz",
+          "integrity": "sha512-+YR16o3rK53SmWHU3rEM3tPAh2rwb1yPcQX5irVn7mb0gXbwuCCrnkbV5+PBfETdfg1vui07nM6PCG1zndcjQw=="
+        }
+      }
+    },
     "color-convert": {
       "version": "2.0.1",
       "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
@@ -7787,6 +7970,11 @@
       "resolved": "https://registry.npmmirror.com/core-js/-/core-js-3.27.2.tgz",
       "integrity": "sha512-9ashVQskuh5AZEZ1JdQWp1GqSoC1e1G87MzRqg2gIfVAQ7Qn9K+uFj8EcniUFA4P2NLZfV+TOlX1SzoKfo+s7w=="
     },
+    "crc-32": {
+      "version": "1.2.2",
+      "resolved": "https://registry.npmmirror.com/crc-32/-/crc-32-1.2.2.tgz",
+      "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ=="
+    },
     "cross-spawn": {
       "version": "7.0.3",
       "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.3.tgz",
@@ -8738,6 +8926,11 @@
         "strip-final-newline": "^2.0.0"
       }
     },
+    "exit-on-epipe": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz",
+      "integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw=="
+    },
     "fast-deep-equal": {
       "version": "3.1.3",
       "resolved": "https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
@@ -8889,6 +9082,11 @@
         "mime-types": "^2.1.12"
       }
     },
+    "frac": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmmirror.com/frac/-/frac-1.1.2.tgz",
+      "integrity": "sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA=="
+    },
     "fs-extra": {
       "version": "10.1.0",
       "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-10.1.0.tgz",
@@ -10241,6 +10439,11 @@
       "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
       "dev": true
     },
+    "printj": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmmirror.com/printj/-/printj-1.1.2.tgz",
+      "integrity": "sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ=="
+    },
     "proxy-from-env": {
       "version": "1.1.0",
       "resolved": "https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
@@ -10674,6 +10877,14 @@
       "integrity": "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==",
       "dev": true
     },
+    "ssf": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmmirror.com/ssf/-/ssf-0.10.3.tgz",
+      "integrity": "sha512-pRuUdW0WwyB2doSqqjWyzwCD6PkfxpHAHdZp39K3dp/Hq7f+xfMwNAWIi16DyrRg4gg9c/RvLYkJTSawTPTm1w==",
+      "requires": {
+        "frac": "~1.1.2"
+      }
+    },
     "statuses": {
       "version": "1.5.0",
       "resolved": "https://registry.npmmirror.com/statuses/-/statuses-1.5.0.tgz",
@@ -11393,6 +11604,11 @@
         "is-typed-array": "^1.1.10"
       }
     },
+    "wmf": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/wmf/-/wmf-1.0.2.tgz",
+      "integrity": "sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw=="
+    },
     "word-wrap": {
       "version": "1.2.3",
       "resolved": "https://registry.npmmirror.com/word-wrap/-/word-wrap-1.2.3.tgz",
@@ -11416,6 +11632,28 @@
       "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
       "dev": true
     },
+    "xlsx": {
+      "version": "0.16.0",
+      "resolved": "https://registry.npmmirror.com/xlsx/-/xlsx-0.16.0.tgz",
+      "integrity": "sha512-W/LQZjh6o7WDGmCIUXp2FUPSej2XRdaiTgZN31Oh68JlL7jpm796p3eI5zOpphYNT12qkgnXYaCysAsoiyZvOQ==",
+      "requires": {
+        "adler-32": "~1.2.0",
+        "cfb": "^1.1.4",
+        "codepage": "~1.14.0",
+        "commander": "~2.17.1",
+        "crc-32": "~1.2.0",
+        "exit-on-epipe": "~1.0.1",
+        "ssf": "~0.10.3",
+        "wmf": "~1.0.1"
+      },
+      "dependencies": {
+        "commander": {
+          "version": "2.17.1",
+          "resolved": "https://registry.npmmirror.com/commander/-/commander-2.17.1.tgz",
+          "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg=="
+        }
+      }
+    },
     "xml-name-validator": {
       "version": "4.0.0",
       "resolved": "https://registry.npmmirror.com/xml-name-validator/-/xml-name-validator-4.0.0.tgz",

+ 2 - 1
package.json

@@ -21,7 +21,8 @@
     "qs": "^6.11.0",
     "three": "^0.151.2",
     "vue": "^2.7.14",
-    "vue-router": "^3.5.4"
+    "vue-router": "^3.5.4",
+    "xlsx": "^0.16.0"
   },
   "devDependencies": {
     "@antfu/eslint-config": "^0.34.1",

+ 8 - 3
src/components/auth/authAction.vue

@@ -510,6 +510,11 @@ export default {
         label: groupName,
         type: "group",
       });
+      this.checkedObj.groupChecked = "";
+      this.checkedObj.systemChecked = "";
+      this.checkedDeviceList = [];
+      this.addedSystemMap.clear();
+      this.addedSystemArr = [];
     },
     addUserEvent() {
       this.visible.user = false;
@@ -751,7 +756,7 @@ export default {
               >
               </a-tree-select>
             </div>
-            <div class="top-section-inner-button">
+            <!-- <div class="top-section-inner-button">
               <div class="add-user-btn" @click="createUserDialog">
                 <div class="add-user-btn-icon"><div class="img"></div></div>
                 <div class="add-user-btn-text">添加用户</div>
@@ -761,7 +766,7 @@ export default {
                 title="添加用户"
                 @ok="addUserEvent"
               ></a-modal>
-            </div>
+            </div> -->
           </div>
         </div>
         <div class="bottom-section">
@@ -1108,7 +1113,7 @@ export default {
             justify-content: center;
           }
           &-select {
-            width: 82%;
+            width: 87%;
             height: 100%;
             display: flex;
             align-items: center;

+ 8 - 3
src/components/auth/authRole.vue

@@ -393,6 +393,11 @@ export default {
         label: groupName,
         type: "group",
       });
+      this.checkedObj.groupChecked = ""
+      this.checkedObj.systemChecked = ""
+      this.checkedUsers = []
+      this.addedRoleMap.clear()
+      this.addedRoleArr = []
     },
     addUserEvent() {
       this.visible.user = false;
@@ -584,7 +589,7 @@ export default {
                 tree-default-expand-all
               ></a-tree-select>
             </div>
-            <div class="top-section-inner-button">
+            <!-- <div class="top-section-inner-button">
               <div class="add-user-btn" @click="createUserDialog">
                 <div class="add-user-btn-icon"><div class="img"></div></div>
                 <div class="add-user-btn-text">添加用户</div>
@@ -594,7 +599,7 @@ export default {
                 title="添加用户"
                 @ok="addUserEvent"
               ></a-modal>
-            </div>
+            </div> -->
           </div>
         </div>
         <div class="bottom-section">
@@ -878,7 +883,7 @@ export default {
             justify-content: center;
           }
           &-select {
-            width: 82%;
+            width: 87%;
             height: 100%;
             display: flex;
             align-items: center;

+ 19 - 7
src/components/common/card.vue

@@ -1,10 +1,18 @@
 <template>
   <div class="ioc-card">
     <div class="card_title">
-      <slot name="title">{{ title }}</slot>
+      <slot name="title"
+        ><span :style="{ fontSize: mainTitleSize }">{{ title }}</span></slot
+      >
       <span style="float: right">
         <slot name="title-extra"></slot>
       </span>
+      <span
+        style="position: absolute; left: 31px; top: 50px"
+        v-if="moduleType === '智慧办公'"
+      >
+        <slot name="sub-title"></slot>
+      </span>
     </div>
     <slot v-if="show"></slot>
   </div>
@@ -14,6 +22,11 @@
 export default {
   props: {
     title: String,
+    moduleType: String,
+    mainTitleSize: {
+      type: String,
+      default: "16px",
+    },
   },
   data() {
     return {
@@ -21,10 +34,10 @@ export default {
     };
   },
   mounted() {
-    this.$nextTick(()=>{
+    this.$nextTick(() => {
       this.show = true;
-    })
-  }
+    });
+  },
 };
 </script>
 
@@ -36,9 +49,8 @@ export default {
   .card_title {
     padding: 10px 0px 10px 15px;
     font-size: 16px;
-    font-family: PingFangSC-Bold,serif;
+    font-family: PingFangSC-Bold, serif;
     color: #333333;
   }
 }
-
-</style>
+</style>

+ 49 - 103
src/components/common/query.vue

@@ -1,93 +1,42 @@
 <template>
   <div class="ioc-query-form">
-    <a-form layout="inline" :form="formData" style="width: 100%;position: relative">
+    <a-form layout="inline" :form="formData">
       <a-form-item label="单位名称:" class="formItem" v-if="visible.company">
-        <a-select
-          default-value="0"
-          style="width: 200px"
-          v-model="formData.companyId"
-        >
+        <a-select default-value="0" style="width: 200px" v-model="formData.companyId">
           <!--<a-select-option value="0"> 全部 </a-select-option>-->
-          <a-select-option
-            v-for="item in companyData"
-            :key="item.value"
-            :value="item.value"
-          >
+          <a-select-option v-for="item in companyData" :key="item.value" :value="item.value">
             {{ item.label }}
           </a-select-option>
         </a-select>
       </a-form-item>
       <a-form-item label="部门名称:" class="formItem" v-if="visible.dept">
-        <a-select
-          default-value="0"
-          style="width: 200px"
-          v-model="formData.deptId"
-        >
+        <a-select default-value="0" style="width: 200px" v-model="formData.deptId">
           <a-select-option value="0"> 全部 </a-select-option>
-          <a-select-option
-            v-for="item in deptData"
-            :key="item.value"
-            :value="item.value"
-          >
-            {{ item.label }}
-          </a-select-option>
+          <a-select-option v-for="item in deptData" :key="item.value" :value="item.value"> {{ item.label }} </a-select-option>
         </a-select>
       </a-form-item>
       <a-form-item label="楼层:" class="formItem" v-if="visible.floor">
-        <a-select
-          default-value="1"
-          style="width: 120px"
-          v-model="formData.floorId"
-        >
-          <a-select-option
-            v-for="item in floorData"
-            :key="item.value"
-            :value="item.value"
-          >
-            {{ item.label }}
-          </a-select-option>
+        <a-select default-value="0" style="width: 120px" v-model="formData.floorId">
+          <a-select-option value="0"> 全部 </a-select-option>
+          <a-select-option v-for="item in floorData" :key="item.value" :value="item.value"> {{ item.label }} </a-select-option>
         </a-select>
       </a-form-item>
       <a-form-item label="能源类型:" class="formItem" v-if="visible.energy">
-        <a-select
-          default-value="0"
-          style="width: 200px"
-          v-model="formData.energy"
-        >
+        <a-select default-value="0" style="width: 200px" v-model="formData.energy">
           <a-select-option value="0"> 全部 </a-select-option>
-          <a-select-option
-            v-for="item in energyData"
-            :key="item.value"
-            :value="item.value"
-          >
-            {{ item.label }}
-          </a-select-option>
+          <a-select-option v-for="item in energyData" :key="item.value" :value="item.value"> {{ item.label }} </a-select-option>
         </a-select>
       </a-form-item>
       <a-form-item label="时间范围:" class="formItem" v-if="visible.time">
-        <timeRange
-          :time-range.sync="formData.timeRange"
-          ref="timeRange"
-          style="width: 250px"
-        ></timeRange>
+        <timeRange :time-range.sync="formData.timeRange" ref="timeRange" style="width: 250px"></timeRange>
       </a-form-item>
       <slot name="extraItem"></slot>
-      <a-form-item class="formItem" style="position: absolute;right: 0">
-        <a-space size="middle" >
-          <a-button
-            type="primary"
-            size="small"
-            style="width: 70px; background-color: #b3b3b3; border: none"
-            @click="formReset"
+      <a-form-item class="formItem" style="float: right; margin-right: 3%">
+        <a-space size="middle">
+          <a-button type="primary" size="small" style="width: 70px; background-color: #b3b3b3; border: none" @click="formReset"
             >重置</a-button
           >
-          <a-button
-            type="primary"
-            size="small"
-            style="width: 70px"
-            @click="search(formData)"
-            >查询</a-button
-          >
+          <a-button type="primary" size="small" style="width: 70px" @click="search(formData)">查询</a-button>
         </a-space>
       </a-form-item>
     </a-form>
@@ -98,7 +47,7 @@
 import timeRange from "@/components/common/timeRange.vue";
 export default {
   components: {
-    timeRange,
+    timeRange
   },
   props: {
     queryData: Object,
@@ -106,24 +55,24 @@ export default {
     reset: Function,
     search: Function,
     floorOptions: Array,
-    companyOptions: Array,
+    companyOptions: Array
   },
   emits: ["update:queryData"],
   setup(props, context) {
     const methods = {
       updateFormData(obj) {
         context.emit("update:queryData", obj);
-      },
+      }
     };
     return methods;
   },
   watch: {
     formData: {
-      handler: function (val) {
+      handler: function(val) {
         this.updateFormData(val);
       },
-      deep: true,
-    },
+      deep: true
+    }
   },
   data() {
     return {
@@ -133,7 +82,7 @@ export default {
         floor: false,
         dept: false,
         energy: false,
-        time: false,
+        time: false
       },
       formData: {},
       // 单位数据
@@ -144,8 +93,8 @@ export default {
         //},
         {
           label: "北京电信规划院",
-          value: "0",
-        },
+          value: "0"
+        }
         //{
         //  label: '上分',
         //  value: '3'
@@ -155,75 +104,75 @@ export default {
       floorData: [
         {
           value: -3,
-          label: "B3",
+          label: "B3"
         },
         {
           value: -2,
-          label: "B2",
+          label: "B2"
         },
         {
           value: -1,
-          label: "B1",
+          label: "B1"
         },
         {
           value: "1",
-          label: "1F",
+          label: "1F"
         },
         {
           value: 7,
-          label: "7F",
+          label: "7F"
         },
         {
           value: 8,
-          label: "8F",
+          label: "8F"
         },
         {
           value: 9,
-          label: "9F",
+          label: "9F"
         },
         {
           value: 21,
-          label: "21F",
-        },
+          label: "21F"
+        }
       ],
       // 部门数据
       deptData: [
         {
           label: "业务一部",
-          value: "1",
+          value: "1"
         },
         {
           label: "业务二部",
-          value: "2",
+          value: "2"
         },
         {
           label: "业务三部",
-          value: "3",
-        },
+          value: "3"
+        }
       ],
       // 能源类型
       energyData: [
         {
           label: "用电",
-          value: "electric",
+          value: "electric"
         },
         {
           label: "用水",
-          value: "water",
+          value: "water"
         },
         {
           label: "用热",
-          value: "hot",
+          value: "hot"
         },
         {
           label: "用冷",
-          value: "cold",
+          value: "cold"
         },
         {
           label: "光伏",
-          value: "pv",
-        },
-      ],
+          value: "pv"
+        }
+      ]
     };
   },
   created() {
@@ -242,9 +191,9 @@ export default {
     }
     if (this.queryData) {
       this.formData = JSON.parse(JSON.stringify(this.queryData));
-      if (this.queryData.floorId == "0") {
-        this.formData.floorId = "1";
-      }
+      // if (this.queryData.floorId == "0") {
+      //   this.formData.floorId = "1";
+      // }
       this.oriQueryData = JSON.parse(JSON.stringify(this.queryData));
     }
   },
@@ -252,15 +201,12 @@ export default {
     formReset() {
       this.formData = JSON.parse(JSON.stringify(this.oriQueryData));
       this.search();
-    },
-  },
+    }
+  }
 };
 </script>
 
 <style lang="less" scoped>
-.ioc-query-form {
-  width: 100%;
-}
 .formItem {
   margin: 0px 15px;
 }

+ 1 - 0
src/components/dashboard/more/carbonOverviewChart.vue

@@ -27,6 +27,7 @@ export default {
         },
         yAxis: [
           {
+            name:"碳配额(tCO2e)",
             type: 'value',
             nameTextStyle: {
               padding: [10, 0, 10, -20]

+ 2 - 4
src/components/dashboard/more/pv/pvPowerProfitChart.vue

@@ -7,9 +7,7 @@ export default {
       dataIndexes: ["subsidy", "saving","earning"],
       option: {
         tooltip: {
-          formatter:function(params){
-            return params.seriesName + " :  " + params.value + '元';
-          }
+          trigger: 'item',
         },
         legend: {
           bottom: "8%",
@@ -21,7 +19,7 @@ export default {
             name: "金额",
             type: "pie",
             unit:"元",
-            radius: "60",
+            radius: "55%",
             center: ["50%", "40%"],
             data: [
               { value: 0, name: "补贴金额" },

+ 2 - 2
src/components/dashboard/more/pv/pvPowerSummaryChart.vue

@@ -8,7 +8,7 @@ export default {
       option: {
         legend: {
           data: [
-            '实时发电',
+            '发电',
           ]
         },
         grid: {
@@ -52,7 +52,7 @@ export default {
         },
         series: [
           {
-            name: '实时发电',
+            name: '发电',
             data: [],
             type: 'line',
             smooth: true,

+ 2 - 2
src/components/dashboard/more/pvPowerChart.vue

@@ -22,7 +22,7 @@ export default {
 
 <template>
   <div class="dashboard-pvPower">
-    <Card title="光伏发电量">
+    <Card title="光伏发电量: kWh">
       <div style="height: 200px">
         <PvPowerSummaryChart
           :height="220"
@@ -34,7 +34,7 @@ export default {
       </div>
     </Card>
 
-    <Card title="光伏盈利">
+    <Card title="光伏盈利: 元">
       <div style="width: 90%; margin: 0 auto; padding: 15px">
         <PvPowerProfitChart
           :height="200"

+ 9 - 5
src/components/home/HomeLeft.vue

@@ -46,7 +46,7 @@
           智慧场景
         </a-menu-item>
       </a-menu-item-group>
-      <a-menu-item-group key="g2">
+      <a-menu-item-group key="g2" style="margin-top:40px;">
         <template slot="title">
           <div @mouseover="showNav" class="allNavBtn2">
             <div>单点登录</div>
@@ -109,6 +109,12 @@ export default {
 .ant-avatar-image {
   border-radius: 0 !important;
 }
+* {
+  user-select: none;
+  -moz-user-select: none;
+  -webkit-user-select: none;
+  -ms-user-select: none;
+}
 .homeLeft {
   width: 100%;
   height: 100%;
@@ -126,15 +132,13 @@ export default {
   .allNavBtn2 {
     width: 100%;
     cursor: default;
-    font-size: 16px;
     font-weight: 400;
-    padding-bottom: 10px;
     padding-left: 24px;
-    margin: 12px 0;
     color: #fff;
     &-menuList {
+      margin-top: 24px;
       & div {
-        margin: 5px;
+        margin: 12px 0;
         cursor: pointer;
         &:hover {
           & span {

+ 4 - 0
src/components/home/NavigationPage.vue

@@ -83,6 +83,10 @@ export default {
         letter-spacing: 1px;
         color: #333333;
         cursor: pointer;
+        &:hover {
+          color: #00c6fb;
+          box-shadow: 0px 1px 5px 0px #00c6fb64;
+        }
       }
     }
   }

+ 16 - 11
src/components/report/data/reportDataRestaurant.vue

@@ -8,9 +8,13 @@
       <Card title="报告预览">
         <template #title-extra>
           <div style="padding-right: 20px">
-            <span style="color: #B2B2B2;font-size: 12px">支持 pdf,word,excel</span>
-            <a-button type="link" size="small">导出</a-button>
-            <a-button type="link" size="small" >打印</a-button>
+            <span style="color: #b2b2b2; font-size: 12px"
+              >支持 pdf,word,excel</span
+            >
+            <a-button type="link" size="small" @click="exportFunc"
+              >导出</a-button
+            >
+            <a-button type="link" size="small">打印</a-button>
           </div>
         </template>
         <reportDataTable />
@@ -28,17 +32,18 @@ export default {
   components: {
     Card,
     ReportQuery,
-    reportDataTable
+    reportDataTable,
   },
   data() {
-    return {}
-  },
-  mounted() {
+    return {};
   },
+  mounted() {},
   methods: {
-
-  }
-}
+    exportFunc() {
+      console.log("打印报告");
+    },
+  },
+};
 </script>
 
 <style lang="less" scoped>
@@ -56,4 +61,4 @@ export default {
     background-color: #ffffff;
   }
 }
-</style>
+</style>

+ 66 - 39
src/components/report/table/reportTableCustom.vue

@@ -8,9 +8,13 @@
       <Card title="报告预览">
         <template #title-extra>
           <div style="padding-right: 20px">
-            <span style="color: #B2B2B2;font-size: 12px">支持 pdf,word,excel</span>
-            <a-button type="link" size="small">导出</a-button>
-            <a-button type="link" size="small" >打印</a-button>
+            <span style="color: #b2b2b2; font-size: 12px"
+              >支持 pdf,word,excel</span
+            >
+            <a-button type="link" size="small" @click="exportFunc"
+              >导出</a-button
+            >
+            <a-button type="link" size="small">打印</a-button>
           </div>
         </template>
         <reportDataTable :data="tableData" :time-range="timeRange" />
@@ -23,7 +27,7 @@
 import Query from "@/components/common/query.vue";
 import Card from "@/components/common/card.vue";
 import reportDataTable from "@/components/report/data/tables/reportDataTable.vue";
-
+import * as XLSX from "xlsx";
 export default {
   components: {
     Card,
@@ -33,18 +37,19 @@ export default {
   data() {
     let timeRange = this.$util.dateUtil.getNearlyMonthRange();
     return {
-      timeRange: '',
+      timeRange: "",
       queryData: {
-        timeRange: timeRange
+        timeRange: timeRange,
       },
       oriTableData: [],
       tableData: [
         {
-          building: '主语国际',
-          tjwd: '事项总计',
+          building: "主语国际",
+          tjwd: "事项总计",
           undervoltage: 0,
-        },{
-          tjwd: '分项总计',
+        },
+        {
+          tjwd: "分项总计",
           undervoltage: 0,
           overvoltage: 0,
           overcurrent: 0,
@@ -54,9 +59,10 @@ export default {
           shortcircuit: 0,
           breakele: 0,
           underline: 0,
-        },{
-          tjwd: '1层',
-          eventObj: '1F 插座动力',
+        },
+        {
+          tjwd: "1层",
+          eventObj: "1F 插座动力",
           undervoltage: 0,
           overvoltage: 0,
           overcurrent: 0,
@@ -66,9 +72,10 @@ export default {
           shortcircuit: 0,
           breakele: 0,
           underline: 0,
-        },{
-          tjwd: '规划院',
-          eventObj: '7F 一般照明',
+        },
+        {
+          tjwd: "规划院",
+          eventObj: "7F 一般照明",
           undervoltage: 0,
           overvoltage: 0,
           overcurrent: 0,
@@ -78,8 +85,9 @@ export default {
           shortcircuit: 0,
           breakele: 0,
           underline: 0,
-        },{
-          eventObj: '8F 插座动力',
+        },
+        {
+          eventObj: "8F 插座动力",
           undervoltage: 0,
           overvoltage: 0,
           overcurrent: 0,
@@ -89,8 +97,9 @@ export default {
           shortcircuit: 0,
           breakele: 0,
           underline: 0,
-        },{
-          eventObj: '8F 应急照明',
+        },
+        {
+          eventObj: "8F 应急照明",
           undervoltage: 0,
           overvoltage: 0,
           overcurrent: 0,
@@ -100,8 +109,9 @@ export default {
           shortcircuit: 0,
           breakele: 0,
           underline: 0,
-        },{
-          eventObj: '8F 一般照明',
+        },
+        {
+          eventObj: "8F 一般照明",
           undervoltage: 0,
           overvoltage: 0,
           overcurrent: 0,
@@ -111,8 +121,9 @@ export default {
           shortcircuit: 0,
           breakele: 0,
           underline: 0,
-        },{
-          eventObj: '9F 一般照明',
+        },
+        {
+          eventObj: "9F 一般照明",
           undervoltage: 0,
           overvoltage: 0,
           overcurrent: 0,
@@ -124,29 +135,45 @@ export default {
           underline: 0,
         },
       ],
-    }
+    };
   },
   mounted() {
     this.oriTableData = JSON.parse(JSON.stringify(this.tableData));
     this.search();
   },
   methods: {
-    getRandom(m,n) {
-      let val = Math.random()*(m-n)+n
+    exportFunc() {
+      console.log("打印报表");
+      const data = [
+        ["姓名", "年龄", "性别", "毕业院校"],
+        ["张三", 18, "男", "清华大学"],
+        ["李四", 22, "女", "北京大学"],
+        ["王五", 20, "男", "上海交通大学"],
+      ];
+      const worksheet = XLSX.utils.aoa_to_sheet(data);
+      const workbook = XLSX.utils.book_new();
+      XLSX.utils.book_append_sheet(workbook, worksheet, "表格名字");
+      XLSX.writeFile(workbook, "能源报警报表.xlsx");
+    },
+    getRandom(m, n) {
+      let val = Math.random() * (m - n) + n;
       return Math.ceil(val);
     },
     search() {
-      let value = this.queryData.timeRange.startDate+' ~ '+this.queryData.timeRange.endDate
+      let value =
+        this.queryData.timeRange.startDate +
+        " ~ " +
+        this.queryData.timeRange.endDate;
       this.timeRange = value;
-      this.tableData = JSON.parse(JSON.stringify(this.oriTableData))
+      this.tableData = JSON.parse(JSON.stringify(this.oriTableData));
       for (let i = 0; i < 4; i++) {
-        let index = this.getRandom(2,7);
+        let index = this.getRandom(2, 7);
         let obj = this.tableData[index];
         let i = 0;
-        let keyIndex = this.getRandom(0,9);
+        let keyIndex = this.getRandom(0, 9);
         for (const key in obj) {
-          let num = this.getRandom(0,5);
-          if (key == 'eventObj') {
+          let num = this.getRandom(0, 5);
+          if (key == "eventObj") {
             continue;
           } else if (keyIndex == i) {
             obj[key] = num;
@@ -156,7 +183,7 @@ export default {
       }
       // 计算总数
       let obj = {
-        tjwd: '分项总计',
+        tjwd: "分项总计",
         undervoltage: 0,
         overvoltage: 0,
         overcurrent: 0,
@@ -166,7 +193,7 @@ export default {
         shortcircuit: 0,
         breakele: 0,
         underline: 0,
-      }
+      };
       for (let i = 2; i < 8; i++) {
         obj.undervoltage += this.tableData[i].undervoltage;
         obj.overvoltage += this.tableData[i].overvoltage;
@@ -179,9 +206,9 @@ export default {
         obj.underline += this.tableData[i].underline;
       }
       this.tableData[1] = obj;
-    }
-  }
-}
+    },
+  },
+};
 </script>
 
 <style lang="less" scoped>
@@ -199,4 +226,4 @@ export default {
     background-color: #ffffff;
   }
 }
-</style>
+</style>

+ 1 - 1
src/components/scene/meeting/config/meetingRoomItem.vue

@@ -28,7 +28,7 @@
             <span v-if="obj.status == 1">会议中</span> <span v-if="obj.status == 2">闲置中</span>
             <span v-if="obj.status == 3">已预订</span>
           </div>
-          <div class="meetingRoomItem-num" :style="{ color: color.primary }">{{ obj.time }}</div>
+          <div class="meetingRoomItem-num" :style="{ color: color.primary }">{{ obj.size }}</div>
         </div>
       </a-col>
       <a-col>

+ 50 - 8
src/components/scene/meeting/config/meetingRooms.vue

@@ -1,10 +1,10 @@
 <template>
   <div class="meetingRooms">
     <div class="meetingRooms-query">
-      <Query :show="['floor']" :query-data.sync="queryData" :reset="reset" :search="search">
+      <Query :show="['floor']" :floorOptions.sync="floorOptions" :query-data.sync="queryData" :reset="reset" :search="search">
         <template #extraItem>
           <a-form-model-item label="会议室状态:" class="formItem">
-            <a-select default-value="0" style="width: 120px" v-model="queryData.size">
+            <a-select default-value="0" style="width: 120px" v-model="queryData.state">
               <a-select-option value="0"> 全部 </a-select-option>
               <a-select-option v-for="item in roomStatusData" :key="item.value" :value="item.value">
                 {{ item.label }}
@@ -27,7 +27,7 @@
     </div>
 
     <div class="meetingRooms-content">
-      <div v-for="(floor, index) in roomData" :key="floor.floor" :index="index">
+      <div v-for="(floor, index) in roomData2" :key="floor.floor" :index="index">
         <div class="meetingRooms-floor">
           <div class="meetingRooms-floor-title">
             <a-divider orientation="left" :dashed="true"> {{ floor.floor }} </a-divider>
@@ -46,7 +46,7 @@
 <script>
 import MeetingRoomItem from "@/components/scene/meeting/config/meetingRoomItem.vue";
 import Query from "@/components/common/query.vue";
-import apiSceneMeeting from "@/api/scene/meeting/apiSceneMeeting";
+// import apiSceneMeeting from "@/api/scene/meeting/apiSceneMeeting";
 
 export default {
   components: {
@@ -61,6 +61,7 @@ export default {
       formDateDefaultValue: now,
       queryData: {
         floorId: "0",
+        state: "0",
         size: "0",
         date: nowFormat,
         timeRange: timeRange
@@ -93,6 +94,8 @@ export default {
           value: "3"
         }
       ],
+      floorOptions: [],
+      roomData2: [],
       roomData: [
         {
           floor: "3F",
@@ -103,6 +106,7 @@ export default {
               timeRange: ["9:00", "10:00"],
               status: "1",
               time: 8,
+              size: 8,
               devices: [
                 { icon: "audio" },
                 { icon: "camera" },
@@ -119,6 +123,7 @@ export default {
               timeRange: ["9:00", "10:00"],
               status: "1",
               time: 8,
+              size: 10,
               devices: [
                 { icon: "audio" },
                 { icon: "camera" },
@@ -135,6 +140,7 @@ export default {
               timeRange: ["9:00", "10:00"],
               status: "2",
               time: 8,
+              size: 20,
               devices: [
                 { icon: "audio" },
                 { icon: "camera" },
@@ -151,6 +157,7 @@ export default {
               timeRange: ["9:00", "10:00"],
               status: "3",
               time: 8,
+              size: 25,
               devices: [
                 { icon: "audio" },
                 { icon: "camera" },
@@ -172,6 +179,7 @@ export default {
               timeRange: ["9:00", "10:00"],
               status: "1",
               time: 8,
+              size: 10,
               devices: [
                 { icon: "audio" },
                 { icon: "camera" },
@@ -188,6 +196,7 @@ export default {
               timeRange: ["9:00", "10:00"],
               status: "1",
               time: 8,
+              size: 16,
               devices: [
                 { icon: "audio" },
                 { icon: "camera" },
@@ -209,6 +218,7 @@ export default {
               timeRange: ["9:00", "10:00"],
               status: "1",
               time: 8,
+              size: 10,
               devices: [
                 { icon: "audio" },
                 { icon: "camera" },
@@ -226,17 +236,49 @@ export default {
   },
   props: {},
   mounted() {
-    console.log("this.roomData", this.roomData);
-    console.log("this.queryData", this.queryData);
     this.getMeetingRooms();
   },
   methods: {
-    reset() {},
-    search() {},
+    reset() {
+      this.queryData = {
+        floorId: "0",
+        state: "0",
+        size: "0",
+        date: nowFormat,
+        timeRange: timeRange
+      };
+      this.search();
+    },
+    search() {
+      let returnRoomData = [];
+      this.roomData.forEach(item => {
+        if ((this.queryData.floorId != "0" && this.queryData.floorId == item.floor) || this.queryData.floorId == "0") {
+          let itemRoomsItem = [];
+          itemRoomsItem = item.rooms.filter(item2 => {
+            return (
+              (this.queryData.state != "0" ? item2.status == this.queryData.state : true) &&
+              (this.queryData.size != "0"
+                ? (this.queryData.size - 1) * 10 < item2.size && item2.size <= this.queryData.size * 10
+                : true)
+            );
+          });
+          if (itemRoomsItem && itemRoomsItem.length > 0) {
+            returnRoomData.push({ floor: item.floor, rooms: itemRoomsItem });
+          }
+        }
+      });
+      this.roomData2 = returnRoomData;
+    },
     handleDatePickerChange(val) {
       this.queryData.date = val.format("YYYY/MM/DD");
     },
     getMeetingRooms() {
+      this.roomData2 = this.roomData;
+      if (this.roomData2.length > 0) {
+        this.roomData2.forEach(item => {
+          this.floorOptions.push({ value: item.floor, label: item.floor });
+        });
+      }
       //apiSceneMeeting.getMeetingRoomList(this.queryData).then(res=>{
       //  console.log(res)
       //})

+ 1 - 1
src/components/work/bus/component/workBusChart.vue

@@ -31,7 +31,7 @@ export default {
         },
         yAxis: [
           {
-            name: '出车次数',
+            name: '出车次数(次)',
             type: 'value',
             position: 'left',
             max: 5,

+ 69 - 56
src/components/work/bus/component/workBusTrend.vue

@@ -6,112 +6,125 @@ export default {
     return {
       option: {
         legend: {
-          data: [
-            '成本',
-          ]
+          top: "10%",
+          data: ["成本"],
         },
         grid: {
-          left: '6%', //默认10%
-          right: '10%', //默认10%
-          bottom: '20px', //默认60
-          top: '60px',
-          containLabel: true
+          left: "2%", //默认10%
+          right: "3%", //默认10%
+          bottom: "20px", //默认60
+          top: "25%",
+          containLabel: true,
           //grid区域是否包含坐标轴的刻度标签
         },
         xAxis: {
-          data: []
+          data: [],
         },
         yAxis: [
           {
-            name: '%',
-            type: 'value',
+            name: "金额(元)",
+            type: "value",
             nameTextStyle: {
-              padding: [10, 0, 10, -12]
+              padding: [10, 0, 10, -12],
             },
           },
         ],
         dataZoom: this.$constant.ECHARTS_OPTION_DATAZOOM,
         tooltip: {
-          trigger: 'axis',
+          trigger: "axis",
           axisPointer: {
-            type: 'shadow'
+            type: "shadow",
           },
           textStyle: {
-            color: '#fff',
-            align: 'left',
-            fontSize: 14
+            color: "#fff",
+            align: "left",
+            fontSize: 14,
           },
-          axisLine: {//x坐标轴轴线
+          axisLine: {
+            //x坐标轴轴线
             show: true,
-            lineStyle: {//x坐标轴轴线样式
-              color: '#000',//'#ccc' | 'rgb(128, 128, 128)' | 'rgba(128, 128, 128, 0.5)',设置标签颜色
-            }
+            lineStyle: {
+              //x坐标轴轴线样式
+              color: "#000", //'#ccc' | 'rgb(128, 128, 128)' | 'rgba(128, 128, 128, 0.5)',设置标签颜色
+            },
           },
-          backgroundColor: 'rgba(0,0,0,0.8)',
+          backgroundColor: "rgba(0,0,0,0.8)",
         },
         series: [
           {
-            name: '成本',
+            name: "成本",
             data: [],
-            type: 'line',
-            stack: 'x',
+            type: "line",
+            stack: "x",
             smooth: true,
-            showSymbol:false,
+            showSymbol: false,
             areaStyle: {
-              color: new this.$echarts.graphic.LinearGradient(0, 0, 0, 1, [{
-                offset: 0,
-                color: '#B0E5CB' // 0% 处的颜色
-              }, {
-                offset: 0.8,
-                color: '#ffffff' // 100% 处的颜色
-              }], false),
+              color: new this.$echarts.graphic.LinearGradient(
+                0,
+                0,
+                0,
+                1,
+                [
+                  {
+                    offset: 0,
+                    color: "#B0E5CB", // 0% 处的颜色
+                  },
+                  {
+                    offset: 0.8,
+                    color: "#ffffff", // 100% 处的颜色
+                  },
+                ],
+                false
+              ),
             },
             lineStyle: {
               color: "#62CC97",
               width: 1,
             },
             itemStyle: {
-              color: '#62CC97'
+              color: "#62CC97",
             },
             emphasis: {
-              scale:1.5
-            }
+              scale: 1.5,
+            },
           },
-        ]
+        ],
       },
-    }
+    };
   },
   props: {
     height: Number,
-    queryData: Object
+    queryData: Object,
   },
   mounted() {
-    this.$nextTick(()=>{
-      this.init()
-    })
+    this.$nextTick(() => {
+      this.init();
+    });
   },
   methods: {
     init() {
-      let chart = this.$echarts.init(this.$refs.myChart)
+      let chart = this.$echarts.init(this.$refs.myChart);
       this.chart = chart;
       this.$util.chartsResize(this.chart);
-      chart.setOption(this.option)
-      this.getData()
+      chart.setOption(this.option);
+      this.getData();
     },
     getData() {
-      return ApiWorkBus.getBusCostTrend(this.queryData).then(res=>{
-        let data = this.$util.dataUtil.covertDataToEcharts(res, ['cost'])
-        this.$util.dataUtil.refreshEchartsData(this.chart, this.option, data)
-      })
-    }
-  }
-}
+      return ApiWorkBus.getBusCostTrend(this.queryData).then((res) => {
+        let data = this.$util.dataUtil.covertDataToEcharts(res, ["cost"]);
+        this.$util.dataUtil.refreshEchartsData(this.chart, this.option, data);
+      });
+    },
+  },
+};
 </script>
 
 <template>
-  <div style="width: 100%" :style="{height: height+'px'}" ref="myChart"></div>
+  <div
+    style="width: 100%"
+    :style="{ height: height + 'px' }"
+    ref="myChart"
+  ></div>
 </template>
 
-<style lang="less" scoped>
-
-</style>
+<style lang="less" scoped></style>

+ 15 - 6
src/components/work/bus/workBus.vue

@@ -19,7 +19,7 @@
       </card>
     </div>
     <a-row :style="{ marginTop: '15px' }">
-      <a-col :span="18">
+      <a-col :span="24">
         <div class="left ioc-card-content">
           <card :title="'公车分析'">
             <WorkBusChart
@@ -30,14 +30,23 @@
           </card>
         </div>
       </a-col>
-      <a-col :span="6">
+      <a-col :span="24" style="margin-top: 12px">
         <div class="right ioc-card-content">
-          <card :title="'成本趋势'">
+          <card
+            :title="'成本趋势'"
+            :moduleType="'智慧办公'"
+            :mainTitleSize="'20px'"
+          >
+            <template #sub-title>
+              <div style="font-size: 16px; color: #4d4d4d; margin-top: 10px">
+                成本趋势: 增速10%
+              </div>
+            </template>
             <div style="padding: 0 15px">
               <WorkBusTrend
                 ref="WorkBusTrend"
                 :query-data="queryData"
-                :height="450"
+                :height="400"
               />
             </div>
           </card>
@@ -152,12 +161,12 @@ export default {
 
 <style lang="less" scoped>
 .left {
-  margin-right: 6px;
+  // margin-right: 6px;
   padding-bottom: 15px;
 }
 
 .right {
-  margin-left: 6px;
+  // margin-left: 6px;
   background-color: #ffffff;
   padding-bottom: 15px;
 }

+ 6 - 0
src/components/work/meeting/component/workMeetingCostTrend.vue

@@ -133,6 +133,11 @@ export default {
           formatter: (name) => {
             return `{a|${name}} `;
           },
+          selected:{
+            "智慧院":false,
+            "业务一部":false,
+            "其他部门":false
+          },
           textStyle: {
             color: "#999999",
             fontSize: 12,
@@ -187,6 +192,7 @@ export default {
         },
         yAxis: [
           {
+            name:"使用时长(h)",
             min: 0,
             splitLine: {
               show: false,

+ 9 - 9
src/components/work/meeting/workMeeting.vue

@@ -22,7 +22,7 @@
 
     <div style="margin-top: 12px">
       <a-row>
-        <a-col :span="18">
+        <a-col :span="24">
           <div class="workMeeting-left ioc-card-content">
             <card title="会议分析">
               <a-row>
@@ -207,12 +207,12 @@
             </card>
           </div>
         </a-col>
-        <a-col :span="6">
+        <a-col :span="24" style="margin-top:12px;">
           <div class="workMeeting-right ioc-card-content">
-            <card title="成本趋势">
-              <template #title-extra>
-                <div style="font-size: 18px; color: #4d4d4d; margin-top: 3px">
-                  成本集中
+            <card title="成本趋势" moduleType="智慧办公" mainTitleSize="20px">
+              <template #sub-title>
+                <div style="font-size: 16px; color: #4d4d4d; margin-top: 10px">
+                  成本趋势: 成本集中
                 </div>
               </template>
               <div class="cben" style="margin-bottom: 15px">
@@ -225,7 +225,7 @@
             </card>
           </div>
         </a-col>
-        <a-col :span="18">
+        <a-col :span="24" style="margin-top:12px;">
           <div
             class="workMeeting-left ioc-card-content"
             style="margin-bottom: 15px"
@@ -535,7 +535,7 @@ export default {
     background-color: #ffffff;
     padding: 2px 15px;
     border-radius: 4px;
-    margin-right: 6px;
+    // margin-right: 6px;
     .ant-col-3 {
       .week-box {
         height: 60px;
@@ -589,7 +589,7 @@ export default {
     background-color: #ffffff;
     padding: 2px 15px;
     border-radius: 4px;
-    margin-left: 6px;
+    // margin-left: 6px;
   }
 }
 </style>

+ 5 - 4
src/components/work/print/component/workPrintTrend.vue

@@ -6,15 +6,16 @@ export default {
     return {
       option: {
         legend: {
+          top:"10%",
           data: [
             '成本',
           ]
         },
         grid: {
-          left: '6%', //默认10%
-          right: '10%', //默认10%
+          left: '2%', //默认10%
+          right: '3%', //默认10%
           bottom: '20px', //默认60
-          top: '60px',
+          top: '25%',
           containLabel: true
           //grid区域是否包含坐标轴的刻度标签
         },
@@ -23,7 +24,7 @@ export default {
         },
         yAxis: [
           {
-            name: '%',
+            name: '金额(元)',
             type: 'value',
             nameTextStyle: {
               padding: [10, 0, 10, -12]

+ 15 - 6
src/components/work/print/workPrint.vue

@@ -20,7 +20,7 @@
       </card>
     </div>
     <a-row :style="{ marginTop: '12px' }">
-      <a-col :span="18">
+      <a-col :span="24">
         <div class="left ioc-card-content">
           <card :title="'文印分析'">
             <WorkPrintChart
@@ -31,14 +31,23 @@
           </card>
         </div>
       </a-col>
-      <a-col :span="6">
+      <a-col :span="24" style="margin-top: 12px">
         <div class="right ioc-card-content">
-          <card :title="'成本趋势'">
+          <card
+            :title="'成本趋势'"
+            :moduleType="'智慧办公'"
+            :mainTitleSize="'20px'"
+          >
+            <template #sub-title>
+              <div style="font-size: 16px; color: #4d4d4d; margin-top: 10px">
+                成本趋势: 增速10%
+              </div>
+            </template>
             <div style="padding: 0 15px">
               <WorkPrintTrend
                 ref="WorkPrintTrend"
                 :query-data="queryData"
-                :height="450"
+                :height="400"
               />
             </div>
           </card>
@@ -171,13 +180,13 @@ export default {
 
 <style lang="less" scoped>
 .left {
-  margin-right: 6px;
+  // margin-right: 6px;
   padding-bottom: 15px;
 }
 
 .right {
   background-color: #ffffff;
-  margin-left: 6px;
+  // margin-left: 6px;
   padding-bottom: 15px;
 }
 </style>