SVG Dom使用g元素

本文介绍了一个使用SVG g元素创建图形的实例。通过JavaScript动态生成SVG图形,并利用g元素组织多个矩形,实现了简单的图形布局。这有助于理解SVG中g元素的作用及用法。
SVG <wbr>Dom使用g元素
    <!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>svgdom实现g元素</title>
    <style>
        #myg{
            border: 1px solid red;
            width: 200px;
            height: 200px;
        }
    </style>
    <script>
        function createEleG(){
            var root=document.getElementByIdx_x("myg");
            var SVG="http://www.w3.org/2000/svg";

            //创建我们的svg元素
            var svg=document_createElement_xNS(SVG,"svg");
            svg.setAttribute("width","200");
            svg.setAttribute("height","200");

            //创建我们的g元素
            var g=document_createElement_xNS(SVG,"g");
            g.setAttribute("fill","dodgerblue");

            for(var i=0;i<3;i++){
                var rect=document_createElement_xNS(SVG,"rect");
                rect.setAttribute("width","40");
                rect.setAttribute("height","40");
                rect.setAttribute("ry","10");
                rect.setAttribute("x",10+50*i);
                rect.setAttribute("y",10+50*i);
                g.a(rect);
            }
            svg.a(g);
            root.a(svg);
        }
    </script>
</head>
<body onload="createEleG()">
    <h3>svgdom实现g元素</h3>
    <div id="myg"></div>
</body>
</html>
<!DOCTYPE html> <html lang="zh-cn" style="font-size: 15px;"> <head> <meta charset="UTF-8"> <meta name=renderer content=webkit> <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1"> <meta http-equiv="Cache-Control" content="no-transform" /> <meta http-equiv="Cache-Control" content="no-siteapp" /> <meta http-equiv="Cache-Control" content="max-age=7200" /> <!-- <meta name="referrer" content="no-referrer"> --> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> <meta name="keywords" content="LNB换型事件标准内容,IMES FA 相关文档,技术,架构,流程,知识,规范,标准化"/> <meta name="description" content="``` <?xml version="1.0" encoding="UTF-8"?> <root> <Header> <SystemName>UpperSystem</SystemName" /> <!-- OGP分享协议开始 --> <meta property="og:type" content="website"> <meta property="og:title" content="LNB换型事件标准内容 - IMES FA 相关文档"> <meta property="og:description" content="``` <?xml version="1.0" encoding="UTF-8"?> <root> <Header> <SystemName>UpperSystem</SystemName"> <meta property="og:url" content="http://kk.luxsan-ict.com/doc/13859/"> <link rel="icon" href="/static/search/mrdoc_logo_300.png" sizes="192x192" /> <meta property="og:image" content="http://kk.luxsan-ict.com/static/search/mrdoc_logo_300.png"> <!-- OGP分享协议结束 --> <title>LNB换型事件标准内容 - IMES FA 相关文档 - 立臻IT知识库 </title> <link href="/static/PearAdminLayui/component/layui/css/layui.css?version=1.5.2" rel="stylesheet"> <link rel="stylesheet" href="/static/mr-marked/marked.css?version=1.5.2" /> <link href="/static/viewerjs/viewer.min.css?version=1.5.2" rel="stylesheet"> <link href="/static/mrdoc/mrdoc.css?version=1.5.2" rel="stylesheet"> <link href="/static/mrdoc/mrdoc-docs.css?version=1.5.2" rel="stylesheet"> <link href="/static/iconFont/iconfont.css?version=1.5.2" rel="stylesheet"> <style> .markdown-code .markdown-code-block pre,.vditor-reset > pre > code.hljs{ max-height: max-content!important; } code[class*=language-], pre[class*=language-]{ white-space: pre-wrap !important; } :not(pre)>code[class*=language-]{ white-space: inherit !important; } /* html{ filter: invert(1) hue-rotate(180deg); } */ </style> <!--[if lt IE 9]> <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script> <script src="https://oss.maxcdn.com/libs/respond.js/1.3.0/respond.min.js"></script> <![endif]--> </head> <body class="big-page"> <div id="doc-container"> <!-- 左侧目录栏 --> <div id="doc-container-sidebar" id="doc-summary"> <div> <!-- 左上角广告块 --> <!-- 广告代码开始 --> <!-- 广告代码结束 --> <!-- 文集名称 --> <div class="project-title"> <svg class="icon" aria-hidden="true"><use xlink:href="#mrdoc-icon-pro-2"></use></svg> <a href="/project/129/" >IMES FA 相关文档 </a> <i class="layui-icon layui-icon-star" style="cursor: pointer;" title="请登录后收藏"></i> <p> </p> </div> <!-- 文档搜索框 --> <form action="/project/129/" method="get" class="project-search-div" > <div id="doc-search-input"> <input type="text" name="kw" placeholder="在文集内搜索文档" value="" class="layui-input doc-search-input"> <button type="submit" style="position: absolute;top:15px;right: 20px;border: none;background-color: white;cursor:pointer"> <i class="layui-icon layui-icon-search"></i> </button> </div> </form> <!-- <hr> --> <!-- 遍历文集大纲 --> <!-- 如果文集的文档数量超过999,使用异步加载文集目录 --> <!-- 文档数量小于999,使用同步加载文集目录 --> <nav> <ul class=""> <!-- 一级目录 --> <li class="doctree-li"> <div class="doctree-item-wrapper"> <span class="doctree-item-name-wrapper"> <i class="layui-icon layui-icon-right switch-toc"></i>  <a href="/doc/13858/" class="doc-link" data-id="13858" title="MLB IMES"> MLB IMES </a> </span> </div> <div class="sub-items"><ul class="doctree-ul"> <!-- 一级目录 --> <li class="doctree-li"> <div class="doctree-item-wrapper"> <span class="doctree-item-name-wrapper"> <a href="/doc/13859/" class="doc-link" data-id="13859" title="LNB换型事件标准内容"> <i class="iconfont mrdoc-icon-wendang"></i>  LNB换型事件标准内容 </a> </span> </div> </li> <li class="doctree-li"> <div class="doctree-item-wrapper"> <span class="doctree-item-name-wrapper"> <a href="/doc/13870/" class="doc-link" data-id="13870" title="LNB配置标准值"> <i class="iconfont mrdoc-icon-wendang"></i>  LNB配置标准值 </a> </span> </div> </li> </ul></div> </li> </ul> </nav> <div class="bq"> <a href="javascript:void(0);" class="mrdoc-link">立臻IT知识库</a> </div> <!-- 右下角广告块 --> <!-- 广告代码开始 --> <!-- 广告代码结束 --> </div> </div> <!-- 左侧目录栏结束 --> <div id="doc-container-splitter"></div> <button class="doc-container-sidebar-toggle" onclick="toggleSidebar()"> <svg class="doc-container-toggle-icon" viewBox="0 0 24 24" width="24" height="24"> <path d="M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z"/> </svg> </button> <!-- 右侧文档栏 --> <div id="doc-container-body"> <!-- 文档导航 --> <div class="doc-header" role="navigation"> <a class="btn pull-left js-toolbar-action" aria-label="" href="javascript:void(0);" title="切换侧边栏"> <i class="layui-icon layui-icon-slider"></i> </a> <a class="btn pull-left font-small layui-hide-xs" href="javascript:void(0);" title="缩小字体"> <i class="iconfont mrdoc-icon-font-size">-</i> </a> <a class="btn pull-left font-large layui-hide-xs" href="javascript:void(0);" title="放大字体"> <i class="iconfont mrdoc-icon-font-size">+</i> </a> <a class="btn pull-left font-switch layui-hide-xs" href="javascript:void(0);" title="切换字体类型"> <i class="iconfont mrdoc-icon-font-type"></i> </a> <a class="btn pull-left theme-switch" href="javascript:void(0);" title="切换至夜间模式"> <i class="iconfont mrdoc-icon-night"></i> </a> <!-- 顶部工具栏 --> <a class="btn pull-right" aria-label="" href="/"> <i class="layui-icon layui-icon-home"></i> <span class="layui-hide-xs">首页</span> </a> </div> <!-- 文档主体 --> <div class="doc-body-content"> <div class="doc-body-content-div"> <!-- 文档内容 --> <div class="doc-content" id="doc-content"> <!-- 标题 --> <div class="doc-info"> <!-- 页面主体头信息 --> <h1>LNB换型事件标准内容</h1><hr> <!-- 广告代码开始 --> <!-- 广告代码结束 --> </div> <!-- 标题结束 --> <!-- 正文开始 --> <div class="markdown-body" id="content"> <textarea style="display: none;">``` <?xml version="1.0" encoding="UTF-8"?> <root> <Header> <SystemName>UpperSystem</SystemName> <SystemVersion>1.00</SystemVersion> <SessionId>6984</SessionId> <CommandName>CHANGE-REQUEST</CommandName> </Header> <CHANGE-REQUEST> <Index> <Element> <Date>2025/10/26,22:40:04</Date> <MCNo>8</MCNo> <Lane>1</Lane> <LotName>639-23039$AK0_T04A_2617</LotName> <Production>7264</Production> <PlannedProduction>0</PlannedProduction> <PassData>0</PassData> <DataCount>10</DataCount> <MountMode>1</MountMode> <LaneMode>1</LaneMode> </Element> </Index> </CHANGE-REQUEST> </root> ```</textarea> </div> <!-- 正文结束 --> <div class="markdown-body"> <!-- 文档附件 --> </div> <hr> </div> <!-- 分享栏 --> <div id="doc-content-bottom-toolbar" style="color: rgba(0,0,0,.65);padding-bottom: 10px;margin-top: 10px;"> <div class="layui-row" style="margin-bottom: 10px;padding-left: 20px;"> </div> <div class="layui-row layui-col-space20" style="padding-left: 20px;"> <span class="doc-bottom-icon"> <i class="layui-icon layui-icon-user"></i> 宋恒林(K17082150) </span> <span tooltip="更新于:2025年11月4日 11:50" class="doc-bottom-icon"> <i class="layui-icon layui-icon-log"></i> 2025年11月4日 11:50 </span> <button id="share" class="doc-bottom-btn" tooltip="转发本文档"> <i class="layui-icon layui-icon-share" ></i> 转发文档 </button> <span class="doc-bottom-icon"> <i class="layui-icon layui-icon-star" title="请登录后收藏"></i> 收藏文档 </span> </div> </div> <!-- 广告代码开始 --> <!-- 广告代码结束 --> <div class="layui-row page-flip" style="margin-top: 10px;padding:10px;display:flex;justify-content:space-around;"> <!-- <hr> --> <div> <a href="/doc/13858/" class="layui-btn layui-btn-primary layui-btn-sm layui-btn-radius"><i class="layui-icon layui-icon-prev "></i>上一篇</a> </div> <div> <a href="/doc/13870/" class="layui-btn layui-btn-primary layui-btn-sm layui-btn-radius">下一篇<i class="layui-icon layui-icon-next"></i></a> </div> </div> </div> <!-- 文档目录 --> <div id="toc-container" class='sidebar doc-toc-hide'></div> </div> </div> <!-- 右侧文档栏结束 --> </div> <!-- 右下角工具按钮 --> <div class="fixed-tool-bar"> <div class="toTop" ><i class="layui-icon layui-icon-up"></i></div> <a class="tocMenu" href="/feedback/?source=/doc/13859/" target="_blank" title="反馈问题"><i class="layui-icon layui-icon-help"></i></a> <!-- 修改文档 --> <!-- 目录 --> <div class="tocMenu" style="display: none;"><i class="iconfont mrdoc-icon-toc"></i></div> <!-- 分享按钮 --> </div> <!-- 转发选项卡模板 --> <div id="share_div" style="display: none;"> <div class="layui-tab layui-tab-brief" lay-filter="docDemoTabBrief"> <ul class="layui-tab-title"> <li class="layui-this">手机扫码</li> <li>复制链接</li> </ul> <div class="layui-tab-content" style="height: 100px;"> <div class="layui-tab-item layui-show" align='center'> <p style="font-weight: 700;margin-bottom: 10px;">手机扫一扫转发分享</p> <div id="url_qrcode"></div> </div> <div class="layui-tab-item mrdoc-margin-1" align='center'> <input type="text" id="copy_crt_url" name="current_url" class="layui-input" /><br> <button class="layui-btn layui-btn-xs" title="复制链接到粘贴板" style="background-color: #333;" id="copy_doc_url"">复制链接</button> </div> </div> </div> </div> <script src="/jsi18n/"></script> <script src="/static/jquery/3.5.0/jquery.min.js"></script> <script src="/static/PearAdminLayui/component/layui/layui.js?version=1.5.2"></script> <script src="/static/viewerjs/viewer.min.js?version=1.5.2"></script> <script src="/static/qrcodejs/qrcode.min.js?version=1.5.2"></script> <script src="/static/darkmode-js/darkmode-js.min.js?version=1.5.2"></script> <script src="/static/markjs/mark.min.js?version=1.5.2" charset="UTF-8"></script> <script> var layer = layui.layer; var laypage = layui.laypage; var dropdown = layui.dropdown; var element = layer.element; var pro_id = '129'; var csrf_token_str = 'FYiG9BvZxlszgMJHivQ94WymudTPAWw8wrFI75LcqJDTMGzZqTw1jexUzwRvAb0B'; var is_creater = false; var code_line_number = true; </script> <script src="/static/mrdoc/mrdoc-docs.js?version=1.5.2"></script> <script src="/static/iconFont/iconfont.js?version=1.5.2"></script> <script> var layer = layui.layer; var dropdown = layui.dropdown; var pro_id = '129'; var csrf_token_str = 'FYiG9BvZxlszgMJHivQ94WymudTPAWw8wrFI75LcqJDTMGzZqTw1jexUzwRvAb0B'; var doc_editor_mode; if(is_creater){ renderTocDropDown() } function renderTocDropDown(){ dropdown.render({ elem: '.doctree-item-btn', trigger:'hover', data: [ {title:'修改文档',id:'modify'}, {title:'新增文档',id:'add'}, {title:'复制链接',id:'copy'}, ], click:function(obj){ // console.log(obj) var elem = $(this.elem) // console.log(elem.data('id')) switch (obj.id) { case 'modify': window.location.href = `/modify_doc/${elem.data('id')}/`; break; case 'add': window.location.href = `/create_doc/?pid=${pro_id}&parent_id=${elem.data('id')}`; break; case 'copy': var baseURL = window.location.protocol + "//" + window.location.host copyToClipboard(`${baseURL}/doc/${elem.data('id')}/`) break; default: break; } } }); }; </script> <script src="/static/mr-marked/marked.min.js?version=1.5.2"></script> <!-- 文档评论相关js --> <!-- 动态添加广告代码 --> <div id="ad-1"> </div> <div id="ad-2"> </div> <div id="ad-3"> </div> <div id="ad-4"> </div> <script> $("#ad-1").appendTo($("#ad-code-1")); $("#ad-2").appendTo($("#ad-code-2")); $("#ad-3").appendTo($("#ad-code-3")); $("#ad-4").appendTo($("#ad-code-4")); </script> <!-- 广告代码结束 --> <!-- 统计代码开始 --> <!-- 统计代码结束 --> <!-- 解析渲染Markdown --> <script> var editor_mode = 1; var pro_id = 129; var doc_id = 13859; var is_auth = false; initDocRender(mode=editor_mode); // 图片放大显示 var img_options = { url: 'data-original', fullscreen:false,//全屏 rotatable:false,//旋转 scalable:false,//翻转 button:false,//关闭按钮 toolbar:false, title:false, }; var img_viewer = new Viewer(document.getElementById('content'), img_options); </script> <!-- 下载选项卡模板 --> <div id="download_div" style="display: none;"> <div class="layui-row" style="margin: 10px;"> <a class="layui-btn layui-btn-primary layui-btn-sm" download='LNB换型事件标准内容.md' href="/download_doc_md/13859/" target="_blank"> Markdown文件 </a> <button class="layui-btn layui-btn-primary layui-btn-sm" href="/download_doc_docx/13859/" id="download-doc-docx"> Word文件 </button> <button class="layui-btn layui-btn-primary layui-btn-sm" id="download-doc-pdf"> PDF文档 </button> <a href="?print=true" target="_blank" class="layui-btn layui-btn-primary layui-btn-sm" >PDF文档(打印)</a> </div> </div> <!-- 分享文档选项卡模板 --> <div id="share_doc_div" style="display: none;margin:10px;"> <div class="layui-tab-content"> <div class="layui-form layui-form-pane" lay-filter="show-share-form"> <div class="layui-form-item"> <label class="layui-form-label">分享</label> <div class="layui-input-block"> <input type="checkbox" name="switch" lay-skin="switch" lay-text="开启|关闭" lay-filter="share-switch" > </div> </div> <div class="layui-form" style="display: none;" id="share-link"> <div class="layui-form-item"> <label class="layui-form-label">链接</label> <div class="layui-input-block" id='copy_link'> <input type="text" name="share_link" class="layui-input" id="share_link" readonly> </div> </div> </div> <div class="layui-form-item" style="display:none;" id="share-type"> <label class="layui-form-label">类型</label> <div class="layui-input-block"> <input type="radio" name="share_type" value="0" title="公开" checked lay-filter="share_type"> <input type="radio" name="share_type" value="1" title="私密" lay-filter="share_type"> </div> </div> <div class="layui-form" style="display:none;" id="share_value_item"> <div class="layui-form-item"> <label class="layui-form-label">密码</label> <div class="layui-input-inline"> <input type="text" name="share_value" value='' disabled class="layui-input" id="share_doc_value"> </div> <div class="layui-form-mid layui-word-aux"> <button class="layui-btn layui-btn-xs layui-btn-primary" id="updateShareValue"><i class="layui-icon layui-icon-refresh"></i> 更新密码</button> </div> </div> </div> <div class="layui-form-item" style="display:none;" id="share-expire"> <label class="layui-form-label">有效期</label> <div class="layui-input-block"> <input type="radio" name="expire_type" value="-1" title="永久" checked lay-filter="expire_type"> <input type="radio" name="expire_type" value="3" title="3天" lay-filter="expire_type"> <input type="radio" name="expire_type" value="7" title="7天" lay-filter="expire_type"> <input type="radio" name="expire_type" value="15" title="15天" lay-filter="expire_type"> <input type="radio" name="expire_type" value="0" title="自定义" lay-filter="expire_type"> <div class="layui-input-inline" id="expire_date_item" style="display: none;"> <input type="text" class="layui-input" name="expire_date" id="expire_date" value="" autocomplete="off"> </div> </div> </div> </div> </div> </div> <script src="/static/toc/doctoc.js?version=1.5.2"></script> <script src="/static/clipboard/clipboard.min.js"></script> <script> var layer = layui.layer; var form = layui.form; var laydate = layui.laydate; var doc_editor_mode = '1'; // Ajax默认配置 $.ajaxSetup({ data: {csrfmiddlewaretoken: 'FYiG9BvZxlszgMJHivQ94WymudTPAWw8wrFI75LcqJDTMGzZqTw1jexUzwRvAb0B' }, headers: {"X-CSRFToken":'FYiG9BvZxlszgMJHivQ94WymudTPAWw8wrFI75LcqJDTMGzZqTw1jexUzwRvAb0B'}, }); // 非小屏默认展开文档目录 if(window.innerWidth > 1650){ $(".sidebar").toggleClass("doc-toc-hide"); } // 切换文档目录显示与否 $(".tocMenu").click(function() { // console.log("切换文档目录显示") $(".sidebar").toggleClass("doc-toc-hide"); }); //修改a标签链接新窗口打开 // $('#content').on('click','a',function(e){ // e.target.target = '_blank'; // }); // 显示文档下载弹出框 $("#download_doc").click(function(r){ var layer = layui.layer; layer.open({ type: 1, title: false, closeBtn: 0, area: ['350px','150px'], shadeClose: true, content: $('#download_div') }); }); // 生成随机分享码 function randomWord(randomFlag, min, max){ var str = "", range = min, arr = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']; // 随机产生 if(randomFlag){ range = Math.round(Math.random() * (max-min)) + min; } for(var i=0; i<range; i++){ pos = Math.round(Math.random() * (arr.length-1)); str += arr[pos]; } return str; }; // 更新文档分享状态 function updateDocShare(data){ $.ajax({ url:"/share_doc/", method:'post', data:data, success:function(r){ if(r.status){ layer.msg("设置成功",{offset: 't'}) // console.log(r.data) $("input[name=share_link]").val(document.location.protocol + '//' + document.location.host + '/share_doc/?token=' + r.data.doc) }else{ layer.msg("设置出错") } }, error:function(){ layer.msg("文档分享异常") } }) } // 分享文档 $("#shareDoc").click(function(){ layer.open({ type:1, title:'分享文档:LNB换型事件标准内容', content:$("#share_doc_div"), area:'450px', success : function(index, layero) { // 成功弹出后回调 form.render(); }, cannel: function(){ $("#share_doc_div").hide(); } }) }) var share_data = { 'id':'13859', } laydate.render({ elem: '#expire_date', mini:1, done: function(value, date, endDate){ // console.log(value); share_data['expire_date'] = value; updateDocShare(share_data); } }); // 复制分享URL及分享码 var copy_share_link = new ClipboardJS('#copy_link', { text: function() { let share_val = form.val("show-share-form"); if(share_val['share_type'] == 0){ return share_val['share_link'] }else{ let share_link = share_val['share_link'] + "&pwd=" + share_val['share_value'] return share_link } } }); copy_share_link.on('success', function(e) { layer.msg("复制成功!") }); //监听分享框分享类型的单选事件 form.on('radio(share_type)', function(data){ // console.log(data.value); //被点击的radio的value值 if(data.value == 0){ // 公开 $("#share_value_item").css("display","none"); share_data['share_type'] = 0; share_data['share_value'] = $("#share_doc_value").val(); updateDocShare(share_data); }else if(data.value == 1){ // 私密 $("#share_value_item").css("display","block"); // console.log("初始化密码") $("#share_doc_value").val(randomWord(false,4)) share_data['share_type'] = 1; share_data['share_value'] = $("#share_doc_value").val(); updateDocShare(share_data); } }); // 监听分享有效期的单选事件 form.on('radio(expire_type)', function(data){ // console.log(data.value); //被点击的radio的value值 share_data['expire_type'] = data.value; if(data.value == 0){ // 自定义日期 $("#expire_date_item").css("display","block"); layer.msg("请选择日期") share_data['expire_date'] = $("#expire_date").val(); // updateDocShare(share_data); }else{ $("#expire_date_item").css("display","none"); updateDocShare(share_data); } }); // 监听分享开关事件 form.on('switch(share-switch)', function(data){ console.log(data.elem.checked); //开关是否开启,true或者false if(data.elem.checked){ // 开启 // console.log("开启分享") $("#share-type").css('display',"block"); $("#share-expire").css('display',"block"); $("#share-link").css("display","block"); if($("input[name='share_type']:checked").val() == 1){ $("#share_value_item").css("display","block"); } // 开启 share_data['is_enable'] = true updateDocShare(share_data); }else{ // console.log("关闭分享") layer.msg("关闭分享",{offset: 't'}) $("#share-type").css('display',"none") $("#share-expire").css('display',"none") $("#share_value_item").css("display","none"); $("#share-link").css("display","none"); share_data['is_enable'] = false updateDocShare(share_data); } }); // 更新文档分享密码 $("#updateShareValue").click(function(){ $("#share_doc_value").val(randomWord(false,4)); share_data['share_type'] = 1; share_data['share_value'] = $("#share_doc_value").val(); updateDocShare(share_data); }); // 评论组件 </script> <!-- 调用浏览器打印功能 --> <!-- 文档PDF生成 --> <script src="/static/jspdf/jspdf.umd.min.js?version=1.5.2 charset="utf-8"></script> <script src="/static/html2canvas/html2canvas.min.js?version=1.5.2 charset="utf-8"></script> <script type="text/javascript"> // 文档生成PDF function doc2pdf() { //将整个页面转成canvas html2canvas(document.getElementById("doc-content"),{useCORS:true,logging:true}).then(canvas => { var contentWidth = canvas.width; var contentHeight = canvas.height; //一页pdf显示html页面生成的canvas高度; var pageHeight = contentWidth / 592.28 * 841.89; //未生成pdf的html页面高度 var leftHeight = contentHeight; //页面偏移 var position = 0; //a4纸的尺寸[595.28,841.89],html页面生成的canvas在pdf中图片的宽高 var imgWidth = 555.28; //左右边距20 var imgHeight = 555.28/contentWidth * contentHeight; //左右边距20 var pageData = canvas.toDataURL('image/jpeg', 1.0); var doc = new jspdf.jsPDF('', 'pt', 'a4'); //有两个高度需要区分,一个是html页面的实际高度,和生成pdf的页面高度(841.89) //当内容未超过pdf一页显示的范围,无需分页 if (leftHeight < pageHeight) { doc.addImage(pageData, 'JPEG', 20, 0, imgWidth, imgHeight ); //左右边距20 } else { while(leftHeight > 0) { doc.addImage(pageData, 'JPEG', 20, position, imgWidth, imgHeight) //左右边距20 leftHeight -= pageHeight; position -= 841.89; //避免添加空白页 if(leftHeight > 0) { doc.addPage(); } } }; doc.save('LNB换型事件标准内容.pdf'); }); }; $("#download-doc-pdf").click(function(){ layer.load("PDF生成中……") doc2pdf(); layer.closeAll(); $("#download_div").css("display","none"); }) </script> <script> $("#download-doc-docx").click(function(){ layer.load() $.ajax({ url:'/download_doc_docx/13859/', type:'post', success:function(r){ layer.closeAll() if(r.status){ var downloadLink = $('<a></a>') .attr('href', r.data) downloadLink[0].click(); downloadLink.remove(); }else{ layer.msg(r.data) } }, error:function(){ layer.closeAll() layer.msg("文档导出Docx文件请求异常") } }) }) </script> <script> // 解析文档片段 parseFragment(); </script> <!-- 在线表格文档根据窗口高度调整表格高度 --> <!-- 文集作者或文档作者的JavaScript相关函数 --> <script> // 文档顶部「新建」按钮的下拉菜单 dropdown.render({ elem: '#create-doc-btn', trigger: 'hover', data: [ { title: '文本文档', id: 'text' },{ title: '表格文档', id: 'table' },{ title: '超链接', id: 'link' },{ title:'OnlyOffice', id:'OnlyOffice', },{ title:'思维导图', id:'mindmap', } ], click: function(data, othis){ if(data.id == 'text'){ window.location.href = '/create_doc/?pid=' + pro_id }else if(data.id == 'table'){ window.location.href = '/create_doc/?pid=' + pro_id + '&eid=4' }else if(data.id == 'link'){ window.location.href = '/create_doc/?pid=' + pro_id + '&eid=5' }else if(data.id == 'OnlyOffice'){ window.location.href = '/onlyoffice/create?pid=' + pro_id }else if(data.id == 'mindmap'){ window.location.href = '/create_doc/?pid=' + pro_id + '&eid=9' } } }); // 侦听文集大纲滚动 // document.getElementById("doc-summary").addEventListener('scroll', function(){ // let t = $('.doc-summary').scrollTop(); // 目前监听的是整个body的滚动条距离 // let h = $('.doc-summary').height(); // 文集大纲的高度 // let a = document.getElementById("doc-search-input").offsetTop; // 搜索框至顶部的距离 // // console.log("滚动距离:",t,'div高度:',h,'顶部距离:',a) // if(t == 0){ // // console.log("在可视范围") // $('.project-search-div').removeClass('project-search-active-div') // }else{ // if (a >= t && a < (t + h)) { // // // console.log("在可视范围") // $('.project-search-div').removeClass('project-search-active-div') // } // else{ // // console.log("不在可视范围") // $('.project-search-div').addClass('project-search-active-div') // } // } // }); // 高亮搜索词 setTimeout(function(){ keyLight('doc-content',getQueryVariable("highlight")); scrollIntoKey('doc-content',getQueryVariable("highlight")); },500) document.addEventListener('mouseup', function() { var selection = window.getSelection().toString(); let { x , y } = getSelectionEndPosition(); // console.log(x,y) if (selection) { var range = window.getSelection().getRangeAt(0); var button = document.createElement('button'); button.id = "feedbackBtn"; button.textContent = '我要反馈'; var div = document.createElement('div'); div.appendChild(button); div.style.position = 'absolute'; button.classList.add("layui-btn","layui-btn-normal","layui-btn-xs","layui-btn-radius") div.style.top = y + window.pageYOffset + 'px'; div.style.left = x + window.pageXOffset + 'px'; // div.style.top = range.getBoundingClientRect().top + 30 + window.pageYOffset + 'px'; // div.style.left = range.getBoundingClientRect().right + window.pageXOffset + 'px'; document.body.appendChild(div); // range.commonAncestorContainer.parentNode.appendChild(div); document.addEventListener('mousedown', function(event) { if (event.target === button) { feedbackDialog({'url':document.location.href,'content':selection.toString()}); } else if (!div.contains(event.target)) { div.remove(); } }); } }); feedbackDialog = function(value){ // console.log(value['url'],value['content']) window.open("/feedback/?source="+value['url']+'&content='+value['content']) }; function getSelectionEndPosition() { let x, y; let selection = window.getSelection(); if (selection.rangeCount > 0) { let range = selection.getRangeAt(0); let startNode = range.startContainer; let startOffset = range.startOffset; let endNode = range.endContainer; let endOffset = range.endOffset; let tempRange = document.createRange(); tempRange.setStart(endNode, endOffset); tempRange.collapse(true); let clientRects = tempRange.getClientRects(); if (clientRects.length > 0) { let lastRect = clientRects[clientRects.length - 1]; x = lastRect.right; y = lastRect.bottom; } } return { x, y }; }; </script> <script> const docContainer = document.getElementById('doc-container'); const docSidebar = document.getElementById('doc-container-sidebar'); const docSplitter = document.getElementById('doc-container-splitter'); let isResizing = false; // 从 localStorage 获取上一次保存的宽度 const savedWidth = localStorage.getItem('sidebar-width'); if (savedWidth) { docContainer.style.setProperty('--sidebar-width', savedWidth); docSidebar.style.width = savedWidth; } docSplitter.addEventListener('mousedown', (e) => { isResizing = true; docSplitter.classList.add('active'); document.addEventListener('mousemove', handleMouseMove); document.addEventListener('mouseup', () => { isResizing = false; docSplitter.classList.remove('active'); document.removeEventListener('mousemove', handleMouseMove); }); }); function handleMouseMove(e) { if (isResizing) { const containerRect = docContainer.getBoundingClientRect(); const newSidebarWidth = e.clientX - containerRect.left; // 限制最大宽度 const maxWidth = 800; // 可以根据需要修改 if (newSidebarWidth <= maxWidth) { // 保存当前宽度到 localStorage localStorage.setItem('sidebar-width', `${newSidebarWidth}px`); docContainer.style.setProperty('--sidebar-width', `${newSidebarWidth}px`); docSidebar.style.width = `${newSidebarWidth}px`; } } } </script> <!-- 微信JS-SDK开始 --> <!-- 微信JS-SDK结束 --> </body> </html> 用Python代码将上面的html格式内容转成json格式
11-05
D:\environment\anaconda3\envs\oracle\python.exe E:\Project\AIProject_2025\Agent\workorderAgent\compare_document.py html_content--> <!-- 继承自模板:app_doc/docs_base.html --> <!DOCTYPE html> <html lang="zh-cn" style="font-size: 15px;"> <head> <meta charset="UTF-8"> <meta name=renderer content=webkit> <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1"> <meta http-equiv="Cache-Control" content="no-transform" /> <meta http-equiv="Cache-Control" content="no-siteapp" /> <meta http-equiv="Cache-Control" content="max-age=7200" /> <!-- <meta name="referrer" content="no-referrer"> --> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> <meta name="keywords" content="LNB换型事件标准内容,IMES FA 相关文档,技术,架构,流程,知识,规范,标准化"/> <meta name="description" content="``` <?xml version="1.0" encoding="UTF-8"?> <root> <Header> <SystemName>UpperSystem</SystemName" /> <!-- OGP分享协议开始 --> <meta property="og:type" content="website"> <meta property="og:title" content="LNB换型事件标准内容 - IMES FA 相关文档"> <meta property="og:description" content="``` <?xml version="1.0" encoding="UTF-8"?> <root> <Header> <SystemName>UpperSystem</SystemName"> <meta property="og:url" content="http://kk.luxsan-ict.com/doc/13859/"> <link rel="icon" href="/static/search/mrdoc_logo_300.png" sizes="192x192" /> <meta property="og:image" content="http://kk.luxsan-ict.com/static/search/mrdoc_logo_300.png"> <!-- OGP分享协议结束 --> <title>LNB换型事件标准内容 - IMES FA 相关文档 - 立臻IT知识库 </title> <link href="/static/PearAdminLayui/component/layui/css/layui.css?version=1.5.2" rel="stylesheet"> <link rel="stylesheet" href="/static/mr-marked/marked.css?version=1.5.2" /> <link href="/static/viewerjs/viewer.min.css?version=1.5.2" rel="stylesheet"> <link href="/static/mrdoc/mrdoc.css?version=1.5.2" rel="stylesheet"> <link href="/static/mrdoc/mrdoc-docs.css?version=1.5.2" rel="stylesheet"> <link href="/static/iconFont/iconfont.css?version=1.5.2" rel="stylesheet"> <style> .markdown-code .markdown-code-block pre,.vditor-reset > pre > code.hljs{ max-height: max-content!important; } code[class*=language-], pre[class*=language-]{ white-space: pre-wrap !important; } :not(pre)>code[class*=language-]{ white-space: inherit !important; } /* html{ filter: invert(1) hue-rotate(180deg); } */ </style> <!--[if lt IE 9]> <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script> <script src="https://oss.maxcdn.com/libs/respond.js/1.3.0/respond.min.js"></script> <![endif]--> </head> <body class="big-page"> <div id="doc-container"> <!-- 左侧目录栏 --> <div id="doc-container-sidebar" id="doc-summary"> <div> <!-- 左上角广告块 --> <!-- 广告代码开始 --> <!-- 广告代码结束 --> <!-- 文集名称 --> <div class="project-title"> <svg class="icon" aria-hidden="true"><use xlink:href="#mrdoc-icon-pro-2"></use></svg> <a href="/project/129/" >IMES FA 相关文档 </a> <i class="layui-icon layui-icon-star" style="cursor: pointer;" title="请登录后收藏"></i> <p> </p> </div> <!-- 文档搜索框 --> <form action="/project/129/" method="get" class="project-search-div" > <div id="doc-search-input"> <input type="text" name="kw" placeholder="在文集内搜索文档" value="" class="layui-input doc-search-input"> <button type="submit" style="position: absolute;top:15px;right: 20px;border: none;background-color: white;cursor:pointer"> <i class="layui-icon layui-icon-search"></i> </button> </div> </form> <!-- <hr> --> <!-- 遍历文集大纲 --> <!-- 如果文集的文档数量超过999,使用异步加载文集目录 --> <!-- 文档数量小于999,使用同步加载文集目录 --> <nav> <ul class=""> <!-- 一级目录 --> <li class="doctree-li"> <div class="doctree-item-wrapper"> <span class="doctree-item-name-wrapper"> <i class="layui-icon layui-icon-right switch-toc"></i>  <a href="/doc/13858/" class="doc-link" data-id="13858" title="MLB IMES"> MLB IMES </a> </span> </div> <div class="sub-items"><ul class="doctree-ul"> <!-- 一级目录 --> <li class="doctree-li"> <div class="doctree-item-wrapper"> <span class="doctree-item-name-wrapper"> <a href="/doc/13859/" class="doc-link" data-id="13859" title="LNB换型事件标准内容"> <i class="iconfont mrdoc-icon-wendang"></i>  LNB换型事件标准内容 </a> </span> </div> </li> <li class="doctree-li"> <div class="doctree-item-wrapper"> <span class="doctree-item-name-wrapper"> <a href="/doc/13870/" class="doc-link" data-id="13870" title="LNB配置标准值"> <i class="iconfont mrdoc-icon-wendang"></i>  LNB配置标准值 </a> </span> </div> </li> </ul></div> </li> </ul> </nav> <div class="bq"> <a href="javascript:void(0);" class="mrdoc-link">立臻IT知识库</a> </div> <!-- 右下角广告块 --> <!-- 广告代码开始 --> <!-- 广告代码结束 --> </div> </div> <!-- 左侧目录栏结束 --> <div id="doc-container-splitter"></div> <button class="doc-container-sidebar-toggle" onclick="toggleSidebar()"> <svg class="doc-container-toggle-icon" viewBox="0 0 24 24" width="24" height="24"> <path d="M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z"/> </svg> </button> <!-- 右侧文档栏 --> <div id="doc-container-body"> <!-- 文档导航 --> <div class="doc-header" role="navigation"> <a class="btn pull-left js-toolbar-action" aria-label="" href="javascript:void(0);" title="切换侧边栏"> <i class="layui-icon layui-icon-slider"></i> </a> <a class="btn pull-left font-small layui-hide-xs" href="javascript:void(0);" title="缩小字体"> <i class="iconfont mrdoc-icon-font-size">-</i> </a> <a class="btn pull-left font-large layui-hide-xs" href="javascript:void(0);" title="放大字体"> <i class="iconfont mrdoc-icon-font-size">+</i> </a> <a class="btn pull-left font-switch layui-hide-xs" href="javascript:void(0);" title="切换字体类型"> <i class="iconfont mrdoc-icon-font-type"></i> </a> <a class="btn pull-left theme-switch" href="javascript:void(0);" title="切换至夜间模式"> <i class="iconfont mrdoc-icon-night"></i> </a> <!-- 顶部工具栏 --> <a class="btn pull-right" aria-label="" href="/"> <i class="layui-icon layui-icon-home"></i> <span class="layui-hide-xs">首页</span> </a> </div> <!-- 文档主体 --> <div class="doc-body-content"> <div class="doc-body-content-div"> <!-- 文档内容 --> <div class="doc-content" id="doc-content"> <!-- 标题 --> <div class="doc-info"> <!-- 页面主体头信息 --> <h1>LNB换型事件标准内容</h1><hr> <!-- 广告代码开始 --> <!-- 广告代码结束 --> </div> <!-- 标题结束 --> <!-- 正文开始 --> <div class="markdown-body" id="content"> <textarea style="display: none;">``` <?xml version="1.0" encoding="UTF-8"?> <root> <Header> <SystemName>UpperSystem</SystemName> <SystemVersion>1.00</SystemVersion> <SessionId>6984</SessionId> <CommandName>CHANGE-REQUEST</CommandName> </Header> <CHANGE-REQUEST> <Index> <Element> <Date>2025/10/26,22:40:04</Date> <MCNo>8</MCNo> <Lane>1</Lane> <LotName>639-23039$AK0_T04A_2617</LotName> <Production>7264</Production> <PlannedProduction>0</PlannedProduction> <PassData>0</PassData> <DataCount>10</DataCount> <MountMode>1</MountMode> <LaneMode>1</LaneMode> </Element> </Index> </CHANGE-REQUEST> </root> ```</textarea> </div> <!-- 正文结束 --> <div class="markdown-body"> <!-- 文档附件 --> </div> <hr> </div> <!-- 分享栏 --> <div id="doc-content-bottom-toolbar" style="color: rgba(0,0,0,.65);padding-bottom: 10px;margin-top: 10px;"> <div class="layui-row" style="margin-bottom: 10px;padding-left: 20px;"> </div> <div class="layui-row layui-col-space20" style="padding-left: 20px;"> <span class="doc-bottom-icon"> <i class="layui-icon layui-icon-user"></i> 宋恒林(K17082150) </span> <span tooltip="更新于:2025年11月4日 11:50" class="doc-bottom-icon"> <i class="layui-icon layui-icon-log"></i> 2025年11月4日 11:50 </span> <button id="share" class="doc-bottom-btn" tooltip="转发本文档"> <i class="layui-icon layui-icon-share" ></i> 转发文档 </button> <span class="doc-bottom-icon"> <i class="layui-icon layui-icon-star" title="请登录后收藏"></i> 收藏文档 </span> </div> </div> <!-- 广告代码开始 --> <!-- 广告代码结束 --> <div class="layui-row page-flip" style="margin-top: 10px;padding:10px;display:flex;justify-content:space-around;"> <!-- <hr> --> <div> <a href="/doc/13858/" class="layui-btn layui-btn-primary layui-btn-sm layui-btn-radius"><i class="layui-icon layui-icon-prev "></i>上一篇</a> </div> <div> <a href="/doc/13870/" class="layui-btn layui-btn-primary layui-btn-sm layui-btn-radius">下一篇<i class="layui-icon layui-icon-next"></i></a> </div> </div> </div> <!-- 文档目录 --> <div id="toc-container" class='sidebar doc-toc-hide'></div> </div> </div> <!-- 右侧文档栏结束 --> </div> <!-- 右下角工具按钮 --> <div class="fixed-tool-bar"> <div class="toTop" ><i class="layui-icon layui-icon-up"></i></div> <a class="tocMenu" href="/feedback/?source=/doc/13859/" target="_blank" title="反馈问题"><i class="layui-icon layui-icon-help"></i></a> <!-- 修改文档 --> <!-- 目录 --> <div class="tocMenu" style="display: none;"><i class="iconfont mrdoc-icon-toc"></i></div> <!-- 分享按钮 --> </div> <!-- 转发选项卡模板 --> <div id="share_div" style="display: none;"> <div class="layui-tab layui-tab-brief" lay-filter="docDemoTabBrief"> <ul class="layui-tab-title"> <li class="layui-this">手机扫码</li> <li>复制链接</li> </ul> <div class="layui-tab-content" style="height: 100px;"> <div class="layui-tab-item layui-show" align='center'> <p style="font-weight: 700;margin-bottom: 10px;">手机扫一扫转发分享</p> <div id="url_qrcode"></div> </div> <div class="layui-tab-item mrdoc-margin-1" align='center'> <input type="text" id="copy_crt_url" name="current_url" class="layui-input" /><br> <button class="layui-btn layui-btn-xs" title="复制链接到粘贴板" style="background-color: #333;" id="copy_doc_url"">复制链接</button> </div> </div> </div> </div> <script src="/jsi18n/"></script> <script src="/static/jquery/3.5.0/jquery.min.js"></script> <script src="/static/PearAdminLayui/component/layui/layui.js?version=1.5.2"></script> <script src="/static/viewerjs/viewer.min.js?version=1.5.2"></script> <script src="/static/qrcodejs/qrcode.min.js?version=1.5.2"></script> <script src="/static/darkmode-js/darkmode-js.min.js?version=1.5.2"></script> <script src="/static/markjs/mark.min.js?version=1.5.2" charset="UTF-8"></script> <script> var layer = layui.layer; var laypage = layui.laypage; var dropdown = layui.dropdown; var element = layer.element; var pro_id = '129'; var csrf_token_str = '9hHLbYlxdkYf55nfUhSKj3dAUzQCuVI1VzCbKwPfwCiTOcYqXo4NiKkf4UQfuYMw'; var is_creater = false; var code_line_number = true; </script> <script src="/static/mrdoc/mrdoc-docs.js?version=1.5.2"></script> <script src="/static/iconFont/iconfont.js?version=1.5.2"></script> <script> var layer = layui.layer; var dropdown = layui.dropdown; var pro_id = '129'; var csrf_token_str = '9hHLbYlxdkYf55nfUhSKj3dAUzQCuVI1VzCbKwPfwCiTOcYqXo4NiKkf4UQfuYMw'; var doc_editor_mode; if(is_creater){ renderTocDropDown() } function renderTocDropDown(){ dropdown.render({ elem: '.doctree-item-btn', trigger:'hover', data: [ {title:'修改文档',id:'modify'}, {title:'新增文档',id:'add'}, {title:'复制链接',id:'copy'}, ], click:function(obj){ // console.log(obj) var elem = $(this.elem) // console.log(elem.data('id')) switch (obj.id) { case 'modify': window.location.href = `/modify_doc/${elem.data('id')}/`; break; case 'add': window.location.href = `/create_doc/?pid=${pro_id}&parent_id=${elem.data('id')}`; break; case 'copy': var baseURL = window.location.protocol + "//" + window.location.host copyToClipboard(`${baseURL}/doc/${elem.data('id')}/`) break; default: break; } } }); }; </script> <script src="/static/mr-marked/marked.min.js?version=1.5.2"></script> <!-- 文档评论相关js --> <!-- 动态添加广告代码 --> <div id="ad-1"> </div> <div id="ad-2"> </div> <div id="ad-3"> </div> <div id="ad-4"> </div> <script> $("#ad-1").appendTo($("#ad-code-1")); $("#ad-2").appendTo($("#ad-code-2")); $("#ad-3").appendTo($("#ad-code-3")); $("#ad-4").appendTo($("#ad-code-4")); </script> <!-- 广告代码结束 --> <!-- 统计代码开始 --> <!-- 统计代码结束 --> <!-- 解析渲染Markdown --> <script> var editor_mode = 1; var pro_id = 129; var doc_id = 13859; var is_auth = false; initDocRender(mode=editor_mode); // 图片放大显示 var img_options = { url: 'data-original', fullscreen:false,//全屏 rotatable:false,//旋转 scalable:false,//翻转 button:false,//关闭按钮 toolbar:false, title:false, }; var img_viewer = new Viewer(document.getElementById('content'), img_options); </script> <!-- 下载选项卡模板 --> <div id="download_div" style="display: none;"> <div class="layui-row" style="margin: 10px;"> <a class="layui-btn layui-btn-primary layui-btn-sm" download='LNB换型事件标准内容.md' href="/download_doc_md/13859/" target="_blank"> Markdown文件 </a> <button class="layui-btn layui-btn-primary layui-btn-sm" href="/download_doc_docx/13859/" id="download-doc-docx"> Word文件 </button> <button class="layui-btn layui-btn-primary layui-btn-sm" id="download-doc-pdf"> PDF文档 </button> <a href="?print=true" target="_blank" class="layui-btn layui-btn-primary layui-btn-sm" >PDF文档(打印)</a> </div> </div> <!-- 分享文档选项卡模板 --> <div id="share_doc_div" style="display: none;margin:10px;"> <div class="layui-tab-content"> <div class="layui-form layui-form-pane" lay-filter="show-share-form"> <div class="layui-form-item"> <label class="layui-form-label">分享</label> <div class="layui-input-block"> <input type="checkbox" name="switch" lay-skin="switch" lay-text="开启|关闭" lay-filter="share-switch" > </div> </div> <div class="layui-form" style="display: none;" id="share-link"> <div class="layui-form-item"> <label class="layui-form-label">链接</label> <div class="layui-input-block" id='copy_link'> <input type="text" name="share_link" class="layui-input" id="share_link" readonly> </div> </div> </div> <div class="layui-form-item" style="display:none;" id="share-type"> <label class="layui-form-label">类型</label> <div class="layui-input-block"> <input type="radio" name="share_type" value="0" title="公开" checked lay-filter="share_type"> <input type="radio" name="share_type" value="1" title="私密" lay-filter="share_type"> </div> </div> <div class="layui-form" style="display:none;" id="share_value_item"> <div class="layui-form-item"> <label class="layui-form-label">密码</label> <div class="layui-input-inline"> <input type="text" name="share_value" value='' disabled class="layui-input" id="share_doc_value"> </div> <div class="layui-form-mid layui-word-aux"> <button class="layui-btn layui-btn-xs layui-btn-primary" id="updateShareValue"><i class="layui-icon layui-icon-refresh"></i> 更新密码</button> </div> </div> </div> <div class="layui-form-item" style="display:none;" id="share-expire"> <label class="layui-form-label">有效期</label> <div class="layui-input-block"> <input type="radio" name="expire_type" value="-1" title="永久" checked lay-filter="expire_type"> <input type="radio" name="expire_type" value="3" title="3天" lay-filter="expire_type"> <input type="radio" name="expire_type" value="7" title="7天" lay-filter="expire_type"> <input type="radio" name="expire_type" value="15" title="15天" lay-filter="expire_type"> <input type="radio" name="expire_type" value="0" title="自定义" lay-filter="expire_type"> <div class="layui-input-inline" id="expire_date_item" style="display: none;"> <input type="text" class="layui-input" name="expire_date" id="expire_date" value="" autocomplete="off"> </div> </div> </div> </div> </div> </div> <script src="/static/toc/doctoc.js?version=1.5.2"></script> <script src="/static/clipboard/clipboard.min.js"></script> <script> var layer = layui.layer; var form = layui.form; var laydate = layui.laydate; var doc_editor_mode = '1'; // Ajax默认配置 $.ajaxSetup({ data: {csrfmiddlewaretoken: '9hHLbYlxdkYf55nfUhSKj3dAUzQCuVI1VzCbKwPfwCiTOcYqXo4NiKkf4UQfuYMw' }, headers: {"X-CSRFToken":'9hHLbYlxdkYf55nfUhSKj3dAUzQCuVI1VzCbKwPfwCiTOcYqXo4NiKkf4UQfuYMw'}, }); // 非小屏默认展开文档目录 if(window.innerWidth > 1650){ $(".sidebar").toggleClass("doc-toc-hide"); } // 切换文档目录显示与否 $(".tocMenu").click(function() { // console.log("切换文档目录显示") $(".sidebar").toggleClass("doc-toc-hide"); }); //修改a标签链接新窗口打开 // $('#content').on('click','a',function(e){ // e.target.target = '_blank'; // }); // 显示文档下载弹出框 $("#download_doc").click(function(r){ var layer = layui.layer; layer.open({ type: 1, title: false, closeBtn: 0, area: ['350px','150px'], shadeClose: true, content: $('#download_div') }); }); // 生成随机分享码 function randomWord(randomFlag, min, max){ var str = "", range = min, arr = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']; // 随机产生 if(randomFlag){ range = Math.round(Math.random() * (max-min)) + min; } for(var i=0; i<range; i++){ pos = Math.round(Math.random() * (arr.length-1)); str += arr[pos]; } return str; }; // 更新文档分享状态 function updateDocShare(data){ $.ajax({ url:"/share_doc/", method:'post', data:data, success:function(r){ if(r.status){ layer.msg("设置成功",{offset: 't'}) // console.log(r.data) $("input[name=share_link]").val(document.location.protocol + '//' + document.location.host + '/share_doc/?token=' + r.data.doc) }else{ layer.msg("设置出错") } }, error:function(){ layer.msg("文档分享异常") } }) } // 分享文档 $("#shareDoc").click(function(){ layer.open({ type:1, title:'分享文档:LNB换型事件标准内容', content:$("#share_doc_div"), area:'450px', success : function(index, layero) { // 成功弹出后回调 form.render(); }, cannel: function(){ $("#share_doc_div").hide(); } }) }) var share_data = { 'id':'13859', } laydate.render({ elem: '#expire_date', mini:1, done: function(value, date, endDate){ // console.log(value); share_data['expire_date'] = value; updateDocShare(share_data); } }); // 复制分享URL及分享码 var copy_share_link = new ClipboardJS('#copy_link', { text: function() { let share_val = form.val("show-share-form"); if(share_val['share_type'] == 0){ return share_val['share_link'] }else{ let share_link = share_val['share_link'] + "&pwd=" + share_val['share_value'] return share_link } } }); copy_share_link.on('success', function(e) { layer.msg("复制成功!") }); //监听分享框分享类型的单选事件 form.on('radio(share_type)', function(data){ // console.log(data.value); //被点击的radio的value值 if(data.value == 0){ // 公开 $("#share_value_item").css("display","none"); share_data['share_type'] = 0; share_data['share_value'] = $("#share_doc_value").val(); updateDocShare(share_data); }else if(data.value == 1){ // 私密 $("#share_value_item").css("display","block"); // console.log("初始化密码") $("#share_doc_value").val(randomWord(false,4)) share_data['share_type'] = 1; share_data['share_value'] = $("#share_doc_value").val(); updateDocShare(share_data); } }); // 监听分享有效期的单选事件 form.on('radio(expire_type)', function(data){ // console.log(data.value); //被点击的radio的value值 share_data['expire_type'] = data.value; if(data.value == 0){ // 自定义日期 $("#expire_date_item").css("display","block"); layer.msg("请选择日期") share_data['expire_date'] = $("#expire_date").val(); // updateDocShare(share_data); }else{ $("#expire_date_item").css("display","none"); updateDocShare(share_data); } }); // 监听分享开关事件 form.on('switch(share-switch)', function(data){ console.log(data.elem.checked); //开关是否开启,true或者false if(data.elem.checked){ // 开启 // console.log("开启分享") $("#share-type").css('display',"block"); $("#share-expire").css('display',"block"); $("#share-link").css("display","block"); if($("input[name='share_type']:checked").val() == 1){ $("#share_value_item").css("display","block"); } // 开启 share_data['is_enable'] = true updateDocShare(share_data); }else{ // console.log("关闭分享") layer.msg("关闭分享",{offset: 't'}) $("#share-type").css('display',"none") $("#share-expire").css('display',"none") $("#share_value_item").css("display","none"); $("#share-link").css("display","none"); share_data['is_enable'] = false updateDocShare(share_data); } }); // 更新文档分享密码 $("#updateShareValue").click(function(){ $("#share_doc_value").val(randomWord(false,4)); share_data['share_type'] = 1; share_data['share_value'] = $("#share_doc_value").val(); updateDocShare(share_data); }); // 评论组件 </script> <!-- 调用浏览器打印功能 --> <!-- 文档PDF生成 --> <script src="/static/jspdf/jspdf.umd.min.js?version=1.5.2 charset="utf-8"></script> <script src="/static/html2canvas/html2canvas.min.js?version=1.5.2 charset="utf-8"></script> <script type="text/javascript"> // 文档生成PDF function doc2pdf() { //将整个页面转成canvas html2canvas(document.getElementById("doc-content"),{useCORS:true,logging:true}).then(canvas => { var contentWidth = canvas.width; var contentHeight = canvas.height; //一页pdf显示html页面生成的canvas高度; var pageHeight = contentWidth / 592.28 * 841.89; //未生成pdf的html页面高度 var leftHeight = contentHeight; //页面偏移 var position = 0; //a4纸的尺寸[595.28,841.89],html页面生成的canvas在pdf中图片的宽高 var imgWidth = 555.28; //左右边距20 var imgHeight = 555.28/contentWidth * contentHeight; //左右边距20 var pageData = canvas.toDataURL('image/jpeg', 1.0); var doc = new jspdf.jsPDF('', 'pt', 'a4'); //有两个高度需要区分,一个是html页面的实际高度,和生成pdf的页面高度(841.89) //当内容未超过pdf一页显示的范围,无需分页 if (leftHeight < pageHeight) { doc.addImage(pageData, 'JPEG', 20, 0, imgWidth, imgHeight ); //左右边距20 } else { while(leftHeight > 0) { doc.addImage(pageData, 'JPEG', 20, position, imgWidth, imgHeight) //左右边距20 leftHeight -= pageHeight; position -= 841.89; //避免添加空白页 if(leftHeight > 0) { doc.addPage(); } } }; doc.save('LNB换型事件标准内容.pdf'); }); }; $("#download-doc-pdf").click(function(){ layer.load("PDF生成中……") doc2pdf(); layer.closeAll(); $("#download_div").css("display","none"); }) </script> <script> $("#download-doc-docx").click(function(){ layer.load() $.ajax({ url:'/download_doc_docx/13859/', type:'post', success:function(r){ layer.closeAll() if(r.status){ var downloadLink = $('<a></a>') .attr('href', r.data) downloadLink[0].click(); downloadLink.remove(); }else{ layer.msg(r.data) } }, error:function(){ layer.closeAll() layer.msg("文档导出Docx文件请求异常") } }) }) </script> <script> // 解析文档片段 parseFragment(); </script> <!-- 在线表格文档根据窗口高度调整表格高度 --> <!-- 文集作者或文档作者的JavaScript相关函数 --> <script> // 文档顶部「新建」按钮的下拉菜单 dropdown.render({ elem: '#create-doc-btn', trigger: 'hover', data: [ { title: '文本文档', id: 'text' },{ title: '表格文档', id: 'table' },{ title: '超链接', id: 'link' },{ title:'OnlyOffice', id:'OnlyOffice', },{ title:'思维导图', id:'mindmap', } ], click: function(data, othis){ if(data.id == 'text'){ window.location.href = '/create_doc/?pid=' + pro_id }else if(data.id == 'table'){ window.location.href = '/create_doc/?pid=' + pro_id + '&eid=4' }else if(data.id == 'link'){ window.location.href = '/create_doc/?pid=' + pro_id + '&eid=5' }else if(data.id == 'OnlyOffice'){ window.location.href = '/onlyoffice/create?pid=' + pro_id }else if(data.id == 'mindmap'){ window.location.href = '/create_doc/?pid=' + pro_id + '&eid=9' } } }); // 侦听文集大纲滚动 // document.getElementById("doc-summary").addEventListener('scroll', function(){ // let t = $('.doc-summary').scrollTop(); // 目前监听的是整个body的滚动条距离 // let h = $('.doc-summary').height(); // 文集大纲的高度 // let a = document.getElementById("doc-search-input").offsetTop; // 搜索框至顶部的距离 // // console.log("滚动距离:",t,'div高度:',h,'顶部距离:',a) // if(t == 0){ // // console.log("在可视范围") // $('.project-search-div').removeClass('project-search-active-div') // }else{ // if (a >= t && a < (t + h)) { // // // console.log("在可视范围") // $('.project-search-div').removeClass('project-search-active-div') // } // else{ // // console.log("不在可视范围") // $('.project-search-div').addClass('project-search-active-div') // } // } // }); // 高亮搜索词 setTimeout(function(){ keyLight('doc-content',getQueryVariable("highlight")); scrollIntoKey('doc-content',getQueryVariable("highlight")); },500) document.addEventListener('mouseup', function() { var selection = window.getSelection().toString(); let { x , y } = getSelectionEndPosition(); // console.log(x,y) if (selection) { var range = window.getSelection().getRangeAt(0); var button = document.createElement('button'); button.id = "feedbackBtn"; button.textContent = '我要反馈'; var div = document.createElement('div'); div.appendChild(button); div.style.position = 'absolute'; button.classList.add("layui-btn","layui-btn-normal","layui-btn-xs","layui-btn-radius") div.style.top = y + window.pageYOffset + 'px'; div.style.left = x + window.pageXOffset + 'px'; // div.style.top = range.getBoundingClientRect().top + 30 + window.pageYOffset + 'px'; // div.style.left = range.getBoundingClientRect().right + window.pageXOffset + 'px'; document.body.appendChild(div); // range.commonAncestorContainer.parentNode.appendChild(div); document.addEventListener('mousedown', function(event) { if (event.target === button) { feedbackDialog({'url':document.location.href,'content':selection.toString()}); } else if (!div.contains(event.target)) { div.remove(); } }); } }); feedbackDialog = function(value){ // console.log(value['url'],value['content']) window.open("/feedback/?source="+value['url']+'&content='+value['content']) }; function getSelectionEndPosition() { let x, y; let selection = window.getSelection(); if (selection.rangeCount > 0) { let range = selection.getRangeAt(0); let startNode = range.startContainer; let startOffset = range.startOffset; let endNode = range.endContainer; let endOffset = range.endOffset; let tempRange = document.createRange(); tempRange.setStart(endNode, endOffset); tempRange.collapse(true); let clientRects = tempRange.getClientRects(); if (clientRects.length > 0) { let lastRect = clientRects[clientRects.length - 1]; x = lastRect.right; y = lastRect.bottom; } } return { x, y }; }; </script> <script> const docContainer = document.getElementById('doc-container'); const docSidebar = document.getElementById('doc-container-sidebar'); const docSplitter = document.getElementById('doc-container-splitter'); let isResizing = false; // 从 localStorage 获取上一次保存的宽度 const savedWidth = localStorage.getItem('sidebar-width'); if (savedWidth) { docContainer.style.setProperty('--sidebar-width', savedWidth); docSidebar.style.width = savedWidth; } docSplitter.addEventListener('mousedown', (e) => { isResizing = true; docSplitter.classList.add('active'); document.addEventListener('mousemove', handleMouseMove); document.addEventListener('mouseup', () => { isResizing = false; docSplitter.classList.remove('active'); document.removeEventListener('mousemove', handleMouseMove); }); }); function handleMouseMove(e) { if (isResizing) { const containerRect = docContainer.getBoundingClientRect(); const newSidebarWidth = e.clientX - containerRect.left; // 限制最大宽度 const maxWidth = 800; // 可以根据需要修改 if (newSidebarWidth <= maxWidth) { // 保存当前宽度到 localStorage localStorage.setItem('sidebar-width', `${newSidebarWidth}px`); docContainer.style.setProperty('--sidebar-width', `${newSidebarWidth}px`); docSidebar.style.width = `${newSidebarWidth}px`; } } } </script> <!-- 微信JS-SDK开始 --> <!-- 微信JS-SDK结束 --> </body> </html> Process finished with exit code 0 将上面的html格式转成json格式,写Python代码获取
11-05
<?php date_default_timezone_set('Asia/Shanghai'); // 强制使用北京时间 require_once './include/conn.php'; // 获取当前用户历史消息并按时间排序 $h_user = getUserIP(); $rs = $db->get_one("select count(*) as tj from `h_kefu` where h_user = '{$h_user}' and h_who = 2 and h_isread = 0"); if($rs['tj'] > 0){ $query = "select * from `h_kefu` where h_user = '{$h_user}' and h_isread = 1 order by h_addTime asc,id asc"; }else{ $query = "select * from `h_kefu` where h_user = '{$h_user}' order by h_addTime asc,id asc"; } $result = $db->query($query); $messages = []; while($rs_list = $db->fetch_array($result)){ $messages[] = $rs_list; } ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0,maximum-scale=1.0,user-scalable=no"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>安全访问</title> <link rel="stylesheet" href="/css/style7881.css"> <link rel="stylesheet" href="/iconfont/iconfont.css"> <link rel="stylesheet" href="/css/78812.6.0.css"> <link rel="stylesheet" href="https://res.qiyukf.net/sdk/tr/t_trade_mobile_m0_6dd2352f062861470694467bda09b417.css"> <link rel="icon" href="" type="image/x-icon"> <style> /* 原有主题样式保持不变 */ /** * =========================== * Visitor-end - Skin variable theme color - Common layout * =========================== */ /* trade */ .g-mask{background-color: #337eff;} .g-slide .slide_hd{background-color: #337eff;} .body_hd{background-color: #337eff;} .head-minsize{background-color: #337eff;} .m-msglist .msg_right .bot .text+.arrow:before{border-left-color:#337eff;} /* trade end */ .g-hd{background-color: #337eff;} .g-td.now_robot .u-btn, .g-td.now_robot .u-btn:link, .g-td.now_robot .u-btn:hover, .g-td.now_robot .u-btn:active{background-color: #337eff; -moz-opacity:0.6;-khtml-opacity: 0.6;opacity: 0.6;} .g-td.now_robot .form_cnt_send .u-btn{background-color: #337eff;} .g-td.now_robot .form_cnt_send .u-btn:link{background-color:#337eff; -moz-opacity:0.6;-khtml-opacity: 0.6;opacity: 0.6;} .g-td.now_robot .form_cnt_send .u-btn:hover{background-color:#337eff; -moz-opacity:0.8;-khtml-opacity: 0.8;opacity: 0.8;} .g-td.now_robot .form_cnt_send .u-btn:active{background-color:#337eff; -moz-opacity:0.6;-khtml-opacity: 0.6;opacity: 0.6;} /** * ================== * module * ================== */ .m-msglist .msg_bubble .textcolor {color: #337eff !important} .m-msglist .msg .bordercolor{border: 1px solid #337eff} .m-msglist .msg_right .text, .m-msglist .msg_right .qa, .m-msglist .msg_right .qa-list, .m-msglist .msg_right .action, .m-msglist .msg_right .rich, .m-msglist .msg_right .mobile-file, .m-msglist .msg_right .question{background-color: #337eff;border-color: #337eff;} .m-msglist .msg_right .un-read{color: #337eff} .m-msglist .msg_right .text .arrow, .m-msglist .msg_right .text .arrow:before, .m-msglist .msg_right .image .arrow, .m-msglist .msg_right .image .arrow:before, .m-msglist .msg_right .qa .arrow, .m-msglist .msg_right .qa .arrow:before, .m-msglist .msg_right .qa-list .arrow, .m-msglist .msg_right .qa-list .arrow:before, .m-msglist .msg_right .action .arrow, .m-msglist .msg_right .action .arrow:before, .m-msglist .msg_right .rich .arrow, .m-msglist .msg_right .rich .arrow:before, .m-msglist .msg_right .question .arrow, .m-msglist .msg_right .question .arrow:before, .m-msglist .msg_right .audio .audio-wrap .arrow, .m-msglist .msg_right .audio .audio-wrap .arrow:before, .m-msglist .msg_right .mobile-file .arrow:before, .m-msglist .msg_right .mobile-file .arrow, .m-msglist .msg_right .crm-thirdorder .arrow{border-left-color:#337eff;} .m-msglist .msg_right .crm-thirdorder .text+.arrow:before{border-left-color:#337eff;} .m-msglist .msg_right .crm-thirdorder-bd{ border-color: #337eff;} .m-msglist .msg_left .u-icon-avater{background-color: #fff;} .m-msglist .msg_right .u-icon-avater{background-color: #337eff;} .m-msglist .msg_right .audio .audio-wrap, /* Bot/FAQ fusion template - Message - Web version */ .m-msglist .msg_right .crm-thirdorder .qiyu_template_mixReply .crm-thirdorder-bd{ border-color: #337eff; background-color: #337eff; color:#fff; } .m-msglist .msg_right .qiyu_template_mixReply+.arrow{ border-left-color: transparent; } .m-msglist .msg_right .qiyu_template_mixReply+.arrow:before{ border-left-color: #337eff; } /* Bot/FAQ fusion template - Message - Web version - Trade adaptation */ .m-msglist .msg_right .qiyu_template_mixReply .bot-bd{ border-color: #337eff; background-color: #337eff; color:#fff; } /* Bot/FAQ fusion template - Message - Mobile version */ .m-msglist .msg_right .crm-thirdorder .qiyu_template_mixReply .crm-thirdorder-bd+.arrow{ border-left-color: transparent; } .m-msglist .msg_right .crm-thirdorder .qiyu_template_mixReply .crm-thirdorder-bd+.arrow:before{ border-left-color: #337eff; } .m-modal-confirmphoto .ok{background-color: #337eff;} .m-modal-confirmphoto .ok:hover{background-color:#337eff; -moz-opacity:0.8;-khtml-opacity: 0.8;opacity: 0.8;} .m-modal-confirmphoto .ok:active{background-color:#337eff; -moz-opacity:0.6;-khtml-opacity: 0.6;opacity: 0.6;} .m-form-evaluate .form_item.itm-tag-list .tag-item.active{color: #337eff; border-color: #337eff} .m-form-evaluate .m-solve .z-sel{color: #337eff; border-color: #337eff} .m-modal-filetrans .ok{background-color: #337eff;} .m-modal-filetrans .ok:hover{background-color:#337eff; -moz-opacity:0.8;-khtml-opacity: 0.8;opacity: 0.8;} .m-modal-filetrans .ok:active{background-color:#337eff; -moz-opacity:0.6;-khtml-opacity: 0.6;opacity: 0.6;} .m-comment .comment_btn{background-color: #337eff;} .m-comment .comment_btn:hover{background-color:#337eff; -moz-opacity:0.8;-khtml-opacity: 0.8;opacity: 0.8;} .m-comment .comment_btn:active{background-color:#337eff; -moz-opacity:0.6;-khtml-opacity: 0.6;opacity: 0.6;} .m-botentry li {border-color : #337eff} .m-botentry li.highLight:after {background-color : #337eff} .radio_button .button-multiple .enter-content-item .reply-button-li.highlight{color:#337eff;border-color:#337eff} .radio_button .button-multiple-enter.highlight{background:#337eff} .bot .date-picker {background-color : #337eff} .rmc-picker-popup-header .rmc-picker-popup-item { color: #337eff} /* Theme color of pagination button */ .g-chat-body .chat_show_bot .icon-triangle-left, .g-chat-body .chat_show_bot .icon-triangle-right, .radio_button .icon-triangle-left, .radio_button .icon-triangle-right { background-color:#337eff; } /* Theme color of title of robot's frequently asked question card style */ .m-msglist .msg .qa-list >.p.p_card >.qa_label {color: #337eff} .m-msglist .msg .qa-list >.p.p_card >.qa_label-contain >.qa_label {color: #337eff} .m-msglist .msg .qa-list >.p.p_card >.qa_label-contain >.qa_select > .tabs > .z-current {color: #337eff} /* Theme color of robot's frequently used shortcut entry */ .m-msglist .msg .quick-entry-icon {color: #337eff} /* Theme color of robot's evaluation */ .m-msglist .msg_bubble .eval-robot-answer.z-sel {color: #337eff} .m-msglist .msg .qa .qa_eval_tag.sel {color: #337eff; border: 1px solid #337eff} .m-msglist .msg .qa-list .qa_eval_tag.sel {color: #337eff; border: 1px solid #337eff} .z-disabled button, .z-disabled button:link, .z-disabled button:hover, .z-disabled button:active{background-color: #337eff; -moz-opacity:0.6;-khtml-opacity: 0.6;opacity: 0.6;} .u-btn, .u-btn-loadding, .u-btn:link, .u-btn:hover{background-color:#337eff;} .u-btn:active, .u-btn.z-disabled, .u-btn.z-disabled:hover, .u-btn.z-disabled:active, .u-btn.z-disabled:link{background-color: #337eff; -moz-opacity:0.6;-khtml-opacity: 0.6;opacity: 0.6;} .u-btn-disabled, .u-btn-disabled:link, .u-btn-disabled:hover, .u-btn-disabled:active{background-color: #337eff;-moz-opacity:0.6;-khtml-opacity: 0.6;opacity: 0.6;} .u-border-btn, .u-border-btn:hover{background-color: #fff;border: 1px solid #337eff; color: #337eff !important} .service-action, .service-action:link, .service-action:hover{background-color:#337eff !important; color: #fff !important; border: 0 !important} .m-pre-evaluation .pre-evaluation-box .evaluation{background-color: #337eff}, </style> <style type="text/css"> ::-webkit-scrollbar { width: 4px; height: 4px; } ::-webkit-scrollbar-button { display: none; } ::-webkit-scrollbar-thumb { border-radius: 3px; background: #dddfe0; } ::-webkit-scrollbar-track { width: 7px; height: 7px; } ::-webkit-scrollbar-track-piece { background: transparent; } .vc-switch { bottom: 170px !important; } </style> <style>.rmc-picker, .rmc-multi-picker { height: 238px; /*34*7*/ } .rmc-multi-picker { display: -webkit-box; display: -ms-flexbox; display: flex; -webkit-box-align: center; -ms-flex-align: center; align-items: center; } .rmc-picker-item { font-size: 16px; height: 34px; line-height: 34px; padding: 0 10px; white-space: nowrap; position: relative; overflow: hidden; text-overflow: ellipsis; color: #9b9b9b; width: 100%; -webkit-box-sizing: border-box; box-sizing: border-box; } .rmc-picker { display: block; position: relative; overflow: hidden; width: 100%; -webkit-box-flex: 1; -ms-flex: 1; flex: 1; text-align: center; } .rmc-picker-mask { position: absolute; left: 0; top: 0; height: 100%; margin: 0 auto; width: 100%; z-index: 3; background-image: -webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.95)), to(rgba(255, 255, 255, 0.6))), -webkit-gradient(linear, left bottom, left top, from(rgba(255, 255, 255, 0.95)), to(rgba(255, 255, 255, 0.6))); background-image: linear-gradient(to bottom, rgba(255, 255, 255, 0.95), rgba(255, 255, 255, 0.6)), linear-gradient(to top, rgba(255, 255, 255, 0.95), rgba(255, 255, 255, 0.6)); background-position: top, bottom; background-size: 100% 204px; background-repeat: no-repeat; } .rmc-picker-content { position: absolute; left: 0; top: 0; width: 100%; z-index: 1; } .rmc-picker-indicator { -webkit-box-sizing: border-box; box-sizing: border-box; width: 100%; height: 34px; position: absolute; left: 0; top: 102px; z-index: 3; border-top: 1PX solid #ddd; border-bottom: 1PX solid #ddd; } </style> <style>.rmc-date-picker { display: -ms-flexbox; display: -webkit-box; display: flex; -ms-flex-align: center; -webkit-box-align: center; align-items: center; padding: 10px 0; } .rmc-date-picker-item { -ms-flex: 1; -webkit-box-flex: 1; flex: 1; text-align: center; } </style> <style>.rmc-picker-popup { left: 0; bottom: 0; position: fixed; width: 100%; background-color: #fff; } .rmc-picker-popup-close { display: none; } .rmc-picker-popup-wrap { position: fixed; overflow: auto; top: 0; right: 0; bottom: 0; left: 0; z-index: 1050; overflow-scrolling: touch; outline: 0; } .rmc-picker-popup-mask { position: fixed; top: 0; right: 0; left: 0; bottom: 0; background-color: #373737; background-color: rgba(55, 55, 55, 0.6); height: 100%; filter: alpha(opacity=50); z-index: 1050; } .rmc-picker-popup-mask-hidden { display: none; } .rmc-picker-popup-header { background-image: -webkit-gradient(linear, left top, left bottom, from(#e7e7e7), color-stop(#e7e7e7), color-stop(transparent), to(transparent)); background-image: linear-gradient(to bottom, #e7e7e7, #e7e7e7, transparent, transparent); background-position: bottom; background-size: 100% 1px; background-repeat: no-repeat; position: relative; display: -webkit-box; display: -ms-flexbox; display: flex; -webkit-box-orient: horizontal; -webkit-box-direction: normal; -ms-flex-direction: row; flex-direction: row; } .rmc-picker-popup-header-left, .rmc-picker-popup-header-right { padding-left: 15px; padding-right: 15px; } .rmc-picker-popup-item { color: #0ae; font-size: 18px; height: 44px; line-height: 44px; cursor: pointer; -webkit-box-sizing: border-box; box-sizing: border-box; text-align: center; -webkit-tap-highlight-color: transparent; } .rmc-picker-popup-item-active { background-color: #ddd; } .rmc-picker-popup-title { -webkit-box-flex: 1; -ms-flex: 1; flex: 1; color: #666; cursor: default; } .rmc-picker-popup-fade-enter, .rmc-picker-popup-fade-appear { opacity: 0; -webkit-animation-duration: 0.3s; animation-duration: 0.3s; -webkit-animation-fill-mode: both; animation-fill-mode: both; -webkit-animation-timing-function: cubic-bezier(0.55, 0, 0.55, 0.2); animation-timing-function: cubic-bezier(0.55, 0, 0.55, 0.2); -webkit-animation-play-state: paused; animation-play-state: paused; } .rmc-picker-popup-fade-leave { -webkit-animation-duration: 0.3s; animation-duration: 0.3s; -webkit-animation-fill-mode: both; animation-fill-mode: both; -webkit-animation-timing-function: cubic-bezier(0.55, 0, 0.55, 0.2); animation-timing-function: cubic-bezier(0.55, 0, 0.55, 0.2); -webkit-animation-play-state: paused; animation-play-state: paused; } .rmc-picker-popup-fade-enter.rmc-picker-popup-fade-enter-active, .rmc-picker-popup-fade-appear.rmc-picker-popup-fade-appear-active { -webkit-animation-name: rmcPopupPickerFadeIn; animation-name: rmcPopupPickerFadeIn; -webkit-animation-play-state: running; animation-play-state: running; } .rmc-picker-popup-fade-leave.rmc-picker-popup-fade-leave-active { -webkit-animation-name: rmcPopupPickerFadeOut; animation-name: rmcPopupPickerFadeOut; -webkit-animation-play-state: running; animation-play-state: running; } @-webkit-keyframes rmcPopupPickerFadeIn { 0% { opacity: 0; } 100% { opacity: 1; } } @keyframes rmcPopupPickerFadeIn { 0% { opacity: 0; } 100% { opacity: 1; } } @-webkit-keyframes rmcPopupPickerFadeOut { 0% { opacity: 1; } 100% { opacity: 0; } } @keyframes rmcPopupPickerFadeOut { 0% { opacity: 1; } 100% { opacity: 0; } } .rmc-picker-popup-slide-fade-enter, .rmc-picker-popup-slide-fade-appear { -webkit-transform: translate(0, 100%); -ms-transform: translate(0, 100%); transform: translate(0, 100%); } .rmc-picker-popup-slide-fade-enter, .rmc-picker-popup-slide-fade-appear, .rmc-picker-popup-slide-fade-leave { -webkit-animation-duration: 0.3s; animation-duration: 0.3s; -webkit-animation-fill-mode: both; animation-fill-mode: both; -webkit-animation-timing-function: cubic-bezier(0.55, 0, 0.55, 0.2); animation-timing-function: cubic-bezier(0.55, 0, 0.55, 0.2); -webkit-animation-play-state: paused; animation-play-state: paused; } .rmc-picker-popup-slide-fade-enter.rmc-picker-popup-slide-fade-enter-active, .rmc-picker-popup-slide-fade-appear.rmc-picker-popup-slide-fade-appear-active { -webkit-animation-name: rmcPopupPickerSlideFadeIn; animation-name: rmcPopupPickerSlideFadeIn; -webkit-animation-play-state: running; animation-play-state: running; } .rmc-picker-popup-slide-fade-leave.rmc-picker-popup-slide-fade-leave-active { -webkit-animation-name: rmcPopupPickerSlideFadeOut; animation-name: rmcPopupPickerSlideFadeOut; -webkit-animation-play-state: running; animation-play-state: running; } @-webkit-keyframes rmcPopupPickerSlideFadeIn { 0% { -webkit-transform: translate(0, 100%); transform: translate(0, 100%); } 100% { -webkit-transform: translate(0, 0); transform: translate(0, 0); } } @keyframes rmcPopupPickerSlideFadeIn { 0% { -webkit-transform: translate(0, 100%); transform: translate(0, 100%); } 100% { -webkit-transform: translate(0, 0); transform: translate(0, 0); } } @-webkit-keyframes rmcPopupPickerSlideFadeOut { 0% { -webkit-transform: translate(0, 0); transform: translate(0, 0); } 100% { -webkit-transform: translate(0, 100%); transform: translate(0, 100%); } } @keyframes rmcPopupPickerSlideFadeOut { 0% { -webkit-transform: translate(0, 0); transform: translate(0, 0); } 100% { -webkit-transform: translate(0, 100%); transform: translate(0, 100%); } } </style> <style>.fishd-spin { font-family: "Monospaced Number", "Chinese Quote", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; line-height: 1.5; color: #333; -webkit-box-sizing: border-box; box-sizing: border-box; margin: 0; padding: 0; list-style: none; color: #337eff; opacity: 0; position: absolute; -webkit-transition: -webkit-transform 0.3s cubic-bezier(0.78, 0.14, 0.15, 0.86); transition: -webkit-transform 0.3s cubic-bezier(0.78, 0.14, 0.15, 0.86); transition: transform 0.3s cubic-bezier(0.78, 0.14, 0.15, 0.86); transition: transform 0.3s cubic-bezier(0.78, 0.14, 0.15, 0.86), -webkit-transform 0.3s cubic-bezier(0.78, 0.14, 0.15, 0.86); display: none; } .fishd-spin-container { height: 100%; display: -webkit-box; display: -ms-flexbox; display: flex; -webkit-box-pack: center; -ms-flex-pack: center; justify-content: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; } .fishd-spin-text-loading { color: #999; text-align: center; } .fishd-spin-text-loading-dot i { -webkit-animation: fishdDot 2s steps(1, end) infinite; animation: fishdDot 2s steps(1, end) infinite; } .fishd-spin-spinning { height: 100%; opacity: 1; position: static; display: -webkit-box; display: -ms-flexbox; display: flex; -webkit-box-pack: center; -ms-flex-pack: center; justify-content: center; -webkit-box-align: center; -ms-flex-align: center; align-items: center; } .fishd-spin-nested-loading { position: relative; } .fishd-spin-nested-loading > div > .fishd-spin { position: absolute; height: 100%; max-height: 320px; width: 100%; z-index: 4; } .fishd-spin-nested-loading > div > .fishd-spin-sm .fishd-spin-text { font-size: 12px; } .fishd-spin-nested-loading > div > .fishd-spin-lg .fishd-spin-text { font-size: 18px; } .fishd-spin-nested { position: relative; zoom: 1; } .fishd-spin-nested:before, .fishd-spin-nested:after { content: ""; display: table; } .fishd-spin-nested:after { clear: both; } .fishd-spin-nested:before, .fishd-spin-nested:after { content: ""; display: table; } .fishd-spin-nested:after { clear: both; } .fishd-spin-blur { pointer-events: none; user-select: none; overflow: hidden; opacity: 0.7; -webkit-filter: blur(0.5px); filter: blur(0.5px); /* autoprefixer: off */ filter: progid\:DXImageTransform\.Microsoft\.Blur(PixelRadius\=1, MakeShadow\=false); } .fishd-spin-blur:after { content: ''; position: absolute; left: 0; right: 0; top: 0; bottom: 0; background: #fff; opacity: 0.3; -webkit-transition: all 0.3s; transition: all 0.3s; z-index: 10; } .fishd-spin-tip { color: #666; } .fishd-spin-dot { position: relative; display: inline-block; font-size: 20px; width: 20px; height: 20px; } .fishd-spin-dot i { width: 9px; height: 9px; border-radius: 100%; background-color: #337eff; -webkit-transform: scale(0.75); -ms-transform: scale(0.75); transform: scale(0.75); display: block; position: absolute; opacity: 0.3; -webkit-animation: fishdSpinMove 1s infinite linear alternate; animation: fishdSpinMove 1s infinite linear alternate; -webkit-transform-origin: 50% 50%; -ms-transform-origin: 50% 50%; transform-origin: 50% 50%; } .fishd-spin-dot i:nth-child(1) { left: 0; top: 0; } .fishd-spin-dot i:nth-child(2) { right: 0; top: 0; -webkit-animation-delay: 0.4s; animation-delay: 0.4s; } .fishd-spin-dot i:nth-child(3) { right: 0; bottom: 0; -webkit-animation-delay: 0.8s; animation-delay: 0.8s; } .fishd-spin-dot i:nth-child(4) { left: 0; bottom: 0; -webkit-animation-delay: 1.2s; animation-delay: 1.2s; } .fishd-spin-dot-spin { -webkit-transform: rotate(45deg); -ms-transform: rotate(45deg); transform: rotate(45deg); -webkit-animation: fishdRotate 1.2s infinite linear; animation: fishdRotate 1.2s infinite linear; } .fishd-spin-sm .fishd-spin-dot { font-size: 14px; width: 14px; height: 14px; } .fishd-spin-sm .fishd-spin-dot i { width: 6px; height: 6px; } .fishd-spin-lg .fishd-spin-dot { font-size: 32px; width: 32px; height: 32px; } .fishd-spin-lg .fishd-spin-dot i { width: 14px; height: 14px; } .fishd-spin.fishd-spin-show-text .fishd-spin-text { display: inline-block; margin-left: 10px; color: #999; } @media all and (-ms-high-contrast: none), (-ms-high-contrast: active) { /* IE10+ */ .fishd-spin-blur { background: #fff; opacity: 0.5; } } @-webkit-keyframes fishdDot { 0%, 20% { opacity: 0; } 40% { opacity: 1; } 60% { text-shadow: 0.5em 0; } 80%, 100% { text-shadow: 0.5em 0, 1em 0; } } @keyframes fishdDot { 0%, 20% { opacity: 0; } 40% { opacity: 1; } 60% { text-shadow: 0.5em 0; } 80%, 100% { text-shadow: 0.5em 0, 1em 0; } } @-webkit-keyframes fishdSpinMove { to { opacity: 1; } } @keyframes fishdSpinMove { to { opacity: 1; } } @-webkit-keyframes fishdRotate { to { -webkit-transform: rotate(405deg); transform: rotate(405deg); } } @keyframes fishdRotate { to { -webkit-transform: rotate(405deg); transform: rotate(405deg); } } </style> <style type="text/css">.auto-1691801729900{font-size:12px;line-height:160%;} .auto-1691801729900 a{margin:0 2px;padding:2px 8px;color:#333;border:1px solid #aaa;text-decoration:none;} .auto-1691801729900 .js-disabled{cursor:default;} .auto-1691801729900 .js-selected{cursor:default;background-color:#bbb;} .auto-1691801729918{position:absolute;width:0;height:0;overflow:hidden;} .auto-1691801729919-parent{position:relative;} .m-check-item { cursor: pointer; display: inline-block; position: relative; height: 26px; line-height: 16px; width: 120px; font-size: 14px; color: #333333; border: 1px solid #e8e8e8; border-radius: 2px; padding: 4px 20px; box-sizing: border-box; text-align: center; margin-top: 10px; margin-right: 9px; } .m-check-item:last-child { margin-right: 0px; } .m-check-item.checked { border-color: #5092e1; } .m-check-item>input { display: inline-block\9; position: absolute; left: 5px; top: 3px; } .m-check-item>span { display: inline-block; width: 100%; overflow: hidden; word-wrap: normal; white-space: nowrap; text-overflow: ellipsis; } .m-check-item>i { position: absolute; display: none; top: 6px; right: 4px; } .m-check-item.checked>i { border-color: #5092e1; display: block; }</style> <style> .bd_title{ position: relative; font-size: 16px; color: #fff; height: 48px; line-height: 48px; background: #5092e1; zoom: 1; background-color: #337eff; font-size: 16px; } .bd_title .left{ position: relative; padding: 0 16px; overflow: hidden; height: 100%; } .bd_title .left .icon{ float: left; margin-top: 12px; margin-right: 10px; line-height: initial; height: 100%; } .bd_title .left .text{ width: auto; text-align: center; margin-right: 30px; } .kf_box{ margin-top: 15px; width: 100%; margin: 10px 0; text-align: center; } .kf_box h3{ display: inline-block; padding: 0 9px; border-radius: 15px; word-break: break-all; font-size: 12px; color: #fff; line-height: 2; background: #d0d3d9; } .bd_title .but{ position: relative; top: -50px; float: right; margin-right: 8px; } .conts{ display: inline-block; margin-top: 0px; padding: 3px 8px; border: 1px solid #fff; border-radius: 3px; color: #fff; font-size: 13px; background-color: transparent; vertical-align: middle; } ul { display: block; list-style-type: disc; padding: 4px 16px 12px 12px; } li{ list-style: none; } /* 聊天容器调整 */ .msg-box { padding: 0; } .PullToRefresh-content { padding: 0 5px; } /* 头像样式 */ .img1, .img2 { width: 45px; height: 45px; overflow: hidden; border-radius: 50%; display: flex; align-items: center; justify-content: center; } .img1 { float: left; margin-left: 0 !important; margin-right: 8px; } .img2 { float: right; margin-right: 0 !important; margin-left: 8px; } .img1 img, .img2 img, .Avatar img, .u-icon-avater { border-radius: 50% !important; width: 80% !important; height: 80% !important; object-fit: cover !important; display: block; } .Message-main .Avatar { width: 45px !important; height: 45px !important; border-radius: 50% !important; overflow: hidden !important; display: flex !important; align-items: center !important; justify-content: center !important; } /* 消息气泡样式 */ .msg .content { max-width: 70%; padding: 8px 12px; border-radius: 18px; margin-top: 5px; } .msg.clearfix .content { float: left; margin-left: 0; background-color: #f0f0f0; color: #333; } .msg.clearfix.on .content { float: right; margin-right: 0; background-color: #337eff; color: #fff; } /* 时间样式:小装饰,固定中间,不独占一行 */ .time-separator { font-size: 10px !important; color: #999 !important; margin: 8px auto !important; padding: 2px 8px !important; background: rgba(0,0,0,0.05) !important; border-radius: 10px !important; display: inline-block !important; text-align: center !important; clear: both !important; position: relative !important; left: 50% !important; transform: translateX(-50%) !important; z-index: 1 !important; } </style> </head> <body class="m-mobile-frame" id="auto-id-1691801730040" style="font-size:14px"> <div class="service"> <div class="chat_show_loading u-errtip j-loading f-hide" id="jz"><img src="https://qiyukf.nosdn.127.net/sdk/res/default/loading_3782900ab9d04a1465e574a7d50af408.gif"> <span class="j-loading-txt">正在连接,请稍等...</span></div> <div class="service"> <div class="chat_show_loading u-errtip j-loading f-hide" id="ljcg" style="margin-left: -50px;"><span class="j-loading-txt">连接成功</span></div> <div class="bd_title"> <div class="left"> <div class="icon"> <a href="javascript:;" onclick="history.go(-1);"><img src="https://qiyukf.nosdn.127.net/sdk/res/img/prev_fb1146ba7f3ea25f1bbb8db373fb710f.png" alt></a> </div> <div class="text"> <span class="name">闲鱼官方在线客服中心</span> </div> </div> </div> <div class="msg-box"> <div class="PullToRefresh-content PullToRefresh-transition" style="transform: translate3d(0px, 0px, 0px);"> <div class="PullToRefresh-indicator"></div> <div class="Message left" data-id="167012827668700566" data-type="card"> <div class="Message-main"> <div class="Message-inner"> <div class="Message-content" role="alert" aria-live="assertive" aria-atomic="false"> <div class="ComponentMessage" data-spm-anchor-id="a311a.7996332.0.i0.7f0e3f5dNPC0Mt"> </div> </div> </div> </div> </div> <div class="kf_box"> <h3>闲鱼人工客服 为您服务</h3> </div> <!-- 初始客服消息 --> <div class="Message left" data-id="169177542802256502" data-type="text"> <div class="Message-main"> <span class="Avatar Avatar--md Avatar--circle"> <img src="/img/xy1.png"></span> <div class="Message-inner"> <div class="Message-content" role="alert" aria-live="assertive" aria-atomic="false"> <div class="Bubble text" data-type="text"><p><span style="color:red;">闲鱼网在线授权客服工号10788号很高兴为您服务,请简单描述您需要咨询的问题!您好请问有什么可以帮到您呢?</span></p> </div> </div> </div> </div> </div> </div> <!-- 历史消息(带时间间隔判断) --> <?php $lastTime = 0; // 上一条消息时间戳 foreach($messages as $rs_list){ $currentTime = strtotime($rs_list['h_addTime']); $sendTimeText = date('H:i', $currentTime); // 时间间隔超过60秒则显示时间分隔符 if($lastTime == 0 || ($currentTime - $lastTime) > 60){ echo '<div class="time-separator">' . $sendTimeText . '</div>'; } // 输出消息内容 if($rs_list['h_who'] == 2){ // 客服消息 echo ' <div class="msg clearfix"> <div class="img1"> <img src="/img/xy1.png" alt=""> </div> <div class="content"> <span>' . $rs_list['h_content'] . '</span> </div> </div> '; } else { // 客户消息 echo ' <div class="msg clearfix on"> <div class="img2"> <img src="http://tc.chuzhong.icu/i/2025/11/10/wei91.png" alt=""> </div> <div class="content"> <span>' . $rs_list['h_content'] . '</span> </div> </div> '; } $lastTime = $currentTime; // 更新上一条消息时间戳 } ?> <p id="msgzone"></p> </div> <div class="msg-post"> <textarea enterkeyhint="send" rows="1" placeholder="输入消息..." type="text" class="Input Input--outline Composer-input" id="cont"></textarea> <svg id="bd" onclick="bd5()" style="width: 33px; height: 33px; margin: 5px 0px 5px 5px; display: block;" t="1687901693741" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="8335" width="200" height="200"> <path d="M696 480H544V328c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v152H328c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8h152v152c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V544h152c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8z" p-id="8336"></path> <path d="M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64z m0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z" p-id="8337"></path> </svg> <svg t="1687903493556" id="bd999" onclick="bd6()" style="width: 33px; height: 33px; margin: 5px 0px 5px 5px; display: none;" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2305" width="200" height="200"> <path d="M512 42.666667c259.2 0 469.333333 210.133333 469.333333 469.333333s-210.133333 469.333333-469.333333 469.333333S42.666667 771.2 42.666667 512 252.8 42.666667 512 42.666667z m0 64C288.149333 106.666667 106.666667 288.149333 106.666667 512s181.482667 405.333333 405.333333 405.333333 405.333333-181.482667 405.333333-405.333333S735.850667 106.666667 512 106.666667z m-104.746667 256a8.533333 8.533333 0 0 1 6.037334 2.496L512 463.850667l98.688-98.688a8.533333 8.533333 0 0 1 6.037333-2.496h66.346667a8.533333 8.533333 0 0 1 6.037333 14.570666l-131.84 131.861334 137.642667 137.664a8.533333 8.533333 0 0 1-6.037333 14.570666h-66.346667a8.533333 8.533333 0 0 1-6.037333-2.496L512 554.346667l-104.512 104.490666a8.533333 8.533333 0 0 1-6.037333 2.496h-66.346667a8.533333 8.533333 0 0 1-6.016-14.570666l137.664-137.664-131.861333-131.861334A8.533333 8.533333 0 0 1 340.906667 362.666667h66.346666z" fill="#333333" p-id="2306"></path> </svg> <input class="Btn Btn--primary Composer-sendBtn" type="button" data-spm-anchor-id="a311a.7996332.0.i13.46163080lIYNkZ" onclick="comment();" value="发送"> </div> <div style="display: none;" id="bd777"> <div class="Toolbar"> <div class="Toolbar-item" data-type="album"> <button class="Btn Toolbar-btn" type="button"> <span class="Toolbar-btnIcon"> <label for="file"> <img src="/img/kjs.png"> </label> </span> <span class="Toolbar-btnText">相册</span> <input type="file" accept="image/*" id="file" onchange="upload()" style="width:0;height:0"> </button> </div> </div> </div> </div> <script src="https://cdn.staticfile.org/jquery/3.5.1/jquery.min.js"></script> <script src="https://g.alicdn.com/chatui/icons/2.1.0/index.js"></script> <script src="js/jquery.min.js"></script> <script src="layer/layer.js"></script> <script src="js/indexsjk.js"></script> <script> // 记录最后一条消息的时间戳(用于新消息时间判断) let lastMessageTime = <?php echo empty($messages) ? 0 : strtotime(end($messages)['h_addTime']); ?>; // 重写发送消息函数,添加时间间隔判断 function comment() { const cont = $('#cont').val().trim(); if (!cont) return; // 获取当前北京时间 const now = new Date(); const currentTime = now.getTime() / 1000; // 转换为秒级时间戳 const timeText = now.getHours().toString().padStart(2, '0') + ':' + now.getMinutes().toString().padStart(2, '0'); // 间隔超过60秒显示时间分隔符 if (lastMessageTime === 0 || (currentTime - lastMessageTime) > 60) { $('#msgzone').before(`<div class="time-separator">${timeText}</div>`); } // 发送消息(保持原有逻辑) $.post('ajax.php?act=send', {content: cont}, function(data) { if (data.code === 1) { $('#msgzone').before(` <div class="msg clearfix on"> <div class="img2"> <img src="http://tc.chuzhong.icu/i/2025/11/10/wei91.png" alt=""> </div> <div class="content"> <span>${cont}</span> </div> </div> `); $('#cont').val(''); lastMessageTime = currentTime; // 更新最后一条消息时间 // 滚动到底部 $('.PullToRefresh-content').scrollTop($('.PullToRefresh-content')[0].scrollHeight); } }, 'json'); } </script> </body> </html> 点击发送按钮没反应
11-11
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值