From d2469cf65f097ce6d6faa6699ea252adcd3e954c Mon Sep 17 00:00:00 2001
From: chenhaozhe <cgz@hz-kingdee.com>
Date: 星期二, 14 四月 2026 16:54:51 +0800
Subject: [PATCH] 新增 质量每日运行状态分析 报表

---
 WebTM/layuiadmin/Scripts/webConfig.js             |    4 
 WebTM/views/质量管理/质量报表/QC_DailyRunStateReport.html |  555 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 557 insertions(+), 2 deletions(-)

diff --git a/WebTM/layuiadmin/Scripts/webConfig.js b/WebTM/layuiadmin/Scripts/webConfig.js
index 1f201e8..eeb62cd 100644
--- a/WebTM/layuiadmin/Scripts/webConfig.js
+++ b/WebTM/layuiadmin/Scripts/webConfig.js
@@ -4,8 +4,8 @@
   //var WEBURL = "http://localhost/API/";             //棰滄檽鍐涙湰鍦伴厤缃�
   //var WEBURL = "http://localhost:8082/API/";        //鏉滆春鏈湴閰嶇疆
   //var WEBURL = "http://localhost:81/API/"           //缈佹稕娑涙湰鍦伴厤缃�
-   var WEBURL = "http://localhost:8082/API/"; //寮犵憺骞挎湰鍦伴厤缃�
-  // var WEBURL = "http://localhost:81/API/";          //闄堥晲鍝叉湰鍦伴厤缃�
+  // var WEBURL = "http://localhost:8082/API/"; //寮犵憺骞挎湰鍦伴厤缃�
+  var WEBURL = "http://localhost:81/API/";          //闄堥晲鍝叉湰鍦伴厤缃�
   //var WEBURL = "http://localhost:8082/LuBaoAPI/";   //鏉庢灄淇婃湰鍦伴厤缃�
   //var WEBURL = "http://localhost:8080/API/";        //鐜嬩华鏈湴閰嶇疆
   //var WEBURL = "http://localhost:8082/LuBaoAPI/";   //浣欐�濇澃鏈湴閰嶇疆
diff --git "a/WebTM/views/\350\264\250\351\207\217\347\256\241\347\220\206/\350\264\250\351\207\217\346\212\245\350\241\250/QC_DailyRunStateReport.html" "b/WebTM/views/\350\264\250\351\207\217\347\256\241\347\220\206/\350\264\250\351\207\217\346\212\245\350\241\250/QC_DailyRunStateReport.html"
new file mode 100644
index 0000000..e754818
--- /dev/null
+++ "b/WebTM/views/\350\264\250\351\207\217\347\256\241\347\220\206/\350\264\250\351\207\217\346\212\245\350\241\250/QC_DailyRunStateReport.html"
@@ -0,0 +1,555 @@
+
+<!DOCTYPE html>
+<html>
+<head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <title>璐ㄩ噺姣忔棩杩愯鐘舵�佸垎鏋�</title>
+    <meta name="renderer" content="webkit">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+    <link rel="stylesheet" href="../../../layuiadmin/layui/css/layui.css" media="all">
+    <link rel="stylesheet" href="../../../layuiadmin/style/admin.css" media="all">
+    <script src="../../../layuiadmin/layui/layui.js"></script>
+    <script src="../../../layuiadmin/Scripts/json2.js"></script>
+    <script src="../../../layuiadmin/Scripts/jquery-1.4.1.js"></script>
+    <script src="../../../layuiadmin/PubCustom.js"></script>
+    <script src="../../../layuiadmin/zgqCustom/zgqCustom.js"></script>
+    <script src="../../../layuiadmin/HideButton.js"></script>
+    <script src='../../../layuiadmin/lib/extend/echarts.min.js'></script>
+    <script src="../../../layuiadmin/Scripts/webConfig.js"></script>
+    <style type="text/css">
+        * {
+            margin: 0;
+            padding: 0;
+            box-sizing: border-box;
+        }
+
+        html, body {
+            height: 100%;
+        }
+
+        .page-container {
+            height: 100%;
+            padding: 10px;
+            display: flex;
+            flex-direction: column;
+        }
+
+        .query-bar {
+            background: #fff;
+            padding: 10px 15px;
+            border-radius: 6px;
+            margin-bottom: 10px;
+            flex-shrink: 0;
+        }
+
+        .summary-row {
+            display: flex;
+            flex-wrap: wrap;
+            margin-bottom: 10px;
+            flex-shrink: 0;
+        }
+
+        .chart-container {
+            background: #fff;
+            border-radius: 6px;
+            padding: 8px;
+            flex: 1;
+            overflow: auto;
+            min-height: 0;
+            display: grid;
+            grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
+            gap: 8px;
+        }
+
+        .chart-box {
+            margin: 4px;
+            border: 1px solid #eee;
+            border-radius: 4px;
+            background: #fafbfc;
+            position: relative;
+            min-height: 260px;
+            display: flex;
+            align-items: stretch;
+            justify-content: stretch;
+        }
+
+        .empty-tip {
+            position: absolute;
+            left: 0;
+            top: 0;
+            width: 100%;
+            height: 100%;
+            display: flex;
+            align-items: center;
+            justify-content: center;
+            color: #999;
+            font-size: 12px;
+        }
+
+        .summary-card {
+            margin: 4px;
+            border: 1px solid #eee;
+            border-radius: 4px;
+            background: #fafbfc;
+            text-align: center;
+            padding: 8px 4px;
+            min-width: 200px;
+        }
+
+            .summary-card.total-card {
+                background: linear-gradient(135deg, #1e9fff 0%, #5fb3ff 100%);
+                border-color: #1e9fff;
+            }
+
+                .summary-card.total-card .summary-number,
+                .summary-card.total-card .summary-label {
+                    color: #fff;
+                }
+
+        .summary-number {
+            font-size: 16px;
+            font-weight: bold;
+            color: #1e9fff;
+        }
+
+        .summary-label {
+            font-size: 11px;
+            color: #888;
+            margin-top: 2px;
+        }
+    </style>
+</head>
+<body>
+    <div class="page-container">
+        <div class="query-bar">
+            <form class="layui-form" action="" lay-filter="component-form-group">
+                <div class="layui-collapse">
+                    <div class="layui-colla-item">
+                        <div class="layui-colla-title layui-inline">
+                            <div class="layui-inline"><span>鏇村</span></div>
+                        </div>
+                        <div class="layui-inline">
+                            <label class="layui-form-label" style="width:100px;">鏃ユ湡闂撮殧</label>
+                            <div class="layui-input-block">
+                                <select name="HInitTimeCycle" id="HInitTimeCycle" class="ForFilteringSchemes" lay-filter="HInitTimeCycle" style="width:190px;">
+                                </select>
+                            </div>
+                        </div>
+                        <div class="layui-inline">
+                            <label class="layui-form-label" style="width:100px;">寮�濮嬫棩鏈�</label>
+                            <div class="layui-input-block">
+                                <input type="date" class="layui-input ForFilteringSchemes" id="HBeginDate" style="width:160px;">
+                            </div>
+                        </div>
+                        <div class="layui-inline">
+                            <label class="layui-form-label" style="width:100px;">缁撴潫鏃ユ湡</label>
+                            <div class="layui-input-block">
+                                <input type="date" class="layui-input ForFilteringSchemes" id="HEndDate" style="width:160px;">
+                            </div>
+                        </div>
+                        <button class="layui-btn layuiadmin-btn-order" type="button" lay-submit="" lay-filter="btnSearch" id="btnSearch">
+                            <i class="layui-icon layui-icon-search layuiadmin-button-btn"></i>
+                        </button>
+                        <button class="layui-btn layuiadmin-btn-order" type="button" lay-submit="" lay-filter="btnReSearch" id="btnReSearch" style="padding:0 5px">閲嶇疆</button>
+                    </div>
+                    <div class="layui-colla-content">
+                    </div>
+                </div>
+            </form>
+        </div>
+
+        <div class="summary-row" id="summaryRow"></div>
+        <div class="chart-container" id="chartContainer"></div>
+    </div>
+
+    <script>
+        layui.config({
+            base: '../../../layuiadmin/'
+        }).extend({
+            index: 'lib/index',
+        }).use(['index', 'form', 'element'], function () {
+
+            var $ = layui.$, layer = layui.layer, form = layui.form;
+            var chartInstances = {};
+            var chartConfigKeys = [];
+
+            // 鍥捐〃閰嶇疆
+            var ChartConfig = {
+                // dianjian: { chartTitle: '鐐规璁板綍缁熻', chartType: 'bar', dataTableIndex: 0 },
+                // baoyang: { chartTitle: '淇濆吇璁板綍缁熻', chartType: 'bar', dataTableIndex: 1 },
+                // guzhang: { chartTitle: '鏁呴殰鐧昏缁熻', chartType: 'pie', dataTableIndex: 2 },
+                // weixiupaigong: { chartTitle: '缁翠慨娲惧伐缁熻', chartType: 'pie', dataTableIndex: 3 },
+                // weixiuqiandao: { chartTitle: '缁翠慨绛惧埌缁熻', chartType: 'bar', dataTableIndex: 4 },
+                // weixiujilu: { chartTitle: '缁翠慨璁板綍缁熻', chartType: 'bar', dataTableIndex: 5 },
+                // weixiuyanshou: { chartTitle: '缁翠慨楠屾敹缁熻', chartType: 'pie', dataTableIndex: 6 },
+                // kaiji: { chartTitle: '璁惧寮�鏈虹粺璁�', chartType: 'pie', dataTableIndex: 7 },
+                // tingji: { chartTitle: '璁惧鍋滄満缁熻', chartType: 'bar', dataTableIndex: 8 },
+                // gongyidianjian: { chartTitle: '宸ヨ壓鐐规缁熻', chartType: 'bar', dataTableIndex: 9 }
+
+                shoujian:  { chartTitle: '棣栨璁板綍缁熻', chartType: 'bar', dataTableIndex: 0 },
+                xunjian:  { chartTitle: '宸℃璁板綍缁熻', chartType: 'bar', dataTableIndex: 1 },
+                mojian:  { chartTitle: '鏈璁板綍缁熻', chartType: 'bar', dataTableIndex: 2 },
+                kucunjian:  { chartTitle: '搴撳瓨妫�楠岃褰曠粺璁�', chartType: 'bar', dataTableIndex: 3 },
+                chejianzijian:  { chartTitle: '杞﹂棿鑷璁板綍缁熻', chartType: 'bar', dataTableIndex: 4 },
+                lailiaorukujian:  { chartTitle: '鏉ユ枡鍏ュ簱妫�楠岀粺璁�', chartType: 'bar', dataTableIndex: 5 },
+                shengchanrukujian:  { chartTitle: '鐢熶骇鍏ュ簱妫�楠岀粺璁�', chartType: 'bar', dataTableIndex: 6 },
+                chuchangjianyan:  { chartTitle: '鍑哄巶妫�楠岀粺璁�', chartType: 'bar', dataTableIndex: 7 },
+                buliangpingchuli:  { chartTitle: '涓嶈壇鍝佸鐞嗙粺璁�', chartType: 'bar', dataTableIndex: 8 },
+                buliangpingpingshengshengqing:  { chartTitle: '涓嶈壇鍝佽瘎瀹$敵璇风粺璁�', chartType: 'bar', dataTableIndex: 9 },
+                buliangpingpingshengchuli:  { chartTitle: '涓嶈壇鍝佽瘎瀹″鐞嗙粺璁�', chartType: 'bar', dataTableIndex: 10 },
+                buliangpingpingshengyanshou:  { chartTitle: '涓嶈壇鍝佽瘎瀹¢獙鏀剁粺璁�', chartType: 'bar', dataTableIndex: 11 },
+                buliangpingpingshengyanshou:  { chartTitle: '涓嶈壇鍝佽瘎瀹$粨璁虹粺璁�', chartType: 'bar', dataTableIndex: 12 },
+                yichangfankui:  { chartTitle: '寮傚父鍙嶉缁熻', chartType: 'bar', dataTableIndex: 13 },
+                yichangfankuiyanshou:  { chartTitle: '寮傚父鍙嶉楠屾敹缁熻', chartType: 'bar', dataTableIndex: 14 },
+                yichangfankuiqiandao:  { chartTitle: '寮傚父鍙嶉绛惧埌缁熻', chartType: 'bar', dataTableIndex: 15 },
+                yichangfankuichuli:  { chartTitle: '寮傚父鍙嶉澶勭悊缁熻', chartType: 'bar', dataTableIndex: 16 },
+                yichangfankuiyanshou:  { chartTitle: '寮傚父鍙嶉楠屾敹缁熻', chartType: 'bar', dataTableIndex: 17 },
+                jianyanquyang:  { chartTitle: '妫�楠屽彇鏍风粺璁�', chartType: 'bar', dataTableIndex: 18 },
+                jianyanhuanyang:  { chartTitle: '妫�楠岃繕鏍风粺璁�', chartType: 'bar', dataTableIndex: 19 },
+            };
+
+            // 鐢熸垚椤甸潰缁撴瀯
+            function generatePageStructure() {
+                chartConfigKeys = [];
+                for (var key in ChartConfig) { chartConfigKeys.push(key); }
+                generateSummaryCards();
+                generateChartBoxes();
+            }
+            function generateSummaryCards() {
+                var $summaryRow = $('#summaryRow'); $summaryRow.empty();
+                $summaryRow.append('<div class="summary-card total-card" id="card-total"><div class="summary-number">0</div><div class="summary-label">鎬昏</div></div>');
+                chartConfigKeys.forEach(key => {
+                    var config = ChartConfig[key];
+                    var label = config.chartTitle.replace('缁熻', '');
+                    $summaryRow.append(`<div class="summary-card" id="card-${key}"><div class="summary-number">0</div><div class="summary-label">${label}</div></div>`);
+                });
+            }
+            function generateChartBoxes() {
+                var $c = $('#chartContainer'); $c.empty();
+                chartConfigKeys.forEach(key => {
+                    $c.append(`<div class="chart-box" id="chart-${key}"><div class="empty-tip">鏆傛棤鏁版嵁</div></div>`);
+                });
+            }
+
+            //鏌ヨ
+            form.on('submit(btnReSearch)', function (data) {
+                set_ClearQuery();
+            });
+            //閲嶇疆
+            form.on('submit(btnSearch)', function (data) {
+                get_FastQuery();
+            });
+            //鏃ユ湡闂撮殧涓嬫媺鍒楄〃鐩戝惉
+            form.on('select(HInitTimeCycle)', function (data) {
+                var HInitTimeCycle = $("#HInitTimeCycle").val() * 1;
+                if (HInitTimeCycle != -1) {
+                    $('#HBeginDate').prop('disabled', true);
+                    $('#HEndDate').prop('disabled', true);
+                    $("#HBeginDate").val(Format(new Date(new Date() - 1000 * 60 * 60 * 24 * HInitTimeCycle), "yyyy-MM-dd"));
+                    $("#HEndDate").val(Format(new Date(), "yyyy-MM-dd"));
+                    get_FastQuery();
+                } else {
+                    $('#HBeginDate').prop('disabled', false);
+                    $('#HEndDate').prop('disabled', false);
+                }
+            });
+
+            //鍒濆鍖�
+            function set_ClearBill() {
+                generatePageStructure();
+                setSelect_HInitTimeCycle();
+                var HInitTimeCycle = $("#HInitTimeCycle").val() * 1;
+                if (HInitTimeCycle != -1) {
+                    $('#HBeginDate').prop('disabled', true);
+                    $('#HEndDate').prop('disabled', true);
+                } else {
+                    $('#HBeginDate').prop('disabled', false);
+                    $('#HEndDate').prop('disabled', false);
+                }
+                $("#HBeginDate").val(Format(new Date(new Date() - 1000 * 60 * 60 * 24 * HInitTimeCycle), "yyyy-MM-dd"));
+                $("#HEndDate").val(Format(new Date(), "yyyy-MM-dd"));
+                get_FastQuery();
+            }
+
+            //閲嶇疆
+            function set_ClearQuery() {
+                var today = Format(new Date(), "yyyy-MM-dd");
+                $("#HBeginDate").val(today);
+                $("#HEndDate").val(today);
+                get_FastQuery();
+            }
+
+            //鍒濆鏃ユ湡闂撮殧 涓嬫媺鍒楄〃
+            function setSelect_HInitTimeCycle() {
+                var valueList = [0, 1, 2, 3, 4, 5, 6, 29];
+                var titleList = ["浠婂ぉ", "杩戜袱澶�", "杩戜笁澶�", "杩戝洓澶�", "杩戜簲澶�", "杩戝叚澶�", "杩戜竷澶�", "杩�30澶�"];
+                var HInitTimeCycle_ArrayList = '<option  value="-1" selected="selected" >浠绘剰闂撮殧</option>';
+                for (var i = 0; i < valueList.length; i++) {
+                    HInitTimeCycle_ArrayList += '<option  style="color:blue;" value="' + valueList[i] + '">' + titleList[i] + '</option>';
+                }
+                $("#HInitTimeCycle").empty().append(HInitTimeCycle_ArrayList);
+                $("#HInitTimeCycle").val("0");
+                form.render('select');
+            }
+            // ==============================================
+            // 鏌ヨ 鑷姩琛ラ綈鎵�鏈夋棩鏈燂紙绌烘暟鎹�=0锛�
+            // ==============================================
+            function get_FastQuery() {
+                var wait = layer.load();
+                var beginDate = $("#HBeginDate").val();
+                var endDate = $("#HEndDate").val();
+
+                var sWhere = JSON.stringify({ HBeginDate: beginDate, HEndDate: endDate });
+                var params = { sWhere: sWhere, user: sessionStorage["HUserName"] || '' };
+
+                $.ajax({
+                    url: GetWEBURL() + '/QC_CustomerAppealReport/QC_DailyRunStateReportList',
+                    type: 'GET',
+                    data: params,
+                    success: function (result) {
+                        var data = {};
+                        var fullDateList = getDateRange(beginDate, endDate);
+
+                        if (result && result.code == "1" && result.data) {
+                            chartConfigKeys.forEach(key => {
+                                var cfg = ChartConfig[key];
+                                var tb = "h_p_QC_DailyRunStateReport" + (cfg.dataTableIndex > 0 ? cfg.dataTableIndex : "");
+                                var list = (result.data[tb] && Array.isArray(result.data[tb])) ? result.data[tb] : [];
+
+                                // 杞� map锛堟棩鏈熺粺涓�鏍煎紡鍖栵級
+                                var dataMap = {};
+                                list.forEach(x => {
+                                    var date = x.鏃ユ湡 || "";
+                                    try {
+                                        date = Format(new Date(date), "yyyy-MM-dd");
+                                    } catch (e) {
+                                        date = "";
+                                    }
+                                    var num = parseInt(x.鏁伴噺) || 0;
+                                    if (date) dataMap[date] = num;
+                                });
+
+                                // 琛ラ綈鎵�鏈夋棩鏈�
+                                data[key] = fullDateList.map(date => ({
+                                    name: date,
+                                    value: dataMap[date] || 0
+                                }));
+                            });
+                        } else {
+                            // 鍚庣鏃犳湁鏁堟暟鎹細鍏ㄩ儴鍒濆鍖栦负 0
+                            chartConfigKeys.forEach(key => {
+                                data[key] = fullDateList.map(date => ({ name: date, value: 0 }));
+                            });
+                        }
+
+                        renderAll(data);
+                        layer.close(wait);
+                    },
+                    error: function () {
+                        var fullDateList = getDateRange(beginDate, endDate);
+                        var data = {};
+                        chartConfigKeys.forEach(key => {
+                            data[key] = fullDateList.map(date => ({ name: date, value: 0 }));
+                        });
+                        renderAll(data);
+                        layer.close(wait);
+                    }
+                });
+            }
+
+            // ==============================================
+            // 鐢熸垚寮�濮媬缁撴潫鐨勬墍鏈夋棩鏈燂紙鑷姩璺ㄦ湀/璺ㄥ勾锛�
+            // ==============================================
+            function getDateRange(startDate, endDate) {
+                var arr = [];
+                var start = new Date(startDate);
+                var end = new Date(endDate);
+                while (start <= end) {
+                    arr.push(Format(start, "yyyy-MM-dd"));
+                    start.setDate(start.getDate() + 1);
+                }
+                return arr;
+            }
+
+            // ==============================================
+            // 娓叉煋鎵�鏈夊浘琛ㄥ拰鍗$墖锛堝彇娑堚�滃叏0璺宠繃鈥濓紝濮嬬粓缁樺浘锛�
+            // ==============================================
+            function renderAll(data) {
+                chartConfigKeys.forEach(key => {
+                    var cfg = ChartConfig[key];
+                    var d = data[key] || [];
+                    var $chartBox = $('#chart-' + key);
+                    var dom = $chartBox[0];
+                    var chartKey = 'chart-' + key;
+
+                    // 1. 閿�姣佹棫瀹炰緥锛屾柇寮� ResizeObserver 骞舵竻绌哄鍣�
+                    if (chartInstances[chartKey]) {
+                        try {
+                            if (chartInstances[chartKey]._resizeObserver) chartInstances[chartKey]._resizeObserver.disconnect();
+                        } catch (e) { }
+                        chartInstances[chartKey].dispose();
+                        delete chartInstances[chartKey];
+                    }
+                    $chartBox.empty();
+
+                    // 2. 鏇存柊鍗$墖鎬绘暟
+                    var total = d.reduce((a, b) => a + b.value, 0);
+                    $('#card-' + key + ' .summary-number').text(total);
+
+                    // 3. 濮嬬粓缁樺埗鍥捐〃锛堟煴鐘跺浘浼氭樉绀�0鍊兼煴瀛愶紝楗煎浘鍏�0鏃剁壒娈婂鐞嗭級
+                    if (cfg.chartType === 'pie') {
+                        // 楗煎浘鏃犺鏄惁鏈�0閮界粯鍒�
+                        renderPie(key, cfg.chartTitle, d);
+                    } else if (cfg.chartType === 'bar') {
+                        // 鏌辩姸鍥炬棤璁烘槸鍚︽湁0閮界粯鍒讹紝璁╂í杞存棩鏈熷畬鏁村睍绀�
+                        renderBar(key, cfg.chartTitle, d);
+                    }
+                });
+
+                // 鏇存柊鎬昏鍗$墖
+                var totalAll = 0;
+                chartConfigKeys.forEach(key => {
+                    var d = data[key] || [];
+                    totalAll += d.reduce((a, b) => a + b.value, 0);
+                });
+                $("#card-total .summary-number").text(totalAll);
+            }
+
+            function renderPie(key, title, data) {
+                var dom = document.getElementById('chart-' + key);
+                var $chartBox = $('#chart-' + key);
+                $chartBox.empty();
+
+                var chart = echarts.init(dom);
+                chartInstances['chart-' + key] = chart;
+                // 鑷姩鍝嶅簲瀹瑰櫒灏哄鍙樺寲锛堜紭鍏堜娇鐢� ResizeObserver锛�
+                if (window.ResizeObserver) {
+                    try {
+                        var ro = new ResizeObserver(function () { try { chart.resize(); } catch (e) { } });
+                        ro.observe(dom);
+                        chart._resizeObserver = ro;
+                    } catch (e) { }
+                }
+
+                // 璁$畻鎬诲拰
+                var total = data.reduce((s, x) => s + x.value, 0);
+                var isAllZero = total === 0;
+
+                // 缁樺埗鏁版嵁锛堝叏0鏃剁敤鏋佸皬鍊煎崰浣嶏級
+                var pieData = data.map(x => ({
+                    name: x.name,
+                    value: isAllZero ? 0.0001 : x.value,
+                    originalValue: x.value
+                }));
+
+                // 鍩虹绯诲垪閰嶇疆
+                var seriesConfig = {
+                    type: 'pie',
+                    radius: ['30%', '50%'],
+                    data: pieData,
+                    label: {
+                        show: true,
+                        fontSize: 11,
+                        // 寮哄埗鏄剧ず鏍囩锛岄槻姝㈣闅愯棌
+                        overflow: 'none',
+                        hideOverlap: false
+                    },
+                    labelLine: {
+                        show: true,
+                        length: 10,
+                        length2: 8
+                    },
+                    avoidLabelOverlap: false // 鍏佽鏍囩閲嶅彔锛岀‘淇濋兘鏄剧ず
+                };
+
+                chart.setOption({
+                    title: { text: title, left: 'center', textStyle: { fontSize: 12 } },
+                    tooltip: {
+                        trigger: 'item',
+                        formatter: function (params) {
+                            return `${params.name}: ${params.data.originalValue}`;
+                        }
+                    },
+                    series: [
+                        // 绗竴灞傦細澶栭儴鏄剧ず鏃ユ湡
+                        {
+                            ...seriesConfig,
+                            label: {
+                                ...seriesConfig.label,
+                                position: 'outside',
+                                formatter: function (params) {
+                                    // 澶栭儴濮嬬粓鏄剧ず鏃ユ湡锛堝悕绉帮級
+                                    return params.name;
+                                }
+                            }
+                        },
+                        // 绗簩灞傦細鍐呴儴鏄剧ず鏁伴噺锛堝叏0鏃朵篃鏄剧ず0锛�
+                        {
+                            ...seriesConfig,
+                            label: {
+                                ...seriesConfig.label,
+                                position: 'inside',
+                                formatter: function (params) {
+                                    // 鍐呴儴鏄剧ず鍘熷鏁伴噺锛屽叏0鏃舵樉绀� '0'
+                                    return params.data.originalValue;
+                                }
+                            },
+                            labelLine: { show: false } // 鍐呴儴涓嶉渶瑕佸紩瀵肩嚎
+                        }
+                    ]
+                });
+            }
+
+            // ==============================================
+            // 鏌辩姸鍥炬覆鏌擄紙鏀寔鍏�0鏁版嵁锛屾樉绀烘í杞存爣绛惧拰0鍊硷級
+            // ==============================================
+            function renderBar(key, title, data) {
+                var dom = document.getElementById('chart-' + key);
+                var chart = echarts.init(dom);
+                chartInstances['chart-' + key] = chart;
+                if (window.ResizeObserver) {
+                    try {
+                        var ro = new ResizeObserver(function () { try { chart.resize(); } catch (e) { } });
+                        ro.observe(dom);
+                        chart._resizeObserver = ro;
+                    } catch (e) { }
+                }
+                var colorList = ['#5470c6', '#91cc75', '#fac858', '#ee6666', '#73c0de', '#3ba272', '#fc8452', '#9a60b4', '#ea7ccc'];
+
+                chart.setOption({
+                    title: { text: title, left: 'center', textStyle: { fontSize: 12 } },
+                    tooltip: { trigger: 'axis' },
+                    xAxis: { type: 'category', data: data.map(x => x.name) },
+                    yAxis: { type: 'value' },
+                    series: [{
+                        type: 'bar',
+                        data: data.map(x => x.value),
+                        barWidth: '40%',
+                        itemStyle: {
+                            color: function (params) {
+                                return colorList[params.dataIndex % colorList.length];
+                            },
+                            borderRadius: [4, 4, 0, 0]
+                        },
+                        label: {
+                            show: true,
+                            position: 'top',
+                            fontSize: 11,
+                            formatter: '{c}'
+                        }
+                    }]
+                });
+            }
+            // 鍒濆鍖�
+            set_ClearBill();
+
+            window.onresize = function () {
+                for (var k in chartInstances) {
+                    if (chartInstances[k]) chartInstances[k].resize();
+                }
+            };
+        });
+    </script>
+</body>
+</html>
\ No newline at end of file

--
Gitblit v1.9.1