@ -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,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
});
|