liuying
2025-01-10 4e56a51225eda1b2743d8633434a5ded716453fd
3d代码备份
已添加121个文件
28011 ■■■■■ 文件已修改
yiqi_screen_3d/.gitignore 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/README.md 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/babel.config.js 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/jsconfig.json 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/node_modules.rar 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/package-lock.json 22883 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/package.json 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/public/favicon.ico 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/public/index.html 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/App.vue 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/api/api.js 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/api/common.js 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/assets/bg1.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/assets/images/1.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/assets/images/10.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/assets/images/40.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/assets/images/6.gif 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/assets/images/8.gif 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/assets/images/9.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/assets/images/OP35.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/assets/images/bg.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/assets/images/blue/OP05.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/assets/images/blue/OP10.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/assets/images/blue/OP20.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/assets/images/blue/OP30.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/assets/images/blue/OP35.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/assets/images/blue/OP40.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/assets/images/blue/OP50.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/assets/images/blue/OP60.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/assets/images/blue/OP70.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/assets/images/blue/OP80.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/assets/images/blue/unit.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/assets/images/blue/zhuozi.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/assets/images/border_left1.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/assets/images/border_left2.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/assets/images/border_middle.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/assets/images/border_prodline - 副本.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/assets/images/border_prodline.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/assets/images/border_right1.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/assets/images/border_right2.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/assets/images/edo.jpg 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/assets/images/green/OP05.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/assets/images/green/OP10.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/assets/images/green/OP20.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/assets/images/green/OP30.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/assets/images/green/OP35.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/assets/images/green/OP35产线 .png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/assets/images/green/OP40.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/assets/images/green/OP50.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/assets/images/green/OP60.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/assets/images/green/OP70.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/assets/images/green/OP80.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/assets/images/green/unit.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/assets/images/green/zhuozi.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/assets/images/green/产线总.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/assets/images/guang.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/assets/images/huan.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/assets/images/prodline_all copy.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/assets/images/prodline_all.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/assets/images/prodline_all1.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/assets/images/quan.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/assets/images/quan2.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/assets/images/red/OP05.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/assets/images/red/OP10.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/assets/images/red/OP20.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/assets/images/red/OP30.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/assets/images/red/OP35.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/assets/images/red/OP40.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/assets/images/red/OP50.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/assets/images/red/OP60.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/assets/images/red/OP70.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/assets/images/red/OP80.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/assets/images/red/unit.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/assets/images/red/zhuozi.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/assets/images/title.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/assets/images/white/OP05.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/assets/images/white/OP10.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/assets/images/white/OP20.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/assets/images/white/OP30.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/assets/images/white/OP35.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/assets/images/white/OP40.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/assets/images/white/OP50.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/assets/images/white/OP60.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/assets/images/white/OP70.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/assets/images/white/OP80.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/assets/images/white/unit.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/assets/images/white/zhuozi.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/assets/images/yellow/OP05.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/assets/images/yellow/OP10.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/assets/images/yellow/OP20.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/assets/images/yellow/OP30.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/assets/images/yellow/OP35.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/assets/images/yellow/OP40.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/assets/images/yellow/OP50.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/assets/images/yellow/OP60.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/assets/images/yellow/OP70.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/assets/images/yellow/OP80.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/assets/images/yellow/unit.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/assets/images/yellow/zhuozi.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/assets/images/z1.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/assets/logo.png 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/assets/t.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/components/Content.vue 846 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/components/Content备份.vue 658 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/components/EquipmentRunStatus.vue 219 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/components/EquipmentRunStatus2.vue 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/components/EquipmentRunStatus3.vue 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/components/EquipmentRunStatus4.vue 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/components/EquipmentRunStatus5.vue 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/components/ProdlineHealthy.vue 192 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/components/ProductionCompletionTrend.vue 333 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/components/ProductionStatistics copy 2.vue 458 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/components/ProductionStatistics copy.vue 277 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/components/ProductionStatistics copy1113.vue 325 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/components/ProductionStatistics.vue 278 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/components/ProductionStatistics1.vue 303 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/components/ProductionStatistics备份1113.vue 458 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/components/QualityDataTrends.vue 150 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/components/img/t.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/src/main.js 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/vue.config.js 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yiqi_screen_3d/.gitignore
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,25 @@
.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?
yiqi_screen_3d/README.md
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,28 @@
# edo_screen
## Project setup
```
npm install
```
### Compiles and hot-reloads for development
```
npm run serve
```
### Compiles and minifies for production
```
npm run build
```
### Lints and fixes files
```
npm run lint
```
### Customize configuration
See [Configuration Reference](https://cli.vuejs.org/config/).
前端开发分辨率:1920x1080
现场分辨率不是1920x1080,x轴被拉伸了2倍,由于不在现场,无法查找具体像素值,所以只能按照1920x1080的分辨率进行设计。
yiqi_screen_3d/babel.config.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,5 @@
module.exports = {
  presets: [
    '@vue/cli-plugin-babel/preset'
  ]
}
yiqi_screen_3d/jsconfig.json
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
{
  "compilerOptions": {
    "target": "es5",
    "module": "esnext",
    "baseUrl": "./",
    "moduleResolution": "node",
    "paths": {
      "@/*": [
        "src/*"
      ]
    },
    "lib": [
      "esnext",
      "dom",
      "dom.iterable",
      "scripthost"
    ]
  }
}
yiqi_screen_3d/node_modules.rar
Binary files differ
yiqi_screen_3d/package-lock.json
¶Ô±ÈÐÂÎļþ
ÎļþÌ«´ó
yiqi_screen_3d/package.json
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,55 @@
{
  "name": "yiqi",
  "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",
    "animejs": "^3.2.2",
    "axios": "^1.6.0",
    "core-js": "^3.8.3",
    "echarts": "^5.4.3",
    "lib-flexible": "^0.3.2",
    "moment": "^2.29.4",
    "scss": "^0.2.4",
    "scss-loader": "^0.0.1",
    "vue": "^2.6.14",
    "vue-seamless-scroll": "^1.1.23"
  },
  "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-service": "~5.0.0",
    "eslint": "^7.32.0",
    "eslint-plugin-vue": "^8.0.3",
    "node-sass": "^9.0.0",
    "sass": "^1.26.5",
    "sass-loader": "^13.3.2",
    "vue-template-compiler": "^2.6.14"
  },
  "eslintConfig": {
    "root": true,
    "env": {
      "node": true
    },
    "extends": [
      "plugin:vue/essential",
      "eslint:recommended"
    ],
    "parserOptions": {
      "parser": "@babel/eslint-parser"
    },
    "rules": {}
  },
  "browserslist": [
    "> 1%",
    "last 2 versions",
    "not dead"
  ]
}
yiqi_screen_3d/public/favicon.ico
yiqi_screen_3d/public/index.html
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
<!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>
    <%= htmlWebpackPlugin.options.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>
yiqi_screen_3d/src/App.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,38 @@
<template>
  <div id="app">
    <Content />
  </div>
</template>
<script>
import Content from './components/Content.vue'
export default {
  name: 'App',
  components: {
    Content
  },
  mounted(){
    console.log(window.innerWidth,window.innerHeight);
  }
}
</script>
<style>
    html, body {
      font-size: 79.5833px !important;
        width: 1910px;
        height: 1070px;
        /* width:100%; */
        /* height:100%; */
        overflow: hidden;
        background-color: #00083b;
        /* font-size: 80px !important; */
        /* background-image: url('~@/assets/images/bg.png'); */
    }
*{
  margin:0;
  padding: 0;
  box-sizing: border-box;
}
</style>
yiqi_screen_3d/src/api/api.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,86 @@
import axios from "axios";
//不同环境下的地址
let baseURL = "";
//node中的环境变量process.env,也就是我们新增开发、生产的配置文件
// if(process.env.NODE_ENV === "development"){
//     baseURL = "http://localhost:7788/"  //这里可在vue.config.js做一个代理【代理代码见下】
// }else{
    baseURL = "http://localhost:7788/api"
   //   baseURL = "http://192.168.216.203:7788/api"  // çº¿ä¸ŠçŽ¯å¢ƒåœ°å€
// }
// baseURL = "http://localhost:7788/api" //本地测试环境
//创建axios实例
const request = axios.create({
    timeout: 5000,
    baseURL:baseURL
});
//所有请求设置了授权头信息【请求头中设置cookie信息,一直携带,判权】
// axios.defaults.headers.common['Authorization'] = `${cookie}`;
//这里是设置发送json格式参数
axios.defaults.headers.post['Content-Type'] = 'application/json';
//请求拦截器
request.interceptors.request.use(
    //发送之前想要做些什么
    config => {
        // token是否过期,是否重新登陆等等
        // æ­¤å¤„可修改一些基本数据
        // config[baseURL,[data,[headers,[method,[timeout,[url]   ç­‰
        //        åŸºç¡€åœ°å€,请求参数,头部, è¯·æ±‚方式, è¶…æ—¶,  è¯·æ±‚地址  ç­‰
        // config.headers.Cookie = "110110110110110110";
        return config;
    },
    //方法返回一个带有拒绝原因的 Promise å¯¹è±¡ã€‚
    error => Promise.reject(error)
);
/**************移除拦截器****************/
    // åŠ¨æ€ç§»é™¤
    // const me = axios.interceptors.request.use(function () {/*...*/});
    // axios.interceptors.request.eject(me);
/***************************************/
//响应拦截器(对请求结束后进行一些操作,,例如:统一收集报错)
request.interceptors.response.use(
    //请求成功
    (res)=>{
        let code = res.data.code  // èŽ·å–åŽç«¯è¿”å›žçš„çŠ¶æ€ç 
        if(code===200){           // æˆåŠŸ
            return res.data  // è¿”回里面的数据,在使用这个axios时,获取到的东西就是这里返回的东西
        }else{
            return res
        }
    },
    //请求失败
    error => {
        //可根据不同的状态去区分不同的错误,达到不同效果
        if(error.response.status){
            error.response.status === 404 ? alert("请求不存在!!") : alert("其他");
        }
        return Promise.reject(error);
    }
);
// //封装对应的get请求
// const get = (url, params) => {
//     return new Promise((resolve, reject) => {
//         axios.get(url, {params})
//         .then(res => resolve(res))
//         .catch(err => reject(err));
//     });
// }
// //封装对应的post请求
// const post = (url, param) => {
//     return new Promise((resolve, reject) => {
//         axios.post(url, param)
//         .then(res => resolve(res))
//         .catch(err => reject(err));
//     });
// }
export default request
yiqi_screen_3d/src/api/common.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,45 @@
import request  from "./api"
// èŽ·å–è®¾å¤‡çŠ¶æ€
export function GetEquipmentCurrentState() {
    return request({
        url: `/AccessInterface/GetEquipmentCurrentState `,
        method: 'get'
    })
}
/**
 * èŽ·å–è´¨é‡æ•°æ®
 */
 export function getQualityData(params) {
    return request({
      url: '/accessinterface/GetQualityData',
      method: 'get',
      params
    })
  }
// èŽ·å–å®šæ—¶å™¨æ—¶é—´
export function getLargeScreenFrequency() {
    return request({
      url: '/accessinterface/GetLargeScreenFrequency',
      method: 'get'
    })
  }
//   èŽ·å–ç”Ÿäº§å®Œæˆè¶‹åŠ¿æ•°æ®
export function getProduceCompletionStatus() {
    return request({
      url: '/accessinterface/GetProduceCompletionStatus',
      method: 'get'
    })
  }
  //   èŽ·å–äº§é‡ç»Ÿè®¡æ•°æ® http://localhost:7788/api/accessinterface/GetCurrentProduceInfo
export function getCurrentProduceInfo() {
    return request({
      url: '/accessinterface/GetCurrentProduceInfo',
      method: 'get'
    })
  }
yiqi_screen_3d/src/assets/bg1.png
yiqi_screen_3d/src/assets/images/1.png
yiqi_screen_3d/src/assets/images/10.png
yiqi_screen_3d/src/assets/images/40.png
yiqi_screen_3d/src/assets/images/6.gif
yiqi_screen_3d/src/assets/images/8.gif
yiqi_screen_3d/src/assets/images/9.png
yiqi_screen_3d/src/assets/images/OP35.png
yiqi_screen_3d/src/assets/images/bg.png
yiqi_screen_3d/src/assets/images/blue/OP05.png
yiqi_screen_3d/src/assets/images/blue/OP10.png
yiqi_screen_3d/src/assets/images/blue/OP20.png
yiqi_screen_3d/src/assets/images/blue/OP30.png
yiqi_screen_3d/src/assets/images/blue/OP35.png
yiqi_screen_3d/src/assets/images/blue/OP40.png
yiqi_screen_3d/src/assets/images/blue/OP50.png
yiqi_screen_3d/src/assets/images/blue/OP60.png
yiqi_screen_3d/src/assets/images/blue/OP70.png
yiqi_screen_3d/src/assets/images/blue/OP80.png
yiqi_screen_3d/src/assets/images/blue/unit.png
yiqi_screen_3d/src/assets/images/blue/zhuozi.png
yiqi_screen_3d/src/assets/images/border_left1.png
yiqi_screen_3d/src/assets/images/border_left2.png
yiqi_screen_3d/src/assets/images/border_middle.png
yiqi_screen_3d/src/assets/images/border_prodline - ¸±±¾.png
yiqi_screen_3d/src/assets/images/border_prodline.png
yiqi_screen_3d/src/assets/images/border_right1.png
yiqi_screen_3d/src/assets/images/border_right2.png
yiqi_screen_3d/src/assets/images/edo.jpg
yiqi_screen_3d/src/assets/images/green/OP05.png
yiqi_screen_3d/src/assets/images/green/OP10.png
yiqi_screen_3d/src/assets/images/green/OP20.png
yiqi_screen_3d/src/assets/images/green/OP30.png
yiqi_screen_3d/src/assets/images/green/OP35.png
yiqi_screen_3d/src/assets/images/green/OP35²úÏß .png
yiqi_screen_3d/src/assets/images/green/OP40.png
yiqi_screen_3d/src/assets/images/green/OP50.png
yiqi_screen_3d/src/assets/images/green/OP60.png
yiqi_screen_3d/src/assets/images/green/OP70.png
yiqi_screen_3d/src/assets/images/green/OP80.png
yiqi_screen_3d/src/assets/images/green/unit.png
yiqi_screen_3d/src/assets/images/green/zhuozi.png
yiqi_screen_3d/src/assets/images/green/²úÏß×Ü.png
yiqi_screen_3d/src/assets/images/guang.png
yiqi_screen_3d/src/assets/images/huan.png
yiqi_screen_3d/src/assets/images/prodline_all copy.png
yiqi_screen_3d/src/assets/images/prodline_all.png
yiqi_screen_3d/src/assets/images/prodline_all1.png
yiqi_screen_3d/src/assets/images/quan.png
yiqi_screen_3d/src/assets/images/quan2.png
yiqi_screen_3d/src/assets/images/red/OP05.png
yiqi_screen_3d/src/assets/images/red/OP10.png
yiqi_screen_3d/src/assets/images/red/OP20.png
yiqi_screen_3d/src/assets/images/red/OP30.png
yiqi_screen_3d/src/assets/images/red/OP35.png
yiqi_screen_3d/src/assets/images/red/OP40.png
yiqi_screen_3d/src/assets/images/red/OP50.png
yiqi_screen_3d/src/assets/images/red/OP60.png
yiqi_screen_3d/src/assets/images/red/OP70.png
yiqi_screen_3d/src/assets/images/red/OP80.png
yiqi_screen_3d/src/assets/images/red/unit.png
yiqi_screen_3d/src/assets/images/red/zhuozi.png
yiqi_screen_3d/src/assets/images/title.png
yiqi_screen_3d/src/assets/images/white/OP05.png
yiqi_screen_3d/src/assets/images/white/OP10.png
yiqi_screen_3d/src/assets/images/white/OP20.png
yiqi_screen_3d/src/assets/images/white/OP30.png
yiqi_screen_3d/src/assets/images/white/OP35.png
yiqi_screen_3d/src/assets/images/white/OP40.png
yiqi_screen_3d/src/assets/images/white/OP50.png
yiqi_screen_3d/src/assets/images/white/OP60.png
yiqi_screen_3d/src/assets/images/white/OP70.png
yiqi_screen_3d/src/assets/images/white/OP80.png
yiqi_screen_3d/src/assets/images/white/unit.png
yiqi_screen_3d/src/assets/images/white/zhuozi.png
yiqi_screen_3d/src/assets/images/yellow/OP05.png
yiqi_screen_3d/src/assets/images/yellow/OP10.png
yiqi_screen_3d/src/assets/images/yellow/OP20.png
yiqi_screen_3d/src/assets/images/yellow/OP30.png
yiqi_screen_3d/src/assets/images/yellow/OP35.png
yiqi_screen_3d/src/assets/images/yellow/OP40.png
yiqi_screen_3d/src/assets/images/yellow/OP50.png
yiqi_screen_3d/src/assets/images/yellow/OP60.png
yiqi_screen_3d/src/assets/images/yellow/OP70.png
yiqi_screen_3d/src/assets/images/yellow/OP80.png
yiqi_screen_3d/src/assets/images/yellow/unit.png
yiqi_screen_3d/src/assets/images/yellow/zhuozi.png
yiqi_screen_3d/src/assets/images/z1.png
yiqi_screen_3d/src/assets/logo.png
yiqi_screen_3d/src/assets/t.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1 @@
export let zhu = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAFUCAYAAABfgt4ZAAAAAXNSR0IArs4c6QAAIABJREFUeF7tXW2sZldVXufe6Z2PNp3OV4mABUsjJtAElAaVPyTAL4p/NCRYPiwoCqVCib9INDUa/EFiS+lURS0U2mCM/mr/FRJ+KNFShVCIwdTyoYjpzJ3p1HY+7sy9R/a+e+3z7Gevtfd5773jTJPOn7nv+56999rPetaz1j5nn3MGWfDfK78xXjOck5uGJblBRrlBRF4tg1wnoxwQkStFZL+ILInIhoicEpHnZZCTMsoPReS7MsiT44Y8Oe6Wr3//9cMzCw4vQ7fB347Lr3yFvHV5lLeNg7xZRF4nIsvddv0D1kXkm8MoX10f5NHv/0C+LO8cwnfNf67BP/P18dXDhtw6DPKecZSX9jra7u/DIP89jvLFcUk+972bhu96/VUG3/D4+KpxXT45ivxacu12bVm0/cYg8nfDsnziyTcM/8GNJ4PHcbj+MblDRP5YRPYuOspFOP7MOMjvf+8m+VMZhlH7jwb/wuPjFSfX5YGfBMW7LsLA2+3ySweW5X3/8obhfOgoGnz9Y+P9Msqt2+35Ira//6k3Dh+IBl//z+PbReSRizjYTnX9jqfeODwyXP9P46MyyFt3qteL1s8oX37qF4e3BYSDuF990QbauY6ffeqNw/4XoMEvQErc/BNle3jnPHfRetoMuheCrI0b8tD3fml4d9bhkDiOnZJ/3XWVvPai4bPFjteOi5x+Uv7oxEeHP8gGy53jyoH98l97XiZH9vy0yBCKw0v8b9wQOfufImd/FA05dvKUvFzuHNYiJQ7cPd4s4yaPl/aI7H2FyMqhS2fx+VWR0z8Q2Ti7mYpjITHIO05+LHH4wF3jPYPI7eEHrYaW9ors/imRlcMiw66Lb/x4QSS4/9yPRdbPgKE69Cj3nvz4cHu07+Bd4z+MIm9Cs3IZN4hccY3I8n6RK64WWQ5rin7Z35/hKLL+vMj5Z0UunBK5ENYeuSbbbK4fI8qjfO3kx4c3xaEP3TU+vSFyZCL11EBdkv/fJbLrKpHlfSLLe0WG3SJLK5teCNxHbwTUAhfD/xtrIuO5TfTWT4tceG7zex0TvYuGguHHTt4xXKsInxORFZpggZKCWsyawObftIPMw/RF7zO7Jx2/dvKOYfdm0N01lgUytbAmYk1A0UCvVK41jMYJVB5N1Ajfn7hjGLLBPGvmMxvNBlv8VzePg0hYM/S8U9hgtCkMZi6hgZULhxgE+V+LLj3vxL4ZVvKC/nxSET6YKGFxMBsTZrwZrZM2Jg5jwIQf82TSSNhHBCYNxKBgBFa2DCInP5YocfDucdRBUM7QuPh9MgaPiX4GI02w6EtrAhFlDGKj35LDqVNtmJEIxiCS2JGBuk6MhTT3oR5SA7FzCLDIe/2c4J4MvnsT3zzz0KlOIHyfISVxT99XGpoG0D4QOjfwNCiToRih6v2Jw8Hg0ADdAkiGgYsgg8kUE0XUNJg0NDFIlVoEhKKWv4bZhfELgyNfGUlFkBAvFMUYvOoLjUbP4aRo/AhQkrYYI2IFHRzAiFuuxE6R+2bwaBwAXTLoAIgaZ+WBrBIH7h43xwMyxs5glir+WPgUx6QRTKmC0XHiGJg5yJLx2LfaMRl81zhGniaNROPwO8rYxYQ0sDgANdIL1FENnOIP+1HsCh1mmhm0K3SSkSqkr64Uq4oUPcGTQWCw34oSGVlwLyJUdAw/cLuCXRxkqW+Mb2JjURZnXR9FTmimCxzWWcX+0yDcqXacoxflouhgwqiQKtDaYFVFF5XPnBAmpahUAmeZ3UCqUXAY0q2m8IpGkARyZkqGqhrkKo4yH/ap9rgIm4Yl5AtR59qiFJqiG1WBCAxpbJTQlFFzsLFiBR3+KBY/GK1QV2BllY0FRZny+dSBShLXFWqUajw4aXNyrIn0+QQarISqAgj5hCgnBKyMVAQnhDlreZE4SCpUTlGassEx6LA6QjKCkTnlkoZ5CUT5WaT8SsxrHlXJJaGfOXzw00klUgGUL4FgkWNNKHWUVYVrD7Ilo8YlK08CvIeTLRDO5SRQwCsxEeAoT5b+kZZbwLIytRJI+G0y+NOplsBeFW1Mo5DnncLOs8v8Pmu0qgQcZWXSrBIHEiU4aou6QDW5gxwqASJoUldXxpCocBIFfmFN97sqa5/eXNLhCgGNrQamfJ01FLKX0oSTCmt8oQbWrEBCJ1kLCCO8oH/ZcKMmQF3O4o+pHRJLBQCjCxyzJhECu0DYQrHIOkoFoobqJA6CWY3PnuRlGOlzDDhMFIz2IHICKYECzQtAXdNx5sptMLVqrYBc58yI60cI7mwjG548NaXme3CJWVbXBVpqBEpZ6twqMbHAyZ7g5RAqD6dmGC/0lSkRVKJAz5MydCMv/8mFOWWTVHHxVMVZIU3lciRTIhpsLb2NqC14bVXhSf05yHoSF4dqShNy+J7NU1VZ1lrLAUouhbo00kY1AWtGnjfS91PQEYdNdBopuANMYxrGTySfeIRrsJmV8FTWdi5zULlqzsZKTKGWyLIGCHc8tSW0iiJ/bg9kdGg2GfyZzXNrnhYXpy8NQa+SA6V51Ovc3F3hGiedk22lwRqlLYP0N17usn5aGcuigoFiFcTg8hO3a/HzGVAJlBdEHTTYRYyPSRKnklUkF65P9Vhr8mlibYR7BS9TSNG3Jsa/eaLcEe8J4RB06DKu3Pg3NABpYml0T3LmBmE485NVIgQdc9gyequC69QIc23V42yEPXe1egd6xJVyY41ndjNTS4ug683WrO9pICvo5/bbOy783jXYWYTM6XtLx/Qm3DV4S6NSo54RlrRbCuciPHeARSfD/W5lnALhrbp/bgLzkFxk4pcVJTwa4IS6BntuW8SdO0GFWoc1cVCh1Fp1L+LKHh2QjlYSbRqsrsHE1yqqtmK41WZOLFSUmOu+ucf1JMsykieD6K9qeXkolJe0BOq50UMJizUum9FrrfZ6lYop2Q067HROoM1CPh3UoxmjH1b0qx/RAv7ezSWSa5TTO248slyZETV8X9RHfNKQtjtoXGVKHEwqke2CHU3FXglEh84+mtwDAvL1OGuLVQUAATVRIiAMF8YR7WoSPV9SBoiHI5wQLJaBVffp+HBsFXQRJWgRxyF3FYfgsbhRKZ2t1OsfEQ0q4vMVJh1jhj6eyBz+zHQysJILVnVDBsxgg/PIHO0VigWh094jusYS5jMZrJRIs9TzbLxoRsRwHnmSM3aWKNg9RdGVSzwugVQZHO3lq+x4TU3P5TaW89USCXeYgNtROCyKxyFouVUbDFfai5yuxAcPFDs2jKVS0b4MDfNyihfLSH/bYA0YQqPLQwoak6epE0s+PR1XIQi0KA1G7bX305U7BPEYh5AFz3sqYFwHxBQd+ioznZUIuBNMHMmALH3KOfxeT6rT3swi8HhWJKt55yuqxKF7x6hrxd6IFAnFjkBAibfZYMeshCzDld7jji7KBfoxoL16m9YSR+F0KzTIA3MioCuedA0qXnrQKI/GpsnnqPd2GrIe4ybpwuCgw6wtvPqgzuK84KJ268QlIswXf/BqUxYbuo6nHikQjvbwfgkMFLjKhKmWLzrySU09FpUhdwtyWagQXpxUagYOZ0popgPy8fm7jCCeRwOxzQWOtRURddhIJJjNckKhfcYxNavBh46mFYeRv2MgAh081/MEUQnyvIwEwzQoMiBnOgw6pYQax1tqcxCBi4qAxrKRNBft5ARErKu0vsh0hUoYwm7EWVEltrITgRkPrYxlzaUUrv3rYROHj05baCwECjfBBw4wnEA0mO44KGQtuYd1vqAcJqqw/eDDSYcP3TfdZZCFGhAxUyyik/7Og4FrvBtO4mS9DdbKXbj6Go6fDE5Bh5zMY/J9GbARo9is4dQfeQMfn0aAZIK7snkLGgZv1uGAMLO92C5uDaYaChyqMhoKTDpeKVDtL1IvkXdQoVYrStB9GZmTBYk3v0VdjmMRYnoQ0iRTy5FKlL9ik1PqezI41BJA3kqGEoo7el8GBAZmWYyhCAyscqbEESihHMTCRFFLP5rLdeiQb6tQpSjkT6mRviwym6WjYHRG+OB948iLPhzc0lTWYN2fZlIDFcczmCaAup11WDkcDaZO+VpbnjwMWLRBlTB2t3DqRg3vJZnK4KgSjWURZpwKWQMZDMocSNywszA14lwKSmB/SCUOQEYVDcIEY03M6xePZbQx85WZjoPA32eBgpLH4pTuxI+7kJ0z2UKHW7M0vFkZygZW0uhQp0Uf7rOiBLqb9ZCjFgfyaGPxkCnUohTSIfRVypoDY0vSisrKoFCPx3O9quOUqZm2dvUMZeXwZMqiBiLPnvQkbhbCaEQPDXYfyxkGVa9fSylCf1klQuLQmVqdeSh5ytBCdTsyWBjsyZAVbBbd56TvOXprqYa2q2Stha7nxizKDHe5DXlaXeAmVpAlk1J0r5Orwz3dzd5IAzYDVO/4YnjTZ+Vicc3DumEFZU1rCUYrG8Jhrbf7eJYaaBfpEbeRW4FgtQ/n1j4Ei9ACVSvpYyd0so/Py5k3YKX22fW8+Z+yTHE/XfLkVEv8WWPfGgluHNBDyBJYmigHlakojqi3EeYoSz3nmbOwWp/BbTrR/BVXOxh1VjZhDvMdW27g0UTyR52QtRkaJpv13roHX9sy7MlzE8KBEuwGziQ4g1Zp1hBpx46iRfaEkRhKg1vZYJGsAMfOMbAlofxbYbBl0yJ2cuez2lLiKKiLSSMdVyNs3EXLub+Sv5bmQiDNmgAqElE0fDyRdVhljaOaJA3v6KpcqVkP9dVIOJxA/F0lmyOgptsc5mUHW8ZJBf3Imsuwwu8V4jhhFWsK9NXf0Uz353TZixXB0kj8zpqkpbM8uV6iIaXqqwQ28JC30rhHfCeDWdtpNvmQOlIdrhCmfG5KjpeRWMMsqnj6PVOiSkqgdWyU58qd0u6WGMNkJoODSrSy1yKatJVsMbN/H+Fe+pk5QK+bRX/fusGLjtSTSlIDr/udN7hlmKXfLUO5r7Di+G3V4b+wtx/MAnIOelZHvckZ1eOEMBrsJQHVRS8hWBmxVWewKnmaD56ZEA6ZznIP63Ir9VrqYKDUfH6OUQNj8igN9moEKwUjyotkrzlJp+FJnxIeeefIWU+HZ2a16pbhsKYrgg5nxgZTTp8VjHMOmgMA9FOrBAdUbxIe56zvrdTf6t+YcI3wgh3MAXEnj7EN3okRUBq3qtNqB7RfzGDPiDkJoGd0r/BKkrv6Qc10n52R6RZZVaCXLGO8JGGgivmhRLjVsXZkJQ7LOM5wRl0Qm1mJxcqY6bsJ4ZCacXZW8PWKeguduXSxFIQTVtDhghJsJGuk0YG7xaqFqLcMY+9ZslYZjK7nVN3T3FZy8bKbctkbl0BsI2zJ29zMNPc4HsPzqsthqzrrZa2d0O2ZfdQIz2x4qQ570eCLjfyLCL+IMCHwIiVepMSLlJjDgVbh77V3FsPzg26RNRrWI70JLTKZcDLwt3SJ9JfGo5+wtGutIKwy1KttrRLUO/FiVG41wr0Zt8618Yqj55XWRK22TYQZCUYYC+/eCcIWLdho7depi0tKeOs4XhVY669WW8sIa7ll9UFjTZQIHPZWGK1ljDdwb3Bv0l67NE6N8Fz0OCBbq5LOssdljLHMqlUC9a+3LvMWlhdxSdVGuKeh2/m9d+qKeZ8I6xs8p8O5Bm+3L2i/NYTnGGBRq3f6igEwxplv8FwjrWC0dBpdzprOk4WEtPqbmpr/aoH9EtapJj7vxplKB20lIDzGqUdshOcYZAUFq4MlZ56mexOmPieEQ+Lw3O7JVOtk4SLJxuK2g/aEsFLCMs7r0EJFOYwBZHmMKeKNi3wOp1sLDluz6kmXVSTN9cicvmmytsGLdOQFyk5mO9ThCuFWOu6l6t5Et/I7xdXWEJ4h8PGQOckDNHbOzqrVD6AOs5hvBZFWQrCM46Rh2QA8LhFmWetlN+94R/QL2USO25V4+eJJrYcrhFuu5EEWMbjVlmWvsSidEP5rYw88utCiB9cIniyi9LF2M00s3oO2lwZ7i8le4vAmYyFncZyXWQ01moIuIDxnBWG5i5PHot7wAlWRNYMOKWEFxCLZazt63QGtjzCi5RU7jMRW5XBGu9LgGQ1M2sxp1zqmJ5/Q1jZ4gQ62a2tu39Pu9Pvq+zXTKYc9C+ZOAo/ztHdOguKY0VVzThz3N5ZIOAlGgg1sLZVY163S1EvfSUlqhHtItn4n481HTFpq4yUWwxOTwYrwHIMwG0EWcvnsyaSn6R6twoqj4DAjRE8zqPZMWqmYsxYfw0Z6tYsjlSXCiBan1blyAO6tnNVJKD02BhNqg410GDsCt84J8gjcVp4Hz6CRx7LBh+9PLxNuZTPnKUdd8FOfPQQxNKw6rEZ4CzXAXLR7iQ6pzsqGY9iU6EJWHjBXNCyELVQtEJQpTYPnunDB+RXZuLU6sn7bNsK9Sc2dzNx+KoN3gpOWtM41vHecifDc2aJh/DeXH57rtR2qqVeOBLuO50x3f/mcH57pdgLLQ82TMZ4sSnOtw+loTufWOtRCzYv6FoIeONZEFwo6zNaslT3utSjTa7uwDs9B2xL+OYYs0q7i8CKoLRKYrX5bycRqt6XEUfA0fYh04We3e7PCNlpY4bNgG88qbHOYBqyo0fkdo7tjez416z5zPsFdqkTDPx6PF6IGIBsVBp93TI9KLfJ3mnnJ4c/RQw4trSFtQjQKw+FJ0cXASQeL9+fyg1/wUQ/4COFEndVbdZmvBqP+AALVY/0xvJ3jiklgTcyLTn2gJyCpb87E5wXGByZngzXTOSktf53EuEifuCyCB2wWTkrtYj+ce5PBFeeN+rxEGFxuvRg6tsdlj7pYvcLPZqWnglYvQ8cZpb54KYaTCH8XCMdxiTexAQaLke5yG+Q4GJMfANNZ43Fax6H07+MFhzVSyRXFgMmQwkjms/OwxJ6iqFEMPBqeET4cgo7+8UKQ7CqONmhpPZI7tkFaWXJpODGPVXOYrVZE0/+tulabIlKqt/p+BOYktsFjTTOCSvwGyho/UBZ52NBLfNxO9Xh1neiMrInPJtY4LhQQDQ6UmFXfMhHpwVnF00WBJ4Vaas3BmS4db/Whj/jNQacczkZXfp24kbWU/FZEteo1SB/GcvwbH9OuiYUCB6U0puaCEipfzlPys5vgGe3ZZSCHFS/hC3zjNT9sOVd7mDmVUmlCmcOHP2+cqqJZ53QJT9jnN1/yQ7fyA2HBY6y30SaoM/LT0fFp++mQwuDYjvM8os5vwaaR9fE2+TE3+PIcSD6cjPBx1OpFnUQBkkcJ7zwwFzPxs1UjJMTwlQFZslAm9cUK2IfzAFpl1YRwSBwQNdbpVTMOIZKsJMDazAmG02/xfG1DSicd/jw9Bx7eI6CqUDy9GRIJPlUcn86f2QWTYumMBlMp4LAy4jmpBBhs9FH0yR3qj1wLkB2bcUXFfaHPCILxLOTQvkIYXcY53TLIlbDGI/61DU4cJZ2/R+k8/j5NzZ9PTxblhxfWDzPKD7sqkgz4mpMhT8pKMCprHmCxzSBSGYyyUixTih+mJb2lqaoe+bUYaTKc6fiNPIik93S9bHBIHBEJgqd4cj7/rA+5B38W7+6g5ZKihGjiypkL/ewJmOmqUiIaTLm9kKn0IbY13pLGaObA1XbwQMMisYBmY2TndV/KqppcssGHHoA3AIKl2eX4fi8Wd+MZmEonNUKLmJzViKxc1OfApOw6yZoaDFKQ++QX0uibetKx1ptR3EAztK54iU6Rm9NrAdJ3YZxJ1oLBUNTkFx/AcygxDSNy2TgqVor79sFDmfIUhUo3RhedMXH4ASjg6a06OdPpTIFXqKmcul0FwXoCBVgTR7LQSvUFh9UwrSl6BnAdYIxdvOmBU3srBTMQemxlsIVYlYppHyhnKUam5wXLOAuscNykw4kSVm63UqmFTi/l9gyfk6pnGQxZt9hhO8cArj88b7SOwzaFwS3XeEabFZn1dFwNKDqVYBnqIb0wJTx+sxq0qjyeYM6IAKN1jP7cpATqHyYCSw0sVy/ifm8iSUlzV1O1polj5kwtKrQCdu4kW+hWlOjJy1wUW8ZZ9a6p304cmEHnDdiSnTlJpIey8plpYKpEqNa84OGBPLfNCag5Rlue1km4CM8dfBHje8ZSLRQPZ9mbRYlWIKA+t1yZUeOH1TeC3MqmsxOHpcG9IGy1MUGg5RleCtafivIyL5H03AYsmXhVqwGSXWbVkvU5ksnHrXcZoOiDrIQgW31vWuYfTjo8F7XirCWTE1ciFnEZSeUS8wsNT38fdw1esFMvkZiBBn3ntV86c9rz2MThLxi3RcBbVvPA5Pq8rIEI4bc88Bv9qtOyhDBOgs+71Qgb65LCKKpsop14ncNwa24PxI/fcQmIgQFvhMXxa4SZT5zCcMVM1VGxtEeNa9WLyXWZUpaWwZgTwkoJz2ArGvG9uHMq8GQVXhIw77kjpPGY2uAWJTxhbdSGFh34Uem9DIjDTrIWEG7845MlzUE4xxL6rcwZ+20cUCI8W4QNc2fwtGrVsdySyozwoS9MlwzmumiR47qozuzMR7iRfbY8uJWMrCzZIGfb4N6sjQCNTeYapnz1xjHqk3kI9wzwfncKoupwDEqOBUoux9+jxc8XG/eE9pDW3yHJFBvmPLdbHnImqZ4rDeYs42WrdFwejwfegqsL1BlxAGKiBCOMM0UD0ve4mSnzNiGZB+/ocQaeUrz2Z+3gqjmcZlMMCi6v7uDi4zEtWUg5BY+56Qn7Sn/XCBOaerGFlaZwYSM147lmvNCCV0+L7614gf7toPOQaRU4RqYzqWGlXo0J2FpTXStOY2eDj3yxvGRQ6CmQHtfdrtptJU17VCLEa4QTAsipOYa1FKoY06CPl38sdkwGh2qNrmy2JBE76+UVa+A5baxjbISdRDFnkLk5xkzhMwboGtxyF1K7MJQGjh9Vv1vvhLZcSgYcf7em5gdn3iaMaRi0Lvfb4VFO2R6aHZQnhMFgVrWi+mpFF14AZ5Ib2VL7ZRuryUNfpax5/mffp8/uPZ+Ual2DOkVRtS85XKfL1VpAGP5lG611CtMCaBD/xESA229blT9OEgGCv8MEjimHi8QRDMKNnLDDKtrKnyF7VZv7OxWgopgnijEAyUS/LlWCA8bjq1FvFBvu0kCm8RAgFaWs4h0DKlCiUAmiROZIZxFnzgt2/cUxaf97E1G2Azw6GRzqYZqNFxMF13Ffj+UhY199VedqEOMtEzR4pgQibElg8Z1XRhoTnasM1ZhpDIfKNiVYxTxJ9YzCnVVOve4mRqYXy3dWicMgaxbSVrEz97hWWwan5eXw2yRrD9p74JPCtd8qa0WdXrJKv3kyi5LOMZO9Axm0MBgbVOtCliNPUfh7uMwVDSAI88eOu8yg4xli57GBMVixD82aRCsgLBnC7eo6QUhMx2+Bag2N0r9xx19hcDI+2+MYlvvE6MFMqjsNOYUb2yZDs8ngh6adgXHiuH8diYZbxKhmKADjcxKIPt3HEeeiWkzbzGMZAHQ8hghnioHr892FunwCclt3eemFFt6UF5vprRNOdGXDeJMp7PW0UzO613qRuaJAyFfiql9oMsBrIrgKAQStcxQIQsFhpUL839IhSrOWyGeqYkVHBvM8i0RD1R17sUBY3a/qwO8gj+PSZS+Vqmg8VVueUlnxWdw4BYhz0skcPpIyXXE7BF3ARpXIKpJ61MlgAFVIGtdb4hx19yxRkXNBzHQadEcemm7twai0GhVLE9JeVK84PpWZLB4m2tAJXqwMfxeyll3IqwR2EVRULK9RacAz1oIjqxFN1gMCj88GK8LKRdw/zDzKXKaJkEdZvKrXgGFzruo8GS8TBw1hBY1llFdCavtWP6h8FvJu0B1+qN5VpR2gypG0FupnesK4n8jrl0QmqysGbxF0zEcOCEt3mXeem63JeCrSOraiBLvPMhoRr8rQirmbXzA9LHXoUSL8XgQdSxInO0s82I3WBFqoWwA5STbSzww6L0haxnlZzUPNUxQrgNFpU7UGQcdebaVYCw2L1z09blEGPWQa3OJxT6q8CTCils72AtZMzb1gQIMtzrNkWZSwJt36zsx0QYdZTpgaXkAhWr3A7U0Sx7RoZNYSrLdeAWQdhwizrluAWMVQq0Byddjik/ddC3nWYGsSFr8tapk6jElBEWnpopcNcXKWm62JtMZTenQpoZ0skqZ7iLV46tIs/VAX8MYOGE/msjcgxPPlArCKgxK96Gm2p/1VavYo0ZIry/1WfcveKvicLMzrSuNu33A8Jo5zg8hKXoA6SMdB1tdl/bkzMp5Zk42za7JxZk3Gc+dlvLAusrGx+X/6N+xaFllakvD/0u4rZNi7IsOeFVnesyJLV+0V2bVcXlWjEzg4gUFk7elbht0RoMMPjU8PIkeQ+BnVcZT1U8/LhVPPyfqp07Lx/FlYIiMjF/x7GGTpyj2yvH+f7LrmKlm6+kpJZ87yvdOkKseO3zJcGw0+8uD4jzLILyMlNs6ck/NPPyMXjj0j49qFBa1Z/PBhZZfsOnKNXPGSa2TYs7u8gjFE531t9d3Dm6LBhx4c71ka5PZwVHDz2g+elgvHTy0+6g612HV4v6xcd60s7V2Z3potcu+xW4bbNynx4HjzMMjDaz9ejcaG6Vzyf0tLsvu6a2XXSw9tmjLIrxz/9eHhaPBLPvU/V57+37XVC6vP7r7khpIBu47slz2vetmxY7uHl8s7h7Vo8L7bnrh/lOHWy81YtWf56n3feO5Prv/5CPS+Dz3x9nFpeORyNTZLpIzvOH30xkeGfR9+4tFxGN562Rs8jl8+fd+Nbxv23fbtU6PI1Ze9wSLPnj762v0vQINfeJR44uZRhocvf0qkoHshyNog4+dOH73x/bm+kQ8+fsXelT0PyCjvugyR/psz58++Vz77hvOTwdHKcdh727d/T2TpD0XGvZfe8OHMT86O33nm3td8Cu9cqurv3R/+zg1Lw/hJEflVEVnDGcBlAAAAsUlEQVS6BIaHQubvN8bhE+fue82TPL63XpSVj3zr55bHpY+IRJoc/H8w/ISIfGl9HI+u3Xfjv3njuQbnBnd+Z2XfcXnLOG68RWR4s8jwOpFxefsTGNZFxm+KjF8dhqWvnD4sX5E7X7PW67dvMPWw/0PfOnB2GG5akqUbx2H8WRG5TmR42SBj8MKVInINNHlGRJ4fZTghMv5IRH44jMO/b8jGE3tXLjz2zN2vD78v9O//AKu5O3JDCZfmAAAAAElFTkSuQmCC';
yiqi_screen_3d/src/components/Content.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,846 @@
<template>
  <div class="container">
    <img alt="guang" src="~@/assets/images/guang.png" class="guang" />
    <div class="header">
      <div class="title">
        <img :src="require(`@/assets/images/1.png`)" class="imgTitle" />
        4GC三代发动机连杆线
      </div>
      <div class="left-text">
        <div>{{ nowTime }}</div>
        <div>安全生产:{{ produceStatisData.currentSafeProductionDay }}天</div>
      </div>
      <div class="right-text">
        <div>当前班次:{{ produceStatisData.currentTeamName }}</div>
        <div>班长:{{ produceStatisData.currentTeamLeader }}</div>
      </div>
    </div>
    <div class="main">
      <div class="main-top">
        <div class="main-top_ly">
          <!-- äº§çº¿å¸ƒå±€å›¾ -->
          <img
            src="~@/assets/images/prodline_all.png"
            class="prodline"
            alt="line"
          />
          <!-- <img src="~@/assets/images/9.png" class="line100" alt="line100" />
          <p style="color: white;"> {{equipmentStatusData}} </p> -->
          <!-- é¡¶éƒ¨ -->
          <div v-for="item in equipmentStatusData">
            <!-- <p style="color: white;font-size: 32px">  {{ item.equipmentCurrentState }} </p>  -->
            <img
              :alt="item.workingProcedure"
              :src="
                require(`@/assets/images/${
                  imageColor[item.workingProcedure]
                }/zhuozi.png`)
              "
              class="prodline_op325"
            />
            <img
              :alt="item.workingProcedure"
              v-if="
                item.equipmentCurrentState == 1 &&
                item.workingProcedure == 'OP30'
              "
              src="~@/assets/images/6.gif"
              class="box100"
            />
            <img
              v-if="
                item.equipmentCurrentState == 1 &&
                item.workingProcedure == 'OP20'
              "
              src="~@/assets/images/8.gif"
              class="box200"
            />
            <img
              v-if="
                item.equipmentCurrentState == 1 &&
                item.workingProcedure == 'OP50'
              "
              src="~@/assets/images/8.gif"
              class="box300"
            />
          </div>
          <img
            v-for="item in equipmentStatusData"
            :key="item.id"
            :src="
              require(`@/assets/images/${imageColor[item.workingProcedure]}/${
                item.workingProcedure
              }.png`)
            "
            :class="`euip ${item.workingProcedure}`"
          />
          <img
            src="~@/assets/images/OP35.png"
            class="prodline_op325"
          />
          <img
            :src="require(`@/assets/images/${imageColor['OP10']}/OP40.png`)"
            class="euip OP40"
          />
          <img
            :src="require(`@/assets/images/${imageColor['unit']}/unit.png`)"
            class="euip unit"
          />
        </div>
      </div>
      <!-- <button @click="flag=true">data改变</button> -->
      <div class="main-bottom">
        <div class="echarts-box border_left1">
          <div class="echarts-title">
            <span class="title1"> è®¾å¤‡è¿è¡ŒçŠ¶æ€ç»Ÿè®¡å›¾ </span>
          </div>
          <EquipmentRunStatus :equipmentStatusData="equipmentStatusData" />
        </div>
        <div class="echarts-box border_left2">
          <div class="echarts-title">
            <span class="title1"> äº§çº¿å¥åº·èƒ½åЛ图 </span>
          </div>
          <ProdlineHealthy />
        </div>
        <div class="echarts-box border_middle">
          <div class="echarts-title">
            <span class="title1"> è´¨é‡æ•°æ®è¶‹åŠ¿å›¾ </span>
          </div>
          <div class="box11">
            {{ qualityData.qualityType }}
          </div>
          <div>
            <div class="box12"></div>
            <div
              style="
                margin: 0 0.13rem;
                height: 0.13rem;
                background-color: #e6e705;
              "
            ></div>
          </div>
          <QualityDataTrendse :qualityData="qualityData.list" />
          <div>
            <div
              style="
                margin: 0 0.13rem;
                height: 0.13rem;
                background-color: #e6e705;
              "
            ></div>
            <div
              style="
                margin: 0 0.13rem;
                height: 0.13rem;
                background-color: #f14158;
              "
            ></div>
          </div>
        </div>
        <div class="echarts-box border_right1">
          <div class="echarts-title">
            <span class="title1"> æœ¬ç­/本月产量统计 </span>
          </div>
          <!--
          <div class="ring-container quan1">
            <div class="outer-ring"></div>
            <div class="inner-ring"></div>
          </div> -->
          <div class="quan1"></div>
          <div class="quan2"></div>
          <ProductionStatistics :produceStatisData="produceStatisData" />
          <div class="pie-label-left">
            <!-- å½“前班组实际生产数量 -->
            {{ produceStatisData.currentShiftProduceNum }}
            <span
              v-if="
                produceStatisData.currentShiftPlanNum ||
                produceStatisData.currentShiftPlanNum == 0
              "
              >/</span
            >
            <!-- å½“前班组计划生产数量 -->
            {{ produceStatisData.currentShiftPlanNum }}
          </div>
          <div class="pie-label-right">
            {{ produceStatisData.currentMonthProduceNum }}
            <span
              v-if="
                produceStatisData.currentMonthPlanNum ||
                produceStatisData.currentMonthPlanNum == 0
              "
              >/</span
            >
            {{ produceStatisData.currentMonthPlanNum }}
          </div>
        </div>
        <div class="echarts-box border_right2">
          <div class="echarts-title">
            <span class="title1"> ç”Ÿäº§å®Œæˆè¶‹åŠ¿ </span>
          </div>
          <ProductionCompletionTrend
            :produceCompletionData="produceCompletionData"
          />
        </div>
      </div>
    </div>
  </div>
</template>
<script>
// import OperationalAvailability from "./OperationalAvailability.vue";
// import EquipmentStatus from "./EquipmentStatus.vue";
// import ProductionCapacity from "./ProductionCapacity.vue";
import EquipmentRunStatus from "./EquipmentRunStatus.vue";
import ProdlineHealthy from "./ProdlineHealthy.vue";
import ProductionCompletionTrend from "./ProductionCompletionTrend.vue";
import ProductionStatistics from "./ProductionStatistics.vue";
import QualityDataTrendse from "./QualityDataTrends.vue";
import moment from "moment";
import anime from "animejs/lib/anime.es.js";
import {
  GetEquipmentCurrentState,
  getQualityData,
  getLargeScreenFrequency,
  getProduceCompletionStatus,
  getCurrentProduceInfo,
} from "@/api/common";
export default {
  name: "MainContent",
  components: {
    EquipmentRunStatus,
    ProductionStatistics,
    ProductionCompletionTrend,
    QualityDataTrendse,
    ProdlineHealthy,
  },
  data() {
    return {
      dataTimer: null,
      dateTimer: null,
      time: 5000,
      nowTime: moment(new Date()).format("YYYY-MM-DD HH:mm:ss"),
      // flag: false,
      option: {},
      myChart: {},
      EquipmentEnums: [
        {
          code: 1,
          color: "green",
        },
        {
          code: 2,
          color: "white",
        },
        {
          code: 3,
          color: "blue",
        },
        {
          code: 4,
          color: "yellow",
        },
        {
          code: 5,
          color: "red",
        },
      ],
      imageColor: {
        OP05: "blue",
        OP10: "blue",
        OP20: "blue",
        OP30: "blue",
        OP35: "blue",
        OP40: "blue",
        OP50: "blue",
        OP60: "blue",
        OP70: "blue",
        OP80: "blue",
        unit: "blue",
      },
      equipmentStatusData: [
        { workingProcedure: "OP05" },
        { workingProcedure: "OP10" },
        { workingProcedure: "OP20" },
        { workingProcedure: "OP30" },
        { workingProcedure: "OP35" },
        { workingProcedure: "OP40" },
        { workingProcedure: "OP50" },
        { workingProcedure: "OP60" },
        { workingProcedure: "OP70" },
        { workingProcedure: "OP80" },
        { workingProcedure: "unit" },
      ],
      qualityData: [],
      produceCompletionData: [],
      produceStatisData: {},
    };
  },
  watch: {},
  created() {
    this.getLargeScreenFrequency();
    this.getEquipmentCurrentState();
    this.getQualityData();
    this.getProduceCompletionStatus();
    this.getCurrentProduceInfo();
    this.dataTimer = setInterval(this.timerHandler, this.time);
    this.dateTimer = setInterval(() => {
      this.nowTime = moment(new Date()).format("YYYY-MM-DD HH:mm:ss");
    }, 1000);
  },
  methods: {
    // å®šæ—¶å™¨å‡½æ•°
    timerHandler() {
      this.getEquipmentCurrentState();
      this.getQualityData();
      this.getProduceCompletionStatus();
      this.getCurrentProduceInfo();
    },
    // èŽ·å–è®¾å¤‡çŠ¶æ€
    async getEquipmentCurrentState() {
      try {
        let { data } = await GetEquipmentCurrentState();
        let equipmentData = [];
        data.forEach((item) => {
          const res = this.equipmentStatusData.filter(
            (obj) => obj.workingProcedure == item.workingProcedure
          );
          if (res.length > 0) {
            // item.equipmentCurrentState =5; æµ‹è¯•
            equipmentData.push(item);
          }
        });
        this.equipmentStatusData = equipmentData;
        console.log(88888888);
        console.log(JSON.stringify(this.equipmentStatusData) );
        this.getImageColor(data);
      } catch (error) {
        console.log(error);
      }
    },
    // æ ¹æ®è®¾å¤‡çŠ¶æ€è®¾ç½®è®¾å¤‡é¢œè‰²
    getImageColor(data) {
      data.forEach((item) => {
        let result = this.EquipmentEnums.filter(
          (obj) => obj.code == item.equipmentCurrentState
        );
        // console.log(item.equipmentCurrentState);
        if (result.length > 0) {
          this.imageColor[item.workingProcedure] = result[0].color;
        }
      });
      console.log(5555555555);
       console.log(this.imageColor, "getImageColor");
    },
    // èŽ·å–è´¨é‡æ•°æ®
    async getQualityData() {
      let { qualityData } = this;
      try {
        let { data } = await getQualityData({
          qualityType: qualityData.qualityType,
        });
        this.qualityData = data;
        // console.log(this.qualityData);
      } catch (error) {
        console.log(error);
      }
    },
    // èŽ·å–ç”Ÿäº§å®Œæˆè¶‹åŠ¿æ•°æ®
    async getProduceCompletionStatus() {
      try {
        let { data } = await getProduceCompletionStatus();
        this.produceCompletionData = data;
      } catch (error) {
        console.log(error);
      }
    },
    // èŽ·å–äº§é‡ç»Ÿè®¡æ•°æ®
    async getCurrentProduceInfo() {
      try {
        let { data } = await getCurrentProduceInfo();
        this.produceStatisData = data;
        // console.log(data);
      } catch (error) {
        console.log(error);
      }
    },
    // èŽ·å–å®šæ—¶å™¨æ—¶é—´
    async getLargeScreenFrequency() {
      try {
        let { data } = await getLargeScreenFrequency();
        this.time = data;
      } catch (error) {
        console.log(error);
      }
    },
  },
  mounted() {
  },
  // beforeDestroy(){
  //   clearInterval(this.dataTimer)
  //   clearInterval(this.dateTimer)
  // }
};
</script>
<style lang="scss" scoped>
$allHeight: 13.5rem;
$titleHeight: 2rem;
.container {
  width: 100%;
  height: auto;
  position: relative;
  .guang {
    position: absolute;
    width: 100%;
    top: 30%;
    left: 0;
    z-index: 0;
    height: 69%;
  }
  .header {
    position: relative;
    z-index: 9;
    width: 100%;
    height: 2rem;
    background-image: url("~@/assets/images/title.png");
    background-repeat: no-repeat;
    background-size: 100% 100%;
    margin-bottom: 0.25rem;
    .title {
      font-family: Source Han Sans CN;
      display: flex;
      vertical-align: middle;
      align-items: center;
      font-size: 40px;
      font-weight: 700;
      position: absolute;
      top: 12px;
      left: 50%;
      transform: translate(-50%);
      letter-spacing: 8px;
      background: linear-gradient(0deg, #a7ffff, #83d0dc);
      -webkit-background-clip: text;
      -webkit-text-fill-color: transparent;
      .imgTitle {
        width: 117px;
        margin-right: 69px;
      }
    }
    .left-text {
      font-size: 16px;
      color: #fff;
      position: absolute;
      top: 79px;
      left: 37px;
      width: 368px;
      text-align: right;
      line-height: 23px;
      font-weight: 700;
      transform: scaleY(2);
    }
    .right-text {
      font-size: 16px;
      text-align: right;
      color: #fff;
      position: absolute;
      top: 79px;
      right: 268px;
      line-height: 23px;
      font-weight: 700;
      transform: scaleY(2);
    }
  }
  .main {
    position: relative;
    width: 100%;
    height: auto;
    // display: flex;
    // flex-direction: column;
    // justify-content: space-between;
    padding: 0 0.28rem 0.19rem;
    z-index: 99;
    .main-top {
      width: 100%;
      // background-color: #fff;
      margin-bottom: 0.29rem;
      background-image: url("~@/assets/images/border_prodline.png");
      background-size: 100% 100%;
      position: relative;
      .main-top_ly {
        width: 95%;
        margin: 0 auto;
        position: relative;
        height: 526px;
      }
      .prodline {
        width: 95%;
        display: block;
        position: absolute;
        top: 50%;
        left: 50%;
        transform: translate(-50%, -50%);
        height: 225px;
      }
      .prodline_op35 {
        position: absolute;
        top: 246px;
        left: 106px;
        width: 40px;
        z-index: 0;
      }
      .prodline_op325 {
        position: absolute;
        top: 254px;
        left: 108px;
        width: 38px;
        height: 63px;
      }
      .euip {
        width: 95%;
        position: absolute;
        top: -1.59rem;
        left: 1.28rem;
      }
      .OP05 {
        top: -122px;
        left: -223px;
      }
      .OP10,
      .OP40 {
        top: -133px;
        left: -145px;
        height: 904px;
      }
      .OP20 {
        top: -95px;
        left: -77px;
        width: 86%;
      }
      .OP30 {
        top: -152px;
        left: -226px;
        width: 2061px;
        height: 923px;
      }
      .OP35 {
        top: -151px;
        left: -182px;
        width: 100%;
        z-index: 999;
      }
      .OP50 {
        top: -108px;
        left: 11px;
        width: 90%;
      }
      .OP60 {
        top: -178px;
        left: -31px;
        width: 100%;
      }
      .OP70 {
        top: -175px;
        left: 23px;
        width: 101%;
      }
      .unit {
        top: -113px;
        left: 86px;
        transform: scale(1.2);
      }
      .OP80 {
        top: -1.95rem;
        left: 1.98rem;
      }
      // img:nth-child(2) {
      //   width:100%;
      //   top: -2.05rem;
      //   left: 1.07rem;
      // }
    }
    .main-bottom {
      height: 336px;
      display: flex;
      justify-content: center;
      .border_left1 {
        width: 284px;
        margin-right: 20px;
        border: 0 !important;
        background-image: url("~@/assets/images/border_left1.png");
        background-size: 100% 100%;
        background-repeat: no-repeat;
      }
      .border_left2 {
        width: 244px;
        margin-right: 20px;
        border: 0 !important;
        background-image: url("~@/assets/images/border_left1.png");
        background-size: 100% 100%;
        background-repeat: no-repeat;
      }
      .border_middle {
        width: 720px;
        margin-right: 20px;
        border: 0 !important;
        // background-image: url("~@/assets/images/border_middle.png");
        background-image: url("~@/assets/images/border_left1.png");
        background-size: 100% 100%;
        background-repeat: no-repeat;
      }
      .border_right1 {
        width: 244px;
        margin-right: 20px;
        border: 0 !important;
        background-image: url("~@/assets/images/border_left1.png");
        background-size: 100% 100%;
        background-repeat: no-repeat;
      }
      .border_right2 {
        width: 284px;
        border: 0 !important;
        background-image: url("~@/assets/images/border_left1.png");
        background-size: 100% 100%;
        background-repeat: no-repeat;
      }
      .echarts-box {
        height: auto;
        border: 2px solid #3a45de;
        .echarts-title {
          font-size: 20px;
          height: 69px;
          padding-top: 20px;
          margin: 0 0 0 0;
          font-weight: 700;
          color: #00f8c6;
          text-align: center;
          border-bottom: 2px solid #0739a3;
        }
      }
      .echarts-box:nth-child(4) {
        position: relative;
        .pie-label-left {
          position: absolute;
          bottom: 10px;
          left: 0;
          color: white;
          font-size: 16px;
          font-weight: 300;
          width: 54%;
          text-align: center;
        }
        .pie-label-right {
          position: absolute;
          bottom: 10px;
          right: 0;
          color: #fff;
          color: white;
          font-size: 16px;
          width: 54%;
          text-align: center;
        }
      }
      .box-container {
        width: 100%;
        // height: 2.6rem;
        height: 236px;
        // background-color: rgb(196, 231, 178);
      }
      .bgi {
        background-image: url("~@/assets/bg1.png");
        background-size: contain;
        background-repeat: no-repeat;
        background-position: center center;
      }
    }
  }
}
.box11 {
  color: #fff;
  margin: 10px 0;
  text-align: center;
  font-size: 15px;
}
.box12 {
  margin: 0 0.13rem;
  height: 0.13rem;
  background-color: #f14158;
}
.OP88,
.OP89,
.OP90 {
  position: absolute;
  width: 20px;
}
#animatedImage {
  position: absolute;
  top: 70.5%;
  left: 75px;
}
.hidden {
  display: none; /* éšè—å…ƒç´  */
}
// .ring-container {
//   position: relative;
//   width: 85px;
//   height: 85px;
//   display: flex;
//   justify-content: center;
//   align-items: center;
// }
// .outer-ring {
//   position: absolute;
//   width: 100%;
//   height: 100%;
//   border-radius: 50%;
//   background: transparent;
//   border: 1px solid #3498db; /* å¤–环颜色 */
// }
// .inner-ring {
//   position: absolute;
//   width: 80%;
//   height: 80%;
//   border-radius: 50%;
//   background: transparent;
//   box-shadow: inset 0 0 30px #084b71;
//   border: 1px solid #3c5da9;
// }
// .quan1{
//   position: absolute;
//     top: 142px;
//     left: 19px;
// }
.quan1 {
  position: absolute;
  background-size: 100% 100%;
  content: "";
  width: 125px;
  height: 118px;
  z-index: -1;
  top: 117px;
  left: 3px;
  transform: scaleY(2);
  border-radius: 100%;
  background-image: url("@/assets/images/quan.png"); /* æ›¿æ¢ä¸ºæ‚¨çš„背景图路径 */
  background-size: cover; /* æˆ–使用 contain,根据需要选择 */
  background-repeat: no-repeat;
  background-size: 95%;
}
.quan2 {
  position: absolute;
  background-size: 100% 100%;
  content: "";
  width: 125px;
  height: 118px;
  z-index: -1;
  top: 117px;
  left: 120px;
  transform: scaleY(2);
  border-radius: 100%;
  background-image: url("@/assets/images/quan.png"); /* æ›¿æ¢ä¸ºæ‚¨çš„背景图路径 */
  background-size: cover; /* æˆ–使用 contain,根据需要选择 */
  background-repeat: no-repeat;
  background-size: 95%;
}
.box100 {
  position: absolute;
  left: 25%;
  top: 35%;
  width: 67px;
  z-index: 9999;
}
.box200 {
  position: absolute;
  left: 4%;
  top: 48%;
  width: 77px;
  z-index: 9999;
}
.box300 {
  position: absolute;
  left: 44%;
  top: 49%;
  width: 75px;
  z-index: 9999;
}
.title1 {
  transform: scaleY(2);
  font-size: 12px;
  display: block;
  margin-top: 7px;
}
.zuozi {
  position: absolute;
  top: 10px;
  left: 10px;
}
.line100 {
  position: absolute;
  left: 5px;
  top: 64%;
  height: 18px;
}
</style>
yiqi_screen_3d/src/components/Content±¸·Ý.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,658 @@
<template>
  <!-- ä¸ŠåŠéƒ¨åˆ†ä¹Ÿåˆ†ä¸‰æ ¼ -->
  <div class="container">
    <div class="header">
      <div class="title">4GC三代发动机连杆线888</div>
      <div class="left-text">
        <div style="line-height: 30px">{{ nowTime }}</div>
        <div style="padding-left: 25px">
          å®‰å…¨ç”Ÿäº§:{{ produceStatisData.currentSafeProductionDay }}天
        </div>
      </div>
      <div class="right-text">
        <div style="line-height: 30px">
          å½“前班次:{{ produceStatisData.currentTeamName }}
        </div>
        <!-- style="padding-left:25px" -->
        <div>班长:{{ produceStatisData.currentTeamLeader }}</div>
      </div>
    </div>
    <div class="main">
      <div class="main-top">
        <div class="width_left">
          <div class="box1">
            <div class="echarts-box border_left1">
              <div class="echarts-title">统计图1</div>
              <EquipmentRunStatus2 :equipmentStatusData="equipmentStatusData" />
            </div>
          </div>
          <br>
          <br> <br>
          <div class="box1">
            <div class="echarts-box border_left1">
              <div class="echarts-title">统计图2</div>
              <EquipmentRunStatus3 :equipmentStatusData="equipmentStatusData" />
            </div>
          </div>
        </div>
        <div class="width_middle">
          <img src="~@/assets/images/prodline_all.png" class="prodline" />
          <img
            v-for="item in equipmentStatusData"
            :key="item.id"
            :src="
              require(`@/assets/images/${imageColor[item.workingProcedure]}/${
                item.workingProcedure
              }.png`)
            "
            :class="`euip ${item.workingProcedure}`"
          />
          <img src="~@/assets/images/OP35.png" class="prodline_op35" />
          <img
            :src="require(`@/assets/images/${imageColor['OP10']}/OP40.png`)"
            class="euip OP40"
          />
          <img
            :src="require(`@/assets/images/${imageColor['unit']}/unit.png`)"
            class="euip unit"
          />
        </div>
        <div class="width_right">
          <div class="box1">
            <div class="echarts-box border_left1">
              <div class="echarts-title">统计图3</div>
              <EquipmentRunStatus4 :equipmentStatusData="equipmentStatusData" />
            </div>
          </div>
          <br>
          <br> <br>
          <div class="box1">
            <div class="echarts-box border_left1">
              <div class="echarts-title">统计图4</div>
              <EquipmentRunStatus5 :equipmentStatusData="equipmentStatusData" />
            </div>
          </div>
        </div>
      </div>
      <!-- <button @click="flag=true">data改变</button> -->
      <div class="main-bottom">
        <div class="echarts-box border_left1">
          <div class="echarts-title">设备运行状态统计图</div>
          <EquipmentRunStatus :equipmentStatusData="equipmentStatusData" />
        </div>
        <div class="echarts-box border_left2">
          <div class="echarts-title">产线健康能力图</div>
          <ProdlineHealthy />
        </div>
        <div class="echarts-box border_middle">
          <div class="echarts-title">质量数据趋势图</div>
          <div
            style="
              color: #fff;
              margin: 0 0.13rem;
              text-align: center;
              font-size: 0.17rem;
            "
          >
            {{ qualityData.qualityType }}
          </div>
          <div>
            <div
              style="
                margin: 0 0.13rem;
                height: 0.13rem;
                background-color: #f14158;
              "
            ></div>
            <div
              style="
                margin: 0 0.13rem;
                height: 0.13rem;
                background-color: #a7cf29;
              "
            ></div>
          </div>
          <QualityDataTrendse :qualityData="qualityData.list" />
          <div>
            <div
              style="
                margin: 0 0.13rem;
                height: 0.13rem;
                background-color: #a7cf29;
              "
            ></div>
            <div
              style="
                margin: 0 0.13rem;
                height: 0.13rem;
                background-color: #f14158;
              "
            ></div>
          </div>
        </div>
        <div class="echarts-box border_right1">
          <div class="echarts-title">本班/本月产量统计</div>
          <ProductionStatistics :produceStatisData="produceStatisData" />
          <div class="pie-label-left">
            {{ produceStatisData.currentShiftProduceNum }}
            <span
              v-if="
                produceStatisData.currentShiftPlanNum ||
                produceStatisData.currentShiftPlanNum == 0
              "
              >/</span
            >
            {{ produceStatisData.currentShiftPlanNum }}
          </div>
          <div class="pie-label-right">
            {{ produceStatisData.currentMonthProduceNum }}
            <span
              v-if="
                produceStatisData.currentMonthPlanNum ||
                produceStatisData.currentMonthPlanNum == 0
              "
              >/</span
            >
            {{ produceStatisData.currentMonthPlanNum }}
          </div>
        </div>
        <div class="echarts-box border_right2">
          <div class="echarts-title">生产完成趋势</div>
          <ProductionCompletionTrend
            :produceCompletionData="produceCompletionData"
          />
        </div>
      </div>
    </div>
  </div>
</template>
<script>
// import OperationalAvailability from "./OperationalAvailability.vue";
// import EquipmentStatus from "./EquipmentStatus.vue";
// import ProductionCapacity from "./ProductionCapacity.vue";
import EquipmentRunStatus from "./EquipmentRunStatus.vue";
import EquipmentRunStatus2 from "./EquipmentRunStatus2.vue";
import EquipmentRunStatus3 from "./EquipmentRunStatus3.vue";
import EquipmentRunStatus4 from "./EquipmentRunStatus4.vue";
import EquipmentRunStatus5 from "./EquipmentRunStatus5.vue";
import ProdlineHealthy from "./ProdlineHealthy.vue";
import ProductionCompletionTrend from "./ProductionCompletionTrend.vue";
import ProductionStatistics from "./ProductionStatistics.vue";
import QualityDataTrendse from "./QualityDataTrends.vue";
import moment from "moment";
import {
  GetEquipmentCurrentState,
  getQualityData,
  getLargeScreenFrequency,
  getProduceCompletionStatus,
  getCurrentProduceInfo,
} from "@/api/common";
export default {
  name: "MainContentZg",
  components: {
    EquipmentRunStatus,
    EquipmentRunStatus2,
    EquipmentRunStatus3,
    EquipmentRunStatus4,
    EquipmentRunStatus5,
    ProductionStatistics,
    ProductionCompletionTrend,
    QualityDataTrendse,
    ProdlineHealthy,
  },
  data() {
    return {
      dataTimer: null,
      dateTimer: null,
      time: 5000,
      nowTime: moment(new Date()).format("YYYY-MM-DD HH:mm:ss"),
      // flag: false,
      option: {},
      myChart: {},
      EquipmentEnums: [
        {
          code: 1,
          color: "green",
        },
        {
          code: 2,
          color: "white",
        },
        {
          code: 3,
          color: "blue",
        },
        {
          code: 4,
          color: "yellow",
        },
        {
          code: 5,
          color: "red",
        },
      ],
      imageColor: {
        OP05: "blue",
        OP10: "blue",
        OP20: "blue",
        OP30: "blue",
        OP35: "blue",
        OP40: "blue",
        OP50: "blue",
        OP60: "blue",
        OP70: "blue",
        OP80: "blue",
        unit: "blue",
      },
      equipmentStatusData: [
        { workingProcedure: "OP05" },
        { workingProcedure: "OP10" },
        { workingProcedure: "OP20" },
        { workingProcedure: "OP30" },
        { workingProcedure: "OP35" },
        { workingProcedure: "OP40" },
        { workingProcedure: "OP50" },
        { workingProcedure: "OP60" },
        { workingProcedure: "OP70" },
        { workingProcedure: "OP80" },
        { workingProcedure: "unit" },
      ],
      qualityData: [],
      produceCompletionData: [],
      produceStatisData: {},
    };
  },
  watch: {},
  created() {
    this.getLargeScreenFrequency();
    this.getEquipmentCurrentState();
    this.getQualityData();
    this.getProduceCompletionStatus();
    this.getCurrentProduceInfo();
    this.dataTimer = setInterval(this.timerHandler, this.time);
    this.dateTimer = setInterval(() => {
      this.nowTime = moment(new Date()).format("YYYY-MM-DD HH:mm:ss");
    }, 1000);
  },
  methods: {
    // å®šæ—¶å™¨å‡½æ•°
    timerHandler() {
      this.getEquipmentCurrentState();
      this.getQualityData();
      this.getProduceCompletionStatus();
      this.getCurrentProduceInfo();
    },
    // èŽ·å–è®¾å¤‡çŠ¶æ€
    async getEquipmentCurrentState() {
      try {
        let { data } = await GetEquipmentCurrentState();
        let equipmentData = [];
        data.forEach((item) => {
          const res = this.equipmentStatusData.filter(
            (obj) => obj.workingProcedure == item.workingProcedure
          );
          if (res.length > 0) {
            equipmentData.push(item);
          }
        });
        this.equipmentStatusData = equipmentData;
        this.getImageColor(data);
      } catch (error) {
        console.log(error);
      }
    },
    // æ ¹æ®è®¾å¤‡çŠ¶æ€è®¾ç½®è®¾å¤‡é¢œè‰²
    getImageColor(data) {
      data.forEach((item) => {
        let result = this.EquipmentEnums.filter(
          (obj) => obj.code == item.equipmentCurrentState
        );
        // console.log(item.equipmentCurrentState);
        if (result.length > 0) {
          this.imageColor[item.workingProcedure] = result[0].color;
        }
      });
      // console.log(this.imageColor, "getImageColor");
    },
    // èŽ·å–è´¨é‡æ•°æ®
    async getQualityData() {
      let { qualityData } = this;
      try {
        let { data } = await getQualityData({
          qualityType: qualityData.qualityType,
        });
        this.qualityData = data;
        // console.log(this.qualityData);
      } catch (error) {
        console.log(error);
      }
    },
    // èŽ·å–ç”Ÿäº§å®Œæˆè¶‹åŠ¿æ•°æ®
    async getProduceCompletionStatus() {
      try {
        let { data } = await getProduceCompletionStatus();
        this.produceCompletionData = data;
      } catch (error) {
        console.log(error);
      }
    },
    // èŽ·å–äº§é‡ç»Ÿè®¡æ•°æ®
    async getCurrentProduceInfo() {
      try {
        let { data } = await getCurrentProduceInfo();
        this.produceStatisData = data;
        // console.log(data);
      } catch (error) {
        console.log(error);
      }
    },
    // èŽ·å–å®šæ—¶å™¨æ—¶é—´
    async getLargeScreenFrequency() {
      try {
        let { data } = await getLargeScreenFrequency();
        this.time = data;
      } catch (error) {
        console.log(error);
      }
    },
  },
  // beforeDestroy(){
  //   clearInterval(this.dataTimer)
  //   clearInterval(this.dateTimer)
  // }
};
</script>
<style lang="scss" scoped>
$allHeight: 13.5rem;
$titleHeight: 2rem;
.container {
  width: 100%;
  height: auto;
  .header {
    width: 100%;
    height: 2rem;
    background-image: url("~@/assets/images/title.png");
    background-repeat: no-repeat;
    background-size: 100% 100%;
    margin-bottom: 0.25rem;
    position: relative;
    .title {
      color: #41c7de;
      font-size: 0.38rem;
      font-weight: 700;
      position: absolute;
      top: 0.31rem;
      left: 50%;
      transform: translate(-50%);
      letter-spacing: 8px;
    }
    .left-text {
      font-size: 0.19rem;
      color: #fff;
      position: absolute;
      top: 1.15rem;
      left: 5rem;
    }
    .right-text {
      font-size: 0.19rem;
      text-align: right;
      color: #fff;
      position: absolute;
      top: 1.15rem;
      right: 5.3rem;
    }
  }
  .main {
    width: 100%;
    height: auto;
    // display: flex;
    // flex-direction: column;
    // justify-content: space-between;
    padding: 0 0.28rem 0.19rem;
    .main-top {
      width: 100%;
      margin: 0 auto;
      height: 7.42rem;
      display: flex;
      margin-bottom: 0.29rem;
      .width_left {
        width: 18%;
        height: 7.42rem;
      }
      .width_right {
        width: 18%;
        height: 7.42rem;
      }
      .width_middle {
        width: 60%;
        margin: 0 auto;
        height: 7.42rem;
        // background-color: #fff;
        background-image: url("~@/assets/images/border_prodline.png");
        background-size: 100% 100%;
        // background-size: 101.1% 101.8%;
        // background-position: -0.13rem -0.13rem;
        position: relative;
        .prodline {
          width: 95%;
          display: block;
          position: absolute;
          top: 50%;
          left: 50%;
          transform: translate(-50%, -50%);
        }
        .prodline_op35 {
          position: absolute;
          top: 2.82rem;
          left: 2.6rem;
          width: 1.8%;
        }
        .euip {
          // width: 95%;
          // position: absolute;
          // top: -1.59rem;
          // left: 1.28rem;
          margin-top: 1.9rem;
    width: 100%;
    position: absolute;
    margin-left: -.2rem;
        }
        .OP05 {
          top: -1.58rem;
          left: 0.12rem;
        }
        .OP10,
        .OP40 {
          top: -1.48rem;
          left: 0.5rem;
        }
        .OP20 {
          top: -1.8rem;
          left: 0.3rem;
        }
        .OP30 {
          top: -2.05rem;
          left: 0.3rem;
        }
        .OP35 {
          top: -1.8rem;
          left: 0.2rem;
        }
        .OP50 {
          top: -1.69rem;
          left: 0.5rem;
        }
        .OP60 {
          top: -1.65rem;
          left: .7rem;
        }
        .OP70 {
          top: -1.52rem;
          left: 0.9rem;
        }
        .OP80,
        .unit {
          top: -1.95rem;
          left: 0.8rem;
        }
      }
      // img:nth-child(2) {
      //   width:100%;
      //   top: -2.05rem;
      //   left: 1.07rem;
      // }
    }
    .main-bottom,
    .main-top {
      height: auto;
      display: flex;
      // background-color: skyblue;
      .border_left1 {
        width: 3.84rem;
        margin-right: 0.14rem;
        border: 0 !important;
        background-image: url("~@/assets/images/border_left1.png");
        background-size: 107.5% 104%;
        background-position: -0.14rem -0.13rem;
        background-repeat: no-repeat;
      }
      .border_left2 {
        width: 3.02rem;
        margin-right: 0.16rem;
        border: 0 !important;
        background-image: url("~@/assets/images/border_left2.png");
        background-size: 109.3% 104%;
        background-position: -0.14rem -0.13rem;
        background-repeat: no-repeat;
      }
      .border_middle {
        width: 6.09rem;
        margin-right: 0.16rem;
        border: 0 !important;
        background-image: url("~@/assets/images/border_middle.png");
        background-size: 102.7% 104%;
        background-position: -0.14rem -0.13rem;
        background-repeat: no-repeat;
      }
      .border_right1 {
        width: 3.75rem;
        margin-right: 0.15rem;
        border: 0 !important;
        background-image: url("~@/assets/images/border_right1.png");
        background-size: 107.5% 104%;
        background-position: -0.14rem -0.13rem;
        background-repeat: no-repeat;
      }
      .border_right2 {
        width: 6.09rem;
        border: 0 !important;
        background-image: url("~@/assets/images/border_right2.png");
        background-size: 104.4% 104%;
        background-position: -0.14rem -0.13rem;
        background-repeat: no-repeat;
      }
      .echarts-box {
        height: auto;
        border: 2px solid #3a45de;
        .echarts-title {
          font-size: 0.18rem;
          height: 0.75rem;
          padding: 0.31rem 0 0.26rem;
          margin: 0 0.23rem;
          font-weight: 700;
          color: #00afb9;
          text-align: center;
          border-bottom: 2px solid #3c37bf;
        }
      }
      .echarts-box:nth-child(4) {
        position: relative;
        .pie-label-left {
          position: absolute;
          bottom: 0.1rem;
          left: 0.7rem;
          color: #fff;
          font-size: 0.2rem;
          font-weight: 300;
        }
        .pie-label-right {
          position: absolute;
          bottom: 0.1rem;
          right: 0.7rem;
          color: #fff;
          font-size: 0.2rem;
          font-weight: 300;
        }
      }
      .box-container {
        width: 100%;
        height: 2.6rem;
        // background-color: rgb(196, 231, 178);
      }
      .bgi {
        background-image: url("~@/assets/bg1.png");
        background-size: contain;
        background-repeat: no-repeat;
        background-position: center center;
      }
    }
  }
  .box1{
    .echarts-box{
      width: 100% !important;
    }
    .border_left1{
      margin-right: 0 !important;
    }
  }
}
</style>
yiqi_screen_3d/src/components/EquipmentRunStatus.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,219 @@
<template>
  <!-- <img :src="require(`@/assets/images/huan.png`)" class="huan" /> -->
  <div class="box-container quan" id="echarts1"></div>
</template>
<script>
let timer = null;
export default {
  props: {
    equipmentStatusData: {
      type: Array,
      default: () => [],
    },
  },
  data() {
    return {
      option: {},
      myChart: {},
      currentIndex: -1,
    };
  },
  watch: {
    equipmentStatusData(val) {
      let data = [
        { value: 0, name: "生产" },
        { value: 0, name: "完成" },
        { value: 0, name: "待机" },
        { value: 0, name: "警告" },
        { value: 0, name: "故障" },
      ];
      val.forEach((item) => {
        switch (item.equipmentCurrentState) {
          case "1":
            data[0].value++;
            break;
          case "2":
            data[1].value++;
            break;
          case "3":
            data[2].value++;
            break;
          case "4":
            data[3].value++;
            break;
          case "5":
            data[4].value++;
            break;
        }
      });
      console.log("++++++", data);
      // data = [
      //   { value: 2, name: "生产" },
      //   { value: 3, name: "完成" },
      //   { value: 5, name: "待机" },
      //   { value: 6, name: "警告" },
      //   { value: 1, name: "故障" },
      // ];
      this.$set(this.option.series[0], "data", data);
      this.myChart.setOption(this.option);
    },
  },
  mounted() {
    this.myChart = this.$echarts.init(document.getElementById("echarts1"));
    this.option = {
      // #00ff99 #fffff0 #0a0d7f #ffcc00 #fe0000
      color: ["#00ff99", "#fffff0", "#0a0d7f", "#ffcc00", "#fe0000"],
      legend: {
        orient: "vertical",
        top: "28%",
        right: "12%",
        itemGap: 12, //块之间的间距
        itemHeight: 9, // è®¾ç½®å›¾ä¾‹é¡¹çš„高度
        itemWidth: 9, // è®¾ç½®å›¾ä¾‹é¡¹çš„宽度
        data: ["生产", "完成", "待机", "警告", "故障"],
        textStyle: {
          color: "#fff",
          fontSize: 10,
        },
        formatter: (name) => {
          let res = this.option.series[0].data.filter(
            (item) => item.name == name
          );
          return res.length > 0 ? `${name}: ${res[0].value}台` : name;
        },
      },
      series: [
        {
          type: "pie",
          center: ["33%", "50%"],
          radius: ["30%", "37%"],
          padAngle: 5, //环与环之间的间隙
          label: {
            show: true,
            formatter: `{d}%`,
            // color: "#fff",
            fontSize: 11,
            position: "outside",
            color: "inherit", //继承上面的颜色
          },
          labelLine: {
            show: true,
            length: 5,
            length2: 5,
          },
          itemStyle: {
            borderRadius: 3,
            borderColor: "transparent",
            borderWidth: 10,
            // shadowColor: 'rgba(0, 0, 0, 0.5)', // é˜´å½±é¢œè‰²
            // shadowBlur: 10, // é˜´å½±æ¨¡ç³Šç¨‹åº¦
            // shadowOffsetX: 20, // æ°´å¹³é˜´å½±åç§»
            // shadowOffsetY: 20, // åž‚直阴影偏移
          },
          emphasis: {
            label: {
              show: false,
              fontSize: "15",
              color: "#fff",
              fontWeight: "normal",
            },
          },
          data: [],
        },
      ],
    };
    this.myChart.setOption(this.option);
    const that = this;
    window.addEventListener("resize", () => {
      that.myChart.resize();
    });
    // this.defineEvent();
    // this.selectPie();
    // timer = setInterval(this.selectPie, 1500);
  },
  methods: {
    selectPie() {
      let dataLen = this.option.series[0].data.length;
      this.currentIndex = (this.currentIndex + 1) % dataLen;
      this.hignLightPie();
    },
    // è½®æ’­ç‚¹äº®é¥¼å›¾
    hignLightPie() {
      const dataPie = this.option.series[0].data;
      // ç†„灭所有扇形区域
      for (var index in dataPie) {
        this.myChart.dispatchAction({
          type: "downplay",
          seriesIndex: 0,
          dataIndex: index,
        });
      }
      // ç‚¹äº®å½“前扇形区域
      this.myChart.dispatchAction({
        type: "highlight",
        seriesIndex: 0,
        dataIndex: this.currentIndex,
      });
    },
    // é¼ æ ‡è§¦æ‘¸è½®æ’­æ‚¬åœäº‹ä»¶
    defineEvent() {
      // é¼ æ ‡ç§»å‡ºè½®æ’­ç»§ç»­
      this.myChart.on("mouseout", () => {
        if (timer) clearInterval(timer);
        timer = setInterval(this.selectPie, 1500);
      });
      // é¼ æ ‡è¿›å…¥è½®æ’­æ‚¬åœ
      this.myChart.on("mouseover", (params) => {
        clearInterval(timer);
        this.currentIndex = params.dataIndex;
        this.hignLightPie();
      });
      // é¼ æ ‡ç§»å…¥legend轮播悬停
      this.myChart.getZr().on("mouseover", (event) => {
        const legendDataIndex = event.topTarget.parent.__legendDataIndex; // æ¯ä¸ªlegend的index
        clearInterval(timer);
        this.currentIndex = legendDataIndex;
        this.hignLightPie();
      });
      // é¼ æ ‡ç§»å‡ºlegend轮播继续
      this.myChart.getZr().on("mouseout", () => {
        if (timer) clearInterval(timer);
        timer = setInterval(this.selectPie, 1500);
      });
    },
  },
};
</script>
<style>
#echarts1 {
  width: 3.84rem;
  transform: scaleY(2);
}
.box-container {
  position: relative;
}
.quan::after {
  background-image: url("~@/assets/images/huan.png");
  position: absolute;
  background-size: 100% 100%;
  background-repeat: no-repeat;
  content: "";
  width: 56px;
  height: 29px;
  z-index: -1;
  /* opacity: 0.5; */
  top: 103px;
  left: 73px;
  transform: scaleY(2);
}
</style>
yiqi_screen_3d/src/components/EquipmentRunStatus2.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,71 @@
<template>
  <div class="box-container" id="echarts10"></div>
</template>
<script>
let timer = null;
export default {
  data() {
    return {
      option: {},
      myChart: {},
      currentIndex: -1,
      lineData: [],  // æ·»åŠ ç”¨äºŽå­˜å‚¨æ›²çº¿å›¾æ•°æ®çš„å±žæ€§
    };
  },
  mounted() {
    this.myChart = this.$echarts.init(document.getElementById("echarts10"));
    // ç”Ÿæˆå‡æ•°æ®
    this.generateFakeData();
    this.option = {
      tooltip: {
        trigger: 'axis'
      },
      xAxis: {
        type: 'category',
        data: this.lineData.map(item => item.time) // ä½¿ç”¨å‡æ•°æ®ä¸­çš„æ—¶é—´ä½œä¸º x è½´
      },
      yAxis: {
        type: 'value'
      },
      series: [{
        name: '状态数据',
        type: 'line',
        data: this.lineData.map(item => item.value), // ä½¿ç”¨å‡æ•°æ®ä¸­çš„值作为 y è½´
        smooth: true // å¹³æ»‘曲线
      }]
    };
    this.myChart.setOption(this.option);
    const that = this;
    window.addEventListener("resize", () => {
      that.myChart.resize();
    });
  },
  methods: {
    generateFakeData() {
      // ç”Ÿæˆ 10 ä¸ªå‡æ•°æ®ç‚¹
      const fakeData = [];
      for (let i = 0; i < 10; i++) {
        fakeData.push({
          time: `时间${i + 1}`,
          value: Math.floor(Math.random() * 100) + 1  // éšæœºç”Ÿæˆ 1-100 çš„值
        });
      }
      this.lineData = fakeData;
    },
  },
};
</script>
<style>
#echarts10 {
  width: 3.84rem;
}
.box-container{
  margin: 0 auto;
  display: block;
}
</style>
yiqi_screen_3d/src/components/EquipmentRunStatus3.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,67 @@
<template>
  <div class="box-container" id="echarts30"></div>
</template>
<script>
let timer = null;
export default {
  data() {
    return {
      option: {},
      myChart: {},
      currentIndex: -1,
      lineData: [],  // æ·»åŠ ç”¨äºŽå­˜å‚¨æ›²çº¿å›¾æ•°æ®çš„å±žæ€§
    };
  },
  mounted() {
    this.myChart = this.$echarts.init(document.getElementById("echarts30"));
    // ç”Ÿæˆå‡æ•°æ®
    this.generateFakeData();
    this.option = {
      tooltip: {
        trigger: 'axis'
      },
      xAxis: {
        type: 'category',
        data: this.lineData.map(item => item.time) // ä½¿ç”¨å‡æ•°æ®ä¸­çš„æ•°æ®ä½œä¸º x è½´
      },
      yAxis: {
        type: 'value'
      },
      series: [{
        name: '状态数据',
        type: 'line',
        data: this.lineData.map(item => item.value), // ä½¿ç”¨å‡æ•°æ®ä¸­çš„值作为 y è½´
        smooth: true // å¹³æ»‘曲线
      }]
    };
    this.myChart.setOption(this.option);
    const that = this;
    window.addEventListener("resize", () => {
      that.myChart.resize();
    });
  },
  methods: {
    generateFakeData() {
      // ç”Ÿæˆ 10 ä¸ªå‡æ•°æ®ç‚¹
      const fakeData = [];
      for (let i = 0; i < 10; i++) {
        fakeData.push({
          time: `数据${i + 1}`,
          value: Math.floor(Math.random() * 100) + 1  // éšæœºç”Ÿæˆ 1-100 çš„值
        });
      }
      this.lineData = fakeData;
    },
  },
};
</script>
<style>
#echarts30 {
  width: 3.84rem;
}
</style>
yiqi_screen_3d/src/components/EquipmentRunStatus4.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,71 @@
<template>
  <div class="box-container" id="echarts40"></div>
</template>
<script>
let timer = null;
export default {
  data() {
    return {
      option: {},
      myChart: {},
      currentIndex: -1,
      lineData: [],  // æ·»åŠ ç”¨äºŽå­˜å‚¨é¥¼å›¾æ•°æ®çš„å±žæ€§
    };
  },
  mounted() {
    this.myChart = this.$echarts.init(document.getElementById("echarts40"));
    // ç”Ÿæˆå‡æ•°æ®
    this.generateFakeData();
    this.option = {
      tooltip: {
        trigger: 'item'  // ä¿®æ”¹ä¸º 'item' ä»¥é€‚应饼图
      },
      series: [{
        name: '状态数据',
        type: 'pie',  // ä¿®æ”¹ä¸º 'pie'
        radius: '50%',
        data: this.lineData.map(item => ({
          name: item.time,  // é¥¼å›¾ä¸­çš„æ¯ä¸€é¡¹åç§°
          value: item.value  // å¯¹åº”的数值
        })),
        emphasis: {
          itemStyle: {
            shadowBlur: 10,
            shadowOffsetX: 0,
            shadowColor: 'rgba(0, 0, 0, 0.5)'
          }
        }
      }]
    };
    this.myChart.setOption(this.option);
    const that = this;
    window.addEventListener("resize", () => {
      that.myChart.resize();
    });
  },
  methods: {
    generateFakeData() {
  // ç”Ÿæˆ 4 ä¸ªå‡æ•°æ®ç‚¹
  const fakeData = [];
  for (let i = 0; i < 4; i++) {
    fakeData.push({
      time: `数据${i + 1}`,
      value: Math.floor(Math.random() * 100) + 1  // éšæœºç”Ÿæˆ 1-100 çš„值
    });
  }
  this.lineData = fakeData;
},
  },
};
</script>
<style>
#echarts40 {
  width: 3.84rem;
}
</style>
yiqi_screen_3d/src/components/EquipmentRunStatus5.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,67 @@
<template>
  <div class="box-container" id="echarts50"></div>
</template>
<script>
let timer = null;
export default {
  data() {
    return {
      option: {},
      myChart: {},
      currentIndex: -1,
      lineData: [],  // æ·»åŠ ç”¨äºŽå­˜å‚¨æ›²çº¿å›¾æ•°æ®çš„å±žæ€§
    };
  },
  mounted() {
    this.myChart = this.$echarts.init(document.getElementById("echarts50"));
    // ç”Ÿæˆå‡æ•°æ®
    this.generateFakeData();
    this.option = {
      tooltip: {
        trigger: 'axis'
      },
      xAxis: {
        type: 'category',
        data: this.lineData.map(item => item.time) // ä½¿ç”¨å‡æ•°æ®ä¸­çš„æ•°æ®ä½œä¸º x è½´
      },
      yAxis: {
        type: 'value'
      },
      series: [{
        name: '状态数据',
        type: 'bar',
        data: this.lineData.map(item => item.value), // ä½¿ç”¨å‡æ•°æ®ä¸­çš„值作为 y è½´
        smooth: true // å¹³æ»‘曲线
      }]
    };
    this.myChart.setOption(this.option);
    const that = this;
    window.addEventListener("resize", () => {
      that.myChart.resize();
    });
  },
  methods: {
    generateFakeData() {
      // ç”Ÿæˆ 10 ä¸ªå‡æ•°æ®ç‚¹
      const fakeData = [];
      for (let i = 0; i < 10; i++) {
        fakeData.push({
          time: `数据${i + 1}`,
          value: Math.floor(Math.random() * 100) + 1  // éšæœºç”Ÿæˆ 1-100 çš„值
        });
      }
      this.lineData = fakeData;
    },
  },
};
</script>
<style>
#echarts50 {
  width: 3.84rem;
}
</style>
yiqi_screen_3d/src/components/ProdlineHealthy.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,192 @@
<template>
  <div class="box-container" id="echarts2"></div>
</template>
<script>
let timer = null;
export default {
  data() {
    return {
      option: {},
      myChart: {},
      currentIndex: -1,
    };
  },
  mounted() {
    this.myChart = this.$echarts.init(document.getElementById("echarts2"));
    this.option = {
      legend: {
        orient: "vertical",
        bottom: "20%",
        right: "6%",
        itemGap: 8, //块之间的间距
        itemHeight: 9, // è®¾ç½®å›¾ä¾‹é¡¹çš„高度
        itemWidth: 9, // è®¾ç½®å›¾ä¾‹é¡¹çš„宽度
        data: [
          {
            name: "目标",
            itemStyle: {
              color: "#f2f45b",
            },
            textStyle: {
              color: "#f2f45b", //黄色
              fontSize: 10,
            },
          },
          {
            name: "实际",
            itemStyle: {
              color: "#1fe9dc",
            },
            textStyle: {
              color: "#1fe9dc",
              fontSize: 10,
            },
          },
        ],
      },
      radar: {
        center: ["40%", "55%"], // æ›´æ”¹ä¸ºæ›´å°çš„百分比以往中间移动
        radius: "40%",
        indicator: [
          { name: "人", max: 100, color: "#fff" },
          { name: "环", max: 100, color: "#fff" },
          { name: "法", max: 100, color: "#fff" },
          { name: "料", max: 100, color: "#fff" },
          { name: "机", max: 100, color: "#fff" },
        ],
        // splitNumber: 0,
        axisLine: {
          show: false,
        },
        axisName: {
          padding: -10,
        },
        splitArea: {
          areaStyle: {
            color: "rgba(131, 163, 178, 0.8)",
          },
        },
      },
      series: [
        {
          name: "Budget vs spending",
          type: "radar",
          data: [
            {
              name: "实际",
              value: [90, 80, 80, 80, 80],
              areaStyle: {
                color: {
                  type: "linear-gradient",
                  x: 0,
                  y: 0,
                  x2: 1,
                  y2: 1,
                  colorStops: [
                    { offset: 0, color: "#b2f2bb" }, // æ¸å˜å¼€å§‹é¢œè‰²
                    { offset: 1, color: "#a0e6a0" }, // æ¸å˜ç»“束颜色
                  ],
                },
                opacity: 0.9,
              },
            },
            {
              name: "目标",
              value: [90, 80, 80, 80, 80],
              areaStyle: {
                color: "#6ee6db",
                opacity: 0.3,
              },
            },
          ],
          symbol: "none",
        },
      ],
    };
    this.myChart.setOption(this.option);
    const that = this;
    window.addEventListener("resize", () => {
      that.myChart.resize();
    });
    // this.defineEvent();
    // this.selectPie();
    // timer = setInterval(this.selectPie, 1500);
  },
  methods: {
    selectPie() {
      let dataLen = this.option.series[0].data.length;
      this.currentIndex = (this.currentIndex + 1) % dataLen;
      this.hignLightPie();
    },
    // è½®æ’­ç‚¹äº®é¥¼å›¾
    hignLightPie() {
      const dataPie = this.option.series[0].data;
      // ç†„灭所有扇形区域
      for (var index in dataPie) {
        this.myChart.dispatchAction({
          type: "downplay",
          seriesIndex: 0,
          dataIndex: index,
        });
      }
      // ç‚¹äº®å½“前扇形区域
      this.myChart.dispatchAction({
        type: "highlight",
        seriesIndex: 0,
        dataIndex: this.currentIndex,
      });
    },
    // é¼ æ ‡è§¦æ‘¸è½®æ’­æ‚¬åœäº‹ä»¶
    defineEvent() {
      // é¼ æ ‡ç§»å‡ºè½®æ’­ç»§ç»­
      this.myChart.on("mouseout", () => {
        if (timer) clearInterval(timer);
        timer = setInterval(this.selectPie, 1500);
      });
      // é¼ æ ‡è¿›å…¥è½®æ’­æ‚¬åœ
      this.myChart.on("mouseover", (params) => {
        clearInterval(timer);
        this.currentIndex = params.dataIndex;
        this.hignLightPie();
      });
      // é¼ æ ‡ç§»å…¥legend轮播悬停
      this.myChart.getZr().on("mouseover", (event) => {
        const legendDataIndex = event.topTarget.parent.__legendDataIndex; // æ¯ä¸ªlegend的index
        clearInterval(timer);
        this.currentIndex = legendDataIndex;
        this.hignLightPie();
      });
      // é¼ æ ‡ç§»å‡ºlegend轮播继续
      this.myChart.getZr().on("mouseout", () => {
        if (timer) clearInterval(timer);
        timer = setInterval(this.selectPie, 1500);
      });
    },
  },
};
</script>
<style>
#echarts2 {
  margin-top: 0.1rem;
  width: 100%;
  height: 2.5rem;
  transform: scaleY(2);
  /*
          margin-top: .4rem;
          width: 2.89rem;
          height: 2.0rem;
        transform: scaleY(2); */
  /* border: 1px solid red; */
}
</style>
yiqi_screen_3d/src/components/ProductionCompletionTrend.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,333 @@
<template>
  <div>
    <div
      class="box-container"
      id="echarts5"
      style="width: 100%; height: 230px"
    ></div>
  </div>
</template>
<script>
import * as echarts from "echarts";
import { zhu } from "./img/t.js";
export default {
  props: {
    produceCompletionData: {
      type: Array,
      default: () => [],
    },
  },
  data() {
    return {
      option: {},
      myChart: {},
      timechartes: null,
      myChart2: null,
      textureImg: null,
      // img,
    };
  },
  watch: {
    produceCompletionData(val) {
      let xData = [],
        yData1 = [],
        yData2 = [],
        yData3 = [];
      val.forEach((item) => {
        console.log("ceshi", item.completionNum);
        xData.push(item.month);
        yData1.push({
          // value: item.completionNum,
          value: 100,
          symbolRepeat: false,
        }); //实际
        // yData1.push(item.completionNum); //实际
        var num = 0; //已完成数 / è®¡åˆ’完成数
        if (item.completionNum > 0) {
          if (item.planCompletionNum > item.completionNum) {
            // 5/10
            num = item.completionNum / item.planCompletionNum;
          } else if (item.planCompletionNum <= 0) {
            // 10/0
            num = 100;
          } else if (item.completionNum >= item.planCompletionNum) {
            // 10/5
            num = 100;
          }
        }
        yData2.push(num.toFixed(2)); //planCompletionRate
        // yData2.push(item.planCompletionRate); //planCompletionRate
        // yData3.push(item.planCompletionNum); //计划
      });
      this.$set(this.option.xAxis, "data", xData);
      this.$set(this.option.series[0], "data", yData1);
      this.$set(this.option.series[1], "data", yData2);
      this.$nextTick(() => {
        this.myChart.setOption(this.option);
      });
    },
  },
  mounted() {
    this.myChart = this.$echarts.init(document.getElementById("echarts5"));
    this.option = {
      tooltip: {
        trigger: "axis",
        formatter:
          "{b0}月<br />" +
          // '<a style="display:inline-block;width:10px;height:10px;background:linear-gradient(to bottom,#13e5f2,#01afba);border-radius:50%"></a> {a0}: {c0}<br />' +
          // '<a style="display:inline-block;width:10px;height:10px;background:linear-gradient(to bottom,#ffc107,#fd7e14);border-radius:50%"></a> {a2}: {c2}<br />' +
          '<a style="display:inline-block;width:10px;height:10px;background:linear-gradient(to bottom,#fff,#eee);border-radius:50%"></a> {a1}: {c1}%<br />', // æ·»åŠ ç”Ÿäº§è®¡åˆ’æ•°æç¤º
        backgroundColor: "rgba(0,0,0,0.7)",
        textStyle: {
          color: "#ffffff",
        },
      },
      grid: {
        top: "15%",
        bottom: "8%",
        left: "18%",
        right: "18%",
      },
      xAxis: {
        data: [],
        type: "category",
        axisLabel: {
          color: "#326e92",
          interval: 0,
          fontSize: 13,
          // formatter: '{value}月'
        },
        axisTick: {
          show: false,
        },
        axisLine: {
          lineStyle: {
            color: "#326e92",
          },
        },
      },
      yAxis: [
        {
          type: "value",
          position: "left",
          axisLine: {
            show: false,
            lineStyle: {
              color: "#326e92",
            },
          },
          axisLabel: {
            show: true,
            margin: 5,
            color: "#326e92",
            formatter: "{value}%",
          },
          alignTicks: false,
          nameTextStyle: {
            color: "#fff",
          },
          splitLine: {
            lineStyle: {
              color: "#326e92",
            },
          },
        },
        {
          show: true,
          type: "value",
          position: "right",
          // name: "持续时长",
          axisLine: {
            show: false,
            lineStyle: {
              color: "#326e92",
            },
          },
          axisLabel: {
            show: true,
            color: "#326e92",
            formatter: "{value}%",
          },
          nameTextStyle: {
            color: "#326e92",
          },
          splitLine: {
            lineStyle: {
              color: "#326e92",
            },
          },
        },
      ],
      series: [
        {
          name: "生产完成数",
          type: "pictorialBar",
          // type: "bar",
          symbol: "image://" + zhu,
          data: [],
          // yAxisIndex: 0,
          // color: {
          //   type: "linear",
          //   x: 0,
          //   y: 0,
          //   x2: 0,
          //   y2: 1,
          //   colorStops: [
          //     {
          //       offset: 0,
          //       color: "#13e5f2", // 0% å¤„的颜色
          //     },
          //     {
          //       offset: 1,
          //       color: "#01afba", // 100% å¤„的颜色
          //     },
          //   ],
          // },
        },
        {
          name: "生产完成率",
          type: "line",
          data: [],
          z: 5,
          showSymbol: true,
          yAxisIndex: 1,
          smooth: true, // ä½¿æŠ˜çº¿å›¾å¹³æ»‘
          color: "#ff9600",
          lineStyle: {
            width: 1,
          },
        },
        // {
        //   name: "生产计划数", // æ·»åŠ ç”Ÿäº§è®¡åˆ’æ•°
        //   type: "line",
        //   data: [], // æ ¹æ®éœ€è¦å¡«å……此数组
        //   showSymbol: true,
        //   smooth: true, // ä½¿æŠ˜çº¿å›¾å¹³æ»‘
        //   yAxisIndex: 0, // ä¸Žç›¸åº”çš„ y è½´å…³è”
        //   color: "rgba(255,255,255,0.85)", // è‡ªå®šä¹‰é¢œè‰²
        //   lineStyle: {
        //     width: 1,
        //   },
        // },
      ],
      // animation: true,
      // dataZoom: [
      //   {
      //     xAxisIndex: 0, //这里是从X轴的0刻度开始
      //     show: false, //是否显示滑动条,不影响使用
      //     type: "inside", // è¿™ä¸ª dataZoom ç»„件是 slider åž‹ dataZoom ç»„ä»¶
      //     startValue: 0, // ä»Žå¤´å¼€å§‹ã€‚
      //     endValue: 5, // ä¸€æ¬¡æ€§å±•示几个。
      //   },
      // ],
    };
    this.myChart.setOption(this.option);
    const that = this;
    window.addEventListener("resize", () => {
      that.myChart.resize();
    });
    // this.barChartScrolling();
    // this.defineEvent()
    // window.addEventListener("resize",  ()=> {
    //   this.myChart.resize();
    // });
    // this.init()
  },
  methods: {
    // æ°´å¹³æ»šåЍ
    barChartScrolling() {
      const x = this.option.xAxis.data;
      const y1 = this.option.series[0].data;
      const y2 = this.option.series[1].data;
      if (x.length > 0 && y1.length > 0 && y2.length > 0) {
        this.timechartes = setInterval(this.handle, 1500);
      }
    },
    handle() {
      const option = this.option;
      const x = this.option.xAxis.data;
      // æ¯æ¬¡å‘后滚动一个,最后一个从头开始。
      if (option.dataZoom[0].endValue == x.length) {
        this.$set(option.dataZoom[0], "endValue", 5);
        this.$set(option.dataZoom[0], "startValue", 0);
      } else {
        this.$set(
          option.dataZoom[0],
          "endValue",
          option.dataZoom[0].endValue + 1
        );
        this.$set(
          option.dataZoom[0],
          "startValue",
          option.dataZoom[0].startValue + 1
        );
      }
      this.myChart.setOption(option);
    },
    // é¼ æ ‡è§¦æ‘¸è½®æ’­æ‚¬åœäº‹ä»¶
    defineEvent() {
      // é¼ æ ‡ç§»å‡ºè½®æ’­ç»§ç»­
      this.myChart.on("mouseout", () => {
        if (this.timechartes) clearInterval(this.timechartes);
        this.timechartes = setInterval(this.handle, 1500);
      });
      // é¼ æ ‡è¿›å…¥è½®æ’­æ‚¬åœ
      this.myChart.on("mouseover", () => {
        clearInterval(this.timechartes);
      });
    },
    init() {
      var chartDom = document.getElementById("main");
      var myChart = echarts.init(chartDom);
      var option;
      var rocket = "";
      option = {
        legend: {
          data: ["tu1", "barbg1"],
        },
        xAxis: {
          data: ["a", "b", "c", "d"],
        },
        yAxis: {
          show: true,
        },
        series: [
          {
            type: "pictorialBar",
            name: "tu1",
            symbol: "image://" + zhu,
            data: [
              {
                value: 60,
                symbolRepeat: false,
              },
              {
                value: 60,
                symbolRepeat: false,
              },
              {
                value: 60,
                symbolRepeat: false,
              },
              {
                value: 60,
                symbolRepeat: false,
              },
            ],
          },
        ],
      };
      myChart.setOption(option);
    },
  },
};
</script>
<style></style>
yiqi_screen_3d/src/components/ProductionStatistics copy 2.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,458 @@
<template>
  <!-- æœ¬ç­/本月产量统计 -->
  <div class="box-container box4" id="echarts4"></div>
</template>
<script>
let timer = null;
import * as echarts from "echarts";
export default {
  props: {
    produceStatisData: {
      type: Object,
      default: () => {},
    },
  },
  data() {
    return {
      option: {},
      myChart: {},
      currentIndex: -1,
      data1: [],
      data2: [{ actualData: 2782, planData: 11128 }],
    };
  },
  // watch: {
  //   produceStatisData(val) {
  //     // æµ‹è¯•用:
  //     val.currentShiftProduceNum = 280;
  //     val.currentShiftPlanNum = 300;
  //     // å½“前班组实际生产数量 currentShiftProduceNum
  //     // å½“前班组计划生产数量 currentShiftPlanNum
  //     var num1 = val.currentShiftProduceNum; //实际生产数量
  //     var num2 = val.currentShiftPlanNum - val.currentShiftProduceNum; //计划生产数量
  //     if (val.currentShiftPlanNum == 0) {
  //       //分母为0 æ˜¾ç¤º0%
  //       num1 = 0;
  //       num2 = 10;
  //     }
  //     this.$set(this.option.series[0], "data", [
  //       // { value: 1 },  //实际生产数量 1/ (9+1) = 10%
  //       // { value: 9 },
  //       {
  //         value: num1,
  //       }, //实际生产数量
  //       {
  //         value: num2,
  //       },
  //     ]);
  //     var num3 = val.currentMonthProduceNum;
  //     var num4 = val.currentMonthPlanNum - val.currentMonthProduceNum;
  //     if (val.currentMonthPlanNum == 0) {
  //       //分母为0 æ˜¾ç¤º0%
  //       num3 = 0;
  //       num4 = 10;
  //     }
  //     this.$set(this.option.series[1], "data", [
  //       { value: num3 },
  //       { value: num4 },
  //     ]);
  //     this.myChart.setOption(this.option);
  //     this.hignLightPie();
  //   },
  // },
  mounted() {
    this.myChart = this.$echarts.init(document.getElementById("echarts4"));
    var value = 60;
    var value2 = 15;
    let data1 = [
      {
        value: value,
        name: "",
        itemStyle: {
          normal: {
            color: "#62fbf8",
          },
        },
      },
      {
        value: 100 - value,
        name: "",
        label: {
          normal: {
            show: false,
          },
        },
        itemStyle: {
          normal: {
            color: "rgba(0,0,0,0)",
          },
        },
      },
    ];
    let data2 = [
      {
        value: value2,
        name: "",
        itemStyle: {
          normal: {
            color: "rgb(105,206,195)",
          },
        },
      },
      {
        value: 100 - value2,
        name: "",
        label: {
          normal: {
            show: false,
          },
        },
        itemStyle: {
          normal: {
            color: "rgba(0,0,0,0)",
          },
        },
      },
    ];
    this.option = {
      color: ["#00f6fe", "rgba(5, 19, 96, 0.5)"],
      // æ’入背景图
      //    graphic: [
      //   {
      //     type: "image",
      //     id: "background1",
      //     left: "13px", // æ ¹æ®çŽ¯å½¢å›¾çš„ä½ç½®è°ƒæ•´
      //     top: "61px", // æ ¹æ®çŽ¯å½¢å›¾çš„ä½ç½®è°ƒæ•´
      //     z: -10,
      //     bounding: "raw",
      //     origin: [0, 0],
      //     style: {
      //       image: require(`@/assets/images/quan.png`), // ç¬¬ä¸€ä¸ªçŽ¯å½¢å›¾çš„èƒŒæ™¯å›¾ç‰‡è·¯å¾„
      //       width: 100,
      //       height: 100,
      //     },
      //   },
      //   {
      //     type: "image",
      //     id: "background2",
      //     left: "131px", // æ ¹æ®çŽ¯å½¢å›¾çš„ä½ç½®è°ƒæ•´
      //     top: "61px", // æ ¹æ®çŽ¯å½¢å›¾çš„ä½ç½®è°ƒæ•´
      //     z: -10,
      //     bounding: "raw",
      //     origin: [0, 0],
      //     style: {
      //       image: require(`@/assets/images/quan.png`), // ç¬¬ä¸€ä¸ªçŽ¯å½¢å›¾çš„èƒŒæ™¯å›¾ç‰‡è·¯å¾„
      //       width: 100,
      //       height: 100,
      //     },
      //   },
      // ],
      series: [
        // å·¦ä¾§
        {
          name: "å·¦-数据",
          type: "pie",
          // radius: ['65%', '75%'],
          radius: ["29%", "36%"], //环变细
          center: ["25%", "49%"],
          silent: true,
          // clockwise: false,
          startAngle: 90,
          z: 1,
          zlevel: 0,
          label: {
            normal: {
              position: "center",
            },
          },
          data: data1,
        },
        {
          name: "å·¦-中间渐变",
          type: "pie",
          startAngle: 90,
          z: 20,
          zlevel: 20,
          radius: "28%",
          hoverAnimation: false,
          center: ["25%", "49%"],
          // zlevel: 2,
          itemStyle: {
            normal: {
              labelLine: {
                show: false,
              },
              color: new echarts.graphic.RadialGradient(0.5, 0.5, 1, [
                {
                  offset: 1,
                  color: "rgba(55,70,130, 1)",
                },
                {
                  offset: 0,
                  color: "rgba(55,70,130, 0)",
                },
              ]),
              shadowBlur: 10,
              // shadowColor: 'rgba(55,70,130, 1)'
            },
          },
          data: [
            {
              value: 100,
            },
          ],
        },
        {
          name: "å·¦-刻度间隔",
          z: 2,
          // zlevel: 1,
          type: "gauge",
          radius: "57%",
          center: ["25%", "49%"],
          startAngle: 20,
          endAngle: -360,
          splitNumber: 10,
          hoverAnimation: true,
          axisTick: {
            show: true,
            splitNumber: 1,
            length: 14, //刻度长度
            // Distance: 40, //刻度间隔距离
            lineStyle: {
              width: 5,
              color: new echarts.graphic.LinearGradient(
                0,
                0,
                0,
                1,
                [
                  {
                    offset: 0,
                    color: "rgba(8, 52, 106, 0.039)", // 0% å¤„的颜色
                  },
                  {
                    offset: 1,
                    color: "rgba(8, 52, 106, 0.239)", // 100% å¤„的颜色
                  },
                ],
                false
              ),
            },
          },
          splitLine: {
            show: false,
          },
          axisLabel: {
            show: false,
          },
          pointer: {
            show: false,
          },
          axisLine: {
            lineStyle: {
              opacity: 0,
            },
          },
          detail: {
            show: false,
          },
          data: [100],
        },
        // å³ä¾§
        {
          name: "右-数据",
          type: "pie",
          // radius: ['65%', '75%'],
          radius: ["29%", "36%"], //环变细
          center: ["74%", "49%"],
          silent: true,
          // clockwise: false,
          startAngle: 90,
          z: 1,
          zlevel: 0,
          label: {
            normal: {
              position: "center",
            },
          },
          data: data2,
        },
        {
          name: "右-中间渐变",
          type: "pie",
          startAngle: 90,
          radius: "28%",
          hoverAnimation: false,
          center: ["74%", "49%"],
          itemStyle: {
            normal: {
              labelLine: {
                show: false,
              },
              color: new echarts.graphic.RadialGradient(0.5, 0.5, 1, [
                {
                  offset: 1,
                  color: "rgba(55,70,130, 1)",
                },
                {
                  offset: 0,
                  color: "rgba(55,70,130, 0)",
                },
              ]),
              shadowBlur: 10,
              // shadowColor: 'rgba(55,70,130, 1)'
            },
          },
          data: [
            {
              value: 100,
            },
          ],
        },
        {
          name: "右-刻度间隔",
          z: 2,
          type: "gauge",
          radius: "45%",
          center: ["74%", "49%"],
          startAngle: 90,
          endAngle: -360,
          splitNumber: 10,
          hoverAnimation: true,
          axisTick: {
            show: true,
            splitNumber: 1,
            length: 20,
            lineStyle: {
              width: 10,
              color: "#1183a7",
              shadowColor: "rgb(4,31,62, 0.5)",
            },
          },
          splitLine: {
            show: false,
          },
          axisLabel: {
            show: false,
          },
          pointer: {
            show: false,
          },
          axisLine: {
            lineStyle: {
              opacity: 0,
            },
          },
          detail: {
            show: false,
          },
          data: [100],
        },
      ],
    };
    this.myChart.setOption(this.option);
    const that = this;
    window.addEventListener("resize", () => {
      that.myChart.resize();
    });
    // this.getData();
    this.defineEvent();
    // this.selectPie();
    this.hignLightPie();
    // timer = setInterval(this.selectPie, 1500);
  },
  methods: {
    // getData() {
    //   this.data1 = [{ actualData: 144, planData: 288 }];
    //   this.$set(this.option.series[0], "data", [
    //     { value: this.data1[0].actualData },
    //     { value: this.data1[0].planData - this.data1[0].actualData },
    //   ]);
    //   this.$set(this.option.series[1], "data", [
    //     { value: this.data2[0].actualData },
    //     { value: this.data2[0].planData - this.data2[0].actualData },
    //   ]);
    //   console.log(this.option.series[0].data);
    //   this.myChart.setOption(this.option);
    // },
    selectPie() {
      let dataLen = this.option.series[0].data.length;
      this.currentIndex = (this.currentIndex + 1) % dataLen;
      this.hignLightPie();
    },
    // è½®æ’­ç‚¹äº®é¥¼å›¾
    hignLightPie() {
      const dataPie = this.option.series[0].data;
      // ç†„灭所有扇形区域
      for (var index in dataPie) {
        this.myChart.dispatchAction({
          type: "downplay",
          seriesIndex: 0,
          dataIndex: index,
        });
        this.myChart.dispatchAction({
          type: "downplay",
          seriesIndex: 1,
          dataIndex: index,
        });
      }
      // ç‚¹äº®å½“前扇形区域
      this.myChart.dispatchAction({
        type: "highlight",
        seriesIndex: 0,
        dataIndex: 0,
      });
      this.myChart.dispatchAction({
        type: "highlight",
        seriesIndex: 1,
        dataIndex: 0,
      });
    },
    // é¼ æ ‡è§¦æ‘¸è½®æ’­æ‚¬åœäº‹ä»¶
    defineEvent() {
      // é¼ æ ‡ç§»å‡ºè½®æ’­ç»§ç»­
      this.myChart.on("mouseout", () => {
        if (timer) clearInterval(timer);
        timer = setInterval(this.selectPie, 1500);
      });
      // é¼ æ ‡è¿›å…¥è½®æ’­æ‚¬åœ
      this.myChart.on("mouseover", (params) => {
        clearInterval(timer);
        this.currentIndex = params.dataIndex;
        this.hignLightPie();
      });
      // é¼ æ ‡ç§»å…¥legend轮播悬停
      this.myChart.getZr().on("mouseover", (event) => {
        const legendDataIndex = event.topTarget.parent.__legendDataIndex; // æ¯ä¸ªlegend的index
        clearInterval(timer);
        this.currentIndex = legendDataIndex;
        this.hignLightPie();
      });
      // é¼ æ ‡ç§»å‡ºlegend轮播继续
      this.myChart.getZr().on("mouseout", () => {
        if (timer) clearInterval(timer);
        timer = setInterval(this.selectPie, 1500);
      });
    },
  },
};
</script>
<style>
#echarts4 {
  transform: scaleY(2);
}
</style>
yiqi_screen_3d/src/components/ProductionStatistics copy.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,277 @@
<template>
  <!-- æœ¬ç­/本月产量统计 -->
  <div class="box-container box4" id="echarts4"></div>
</template>
<script>
let timer = null;
export default {
  props: {
    produceStatisData: {
      type: Object,
      default: () => {},
    },
  },
  data() {
    return {
      option: {},
      myChart: {},
      currentIndex: -1,
      data1: [],
      data2: [{ actualData: 2782, planData: 11128 }],
    };
  },
  watch: {
    produceStatisData(val) {
      // æµ‹è¯•用:
      val.currentShiftProduceNum = 280;
      val.currentShiftPlanNum = 300;
      // å½“前班组实际生产数量 currentShiftProduceNum
      // å½“前班组计划生产数量 currentShiftPlanNum
      var num1 = val.currentShiftProduceNum; //实际生产数量
      var num2 = val.currentShiftPlanNum - val.currentShiftProduceNum; //计划生产数量
      if (val.currentShiftPlanNum == 0) {
        //分母为0 æ˜¾ç¤º0%
        num1 = 0;
        num2 = 10;
      }
      this.$set(this.option.series[0], "data", [
        // { value: 1 },  //实际生产数量 1/ (9+1) = 10%
        // { value: 9 },
        {
          value: num1,
        }, //实际生产数量
        {
          value: num2,
        },
      ]);
      var num3 = val.currentMonthProduceNum;
      var num4 = val.currentMonthPlanNum - val.currentMonthProduceNum;
      if (val.currentMonthPlanNum == 0) {
        //分母为0 æ˜¾ç¤º0%
        num3 = 0;
        num4 = 10;
      }
      this.$set(this.option.series[1], "data", [
        { value: num3 },
        { value: num4 },
      ]);
      this.myChart.setOption(this.option);
      this.hignLightPie();
    },
  },
  mounted() {
    this.myChart = this.$echarts.init(document.getElementById("echarts4"));
    this.option = {
      color: ["#00f6fe", "transparent"],
      // æ’入背景图
      //    graphic: [
      //   {
      //     type: "image",
      //     id: "background1",
      //     left: "13px", // æ ¹æ®çŽ¯å½¢å›¾çš„ä½ç½®è°ƒæ•´
      //     top: "61px", // æ ¹æ®çŽ¯å½¢å›¾çš„ä½ç½®è°ƒæ•´
      //     z: -10,
      //     bounding: "raw",
      //     origin: [0, 0],
      //     style: {
      //       image: require(`@/assets/images/quan.png`), // ç¬¬ä¸€ä¸ªçŽ¯å½¢å›¾çš„èƒŒæ™¯å›¾ç‰‡è·¯å¾„
      //       width: 100,
      //       height: 100,
      //     },
      //   },
      //   {
      //     type: "image",
      //     id: "background2",
      //     left: "131px", // æ ¹æ®çŽ¯å½¢å›¾çš„ä½ç½®è°ƒæ•´
      //     top: "61px", // æ ¹æ®çŽ¯å½¢å›¾çš„ä½ç½®è°ƒæ•´
      //     z: -10,
      //     bounding: "raw",
      //     origin: [0, 0],
      //     style: {
      //       image: require(`@/assets/images/quan.png`), // ç¬¬ä¸€ä¸ªçŽ¯å½¢å›¾çš„èƒŒæ™¯å›¾ç‰‡è·¯å¾„
      //       width: 100,
      //       height: 100,
      //     },
      //   },
      // ],
      series: [
        {
          name: "Access From",
          type: "pie",
          // padAngle: 5, //环与环之间的间隙
          radius: ["29%", "36%"], //环变细
          center: ["25%", "49%"],
          // avoidLabelOverlap: false,
          label: {
            show: false,
            position: "center",
            formatter: function (params) {
              return params.percent < 1
                ? params.percent + "%"
                : Math.floor(params.percent) + "%"; // å››èˆäº”入到整数
            },
            color: "#fff",
            fontSize: 12,
          },
          emphasis: {
            //饼图中间的字体大小
            scale: false,
            label: {
              show: true,
              fontSize: 22,
              color: "#19d8d0",
              fontWeight: "normal",
            },
          },
          labelLine: {
            show: false,
          },
          itemStyle: {
            borderRadius: 3,
            borderColor: "transparent",
            borderWidth: 10,
          },
          data: [],
        },
        {
          name: "Access From",
          type: "pie",
          // padAngle: 5, //环与环之间的间隙
          // radius: ["25%", "40%"],
          radius: ["29%", "36%"], //环变细
          center: ["74%", "49%"],
          // avoidLabelOverlap: false,
          label: {
            show: false,
            position: "center",
            formatter: function (params) {
              return params.percent < 1
                ? params.percent + "%"
                : Math.floor(params.percent) + "%"; // å››èˆäº”入到整数
            },
            color: "#fff",
            fontSize: 12,
          },
          itemStyle: {
            borderRadius: 3,
            borderColor: "transparent",
            borderWidth: 10,
          },
          emphasis: {
            scale: false,
            label: {
              show: true,
              fontSize: 22,
              color: "#19d8d0",
              fontWeight: "normal",
            },
          },
          labelLine: {
            show: false,
          },
          data: [],
        },
      ],
    };
    this.myChart.setOption(this.option);
    const that = this;
    window.addEventListener("resize", () => {
      that.myChart.resize();
    });
    // this.getData();
    this.defineEvent();
    // this.selectPie();
    this.hignLightPie();
    // timer = setInterval(this.selectPie, 1500);
  },
  methods: {
    // getData() {
    //   this.data1 = [{ actualData: 144, planData: 288 }];
    //   this.$set(this.option.series[0], "data", [
    //     { value: this.data1[0].actualData },
    //     { value: this.data1[0].planData - this.data1[0].actualData },
    //   ]);
    //   this.$set(this.option.series[1], "data", [
    //     { value: this.data2[0].actualData },
    //     { value: this.data2[0].planData - this.data2[0].actualData },
    //   ]);
    //   console.log(this.option.series[0].data);
    //   this.myChart.setOption(this.option);
    // },
    selectPie() {
      let dataLen = this.option.series[0].data.length;
      this.currentIndex = (this.currentIndex + 1) % dataLen;
      this.hignLightPie();
    },
    // è½®æ’­ç‚¹äº®é¥¼å›¾
    hignLightPie() {
      const dataPie = this.option.series[0].data;
      // ç†„灭所有扇形区域
      for (var index in dataPie) {
        this.myChart.dispatchAction({
          type: "downplay",
          seriesIndex: 0,
          dataIndex: index,
        });
        this.myChart.dispatchAction({
          type: "downplay",
          seriesIndex: 1,
          dataIndex: index,
        });
      }
      // ç‚¹äº®å½“前扇形区域
      this.myChart.dispatchAction({
        type: "highlight",
        seriesIndex: 0,
        dataIndex: 0,
      });
      this.myChart.dispatchAction({
        type: "highlight",
        seriesIndex: 1,
        dataIndex: 0,
      });
    },
    // é¼ æ ‡è§¦æ‘¸è½®æ’­æ‚¬åœäº‹ä»¶
    defineEvent() {
      // é¼ æ ‡ç§»å‡ºè½®æ’­ç»§ç»­
      this.myChart.on("mouseout", () => {
        if (timer) clearInterval(timer);
        timer = setInterval(this.selectPie, 1500);
      });
      // é¼ æ ‡è¿›å…¥è½®æ’­æ‚¬åœ
      this.myChart.on("mouseover", (params) => {
        clearInterval(timer);
        this.currentIndex = params.dataIndex;
        this.hignLightPie();
      });
      // é¼ æ ‡ç§»å…¥legend轮播悬停
      this.myChart.getZr().on("mouseover", (event) => {
        const legendDataIndex = event.topTarget.parent.__legendDataIndex; // æ¯ä¸ªlegend的index
        clearInterval(timer);
        this.currentIndex = legendDataIndex;
        this.hignLightPie();
      });
      // é¼ æ ‡ç§»å‡ºlegend轮播继续
      this.myChart.getZr().on("mouseout", () => {
        if (timer) clearInterval(timer);
        timer = setInterval(this.selectPie, 1500);
      });
    },
  },
};
</script>
<style>
#echarts4 {
  transform: scaleY(2);
}
</style>
yiqi_screen_3d/src/components/ProductionStatistics copy1113.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,325 @@
<template>
  <!-- æœ¬ç­/本月产量统计 -->
  <div class="box-container box4" id="echarts4"></div>
</template>
<script>
let timer = null;
import * as echarts from "echarts";
export default {
  props: {
    produceStatisData: {
      type: Object,
      default: () => {},
    },
  },
  data() {
    return {
      option: {},
      myChart: {},
      currentIndex: -1,
      data1: [],
      data2: [{ actualData: 2782, planData: 11128 }],
    };
  },
  // watch: {
  //   produceStatisData(val) {
  //     // æµ‹è¯•用:
  //     val.currentShiftProduceNum = 280;
  //     val.currentShiftPlanNum = 300;
  //     // å½“前班组实际生产数量 currentShiftProduceNum
  //     // å½“前班组计划生产数量 currentShiftPlanNum
  //     var num1 = val.currentShiftProduceNum; //实际生产数量
  //     var num2 = val.currentShiftPlanNum - val.currentShiftProduceNum; //计划生产数量
  //     if (val.currentShiftPlanNum == 0) {
  //       //分母为0 æ˜¾ç¤º0%
  //       num1 = 0;
  //       num2 = 10;
  //     }
  //     this.$set(this.option.series[0], "data", [
  //       // { value: 1 },  //实际生产数量 1/ (9+1) = 10%
  //       // { value: 9 },
  //       {
  //         value: num1,
  //       }, //实际生产数量
  //       {
  //         value: num2,
  //       },
  //     ]);
  //     var num3 = val.currentMonthProduceNum;
  //     var num4 = val.currentMonthPlanNum - val.currentMonthProduceNum;
  //     if (val.currentMonthPlanNum == 0) {
  //       //分母为0 æ˜¾ç¤º0%
  //       num3 = 0;
  //       num4 = 10;
  //     }
  //     this.$set(this.option.series[1], "data", [
  //       { value: num3 },
  //       { value: num4 },
  //     ]);
  //     this.myChart.setOption(this.option);
  //     this.hignLightPie();
  //   },
  // },
  mounted() {
    this.myChart = this.$echarts.init(document.getElementById("echarts4"));
    var value = 60;
    var value2 = 15;
    let data1 = [
      {
        value: value,
        name: "",
        itemStyle: {
          normal: {
            color: "#62fbf8",
          },
        },
      },
      {
        value: 100 - value,
        name: "",
        label: {
          normal: {
            show: false,
          },
        },
        itemStyle: {
          normal: {
            color: "rgba(0,0,0,0)",
          },
        },
      },
    ];
    let data2 = [
      {
        value: value2,
        name: "",
        itemStyle: {
          normal: {
            color: "rgb(105,206,195)",
          },
        },
      },
      {
        value: 100 - value2,
        name: "",
        label: {
          normal: {
            show: false,
          },
        },
        itemStyle: {
          normal: {
            color: "rgba(0,0,0,0)",
          },
        },
      },
    ];
    this.option = {
      color: ["#00f6fe", "transparent"],
      series: [
        // å·¦ä¾§
        {
          name: "å·¦-中间渐变",
          type: "pie",
          startAngle: 90,
          radius: "38%",
          hoverAnimation: false,
          center: ["25%", "49%"],
          itemStyle: {
            normal: {
              labelLine: {
                show: false,
              },
              color: {
                type: "radial",
                x: 0.5,
                y: 0.5,
                r: 0.4,
                colorStops: [
                  {
                    offset: 0,
                    color: "rgba(55,70,130, 0)", // 0% å¤„的颜色
                  },
                  {
                    offset: 1,
                    color: "rgba(55,70,130, 1)", // 100% å¤„的颜色
                  },
                ],
              },
              // color:'red',
              shadowBlur: 10,
              // shadowColor: 'rgba(55,70,130, 1)'
            },
          },
          data: [
            {
              value: 100,
            },
          ],
        },
        {
          name: "å·¦-数据",
          type: "pie",
          // radius: ['65%', '75%'],
          radius: ["29%", "36%"], //环变细
          center: ["25%", "49%"],
          silent: true,
          // clockwise: false,
          startAngle: 90,
          z: 1,
          zlevel: 1,
          label: {
            normal: {
              position: "center",
            },
          },
          data: data1,
        },
        {
          name: "å·¦-刻度间隔",
          z: 2,
          zlevel: 1,
          type: "gauge",
          radius: "55%",
          center: ["25%", "49%"],
          startAngle: 90,
          endAngle: -360,
          splitNumber: 10,
          hoverAnimation: true,
          axisTick: {
            show: true,
            splitNumber: 1,
            length: 15,
            lineStyle: {
              width: 5,
              color: "rgba(55,70,130, 0.1)",
              // shadowColor: "rgb(4,31,62, 0.5)",
            },
          },
          splitLine: {
            show: false,
          },
          axisLabel: {
            show: false,
          },
          pointer: {
            show: false,
          },
          axisLine: {
            lineStyle: {
              opacity: 0,
            },
          },
          detail: {
            show: false,
          },
          data: [10],
        },
      ],
    };
    this.myChart.setOption(this.option);
    const that = this;
    window.addEventListener("resize", () => {
      that.myChart.resize();
    });
    // this.getData();
    this.defineEvent();
    // this.selectPie();
    this.hignLightPie();
    // timer = setInterval(this.selectPie, 1500);
  },
  methods: {
    // getData() {
    //   this.data1 = [{ actualData: 144, planData: 288 }];
    //   this.$set(this.option.series[0], "data", [
    //     { value: this.data1[0].actualData },
    //     { value: this.data1[0].planData - this.data1[0].actualData },
    //   ]);
    //   this.$set(this.option.series[1], "data", [
    //     { value: this.data2[0].actualData },
    //     { value: this.data2[0].planData - this.data2[0].actualData },
    //   ]);
    //   console.log(this.option.series[0].data);
    //   this.myChart.setOption(this.option);
    // },
    selectPie() {
      let dataLen = this.option.series[0].data.length;
      this.currentIndex = (this.currentIndex + 1) % dataLen;
      this.hignLightPie();
    },
    // è½®æ’­ç‚¹äº®é¥¼å›¾
    hignLightPie() {
      const dataPie = this.option.series[0].data;
      // ç†„灭所有扇形区域
      for (var index in dataPie) {
        this.myChart.dispatchAction({
          type: "downplay",
          seriesIndex: 0,
          dataIndex: index,
        });
        this.myChart.dispatchAction({
          type: "downplay",
          seriesIndex: 1,
          dataIndex: index,
        });
      }
      // ç‚¹äº®å½“前扇形区域
      this.myChart.dispatchAction({
        type: "highlight",
        seriesIndex: 0,
        dataIndex: 0,
      });
      this.myChart.dispatchAction({
        type: "highlight",
        seriesIndex: 1,
        dataIndex: 0,
      });
    },
    // é¼ æ ‡è§¦æ‘¸è½®æ’­æ‚¬åœäº‹ä»¶
    defineEvent() {
      // é¼ æ ‡ç§»å‡ºè½®æ’­ç»§ç»­
      this.myChart.on("mouseout", () => {
        if (timer) clearInterval(timer);
        timer = setInterval(this.selectPie, 1500);
      });
      // é¼ æ ‡è¿›å…¥è½®æ’­æ‚¬åœ
      this.myChart.on("mouseover", (params) => {
        clearInterval(timer);
        this.currentIndex = params.dataIndex;
        this.hignLightPie();
      });
      // é¼ æ ‡ç§»å…¥legend轮播悬停
      this.myChart.getZr().on("mouseover", (event) => {
        const legendDataIndex = event.topTarget.parent.__legendDataIndex; // æ¯ä¸ªlegend的index
        clearInterval(timer);
        this.currentIndex = legendDataIndex;
        this.hignLightPie();
      });
      // é¼ æ ‡ç§»å‡ºlegend轮播继续
      this.myChart.getZr().on("mouseout", () => {
        if (timer) clearInterval(timer);
        timer = setInterval(this.selectPie, 1500);
      });
    },
  },
};
</script>
<style>
#echarts4 {
  /* transform: scaleY(2); */
}
</style>
yiqi_screen_3d/src/components/ProductionStatistics.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,278 @@
<template>
  <!-- æœ¬ç­/本月产量统计 -->
  <div class="box-container box4" id="echarts4"></div>
</template>
<script>
let timer = null;
export default {
  props: {
    produceStatisData: {
      type: Object,
      default: () => {},
    },
  },
  data() {
    return {
      option: {},
      myChart: {},
      currentIndex: -1,
      data1: [],
      data2: [{ actualData: 2782, planData: 11128 }],
    };
  },
  watch: {
    produceStatisData(val) {
      // æµ‹è¯•用:
      // val.currentShiftProduceNum = 280;
      // val.currentShiftPlanNum = 300;
      // å½“前班组实际生产数量 currentShiftProduceNum
      // å½“前班组计划生产数量 currentShiftPlanNum
      var num1 = val.currentShiftProduceNum; //实际生产数量
      var num2 = val.currentShiftPlanNum - val.currentShiftProduceNum; //计划生产数量
      if (val.currentShiftPlanNum == 0) {
        //分母为0 æ˜¾ç¤º0%
        num1 = 0;
        num2 = 10;
      }
      this.$set(this.option.series[0], "data", [
        // { value: 1 },  //实际生产数量 1/ (9+1) = 10%
        // { value: 9 },
        {
          value: num1,
        }, //实际生产数量
        {
          value: num2,
        },
      ]);
      var num3 = val.currentMonthProduceNum;
      var num4 = val.currentMonthPlanNum - val.currentMonthProduceNum;
      if (val.currentMonthPlanNum == 0) {
        //分母为0 æ˜¾ç¤º0%
        num3 = 0;
        num4 = 10;
      }
      this.$set(this.option.series[1], "data", [
        { value: num3 },
        { value: num4 },
      ]);
      this.myChart.setOption(this.option);
      this.hignLightPie();
    },
  },
  mounted() {
    this.myChart = this.$echarts.init(document.getElementById("echarts4"));
    this.option = {
      color: ["#00f6fe", "transparent"],
      // æ’入背景图
      //    graphic: [
      //   {
      //     type: "image",
      //     id: "background1",
      //     left: "13px", // æ ¹æ®çŽ¯å½¢å›¾çš„ä½ç½®è°ƒæ•´
      //     top: "61px", // æ ¹æ®çŽ¯å½¢å›¾çš„ä½ç½®è°ƒæ•´
      //     z: -10,
      //     bounding: "raw",
      //     origin: [0, 0],
      //     style: {
      //       image: require(`@/assets/images/quan.png`), // ç¬¬ä¸€ä¸ªçŽ¯å½¢å›¾çš„èƒŒæ™¯å›¾ç‰‡è·¯å¾„
      //       width: 100,
      //       height: 100,
      //     },
      //   },
      //   {
      //     type: "image",
      //     id: "background2",
      //     left: "131px", // æ ¹æ®çŽ¯å½¢å›¾çš„ä½ç½®è°ƒæ•´
      //     top: "61px", // æ ¹æ®çŽ¯å½¢å›¾çš„ä½ç½®è°ƒæ•´
      //     z: -10,
      //     bounding: "raw",
      //     origin: [0, 0],
      //     style: {
      //       image: require(`@/assets/images/quan.png`), // ç¬¬ä¸€ä¸ªçŽ¯å½¢å›¾çš„èƒŒæ™¯å›¾ç‰‡è·¯å¾„
      //       width: 100,
      //       height: 100,
      //     },
      //   },
      // ],
      series: [
        {
          name: "Access From",
          type: "pie",
          // padAngle: 5, //环与环之间的间隙
          radius: ["29%", "36%"], //环变细
          center: ["25%", "49%"],
          // avoidLabelOverlap: false,
          label: {
            show: false,
            position: "center",
            formatter: function (params) {
              return params.percent < 1
                ? params.percent + "%"
                : Math.floor(params.percent) + "%"; // å››èˆäº”入到整数
            },
            color: "#fff",
            fontSize: 12,
          },
          emphasis: {
            //饼图中间的字体大小
            scale: false,
            label: {
              show: true,
              fontSize: 22,
              color: "#19d8d0",
              fontWeight: "normal",
            },
          },
          labelLine: {
            show: false,
          },
          itemStyle: {
            borderRadius: 3,
            borderColor: "transparent",
            borderWidth: 10,
          },
          data: [],
        },
        {
          name: "Access From",
          type: "pie",
          // padAngle: 5, //环与环之间的间隙
          // radius: ["25%", "40%"],
          radius: ["29%", "36%"], //环变细
          center: ["74%", "49%"],
          // avoidLabelOverlap: false,
          label: {
            show: false,
            position: "center",
            formatter: function (params) {
              return params.percent < 1
                ? params.percent + "%"
                : Math.floor(params.percent) + "%"; // å››èˆäº”入到整数
            },
            color: "#fff",
            fontSize: 12,
          },
          itemStyle: {
            borderRadius: 3,
            borderColor: "transparent",
            borderWidth: 10,
          },
          emphasis: {
            scale: false,
            label: {
              show: true,
              fontSize: 22,
              color: "#19d8d0",
              fontWeight: "normal",
            },
          },
          labelLine: {
            show: false,
          },
          data: [],
        },
      ],
    };
    this.myChart.setOption(this.option);
    const that = this;
    window.addEventListener("resize", () => {
      that.myChart.resize();
    });
    // this.getData();
    this.defineEvent();
    // this.selectPie();
    this.hignLightPie();
    // timer = setInterval(this.selectPie, 1500);
  },
  methods: {
    // getData() {
    //   this.data1 = [{ actualData: 144, planData: 288 }];
    //   this.$set(this.option.series[0], "data", [
    //     { value: this.data1[0].actualData },
    //     { value: this.data1[0].planData - this.data1[0].actualData },
    //   ]);
    //   this.$set(this.option.series[1], "data", [
    //     { value: this.data2[0].actualData },
    //     { value: this.data2[0].planData - this.data2[0].actualData },
    //   ]);
    //   console.log(this.option.series[0].data);
    //   this.myChart.setOption(this.option);
    // },
    selectPie() {
      let dataLen = this.option.series[0].data.length;
      this.currentIndex = (this.currentIndex + 1) % dataLen;
      this.hignLightPie();
    },
    // è½®æ’­ç‚¹äº®é¥¼å›¾
    hignLightPie() {
      const dataPie = this.option.series[0].data;
      // ç†„灭所有扇形区域
      for (var index in dataPie) {
        this.myChart.dispatchAction({
          type: "downplay",
          seriesIndex: 0,
          dataIndex: index,
        });
        this.myChart.dispatchAction({
          type: "downplay",
          seriesIndex: 1,
          dataIndex: index,
        });
      }
      // ç‚¹äº®å½“前扇形区域
      this.myChart.dispatchAction({
        type: "highlight",
        seriesIndex: 0,
        dataIndex: 0,
      });
      this.myChart.dispatchAction({
        type: "highlight",
        seriesIndex: 1,
        dataIndex: 0,
      });
    },
    // é¼ æ ‡è§¦æ‘¸è½®æ’­æ‚¬åœäº‹ä»¶
    defineEvent() {
      // é¼ æ ‡ç§»å‡ºè½®æ’­ç»§ç»­
      this.myChart.on("mouseout", () => {
        if (timer) clearInterval(timer);
        timer = setInterval(this.selectPie, 1500);
      });
      // é¼ æ ‡è¿›å…¥è½®æ’­æ‚¬åœ
      this.myChart.on("mouseover", (params) => {
        clearInterval(timer);
        this.currentIndex = params.dataIndex;
        this.hignLightPie();
      });
      // é¼ æ ‡ç§»å…¥legend轮播悬停
      this.myChart.getZr().on("mouseover", (event) => {
        const legendDataIndex = event.topTarget.parent.__legendDataIndex; // æ¯ä¸ªlegend的index
        clearInterval(timer);
        this.currentIndex = legendDataIndex;
        this.hignLightPie();
      });
      // é¼ æ ‡ç§»å‡ºlegend轮播继续
      this.myChart.getZr().on("mouseout", () => {
        if (timer) clearInterval(timer);
        timer = setInterval(this.selectPie, 1500);
      });
    },
  },
};
</script>
<style>
#echarts4 {
  transform: scaleY(2);
}
</style>
yiqi_screen_3d/src/components/ProductionStatistics1.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,303 @@
<template>
  <!-- æœ¬ç­/本月产量统计 -->
  <div class="box-container box4" id="echarts4"></div>
</template>
<script>
let timer = null;
export default {
  props: {
    produceStatisData: {
      type: Object,
      default: () => {},
    },
  },
  data() {
    return {
      option: {},
      myChart: {},
      currentIndex: -1,
      data1: [],
      data2: [{ actualData: 2782, planData: 11128 }],
    };
  },
  watch: {
    produceStatisData(val) {
      // æµ‹è¯•用:
      val.currentShiftProduceNum = 280;
      val.currentShiftPlanNum = 300;
      // å½“前班组实际生产数量 currentShiftProduceNum
      // å½“前班组计划生产数量 currentShiftPlanNum
      var num1 = val.currentShiftProduceNum; //实际生产数量
      var num2 = val.currentShiftPlanNum - val.currentShiftProduceNum; //计划生产数量
      if (val.currentShiftPlanNum == 0) {
        //分母为0 æ˜¾ç¤º0%
        num1 = 0;
        num2 = 10;
      }
      // this.$set(this.option.series[0], "data", [
      //   // { value: 1 },  //实际生产数量 1/ (9+1) = 10%
      //   // { value: 9 },
      //   {
      //     value: num1,
      //   }, //实际生产数量
      //   {
      //     value: num2,
      //   },
      // ]);
      var num3 = val.currentMonthProduceNum;
      var num4 = val.currentMonthPlanNum - val.currentMonthProduceNum;
      if (val.currentMonthPlanNum == 0) {
        //分母为0 æ˜¾ç¤º0%
        num3 = 0;
        num4 = 10;
      }
      // this.$set(this.option.series[1], "data", [
      //   { value: num3 },
      //   { value: num4 },
      // ]);
      let value1 = 90.56;
      let data1 = [
        {
          value: value1,
          name: "",
          itemStyle: {
            normal: {
              color: {
                // å®Œæˆçš„圆环的颜色
                colorStops: [
                  {
                    offset: 0,
                    color: "#0975af",
                  },
                  {
                    offset: 1,
                    color: "#00bdfe",
                  },
                ],
              },
            },
          },
        },
        {
          value: 100 - value1,
          name: "",
          label: {
            normal: {
              show: false,
            },
          },
          itemStyle: {
            normal: {
              color: "#163367",
            },
          },
        },
      ];
      this.$set(this.option.series[0], "data", data1);
      this.myChart.setOption(this.option);
      this.hignLightPie();
    },
  },
  mounted() {
    this.myChart = this.$echarts.init(document.getElementById("echarts4"));
    this.option = {
      color: ["#00f6fe", "transparent"],
      // æ’入背景图
      //    graphic: [
      //   {
      //     type: "image",
      //     id: "background1",
      //     left: "13px", // æ ¹æ®çŽ¯å½¢å›¾çš„ä½ç½®è°ƒæ•´
      //     top: "61px", // æ ¹æ®çŽ¯å½¢å›¾çš„ä½ç½®è°ƒæ•´
      //     z: -10,
      //     bounding: "raw",
      //     origin: [0, 0],
      //     style: {
      //       image: require(`@/assets/images/quan.png`), // ç¬¬ä¸€ä¸ªçŽ¯å½¢å›¾çš„èƒŒæ™¯å›¾ç‰‡è·¯å¾„
      //       width: 100,
      //       height: 100,
      //     },
      //   },
      //   {
      //     type: "image",
      //     id: "background2",
      //     left: "131px", // æ ¹æ®çŽ¯å½¢å›¾çš„ä½ç½®è°ƒæ•´
      //     top: "61px", // æ ¹æ®çŽ¯å½¢å›¾çš„ä½ç½®è°ƒæ•´
      //     z: -10,
      //     bounding: "raw",
      //     origin: [0, 0],
      //     style: {
      //       image: require(`@/assets/images/quan.png`), // ç¬¬ä¸€ä¸ªçŽ¯å½¢å›¾çš„èƒŒæ™¯å›¾ç‰‡è·¯å¾„
      //       width: 100,
      //       height: 100,
      //     },
      //   },
      // ],
      series: [
        {
          name: "Access From",
          type: "pie",
          radius: ["58%", "48%"],
          silent: true,
          clockwise: true,
          startAngle: 90,
          endAngle: -360,
          z: 0,
          zlevel: 0,
          label: {
            normal: {
              position: "center",
            },
          },
          animation: false,
          data: [],
        },
        {
          name: "",
          type: "gauge",
          radius: "58%",
          center: ["50%", "50%"],
          startAngle: 90,
          endAngle: -360,
          splitNumber: 12,
          hoverAnimation: true,
          axisTick: {
            show: false,
          },
          splitLine: {
            length: 60,
            distance: -10,
            lineStyle: {
              width: 25,
              color: "#0a0d35",
            },
          },
          axisLabel: {
            show: false,
          },
          pointer: {
            show: false,
          },
          axisLine: {
            lineStyle: {
              opacity: 0,
            },
          },
          detail: {
            show: false,
          },
          animation: false,
          data: [
            {
              value: 0,
              name: "",
            },
          ],
        },
      ],
    };
    this.myChart.setOption(this.option);
    const that = this;
    window.addEventListener("resize", () => {
      that.myChart.resize();
    });
    // this.getData();
    this.defineEvent();
    // this.selectPie();
    this.hignLightPie();
    // timer = setInterval(this.selectPie, 1500);
  },
  methods: {
    // getData() {
    //   this.data1 = [{ actualData: 144, planData: 288 }];
    //   this.$set(this.option.series[0], "data", [
    //     { value: this.data1[0].actualData },
    //     { value: this.data1[0].planData - this.data1[0].actualData },
    //   ]);
    //   this.$set(this.option.series[1], "data", [
    //     { value: this.data2[0].actualData },
    //     { value: this.data2[0].planData - this.data2[0].actualData },
    //   ]);
    //   console.log(this.option.series[0].data);
    //   this.myChart.setOption(this.option);
    // },
    selectPie() {
      let dataLen = this.option.series[0].data.length;
      this.currentIndex = (this.currentIndex + 1) % dataLen;
      this.hignLightPie();
    },
    // è½®æ’­ç‚¹äº®é¥¼å›¾
    hignLightPie() {
      const dataPie = this.option.series[0].data;
      // ç†„灭所有扇形区域
      for (var index in dataPie) {
        this.myChart.dispatchAction({
          type: "downplay",
          seriesIndex: 0,
          dataIndex: index,
        });
        this.myChart.dispatchAction({
          type: "downplay",
          seriesIndex: 1,
          dataIndex: index,
        });
      }
      // ç‚¹äº®å½“前扇形区域
      this.myChart.dispatchAction({
        type: "highlight",
        seriesIndex: 0,
        dataIndex: 0,
      });
      this.myChart.dispatchAction({
        type: "highlight",
        seriesIndex: 1,
        dataIndex: 0,
      });
    },
    // é¼ æ ‡è§¦æ‘¸è½®æ’­æ‚¬åœäº‹ä»¶
    defineEvent() {
      // é¼ æ ‡ç§»å‡ºè½®æ’­ç»§ç»­
      this.myChart.on("mouseout", () => {
        if (timer) clearInterval(timer);
        timer = setInterval(this.selectPie, 1500);
      });
      // é¼ æ ‡è¿›å…¥è½®æ’­æ‚¬åœ
      this.myChart.on("mouseover", (params) => {
        clearInterval(timer);
        this.currentIndex = params.dataIndex;
        this.hignLightPie();
      });
      // é¼ æ ‡ç§»å…¥legend轮播悬停
      this.myChart.getZr().on("mouseover", (event) => {
        const legendDataIndex = event.topTarget.parent.__legendDataIndex; // æ¯ä¸ªlegend的index
        clearInterval(timer);
        this.currentIndex = legendDataIndex;
        this.hignLightPie();
      });
      // é¼ æ ‡ç§»å‡ºlegend轮播继续
      this.myChart.getZr().on("mouseout", () => {
        if (timer) clearInterval(timer);
        timer = setInterval(this.selectPie, 1500);
      });
    },
  },
};
</script>
<style>
#echarts4 {
  transform: scaleY(2);
}
</style>
yiqi_screen_3d/src/components/ProductionStatistics±¸·Ý1113.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,458 @@
<template>
  <!-- æœ¬ç­/本月产量统计 -->
  <div class="box-container box4" id="echarts4"></div>
</template>
<script>
let timer = null;
import * as echarts from "echarts";
export default {
  props: {
    produceStatisData: {
      type: Object,
      default: () => {},
    },
  },
  data() {
    return {
      option: {},
      myChart: {},
      currentIndex: -1,
      data1: [],
      data2: [{ actualData: 2782, planData: 11128 }],
    };
  },
  // watch: {
  //   produceStatisData(val) {
  //     // æµ‹è¯•用:
  //     val.currentShiftProduceNum = 280;
  //     val.currentShiftPlanNum = 300;
  //     // å½“前班组实际生产数量 currentShiftProduceNum
  //     // å½“前班组计划生产数量 currentShiftPlanNum
  //     var num1 = val.currentShiftProduceNum; //实际生产数量
  //     var num2 = val.currentShiftPlanNum - val.currentShiftProduceNum; //计划生产数量
  //     if (val.currentShiftPlanNum == 0) {
  //       //分母为0 æ˜¾ç¤º0%
  //       num1 = 0;
  //       num2 = 10;
  //     }
  //     this.$set(this.option.series[0], "data", [
  //       // { value: 1 },  //实际生产数量 1/ (9+1) = 10%
  //       // { value: 9 },
  //       {
  //         value: num1,
  //       }, //实际生产数量
  //       {
  //         value: num2,
  //       },
  //     ]);
  //     var num3 = val.currentMonthProduceNum;
  //     var num4 = val.currentMonthPlanNum - val.currentMonthProduceNum;
  //     if (val.currentMonthPlanNum == 0) {
  //       //分母为0 æ˜¾ç¤º0%
  //       num3 = 0;
  //       num4 = 10;
  //     }
  //     this.$set(this.option.series[1], "data", [
  //       { value: num3 },
  //       { value: num4 },
  //     ]);
  //     this.myChart.setOption(this.option);
  //     this.hignLightPie();
  //   },
  // },
  mounted() {
    this.myChart = this.$echarts.init(document.getElementById("echarts4"));
    var value = 60;
    var value2 = 15;
    let data1 = [
      {
        value: value,
        name: "",
        itemStyle: {
          normal: {
            color: "#62fbf8",
          },
        },
      },
      {
        value: 100 - value,
        name: "",
        label: {
          normal: {
            show: false,
          },
        },
        itemStyle: {
          normal: {
            color: "rgba(0,0,0,0)",
          },
        },
      },
    ];
    let data2 = [
      {
        value: value2,
        name: "",
        itemStyle: {
          normal: {
            color: "rgb(105,206,195)",
          },
        },
      },
      {
        value: 100 - value2,
        name: "",
        label: {
          normal: {
            show: false,
          },
        },
        itemStyle: {
          normal: {
            color: "rgba(0,0,0,0)",
          },
        },
      },
    ];
    this.option = {
      color: ["#00f6fe", "rgba(5, 19, 96, 0.5)"],
      // æ’入背景图
      //    graphic: [
      //   {
      //     type: "image",
      //     id: "background1",
      //     left: "13px", // æ ¹æ®çŽ¯å½¢å›¾çš„ä½ç½®è°ƒæ•´
      //     top: "61px", // æ ¹æ®çŽ¯å½¢å›¾çš„ä½ç½®è°ƒæ•´
      //     z: -10,
      //     bounding: "raw",
      //     origin: [0, 0],
      //     style: {
      //       image: require(`@/assets/images/quan.png`), // ç¬¬ä¸€ä¸ªçŽ¯å½¢å›¾çš„èƒŒæ™¯å›¾ç‰‡è·¯å¾„
      //       width: 100,
      //       height: 100,
      //     },
      //   },
      //   {
      //     type: "image",
      //     id: "background2",
      //     left: "131px", // æ ¹æ®çŽ¯å½¢å›¾çš„ä½ç½®è°ƒæ•´
      //     top: "61px", // æ ¹æ®çŽ¯å½¢å›¾çš„ä½ç½®è°ƒæ•´
      //     z: -10,
      //     bounding: "raw",
      //     origin: [0, 0],
      //     style: {
      //       image: require(`@/assets/images/quan.png`), // ç¬¬ä¸€ä¸ªçŽ¯å½¢å›¾çš„èƒŒæ™¯å›¾ç‰‡è·¯å¾„
      //       width: 100,
      //       height: 100,
      //     },
      //   },
      // ],
      series: [
        // å·¦ä¾§
        {
          name: "å·¦-数据",
          type: "pie",
          // radius: ['65%', '75%'],
          radius: ["29%", "36%"], //环变细
          center: ["25%", "49%"],
          silent: true,
          // clockwise: false,
          startAngle: 90,
          z: 1,
          zlevel: 0,
          label: {
            normal: {
              position: "center",
            },
          },
          data: data1,
        },
        {
          name: "å·¦-中间渐变",
          type: "pie",
          startAngle: 90,
          z: 20,
          zlevel: 20,
          radius: "28%",
          hoverAnimation: false,
          center: ["25%", "49%"],
          // zlevel: 2,
          itemStyle: {
            normal: {
              labelLine: {
                show: false,
              },
              color: new echarts.graphic.RadialGradient(0.5, 0.5, 1, [
                {
                  offset: 1,
                  color: "rgba(55,70,130, 1)",
                },
                {
                  offset: 0,
                  color: "rgba(55,70,130, 0)",
                },
              ]),
              shadowBlur: 10,
              // shadowColor: 'rgba(55,70,130, 1)'
            },
          },
          data: [
            {
              value: 100,
            },
          ],
        },
        {
          name: "å·¦-刻度间隔",
          z: 2,
          // zlevel: 1,
          type: "gauge",
          radius: "57%",
          center: ["25%", "49%"],
          startAngle: 20,
          endAngle: -360,
          splitNumber: 10,
          hoverAnimation: true,
          axisTick: {
            show: true,
            splitNumber: 1,
            length: 14, //刻度长度
            // Distance: 40, //刻度间隔距离
            lineStyle: {
              width: 5,
              color: new echarts.graphic.LinearGradient(
                0,
                0,
                0,
                1,
                [
                  {
                    offset: 0,
                    color: "rgba(8, 52, 106, 0.039)", // 0% å¤„的颜色
                  },
                  {
                    offset: 1,
                    color: "rgba(8, 52, 106, 0.239)", // 100% å¤„的颜色
                  },
                ],
                false
              ),
            },
          },
          splitLine: {
            show: false,
          },
          axisLabel: {
            show: false,
          },
          pointer: {
            show: false,
          },
          axisLine: {
            lineStyle: {
              opacity: 0,
            },
          },
          detail: {
            show: false,
          },
          data: [100],
        },
        // å³ä¾§
        {
          name: "右-数据",
          type: "pie",
          // radius: ['65%', '75%'],
          radius: ["29%", "36%"], //环变细
          center: ["74%", "49%"],
          silent: true,
          // clockwise: false,
          startAngle: 90,
          z: 1,
          zlevel: 0,
          label: {
            normal: {
              position: "center",
            },
          },
          data: data2,
        },
        {
          name: "右-中间渐变",
          type: "pie",
          startAngle: 90,
          radius: "28%",
          hoverAnimation: false,
          center: ["74%", "49%"],
          itemStyle: {
            normal: {
              labelLine: {
                show: false,
              },
              color: new echarts.graphic.RadialGradient(0.5, 0.5, 1, [
                {
                  offset: 1,
                  color: "rgba(55,70,130, 1)",
                },
                {
                  offset: 0,
                  color: "rgba(55,70,130, 0)",
                },
              ]),
              shadowBlur: 10,
              // shadowColor: 'rgba(55,70,130, 1)'
            },
          },
          data: [
            {
              value: 100,
            },
          ],
        },
        {
          name: "右-刻度间隔",
          z: 2,
          type: "gauge",
          radius: "45%",
          center: ["74%", "49%"],
          startAngle: 90,
          endAngle: -360,
          splitNumber: 10,
          hoverAnimation: true,
          axisTick: {
            show: true,
            splitNumber: 1,
            length: 20,
            lineStyle: {
              width: 10,
              color: "#1183a7",
              shadowColor: "rgb(4,31,62, 0.5)",
            },
          },
          splitLine: {
            show: false,
          },
          axisLabel: {
            show: false,
          },
          pointer: {
            show: false,
          },
          axisLine: {
            lineStyle: {
              opacity: 0,
            },
          },
          detail: {
            show: false,
          },
          data: [100],
        },
      ],
    };
    this.myChart.setOption(this.option);
    const that = this;
    window.addEventListener("resize", () => {
      that.myChart.resize();
    });
    // this.getData();
    this.defineEvent();
    // this.selectPie();
    this.hignLightPie();
    // timer = setInterval(this.selectPie, 1500);
  },
  methods: {
    // getData() {
    //   this.data1 = [{ actualData: 144, planData: 288 }];
    //   this.$set(this.option.series[0], "data", [
    //     { value: this.data1[0].actualData },
    //     { value: this.data1[0].planData - this.data1[0].actualData },
    //   ]);
    //   this.$set(this.option.series[1], "data", [
    //     { value: this.data2[0].actualData },
    //     { value: this.data2[0].planData - this.data2[0].actualData },
    //   ]);
    //   console.log(this.option.series[0].data);
    //   this.myChart.setOption(this.option);
    // },
    selectPie() {
      let dataLen = this.option.series[0].data.length;
      this.currentIndex = (this.currentIndex + 1) % dataLen;
      this.hignLightPie();
    },
    // è½®æ’­ç‚¹äº®é¥¼å›¾
    hignLightPie() {
      const dataPie = this.option.series[0].data;
      // ç†„灭所有扇形区域
      for (var index in dataPie) {
        this.myChart.dispatchAction({
          type: "downplay",
          seriesIndex: 0,
          dataIndex: index,
        });
        this.myChart.dispatchAction({
          type: "downplay",
          seriesIndex: 1,
          dataIndex: index,
        });
      }
      // ç‚¹äº®å½“前扇形区域
      this.myChart.dispatchAction({
        type: "highlight",
        seriesIndex: 0,
        dataIndex: 0,
      });
      this.myChart.dispatchAction({
        type: "highlight",
        seriesIndex: 1,
        dataIndex: 0,
      });
    },
    // é¼ æ ‡è§¦æ‘¸è½®æ’­æ‚¬åœäº‹ä»¶
    defineEvent() {
      // é¼ æ ‡ç§»å‡ºè½®æ’­ç»§ç»­
      this.myChart.on("mouseout", () => {
        if (timer) clearInterval(timer);
        timer = setInterval(this.selectPie, 1500);
      });
      // é¼ æ ‡è¿›å…¥è½®æ’­æ‚¬åœ
      this.myChart.on("mouseover", (params) => {
        clearInterval(timer);
        this.currentIndex = params.dataIndex;
        this.hignLightPie();
      });
      // é¼ æ ‡ç§»å…¥legend轮播悬停
      this.myChart.getZr().on("mouseover", (event) => {
        const legendDataIndex = event.topTarget.parent.__legendDataIndex; // æ¯ä¸ªlegend的index
        clearInterval(timer);
        this.currentIndex = legendDataIndex;
        this.hignLightPie();
      });
      // é¼ æ ‡ç§»å‡ºlegend轮播继续
      this.myChart.getZr().on("mouseout", () => {
        if (timer) clearInterval(timer);
        timer = setInterval(this.selectPie, 1500);
      });
    },
  },
};
</script>
<style>
#echarts4 {
  transform: scaleY(2);
}
</style>
yiqi_screen_3d/src/components/QualityDataTrends.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,150 @@
<template>
    <div class="box-container echarts3Box" id="echarts3"></div>
</template>
      <script>
let timer = null;
export default {
  props: {
    qualityData: {
      type: Array,
      default: () =>[],
    },
  },
  data() {
    return {
      option: {
      xAxis: {
        show: false,
        boundaryGap: false,
        type: "category",
        data: [],
      },
      grid: {
        left: 33,
        right: 33,
        top: 55,
        bottom:5,
      },
      yAxis: {
        show: false,
        type: "value"
      },
      series: [
        {
          data: [],
          type: "line",
          //   symbol:'none',
          // symbolSize: 0,
          lineStyle: {
            color: "#7b8fe6",
          },
          itemStyle: {
            normal: {
              label: {
                show: true,
                color: "#7b8fe6",
              },
            },
          },
          label: {
            show: true,
          },
        },
      ],
    },
      myChart: {},
      currentIndex: -1,
    };
  },
  watch:{
    qualityData(val){
      let xData=[],yData=[];
      val.forEach(item => {
        xData.push(item.workPieceID)
        yData.push(item.qualityDataVaule)
      });
      this.$set(this.option.xAxis,'data',xData)
      this.$set(this.option.series[0],'data',yData)
      this.myChart.setOption(this.option);
    }
  },
  mounted() {
    this.myChart = this.$echarts.init(document.getElementById("echarts3"));
    this.myChart.setOption(this.option);
    const that=this
    window.addEventListener('resize',()=>{
      that.myChart.resize();
    })
    // this.defineEvent();
    // this.selectPie();
    // timer = setInterval(this.selectPie, 1500);
  },
  methods: {
    selectPie() {
      let dataLen = this.option.series[0].data.length;
      this.currentIndex = (this.currentIndex + 1) % dataLen;
      this.hignLightPie();
    },
    // è½®æ’­ç‚¹äº®é¥¼å›¾
    hignLightPie() {
      const dataPie = this.option.series[0].data;
      // ç†„灭所有扇形区域
      for (var index in dataPie) {
        this.myChart.dispatchAction({
          type: "downplay",
          seriesIndex: 0,
          dataIndex: index,
        });
      }
      // ç‚¹äº®å½“前扇形区域
      this.myChart.dispatchAction({
        type: "highlight",
        seriesIndex: 0,
        dataIndex: this.currentIndex,
      });
    },
    // é¼ æ ‡è§¦æ‘¸è½®æ’­æ‚¬åœäº‹ä»¶
    defineEvent() {
      // é¼ æ ‡ç§»å‡ºè½®æ’­ç»§ç»­
      this.myChart.on("mouseout", () => {
        if (timer) clearInterval(timer);
        timer = setInterval(this.selectPie, 1500);
      });
      // é¼ æ ‡è¿›å…¥è½®æ’­æ‚¬åœ
      this.myChart.on("mouseover", (params) => {
        clearInterval(timer);
        this.currentIndex = params.dataIndex;
        this.hignLightPie();
      });
      // é¼ æ ‡ç§»å…¥legend轮播悬停
      this.myChart.getZr().on("mouseover", (event) => {
        const legendDataIndex = event.topTarget.parent.__legendDataIndex; // æ¯ä¸ªlegend的index
        clearInterval(timer);
        this.currentIndex = legendDataIndex;
        this.hignLightPie();
      });
      // é¼ æ ‡ç§»å‡ºlegend轮播继续
      this.myChart.getZr().on("mouseout", () => {
        if (timer) clearInterval(timer);
        timer = setInterval(this.selectPie, 1500);
      });
    },
  },
};
</script>
      <style>
   .echarts3Box{
    height: 150px !important;
    /* background-color: #040d3d; */
    /* width: 96%; */
    margin: 0 auto;
   }
</style>
yiqi_screen_3d/src/components/img/t.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1 @@
export let zhu = 'data:image/png;base64,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';
yiqi_screen_3d/src/main.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
import Vue from 'vue'
import App from './App.vue'
import vueSeamlessScroll from 'vue-seamless-scroll'
Vue.use(vueSeamlessScroll)
import 'lib-flexible/flexible.js'
import * as echarts from 'echarts';
Vue.config.productionTip = false
new Vue({
  render: h => h(App),
  beforeCreate(){
    Vue.prototype.$echarts=echarts
  }
}).$mount('#app')
yiqi_screen_3d/vue.config.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,11 @@
const { defineConfig } = require('@vue/cli-service')
module.exports = defineConfig({
  transpileDependencies: true,
  lintOnSave:false,
  chainWebpack: config =>{
    config.plugin('html').tap(args => {
        args[0].title = '连杆线大屏';
        return args;
    })
  },
})