| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400 |
- <template>
- <div>
- <el-dialog v-model="visible" :before-close="handleClose" center style="width: 700px;">
- <el-card>
- <template #header>
- <div v-if="isShowAll === false" style="text-align: center;">
- <el-button type="text" @click="currentDayChart">今日</el-button>
- <el-button type="text" @click="currentMonthChart">本月</el-button>
- <el-button type="text" @click="allDatasChart">累计</el-button>
- </div>
- <div v-else>
- <el-form inline ref="ruleFormRef" :model="form" style="width:600px">
- <el-form-item style="margin-top: 20px;">
- <el-select v-model="form.workspace" placeholder="请选择车间"
- style="width: 140px ;text-align: left;">
- <el-option v-for="item in BoardDeptList" :key="item.value" :value="item.value"
- :label="item.label"></el-option>
- </el-select>
- </el-form-item>
- <el-button style="text-align: left;width: 100px;" type="primary"
- @click="getDepartmentData">生成柱状图</el-button>
- <el-button style="text-align: left; margin-left: 180px;" type="text"
- @click="currentDayChart">今日</el-button>
- <el-button style="text-align: left;" type="text" @click="currentMonthChart">本月</el-button>
- <el-button style="text-align: left;" type="text" @click="allDatasChart">累计</el-button>
- </el-form>
- </div>
- </template>
- <div id="container" style="width: 600px; height: 470px;margin-left: 20px;"></div>
- </el-card>
- </el-dialog>
- </div>
- </template>
- <script setup lang="ts">
- import * as echarts from 'echarts';
- import { ref, markRaw } from 'vue';
- import { ElMessageBox } from 'element-plus';
- import { BoardDeptList } from './config'
- import { watch } from 'vue';
- import { onMounted } from 'vue';
- import { VisitsModel } from '@/api/datamanagement/dataplatform';
- interface DataOption {
- title: {},//标题
- tooltip: {},//虚线
- calculate: Boolean,
- xAxis: {},
- yAxis: {},
- series: SerialModel[]
- }
- const visible = ref(false);
- const userId = ref(1);
- const isShowAll = ref(false);//控制标题是否居中
- const chart = ref<any>("");
- watch(
- () => props.dialogVisible,
- (newvisible) => {
- visible.value = newvisible
- console.log('tablechart', visible.value)
- },
- { immediate: true },
- )
- watch(
- () => props.userId,
- (newuserId) => {
- userId.value = newuserId
- console.log('tablechart-data:', userId.value)
- currentDayChart()
- },
- { immediate: true },
- )
- const form = ref({
- workspace: '',
- });
- const props = defineProps<{
- dialogVisible: boolean,
- userId: number,
- currentDayChart: (d: number) => Promise<VisitsModel[]>,
- currentMonthChart: (d: number) => Promise<VisitsModel[]>,
- allDatasChart: (d: number) => Promise<VisitsModel[]>,
- closeDialog(),
- // getDepartmentData: () => Promise<unknown>,
- }>();
- // 关闭对话框
- function closeDialog() {
- visible.value = false;
- props.closeDialog();
- // emit('closeDialog');
- }
- // 关闭对话框
- function handleClose(done: () => void) {
- ElMessageBox.confirm('确认关闭?')
- .then(() => {
- done()
- closeDialog();//关闭对话框
- })
- .catch(() => {
- // catch error
- })
- }
- // 查看今日数据
- function currentDayChart() {
- isShowAll.value = false;
- console.log('table-chart-currentday');
- const daytitle = ref();
- const seriesdata = ref()
- props.currentDayChart(userId.value).then(res => {
- daytitle.value = getHorizontalTitle(res);
- seriesdata.value = getVorizontalData(res);
- console.log('查看今日数据', res);
- console.log('查看今日数据', daytitle);
- console.log('查看今日数据', seriesdata);
- initChart(optionday.value, daytitle.value, seriesdata.value)
- })
- };
- // 查看本月数据
- function currentMonthChart() {
- isShowAll.value = false;
- console.log('currentmonth:', userId.value);
- const monthtitle = ref();
- const monthseriesdata = ref()
- props.currentMonthChart(userId.value).then(res => {
- console.log('table-chart-currentmonth:', res);
- monthtitle.value = getHorizontalTitle(res);
- monthseriesdata.value = getVorizontalData(res);
- console.log('查看今日数据', res);
- console.log('查看今日数据', monthtitle);
- console.log('查看今日数据', monthseriesdata);
- initChart(optionmonth.value, monthtitle.value, monthseriesdata.value)
- })
- };
- // 查看累计数据
- function allDatasChart() {
- isShowAll.value = true;
- console.log('alldata');
- const alltitle = ref();
- const allseriesdata = ref()
- props.allDatasChart(userId.value).then(res => {
- console.log(res);
- alltitle.value = getHorizontalTitle(res);
- allseriesdata.value = getVorizontalData(res);
- console.log('查看今日数据', res);
- console.log('查看今日数据', alltitle);
- console.log('查看今日数据', allseriesdata);
- initChart(optionall.value, alltitle.value, allseriesdata.value)
- })
- }
- interface SerialModel {
- data: [],
- type: string,
- }
- function initChart(data: DataOption, title: [], series: []) {
- data.xAxis = {};
- const dataseries = ref<SerialModel[]>([]);
- const type = ref('category');
- const horidata = ref([]) //todo,获取横坐标
- const nameLocation = ref('center');
- const axisLabel = { interval: 0, rotate: 30 };
- const nameTextStyle = {
- color: 'red',
- fontSize: 6,
- };
- horidata.value = title;
- data.xAxis = { type: type.value, data: horidata.value, nameLocation: nameLocation.value, axisLabel: axisLabel, nameTextStyle: nameTextStyle }
- const seriesdata = ref<SerialModel>({
- data: [],//todo,获取数值,
- type: 'bar'
- })
- seriesdata.value.data = series;
- dataseries.value.push(seriesdata.value)
- data.series = dataseries.value;
- console.log('data.xAxis.data', data.xAxis);
- console.log('data.yAxis.data', data.series)
- console.log(data)
- createChart(data);
- }
- // 创建图表
- function createChart(option: DataOption) {
- chart.value = markRaw(echarts.init(document.getElementById('container') as HTMLDivElement))
- chart.value.setOption(option);
- // 大小自适应
- window.addEventListener('resize', () => {
- chart.value.resize();
- })
- }
- // 创建柱状图
- function getDepartmentData() {
- // todo,原型未定义
- }
- function getHorizontalTitle(data: VisitsModel[]) {
- console.log('getHorizontalTitle:', data)
- const title = ref<string[]>([]);
- for (var i = 0; i < data.length; i++) {
- title.value.push(data[i].workshopName)
- console.log('getHorizontalTitle-data-i', data[i].workshopName)
- }
- console.log('title:', title);
- return title;
- }
- function getVorizontalData(data: VisitsModel[]) {
- console.log('getvorizontaldata:', data)
- const seriesData = ref<number[]>([]);
- for (var i = 0; i < data.length; i++) {
- seriesData.value.push(data[i].visits)
- console.log('getHorizontalTitle-data-i', data[i].visits)
- }
- console.log('seriesData:', seriesData);
- return seriesData;
- }
- const optionday = ref();
- optionday.value = {
- title: {
- text: '各车间地点访问次数柱状图(天)',
- x: "center", //设置标题位置居中
- textStyle: {//设置主标题的文字风格
- fontSize: 10 //文字大小
- },
- },//标题
- tooltip: {
- trigger: 'axis'
- },//虚线
- calculate: true,//显示数据
- xAxis: {
- type: 'category',
- data: [],//todo,获取横坐标
- nameLocation: 'center',
- axisLabel: { interval: 0, rotate: 30 },
- nameTextStyle: {
- color: 'red',
- fontSize: 6,
- }
- },
- yAxis: {
- type: 'value',
- name: '访问次数',
- nameTextStyle: {
- color: 'black',
- fontSize: 8,
- padding: 0,
- }
- },
- series: [
- {
- data: [],//todo,获取数值,
- type: 'bar'
- }
- ]
- };
- const optionmonth = ref();
- optionmonth.value = {
- title: {
- text: '各车间地点访问次数柱状图(月)',
- x: "center", //设置标题位置居中
- textStyle: {//设置主标题的文字风格
- fontSize: 10 //文字大小
- },
- },//标题
- tooltip: {
- trigger: 'axis'
- },//虚线
- calculate: true,//显示数据
- xAxis: {
- type: 'category',
- data: [],//todo,获取横坐标
- nameLocation: 'center',
- axisLabel: { interval: 0, rotate: 30 },
- nameTextStyle: {
- color: 'red',
- fontSize: 6,
- }
- },
- yAxis: {
- type: 'value',
- name: '访问次数',
- nameTextStyle: {
- color: 'black',
- fontSize: 8,
- padding: 0,
- }
- },
- series: [
- {
- data: [],//todo,获取数值,
- type: 'bar'
- }
- ]
- };
- const optionall = ref();
- optionall.value = {
- title: {
- text: '各车间地点访问次数柱状图(汇总)',
- x: "center", //设置标题位置居中
- textStyle: {//设置主标题的文字风格
- fontSize: 10 //文字大小
- },
- },//标题
- tooltip: {
- trigger: 'axis'
- },//虚线
- calculate: true,//显示数据
- xAxis: {
- type: 'category',
- data: [],//todo,获取横坐标
- nameLocation: 'center',
- axisLabel: { interval: 0, rotate: 30 },
- nameTextStyle: {
- color: 'red',
- fontSize: 6,
- }
- },
- yAxis: {
- type: 'value',
- name: '访问次数',
- nameTextStyle: {
- color: 'black',
- fontSize: 8,
- padding: 0,
- }
- },
- series: [
- {
- data: [],//todo,获取数值,
- type: 'bar'
- }
- ]
- };
- onMounted(() => {
- isShowAll.value = false;
- })
- </script>
- <style scoped></style>
|