@ -0,0 +1,3 @@
 | 
				
			|||||||
 | 
					> 1%
 | 
				
			||||||
 | 
					last 2 versions
 | 
				
			||||||
 | 
					not dead
 | 
				
			||||||
@ -0,0 +1,5 @@
 | 
				
			|||||||
 | 
					[*.{js,jsx,ts,tsx,vue}]
 | 
				
			||||||
 | 
					indent_style = space
 | 
				
			||||||
 | 
					indent_size = 2
 | 
				
			||||||
 | 
					trim_trailing_whitespace = true
 | 
				
			||||||
 | 
					insert_final_newline = true
 | 
				
			||||||
@ -0,0 +1,17 @@
 | 
				
			|||||||
 | 
					module.exports = {
 | 
				
			||||||
 | 
					  root: true,
 | 
				
			||||||
 | 
					  env: {
 | 
				
			||||||
 | 
					    node: true
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  extends: [
 | 
				
			||||||
 | 
					    'plugin:vue/essential',
 | 
				
			||||||
 | 
					    '@vue/standard'
 | 
				
			||||||
 | 
					  ],
 | 
				
			||||||
 | 
					  parserOptions: {
 | 
				
			||||||
 | 
					    parser: '@babel/eslint-parser'
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  rules: {
 | 
				
			||||||
 | 
					    'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
 | 
				
			||||||
 | 
					    'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off'
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -0,0 +1,23 @@
 | 
				
			|||||||
 | 
					.DS_Store
 | 
				
			||||||
 | 
					node_modules
 | 
				
			||||||
 | 
					/dist
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# local env files
 | 
				
			||||||
 | 
					.env.local
 | 
				
			||||||
 | 
					.env.*.local
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Log files
 | 
				
			||||||
 | 
					npm-debug.log*
 | 
				
			||||||
 | 
					yarn-debug.log*
 | 
				
			||||||
 | 
					yarn-error.log*
 | 
				
			||||||
 | 
					pnpm-debug.log*
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Editor directories and files
 | 
				
			||||||
 | 
					.idea
 | 
				
			||||||
 | 
					.vscode
 | 
				
			||||||
 | 
					*.suo
 | 
				
			||||||
 | 
					*.ntvs*
 | 
				
			||||||
 | 
					*.njsproj
 | 
				
			||||||
 | 
					*.sln
 | 
				
			||||||
 | 
					*.sw?
 | 
				
			||||||
@ -0,0 +1,36 @@
 | 
				
			|||||||
 | 
					# mingda-trade-web
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#### Description
 | 
				
			||||||
 | 
					名达工艺-外贸端-web
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#### Software Architecture
 | 
				
			||||||
 | 
					Software architecture description
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#### Installation
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					1.  xxxx
 | 
				
			||||||
 | 
					2.  xxxx
 | 
				
			||||||
 | 
					3.  xxxx
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#### Instructions
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					1.  xxxx
 | 
				
			||||||
 | 
					2.  xxxx
 | 
				
			||||||
 | 
					3.  xxxx
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#### Contribution
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					1.  Fork the repository
 | 
				
			||||||
 | 
					2.  Create Feat_xxx branch
 | 
				
			||||||
 | 
					3.  Commit your code
 | 
				
			||||||
 | 
					4.  Create Pull Request
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#### Gitee Feature
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					1.  You can use Readme\_XXX.md to support different languages, such as Readme\_en.md, Readme\_zh.md
 | 
				
			||||||
 | 
					2.  Gitee blog [blog.gitee.com](https://blog.gitee.com)
 | 
				
			||||||
 | 
					3.  Explore open source project [https://gitee.com/explore](https://gitee.com/explore)
 | 
				
			||||||
 | 
					4.  The most valuable open source project [GVP](https://gitee.com/gvp)
 | 
				
			||||||
 | 
					5.  The manual of Gitee [https://gitee.com/help](https://gitee.com/help)
 | 
				
			||||||
 | 
					6.  The most popular members  [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)
 | 
				
			||||||
@ -0,0 +1,37 @@
 | 
				
			|||||||
 | 
					# mingda-trade-web
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#### 介绍
 | 
				
			||||||
 | 
					名达工艺-外贸端-web
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#### 软件架构
 | 
				
			||||||
 | 
					软件架构说明
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#### 安装教程
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					1.  xxxx
 | 
				
			||||||
 | 
					2.  xxxx
 | 
				
			||||||
 | 
					3.  xxxx
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#### 使用说明
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					1.  xxxx
 | 
				
			||||||
 | 
					2.  xxxx
 | 
				
			||||||
 | 
					3.  xxxx
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#### 参与贡献
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					1.  Fork 本仓库
 | 
				
			||||||
 | 
					2.  新建 Feat_xxx 分支
 | 
				
			||||||
 | 
					3.  提交代码
 | 
				
			||||||
 | 
					4.  新建 Pull Request
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#### 特技
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					1.  使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md
 | 
				
			||||||
 | 
					2.  Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com)
 | 
				
			||||||
 | 
					3.  你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目
 | 
				
			||||||
 | 
					4.  [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目
 | 
				
			||||||
 | 
					5.  Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help)
 | 
				
			||||||
 | 
					6.  Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)
 | 
				
			||||||
@ -0,0 +1,5 @@
 | 
				
			|||||||
 | 
					module.exports = {
 | 
				
			||||||
 | 
					  presets: [
 | 
				
			||||||
 | 
					    '@vue/cli-plugin-babel/preset'
 | 
				
			||||||
 | 
					  ]
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -0,0 +1,19 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					  "compilerOptions": {
 | 
				
			||||||
 | 
					    "target": "es5",
 | 
				
			||||||
 | 
					    "module": "esnext",
 | 
				
			||||||
 | 
					    "baseUrl": "./",
 | 
				
			||||||
 | 
					    "moduleResolution": "node",
 | 
				
			||||||
 | 
					    "paths": {
 | 
				
			||||||
 | 
					      "@/*": [
 | 
				
			||||||
 | 
					        "src/*"
 | 
				
			||||||
 | 
					      ]
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "lib": [
 | 
				
			||||||
 | 
					      "esnext",
 | 
				
			||||||
 | 
					      "dom",
 | 
				
			||||||
 | 
					      "dom.iterable",
 | 
				
			||||||
 | 
					      "scripthost"
 | 
				
			||||||
 | 
					    ]
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -0,0 +1,44 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					  "name": "foreign-trade-shopp",
 | 
				
			||||||
 | 
					  "version": "0.1.0",
 | 
				
			||||||
 | 
					  "private": true,
 | 
				
			||||||
 | 
					  "scripts": {
 | 
				
			||||||
 | 
					    "serve": "vue-cli-service serve",
 | 
				
			||||||
 | 
					    "build": "vue-cli-service build",
 | 
				
			||||||
 | 
					    "lint": "vue-cli-service lint"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  "dependencies": {
 | 
				
			||||||
 | 
					    "@jiaminghi/data-view": "^2.10.0",
 | 
				
			||||||
 | 
					    "axios": "^1.6.8",
 | 
				
			||||||
 | 
					    "core-js": "^3.8.3",
 | 
				
			||||||
 | 
					    "crypto-js": "^4.1.1",
 | 
				
			||||||
 | 
					    "echarts": "^5.5.0",
 | 
				
			||||||
 | 
					    "echarts4": "npm:echarts@^4.0.0",
 | 
				
			||||||
 | 
					    "element-ui": "^2.15.14",
 | 
				
			||||||
 | 
					    "moment": "^2.30.1",
 | 
				
			||||||
 | 
					    "nprogress": "0.2.0",
 | 
				
			||||||
 | 
					    "svg-sprite-loader": "^6.0.11",
 | 
				
			||||||
 | 
					    "vue": "^2.6.14",
 | 
				
			||||||
 | 
					    "vue-router": "^3.5.1",
 | 
				
			||||||
 | 
					    "vue-seamless-scroll": "^1.1.23",
 | 
				
			||||||
 | 
					    "vuex": "^3.6.2"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  "devDependencies": {
 | 
				
			||||||
 | 
					    "@babel/core": "^7.12.16",
 | 
				
			||||||
 | 
					    "@babel/eslint-parser": "^7.12.16",
 | 
				
			||||||
 | 
					    "@vue/cli-plugin-babel": "~5.0.0",
 | 
				
			||||||
 | 
					    "@vue/cli-plugin-eslint": "~5.0.0",
 | 
				
			||||||
 | 
					    "@vue/cli-plugin-router": "~5.0.0",
 | 
				
			||||||
 | 
					    "@vue/cli-plugin-vuex": "~5.0.0",
 | 
				
			||||||
 | 
					    "@vue/cli-service": "~5.0.0",
 | 
				
			||||||
 | 
					    "@vue/eslint-config-standard": "^6.1.0",
 | 
				
			||||||
 | 
					    "eslint": "^7.32.0",
 | 
				
			||||||
 | 
					    "eslint-plugin-import": "^2.25.3",
 | 
				
			||||||
 | 
					    "eslint-plugin-node": "^11.1.0",
 | 
				
			||||||
 | 
					    "eslint-plugin-promise": "^5.1.0",
 | 
				
			||||||
 | 
					    "eslint-plugin-vue": "^8.0.3",
 | 
				
			||||||
 | 
					    "sass": "^1.32.7",
 | 
				
			||||||
 | 
					    "sass-loader": "^12.0.0",
 | 
				
			||||||
 | 
					    "vue-template-compiler": "^2.6.14"
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
		 After Width: | Height: | Size: 1.1 KiB  | 
@ -0,0 +1,17 @@
 | 
				
			|||||||
 | 
					<!DOCTYPE html>
 | 
				
			||||||
 | 
					<html lang="">
 | 
				
			||||||
 | 
					  <head>
 | 
				
			||||||
 | 
					    <meta charset="utf-8">
 | 
				
			||||||
 | 
					    <meta http-equiv="X-UA-Compatible" content="IE=edge">
 | 
				
			||||||
 | 
					    <meta name="viewport" content="width=device-width,initial-scale=1.0">
 | 
				
			||||||
 | 
					    <link rel="icon" href="<%= BASE_URL %>favicon.ico">
 | 
				
			||||||
 | 
					    <title>大数据分析系统</title>
 | 
				
			||||||
 | 
					  </head>
 | 
				
			||||||
 | 
					  <body>
 | 
				
			||||||
 | 
					    <noscript>
 | 
				
			||||||
 | 
					      <strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
 | 
				
			||||||
 | 
					    </noscript>
 | 
				
			||||||
 | 
					    <div id="app"></div>
 | 
				
			||||||
 | 
					    <!-- built files will be auto injected -->
 | 
				
			||||||
 | 
					  </body>
 | 
				
			||||||
 | 
					</html>
 | 
				
			||||||
@ -0,0 +1,20 @@
 | 
				
			|||||||
 | 
					<template>
 | 
				
			||||||
 | 
					  <div id="app">
 | 
				
			||||||
 | 
					    <router-view />
 | 
				
			||||||
 | 
					  </div>
 | 
				
			||||||
 | 
					</template>
 | 
				
			||||||
 | 
					<script>
 | 
				
			||||||
 | 
					</script>
 | 
				
			||||||
 | 
					<style lang="scss">
 | 
				
			||||||
 | 
					#app {
 | 
				
			||||||
 | 
					  font-family: "Helvetica Neue",Helvetica,Arial,sans-serif !important;
 | 
				
			||||||
 | 
					  // -webkit-font-smoothing: antialiased;
 | 
				
			||||||
 | 
					  // -moz-osx-font-smoothing: grayscale;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#nprogress .bar {
 | 
				
			||||||
 | 
					  background: #4b8df8 !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					body {
 | 
				
			||||||
 | 
					  margin: 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					</style>
 | 
				
			||||||
@ -0,0 +1,30 @@
 | 
				
			|||||||
 | 
					import request from "@/utils/request";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 跨为分析
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//1.跨位汇总表
 | 
				
			||||||
 | 
					export function zyjhzxTable(params) {
 | 
				
			||||||
 | 
					  return request({
 | 
				
			||||||
 | 
					    url: "/kban/zyjhzxTable",
 | 
				
			||||||
 | 
					    method: "get",
 | 
				
			||||||
 | 
					    params,
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 4.30天作业区完成情况折线图
 | 
				
			||||||
 | 
					export function zyjhzx(params) {
 | 
				
			||||||
 | 
					  return request({
 | 
				
			||||||
 | 
					    url: "/kban/zyjhzx",
 | 
				
			||||||
 | 
					    method: "get",
 | 
				
			||||||
 | 
					    params,
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 5.本日各作业区计划完成情况
 | 
				
			||||||
 | 
					export function today_zyjhzx(params) {
 | 
				
			||||||
 | 
					  return request({
 | 
				
			||||||
 | 
					    url: "/kban/today_zyjhzx",
 | 
				
			||||||
 | 
					    method: "get",
 | 
				
			||||||
 | 
					    params,
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -0,0 +1,18 @@
 | 
				
			|||||||
 | 
					import request from "@/utils/request";
 | 
				
			||||||
 | 
					// 1.需求计划与分析
 | 
				
			||||||
 | 
					export function qfxqTable(params) {
 | 
				
			||||||
 | 
					  return request({
 | 
				
			||||||
 | 
					    url: "/kban/qfxqTable",
 | 
				
			||||||
 | 
					    method: "get",
 | 
				
			||||||
 | 
					    params,
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 2.柱状图
 | 
				
			||||||
 | 
					export function qfxqWc(params) {
 | 
				
			||||||
 | 
					  return request({
 | 
				
			||||||
 | 
					    url: "/kban/qfxqWc",
 | 
				
			||||||
 | 
					    method: "get",
 | 
				
			||||||
 | 
					    params,
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -0,0 +1,84 @@
 | 
				
			|||||||
 | 
					import request from "@/utils/request";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 首页
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//获取商品列表
 | 
				
			||||||
 | 
					export function goodsPage(params) {
 | 
				
			||||||
 | 
					  return request({
 | 
				
			||||||
 | 
					    url: "manage/trade/goodsPage.htm",
 | 
				
			||||||
 | 
					    method: "post",
 | 
				
			||||||
 | 
					    data: params,
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 获取品种列表
 | 
				
			||||||
 | 
					export function breadlist(params) {
 | 
				
			||||||
 | 
					  return request({
 | 
				
			||||||
 | 
					    url: "manage/trade/breadlist.htm",
 | 
				
			||||||
 | 
					    method: "get",
 | 
				
			||||||
 | 
					    params,
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 获取使用分类
 | 
				
			||||||
 | 
					export function uselist(params) {
 | 
				
			||||||
 | 
					  return request({
 | 
				
			||||||
 | 
					    url: "manage/trade/uselist.htm",
 | 
				
			||||||
 | 
					    method: "get",
 | 
				
			||||||
 | 
					    params,
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 获取节日列表
 | 
				
			||||||
 | 
					export function festivalList(params) {
 | 
				
			||||||
 | 
					  return request({
 | 
				
			||||||
 | 
					    url: "manage/trade/festivalList.htm",
 | 
				
			||||||
 | 
					    method: "get",
 | 
				
			||||||
 | 
					    params,
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 加入外贸清单
 | 
				
			||||||
 | 
					export function tradeSampleSave(params) {
 | 
				
			||||||
 | 
					  return request({
 | 
				
			||||||
 | 
					    url: "manage/trade/tradeShopSave.htm",
 | 
				
			||||||
 | 
					    method: "post",
 | 
				
			||||||
 | 
					    data: params,
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 加入外贸清单(校验商品是否存在)
 | 
				
			||||||
 | 
					export function tradeShopSaveCheck(params) {
 | 
				
			||||||
 | 
					  return request({
 | 
				
			||||||
 | 
					    url: "manage/trade/tradeShopSaveCheck.htm",
 | 
				
			||||||
 | 
					    method: "post",
 | 
				
			||||||
 | 
					    data: params,
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//获取外贸清单数量
 | 
				
			||||||
 | 
					export function tradeShopList(params) {
 | 
				
			||||||
 | 
					  return request({
 | 
				
			||||||
 | 
					    url: "manage/trade/tradeShopList.htm",
 | 
				
			||||||
 | 
					    method: "post",
 | 
				
			||||||
 | 
					    data: params,
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 获取年份
 | 
				
			||||||
 | 
					export function yearList(params) {
 | 
				
			||||||
 | 
					  return request({
 | 
				
			||||||
 | 
					    url: "manage/trade/yearList.htm",
 | 
				
			||||||
 | 
					    method: "get",
 | 
				
			||||||
 | 
					    params,
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 批量加入外贸清单
 | 
				
			||||||
 | 
					export function yearLtradeShopListSaveByIdsist(params) {
 | 
				
			||||||
 | 
					  return request({
 | 
				
			||||||
 | 
					    url: "manage/trade/tradeShopListSaveByIds.htm",
 | 
				
			||||||
 | 
					    method: "post",
 | 
				
			||||||
 | 
					    data:params,
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -0,0 +1,10 @@
 | 
				
			|||||||
 | 
					import request from "@/utils/request";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 线表分析
 | 
				
			||||||
 | 
					export function kbanXbjh(params) {
 | 
				
			||||||
 | 
					  return request({
 | 
				
			||||||
 | 
					    url: "/kban/xbjh",
 | 
				
			||||||
 | 
					    method: "get",
 | 
				
			||||||
 | 
					    params,
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -0,0 +1,11 @@
 | 
				
			|||||||
 | 
					import request from "@/utils/request";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 中日程分析
 | 
				
			||||||
 | 
					// 汇总表
 | 
				
			||||||
 | 
					export function qfxqTable(params) {
 | 
				
			||||||
 | 
					  return request({
 | 
				
			||||||
 | 
					    url: "/kban/qfxqTable",
 | 
				
			||||||
 | 
					    method: "get",
 | 
				
			||||||
 | 
					    params,
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -0,0 +1,68 @@
 | 
				
			|||||||
 | 
					import request from "@/utils/request";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//实时监测
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 1.考勤
 | 
				
			||||||
 | 
					export function kq(params) {
 | 
				
			||||||
 | 
					  return request({
 | 
				
			||||||
 | 
					    url: "/kban/kq",
 | 
				
			||||||
 | 
					    method: "get",
 | 
				
			||||||
 | 
					    params,
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 3.实时消息
 | 
				
			||||||
 | 
					export function msg(params) {
 | 
				
			||||||
 | 
					  return request({
 | 
				
			||||||
 | 
					    url: "/kban/msg",
 | 
				
			||||||
 | 
					    method: "get",
 | 
				
			||||||
 | 
					    params,
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 4.月度计划
 | 
				
			||||||
 | 
					export function ydjh(params) {
 | 
				
			||||||
 | 
					  return request({
 | 
				
			||||||
 | 
					    url: "/kban/ydjh",
 | 
				
			||||||
 | 
					    method: "get",
 | 
				
			||||||
 | 
					    params,
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 5.作业计划
 | 
				
			||||||
 | 
					export function zyjh(params) {
 | 
				
			||||||
 | 
					  return request({
 | 
				
			||||||
 | 
					    url: "/kban/zyjh",
 | 
				
			||||||
 | 
					    method: "get",
 | 
				
			||||||
 | 
					    params,
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 6.本月计划汇总量
 | 
				
			||||||
 | 
					export function getEveryKw(params) {
 | 
				
			||||||
 | 
					  return request({
 | 
				
			||||||
 | 
					    url: "/kban/getEveryKw",
 | 
				
			||||||
 | 
					    method: "get",
 | 
				
			||||||
 | 
					    params,
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 7.作业区执行情况
 | 
				
			||||||
 | 
					export function zxqZxDetail(params) {
 | 
				
			||||||
 | 
					  return request({
 | 
				
			||||||
 | 
					    url: "/kban/zxqZxDetail",
 | 
				
			||||||
 | 
					    method: "get",
 | 
				
			||||||
 | 
					    params,
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 8.作业区计划量完成量对比饼图
 | 
				
			||||||
 | 
					export function zxqwcqk(params) {
 | 
				
			||||||
 | 
					  return request({
 | 
				
			||||||
 | 
					    url: "/kban/zxqwcqk",
 | 
				
			||||||
 | 
					    method: "get",
 | 
				
			||||||
 | 
					    params,
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
		 After Width: | Height: | Size: 160 KiB  | 
| 
		 After Width: | Height: | Size: 96 KiB  | 
| 
		 After Width: | Height: | Size: 4.7 KiB  | 
| 
		 After Width: | Height: | Size: 726 KiB  | 
| 
		 After Width: | Height: | Size: 17 KiB  | 
| 
		 After Width: | Height: | Size: 3.3 KiB  | 
| 
		 After Width: | Height: | Size: 2.0 KiB  | 
| 
		 After Width: | Height: | Size: 17 KiB  | 
@ -0,0 +1,614 @@
 | 
				
			|||||||
 | 
					<template>
 | 
				
			||||||
 | 
					  <!-- 前方需求分析 -->
 | 
				
			||||||
 | 
					  <div class="forwardDemand-container">
 | 
				
			||||||
 | 
					    <!-- 筛选 -->
 | 
				
			||||||
 | 
					    <div class="formData-box">
 | 
				
			||||||
 | 
					      <el-form ref="form" :model="formData" label-width="90px">
 | 
				
			||||||
 | 
					        <el-form-item label="请选择年份" size="mini">
 | 
				
			||||||
 | 
					          <el-select v-model="formData.year">
 | 
				
			||||||
 | 
					            <el-option label="2024" :value="2024"></el-option>
 | 
				
			||||||
 | 
					            <el-option label="2025" :value="2025"></el-option>
 | 
				
			||||||
 | 
					          </el-select>
 | 
				
			||||||
 | 
					        </el-form-item>
 | 
				
			||||||
 | 
					      </el-form>
 | 
				
			||||||
 | 
					      <div class="query-btn" @click="queryBtn">确定</div>
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					    <div class="forwardDemand-box">
 | 
				
			||||||
 | 
					      <div class="left-box">
 | 
				
			||||||
 | 
					        <div class="border-out">
 | 
				
			||||||
 | 
					          <div class="border-inner">
 | 
				
			||||||
 | 
					            <div class="left-top-title">需求计划分析</div>
 | 
				
			||||||
 | 
					            <!-- 表格 -->
 | 
				
			||||||
 | 
					            <div class="left-top-box">
 | 
				
			||||||
 | 
					              <el-row class="sum-border">
 | 
				
			||||||
 | 
					                <el-col :span="7" class="col-right-border">需求总量</el-col>
 | 
				
			||||||
 | 
					                <el-col :span="17" class="col-right-border-text green"
 | 
				
			||||||
 | 
					                  >{{ rowObj.xq }}吨</el-col
 | 
				
			||||||
 | 
					                >
 | 
				
			||||||
 | 
					              </el-row>
 | 
				
			||||||
 | 
					              <vue-seamless-scroll
 | 
				
			||||||
 | 
					                :data="tableList"
 | 
				
			||||||
 | 
					                :class-option="classOption"
 | 
				
			||||||
 | 
					                class="warp-box"
 | 
				
			||||||
 | 
					                :class="
 | 
				
			||||||
 | 
					                  tableList.length == 1
 | 
				
			||||||
 | 
					                    ? 'warp-box-1'
 | 
				
			||||||
 | 
					                    : tableList.length == 2
 | 
				
			||||||
 | 
					                    ? 'warp-box-2'
 | 
				
			||||||
 | 
					                    : ''
 | 
				
			||||||
 | 
					                "
 | 
				
			||||||
 | 
					              >
 | 
				
			||||||
 | 
					                <el-row
 | 
				
			||||||
 | 
					                  class="row-border"
 | 
				
			||||||
 | 
					                  v-for="(item, index) in tableList"
 | 
				
			||||||
 | 
					                  :key="index"
 | 
				
			||||||
 | 
					                  ref="refHeight"
 | 
				
			||||||
 | 
					                >
 | 
				
			||||||
 | 
					                  <el-col :span="3" class="col-right-border">船号</el-col>
 | 
				
			||||||
 | 
					                  <el-col :span="4" class="col-right-border">{{
 | 
				
			||||||
 | 
					                    item.dcCh
 | 
				
			||||||
 | 
					                  }}</el-col>
 | 
				
			||||||
 | 
					                  <el-col :span="4" class="col-right-border">批次数量</el-col>
 | 
				
			||||||
 | 
					                  <el-col :span="5" class="col-right-border"
 | 
				
			||||||
 | 
					                    >{{ item.pcsl }} 吨</el-col
 | 
				
			||||||
 | 
					                  >
 | 
				
			||||||
 | 
					                  <el-col :span="3" class="col-right-border">重量</el-col>
 | 
				
			||||||
 | 
					                  <el-col :span="5" class="col-right-border-text"
 | 
				
			||||||
 | 
					                    >{{ item.zl }} 吨</el-col
 | 
				
			||||||
 | 
					                  >
 | 
				
			||||||
 | 
					                </el-row>
 | 
				
			||||||
 | 
					              </vue-seamless-scroll>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					            <!-- 需求、计划柱状图 -->
 | 
				
			||||||
 | 
					            <div class="left-bottom-box">
 | 
				
			||||||
 | 
					              <div id="TableBar" class="TableBar"></div>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					          </div>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					      </div>
 | 
				
			||||||
 | 
					      <div class="right-box">
 | 
				
			||||||
 | 
					        <div class="border-out">
 | 
				
			||||||
 | 
					          <div class="border-inner">
 | 
				
			||||||
 | 
					            <div class="right-top-title">需求与生产分析</div>
 | 
				
			||||||
 | 
					            <div class="right-top-box">
 | 
				
			||||||
 | 
					              <div class="table-text">
 | 
				
			||||||
 | 
					                <div>
 | 
				
			||||||
 | 
					                  <span class="span1">前方需求</span>
 | 
				
			||||||
 | 
					                  <span class="span2-orage">{{ xqzlSum }}吨</span>
 | 
				
			||||||
 | 
					                </div>
 | 
				
			||||||
 | 
					                <div>
 | 
				
			||||||
 | 
					                  <span class="span1">月度计划</span>
 | 
				
			||||||
 | 
					                  <span class="span2-orage">{{ jhzlSum }}吨</span>
 | 
				
			||||||
 | 
					                </div>
 | 
				
			||||||
 | 
					                <div>
 | 
				
			||||||
 | 
					                  <span class="span1">完工总量</span>
 | 
				
			||||||
 | 
					                  <span class="span2-red">{{ wczlSum }}吨</span>
 | 
				
			||||||
 | 
					                </div>
 | 
				
			||||||
 | 
					                <div>
 | 
				
			||||||
 | 
					                  <span class="span1">需求与计划百分比</span>
 | 
				
			||||||
 | 
					                  <span class="span2-green">{{
 | 
				
			||||||
 | 
					                    xqzlSum && jhzlSum
 | 
				
			||||||
 | 
					                      ? ((jhzlSum / xqzlSum) * 100).toFixed(2) + "%"
 | 
				
			||||||
 | 
					                      : "0%"
 | 
				
			||||||
 | 
					                  }}</span>
 | 
				
			||||||
 | 
					                </div>
 | 
				
			||||||
 | 
					                <div>
 | 
				
			||||||
 | 
					                  <span class="span1">需求与完成百分比</span>
 | 
				
			||||||
 | 
					                  <span class="span2-green">{{
 | 
				
			||||||
 | 
					                    xqzlSum && wczlSum
 | 
				
			||||||
 | 
					                      ? ((wczlSum / xqzlSum) * 100).toFixed(2) + "%"
 | 
				
			||||||
 | 
					                      : "0%"
 | 
				
			||||||
 | 
					                  }}</span>
 | 
				
			||||||
 | 
					                </div>
 | 
				
			||||||
 | 
					              </div>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					            <!-- 需求、计划、完成柱状图 -->
 | 
				
			||||||
 | 
					            <div class="right-bottom-box">
 | 
				
			||||||
 | 
					              <div id="ShipBar" class="ShipBar"></div>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					          </div>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					      </div>
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					  </div>
 | 
				
			||||||
 | 
					</template>
 | 
				
			||||||
 | 
					<script>
 | 
				
			||||||
 | 
					import { qfxqTable, qfxqWc } from "@/api/forwardDemand";
 | 
				
			||||||
 | 
					import VueSeamlessScroll from "vue-seamless-scroll";
 | 
				
			||||||
 | 
					export default {
 | 
				
			||||||
 | 
					  name: "ForwardDemand",
 | 
				
			||||||
 | 
					  components: {
 | 
				
			||||||
 | 
					    VueSeamlessScroll,
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  data() {
 | 
				
			||||||
 | 
					    return {
 | 
				
			||||||
 | 
					      formData: {
 | 
				
			||||||
 | 
					        year: 2024,
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      // 1.前方需求汇总表
 | 
				
			||||||
 | 
					      tableList: [],
 | 
				
			||||||
 | 
					      classOption: {
 | 
				
			||||||
 | 
					        step: 1,
 | 
				
			||||||
 | 
					        singleHeight: 0,
 | 
				
			||||||
 | 
					        waitTime: 500,
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      // 3.	需求与生产分析文本
 | 
				
			||||||
 | 
					      rowObj: {},
 | 
				
			||||||
 | 
					      xqzlSum: 0,
 | 
				
			||||||
 | 
					      jhzlSum: 0,
 | 
				
			||||||
 | 
					      wczlSum: 0,
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  mounted() {
 | 
				
			||||||
 | 
					    this.queryBtn();
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  methods: {
 | 
				
			||||||
 | 
					    // 根据年份查询
 | 
				
			||||||
 | 
					    queryBtn() {
 | 
				
			||||||
 | 
					      this.qfxqTable();
 | 
				
			||||||
 | 
					      this.qfxqWc();
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    // 1.前方需求汇总表
 | 
				
			||||||
 | 
					    qfxqTable() {
 | 
				
			||||||
 | 
					      qfxqTable({
 | 
				
			||||||
 | 
					        nf: this.formData.year,
 | 
				
			||||||
 | 
					      }).then((res) => {
 | 
				
			||||||
 | 
					        this.tableList = res.data.detail;
 | 
				
			||||||
 | 
					        this.rowObj = res.data;
 | 
				
			||||||
 | 
					        this.$nextTick(() => {
 | 
				
			||||||
 | 
					          const elementHeight = this.$refs.refHeight;
 | 
				
			||||||
 | 
					          elementHeight.forEach((li, index) => {
 | 
				
			||||||
 | 
					            this.classOption.singleHeight = li.$el.offsetHeight;
 | 
				
			||||||
 | 
					          });
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    // 2.4.柱状图 3.计算
 | 
				
			||||||
 | 
					    qfxqWc() {
 | 
				
			||||||
 | 
					      qfxqWc({
 | 
				
			||||||
 | 
					        nf: this.formData.year,
 | 
				
			||||||
 | 
					      }).then((res) => {
 | 
				
			||||||
 | 
					        let dataX = [];
 | 
				
			||||||
 | 
					        let dataJhzlY = [];
 | 
				
			||||||
 | 
					        let dataWczlY = [];
 | 
				
			||||||
 | 
					        let dataXqzlY = [];
 | 
				
			||||||
 | 
					        this.xqzlSum = 0;
 | 
				
			||||||
 | 
					        this.jhzlSum = 0;
 | 
				
			||||||
 | 
					        this.wczlSum = 0;
 | 
				
			||||||
 | 
					        res.data.forEach((item) => {
 | 
				
			||||||
 | 
					          dataX.push(item.dc_ch);
 | 
				
			||||||
 | 
					          dataJhzlY.push(item.jhzl);
 | 
				
			||||||
 | 
					          dataWczlY.push(item.wczl);
 | 
				
			||||||
 | 
					          dataXqzlY.push(item.xqzl);
 | 
				
			||||||
 | 
					          this.xqzlSum += item.xqzl;
 | 
				
			||||||
 | 
					          this.jhzlSum += item.jhzl;
 | 
				
			||||||
 | 
					          this.wczlSum += item.wczl;
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // 按船只划分重量柱状图
 | 
				
			||||||
 | 
					        this.TableBar(dataX, dataXqzlY, dataJhzlY);
 | 
				
			||||||
 | 
					        // 按船只月度计划--完成总量柱状图
 | 
				
			||||||
 | 
					        this.ShipBar(dataX, dataXqzlY, dataJhzlY, dataWczlY);
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    TableBar(dataX, dataXqzlY, dataJhzlY) {
 | 
				
			||||||
 | 
					      var myChart = this.$echarts.init(document.getElementById("TableBar"));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      var option = {
 | 
				
			||||||
 | 
					        tooltip: {
 | 
				
			||||||
 | 
					          trigger: "axis",
 | 
				
			||||||
 | 
					          axisPointer: {
 | 
				
			||||||
 | 
					            type: "shadow",
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        legend: {
 | 
				
			||||||
 | 
					          top: "",
 | 
				
			||||||
 | 
					          textStyle: {
 | 
				
			||||||
 | 
					            color: "#e9ebee",
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					          right: "2%",
 | 
				
			||||||
 | 
					          orient: "vertical",
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        grid: {
 | 
				
			||||||
 | 
					          left: "2%",
 | 
				
			||||||
 | 
					          right: "4%",
 | 
				
			||||||
 | 
					          top: "2%",
 | 
				
			||||||
 | 
					          bottom: "3%",
 | 
				
			||||||
 | 
					          containLabel: true,
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        xAxis: [
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            type: "category",
 | 
				
			||||||
 | 
					            data: dataX,
 | 
				
			||||||
 | 
					            splitLine: {
 | 
				
			||||||
 | 
					              show: false,
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            axisLabel: {
 | 
				
			||||||
 | 
					              color: "#e4e4e4",
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        yAxis: [
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            type: "value",
 | 
				
			||||||
 | 
					            splitLine: {
 | 
				
			||||||
 | 
					              show: false,
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            axisLabel: {
 | 
				
			||||||
 | 
					              color: "#e4e4e4",
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        series: [
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            name: "需求重量",
 | 
				
			||||||
 | 
					            type: "bar",
 | 
				
			||||||
 | 
					            data: dataXqzlY,
 | 
				
			||||||
 | 
					            itemStyle: {
 | 
				
			||||||
 | 
					              color: "#5470c6",
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            name: "计划重量",
 | 
				
			||||||
 | 
					            type: "bar",
 | 
				
			||||||
 | 
					            data: dataJhzlY,
 | 
				
			||||||
 | 
					            itemStyle: {
 | 
				
			||||||
 | 
					              color: "#fac858",
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					      };
 | 
				
			||||||
 | 
					      myChart.setOption(option);
 | 
				
			||||||
 | 
					      window.addEventListener("resize", () => {
 | 
				
			||||||
 | 
					        myChart.resize();
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    ShipBar(dataX, dataXqzlY, dataJhzlY, dataWczlY) {
 | 
				
			||||||
 | 
					      var myChart = this.$echarts.init(document.getElementById("ShipBar"));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      var option = {
 | 
				
			||||||
 | 
					        title: {
 | 
				
			||||||
 | 
					          text: "需求和计划以及完工重量分析",
 | 
				
			||||||
 | 
					          left: "center",
 | 
				
			||||||
 | 
					          textStyle: {
 | 
				
			||||||
 | 
					            color: "#fff",
 | 
				
			||||||
 | 
					            fontSize: 20,
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					          padding: [40, 0, 0, 0],
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        tooltip: {
 | 
				
			||||||
 | 
					          trigger: "axis",
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        legend: {
 | 
				
			||||||
 | 
					          top: "15%",
 | 
				
			||||||
 | 
					          textStyle: {
 | 
				
			||||||
 | 
					            color: "#e9ebee",
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					          right: "2%",
 | 
				
			||||||
 | 
					          orient: "vertical",
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        grid: {
 | 
				
			||||||
 | 
					          top: "15%",
 | 
				
			||||||
 | 
					          left: "2%",
 | 
				
			||||||
 | 
					          right: "4%",
 | 
				
			||||||
 | 
					          bottom: "1%",
 | 
				
			||||||
 | 
					          containLabel: true,
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        calculable: true,
 | 
				
			||||||
 | 
					        xAxis: [
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            type: "category",
 | 
				
			||||||
 | 
					            data: dataX,
 | 
				
			||||||
 | 
					            axisLabel: {
 | 
				
			||||||
 | 
					              color: "#e4e4e4",
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            nameTextStyle: {
 | 
				
			||||||
 | 
					              color: "#e4e4e4",
 | 
				
			||||||
 | 
					              fontSize: 12,
 | 
				
			||||||
 | 
					              padding: [0, 0, 0, 0],
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        yAxis: [
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            type: "value",
 | 
				
			||||||
 | 
					            splitLine: {
 | 
				
			||||||
 | 
					              show: false,
 | 
				
			||||||
 | 
					              lineStyle: {
 | 
				
			||||||
 | 
					                color: "#064585",
 | 
				
			||||||
 | 
					                // type: "dashed"
 | 
				
			||||||
 | 
					              },
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            axisLabel: {
 | 
				
			||||||
 | 
					              color: "#e4e4e4",
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            nameTextStyle: {
 | 
				
			||||||
 | 
					              color: "#e4e4e4",
 | 
				
			||||||
 | 
					              fontSize: 12,
 | 
				
			||||||
 | 
					              padding: [0, 0, 10, 0],
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        series: [
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            name: "需求重量",
 | 
				
			||||||
 | 
					            type: "bar",
 | 
				
			||||||
 | 
					            data: dataXqzlY,
 | 
				
			||||||
 | 
					            itemStyle: {
 | 
				
			||||||
 | 
					              color: "#5470c6",
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            markPoint: {
 | 
				
			||||||
 | 
					              data: [
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                  type: "max",
 | 
				
			||||||
 | 
					                  name: "最大值",
 | 
				
			||||||
 | 
					                  label: {
 | 
				
			||||||
 | 
					                    show: true,
 | 
				
			||||||
 | 
					                    color: "#fff",
 | 
				
			||||||
 | 
					                  },
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                  type: "min",
 | 
				
			||||||
 | 
					                  name: "最小值",
 | 
				
			||||||
 | 
					                  label: {
 | 
				
			||||||
 | 
					                    show: true,
 | 
				
			||||||
 | 
					                    color: "#fff",
 | 
				
			||||||
 | 
					                  },
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					              ],
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            markLine: {
 | 
				
			||||||
 | 
					              data: [{ type: "average", name: "平均值" }],
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            name: "计划重量",
 | 
				
			||||||
 | 
					            type: "bar",
 | 
				
			||||||
 | 
					            data: dataJhzlY,
 | 
				
			||||||
 | 
					            itemStyle: {
 | 
				
			||||||
 | 
					              color: "#fac858",
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            markPoint: {
 | 
				
			||||||
 | 
					              data: [
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                  type: "max",
 | 
				
			||||||
 | 
					                  name: "最大值",
 | 
				
			||||||
 | 
					                  label: {
 | 
				
			||||||
 | 
					                    show: true,
 | 
				
			||||||
 | 
					                    color: "#fff",
 | 
				
			||||||
 | 
					                  },
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                  type: "min",
 | 
				
			||||||
 | 
					                  name: "最小值",
 | 
				
			||||||
 | 
					                  label: {
 | 
				
			||||||
 | 
					                    show: true,
 | 
				
			||||||
 | 
					                    color: "#fff",
 | 
				
			||||||
 | 
					                  },
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					              ],
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            markLine: {
 | 
				
			||||||
 | 
					              data: [{ type: "average", name: "平均值" }],
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            name: "完工重量",
 | 
				
			||||||
 | 
					            type: "bar",
 | 
				
			||||||
 | 
					            data: dataWczlY,
 | 
				
			||||||
 | 
					            itemStyle: {
 | 
				
			||||||
 | 
					              color: "#91cc75",
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            markPoint: {
 | 
				
			||||||
 | 
					              data: [
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                  type: "max",
 | 
				
			||||||
 | 
					                  name: "最大值",
 | 
				
			||||||
 | 
					                  label: {
 | 
				
			||||||
 | 
					                    show: true,
 | 
				
			||||||
 | 
					                    color: "#fff",
 | 
				
			||||||
 | 
					                  },
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                  type: "min",
 | 
				
			||||||
 | 
					                  name: "最小值",
 | 
				
			||||||
 | 
					                  label: {
 | 
				
			||||||
 | 
					                    show: true,
 | 
				
			||||||
 | 
					                    color: "#fff",
 | 
				
			||||||
 | 
					                  },
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					              ],
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            markLine: {
 | 
				
			||||||
 | 
					              data: [{ type: "average", name: "平均值" }],
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					      };
 | 
				
			||||||
 | 
					      myChart.setOption(option);
 | 
				
			||||||
 | 
					      window.addEventListener("resize", () => {
 | 
				
			||||||
 | 
					        myChart.resize();
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					</script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<style scoped lang="scss">
 | 
				
			||||||
 | 
					.forwardDemand-container {
 | 
				
			||||||
 | 
					  margin-top: 10px;
 | 
				
			||||||
 | 
					  padding-left: 5px;
 | 
				
			||||||
 | 
					  padding-right: 5px;
 | 
				
			||||||
 | 
					  .forwardDemand-box {
 | 
				
			||||||
 | 
					    display: flex;
 | 
				
			||||||
 | 
					    align-items: stretch;
 | 
				
			||||||
 | 
					    height: calc(100vh - 105px);
 | 
				
			||||||
 | 
					    // 需求计划分析
 | 
				
			||||||
 | 
					    .left-box {
 | 
				
			||||||
 | 
					      width: 30%;
 | 
				
			||||||
 | 
					      height: 100%;
 | 
				
			||||||
 | 
					      margin-right: 5px;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      .left-top-title {
 | 
				
			||||||
 | 
					        width: 32%;
 | 
				
			||||||
 | 
					        height: 22px;
 | 
				
			||||||
 | 
					        background-image: url("@/assets/image/tit01s.png");
 | 
				
			||||||
 | 
					        background-size: 100% 100%;
 | 
				
			||||||
 | 
					        background-repeat: no-repeat;
 | 
				
			||||||
 | 
					        margin: 0 auto;
 | 
				
			||||||
 | 
					        font-size: 14px;
 | 
				
			||||||
 | 
					        color: #ffffff;
 | 
				
			||||||
 | 
					        text-align: center;
 | 
				
			||||||
 | 
					        margin: 0 auto;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      .left-top-box {
 | 
				
			||||||
 | 
					        height: 22.1%;
 | 
				
			||||||
 | 
					        margin: 3% 2% 2% 2%;
 | 
				
			||||||
 | 
					        .sum-border {
 | 
				
			||||||
 | 
					          border: 1px solid #3490ba;
 | 
				
			||||||
 | 
					          color: #fff;
 | 
				
			||||||
 | 
					          font-size: 0.8rem;
 | 
				
			||||||
 | 
					          .col-right-border {
 | 
				
			||||||
 | 
					            height: 2.5rem;
 | 
				
			||||||
 | 
					            line-height: 2.5rem;
 | 
				
			||||||
 | 
					            text-align: center;
 | 
				
			||||||
 | 
					            border-right: 1px solid #3490ba;
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					          .col-right-border-text {
 | 
				
			||||||
 | 
					            height: 2.5rem;
 | 
				
			||||||
 | 
					            line-height: 2.5rem;
 | 
				
			||||||
 | 
					            text-align: center;
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					          .green {
 | 
				
			||||||
 | 
					            color: #4cae4c;
 | 
				
			||||||
 | 
					            font-size: 1.25rem;
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        .warp-box {
 | 
				
			||||||
 | 
					          height: 6rem;
 | 
				
			||||||
 | 
					          overflow: hidden;
 | 
				
			||||||
 | 
					          border-left: 1px solid #3490ba;
 | 
				
			||||||
 | 
					          border-right: 1px solid #3490ba;
 | 
				
			||||||
 | 
					          border-bottom: 1px solid #3490ba;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        .warp-box-1 {
 | 
				
			||||||
 | 
					          height: 2rem;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        .warp-box-2 {
 | 
				
			||||||
 | 
					          height: 4rem;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        // .warp-box-3 {
 | 
				
			||||||
 | 
					        //   height: 6rem;
 | 
				
			||||||
 | 
					        // }
 | 
				
			||||||
 | 
					        // .warp-box-4 {
 | 
				
			||||||
 | 
					        //   height: 8rem;
 | 
				
			||||||
 | 
					        // }
 | 
				
			||||||
 | 
					        .row-border {
 | 
				
			||||||
 | 
					          color: #fff;
 | 
				
			||||||
 | 
					          text-align: left;
 | 
				
			||||||
 | 
					          font-size: 0.8rem;
 | 
				
			||||||
 | 
					          .col-right-border {
 | 
				
			||||||
 | 
					            height: 2rem;
 | 
				
			||||||
 | 
					            line-height: 2rem;
 | 
				
			||||||
 | 
					            text-align: center;
 | 
				
			||||||
 | 
					            border-right: 1px solid #3490ba;
 | 
				
			||||||
 | 
					            border-top: 1px solid #3490ba;
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					          .col-right-border-text {
 | 
				
			||||||
 | 
					            height: 2rem;
 | 
				
			||||||
 | 
					            line-height: 2rem;
 | 
				
			||||||
 | 
					            text-align: center;
 | 
				
			||||||
 | 
					            border-top: 1px solid #3490ba;
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      .left-bottom-box {
 | 
				
			||||||
 | 
					        height: 71%;
 | 
				
			||||||
 | 
					        .TableBar {
 | 
				
			||||||
 | 
					          width: 100%;
 | 
				
			||||||
 | 
					          height: 100%;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    .right-box {
 | 
				
			||||||
 | 
					      width: 70%;
 | 
				
			||||||
 | 
					      height: 100%;
 | 
				
			||||||
 | 
					      .right-top-title {
 | 
				
			||||||
 | 
					        width: 32%;
 | 
				
			||||||
 | 
					        height: 24px;
 | 
				
			||||||
 | 
					        background-image: url("@/assets/image/tit01s.png");
 | 
				
			||||||
 | 
					        background-size: 100% 100%;
 | 
				
			||||||
 | 
					        background-repeat: no-repeat;
 | 
				
			||||||
 | 
					        margin: 0 auto;
 | 
				
			||||||
 | 
					        font-size: 14px;
 | 
				
			||||||
 | 
					        color: #ffffff;
 | 
				
			||||||
 | 
					        text-align: center;
 | 
				
			||||||
 | 
					        margin: 0 auto;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      // 需求与生产分析
 | 
				
			||||||
 | 
					      .right-top-box {
 | 
				
			||||||
 | 
					        height: 8%;
 | 
				
			||||||
 | 
					        padding: 1% 1% 2% 1%;
 | 
				
			||||||
 | 
					        .table-text {
 | 
				
			||||||
 | 
					          height: 100%;
 | 
				
			||||||
 | 
					          border: 1px solid #5bc0de;
 | 
				
			||||||
 | 
					          display: flex;
 | 
				
			||||||
 | 
					          align-items: center;
 | 
				
			||||||
 | 
					          justify-content: space-between;
 | 
				
			||||||
 | 
					          padding: 0 10px;
 | 
				
			||||||
 | 
					          .span1 {
 | 
				
			||||||
 | 
					            color: #ffffff;
 | 
				
			||||||
 | 
					            font-size: 1.25rem;
 | 
				
			||||||
 | 
					            margin-right: 0.5rem;
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					          .span2-orage {
 | 
				
			||||||
 | 
					            font-size: 1.25rem;
 | 
				
			||||||
 | 
					            color: #feb602;
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					          .span2-green {
 | 
				
			||||||
 | 
					            font-size: 1.25rem;
 | 
				
			||||||
 | 
					            color: #4cae4c;
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					          .span2-red {
 | 
				
			||||||
 | 
					            font-size: 1.25rem;
 | 
				
			||||||
 | 
					            color: #e9230d;
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      .right-bottom-box {
 | 
				
			||||||
 | 
					        height: 82%;
 | 
				
			||||||
 | 
					        .ShipBar {
 | 
				
			||||||
 | 
					          width: 100%;
 | 
				
			||||||
 | 
					          height: 100%;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  // 共用
 | 
				
			||||||
 | 
					  .border-out {
 | 
				
			||||||
 | 
					    width: 100%;
 | 
				
			||||||
 | 
					    height: 100%;
 | 
				
			||||||
 | 
					    border-radius: 10px;
 | 
				
			||||||
 | 
					    border: 1px #0174f5 solid;
 | 
				
			||||||
 | 
					    padding: 1px;
 | 
				
			||||||
 | 
					    box-sizing: border-box;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  .border-inner {
 | 
				
			||||||
 | 
					    width: 100%;
 | 
				
			||||||
 | 
					    height: 100%;
 | 
				
			||||||
 | 
					    box-sizing: border-box;
 | 
				
			||||||
 | 
					    border: 2px solid #016ae0;
 | 
				
			||||||
 | 
					    border-radius: 10px;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  .box-top {
 | 
				
			||||||
 | 
					    margin-top: 5px;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  .border-out {
 | 
				
			||||||
 | 
					    height: 100%;
 | 
				
			||||||
 | 
					    .border-inner {
 | 
				
			||||||
 | 
					      height: 100%;
 | 
				
			||||||
 | 
					      background-color: rgba(2, 8, 23, 0.1);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					</style>
 | 
				
			||||||
@ -0,0 +1,981 @@
 | 
				
			|||||||
 | 
					<template>
 | 
				
			||||||
 | 
					  <!-- 中日程分析 -->
 | 
				
			||||||
 | 
					  <div class="midSchedule-container">
 | 
				
			||||||
 | 
					    <!-- 筛选 -->
 | 
				
			||||||
 | 
					    <div class="formData-box">
 | 
				
			||||||
 | 
					      <el-form ref="form" :model="formData" label-width="90px">
 | 
				
			||||||
 | 
					        <el-form-item label="请选择年份" size="mini">
 | 
				
			||||||
 | 
					          <el-select v-model="formData.year" placeholder="">
 | 
				
			||||||
 | 
					            <el-option label="2024" :value="2024"></el-option>
 | 
				
			||||||
 | 
					            <el-option label="2025" :value="2025"></el-option>
 | 
				
			||||||
 | 
					          </el-select>
 | 
				
			||||||
 | 
					        </el-form-item>
 | 
				
			||||||
 | 
					      </el-form>
 | 
				
			||||||
 | 
					      <div class="query-btn" @click="queryBtn">确定</div>
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					    <div class="midSchedule-box">
 | 
				
			||||||
 | 
					      <div class="left-box">
 | 
				
			||||||
 | 
					        <div class="border-out">
 | 
				
			||||||
 | 
					          <div class="border-inner">
 | 
				
			||||||
 | 
					            <!-- 线标分析-折线图 -->
 | 
				
			||||||
 | 
					            <div class="left-top-box">
 | 
				
			||||||
 | 
					              <div class="left-top-title">中日程汇总表</div>
 | 
				
			||||||
 | 
					              <table class="table-sum">
 | 
				
			||||||
 | 
					                <tr>
 | 
				
			||||||
 | 
					                  <td class="table-sum-title">图纸数量</td>
 | 
				
			||||||
 | 
					                  <td class="table-sum-text">
 | 
				
			||||||
 | 
					                    {{ tableSumObj.tzsl ? tableSumObj.tzsl : 0 }}张
 | 
				
			||||||
 | 
					                  </td>
 | 
				
			||||||
 | 
					                  <td class="table-sum-title">来图数量</td>
 | 
				
			||||||
 | 
					                  <td class="table-sum-text">
 | 
				
			||||||
 | 
					                    {{ tableSumObj.ltsl ? tableSumObj.ltsl : 0 }}张
 | 
				
			||||||
 | 
					                  </td>
 | 
				
			||||||
 | 
					                </tr>
 | 
				
			||||||
 | 
					                <tr>
 | 
				
			||||||
 | 
					                  <td class="table-sum-title">需求重量</td>
 | 
				
			||||||
 | 
					                  <td class="table-sum-text">
 | 
				
			||||||
 | 
					                    {{ tableSumObj.xqzl ? tableSumObj.xqzl : 0 }}吨
 | 
				
			||||||
 | 
					                  </td>
 | 
				
			||||||
 | 
					                  <td class="table-sum-title">订货清单重量</td>
 | 
				
			||||||
 | 
					                  <td class="table-sum-text">
 | 
				
			||||||
 | 
					                    {{ tableSumObj.dhzl ? tableSumObj.dhzl : 0 }}吨
 | 
				
			||||||
 | 
					                  </td>
 | 
				
			||||||
 | 
					                </tr>
 | 
				
			||||||
 | 
					                <tr>
 | 
				
			||||||
 | 
					                  <td class="table-sum-title">月度计划重量</td>
 | 
				
			||||||
 | 
					                  <td class="table-sum-text">
 | 
				
			||||||
 | 
					                    {{ tableSumObj.jhzl ? tableSumObj.jhzl : 0 }}吨
 | 
				
			||||||
 | 
					                  </td>
 | 
				
			||||||
 | 
					                  <td class="table-sum-title">完成重量</td>
 | 
				
			||||||
 | 
					                  <td class="table-sum-text">
 | 
				
			||||||
 | 
					                    {{ tableSumObj.wczl ? tableSumObj.wczl : 0 }}吨
 | 
				
			||||||
 | 
					                  </td>
 | 
				
			||||||
 | 
					                </tr>
 | 
				
			||||||
 | 
					              </table>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					            <div class="left-bottom-box">
 | 
				
			||||||
 | 
					              <table class="table-sum">
 | 
				
			||||||
 | 
					                <tr v-for="(item, index) in tableSumObj.detail" :key="index">
 | 
				
			||||||
 | 
					                  <td class="table-sum-title">船号</td>
 | 
				
			||||||
 | 
					                  <td class="table-sum-text">
 | 
				
			||||||
 | 
					                    {{ item.dcCh }}
 | 
				
			||||||
 | 
					                  </td>
 | 
				
			||||||
 | 
					                  <td class="table-sum-title">批次数量</td>
 | 
				
			||||||
 | 
					                  <td class="table-sum-text">
 | 
				
			||||||
 | 
					                    {{ item.pcsl ? item.pcsl : 0 }}张
 | 
				
			||||||
 | 
					                  </td>
 | 
				
			||||||
 | 
					                </tr>
 | 
				
			||||||
 | 
					              </table>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					          </div>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					      </div>
 | 
				
			||||||
 | 
					      <div class="right-box">
 | 
				
			||||||
 | 
					        <div class="right-top-box">
 | 
				
			||||||
 | 
					          <div class="border-out">
 | 
				
			||||||
 | 
					            <div class="border-inner">
 | 
				
			||||||
 | 
					              <!-- 柱状图 -->
 | 
				
			||||||
 | 
					              <div class="right-top-title">中日程数据分析</div>
 | 
				
			||||||
 | 
					              <el-row class="row">
 | 
				
			||||||
 | 
					                <el-col :span="12">
 | 
				
			||||||
 | 
					                  <div id="DrawingBar" class="drawingBar"></div>
 | 
				
			||||||
 | 
					                </el-col>
 | 
				
			||||||
 | 
					                <el-col :span="12">
 | 
				
			||||||
 | 
					                  <div id="ForwardDemandBar" class="forwardDemandBar"></div
 | 
				
			||||||
 | 
					                ></el-col>
 | 
				
			||||||
 | 
					              </el-row>
 | 
				
			||||||
 | 
					              <el-row class="row">
 | 
				
			||||||
 | 
					                <el-col :span="12">
 | 
				
			||||||
 | 
					                  <div id="MonthlyPlanBar" class="monthlyPlanBar"></div
 | 
				
			||||||
 | 
					                ></el-col>
 | 
				
			||||||
 | 
					                <el-col :span="12"
 | 
				
			||||||
 | 
					                  ><div id="FinishBar" class="finishBar"></div>
 | 
				
			||||||
 | 
					                </el-col>
 | 
				
			||||||
 | 
					              </el-row>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					          </div>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					        <div class="right-bottom-box">
 | 
				
			||||||
 | 
					          <div class="border-out">
 | 
				
			||||||
 | 
					            <div class="border-inner">
 | 
				
			||||||
 | 
					              <!-- 饼图 -->
 | 
				
			||||||
 | 
					              <div class="right-bottom-title">中日程数据分析</div>
 | 
				
			||||||
 | 
					              <el-row class="row">
 | 
				
			||||||
 | 
					                <el-col :span="6">
 | 
				
			||||||
 | 
					                  <div id="DrawingPie" class="drawingPie"></div>
 | 
				
			||||||
 | 
					                </el-col>
 | 
				
			||||||
 | 
					                <el-col :span="6">
 | 
				
			||||||
 | 
					                  <div id="ForwardDemandPie" class="forwardDemandPie"></div>
 | 
				
			||||||
 | 
					                </el-col>
 | 
				
			||||||
 | 
					                <el-col :span="6">
 | 
				
			||||||
 | 
					                  <div id="MonthlyPlanPie" class="monthlyPlanPie"></div>
 | 
				
			||||||
 | 
					                </el-col>
 | 
				
			||||||
 | 
					                <el-col :span="6">
 | 
				
			||||||
 | 
					                  <div id="FinishPie" class="finishPie"></div
 | 
				
			||||||
 | 
					                ></el-col>
 | 
				
			||||||
 | 
					              </el-row>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					          </div>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					      </div>
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					  </div>
 | 
				
			||||||
 | 
					</template>
 | 
				
			||||||
 | 
					<script>
 | 
				
			||||||
 | 
					import { qfxqTable } from "@/api/midSchedule";
 | 
				
			||||||
 | 
					export default {
 | 
				
			||||||
 | 
					  name: "MidSchedule",
 | 
				
			||||||
 | 
					  data() {
 | 
				
			||||||
 | 
					    return {
 | 
				
			||||||
 | 
					      formData: {
 | 
				
			||||||
 | 
					        year: 2024,
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      tableSumList: [],
 | 
				
			||||||
 | 
					      tableSumObj: {},
 | 
				
			||||||
 | 
					      xbjhList: [],
 | 
				
			||||||
 | 
					      ydjhList: [],
 | 
				
			||||||
 | 
					      monthList: [
 | 
				
			||||||
 | 
					        "1月",
 | 
				
			||||||
 | 
					        "2月",
 | 
				
			||||||
 | 
					        "3月",
 | 
				
			||||||
 | 
					        "4月",
 | 
				
			||||||
 | 
					        "5月",
 | 
				
			||||||
 | 
					        "6月",
 | 
				
			||||||
 | 
					        "7月",
 | 
				
			||||||
 | 
					        "8月",
 | 
				
			||||||
 | 
					        "9月",
 | 
				
			||||||
 | 
					        "10月",
 | 
				
			||||||
 | 
					        "11月",
 | 
				
			||||||
 | 
					        "12月",
 | 
				
			||||||
 | 
					      ],
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  mounted() {
 | 
				
			||||||
 | 
					    this.queryBtn();
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  methods: {
 | 
				
			||||||
 | 
					    // 根据年份查询
 | 
				
			||||||
 | 
					    queryBtn() {
 | 
				
			||||||
 | 
					      this.qfxqTable();
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    qfxqTable() {
 | 
				
			||||||
 | 
					      qfxqTable({
 | 
				
			||||||
 | 
					        nf: this.formData.year,
 | 
				
			||||||
 | 
					      }).then((res) => {
 | 
				
			||||||
 | 
					        this.tableSumObj = res.data;
 | 
				
			||||||
 | 
					        this.DrawingBar();
 | 
				
			||||||
 | 
					        this.ForwardDemandBar();
 | 
				
			||||||
 | 
					        this.MonthlyPlanBar();
 | 
				
			||||||
 | 
					        this.FinishBar();
 | 
				
			||||||
 | 
					        this.DrawingPie(20, 45);
 | 
				
			||||||
 | 
					        this.ForwardDemandPie(20, 45);
 | 
				
			||||||
 | 
					        this.MonthlyPlanPie(20, 45);
 | 
				
			||||||
 | 
					        this.FinishPie(20, 45);
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    DrawingBar() {
 | 
				
			||||||
 | 
					      var myChart = this.$echarts.init(document.getElementById("DrawingBar"));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      var option = {
 | 
				
			||||||
 | 
					        color: ["#2e7cff", "#fc8452"],
 | 
				
			||||||
 | 
					        tooltip: {
 | 
				
			||||||
 | 
					          trigger: "axis",
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        legend: {
 | 
				
			||||||
 | 
					          data: ["线表计划", "月度计划"],
 | 
				
			||||||
 | 
					          top: "5%",
 | 
				
			||||||
 | 
					          textStyle: {
 | 
				
			||||||
 | 
					            color: "#e9ebee",
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        grid: {
 | 
				
			||||||
 | 
					          left: "2%",
 | 
				
			||||||
 | 
					          right: "2%",
 | 
				
			||||||
 | 
					          bottom: "5%",
 | 
				
			||||||
 | 
					          containLabel: true,
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        calculable: true,
 | 
				
			||||||
 | 
					        xAxis: [
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            type: "category",
 | 
				
			||||||
 | 
					            data: this.monthList,
 | 
				
			||||||
 | 
					            axisLabel: {
 | 
				
			||||||
 | 
					              color: "#e4e4e4",
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            nameTextStyle: {
 | 
				
			||||||
 | 
					              color: "#e4e4e4",
 | 
				
			||||||
 | 
					              fontSize: 12,
 | 
				
			||||||
 | 
					              padding: [0, 0, 0, 0],
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        yAxis: [
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            type: "value",
 | 
				
			||||||
 | 
					            splitLine: {
 | 
				
			||||||
 | 
					              show: false,
 | 
				
			||||||
 | 
					              lineStyle: {
 | 
				
			||||||
 | 
					                color: "#064585",
 | 
				
			||||||
 | 
					                // type: "dashed"
 | 
				
			||||||
 | 
					              },
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            axisLabel: {
 | 
				
			||||||
 | 
					              color: "#e4e4e4",
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            nameTextStyle: {
 | 
				
			||||||
 | 
					              color: "#e4e4e4",
 | 
				
			||||||
 | 
					              fontSize: 12,
 | 
				
			||||||
 | 
					              padding: [0, 30, 10, 0],
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        series: [
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            name: "线表计划",
 | 
				
			||||||
 | 
					            type: "bar",
 | 
				
			||||||
 | 
					            data: [34, 45, 67, 34, 45, 34, 12, 67, 34, 12, 34, 12],
 | 
				
			||||||
 | 
					            markPoint: {
 | 
				
			||||||
 | 
					              data: [
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                  type: "max",
 | 
				
			||||||
 | 
					                  name: "Max",
 | 
				
			||||||
 | 
					                  label: {
 | 
				
			||||||
 | 
					                    show: true,
 | 
				
			||||||
 | 
					                    color: "#fff",
 | 
				
			||||||
 | 
					                  },
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                  type: "min",
 | 
				
			||||||
 | 
					                  name: "Min",
 | 
				
			||||||
 | 
					                  label: {
 | 
				
			||||||
 | 
					                    show: true,
 | 
				
			||||||
 | 
					                    color: "#fff",
 | 
				
			||||||
 | 
					                  },
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					              ],
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            name: "月度计划",
 | 
				
			||||||
 | 
					            type: "bar",
 | 
				
			||||||
 | 
					            data: [34, 45, 67, 34, 12, 34, 45, 67, 34, 12, 34, 12],
 | 
				
			||||||
 | 
					            markPoint: {
 | 
				
			||||||
 | 
					              data: [
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                  type: "max",
 | 
				
			||||||
 | 
					                  name: "Max",
 | 
				
			||||||
 | 
					                  label: {
 | 
				
			||||||
 | 
					                    show: true,
 | 
				
			||||||
 | 
					                    color: "#fff",
 | 
				
			||||||
 | 
					                  },
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                  type: "min",
 | 
				
			||||||
 | 
					                  name: "Min",
 | 
				
			||||||
 | 
					                  label: {
 | 
				
			||||||
 | 
					                    show: true,
 | 
				
			||||||
 | 
					                    color: "#fff",
 | 
				
			||||||
 | 
					                  },
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					              ],
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					      };
 | 
				
			||||||
 | 
					      myChart.setOption(option);
 | 
				
			||||||
 | 
					      window.addEventListener("resize", () => {
 | 
				
			||||||
 | 
					        myChart.resize();
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    ForwardDemandBar() {
 | 
				
			||||||
 | 
					      var myChart = this.$echarts.init(
 | 
				
			||||||
 | 
					        document.getElementById("ForwardDemandBar")
 | 
				
			||||||
 | 
					      );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      var option = {
 | 
				
			||||||
 | 
					        color: ["#2e7cff", "#91cd76"],
 | 
				
			||||||
 | 
					        tooltip: {
 | 
				
			||||||
 | 
					          trigger: "axis",
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        legend: {
 | 
				
			||||||
 | 
					          data: ["线表计划", "月度计划"],
 | 
				
			||||||
 | 
					          top: "5%",
 | 
				
			||||||
 | 
					          textStyle: {
 | 
				
			||||||
 | 
					            color: "#e9ebee",
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        grid: {
 | 
				
			||||||
 | 
					          left: "2%",
 | 
				
			||||||
 | 
					          right: "2%",
 | 
				
			||||||
 | 
					          bottom: "5%",
 | 
				
			||||||
 | 
					          containLabel: true,
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        calculable: true,
 | 
				
			||||||
 | 
					        xAxis: [
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            type: "category",
 | 
				
			||||||
 | 
					            data: this.monthList,
 | 
				
			||||||
 | 
					            axisLabel: {
 | 
				
			||||||
 | 
					              color: "#e4e4e4",
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            nameTextStyle: {
 | 
				
			||||||
 | 
					              color: "#e4e4e4",
 | 
				
			||||||
 | 
					              fontSize: 12,
 | 
				
			||||||
 | 
					              padding: [0, 0, 0, 0],
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        yAxis: [
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            type: "value",
 | 
				
			||||||
 | 
					            splitLine: {
 | 
				
			||||||
 | 
					              show: false,
 | 
				
			||||||
 | 
					              lineStyle: {
 | 
				
			||||||
 | 
					                color: "#064585",
 | 
				
			||||||
 | 
					                // type: "dashed"
 | 
				
			||||||
 | 
					              },
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            axisLabel: {
 | 
				
			||||||
 | 
					              color: "#e4e4e4",
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            nameTextStyle: {
 | 
				
			||||||
 | 
					              color: "#e4e4e4",
 | 
				
			||||||
 | 
					              fontSize: 12,
 | 
				
			||||||
 | 
					              padding: [0, 30, 10, 0],
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        series: [
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            name: "线表计划",
 | 
				
			||||||
 | 
					            type: "bar",
 | 
				
			||||||
 | 
					            data: [34, 45, 67, 34, 45, 34, 12, 67, 34, 12, 34, 12],
 | 
				
			||||||
 | 
					            markPoint: {
 | 
				
			||||||
 | 
					              data: [
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                  type: "max",
 | 
				
			||||||
 | 
					                  name: "Max",
 | 
				
			||||||
 | 
					                  label: {
 | 
				
			||||||
 | 
					                    show: true,
 | 
				
			||||||
 | 
					                    color: "#fff",
 | 
				
			||||||
 | 
					                  },
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                  type: "min",
 | 
				
			||||||
 | 
					                  name: "Min",
 | 
				
			||||||
 | 
					                  label: {
 | 
				
			||||||
 | 
					                    show: true,
 | 
				
			||||||
 | 
					                    color: "#fff",
 | 
				
			||||||
 | 
					                  },
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					              ],
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            name: "月度计划",
 | 
				
			||||||
 | 
					            type: "bar",
 | 
				
			||||||
 | 
					            data: [34, 45, 67, 34, 12, 34, 45, 67, 34, 12, 34, 12],
 | 
				
			||||||
 | 
					            markPoint: {
 | 
				
			||||||
 | 
					              data: [
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                  type: "max",
 | 
				
			||||||
 | 
					                  name: "Max",
 | 
				
			||||||
 | 
					                  label: {
 | 
				
			||||||
 | 
					                    show: true,
 | 
				
			||||||
 | 
					                    color: "#fff",
 | 
				
			||||||
 | 
					                  },
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                  type: "min",
 | 
				
			||||||
 | 
					                  name: "Min",
 | 
				
			||||||
 | 
					                  label: {
 | 
				
			||||||
 | 
					                    show: true,
 | 
				
			||||||
 | 
					                    color: "#fff",
 | 
				
			||||||
 | 
					                  },
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					              ],
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					      };
 | 
				
			||||||
 | 
					      myChart.setOption(option);
 | 
				
			||||||
 | 
					      window.addEventListener("resize", () => {
 | 
				
			||||||
 | 
					        myChart.resize();
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    MonthlyPlanBar() {
 | 
				
			||||||
 | 
					      var myChart = this.$echarts.init(
 | 
				
			||||||
 | 
					        document.getElementById("MonthlyPlanBar")
 | 
				
			||||||
 | 
					      );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      var option = {
 | 
				
			||||||
 | 
					        color: ["#2e7cff", "#feb602"],
 | 
				
			||||||
 | 
					        tooltip: {
 | 
				
			||||||
 | 
					          trigger: "axis",
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        legend: {
 | 
				
			||||||
 | 
					          data: ["线表计划", "月度计划"],
 | 
				
			||||||
 | 
					          top: "5%",
 | 
				
			||||||
 | 
					          textStyle: {
 | 
				
			||||||
 | 
					            color: "#e9ebee",
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        grid: {
 | 
				
			||||||
 | 
					          left: "2%",
 | 
				
			||||||
 | 
					          right: "2%",
 | 
				
			||||||
 | 
					          bottom: "5%",
 | 
				
			||||||
 | 
					          containLabel: true,
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        calculable: true,
 | 
				
			||||||
 | 
					        xAxis: [
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            type: "category",
 | 
				
			||||||
 | 
					            data: this.monthList,
 | 
				
			||||||
 | 
					            axisLabel: {
 | 
				
			||||||
 | 
					              color: "#e4e4e4",
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            nameTextStyle: {
 | 
				
			||||||
 | 
					              color: "#e4e4e4",
 | 
				
			||||||
 | 
					              fontSize: 12,
 | 
				
			||||||
 | 
					              padding: [0, 0, 0, 0],
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        yAxis: [
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            type: "value",
 | 
				
			||||||
 | 
					            splitLine: {
 | 
				
			||||||
 | 
					              show: false,
 | 
				
			||||||
 | 
					              lineStyle: {
 | 
				
			||||||
 | 
					                color: "#064585",
 | 
				
			||||||
 | 
					                // type: "dashed"
 | 
				
			||||||
 | 
					              },
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            axisLabel: {
 | 
				
			||||||
 | 
					              color: "#e4e4e4",
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            nameTextStyle: {
 | 
				
			||||||
 | 
					              color: "#e4e4e4",
 | 
				
			||||||
 | 
					              fontSize: 12,
 | 
				
			||||||
 | 
					              padding: [0, 30, 10, 0],
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        series: [
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            name: "线表计划",
 | 
				
			||||||
 | 
					            type: "bar",
 | 
				
			||||||
 | 
					            data: [34, 45, 67, 34, 45, 34, 12, 67, 34, 12, 34, 12],
 | 
				
			||||||
 | 
					            markPoint: {
 | 
				
			||||||
 | 
					              data: [
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                  type: "max",
 | 
				
			||||||
 | 
					                  name: "Max",
 | 
				
			||||||
 | 
					                  label: {
 | 
				
			||||||
 | 
					                    show: true,
 | 
				
			||||||
 | 
					                    color: "#fff",
 | 
				
			||||||
 | 
					                  },
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                  type: "min",
 | 
				
			||||||
 | 
					                  name: "Min",
 | 
				
			||||||
 | 
					                  label: {
 | 
				
			||||||
 | 
					                    show: true,
 | 
				
			||||||
 | 
					                    color: "#fff",
 | 
				
			||||||
 | 
					                  },
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					              ],
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            name: "月度计划",
 | 
				
			||||||
 | 
					            type: "bar",
 | 
				
			||||||
 | 
					            data: [34, 45, 67, 34, 12, 34, 45, 67, 34, 12, 34, 12],
 | 
				
			||||||
 | 
					            markPoint: {
 | 
				
			||||||
 | 
					              data: [
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                  type: "max",
 | 
				
			||||||
 | 
					                  name: "Max",
 | 
				
			||||||
 | 
					                  label: {
 | 
				
			||||||
 | 
					                    show: true,
 | 
				
			||||||
 | 
					                    color: "#fff",
 | 
				
			||||||
 | 
					                  },
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                  type: "min",
 | 
				
			||||||
 | 
					                  name: "Min",
 | 
				
			||||||
 | 
					                  label: {
 | 
				
			||||||
 | 
					                    show: true,
 | 
				
			||||||
 | 
					                    color: "#fff",
 | 
				
			||||||
 | 
					                  },
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					              ],
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					      };
 | 
				
			||||||
 | 
					      myChart.setOption(option);
 | 
				
			||||||
 | 
					      window.addEventListener("resize", () => {
 | 
				
			||||||
 | 
					        myChart.resize();
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    FinishBar() {
 | 
				
			||||||
 | 
					      var myChart = this.$echarts.init(document.getElementById("FinishBar"));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      var option = {
 | 
				
			||||||
 | 
					        color: ["#2e7cff", "#1afffd"],
 | 
				
			||||||
 | 
					        tooltip: {
 | 
				
			||||||
 | 
					          trigger: "axis",
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        legend: {
 | 
				
			||||||
 | 
					          data: ["线表计划", "月度计划"],
 | 
				
			||||||
 | 
					          top: "5%",
 | 
				
			||||||
 | 
					          textStyle: {
 | 
				
			||||||
 | 
					            color: "#e9ebee",
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        grid: {
 | 
				
			||||||
 | 
					          left: "2%",
 | 
				
			||||||
 | 
					          right: "2%",
 | 
				
			||||||
 | 
					          bottom: "5%",
 | 
				
			||||||
 | 
					          containLabel: true,
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        calculable: true,
 | 
				
			||||||
 | 
					        xAxis: [
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            type: "category",
 | 
				
			||||||
 | 
					            data: this.monthList,
 | 
				
			||||||
 | 
					            axisLabel: {
 | 
				
			||||||
 | 
					              color: "#e4e4e4",
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            nameTextStyle: {
 | 
				
			||||||
 | 
					              color: "#e4e4e4",
 | 
				
			||||||
 | 
					              fontSize: 12,
 | 
				
			||||||
 | 
					              padding: [0, 0, 0, 0],
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        yAxis: [
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            type: "value",
 | 
				
			||||||
 | 
					            splitLine: {
 | 
				
			||||||
 | 
					              show: false,
 | 
				
			||||||
 | 
					              lineStyle: {
 | 
				
			||||||
 | 
					                color: "#064585",
 | 
				
			||||||
 | 
					                // type: "dashed"
 | 
				
			||||||
 | 
					              },
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            axisLabel: {
 | 
				
			||||||
 | 
					              color: "#e4e4e4",
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            nameTextStyle: {
 | 
				
			||||||
 | 
					              color: "#e4e4e4",
 | 
				
			||||||
 | 
					              fontSize: 12,
 | 
				
			||||||
 | 
					              padding: [0, 30, 10, 0],
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        series: [
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            name: "线表计划",
 | 
				
			||||||
 | 
					            type: "bar",
 | 
				
			||||||
 | 
					            data: [34, 45, 67, 34, 45, 34, 12, 67, 34, 12, 34, 12],
 | 
				
			||||||
 | 
					            markPoint: {
 | 
				
			||||||
 | 
					              data: [
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                  type: "max",
 | 
				
			||||||
 | 
					                  name: "Max",
 | 
				
			||||||
 | 
					                  label: {
 | 
				
			||||||
 | 
					                    show: true,
 | 
				
			||||||
 | 
					                    color: "#fff",
 | 
				
			||||||
 | 
					                  },
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                  type: "min",
 | 
				
			||||||
 | 
					                  name: "Min",
 | 
				
			||||||
 | 
					                  label: {
 | 
				
			||||||
 | 
					                    show: true,
 | 
				
			||||||
 | 
					                    color: "#fff",
 | 
				
			||||||
 | 
					                  },
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					              ],
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            name: "月度计划",
 | 
				
			||||||
 | 
					            type: "bar",
 | 
				
			||||||
 | 
					            data: [34, 45, 67, 34, 12, 34, 45, 67, 34, 12, 34, 12],
 | 
				
			||||||
 | 
					            markPoint: {
 | 
				
			||||||
 | 
					              data: [
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                  type: "max",
 | 
				
			||||||
 | 
					                  name: "Max",
 | 
				
			||||||
 | 
					                  label: {
 | 
				
			||||||
 | 
					                    show: true,
 | 
				
			||||||
 | 
					                    color: "#fff",
 | 
				
			||||||
 | 
					                  },
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                  type: "min",
 | 
				
			||||||
 | 
					                  name: "Min",
 | 
				
			||||||
 | 
					                  label: {
 | 
				
			||||||
 | 
					                    show: true,
 | 
				
			||||||
 | 
					                    color: "#fff",
 | 
				
			||||||
 | 
					                  },
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					              ],
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					      };
 | 
				
			||||||
 | 
					      myChart.setOption(option);
 | 
				
			||||||
 | 
					      window.addEventListener("resize", () => {
 | 
				
			||||||
 | 
					        myChart.resize();
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    DrawingPie(wclValue, wcValue) {
 | 
				
			||||||
 | 
					      var myChart = this.$echarts.init(document.getElementById("DrawingPie"));
 | 
				
			||||||
 | 
					      var option = {
 | 
				
			||||||
 | 
					        title: {
 | 
				
			||||||
 | 
					          text: "中日程与图纸",
 | 
				
			||||||
 | 
					          left: "center",
 | 
				
			||||||
 | 
					          bottom: "10%",
 | 
				
			||||||
 | 
					          textStyle: {
 | 
				
			||||||
 | 
					            color: "#fff",
 | 
				
			||||||
 | 
					            fontSize: 14,
 | 
				
			||||||
 | 
					            fontWeight: "normal",
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        tooltip: {
 | 
				
			||||||
 | 
					          trigger: "item",
 | 
				
			||||||
 | 
					          formatter: "{a} <br/>{b} : {c} ({d}%)",
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        color: ["#ff7d0a", "#5470c6"],
 | 
				
			||||||
 | 
					        legend: {
 | 
				
			||||||
 | 
					          show: true,
 | 
				
			||||||
 | 
					          left: "center",
 | 
				
			||||||
 | 
					          top: "10%",
 | 
				
			||||||
 | 
					          textStyle: {
 | 
				
			||||||
 | 
					            color: "#e9ebee",
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					          itemWidth: 25,
 | 
				
			||||||
 | 
					          itemHeight: 15,
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        series: [
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            name: "中日程与图纸",
 | 
				
			||||||
 | 
					            type: "pie",
 | 
				
			||||||
 | 
					            radius: "50%",
 | 
				
			||||||
 | 
					            center: ["50%", "50%"],
 | 
				
			||||||
 | 
					            minAngle: wcValue && wclValue ? 20 : "",
 | 
				
			||||||
 | 
					            avoidLabelOverlap: true,
 | 
				
			||||||
 | 
					            data: [
 | 
				
			||||||
 | 
					              { value: wcValue, name: "完成量" },
 | 
				
			||||||
 | 
					              { value: wclValue, name: "未完成量" },
 | 
				
			||||||
 | 
					            ],
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					      };
 | 
				
			||||||
 | 
					      myChart.setOption(option);
 | 
				
			||||||
 | 
					      window.addEventListener("resize", () => {
 | 
				
			||||||
 | 
					        myChart.resize();
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    ForwardDemandPie(wclValue, wcValue) {
 | 
				
			||||||
 | 
					      var myChart = this.$echarts.init(
 | 
				
			||||||
 | 
					        document.getElementById("ForwardDemandPie")
 | 
				
			||||||
 | 
					      );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      var option = {
 | 
				
			||||||
 | 
					        title: {
 | 
				
			||||||
 | 
					          text: "中日程与前方需求",
 | 
				
			||||||
 | 
					          left: "center",
 | 
				
			||||||
 | 
					          bottom: "10%",
 | 
				
			||||||
 | 
					          textStyle: {
 | 
				
			||||||
 | 
					            color: "#fff",
 | 
				
			||||||
 | 
					            fontSize: 14,
 | 
				
			||||||
 | 
					            fontWeight: "normal",
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        color: ["#91cc75", "#2e7cff"],
 | 
				
			||||||
 | 
					        tooltip: {
 | 
				
			||||||
 | 
					          trigger: "item",
 | 
				
			||||||
 | 
					          formatter: "{a} <br/>{b} : {c} ({d}%)",
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        legend: {
 | 
				
			||||||
 | 
					          show: true,
 | 
				
			||||||
 | 
					          left: "center",
 | 
				
			||||||
 | 
					          top: "10%",
 | 
				
			||||||
 | 
					          textStyle: {
 | 
				
			||||||
 | 
					            color: "#e9ebee",
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					          itemWidth: 25,
 | 
				
			||||||
 | 
					          itemHeight: 15,
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        series: [
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            name: "中日程与前方需求",
 | 
				
			||||||
 | 
					            type: "pie",
 | 
				
			||||||
 | 
					            radius: "50%",
 | 
				
			||||||
 | 
					            center: ["50%", "50%"],
 | 
				
			||||||
 | 
					            minAngle: wcValue && wclValue ? 20 : "",
 | 
				
			||||||
 | 
					            avoidLabelOverlap: true,
 | 
				
			||||||
 | 
					            data: [
 | 
				
			||||||
 | 
					              { value: wcValue, name: "完成量" },
 | 
				
			||||||
 | 
					              { value: wclValue, name: "未完成量" },
 | 
				
			||||||
 | 
					            ],
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					      };
 | 
				
			||||||
 | 
					      myChart.setOption(option);
 | 
				
			||||||
 | 
					      window.addEventListener("resize", () => {
 | 
				
			||||||
 | 
					        myChart.resize();
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    MonthlyPlanPie(wclValue, wcValue) {
 | 
				
			||||||
 | 
					      var myChart = this.$echarts.init(
 | 
				
			||||||
 | 
					        document.getElementById("MonthlyPlanPie")
 | 
				
			||||||
 | 
					      );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      var option = {
 | 
				
			||||||
 | 
					        title: {
 | 
				
			||||||
 | 
					          text: "中日程与月度计划",
 | 
				
			||||||
 | 
					          left: "center",
 | 
				
			||||||
 | 
					          bottom: "10%",
 | 
				
			||||||
 | 
					          textStyle: {
 | 
				
			||||||
 | 
					            color: "#fff",
 | 
				
			||||||
 | 
					            fontSize: 12,
 | 
				
			||||||
 | 
					            fontWeight: "normal",
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        tooltip: {
 | 
				
			||||||
 | 
					          trigger: "item",
 | 
				
			||||||
 | 
					          formatter: "{a} <br/>{b} : {c} ({d}%)",
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        color: ["#feb602", "#5470c6"],
 | 
				
			||||||
 | 
					        legend: {
 | 
				
			||||||
 | 
					          show: true,
 | 
				
			||||||
 | 
					          left: "center",
 | 
				
			||||||
 | 
					          top: "10%",
 | 
				
			||||||
 | 
					          textStyle: {
 | 
				
			||||||
 | 
					            color: "#e9ebee",
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					          itemWidth: 25,
 | 
				
			||||||
 | 
					          itemHeight: 15,
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        series: [
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            name: "中日程与月度计划",
 | 
				
			||||||
 | 
					            type: "pie",
 | 
				
			||||||
 | 
					            radius: "50%",
 | 
				
			||||||
 | 
					            center: ["50%", "50%"],
 | 
				
			||||||
 | 
					            minAngle: wcValue && wclValue ? 20 : "",
 | 
				
			||||||
 | 
					            avoidLabelOverlap: true,
 | 
				
			||||||
 | 
					            data: [
 | 
				
			||||||
 | 
					              { value: wcValue, name: "完成量" },
 | 
				
			||||||
 | 
					              { value: wclValue, name: "未完成量" },
 | 
				
			||||||
 | 
					            ],
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					      };
 | 
				
			||||||
 | 
					      myChart.setOption(option);
 | 
				
			||||||
 | 
					      window.addEventListener("resize", () => {
 | 
				
			||||||
 | 
					        myChart.resize();
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    FinishPie(wclValue, wcValue) {
 | 
				
			||||||
 | 
					      var myChart = this.$echarts.init(document.getElementById("FinishPie"));
 | 
				
			||||||
 | 
					      var option = {
 | 
				
			||||||
 | 
					        title: {
 | 
				
			||||||
 | 
					          text: "中日程与完成重量",
 | 
				
			||||||
 | 
					          left: "center",
 | 
				
			||||||
 | 
					          // left:"center",
 | 
				
			||||||
 | 
					          bottom: "10%",
 | 
				
			||||||
 | 
					          textStyle: {
 | 
				
			||||||
 | 
					            color: "#fff",
 | 
				
			||||||
 | 
					            fontSize: 12,
 | 
				
			||||||
 | 
					            fontWeight: "normal",
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        // color: ["#ff81cb", "#2865aa"],
 | 
				
			||||||
 | 
					        color: ["#1afffd", "#2e7cff"],
 | 
				
			||||||
 | 
					        tooltip: {
 | 
				
			||||||
 | 
					          trigger: "item",
 | 
				
			||||||
 | 
					          formatter: "{a} <br/>{b} : {c} ({d}%)",
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        legend: {
 | 
				
			||||||
 | 
					          show: true,
 | 
				
			||||||
 | 
					          left: "center",
 | 
				
			||||||
 | 
					          top: "10%",
 | 
				
			||||||
 | 
					          textStyle: {
 | 
				
			||||||
 | 
					            color: "#e9ebee",
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					          itemWidth: 25,
 | 
				
			||||||
 | 
					          itemHeight: 15,
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        series: [
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            name: "中日程与完成重量",
 | 
				
			||||||
 | 
					            type: "pie",
 | 
				
			||||||
 | 
					            radius: "50%",
 | 
				
			||||||
 | 
					            center: ["50%", "50%"],
 | 
				
			||||||
 | 
					            minAngle: wcValue && wclValue ? 20 : "",
 | 
				
			||||||
 | 
					            minAngle: 20,
 | 
				
			||||||
 | 
					            avoidLabelOverlap: true,
 | 
				
			||||||
 | 
					            data: [
 | 
				
			||||||
 | 
					              { value: wcValue, name: "完成量" },
 | 
				
			||||||
 | 
					              { value: wclValue, name: "未完成量" },
 | 
				
			||||||
 | 
					            ],
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					      };
 | 
				
			||||||
 | 
					      myChart.setOption(option);
 | 
				
			||||||
 | 
					      window.addEventListener("resize", () => {
 | 
				
			||||||
 | 
					        myChart.resize();
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					</script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<style scoped lang="scss">
 | 
				
			||||||
 | 
					.midSchedule-container {
 | 
				
			||||||
 | 
					  margin-top: 10px;
 | 
				
			||||||
 | 
					  padding-left: 5px;
 | 
				
			||||||
 | 
					  padding-right: 5px;
 | 
				
			||||||
 | 
					  transition: opacity 1003s;
 | 
				
			||||||
 | 
					  .midSchedule-box {
 | 
				
			||||||
 | 
					    display: flex;
 | 
				
			||||||
 | 
					    align-items: stretch;
 | 
				
			||||||
 | 
					    height: calc(100vh - 105px);
 | 
				
			||||||
 | 
					    .left-box {
 | 
				
			||||||
 | 
					      width: 35%;
 | 
				
			||||||
 | 
					      height: 100%;
 | 
				
			||||||
 | 
					      .left-top-box {
 | 
				
			||||||
 | 
					        .left-top-title {
 | 
				
			||||||
 | 
					          width: 32%;
 | 
				
			||||||
 | 
					          height: 24px;
 | 
				
			||||||
 | 
					          background-image: url("@/assets/image/tit01s.png");
 | 
				
			||||||
 | 
					          background-size: 100% 100%;
 | 
				
			||||||
 | 
					          background-repeat: no-repeat;
 | 
				
			||||||
 | 
					          margin: 0 auto;
 | 
				
			||||||
 | 
					          font-size: 14px;
 | 
				
			||||||
 | 
					          color: #ffffff;
 | 
				
			||||||
 | 
					          text-align: center;
 | 
				
			||||||
 | 
					          margin: 0 auto;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      .left-bottom-box {
 | 
				
			||||||
 | 
					        // border: 1px solid red;
 | 
				
			||||||
 | 
					        .row-border {
 | 
				
			||||||
 | 
					          color: #fff;
 | 
				
			||||||
 | 
					          text-align: left;
 | 
				
			||||||
 | 
					          font-size: 0.8rem;
 | 
				
			||||||
 | 
					          .col-right-border {
 | 
				
			||||||
 | 
					            height: 2rem;
 | 
				
			||||||
 | 
					            line-height: 2rem;
 | 
				
			||||||
 | 
					            text-align: center;
 | 
				
			||||||
 | 
					            border-right: 1px solid #3490ba;
 | 
				
			||||||
 | 
					            border-top: 1px solid #3490ba;
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					          .col-right-border-text {
 | 
				
			||||||
 | 
					            height: 2rem;
 | 
				
			||||||
 | 
					            line-height: 2rem;
 | 
				
			||||||
 | 
					            text-align: center;
 | 
				
			||||||
 | 
					            border-top: 1px solid #3490ba;
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    .right-box {
 | 
				
			||||||
 | 
					      width: 65%;
 | 
				
			||||||
 | 
					      height: 100%;
 | 
				
			||||||
 | 
					      display: flex;
 | 
				
			||||||
 | 
					      flex-direction: column;
 | 
				
			||||||
 | 
					      justify-content: space-between;
 | 
				
			||||||
 | 
					      margin-left: 5px;
 | 
				
			||||||
 | 
					      //   柱状图
 | 
				
			||||||
 | 
					      .right-top-box {
 | 
				
			||||||
 | 
					        height: 55%;
 | 
				
			||||||
 | 
					        margin-bottom: 5px;
 | 
				
			||||||
 | 
					        .right-top-title {
 | 
				
			||||||
 | 
					          width: 32%;
 | 
				
			||||||
 | 
					          height: 24px;
 | 
				
			||||||
 | 
					          background-image: url("@/assets/image/tit01s.png");
 | 
				
			||||||
 | 
					          background-size: 100% 100%;
 | 
				
			||||||
 | 
					          background-repeat: no-repeat;
 | 
				
			||||||
 | 
					          font-size: 14px;
 | 
				
			||||||
 | 
					          color: #ffffff;
 | 
				
			||||||
 | 
					          text-align: center;
 | 
				
			||||||
 | 
					          margin: 0 auto;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        .row {
 | 
				
			||||||
 | 
					          height: calc(50% - 12px);
 | 
				
			||||||
 | 
					          .el-col-12 {
 | 
				
			||||||
 | 
					            height: 100%;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            .drawingBar,
 | 
				
			||||||
 | 
					            .forwardDemandBar,
 | 
				
			||||||
 | 
					            .monthlyPlanBar,
 | 
				
			||||||
 | 
					            .finishBar {
 | 
				
			||||||
 | 
					              width: 100%;
 | 
				
			||||||
 | 
					              height: 100%;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      //   饼图
 | 
				
			||||||
 | 
					      .right-bottom-box {
 | 
				
			||||||
 | 
					        height: 45%;
 | 
				
			||||||
 | 
					        .right-bottom-title {
 | 
				
			||||||
 | 
					          width: 32%;
 | 
				
			||||||
 | 
					          height: 24px;
 | 
				
			||||||
 | 
					          background-image: url("@/assets/image/tit01s.png");
 | 
				
			||||||
 | 
					          background-size: 100% 100%;
 | 
				
			||||||
 | 
					          background-repeat: no-repeat;
 | 
				
			||||||
 | 
					          font-size: 14px;
 | 
				
			||||||
 | 
					          color: #ffffff;
 | 
				
			||||||
 | 
					          text-align: center;
 | 
				
			||||||
 | 
					          margin: 0 auto;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        .row {
 | 
				
			||||||
 | 
					          height: calc(100% - 24px);
 | 
				
			||||||
 | 
					          .el-col-6 {
 | 
				
			||||||
 | 
					            height: 100%;
 | 
				
			||||||
 | 
					            .drawingPie,
 | 
				
			||||||
 | 
					            .forwardDemandPie,
 | 
				
			||||||
 | 
					            .monthlyPlanPie,
 | 
				
			||||||
 | 
					            .finishPie {
 | 
				
			||||||
 | 
					              width: 100%;
 | 
				
			||||||
 | 
					              height: 100%;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  .box-top {
 | 
				
			||||||
 | 
					    margin-top: 5px;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  .border-out {
 | 
				
			||||||
 | 
					    width: 100%;
 | 
				
			||||||
 | 
					    height: 100%;
 | 
				
			||||||
 | 
					    border-radius: 10px;
 | 
				
			||||||
 | 
					    border: 1px #0174f5 solid;
 | 
				
			||||||
 | 
					    padding: 1px;
 | 
				
			||||||
 | 
					    box-sizing: border-box;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  .border-inner {
 | 
				
			||||||
 | 
					    width: 100%;
 | 
				
			||||||
 | 
					    height: 100%;
 | 
				
			||||||
 | 
					    box-sizing: border-box;
 | 
				
			||||||
 | 
					    border: 2px solid #016ae0;
 | 
				
			||||||
 | 
					    border-radius: 10px;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  .border-inner {
 | 
				
			||||||
 | 
					    background-color: rgba(2, 8, 23, 0.1);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					</style>
 | 
				
			||||||
@ -0,0 +1,11 @@
 | 
				
			|||||||
 | 
					<template>
 | 
				
			||||||
 | 
					  <div class="layout-container">
 | 
				
			||||||
 | 
					    <router-view />
 | 
				
			||||||
 | 
					  </div>
 | 
				
			||||||
 | 
					</template>
 | 
				
			||||||
 | 
					<script>
 | 
				
			||||||
 | 
					export default {
 | 
				
			||||||
 | 
					  name: "Layout",
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					</script>
 | 
				
			||||||
 | 
					<style></style>
 | 
				
			||||||
@ -0,0 +1,35 @@
 | 
				
			|||||||
 | 
					import Vue from "vue";
 | 
				
			||||||
 | 
					import App from "./App.vue";
 | 
				
			||||||
 | 
					import router from "./router";
 | 
				
			||||||
 | 
					import store from "./store";
 | 
				
			||||||
 | 
					import ElementUI from "element-ui"; //el
 | 
				
			||||||
 | 
					import "element-ui/lib/theme-chalk/index.css"; //el
 | 
				
			||||||
 | 
					import "@/assets/icon_font/iconfont.css"; //阿里矢量图
 | 
				
			||||||
 | 
					import "./permission"; // 登录权限
 | 
				
			||||||
 | 
					import "@/styles/index.scss"; // global css
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 时间插件
 | 
				
			||||||
 | 
					import moment from "moment";
 | 
				
			||||||
 | 
					Vue.prototype.$moment = moment;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// echarts
 | 
				
			||||||
 | 
					import * as echarts from 'echarts';
 | 
				
			||||||
 | 
					Vue.prototype.$echarts = echarts;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import * as echarts4 from 'echarts4';
 | 
				
			||||||
 | 
					Vue.prototype.$echarts4 = echarts4;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// datav
 | 
				
			||||||
 | 
					import dataV from '@jiaminghi/data-view'
 | 
				
			||||||
 | 
					Vue.use(dataV)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 需要汉化
 | 
				
			||||||
 | 
					moment.locale("zh-cn");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Vue.config.productionTip = false;
 | 
				
			||||||
 | 
					Vue.use(ElementUI);
 | 
				
			||||||
 | 
					new Vue({
 | 
				
			||||||
 | 
					  router,
 | 
				
			||||||
 | 
					  store,
 | 
				
			||||||
 | 
					  render: (h) => h(App),
 | 
				
			||||||
 | 
					}).$mount("#app");
 | 
				
			||||||
@ -0,0 +1,13 @@
 | 
				
			|||||||
 | 
					import router from "./router";
 | 
				
			||||||
 | 
					import NProgress from "nprogress"; // progress bar
 | 
				
			||||||
 | 
					import "nprogress/nprogress.css"; // progress bar style
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					NProgress.configure({ showSpinner: false }); // NProgress Configuration
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					router.beforeEach(async (to, from, next) => {
 | 
				
			||||||
 | 
					  NProgress.start();
 | 
				
			||||||
 | 
					  next();
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 | 
					router.afterEach(() => {
 | 
				
			||||||
 | 
					  NProgress.done();
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
@ -0,0 +1,29 @@
 | 
				
			|||||||
 | 
					import Vue from "vue";
 | 
				
			||||||
 | 
					import Vuex from "vuex";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Vue.use(Vuex);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export default new Vuex.Store({
 | 
				
			||||||
 | 
					  state: {
 | 
				
			||||||
 | 
					    cartNum: 0, //购物车数量
 | 
				
			||||||
 | 
					    navBarIndex: 0, //默认菜单高亮
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  getters: {
 | 
				
			||||||
 | 
					    cartNum(state) {
 | 
				
			||||||
 | 
					      return state.cartNum;
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    navBarIndex(state) {
 | 
				
			||||||
 | 
					      return state.navBarIndex;
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  mutations: {
 | 
				
			||||||
 | 
					    CART_NUM: (state, cartNum) => {
 | 
				
			||||||
 | 
					      state.cartNum = cartNum;
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    NAV_BAR_INDEX: (state, navBarIndex) => {
 | 
				
			||||||
 | 
					      state.navBarIndex = navBarIndex;
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  actions: {},
 | 
				
			||||||
 | 
					  modules: {},
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
@ -0,0 +1,6 @@
 | 
				
			|||||||
 | 
					@font-face {
 | 
				
			||||||
 | 
					  font-family: "data_number";
 | 
				
			||||||
 | 
					  src: url("./data_number.ttf") format("truetype");
 | 
				
			||||||
 | 
					  font-weight: normal;
 | 
				
			||||||
 | 
					  font-style: normal;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -0,0 +1,111 @@
 | 
				
			|||||||
 | 
					@charset "UTF-8";
 | 
				
			||||||
 | 
					@import url(f:\ccgroup\gj-erp-kban-vue\src\styles\font\font.css);
 | 
				
			||||||
 | 
					.el-input__inner {
 | 
				
			||||||
 | 
					  background-color: rgba(1, 1, 1, 0) !important;
 | 
				
			||||||
 | 
					  border: 2px solid #00c0ef !important;
 | 
				
			||||||
 | 
					  color: #72e3ff !important;
 | 
				
			||||||
 | 
					  font-weight: bold;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.table-sum {
 | 
				
			||||||
 | 
					  width: 96%;
 | 
				
			||||||
 | 
					  border-collapse: collapse;
 | 
				
			||||||
 | 
					  color: #ffffff;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.table-sum .table-sum-title {
 | 
				
			||||||
 | 
					  font-size: 14px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.table-sum .table-sum-text {
 | 
				
			||||||
 | 
					  font-weight: bold;
 | 
				
			||||||
 | 
					  font-size: 18px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.table-sum tr td {
 | 
				
			||||||
 | 
					  border: 1px solid #5bc0de;
 | 
				
			||||||
 | 
					  padding-top: 0.3rem;
 | 
				
			||||||
 | 
					  padding-bottom: 0.3rem;
 | 
				
			||||||
 | 
					  text-indent: 10px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.formData-box {
 | 
				
			||||||
 | 
					  width: 300px;
 | 
				
			||||||
 | 
					  position: relative;
 | 
				
			||||||
 | 
					  top: 10px;
 | 
				
			||||||
 | 
					  display: flex;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.formData-box .query-btn {
 | 
				
			||||||
 | 
					  height: 22px;
 | 
				
			||||||
 | 
					  background-color: #00c0ef;
 | 
				
			||||||
 | 
					  color: white;
 | 
				
			||||||
 | 
					  border: #00cdff 2px solid;
 | 
				
			||||||
 | 
					  min-width: 50px;
 | 
				
			||||||
 | 
					  border-radius: 5px;
 | 
				
			||||||
 | 
					  margin-left: 20px;
 | 
				
			||||||
 | 
					  text-align: center;
 | 
				
			||||||
 | 
					  font-size: 14px;
 | 
				
			||||||
 | 
					  position: relative;
 | 
				
			||||||
 | 
					  top: 2px;
 | 
				
			||||||
 | 
					  cursor: pointer;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.formData-box .el-form-item__label {
 | 
				
			||||||
 | 
					  color: #fff;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.el-select .el-input .el-select__caret {
 | 
				
			||||||
 | 
					  color: #00c0ef !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.el-table,
 | 
				
			||||||
 | 
					.el-table tr,
 | 
				
			||||||
 | 
					.el-table__fixed-right::before,
 | 
				
			||||||
 | 
					.el-table__fixed::before {
 | 
				
			||||||
 | 
					  background-color: rgba(1, 1, 1, 0) !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.el-table th,
 | 
				
			||||||
 | 
					.el-table td {
 | 
				
			||||||
 | 
					  text-align: center !important;
 | 
				
			||||||
 | 
					  height: 30px !important;
 | 
				
			||||||
 | 
					  padding: 0 !important;
 | 
				
			||||||
 | 
					  color: #fff;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.el-table-column--selection .cell {
 | 
				
			||||||
 | 
					  padding-left: 0 !important;
 | 
				
			||||||
 | 
					  padding-right: 0 !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.el-table--border {
 | 
				
			||||||
 | 
					  border: none !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.el-table .el-table__cell {
 | 
				
			||||||
 | 
					  padding: 0 !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.el-table--border::after,
 | 
				
			||||||
 | 
					.el-table--group::after,
 | 
				
			||||||
 | 
					.el-table::before {
 | 
				
			||||||
 | 
					  border: none !important;
 | 
				
			||||||
 | 
					  background-color: rgba(1, 1, 1, 0) !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* 设置滚动条的样式 */
 | 
				
			||||||
 | 
					::-webkit-scrollbar {
 | 
				
			||||||
 | 
					  width: 6px;
 | 
				
			||||||
 | 
					  height: 6px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					::-webkit-scrollbar-thumb {
 | 
				
			||||||
 | 
					  border-radius: 10px;
 | 
				
			||||||
 | 
					  background: rgba(0, 0, 0, 0.3);
 | 
				
			||||||
 | 
					  -webkit-box-shadow: inset006pxrgba(0, 0, 0, 0.5);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					::-webkit-scrollbar-corner {
 | 
				
			||||||
 | 
					  background: transparent !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					@import url(f:\ccgroup\gj-erp-kban-vue\src\styles\font\font.css);.el-input__inner{background-color:rgba(1,1,1,0) !important;border:2px solid #00c0ef !important;color:#72e3ff !important;font-weight:bold}.table-sum{width:96%;border-collapse:collapse;color:#ffffff}.table-sum .table-sum-title{font-size:14px}.table-sum .table-sum-text{font-weight:bold;font-size:18px}.table-sum tr td{border:1px solid #5bc0de;padding-top:0.3rem;padding-bottom:0.3rem;text-indent:10px}.formData-box{width:300px;position:relative;top:10px;display:flex}.formData-box .query-btn{height:22px;background-color:#00c0ef;color:white;border:#00cdff 2px solid;min-width:50px;border-radius:5px;margin-left:20px;text-align:center;font-size:14px;position:relative;top:2px;cursor:pointer}.formData-box .el-form-item__label{color:#fff}.el-select .el-input .el-select__caret{color:#00c0ef !important}.el-table,.el-table tr,.el-table__fixed-right::before,.el-table__fixed::before{background-color:rgba(1,1,1,0) !important}.el-table th,.el-table td{text-align:center !important;height:30px !important;padding:0 !important;color:#fff}.el-table-column--selection .cell{padding-left:0 !important;padding-right:0 !important}.el-table--border{border:none !important}.el-table .el-table__cell{padding:0 !important}.el-table--border::after,.el-table--group::after,.el-table::before{border:none !important;background-color:rgba(1,1,1,0) !important}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-thumb{border-radius:10px;background:rgba(0,0,0,0.3);-webkit-box-shadow:inset006pxrgba(0, 0, 0, 0.5)}::-webkit-scrollbar-corner{background:transparent !important}
 | 
				
			||||||
@ -0,0 +1,96 @@
 | 
				
			|||||||
 | 
					@import "./font/font.css";
 | 
				
			||||||
 | 
					.el-input__inner {
 | 
				
			||||||
 | 
					  background-color: rgba(1, 1, 1, 0) !important;
 | 
				
			||||||
 | 
					  border: 2px solid #00c0ef !important;
 | 
				
			||||||
 | 
					  color: #72e3ff !important;
 | 
				
			||||||
 | 
					  font-weight: bold;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.table-sum {
 | 
				
			||||||
 | 
					  width: 96%;
 | 
				
			||||||
 | 
					  // margin-left: 2%;
 | 
				
			||||||
 | 
					  border-collapse: collapse;
 | 
				
			||||||
 | 
					  color: #ffffff;
 | 
				
			||||||
 | 
					  .table-sum-title {
 | 
				
			||||||
 | 
					    font-size: 14px;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  .table-sum-text {
 | 
				
			||||||
 | 
					    font-weight: bold;
 | 
				
			||||||
 | 
					    font-size: 18px;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.table-sum tr td {
 | 
				
			||||||
 | 
					  border: 1px solid #5bc0de;
 | 
				
			||||||
 | 
					  padding-top: 0.3rem;
 | 
				
			||||||
 | 
					  padding-bottom: 0.3rem;
 | 
				
			||||||
 | 
					  text-indent: 10px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.formData-box {
 | 
				
			||||||
 | 
					  width: 300px;
 | 
				
			||||||
 | 
					  position: relative;
 | 
				
			||||||
 | 
					  top: 10px;
 | 
				
			||||||
 | 
					  display: flex;
 | 
				
			||||||
 | 
					  .query-btn{
 | 
				
			||||||
 | 
					    height: 22px;
 | 
				
			||||||
 | 
					    background-color: #00c0ef;
 | 
				
			||||||
 | 
					    color: white;
 | 
				
			||||||
 | 
					    border: #00cdff 2px solid;
 | 
				
			||||||
 | 
					    min-width: 50px;
 | 
				
			||||||
 | 
					    border-radius: 5px;
 | 
				
			||||||
 | 
					    margin-left: 20px;
 | 
				
			||||||
 | 
					    text-align: center;
 | 
				
			||||||
 | 
					    font-size: 14px;
 | 
				
			||||||
 | 
					    position: relative;
 | 
				
			||||||
 | 
					    top: 2px;
 | 
				
			||||||
 | 
					    cursor: pointer;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  .el-form-item__label {
 | 
				
			||||||
 | 
					    color: #fff;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.el-select .el-input .el-select__caret {
 | 
				
			||||||
 | 
					  color: #00c0ef !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.el-table,
 | 
				
			||||||
 | 
					.el-table tr,
 | 
				
			||||||
 | 
					.el-table__fixed-right::before,
 | 
				
			||||||
 | 
					.el-table__fixed::before {
 | 
				
			||||||
 | 
					  background-color: rgba(1, 1, 1, 0) !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.el-table th,
 | 
				
			||||||
 | 
					.el-table td {
 | 
				
			||||||
 | 
					  text-align: center !important;
 | 
				
			||||||
 | 
					  height: 30px !important;
 | 
				
			||||||
 | 
					  padding: 0 !important;
 | 
				
			||||||
 | 
					  color: #fff;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.el-table-column--selection .cell {
 | 
				
			||||||
 | 
					  padding-left: 0 !important;
 | 
				
			||||||
 | 
					  padding-right: 0 !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.el-table--border {
 | 
				
			||||||
 | 
					  border: none !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.el-table .el-table__cell {
 | 
				
			||||||
 | 
					  padding: 0 !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.el-table--border::after,
 | 
				
			||||||
 | 
					.el-table--group::after,
 | 
				
			||||||
 | 
					.el-table::before {
 | 
				
			||||||
 | 
					  border: none !important;
 | 
				
			||||||
 | 
					  background-color: rgba(1, 1, 1, 0) !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					/* 设置滚动条的样式 */
 | 
				
			||||||
 | 
					::-webkit-scrollbar {
 | 
				
			||||||
 | 
					  width: 6px;
 | 
				
			||||||
 | 
					  height: 6px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					::-webkit-scrollbar-thumb {
 | 
				
			||||||
 | 
					  border-radius: 10px;
 | 
				
			||||||
 | 
					  background: rgba(0, 0, 0, 0.3);
 | 
				
			||||||
 | 
					  -webkit-box-shadow: inset006pxrgba(0, 0, 0, 0.5);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					::-webkit-scrollbar-corner {
 | 
				
			||||||
 | 
					  background: rgba(0, 0, 0, 0) !important;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -0,0 +1,30 @@
 | 
				
			|||||||
 | 
					import CryptoJS from "crypto-js";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 解密
 | 
				
			||||||
 | 
					export function decrypt(word, keyStr) {
 | 
				
			||||||
 | 
					  keyStr = keyStr || "ylhzabcdefghi066";
 | 
				
			||||||
 | 
					  var key = CryptoJS.enc.Utf8.parse(keyStr);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  var decrypt = CryptoJS.AES.decrypt(word, key, {
 | 
				
			||||||
 | 
					    mode: CryptoJS.mode.ECB,
 | 
				
			||||||
 | 
					    padding: CryptoJS.pad.Pkcs7,
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					  return CryptoJS.enc.Utf8.stringify(decrypt).toString();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 加密
 | 
				
			||||||
 | 
					export function encrypt(word, keyStr) {
 | 
				
			||||||
 | 
					  keyStr = keyStr || "ylhzabcdefghi066";
 | 
				
			||||||
 | 
					  if (!word) return "";
 | 
				
			||||||
 | 
					  const key = CryptoJS.enc.Utf8.parse(keyStr);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  const srcs = CryptoJS.enc.Utf8.parse(word);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  const encrypted = CryptoJS.AES.encrypt(srcs, key, {
 | 
				
			||||||
 | 
					    mode: CryptoJS.mode.ECB,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    padding: CryptoJS.pad.Pkcs7,
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  return encrypted.toString();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -0,0 +1,28 @@
 | 
				
			|||||||
 | 
					import axios from "axios";
 | 
				
			||||||
 | 
					const service = axios.create({
 | 
				
			||||||
 | 
					  baseURL: "http://kban.runpengsoft.com",
 | 
				
			||||||
 | 
					  timeout: 600000, //600000
 | 
				
			||||||
 | 
					  withCredentials: false,
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 请求拦截器
 | 
				
			||||||
 | 
					service.interceptors.request.use(
 | 
				
			||||||
 | 
					  (config) => {
 | 
				
			||||||
 | 
					    return config;
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  (error) => {
 | 
				
			||||||
 | 
					    return Promise.reject(error);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 响应拦截器
 | 
				
			||||||
 | 
					service.interceptors.response.use(
 | 
				
			||||||
 | 
					  (response) => {
 | 
				
			||||||
 | 
					    return response.data;
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  (error) => {
 | 
				
			||||||
 | 
					    return Promise.reject(error);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export default service;
 | 
				
			||||||
@ -0,0 +1,106 @@
 | 
				
			|||||||
 | 
					<template>
 | 
				
			||||||
 | 
					  <div class="errPage-container">
 | 
				
			||||||
 | 
					    <el-button icon="el-icon-arrow-left" class="pan-back-btn" @click="back">
 | 
				
			||||||
 | 
					      返回首页
 | 
				
			||||||
 | 
					    </el-button>
 | 
				
			||||||
 | 
					    <el-row class="row-flex">
 | 
				
			||||||
 | 
					      <el-col :span="12">
 | 
				
			||||||
 | 
					        <h1 class="text-jumbo text-ginormous">Oops!</h1>
 | 
				
			||||||
 | 
					        <!-- gif来源<a href="https://zh.airbnb.com/" target="_blank">airbnb</a> 页面 -->
 | 
				
			||||||
 | 
					        <h2>您没有权限访问该页面</h2>
 | 
				
			||||||
 | 
					        <!-- <h6>如有不满请联系你领导</h6> -->
 | 
				
			||||||
 | 
					        <ul class="list-unstyled">
 | 
				
			||||||
 | 
					          <li>或者你可以去:</li>
 | 
				
			||||||
 | 
					          <li class="link-type">
 | 
				
			||||||
 | 
					            <router-link to="/home"> 回首页 </router-link>
 | 
				
			||||||
 | 
					          </li>
 | 
				
			||||||
 | 
					          <!-- <li class="link-type">
 | 
				
			||||||
 | 
					            <a href="https://www.taobao.com/">随便看看</a>
 | 
				
			||||||
 | 
					          </li> -->
 | 
				
			||||||
 | 
					          <li>
 | 
				
			||||||
 | 
					            <a href="#" @click.prevent="dialogVisible = true">点我看图</a>
 | 
				
			||||||
 | 
					          </li>
 | 
				
			||||||
 | 
					        </ul>
 | 
				
			||||||
 | 
					      </el-col>
 | 
				
			||||||
 | 
					      <el-col :span="12">
 | 
				
			||||||
 | 
					        <img
 | 
				
			||||||
 | 
					          :src="errGif"
 | 
				
			||||||
 | 
					          width="313"
 | 
				
			||||||
 | 
					          height="428"
 | 
				
			||||||
 | 
					          alt="Girl has dropped her ice cream."
 | 
				
			||||||
 | 
					        >
 | 
				
			||||||
 | 
					      </el-col>
 | 
				
			||||||
 | 
					    </el-row>
 | 
				
			||||||
 | 
					    <el-dialog :visible.sync="dialogVisible" title="随便看">
 | 
				
			||||||
 | 
					      <img :src="ewizardClap" class="pan-img">
 | 
				
			||||||
 | 
					    </el-dialog>
 | 
				
			||||||
 | 
					  </div>
 | 
				
			||||||
 | 
					</template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<script>
 | 
				
			||||||
 | 
					import errGif from '@/assets/401_images/401.gif'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export default {
 | 
				
			||||||
 | 
					  name: 'Page401',
 | 
				
			||||||
 | 
					  data() {
 | 
				
			||||||
 | 
					    return {
 | 
				
			||||||
 | 
					      errGif: errGif + '?' + +new Date(),
 | 
				
			||||||
 | 
					      ewizardClap:
 | 
				
			||||||
 | 
					        'https://wpimg.wallstcn.com/007ef517-bafd-4066-aae4-6883632d9646',
 | 
				
			||||||
 | 
					      dialogVisible: false
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  methods: {
 | 
				
			||||||
 | 
					    back() {
 | 
				
			||||||
 | 
					      this.$router.push({ path: '/home' })
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					</script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<style lang="scss" scoped>
 | 
				
			||||||
 | 
					.errPage-container {
 | 
				
			||||||
 | 
					  width: 800px;
 | 
				
			||||||
 | 
					  max-width: 100%;
 | 
				
			||||||
 | 
					  margin: 0 auto;
 | 
				
			||||||
 | 
					  padding-top: 100px;
 | 
				
			||||||
 | 
					  height: 100vh;
 | 
				
			||||||
 | 
					  overflow: hidden;
 | 
				
			||||||
 | 
					  .pan-back-btn {
 | 
				
			||||||
 | 
					    background: #008489;
 | 
				
			||||||
 | 
					    color: #fff;
 | 
				
			||||||
 | 
					    border: none !important;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  .row-flex{
 | 
				
			||||||
 | 
					    display: flex;
 | 
				
			||||||
 | 
					    align-items: center;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  .pan-gif {
 | 
				
			||||||
 | 
					    margin: 0 auto;
 | 
				
			||||||
 | 
					    display: block;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  .pan-img {
 | 
				
			||||||
 | 
					    display: block;
 | 
				
			||||||
 | 
					    margin: 0 auto;
 | 
				
			||||||
 | 
					    width: 100%;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  .text-jumbo {
 | 
				
			||||||
 | 
					    font-size: 60px;
 | 
				
			||||||
 | 
					    font-weight: 700;
 | 
				
			||||||
 | 
					    color: #484848;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  .list-unstyled {
 | 
				
			||||||
 | 
					    font-size: 14px;
 | 
				
			||||||
 | 
					    li {
 | 
				
			||||||
 | 
					      padding-bottom: 5px;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    a {
 | 
				
			||||||
 | 
					      color: #008489;
 | 
				
			||||||
 | 
					      text-decoration: none;
 | 
				
			||||||
 | 
					      &:hover {
 | 
				
			||||||
 | 
					        text-decoration: underline;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					</style>
 | 
				
			||||||
@ -0,0 +1,178 @@
 | 
				
			|||||||
 | 
					<template>
 | 
				
			||||||
 | 
					  <div class="home-container">
 | 
				
			||||||
 | 
					    <!-- header -->
 | 
				
			||||||
 | 
					    <div class="home-header">
 | 
				
			||||||
 | 
					      <div class="home-header-left">
 | 
				
			||||||
 | 
					        <div v-for="(item, index) in headerLeftList" :key="index">
 | 
				
			||||||
 | 
					          <div
 | 
				
			||||||
 | 
					            class="home-header-name"
 | 
				
			||||||
 | 
					            :class="leftActiveIndex == index ? 'home-header-name-active' : ''"
 | 
				
			||||||
 | 
					            @click="headerLeftChange(item, index)"
 | 
				
			||||||
 | 
					          >
 | 
				
			||||||
 | 
					            {{ item.name }}
 | 
				
			||||||
 | 
					          </div>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					      </div>
 | 
				
			||||||
 | 
					      <div class="home-header-right">
 | 
				
			||||||
 | 
					        <div v-for="(item, index) in headerRightList" :key="index">
 | 
				
			||||||
 | 
					          <div
 | 
				
			||||||
 | 
					            class="home-header-name"
 | 
				
			||||||
 | 
					            :class="rightActiveIndex == index ? 'home-header-name-active' : ''"
 | 
				
			||||||
 | 
					            @click="headerRightChange(item, index)"
 | 
				
			||||||
 | 
					          >
 | 
				
			||||||
 | 
					            {{ item.name }}
 | 
				
			||||||
 | 
					          </div>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					      </div>
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					    <!-- body -->
 | 
				
			||||||
 | 
					    <transition name="fade">
 | 
				
			||||||
 | 
					      <div v-if="leftActiveIndex == 0">
 | 
				
			||||||
 | 
					        <!-- 实时监测 -->
 | 
				
			||||||
 | 
					        <real-time-monitor />
 | 
				
			||||||
 | 
					      </div>
 | 
				
			||||||
 | 
					    </transition>
 | 
				
			||||||
 | 
					    <transition name="fade">
 | 
				
			||||||
 | 
					      <div v-if="leftActiveIndex == 1">
 | 
				
			||||||
 | 
					        <!-- 线表分析 -->
 | 
				
			||||||
 | 
					        <line-table-analysis />
 | 
				
			||||||
 | 
					      </div>
 | 
				
			||||||
 | 
					    </transition>
 | 
				
			||||||
 | 
					    <transition name="fade">
 | 
				
			||||||
 | 
					      <div v-if="leftActiveIndex == 2">
 | 
				
			||||||
 | 
					        <!-- 中日程分析 -->
 | 
				
			||||||
 | 
					        <mid-schedule />
 | 
				
			||||||
 | 
					      </div>
 | 
				
			||||||
 | 
					    </transition>
 | 
				
			||||||
 | 
					    <transition name="fade">
 | 
				
			||||||
 | 
					      <div v-if="rightActiveIndex == 0">
 | 
				
			||||||
 | 
					        <!-- 前方需求分析 -->
 | 
				
			||||||
 | 
					        <forward-demand />
 | 
				
			||||||
 | 
					      </div>
 | 
				
			||||||
 | 
					    </transition>
 | 
				
			||||||
 | 
					    <transition name="fade">
 | 
				
			||||||
 | 
					      <div v-if="rightActiveIndex == 1">
 | 
				
			||||||
 | 
					        <!-- 跨位分析 -->
 | 
				
			||||||
 | 
					        <amphi-position />
 | 
				
			||||||
 | 
					      </div>
 | 
				
			||||||
 | 
					    </transition>
 | 
				
			||||||
 | 
					  </div>
 | 
				
			||||||
 | 
					</template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<script>
 | 
				
			||||||
 | 
					import RealTimeMonitor from "@/components/RealTimeMonitor";
 | 
				
			||||||
 | 
					import LineTableAnalysis from "@/components/LineTableAnalysis";
 | 
				
			||||||
 | 
					import MidSchedule from "@/components/MidSchedule";
 | 
				
			||||||
 | 
					import ForwardDemand from "@/components/ForwardDemand";
 | 
				
			||||||
 | 
					import AmphiPosition from "@/components/AmphiPosition";
 | 
				
			||||||
 | 
					export default {
 | 
				
			||||||
 | 
					  name: "Home",
 | 
				
			||||||
 | 
					  components: {
 | 
				
			||||||
 | 
					    RealTimeMonitor,
 | 
				
			||||||
 | 
					    LineTableAnalysis,
 | 
				
			||||||
 | 
					    MidSchedule,
 | 
				
			||||||
 | 
					    ForwardDemand,
 | 
				
			||||||
 | 
					    AmphiPosition,
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  data() {
 | 
				
			||||||
 | 
					    return {
 | 
				
			||||||
 | 
					      headerLeftList: [
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          id: 1,
 | 
				
			||||||
 | 
					          name: "实时监测",
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          id: 2,
 | 
				
			||||||
 | 
					          name: "线表分析",
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          id: 3,
 | 
				
			||||||
 | 
					          name: "中日程分析",
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					      ], //左侧tabs
 | 
				
			||||||
 | 
					      headerRightList: [
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          id: 4,
 | 
				
			||||||
 | 
					          name: "前方需求分析",
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          id: 5,
 | 
				
			||||||
 | 
					          name: "跨位分析",
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          id: 6,
 | 
				
			||||||
 | 
					          name: "小池集成",
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					      ], //右侧tabs
 | 
				
			||||||
 | 
					      leftActiveIndex: 0,
 | 
				
			||||||
 | 
					      rightActiveIndex: 99,
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  created() {},
 | 
				
			||||||
 | 
					  methods: {
 | 
				
			||||||
 | 
					    // 点击左侧tabs
 | 
				
			||||||
 | 
					    headerLeftChange(item, index) {
 | 
				
			||||||
 | 
					      this.leftActiveIndex = index;
 | 
				
			||||||
 | 
					      this.rightActiveIndex = 99;
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    // 点击右侧tabs
 | 
				
			||||||
 | 
					    headerRightChange(item, index) {
 | 
				
			||||||
 | 
					      this.rightActiveIndex = index;
 | 
				
			||||||
 | 
					      this.leftActiveIndex = 99;
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					</script>
 | 
				
			||||||
 | 
					<style lang="scss" scope>
 | 
				
			||||||
 | 
					.home-container {
 | 
				
			||||||
 | 
					  // width: 100%;
 | 
				
			||||||
 | 
					  height: 100vh;
 | 
				
			||||||
 | 
					  min-height: 100vh;
 | 
				
			||||||
 | 
					  background-image: url("@/assets/image/bg01.png");
 | 
				
			||||||
 | 
					  background-size: 100% 100%;
 | 
				
			||||||
 | 
					  background-repeat: no-repeat;
 | 
				
			||||||
 | 
					  overflow: hidden;
 | 
				
			||||||
 | 
					  .home-header {
 | 
				
			||||||
 | 
					    // height: 37px;
 | 
				
			||||||
 | 
					    display: flex;
 | 
				
			||||||
 | 
					    justify-content: space-between;
 | 
				
			||||||
 | 
					    .home-header-left {
 | 
				
			||||||
 | 
					      width: 18%;
 | 
				
			||||||
 | 
					      display: flex;
 | 
				
			||||||
 | 
					      justify-content: space-between;
 | 
				
			||||||
 | 
					      margin-left: 3%;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    .home-header-right {
 | 
				
			||||||
 | 
					      min-width: 18%;
 | 
				
			||||||
 | 
					      display: flex;
 | 
				
			||||||
 | 
					      justify-content: space-between;
 | 
				
			||||||
 | 
					      margin-right: 3%;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    .home-header-name {
 | 
				
			||||||
 | 
					      font-size: 14px;
 | 
				
			||||||
 | 
					      color: #fff;
 | 
				
			||||||
 | 
					      opacity: 0.8;
 | 
				
			||||||
 | 
					      padding-top: 8px;
 | 
				
			||||||
 | 
					      padding-left: 10px;
 | 
				
			||||||
 | 
					      padding-right: 10px;
 | 
				
			||||||
 | 
					      padding-bottom: 5px;
 | 
				
			||||||
 | 
					      cursor: pointer;
 | 
				
			||||||
 | 
					      text-shadow: 0 6px 8px #00225b;
 | 
				
			||||||
 | 
					      white-space: nowrap;
 | 
				
			||||||
 | 
					      &:hover {
 | 
				
			||||||
 | 
					        opacity: 1;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    .home-header-name-active {
 | 
				
			||||||
 | 
					      border-bottom: 4px solid #4b8df8;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  .fade-enter {
 | 
				
			||||||
 | 
					    opacity: 0;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  .fade-enter-active {
 | 
				
			||||||
 | 
					    transition: opacity 1s;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					</style>
 | 
				
			||||||
@ -0,0 +1,12 @@
 | 
				
			|||||||
 | 
					<script>
 | 
				
			||||||
 | 
					export default {
 | 
				
			||||||
 | 
					  created() {
 | 
				
			||||||
 | 
					    const { params, query } = this.$route
 | 
				
			||||||
 | 
					    const { path } = params
 | 
				
			||||||
 | 
					    this.$router.replace({ path: '/' + path, query })
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  render: function(h) {
 | 
				
			||||||
 | 
					    return h() // avoid warning message
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					</script>
 | 
				
			||||||
@ -0,0 +1,50 @@
 | 
				
			|||||||
 | 
					const { defineConfig } = require("@vue/cli-service");
 | 
				
			||||||
 | 
					module.exports = defineConfig({
 | 
				
			||||||
 | 
					  publicPath: "./",
 | 
				
			||||||
 | 
					  outputDir: "dist",
 | 
				
			||||||
 | 
					  assetsDir: "static",
 | 
				
			||||||
 | 
					  lintOnSave: false,
 | 
				
			||||||
 | 
					  productionSourceMap: false,
 | 
				
			||||||
 | 
					  devServer: {
 | 
				
			||||||
 | 
					    host: "0.0.0.0",
 | 
				
			||||||
 | 
					    port: 1109,
 | 
				
			||||||
 | 
					    open: true,
 | 
				
			||||||
 | 
					    headers: {
 | 
				
			||||||
 | 
					      "Access-Control-Allow-Origin": "*",
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    // proxy: {
 | 
				
			||||||
 | 
					    //   "/kban/": {
 | 
				
			||||||
 | 
					    //     target: "http://kban.runpengsoft.com",
 | 
				
			||||||
 | 
					    //     changOrigin: true,
 | 
				
			||||||
 | 
					    //     pathRewrite: {
 | 
				
			||||||
 | 
					    //       "^/kban": "",
 | 
				
			||||||
 | 
					    //     },
 | 
				
			||||||
 | 
					    //   },
 | 
				
			||||||
 | 
					    // },
 | 
				
			||||||
 | 
					    client: {
 | 
				
			||||||
 | 
					      overlay: false,
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  configureWebpack: {
 | 
				
			||||||
 | 
					    optimization: {
 | 
				
			||||||
 | 
					      splitChunks: {
 | 
				
			||||||
 | 
					        chunks: "all",
 | 
				
			||||||
 | 
					        cacheGroups: {
 | 
				
			||||||
 | 
					          libs: {
 | 
				
			||||||
 | 
					            name: "chunk-libs",
 | 
				
			||||||
 | 
					            test: /[\\/]node_modules[\\/]/,
 | 
				
			||||||
 | 
					            priority: 10,
 | 
				
			||||||
 | 
					            minSize: 10000,
 | 
				
			||||||
 | 
					            maxSize: 10000,
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					          default: {
 | 
				
			||||||
 | 
					            chunks: "all",
 | 
				
			||||||
 | 
					            priority: 5,
 | 
				
			||||||
 | 
					            minSize: 10000,
 | 
				
			||||||
 | 
					            maxSize: 10000,
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					});
 | 
				
			||||||