| | |
| | | <div class="yield-content"> |
| | | <div class="yield-content-left"> |
| | | <div class="content_left_item1_content"> |
| | | <div class="content_left_item1_content_row" v-for="(item, index) in 5" :key="index"> |
| | | <div class="content_left_item1_content_row" v-for="(item, index) in top1" :key="index"> |
| | | <div class="content_left_item1_content_row_name"> |
| | | <div :class="index > 2 ? 'num bg1' : 'num bg2'">{{ index + 1 }}</div> |
| | | <span>赵立{{ index }}</span> |
| | | <span>{{ item.userName }}</span> |
| | | </div> |
| | | <div class="content_left_item1_content_row_line"> |
| | | <el-progress :show-text="false" :percentage="50"> |
| | | <el-progress :show-text="false" :percentage="item.doneNum/baseNum"> |
| | | </el-progress> |
| | | </div> |
| | | <div class="content_left_item1_content_row_num">342</div> |
| | | <div class="content_left_item1_content_row_num">{{ item.doneNum }}</div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div class="yield-content-left"> |
| | | <div class="content_left_item1_content"> |
| | | <div class="content_left_item1_content_row" v-for="(item, index) in 5" :key="index"> |
| | | <div class="content_left_item1_content_row" v-for="(item, index) in top2" :key="index"> |
| | | <div class="content_left_item1_content_row_name"> |
| | | <div class="num bg1">{{ index + 6 }}</div> |
| | | <span>赵立{{ index }}</span> |
| | | <span>{{ item.userName }}</span> |
| | | </div> |
| | | <div class="content_left_item1_content_row_line"> |
| | | <el-progress :show-text="false" :percentage="50"> |
| | | <el-progress :show-text="false" :percentage="item.doneNum/baseNum"> |
| | | </el-progress> |
| | | </div> |
| | | <div class="content_left_item1_content_row_num">342</div> |
| | | <div class="content_left_item1_content_row_num">{{ item.doneNum }}</div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | |
| | | </template> |
| | | |
| | | <script setup> |
| | | import { reactive, ref, onMounted, onBeforeUnmount, onUnmounted, nextTick } from 'vue' |
| | | import { reactive, ref, toRefs, onMounted, onBeforeUnmount, onUnmounted, nextTick } from 'vue' |
| | | import { getProcedurePlanData, getTop } from '@/utils/apis.js' |
| | | import { useCounterStore } from '@/stores/counter.js' |
| | | import { useRoute } from 'vue-router' |
| | | import * as echarts from 'echarts' |
| | | const route = useRoute() |
| | | const enterprise = useCounterStore() |
| | | let planTimer = ref(null) |
| | | let reportTimer = ref(null) |
| | | let planContainer = ref(null) |
| | | let reportLogContainer = ref(null) |
| | | let listData = reactive([ |
| | | { name: 'dom第一个' }, |
| | | { name: 'dom第二个' }, |
| | | { name: 'dom第三个' }, |
| | | { name: 'dom第四个' }, |
| | | { name: 'dom第五个' }, |
| | | { name: 'dom第六个' }, |
| | | { name: 'dom第七个' }, |
| | | { name: 'dom第八个' }, |
| | | { name: 'dom第九个' }, |
| | | { name: 'dom第十个' }, |
| | | { name: 'dom第十个' }, |
| | | { name: 'dom第十个' }, |
| | | { name: 'dom第十个' }, |
| | | { name: 'dom第十个' }, |
| | | { name: 'dom第十个' }, |
| | | { name: 'dom第十个' }, |
| | | { name: 'dom第十个' }, |
| | | ]) |
| | | let dayDistribution = reactive([ |
| | | { date: '8/1', num: '20' }, |
| | | { date: '8/2', num: '10' }, |
| | | { date: '8/3', num: '20' }, |
| | | { date: '8/4', num: '40' }, |
| | | { date: '8/5', num: '30' }, |
| | | { date: '8/6', num: '10' }, |
| | | { date: '8/7', num: '20' }, |
| | | ]) |
| | | let typeDistribution = reactive([ |
| | | { name: '外观不良', num: 15 }, |
| | | { name: '有毛刺', num: 12 }, |
| | | { name: '尺寸不良', num: 22 }, |
| | | { name: '有划痕', num: 5 }, |
| | | { name: '其他', num: 2 }, |
| | | const data = reactive({ |
| | | listData: [ |
| | | { name: 'dom第一个' }, |
| | | { name: 'dom第二个' }, |
| | | { name: 'dom第三个' }, |
| | | { name: 'dom第四个' }, |
| | | { name: 'dom第五个' }, |
| | | { name: 'dom第六个' }, |
| | | { name: 'dom第七个' }, |
| | | { name: 'dom第八个' }, |
| | | { name: 'dom第九个' }, |
| | | { name: 'dom第十个' }, |
| | | ], |
| | | top1: [], |
| | | top2: [], |
| | | baseNum: 0, |
| | | dayDistribution: [ |
| | | { date: '8/1', num: '20' }, |
| | | { date: '8/2', num: '10' }, |
| | | { date: '8/3', num: '20' }, |
| | | { date: '8/4', num: '40' }, |
| | | { date: '8/5', num: '30' }, |
| | | { date: '8/6', num: '10' }, |
| | | { date: '8/7', num: '20' }, |
| | | ], |
| | | typeDistribution: [ |
| | | { name: '外观不良', num: 15 }, |
| | | { name: '有毛刺', num: 12 }, |
| | | { name: '尺寸不良', num: 22 }, |
| | | { name: '有划痕', num: 5 }, |
| | | { name: '其他', num: 2 }, |
| | | ] |
| | | }) |
| | | |
| | | ]) |
| | | let { listData, top1, top2, baseNum } = toRefs(data) |
| | | |
| | | // start() |
| | | onBeforeUnmount(() => { |
| | | clearTimeout(planTimer.value) |
| | | clearTimeout(reportTimer.value) |
| | | }) |
| | | onMounted(() => { |
| | | initData() |
| | | nextTick(() => { |
| | | start() |
| | | reportStart() |
| | |
| | | clearTimeout(planTimer.value) |
| | | clearTimeout(reportTimer.value) |
| | | }) |
| | | |
| | | function initData() { |
| | | // 计划数 |
| | | getProcedurePlanData(enterprise.companyId, enterprise.departId, { procedureId: route.query.procedureId }) |
| | | .then(res => { |
| | | enterprise.setNum(res) |
| | | }) |
| | | // top10 |
| | | getTop(enterprise.companyId, enterprise.departId, { procedureId: route.query.procedureId }) |
| | | .then(res => { |
| | | if (res.length) { |
| | | |
| | | data.baseNum = res[0].doneNum |
| | | data.top1 = [] |
| | | data.top2 = [] |
| | | if (res.length <= 5) { |
| | | data.top1 = res |
| | | } else { |
| | | res.forEach((item, index) => { |
| | | if (index < 5) { |
| | | data.top1.push(item) |
| | | } else { |
| | | data.top2.push(item) |
| | | } |
| | | }) |
| | | } |
| | | } |
| | | }) |
| | | |
| | | } |
| | | |
| | | function handleMouseEnter() { |
| | | clearTimeout(planTimer.value) |
| | |
| | | scrollDom = planContainer.value |
| | | } else { |
| | | // 如果列表数量过少不进行滚动 |
| | | if (scrollDom.children.length < 4) { |
| | | if (scrollDom.children.length <=10) { |
| | | clearTimeout(planTimer.value) |
| | | return |
| | | } |
| | | // 组件进行滚动 |
| | | scrollDom.scrollTop += 2 |
| | | scrollDom.scrollTop += 1.5 |
| | | // 判断是否滚动到底部 |
| | | if (scrollDom.scrollTop >= (scrollDom.scrollHeight - scrollDom.clientHeight)) { |
| | | // 获取组件第一个节点 |
| | |
| | | scrollDom = reportLogContainer.value |
| | | } else { |
| | | // 如果列表数量过少不进行滚动 |
| | | if (scrollDom.children.length < 4) { |
| | | if (scrollDom.children.length <= 10) { |
| | | clearTimeout(reportTimer.value) |
| | | return |
| | | } |
| | | // 组件进行滚动 |
| | | scrollDom.scrollTop += 2 |
| | | scrollDom.scrollTop += 1.5 |
| | | // 判断是否滚动到底部 |
| | | if (scrollDom.scrollTop >= (scrollDom.scrollHeight - scrollDom.clientHeight)) { |
| | | // 获取组件第一个节点 |
| | |
| | | let dateList = [] |
| | | let numList = [] |
| | | |
| | | dayDistribution.forEach(item => { |
| | | data.dayDistribution.forEach(item => { |
| | | dateList.push(item.date) |
| | | numList.push(item.num) |
| | | }) |
| | |
| | | let myChart = echarts.init(dayChartDom); |
| | | let legendData = [] |
| | | let seriesData = [] |
| | | typeDistribution.forEach(item => { |
| | | data.typeDistribution.forEach(item => { |
| | | legendData.push(item.name) |
| | | seriesData.push({name:item.name, value:item.num}) |
| | | }) |
| | | let option = { |
| | | // title: { |
| | | // text: '同名数量统计', |
| | | // subtext: '纯属虚构', |
| | | // left: 'center' |
| | | // }, |
| | | // tooltip: { |
| | | // trigger: 'item', |
| | | // formatter: '{a} <br/>{b} : {c} ({d}%)' |
| | | // }, |
| | | legend: { |
| | | show: false, |
| | | type: 'scroll', |