loulijun2021
2023-09-14 c047a193dad2591ee9d40d1ed3e97180d7be23c4
1.综合看板
已添加1个文件
已修改3个文件
588 ■■■■ 文件已修改
src/assets/images/box02.png 补丁 | 查看 | 原始文档 | blame | 历史
src/utils/myEcharts.js 307 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/kanbanManager/all.vue 277 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/kanbanManager/cjzl.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/box02.png
src/utils/myEcharts.js
@@ -2054,15 +2054,28 @@
  return option
}
export function cjzl03(xData, legendData, yData) { // 左侧
export function cjzl03(xData, legendData, yData, show) { // 左侧
  return {
    backgroundColor: 'transparent',
    tooltip: {},
    // tooltip: {},
    title: {
      show: show,
      text: '各车间当月不良趋势',
      left: '50%',
      top: '3%',
      textAlign: 'center',
      textStyle: {
        // color: '#fff',
        color: '#00ffff',
        fontSize: '20',
        fontWeight: 'bolder'
      }
    },
    grid: {
      left: '2%',
      right: '2%',
      bottom: '20%',
      top: '10%',
      top: '15%',
      containLabel: true
    },
    legend: {
@@ -2110,7 +2123,7 @@
        type: 'value',
        axisLabel: {
          textStyle: {
            fontSize: 16,
            fontSize: 18,
            color: colorX
          }
        },
@@ -2152,13 +2165,14 @@
          },
          borderColor: '#00ffff'
        },
        // label: {
        //   show: true,
        //   position: 'top',
        //   textStyle: {
        //     color: '#fff'
        //   }
        // },
        label: {
          show: true,
          position: 'top',
          textStyle: {
            fontSize: 16,
            color: '#fff'
          }
        },
        itemStyle: {
          normal: {
            color: '#00ffff'
@@ -2199,13 +2213,14 @@
          },
          borderColor: '#ff3000'
        },
        // label: {
        //   show: true,
        //   position: 'top',
        //   textStyle: {
        //     color: '#fff'
        //   }
        // },
        label: {
          show: true,
          position: 'top',
          textStyle: {
            fontSize: 16,
            color: '#fff'
          }
        },
        itemStyle: {
          normal: {
            color: '#ff3000'
@@ -2246,13 +2261,14 @@
          },
          borderColor: '#ffe000'
        },
        // label: {
        //   show: true,
        //   position: 'top',
        //   textStyle: {
        //     color: '#fff'
        //   }
        // },
        label: {
          show: true,
          position: 'top',
          textStyle: {
            fontSize: 16,
            color: '#fff'
          }
        },
        itemStyle: {
          normal: {
            color: '#ffe000'
@@ -2293,13 +2309,14 @@
          },
          borderColor: '#ffa800'
        },
        // label: {
        //   show: true,
        //   position: 'top',
        //   textStyle: {
        //     color: '#fff'
        //   }
        // },
        label: {
          show: true,
          position: 'top',
          textStyle: {
            fontSize: 16,
            color: '#fff'
          }
        },
        itemStyle: {
          normal: {
            color: '#ffa800'
@@ -2340,13 +2357,14 @@
          },
          borderColor: '#ff5b00'
        },
        // label: {
        //   show: true,
        //   position: 'top',
        //   textStyle: {
        //     color: '#fff'
        //   }
        // },
        label: {
          show: true,
          position: 'top',
          textStyle: {
            fontSize: 16,
            color: '#fff'
          }
        },
        itemStyle: {
          normal: {
            color: '#ff5b00'
@@ -2697,10 +2715,10 @@
  return option
}
export function all01(xData2) {
export function all01(xData2, yData) {
  // var xData2 = ['123', '21', '32', '23', '1233']
  var data1 = [250, 100, 130, 200, 300]
  var data2 = [400, 200, 300, 300, 300]
  var data1 = yData.map(i => i.quantity)
  var data2 = yData.map(i => i.plan_qty)
  var barWidth = 30
  const option = {
    backgroundColor: 'transparent',
@@ -2766,7 +2784,7 @@
      },
      nameTextStyle: {
        color: '#fff',
        fontSize: 14,
        fontSize: 16,
        lineHeight: 40
      },
      splitLine: {
@@ -2941,3 +2959,206 @@
  return option
}
export function all02(data) {
  return {
    backgroundColor: 'transparent',
    // tooltip: {},
    title: {
      text: '每月订单数量/出库数量',
      left: '50%',
      top: '0%',
      textAlign: 'center',
      textStyle: {
        // color: '#fff',
        color: '#00ffff',
        fontSize: '20',
        fontWeight: 'bolder'
      }
    },
    grid: {
      left: '4%',
      right: '4%',
      bottom: '4%',
      top: '15%',
      containLabel: true
    },
    // legend: {
    //   show: false,
    //   itemGap: 50,
    //   data: ['注册总量', '最新注册量'],
    //   textStyle: {
    //     color: '#f9f9f9',
    //     borderColor: '#fff'
    //   }
    // },
    xAxis: [{
      type: 'category',
      boundaryGap: true,
      axisLabel: {
        interval: 0,
        formatter: '{value}',
        fontSize: 16,
        margin: 20,
        textStyle: {
          color: colorX
        }
      },
      axisLine: {
        lineStyle: {
          color: '#032c58'
        }
      },
      splitLine: {
        show: false,
        lineStyle: {
          color: '#032c58'
        }
      },
      axisTick: {
        show: false
      },
      data: data.map(i => i.Month)
    }],
    yAxis: [
      {
        // max: 800,
        boundaryGap: false,
        splitNumber: 4,
        type: 'value',
        axisLabel: {
          textStyle: {
            fontSize: 16,
            color: colorX
          }
        },
        // name: '单',
        // nameTextStyle: {
        //   color: colorY,
        //   fontSize: 14,
        //   lineHeight: 20
        // },
        splitLine: {
          show: true,
          lineStyle: {
            color: '#032c58'
          }
        },
        axisLine: {
          show: true,
          lineStyle: {
            color: '#032c58'
          }
        },
        axisTick: {
          show: true
        }
      }
    ],
    series: [
      {
        name: '注册总量',
        type: 'line',
        // smooth: true, //是否平滑曲线显示
        //             symbol:'circle',  // 默认是空心圆(中间是白色的),改成实心圆
        showAllSymbol: true,
        symbol: 'emptyCircle',
        symbolSize: 6,
        lineStyle: {
          normal: {
            color: '#28ffb3' // 线条颜色
          },
          borderColor: '#f0f'
        },
        label: {
          show: true,
          position: 'top',
          textStyle: {
            fontSize: 16,
            color: '#fff'
          }
        },
        itemStyle: {
          normal: {
            color: '#28ffb3'
          }
        },
        tooltip: {
          show: false
        },
        areaStyle: { // 区域填充样式
          normal: {
            // 线性渐变,前4个参数分别是x0,y0,x2,y2(范围0~1);相当于图形包围盒中的百分比。如果最后一个参数是‘true’,则该四个值是绝对像素位置。
            color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
              offset: 0,
              color: 'rgba(0,154,120,1)'
            },
            {
              offset: 1,
              color: 'rgba(0,0,0, 0)'
            }
            ], false),
            shadowColor: 'rgba(53,142,215, 0.9)', // 阴影颜色
            shadowBlur: 20 // shadowBlur设图形阴影的模糊大小。配合shadowColor,shadowOffsetX/Y, 设置图形的阴影效果。
          }
        },
        data: data.map(i => i.quantity)
      },
      {
        name: '最新注册量',
        type: 'line',
        barWidth: 20,
        tooltip: {
          show: false
        },
        label: {
          show: true,
          position: 'top',
          textStyle: {
            fontSize: 16,
            color: '#fff'
          }
        },
        areaStyle: { // 区域填充样式
          normal: {
            // 线性渐变,前4个参数分别是x0,y0,x2,y2(范围0~1);相当于图形包围盒中的百分比。如果最后一个参数是‘true’,则该四个值是绝对像素位置。
            color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
              offset: 0,
              color: 'rgba(0,154,120,1)'
            },
            {
              offset: 1,
              color: 'rgba(0,0,0, 0)'
            }
            ], false),
            shadowColor: 'rgba(53,142,215, 0.9)', // 阴影颜色
            shadowBlur: 20 // shadowBlur设图形阴影的模糊大小。配合shadowColor,shadowOffsetX/Y, 设置图形的阴影效果。
          }
        },
        // itemStyle: {
        //   normal: {
        //     // barBorderRadius: 5,
        //     // color: new echarts.graphic.LinearGradient(
        //     //     0, 0, 0, 1,
        //     //     [{
        //     //             offset: 0,
        //     //             color: '#14c8d4'
        //     //         },
        //     //         {
        //     //             offset: 1,
        //     //             color: '#43eec6'
        //     //         }
        //     //     ]
        //     // )
        //     color: function(params) {
        //       var colorList = ['#0ec1ff', '#10cdff', '#12daff', '#15ebff', '#17f8ff', '#1cfffb', '#1dfff1']
        //       return colorList[params.dataIndex]
        //     }
        //   }
        // },
        data: data.map(i => i.ouquantity)
      }
    ]
  }
}
src/views/kanbanManager/all.vue
@@ -55,25 +55,27 @@
              <svg-icon icon-class="cggz" class="svg_class" />
              销售订单(月/季)
            </div>
            <div class="lineContent horn" style="height: 450px;display: flex;justify-content: space-between">
            <div class="lineContent horn" style="height: 450px;display: flex;flex-direction: column;justify-content: space-between">
              <div style="height: 180px;padding: 10px;display: flex;justify-content: space-between">
                <!--                <div v-for="i in LeftTopData01" :key="i" class="flex_c_s">-->
                <!--                  <div class="all_block01 flex_c_s">-->
                <!--                    <div class="flex_c_c all_block02">{{ i.wkshp_name }}</div>-->
                <!--                    <div class="" style="display: flex;justify-content:space-between">-->
                <!--                      <div class="all_block02 flex_c_c" style="width: 49% ">任务数</div>-->
                <!--                      <div class="all_block02 flex_c_c" style="width: 49% ">{{ i.plan_qty }}</div>-->
                <!--                    </div>-->
                <!--                    <div class="" style="display: flex;justify-content:space-between">-->
                <!--                      <div class="all_block02 flex_c_c" style="width: 49% ">完工数</div>-->
                <!--                      <div class="all_block02 flex_c_c" style="width: 49% ">{{ i.good_qty }}</div>-->
                <!--                    </div>-->
                <!--                  </div>-->
                <!--                </div>-->
                <div v-for="i in RightTopData01" :key="i.Quarter" class="flex_c_s">
                  <div class="all_block03 flex_c_s">
                    <div class="flex_c_c all_block04">{{ i.Quarter }}</div>
                    <div class="" style="display: flex;justify-content:space-between">
                      <div class="all_block04 flex_c_c" style="width: 49% ">任务数</div>
                      <div class="all_block04 flex_c_c" style="width: 49% ">{{ i.quantity }}</div>
                    </div>
                    <div class="" style="display: flex;justify-content:space-between">
                      <div class="all_block04 flex_c_c" style="width: 49% ">出库数</div>
                      <div class="all_block04 flex_c_c" style="width: 49% ">{{ i.ouquantity }}</div>
                    </div>
                  </div>
                </div>
              </div>
              <div style="height: 260px;">123</div>
              <div style="height: 260px;">
                <div id="all02" class="flex_c_c" style="width: 100%;height:100%;" />
              </div>
            </div>
          </div>
        </div>
@@ -85,7 +87,8 @@
              质量不良
            </div>
            <div class="lineContent horn" style="height: 380px;display: flex;justify-content: space-between">
              123
              <div id="cjzl03" class="flex_c_c" style="width: 100%;height:100%" />
            </div>
          </div>
          <div style="width: 850px;">
@@ -94,7 +97,24 @@
              仓库库存
            </div>
            <div class="lineContent horn" style="height: 380px;display: flex;justify-content: space-between">
              123
              <div style="display: flex;justify-content: center;position: relative">
                <div class="kb_center_block_children all_block05">
                  <div style="font-size: 24px;">{{ parseFloat(RightBottom.Y) }}</div>
                  <div class="box02" />
                  <div>原材料</div>
                </div>
                <div class="kb_center_block_children all_block06">
                  <div style="font-size: 24px;">{{ parseFloat(RightBottom.B) }}</div>
                  <div class="box02" />
                  <div>半成品</div>
                </div>
                <div class="kb_center_block_children all_block07">
                  <div style="font-size: 24px;">{{ parseFloat(RightBottom.C) }}</div>
                  <div class="box02" />
                  <div>产成品</div>
                </div>
              </div>
            </div>
          </div>
        </div>
@@ -105,9 +125,10 @@
<script>
import './kbCommon.css'
import { loadEcharts, all01 } from '@/utils/myEcharts'
import { loadEcharts, all01, all02, cjzl03 } from '@/utils/myEcharts'
import {
  ShopSearch, WorkShopCompreLeftTop
  QCBadCenterLeftWeek,
  ShopSearch, WorkShopCompreLeftTop, WorkShopCompreRightBottom, WorkShopCompreRightTop
} from '@/api/kanbanManager'
@@ -121,7 +142,13 @@
      legendData: [],
      LeftTopData01: [],
      LeftTopData02: []
      LeftTopData02: [],
      RightTopData01: [],
      RightTopData02: [],
      cjzl03_xData: [],
      cjzl03_yData: [],
      RightBottom: {}
    }
  },
@@ -171,14 +198,121 @@
        }
        if (temp.includes(res2Key)) {
          data.quantity = res2.data.LeftBottom[res2Key][0].quantity
          data.plan_qty = res2.data.LeftBottom[res2Key][0].plan_qty
          data.wkshp_code = res2.data.LeftBottom[res2Key][0].wkshp_code
          data.wkshp_name = this.wkshopArr.find(i => i.org_code === data.wkshp_code).org_name
          this.LeftTopData02.push(data)
        }
      }
      loadEcharts('all01', all01(this.legendData))
      console.log(this.LeftTopData01, 1)
      console.log(this.LeftTopData02, 2)
      loadEcharts('all01', all01(this.legendData, this.LeftTopData02))
      setInterval(() => {
        WorkShopCompreLeftTop({ wkshopcode: temp.join(',') }).then(res2 => {
          this.LeftTopData01 = []
          this.LeftTopData02 = []
          for (const res2Key in res2.data.LeftTop) {
            const data = {
              good_qty: 0,
              plan_qty: 0,
              wkshp_code: '',
              wkshp_name: ''
            }
            if (temp.includes(res2Key)) {
              data.good_qty = res2.data.LeftTop[res2Key][0].good_qty
              data.plan_qty = res2.data.LeftTop[res2Key][0].plan_qty
              data.wkshp_code = res2.data.LeftTop[res2Key][0].wkshp_code
              data.wkshp_name = this.wkshopArr.find(i => i.org_code === data.wkshp_code).org_name
              this.LeftTopData01.push(data)
            }
          }
          for (const res2Key in res2.data.LeftBottom) {
            const data = {
              quantity: 0,
              wkshp_code: '',
              wkshp_name: ''
            }
            if (temp.includes(res2Key)) {
              data.quantity = res2.data.LeftBottom[res2Key][0].quantity
              data.plan_qty = res2.data.LeftBottom[res2Key][0].plan_qty
              data.wkshp_code = res2.data.LeftBottom[res2Key][0].wkshp_code
              data.wkshp_name = this.wkshopArr.find(i => i.org_code === data.wkshp_code).org_name
              this.LeftTopData02.push(data)
            }
          }
          loadEcharts('all01', all01(this.legendData, this.LeftTopData02))
        })
      }, 1000 * 30)
      const res3 = await WorkShopCompreRightTop()
      res3.data.RightTop.forEach(i => {
        this.RightTopData01.push({
          Quarter: i.Quarter,
          quantity: i.quantity,
          ouquantity: i.ouquantity
        })
      })
      res3.data.RightBottom.forEach(i => {
        this.RightTopData02.push({
          Month: i.Month + '月',
          quantity: i.quantity,
          ouquantity: i.ouquantity
        })
      })
      loadEcharts('all02', all02(this.RightTopData02))
      setInterval(() => {
        WorkShopCompreRightTop().then(res3 => {
          this.RightTopData01 = []
          this.RightTopData02 = []
          res3.data.RightTop.forEach(i => {
            this.RightTopData01.push({
              Quarter: i.Quarter,
              quantity: i.quantity,
              ouquantity: i.ouquantity
            })
          })
          res3.data.RightBottom.forEach(i => {
            this.RightTopData02.push({
              Month: i.Month + '月',
              quantity: i.quantity,
              ouquantity: i.ouquantity
            })
          })
          loadEcharts('all02', all02(this.RightTopData02))
        })
      }, 1000 * 40)
      const res4 = await QCBadCenterLeftWeek({ wkshopcode: temp.join(',') })
      this.cjzl03_xData = res4.data[temp[0]].map(i => i.click_date)
      for (const res4Key in res4.data) {
        if (temp.includes(res4Key)) {
          const bb = res4.data[res4Key].map(i => i.count)
          this.cjzl03_yData.push(bb)
        }
      }
      loadEcharts('cjzl03', cjzl03(this.cjzl03_xData, this.legendData, this.cjzl03_yData, true))
      setInterval(() => {
        QCBadCenterLeftWeek({ wkshopcode: temp.join(',') }).then(res4 => {
          this.cjzl03_yData = []
          this.cjzl03_xData = res4.data[temp[0]].map(i => i.click_date)
          for (const res4Key in res4.data) {
            if (temp.includes(res4Key)) {
              const bb = res4.data[res4Key].map(i => i.count)
              this.cjzl03_yData.push(bb)
            }
          }
          loadEcharts('cjzl03', cjzl03(this.cjzl03_xData, this.legendData, this.cjzl03_yData, true))
        })
      }, 1000 * 50)
      const res5 = await WorkShopCompreRightBottom()
      this.RightBottom = res5.data
      setInterval(() => {
        WorkShopCompreRightBottom().then(res5 => {
          this.RightBottom = res5.data
        })
      }, 1000 * 60)
    },
    // 获取Echarts
@@ -195,31 +329,6 @@
      // loadEcharts('cjzl03', cjzl03(this.cjzl03_xData, this.legendData, this.cjzl03_yData))// 左侧
    },
    getQCBadBottomWeek() {
      const data = {
        wkshopcode: this.wkshopArr.map(i => i.org_code).join(',')
      }
      QCBadBottomWeek(data).then(res => {
        this.tableDataRightTop = res.data
        const divData = this.$refs.tableDataRightTopRef.bodyWrapper
        const temp = setInterval(() => {
          // 元素自增距离顶部1像素
          divData.scrollTop += 1
          if (divData.clientHeight + divData.scrollTop === divData.scrollHeight) {
            // 重置table距离顶部距离
            divData.scrollTop = 0
            QCBadBottomWeek(data).then(res => {
              this.tableDataRightTop = res.data
              if (this.tableDataRightTop.length > 7) {
                clearInterval(temp)
                this.getQCBadBottomWeek()
              }
            })
          }
        }, this.tableDataRightTop.length <= 7 ? 1000 * 10 : 300)
      })
    },
    // 获取当前时间
    getNowTime() {
      const dt = new Date()
@@ -298,13 +407,79 @@
.all_block01{
  width:187px;
  height: 180px;
  //height: 50px;
  //height: 100%;
  //background: rgba(9, 216, 242, 0.1);
}
.all_block02{
  width: 100%;
  height: 49px;
  background: rgba(9, 216, 242, 0.1);
}
.all_block03{
  width:199px;
  height: 180px;
}
.all_block04{
  width: 100%;
  height: 49px;
  background: rgba(9, 216, 242, 0.1);
}
.kb_center_block_children {
  height: 180px;
  //border: 1px solid $kbBorderColor;
  width: 240px;
  display: flex;
  z-index: 2;
  justify-content: space-around;
  align-items: center;
  flex-direction: column;
  margin: 10px;
  font-size: 22px;
  .box02 {
    background: url("../../assets/images/box02.png") no-repeat;
    transform: scale(1.5);
    width: 145px;
    height: 84px;
  }
}
.all_block05 {
  position: absolute;
  animation: upDown 3s ease-in-out infinite;
  left: 60px;
}
.all_block06{
  position: absolute;
  animation: upDown2 3s ease-in-out infinite;
  left: 290px;
}
.all_block07{
  position: absolute;
  animation: upDown 3s ease-in-out infinite;
  left: 520px;
}
@keyframes upDown {
  0% {
    top: 50px;
  }
  50% {
    top: 100px;
  }
  100% {
    top: 50px;
  }
}
@keyframes upDown2 {
  0% {
    top: 100px;
  }
  50% {
    top: 50px;
  }
  100% {
    top: 100px;
  }
}
</style>
src/views/kanbanManager/cjzl.vue
@@ -333,7 +333,7 @@
          this.cjzl03_yData.push(res3[res3Key].map(i => i.count))
        }
      }
      loadEcharts('cjzl03', cjzl03(this.cjzl03_xData, this.legendData, this.cjzl03_yData))// 左侧
      loadEcharts('cjzl03', cjzl03(this.cjzl03_xData, this.legendData, this.cjzl03_yData, false))// 左侧
      setInterval(() => {
        QCBadCenterLeftWeek({ wkshopcode: temp.join(',') }).then(res3 => {
          this.cjzl03_xData = []
@@ -357,7 +357,7 @@
              this.cjzl03_yData.push(res3.data[res3Key].map(i => i.count))
            }
          }
          loadEcharts('cjzl03', cjzl03(this.cjzl03_xData, this.legendData, this.cjzl03_yData))// 左侧
          loadEcharts('cjzl03', cjzl03(this.cjzl03_xData, this.legendData, this.cjzl03_yData, false))// 左侧
        })
      }, 1000 * 40)