年度工作任务统计 python + Bootstrap

后台使用Flask + Excel  ,前端使用 Bootstrap .

后端python 代码:

import ast
import json
from flask import jsonify ,Flask,request
from flask import render_template
import datetime
import pandas as pd
import textwrap
import time,threading
import tkinter as tk
import ttkbootstrap as ttk
from random import choice
from ttkbootstrap.constants import *
import openpyxl
from openpyxl import Workbook ,load_workbook   #导入模块
import re
import os
from tkinter import messagebox  # 弹出提示框
from tkinter.scrolledtext import ScrolledText


app = Flask (__name__,static_folder="static")

# app = Flask(__name__,template_folder='../xxxx',static_folder="../xxxx")
# 读取excel表格中的日期
def xldate_as_datetime(xldate, datemode=0):
    if datemode not in (0, 1):
        raise Exception(datemode)
    if xldate == 0.00:
        return datetime.time(0, 0, 0)
    if xldate < 0.00:
        raise Exception(xldate)
    xldays = int(xldate)
    frac = xldate - xldays
    seconds = int(round(frac * 86400.0))
    assert 0 <= seconds <= 86400
    if seconds == 86400:
        seconds = 0
        xldays += 1
    # if xldays >= _XLDAYS_TOO_LARGE[datemode]:
    #    raise XLDateTooLarge(xldate)
    if xldays == 0:
        # second = seconds % 60; minutes = seconds // 60
        minutes, second = divmod(seconds, 60)
        # minute = minutes % 60; hour    = minutes // 60
        hour, minute = divmod(minutes, 60)
        return datetime.time(hour, minute, second)
    if xldays < 61 and datemode == 0:
        raise Exception(xldate)
    return (
            datetime.datetime.fromordinal(xldays + 693594 + 1462 * datemode)
            + datetime.timedelta(seconds=seconds)
    )

#template_folder='../xxxx' 指 前端文件的目录
#static_folder="../xxxx"  指 静态文件的目录
@app.route('/', methods=["GET"])

# def start_server():
#     app.run(host='0.0.0.0',port=8080)

def index():

     wb = openpyxl.load_workbook('工作任务统计.xlsx')
     # 获取workbook中所有的表格
     # sheets = wb.get_sheet_names()
     sheets = wb.sheetnames
     # print(sheets)
     # 循环遍历所有sheet
     未完成任务 = []
     已完成任务 = []
     未完成任务计数 = 0
     未完成任务分类计数 = []
     已完成任务计数 = 0
     已完成任务分类计数 = []
     工作结束时间=[]
     已完成工作结束时间 = []
     任务开始时间=[]
     共几个工作人员=len(sheets)
     按月统计每人任务数量 = []  # 存放每月人员名称
     for ii in range(len(sheets)):
         sheet = wb.get_sheet_by_name(sheets[ii])
         for r in range(2, sheet.max_row):
             # print(sheet.cell(row=r, column=7).value)
             if sheet.cell(row=r, column=7).value is None:  #判断表格数据是否为空
                 # print('111111111111111111111111111111')
                 # print(sheet.cell(row=r, column=7).value)
                 continue
             hh = sheet.cell(row=r, column=7).value

             hh = str(hh)[5:7]  # 得到安排工作月份
             reg="".join(re.findall("[\u4e00-\u9fa5]",str(sheet))) #得到sheet表名称
             按月统计每人任务数量.append(str(reg) +" " +hh )
     # 利用pandas模块下的value_counts方法(这里需要安装pandas模块)
     # print(按月统计每人任务数量)
     dict2 = {}
     for key in 按月统计每人任务数量:
         dict2[key] = dict2.get(key, 0) + 1
     print(dict2)
     res = {}
     for i, j in dict2.items():                            #感谢CSDN 请叫我问哥  https://blog.csdn.net/soonway2010?type=ask
         n, m = i.split()
         res.setdefault(n, [0] * 12)[int(m) - 1] += j
     # print(res)
     valsname=res.keys()
     valsname=list(valsname)
     # print(valsname)
     vals = res.values()
     vals=list(vals)





     for i in range(len(sheets)):
          sheet = wb.get_sheet_by_name(sheets[i])
          # print('\n\n第' + str(i + 1) + '个sheet: ' + sheet.title + '->>>')
          for r in range(1, sheet.max_row + 1):
               if sheet.cell(row=r, column=10).value == "否":
                    未完成任务计数 = 未完成任务计数 + 1
                    # 未完成任务分类计数[sheet.title] =未完成任务计数+1
                    未完成任务分类计数.append(sheet.title)
                    aa=sheet.cell(row=r, column=8).value
                    # bb=xldate_as_datetime(aa)  #将excel读取到日期格式数据进行转换。
                    bb=str(aa)[0:10]  #去年时间保留日期
                    hh = sheet.cell(row=r, column=7).value
                    hh = str(hh)[5:7]      #得到安排工作月份
                    任务开始时间.append(hh+"月")
                    工作结束时间.append(bb)
                    未完成任务.append(sheet.cell(row=r, column=5).value)
                    # 未完成任务分类计数.append(未完成任务计数+1)
               if sheet.cell(row=r, column=10).value == "是":
                    已完成任务计数 = 已完成任务计数 + 1
                    aa = sheet.cell(row=r, column=8).value
                    hh=sheet.cell(row=r, column=7).value
                    hh=str(hh)[5:7]
                    # bb = xldate_as_datetime(aa)  # 将excel读取到日期格式数据进行转换。
                    bb = str(aa)[0:10]  # 去年时间保留日期
                    已完成工作结束时间.append(bb)
                    任务开始时间.append(hh+"月")
                    已完成任务分类计数.append(sheet.title)
                    已完成任务.append(sheet.cell(row=r, column=3).value)
     总任务数 = 未完成任务计数 + 已完成任务计数
     dict = {}  #统计任务开始时间中每个月安排多少次工作。
     for key in 任务开始时间:
         dict[key] = dict.get(key, 0) + 1

     global 任务开始月份,任务月份工作量统计
     任务开始月份 = list(dict.keys())
     任务开始月份 = re.findall("\d+", str(任务开始月份))

     任务月份工作量统计=str(list(dict.values())).replace('[', '')
     任务月份工作量统计=任务月份工作量统计.replace(']', '')

     # 任务月份工作量统计=''.join(任务月份工作量统计)
     # print(任务月份工作量统计)
     # print("...........................................")
     # print(未完成任务分类计数)
     # print("...........................................")
     #print(任务开始时间)
     # print("总任务数:     " + str(总任务数))
     # print(未完成任务)
     # print(已完成任务)
     # print(未完成任务计数)
     # print(已完成任务计数)
     每个人完成任务计数 = {}
     每个人未完成任务计数 = {}
     未完成人员姓名= []
     未完成人员任务数量=[]
     已完成人员姓名 = []
     已完成人员任务数量 = []
     for i in range(len(sheets)):
          sheet = wb.get_sheet_by_name(sheets[i])
          每个人完成任务计数.update({sheets[i]: 已完成任务分类计数.count(sheets[i])})
          每个人未完成任务计数.update({sheets[i]: 未完成任务分类计数.count(sheets[i])})
     for x, y in 每个人完成任务计数.items():  # 通过使用 items() 函数遍历键和值:
          # print(x, y)
          未完成人员姓名.append(x)
          未完成人员任务数量.append(y)
     for x, y in 每个人未完成任务计数.items():  # 通过使用 items() 函数遍历键和值:
          # print(x, y)
          已完成人员姓名.append(x)
          已完成人员任务数量.append(y)
     valsname2=str(valsname)
     print(type(valsname2))
     return render_template("index.html",valsname2=valsname2,valsname=valsname,vals=vals,任务月份工作量统计=任务月份工作量统计,共几个工作人员=共几个工作人员,已完成工作结束时间=已完成工作结束时间,工作结束时间=工作结束时间,总任务数=str(总任务数),已经完成=已完成任务计数,未完成=未完成任务计数,未完成人员姓名=未完成人员姓名,未完成人员任务数量=未完成人员任务数量,已完成人员姓名=已完成人员姓名,已完成人员任务数量=已完成人员任务数量,已完成任务分类计数=已完成任务分类计数,已完成任务=已完成任务,未完成任务=未完成任务,未完成任务分类计数=未完成任务分类计数)




@app.route('/echarts', methods=["GET"]) #echarts 名字可以改为任意,但一定要与HTML文件中一至
def echarts():
    return jsonify(任务开始月份=任务开始月份,任务月份工作量统计=任务月份工作量统计,)




app.run(host='0.0.0.0',port=80)

前端index.html代码:

<!DOCTYPE html>
<html lang="en">

<head>
    <title>DashboardKit Bootstrap 5 Admin Template</title>
    <!-- HTML5 Shim and Respond.js IE11 support of HTML5 elements and media queries -->
    <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
    <!--[if lt IE 11]>
    	
    	
    	<![endif]-->
    <!-- Meta -->
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=0, minimal-ui">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="description" content="DashboardKit is made using Bootstrap 5 design framework. Download the free admin template & use it for your project.">
    <meta name="keywords" content="DashboardKit, Dashboard Kit, Dashboard UI Kit, Bootstrap 5, Admin Template, Admin Dashboard, CRM, CMS, Free Bootstrap Admin Template">
    <meta name="author" content="DashboardKit ">


    <!-- Favicon icon -->
   

    <!-- font css -->
    <link rel="stylesheet" href="static/css/feather.css">
    <link rel="stylesheet" href="static/css/fontawesome.css">
    <link rel="stylesheet" href="static/css/material.css">

    <!-- vendor css -->
    <link rel="stylesheet" href="static/css/style.css" id="main-style-link">
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.js"></script>
    <script src="https://cdn.staticfile.org/echarts/5.4.0/echarts.min.js"></script>

</head>
<body class="">
	<!-- [ Pre-loader ] start -->
	<div class="loader-bg">
		<div class="loader-track">
			<div class="loader-fill"></div>
		</div>
	</div>
	<!-- [ Pre-loader ] End -->
	<!-- [ Mobile header ] start -->
	<div class="pc-mob-header pc-header">
		<div class="pcm-logo">
			<img src="static/picture/logo.svg" alt="" class="logo logo-lg">
		</div>
		<div class="pcm-toolbar">
			<a href="#!" class="pc-head-link" id="mobile-collapse">
				<div class="hamburger hamburger--arrowturn">
					<div class="hamburger-box">
						<div class="hamburger-inner"></div>
					</div>
				</div>
			</a>
			<a href="#!" class="pc-head-link" id="headerdrp-collapse">
				<i data-feather="align-right"></i>
			</a>
			<a href="#!" class="pc-head-link" id="header-collapse">
				<i data-feather="more-vertical"></i>
			</a>
		</div>
	</div>
	<!-- [ Mobile header ] End -->

	<!-- [ navigation menu ] start -->
	<nav class="pc-sidebar ">
		<div class="navbar-wrapper">
			<div class="m-header">
				<a href="" class="b-brand">
					<!-- ========   change your logo hear   ============ -->
					<img src="static/picture/logo.svg" alt="" class="logo logo-lg">
					<img src="static/picture/logo-sm.svg" alt="" class="logo logo-sm">
				</a>
			</div>
			<div class="navbar-content">
				<ul class="pc-navbar">
					<li class="pc-item pc-caption">
						<label>Navigation</label>
					</li>
					<li class="pc-item">
						<a href="" class="pc-link "><span class="pc-micon"><i class="material-icons-two-tone">home</i></span><span class="pc-mtext">Dashboard</span></a>
					</li>
					<li class="pc-item pc-caption">
						<label>Elements</label>
						<span>UI Components</span>
					</li>
					<li class="pc-item">
						<a href="bc_typography.html" class="pc-link "><span class="pc-micon"><i class="material-icons-two-tone">business_center</i></span><span class="pc-mtext">Typography</span></a>
					</li>
					<li class="pc-item">
						<a href="icon-feather.html" class="pc-link "><span class="pc-micon"><i class="material-icons-two-tone">history_edu</i></span><span class="pc-mtext">Icons</span></a>
					</li>
					<li class="pc-item pc-caption">
						<label>table</label>
					</li>
					<li class="pc-item">
						<a href="tbl_bootstrap.html" class="pc-link "><span class="pc-micon"><i class="material-icons-two-tone">table_rows</i></span><span class="pc-mtext">Bootstrap table</span></a>
					</li>
					<li class="pc-item pc-caption">
						<label>Chart & Maps</label>
						<span>Tones of readymade charts</span>
					</li>
					<li class="pc-item">
						<a href="chart-apex.html" class="pc-link "><span class="pc-micon"><i class="material-icons-two-tone">bubble_chart</i></span><span class="pc-mtext">Chart</span></a>
					</li>
					<li class="pc-item">
						<a href="map-google.html" class="pc-link "><span class="pc-micon"><i class="material-icons-two-tone">my_location</i></span><span class="pc-mtext">Maps</span></a>
					</li>
					<li class="pc-item pc-caption">
						<label>Pages</label>
						<span>Redymade Pages</span>
					</li>
					<li class="pc-item pc-hasmenu">
						<a href="#!" class="pc-link"><span class="pc-micon"><i class="material-icons-two-tone">https</i></span><span class="pc-mtext">Authentication</span><span class="pc-arrow"><i data-feather="chevron-right"></i></span></a>
						<ul class="pc-submenu">
							<li class="pc-item"><a class="pc-link" href="auth-signup.html" target="_blank">Sign up</a></li>
							<li class="pc-item"><a class="pc-link" href="auth-signin.html" target="_blank">Sign in</a></li>
						</ul>
					</li>
					<li class="pc-item pc-caption">
						<label>Other</label>
						<span>Extra more things</span>
					</li>
					<li class="pc-item pc-hasmenu">
						<a href="#!" class="pc-link"><span class="pc-micon"><i class="material-icons-two-tone">list_alt</i></span><span class="pc-mtext">Menu levels</span><span class="pc-arrow"><i data-feather="chevron-right"></i></span></a>
						<ul class="pc-submenu">
							<li class="pc-item"><a class="pc-link" href="#!">Menu Level 2.1</a></li>
							<li class="pc-item pc-hasmenu">
								<a href="#!" class="pc-link">Menu level 2.2<span class="pc-arrow"><i data-feather="chevron-right"></i></span></a>
								<ul class="pc-submenu">
									<li class="pc-item"><a class="pc-link" href="#!">Menu level 3.1</a></li>
									<li class="pc-item"><a class="pc-link" href="#!">Menu level 3.2</a></li>
									<li class="pc-item pc-hasmenu">
										<a href="#!" class="pc-link">Menu level 3.3<span class="pc-arrow"><i data-feather="chevron-right"></i></span></a>
										<ul class="pc-submenu">
											<li class="pc-item"><a class="pc-link" href="#!">Menu level 4.1</a></li>
											<li class="pc-item"><a class="pc-link" href="#!">Menu level 4.2</a></li>
										</ul>
									</li>
								</ul>
							</li>
							<li class="pc-item pc-hasmenu">
								<a href="#!" class="pc-link">Menu level 2.3<span class="pc-arrow"><i data-feather="chevron-right"></i></span></a>
								<ul class="pc-submenu">
									<li class="pc-item"><a class="pc-link" href="#!">Menu level 3.1</a></li>
									<li class="pc-item"><a class="pc-link" href="#!">Menu level 3.2</a></li>
									<li class="pc-item pc-hasmenu">
										<a href="#!" class="pc-link">Menu level 3.3<span class="pc-arrow"><i data-feather="chevron-right"></i></span></a>
										<ul class="pc-submenu">
											<li class="pc-item"><a class="pc-link" href="#!">Menu level 4.1</a></li>
											<li class="pc-item"><a class="pc-link" href="#!">Menu level 4.2</a></li>
										</ul>
									</li>
								</ul>
							</li>
						</ul>
					</li>
					<li class="pc-item"><a href="sample-page.html" class="pc-link "><span class="pc-micon"><i class="material-icons-two-tone">storefront</i></span><span class="pc-mtext">Sample page</span></a></li>

				</ul>
				<div class="card text-center">
					<div class="card-body">
						<button type="button" class="btn-close btn-close-white" data-dismiss="alert" aria-hidden="true"></button>
						<i class="feather icon-sunset f-40"></i>
						
						Copyright &copy; 2022.Company name All rights reserved.<a target="_blank" href="https://sc.chinaz.com/moban/">&#x7F51;&#x9875;&#x6A21;&#x677F;</a>
						
					</div>
				</div>
			</div>
		</div>
	</nav>
	<!-- [ navigation menu ] end -->
	<!-- [ Header ] start -->
	<header class="pc-header ">
		<div class="header-wrapper">
			<div class="me-auto pc-mob-drp">
				<ul class="list-unstyled">

				</ul>
			</div>
			<div class="ms-auto">
				<ul class="list-unstyled">
					<li class="dropdown pc-h-item">
						<a class="pc-head-link dropdown-toggle arrow-none me-0" data-bs-toggle="dropdown" href="#" role="button" aria-haspopup="false" aria-expanded="false">
							<i class="material-icons-two-tone">search</i>
						</a>
						<div class="dropdown-menu dropdown-menu-end pc-h-dropdown drp-search">
							<form class="px-3">
								<div class="form-group mb-0 d-flex align-items-center">
									<i data-feather="search"></i>
									<input type="search" class="form-control border-0 shadow-none" placeholder="Search here. . .">
								</div>
							</form>
						</div>
					</li>
					<li class="dropdown pc-h-item">
						<a class="pc-head-link dropdown-toggle arrow-none me-0" data-bs-toggle="dropdown" href="#" role="button" aria-haspopup="false" aria-expanded="false">
							<img src="static/picture/avatar-2.jpg" alt="user-image" class="user-avtar">
							<span>
								<span class="user-name">Joseph William</span>
								<span class="user-desc">Administrator</span>
							</span>
						</a>
						<div class="dropdown-menu dropdown-menu-end pc-h-dropdown">
							<div class=" dropdown-header">
								<h5 class="text-overflow m-0"><span class="badge bg-light-primary"><a href="index1.html" target="_blank">Upgrade to
											Pro</a></span></h5>
							</div>

							<a href="auth-signin.html" class="dropdown-item">
								<i class="material-icons-two-tone">chrome_reader_mode</i>
								<span>Logout</span>
							</a>
						</div>
					</li>
				</ul>
			</div>
		</div>
	</header>
	<!-- [ Header ] end -->
<!-- [ Main Content ] start -->
<div class="pc-container">
    <div class="pcoded-content">
        <!-- [ breadcrumb ] start -->
        <div class="page-header">
            <div class="page-block">
                <div class="row align-items-center">
                    <div class="col-md-6">
                        <div class="page-header-title">
                            <h5 class="m-b-10">Dashboard sale</h5>
                        </div>
                        <ul class="breadcrumb">
                            <li class="breadcrumb-item"><a href="">Home</a></li>
                            <li class="breadcrumb-item">Dashboard sale</li>
                        </ul>
                    </div>
                </div>
            </div>
        </div>
        <!-- [ breadcrumb ] end -->
        <!-- [ Main Content ] start -->
        <div class="row">
            <!-- support-section start -->
            <div class="col-xl-6 col-md-12">
                <div class="card flat-card">
                    <div class="row-table">
                        <div class="col-sm-6 card-body br">
                            <div class="row">
                                <div class="col-sm-4">
                                    <i class="material-icons-two-tone text-primary mb-1">group</i>
                                </div>
                                <div class="col-sm-8 text-md-center">
                                    <h5>{{总任务数}}</h5>
                                    <span>总任务数</span>
                                </div>
                            </div>
                        </div>
                        <div class="col-sm-6 d-none d-md-table-cell d-lg-table-cell d-xl-table-cell card-body br">
                            <div class="row">
                                <div class="col-sm-4">
                                    <i class="material-icons-two-tone text-primary mb-1">language</i>
                                </div>
                                <div class="col-sm-8 text-md-center">
                                    <h5>{{已经完成}}</h5>
                                    <span>已经完成</span>
                                </div>
                            </div>
                        </div>
                        <div class="col-sm-6 card-body">
                            <div class="row">
                                <div class="col-sm-4">
                                    <i class="material-icons-two-tone text-primary mb-1">unarchive</i>
                                </div>
                                <div class="col-sm-8 text-md-center">
                                    <h5>{{未完成}}</h5>
                                    <span>未完成</span>
                                </div>
                            </div>
                        </div>
                    </div>
 <!-- [ basic-table ] start -->
            <div class="col-md-15">
                <div class="card">
                    <div class="card-header">
                        <h5>任务分类统计</h5>
                        <span class="d-block m-t-5">use class <code>table</code> inside table element</span>
                    </div>
                    <div class="card-body table-border-style">
                        <div class="table-responsive">
                            <table class="table">
                                <thead>
                                    <tr>
                                        <th>序号</th>
                                        <th>姓名</th>
                                        <th>任务总量</th>
                                        <th>完成任务数</th>
                                        <th>未完成数量</th>
                                        <th>完成百分比</th>
                                    </tr>
                                </thead>
                                <tbody>
                                     {%for x in range(共几个工作人员)%}
                                    <tr>
                                        <td>{{x+1}}</td>
                                        <td>{{未完成人员姓名[x]}}</td>
                                        <td>{{未完成人员任务数量[x]+已完成人员任务数量[x]}}</td>
                                        <td>{{未完成人员任务数量[x]}}</td>
                                        <td>{{已完成人员任务数量[x]}}</td>
                                        <td>{{'{0:0.0f}'.format(未完成人员任务数量[x]/(未完成人员任务数量[x]+已完成人员任务数量[x])*100)}}</td>

                                    </tr>
                                     {%endfor%}

                                </tbody>
                            </table>
                        </div>
                    </div>
                </div>
            </div>
            <!-- [ basic-table ] end -->
                </div>
                <div class="row">

                </div>
            </div>
             <div class="col-md-6">
                <div class="card">
                    <div class="card-header">
                        <h5>任务完成情况统计</h5>
                    </div>
                    <div id="main" style="width: 600px;height:400px;"></div>
                            <script type="text/javascript">
                              // 基于准备好的dom,初始化echarts实例
                              var myChart = echarts.init(document.getElementById('main'));
                              // 指定图表的配置项和数据
                              option = {
                                  title: {
                                    text: '任务完成情况统计',

                                    left: 'center'
                                  },
                                  tooltip: {
                                    trigger: 'item'
                                  },
                                  legend: {
                                    orient: 'vertical',
                                    left: 'left'
                                  },
                                  series: [
                                    {
                                      name: '任务完成情况',
                                      type: 'pie',
                                      radius: '50%',
                                      data: [
                                        { value: {{已经完成}}, name: '已完成任务' },
                                        { value: {{未完成}}, name: '未完成任务' },

                                      ],
                                      emphasis: {
                                        itemStyle: {
                                          shadowBlur: 10,
                                          shadowOffsetX: 0,
                                          shadowColor: 'rgba(0, 0, 0, 0.5)'
                                        }
                                      }
                                    }
                                  ]
                                };

                              // 使用刚指定的配置项和数据显示图表。
                              myChart.setOption(option);
                            </script>
                </div>
            </div>
            <div >
                <div class="card">
                    <div class="card-header">
                        <h5>月工作任务量</h5>
                    </div>

                <div id="container" style="width: 100%;height:400px;"></div>
  <script type="text/javascript" src="https://fastly.jsdelivr.net/npm/echarts@5.4.0/dist/echarts.min.js"></script>
    <script type="text/javascript">
    var dom = document.getElementById('container');
    var myChart = echarts.init(dom, null, {
      renderer: 'canvas',
      useDirtyRect: false
    });
    var app = {};

    var option;

    const posList = [
  'left',
  'right',
  'top',
  'bottom',
  'inside',
  'insideTop',
  'insideLeft',
  'insideRight',
  'insideBottom',
  'insideTopLeft',
  'insideTopRight',
  'insideBottomLeft',
  'insideBottomRight'
];
app.configParameters = {
  rotate: {
    min: -90,
    max: 90
  },
  align: {
    options: {
      left: 'left',
      center: 'center',
      right: 'right'
    }
  },
  verticalAlign: {
    options: {
      top: 'top',
      middle: 'middle',
      bottom: 'bottom'
    }
  },
  position: {
    options: posList.reduce(function (map, pos) {
      map[pos] = pos;
      return map;
    }, {})
  },
  distance: {
    min: 0,
    max: 100
  }
};
app.config = {
  rotate: 90,
  align: 'left',
  verticalAlign: 'middle',
  position: 'insideBottom',
  distance: 15,
  onChange: function () {
    const labelOption = {
      rotate: app.config.rotate,
      align: app.config.align,
      verticalAlign: app.config.verticalAlign,
      position: app.config.position,
      distance: app.config.distance
    };
    myChart.setOption({
      series: [
        {
          label: labelOption
        },
        {
          label: labelOption
        },
        {
          label: labelOption
        },
        {
          label: labelOption
        }
      ]
    });
  }
};
const labelOption = {
  show: true,
  position: app.config.position,
  distance: app.config.distance,
  align: app.config.align,
  verticalAlign: app.config.verticalAlign,
  rotate: app.config.rotate,
  formatter: '{c}  {name|{a}}',
  fontSize: 16,
  rich: {
    name: {}
  }
};
option = {
  tooltip: {
    trigger: 'axis',
    axisPointer: {
      type: 'shadow'
    }
  },
  legend: {
    data: ['{{valsname[0]}}','{{valsname[1]}}','{{valsname[2]}}', '{{valsname[3]}}']
  },
  toolbox: {
    show: true,
    orient: 'vertical',
    left: 'right',
    top: 'center',
    feature: {
      mark: { show: true },
      dataView: { show: true, readOnly: false },
      magicType: { show: true, type: ['line', 'bar', 'stack'] },
      restore: { show: true },
      saveAsImage: { show: true }
    }
  },
  xAxis: [
    {
      type: 'category',
      axisTick: { show: false },
      data: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月']
    }
  ],
  yAxis: [
    {
      type: 'value'
    }
  ],
  series: [
    {
      name: '{{valsname[3]}}',
      type: 'bar',
      barGap: 0,
      label: labelOption,
      emphasis: {
        focus: 'series'
      },
      data: {{vals[3]}}
    },
    {
      name: '{{valsname[0]}}',
      type: 'bar',
      label: labelOption,
      emphasis: {
        focus: 'series'
      },
      data: {{vals[0]}}
    },
    {
      name: '{{valsname[1]}}',
      type: 'bar',
      label: labelOption,
      emphasis: {
        focus: 'series'
      },
      data: {{vals[1]}}
    },
    {
      name: '{{valsname[2]}}',
      type: 'bar',
      label: labelOption,
      emphasis: {
        focus: 'series'
      },
      data: {{vals[2]}}
    }
  ]
};

    if (option && typeof option === 'object') {
      myChart.setOption(option);
    }

    window.addEventListener('resize', myChart.resize);
  </script>

                        </div>

                    </div>
                </div>
            </div>
            <!-- support-section end -->
            <!-- 饼形图 start -->

            <div class="col-xl-6 col-md-12"style="width:40%";>

            </div>

            <!-- 饼形图 end -->
            <!-- [ Contextual-table ] start -->
            <div class="col-md-12" style="width:100%;">
                <div class="card">
                    <div class="card-header">
                        <h5>未完成任务列表-共{{未完成}}个</h5>
                        <span class="d-block m-t-5">{{valsname[0]}},{{valsname[1]}},{{valsname[2]}}, {{valsname[3]}}  For Make row Contextual add Contextual class like <code>.table-success</code> in <code> tr tag</code> and For cell add Contextual class in <code> td or th tag</code> .</span>
                    </div>
                    <div class="pro-scroll"style="position:relative;overflow: auto;">
                        <div class="card-body p-0">
                            <table  class="table table-bordered table-striped table-hover" style="word-break:break-all; word-wrap:break-all;">
                                <thead>
                                    <tr>
                                        <th>序号</th>
                                        <th>任务名称</th>
                                        <th>承办人</th>
                                        <th>工作结束时间</th>
                                    </tr>
                                </thead>
                                <tbody>
                                    {%for x in range(未完成)%}
                                    <tr class="table-success">
                                        <td>{{x+1}}</td>
                                        <td class="text-wrap">{{未完成任务[x]}}</td>
                                        <td>{{未完成任务分类计数[x]}}</td>
                                        <td>{{工作结束时间[x]}}</td>
                                    </tr>
                                    {%endfor%}
                                </tbody>
                            </table>
                        </div>
                    </div>
                </div>
            </div>
            <!-- [ Contextual-table ] end -->
            <!-- [ Contextual-table ] start -->
            <div class="col-md-12">
                <div class="card">
                    <div class="card-header">
                        <h5>已完成任务列表-共{{已经完成}}个</h5>
                        <span class="d-block m-t-5">For Make row Contextual add Contextual class like <code>.table-success</code> in <code> tr tag</code> and For cell add Contextual class in <code> td or th tag</code> .</span>
                    </div>
                    <div class="pro-scroll"style="height:500px;position:relative;overflow: auto;">
                        <div class="card-body p-0">
                            <table  class="table table-bordered table-striped table-hover with-check" style="word-break:break-all; word-wrap:break-all;">
                                <thead>
                                    <tr>
                                        <th>序号</th>
                                        <th>任务名称</th>
                                        <th>承办人</th>
                                        <th>工作结束时间</th>
                                    </tr>
                                </thead>
                                <tbody>
                                    {%for x in range(已经完成)%}
                                    <tr class="table-success">
                                        <td>{{x+1}}</td>
                                        <td class="text-wrap">{{已完成任务[x]}}</td>
                                        <td>{{已完成任务分类计数[x]}}</td>
                                        <td>{{已完成工作结束时间[x]}}</td>
                                    </tr>
                                    {%endfor%}
                                </tbody>
                            </table>
                        </div>
                    </div>
                </div>
            </div>
            <!-- [ Contextual-table ] end -->


        </div>
  </div>

        <!-- [ Main Content ] end -->
    </div>


<!-- [ Main Content ] end -->




    <!-- Warning Section start -->
    <!-- Older IE warning message -->
    <!--[if lt IE 11]>
        <div class="ie-warning">
            <h1>Warning!!</h1>
            <p>You are using an outdated version of Internet Explorer, please upgrade
               <br/>to any of the following web browsers to access this website.
            </p>
            <div class="iew-container">
                <ul class="iew-download">
                    <li>
                        <a href="http://www.google.com/chrome/">
                            <img src="assets/images/browser/chrome.png" alt="Chrome">
                            <div>Chrome</div>
                        </a>
                    </li>
                    <li>
                        <a href="#">
                            <img src="assets/images/browser/firefox.png" alt="Firefox">
                            <div>Firefox</div>
                        </a>
                    </li>
                    <li>
                         <a href="#">
                            <img src="assets/images/browser/opera.png" alt="Opera">
                            <div>Opera</div>
                        </a>
                    </li>
                    <li>
                         <a href="#">
                            <img src="assets/images/browser/safari.png" alt="Safari">
                            <div>Safari</div>
                        </a>
                    </li>
                    <li>
                        <a href="#">
                            <img src="assets/images/browser/ie.png" alt="">
                            <div>IE (11 & above)</div>
                        </a>
                    </li>
                </ul>
            </div>
            <p>Sorry for the inconvenience!</p>
        </div>
    <![endif]-->
    <!-- Warning Section Ends -->
    <!-- Required Js -->
    <script src="static/js/vendor-all.js"></script>
    <script src="static/js/bootstrap.min.js"></script>
    <script src="static/js/pcoded.js"></script>
    <script src="static/js/feather.min.js"></script>
<!-- Apex Chart -->
<script src="static/js/apexcharts.min.js"></script>
<div class="fixed-button active"><a href="#" target="_blank" class="btn btn-md btn-success"><i class="material-icons-two-tone text-white">shopping_cart</i> Upgrade
        To
        Pro</a> </div>
<!-- custom-chart js -->
<script src="static/js/dashboard-sale.js"></script>
</body>

</html>

完成后页面:

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值