解决表格斜体加粗

This commit is contained in:
2026-07-17 17:14:12 +08:00
parent 3abf881437
commit bf9d5f3f22
17 changed files with 351 additions and 28 deletions

View File

@@ -343,12 +343,14 @@
for (let i = 0; i < lines.length; i++) { for (let i = 0; i < lines.length; i++) {
const line = lines[i].trim() const line = lines[i].trim()
// 检测表格行:以 | 开头结尾 // 检测表格行:以 | 开头并以 | 结尾
const isTableLine = /^\|.+|$/.test(line) && line.includes('|') // 修复:原正则 /^\|.+|&/ 中 | 未转义,导致匹配所有行
const isTableLine = /^\|.+\|$/.test(line)
if (isTableLine) { if (isTableLine) {
// 分隔行(如 |---|---| // 分隔行(如 |---|---| 或 |:---:|
if (/^\|[\s\-:]+\|[\s\-:|]+\|$/.test(line)) { // 修复:原正则在字符类中包含了 | 导致分隔行误判
if (/^\|[\s\-:]+\|[\s\-:]+\|$/.test(line)) {
alignments = line.split('|').filter(c => c.trim()).map(c => { alignments = line.split('|').filter(c => c.trim()).map(c => {
if (c.trim().startsWith(':') && c.trim().endsWith(':')) return 'center' if (c.trim().startsWith(':') && c.trim().endsWith(':')) return 'center'
if (c.trim().endsWith(':')) return 'right' if (c.trim().endsWith(':')) return 'right'
@@ -385,8 +387,12 @@
html += '<tr>' html += '<tr>'
cells.forEach((cell, ci) => { cells.forEach((cell, ci) => {
const align = alignments[ci] ? ` style="text-align:${alignments[ci]}"` : '' const align = alignments[ci] ? ` style="text-align:${alignments[ci]}"` : ''
// 修复:转义表格单元格中的 _ 和 *,防止 snarkdown 将其解析为斜体/加粗
let cellContent = cell.trim()
.replace(/_/g, '&#95;')
.replace(/\*/g, '&#42;')
html += html +=
`<${tag}${align} style="padding:6px 10px;border:1px solid #ddd">${cell.trim()}</${tag}>` `<${tag}${align} style="padding:6px 10px;border:1px solid #ddd">${cellContent}</${tag}>`
}) })
html += '</tr>' html += '</tr>'
}) })
@@ -394,6 +400,19 @@
return html return html
} }
// 转义所有单独的 _但保护 __双下划线粗体
// snarkdown 的 [_*] 没有任何单词边界限制,会把单词中的 _ 误解析为斜体标记
// 如 watermark_mcp、char_spacing 中的 _ 会打开永不闭合的 <em>,导致后面全部斜体
const escapeLoneUnderscores = (text) => {
// 1. 先用占位符保护 __ 双下划线snarkdown 的粗体语法)
text = text.replace(/__/g, '\x00\x00')
// 2. 将剩余的单个 _ 转为 HTML 实体snarkdown 不会处理实体
text = text.replace(/_/g, '&#95;')
// 3. 还原 __ 占位符
text = text.replace(/\x00\x00/g, '__')
return text
}
// Markdown转HTML节点 // Markdown转HTML节点
const pareseMarkdown = (content) => { const pareseMarkdown = (content) => {
if (!content) return '' if (!content) return ''
@@ -401,14 +420,12 @@
content = sanitizeContent(content) content = sanitizeContent(content)
try { try {
// 转义单词中的单下划线,防止 snarkdown 误解析为斜体
content = escapeLoneUnderscores(content)
// 先转换表格,再用 snarkdown 处理其他 Markdown // 先转换表格,再用 snarkdown 处理其他 Markdown
content = convertMarkdownTable(content) content = convertMarkdownTable(content)
const html = snarkdown(content) const html = snarkdown(content)
return html return html
// // 过滤掉可能导致问题的 Unicode 属性
// const safeHtml = html.replace(/\\p\{[LN]\}/g, '')
// return safeHtml
} catch (e) { } catch (e) {
console.error('解析失败', e) console.error('解析失败', e)
return content return content
@@ -1164,7 +1181,7 @@
const takeConversationMessages = async () => { const takeConversationMessages = async () => {
try { try {
allmessages.value = await getConversationMessages(userToken.value, currentSessionId.value) || []; allmessages.value = await getConversationMessages(userToken.value, currentSessionId.value) || [];
// console.log("获取到的所有消息:", JSON.stringify(allmessages.value) ); console.log("获取到的所有消息:", JSON.stringify(allmessages.value) );
// currentMessages.value = allmessages.value.slice(-pageInfoNumber); // currentMessages.value = allmessages.value.slice(-pageInfoNumber);
// 数据获取后执行滚动 // 数据获取后执行滚动
scrollToBottom(); scrollToBottom();
@@ -1178,7 +1195,7 @@
const takeFriendMessages = async () => { const takeFriendMessages = async () => {
try { try {
allmessages.value = await getFriendMessages(currentSessionId.value) || []; allmessages.value = await getFriendMessages(currentSessionId.value) || [];
console.log("好友消息:", JSON.stringify(allmessages.value)); // console.log("好友消息:", JSON.stringify(allmessages.value));
// 数据获取后执行滚动 // 数据获取后执行滚动
scrollToBottom(); scrollToBottom();
} catch (error) { } catch (error) {

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1 +1 @@
.login-container[data-v-a8bd24d4]{padding:4.375rem 1.875rem 3.125rem;box-sizing:border-box;display:flex;flex-direction:column}.login-card[data-v-a8bd24d4]{position:relative;flex:1;width:100%;height:100%;padding:.625rem;box-sizing:border-box;background:#fff;display:flex;flex-direction:column;align-items:center;justify-content:center}.conner[data-v-a8bd24d4]{position:absolute;width:1.25rem;height:1.25rem}.conner-tl[data-v-a8bd24d4]{top:0;left:0;border-top:2px solid #aaaaff;border-left:2px solid #aaaaff}.conner-tr[data-v-a8bd24d4]{top:0;right:0;border-top:2px solid #aaaaff;border-right:2px solid #aaaaff}.conner-bl[data-v-a8bd24d4]{bottom:0;left:0;border-bottom:2px solid #aaaaff;border-left:2px solid #aaaaff}.conner-br[data-v-a8bd24d4]{bottom:0;right:0;border-bottom:2px solid #aaaaff;border-right:2px solid #aaaaff}.login-header[data-v-a8bd24d4]{display:flex;justify-content:center;align-items:center;flex-direction:column}.login-header-logo[data-v-a8bd24d4]{display:flex;justify-content:center;align-items:center}.login-header-logo uni-text[data-v-a8bd24d4]{margin-left:.25rem;font-size:1.875rem;font-weight:700;color:#aaf;text-shadow:0 0 .3125rem rgba(170,170,255,.4),0 0 .625rem rgba(170,170,255,.3)}.icon-wrapper[data-v-a8bd24d4]{width:2.8125rem;height:2.8125rem;border-radius:50%;background-color:#fff;display:flex;align-items:center;justify-content:center;animation:glow-a8bd24d4 2s ease-in-out infinite}@keyframes glow-a8bd24d4{0%,to{box-shadow:0 0 .625rem rgba(170,170,255,.3)}50%{box-shadow:0 0 .625rem rgba(170,170,255,.4),0 0 .9375rem rgba(170,170,255,.3),0 0 1.5625rem rgba(170,170,255,.2)}}.icon-wrapper .danao-style[data-v-a8bd24d4]{font-size:2.1875rem;color:#aaf}.sub-title[data-v-a8bd24d4]{margin-top:.625rem;font-size:1.125rem;font-weight:500;color:#666;text-shadow:0 0 .3125rem #999}.form-wrapper[data-v-a8bd24d4]{margin-top:1.5625rem;width:15.625rem;padding:2.5rem .9375rem;background-color:rgba(170,170,255,.05);border-radius:.625rem;box-shadow:0 0 .3125rem rgba(170,170,255,.5);display:flex;flex-direction:column}.form-item[data-v-a8bd24d4]{margin-top:.625rem}.form-item .form-input[data-v-a8bd24d4]{width:100%;height:2.5rem;padding:0 10px;box-sizing:border-box;border-radius:.9375rem;border:.03125rem solid #e5e5e5}.form-item .focused[data-v-a8bd24d4]{border-color:#aaf;box-shadow:0 0 .3125rem rgba(170,170,255,.5)}.form-item .error[data-v-a8bd24d4]{border-color:red;box-shadow:0 0 .3125rem rgba(255,0,0,.5)}.error-info[data-v-a8bd24d4]{font-size:.75rem;color:red}.form-option[data-v-a8bd24d4]{margin-top:.3125rem;display:flex;justify-content:space-between}.form-option .checkbox-wrapper[data-v-a8bd24d4]{display:flex;justify-content:start;align-items:center}.form-option .checkbox-wrapper .checkbox[data-v-a8bd24d4]{width:.9375rem;height:.9375rem;border:.03125rem solid #666;display:flex;justify-content:center;align-items:center}.form-option .checkbox-wrapper .checked[data-v-a8bd24d4]{background-color:#aaf}.form-option .checkbox-wrapper .checkbox uni-text[data-v-a8bd24d4]{color:#fff}[data-v-a8bd24d4] .login-btn{margin-top:.9375rem;width:15.625rem;height:3.125rem;border-radius:2.5rem;background:linear-gradient(to right,#aaf,#2969ed)} .login-container[data-v-1f1e3d89]{padding:3.75rem 1.5625rem 2.5rem;box-sizing:border-box;display:flex;flex-direction:column;align-items:center;background:linear-gradient(160deg,#f0f2ff,#f5f3f8,#faf9fe 60%,#f5f4ff)}.login-card[data-v-1f1e3d89]{position:relative;flex:1;width:100%;max-width:20rem;padding:1.5625rem 1.25rem;box-sizing:border-box;background:rgba(255,255,255,.85);backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);display:flex;flex-direction:column;align-items:center;justify-content:center;border-radius:1.25rem;box-shadow:0 .5rem 1.5rem rgba(100,100,180,.1);border:.03125rem solid rgba(170,170,255,.15)}.conner[data-v-1f1e3d89]{position:absolute;width:1.25rem;height:1.25rem}.conner-tl[data-v-1f1e3d89]{top:0;left:0;border-top:2px solid #aaaaff;border-left:2px solid #aaaaff}.conner-tr[data-v-1f1e3d89]{top:0;right:0;border-top:2px solid #aaaaff;border-right:2px solid #aaaaff}.conner-bl[data-v-1f1e3d89]{bottom:0;left:0;border-bottom:2px solid #aaaaff;border-left:2px solid #aaaaff}.conner-br[data-v-1f1e3d89]{bottom:0;right:0;border-bottom:2px solid #aaaaff;border-right:2px solid #aaaaff}.login-header[data-v-1f1e3d89]{display:flex;justify-content:center;align-items:center;flex-direction:column}.login-header-logo[data-v-1f1e3d89]{display:flex;justify-content:center;align-items:center}.login-header-logo uni-text[data-v-1f1e3d89]{margin-left:.375rem;font-size:1.75rem;font-weight:800;color:#6c63ff;letter-spacing:.0625rem}.icon-wrapper[data-v-1f1e3d89]{width:3rem;height:3rem;border-radius:50%;background:linear-gradient(135deg,rgba(255,255,255,.9),rgba(240,238,255,.8));display:flex;align-items:center;justify-content:center;animation:glow-1f1e3d89 2.5s ease-in-out infinite;box-shadow:0 .125rem .5rem rgba(108,99,255,.12)}@keyframes glow-1f1e3d89{0%,to{box-shadow:0 .125rem .5rem rgba(108,99,255,.12)}50%{box-shadow:0 .125rem .75rem rgba(108,99,255,.25),0 0 1.5625rem rgba(108,99,255,.12)}}.icon-wrapper .danao-style[data-v-1f1e3d89]{font-size:2rem;color:#6c63ff}.sub-title[data-v-1f1e3d89]{margin-top:.5rem;font-size:1rem;font-weight:500;color:#888;letter-spacing:.03125rem}.form-wrapper[data-v-1f1e3d89]{margin-top:1.5625rem;width:100%;max-width:15.625rem;padding:1.875rem 1.125rem 1.125rem;background:rgba(170,170,255,.04);border-radius:.875rem;border:.03125rem solid rgba(170,170,255,.1);display:flex;flex-direction:column}.form-item[data-v-1f1e3d89]{margin-top:.625rem}.form-label[data-v-1f1e3d89]{font-size:.8125rem;font-weight:500;color:#555;margin-bottom:.25rem;display:flex;align-items:center;gap:.25rem}.form-item .form-input[data-v-1f1e3d89]{width:100%;height:2.75rem;padding:0 .75rem;box-sizing:border-box;border-radius:.75rem;border:.0625rem solid #e8e8f0;background:rgba(255,255,255,.8);font-size:.875rem;color:#333;transition:all .25s ease}.form-item .form-input[data-v-1f1e3d89]::-webkit-input-placeholder{color:#c0c0d0}.form-item .form-input[data-v-1f1e3d89]::placeholder{color:#c0c0d0}.form-item .focused[data-v-1f1e3d89]{border-color:#6c63ff;background:#fff;box-shadow:0 0 0 .1875rem rgba(108,99,255,.06)}.form-item .error[data-v-1f1e3d89]{border-color:#ff4d4f;box-shadow:0 0 0 .1875rem rgba(255,77,79,.06)}.error-info[data-v-1f1e3d89]{font-size:.6875rem;color:#ff4d4f;margin-top:.25rem;padding-left:.25rem}.form-option[data-v-1f1e3d89]{margin-top:.625rem;display:flex;justify-content:space-between;align-items:center}.form-option .checkbox-wrapper[data-v-1f1e3d89]{display:flex;justify-content:start;align-items:center}.form-option .checkbox-wrapper .checkbox[data-v-1f1e3d89]{width:1.125rem;height:1.125rem;border:.0625rem solid #d4d4e0;border-radius:.25rem;display:flex;justify-content:center;align-items:center;transition:all .2s ease;background:#fff}.form-option .checkbox-wrapper .checkbox uni-text[data-v-1f1e3d89]{color:#fff;font-size:.6875rem}.form-option .checkbox-wrapper .checked[data-v-1f1e3d89]{background:linear-gradient(135deg,#6c63ff,#4a45d1);border-color:#6c63ff}.form-option .checkbox-wrapper .checkbox-text[data-v-1f1e3d89]{margin-left:.3125rem;font-size:.8125rem;color:#666}.form-option .forget-pwd[data-v-1f1e3d89]{font-size:.8125rem;color:#6c63ff;font-weight:500}[data-v-1f1e3d89] .login-btn{margin-top:1.125rem;width:100%;max-width:15.625rem;height:3rem;border-radius:1.5rem;background:linear-gradient(135deg,#6c63ff,#4a45d1);color:#fff;font-size:1rem;font-weight:600;letter-spacing:.0625rem;box-shadow:0 .25rem .75rem rgba(108,99,255,.3);transition:all .2s ease;border:none}[data-v-1f1e3d89] .login-btn:active{transform:scale(.97);box-shadow:0 .125rem .375rem rgba(108,99,255,.2)}[data-v-1f1e3d89] .login-btn[disabled]{opacity:.7;background:linear-gradient(135deg,#a8a4f0,#8a86d8)}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -54,6 +54,60 @@
<div class="content unicode" style="display: block;"> <div class="content unicode" style="display: block;">
<ul class="icon_lists dib-box"> <ul class="icon_lists dib-box">
<li class="dib">
<span class="icon iconfont">&#xe695;</span>
<div class="name">代码</div>
<div class="code-name">&amp;#xe695;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe64c;</span>
<div class="name">word</div>
<div class="code-name">&amp;#xe64c;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe62f;</span>
<div class="name">其他领域</div>
<div class="code-name">&amp;#xe62f;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe63a;</span>
<div class="name">文件夹</div>
<div class="code-name">&amp;#xe63a;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe64d;</span>
<div class="name">execl</div>
<div class="code-name">&amp;#xe64d;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe64e;</span>
<div class="name">TXT</div>
<div class="code-name">&amp;#xe64e;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe64f;</span>
<div class="name">PPT</div>
<div class="code-name">&amp;#xe64f;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe650;</span>
<div class="name">ZIP</div>
<div class="code-name">&amp;#xe650;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe651;</span>
<div class="name">PDF</div>
<div class="code-name">&amp;#xe651;</div>
</li>
<li class="dib"> <li class="dib">
<span class="icon iconfont">&#xe988;</span> <span class="icon iconfont">&#xe988;</span>
<div class="name">云端,云,云服务</div> <div class="name">云端,云,云服务</div>
@@ -426,9 +480,9 @@
<pre><code class="language-css" <pre><code class="language-css"
>@font-face { >@font-face {
font-family: 'iconfont'; font-family: 'iconfont';
src: url('iconfont.woff2?t=1782200893170') format('woff2'), src: url('iconfont.woff2?t=1783330740989') format('woff2'),
url('iconfont.woff?t=1782200893170') format('woff'), url('iconfont.woff?t=1783330740989') format('woff'),
url('iconfont.ttf?t=1782200893170') format('truetype'); url('iconfont.ttf?t=1783330740989') format('truetype');
} }
</code></pre> </code></pre>
<h3 id="-iconfont-">第二步:定义使用 iconfont 的样式</h3> <h3 id="-iconfont-">第二步:定义使用 iconfont 的样式</h3>
@@ -454,6 +508,87 @@
<div class="content font-class"> <div class="content font-class">
<ul class="icon_lists dib-box"> <ul class="icon_lists dib-box">
<li class="dib">
<span class="icon iconfont icon-daima"></span>
<div class="name">
代码
</div>
<div class="code-name">.icon-daima
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-word"></span>
<div class="name">
word
</div>
<div class="code-name">.icon-word
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-qitalingyu"></span>
<div class="name">
其他领域
</div>
<div class="code-name">.icon-qitalingyu
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-wenjianjia1"></span>
<div class="name">
文件夹
</div>
<div class="code-name">.icon-wenjianjia1
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-execl"></span>
<div class="name">
execl
</div>
<div class="code-name">.icon-execl
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-TXT1"></span>
<div class="name">
TXT
</div>
<div class="code-name">.icon-TXT1
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-PPT1"></span>
<div class="name">
PPT
</div>
<div class="code-name">.icon-PPT1
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-ZIP"></span>
<div class="name">
ZIP
</div>
<div class="code-name">.icon-ZIP
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-PDF1"></span>
<div class="name">
PDF
</div>
<div class="code-name">.icon-PDF1
</div>
</li>
<li class="dib"> <li class="dib">
<span class="icon iconfont icon-cloud"></span> <span class="icon iconfont icon-cloud"></span>
<div class="name"> <div class="name">
@@ -1012,6 +1147,78 @@
<div class="content symbol"> <div class="content symbol">
<ul class="icon_lists dib-box"> <ul class="icon_lists dib-box">
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-daima"></use>
</svg>
<div class="name">代码</div>
<div class="code-name">#icon-daima</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-word"></use>
</svg>
<div class="name">word</div>
<div class="code-name">#icon-word</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-qitalingyu"></use>
</svg>
<div class="name">其他领域</div>
<div class="code-name">#icon-qitalingyu</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-wenjianjia1"></use>
</svg>
<div class="name">文件夹</div>
<div class="code-name">#icon-wenjianjia1</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-execl"></use>
</svg>
<div class="name">execl</div>
<div class="code-name">#icon-execl</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-TXT1"></use>
</svg>
<div class="name">TXT</div>
<div class="code-name">#icon-TXT1</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-PPT1"></use>
</svg>
<div class="name">PPT</div>
<div class="code-name">#icon-PPT1</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-ZIP"></use>
</svg>
<div class="name">ZIP</div>
<div class="code-name">#icon-ZIP</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-PDF1"></use>
</svg>
<div class="name">PDF</div>
<div class="code-name">#icon-PDF1</div>
</li>
<li class="dib"> <li class="dib">
<svg class="icon svg-icon" aria-hidden="true"> <svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-cloud"></use> <use xlink:href="#icon-cloud"></use>

View File

@@ -1,8 +1,8 @@
@font-face { @font-face {
font-family: "iconfont"; /* Project id 4890805 */ font-family: "iconfont"; /* Project id 4890805 */
src: url('iconfont.woff2?t=1782200893170') format('woff2'), src: url('iconfont.woff2?t=1783330740989') format('woff2'),
url('iconfont.woff?t=1782200893170') format('woff'), url('iconfont.woff?t=1783330740989') format('woff'),
url('iconfont.ttf?t=1782200893170') format('truetype'); url('iconfont.ttf?t=1783330740989') format('truetype');
} }
.iconfont { .iconfont {
@@ -13,6 +13,42 @@
-moz-osx-font-smoothing: grayscale; -moz-osx-font-smoothing: grayscale;
} }
.icon-daima:before {
content: "\e695";
}
.icon-word:before {
content: "\e64c";
}
.icon-qitalingyu:before {
content: "\e62f";
}
.icon-wenjianjia1:before {
content: "\e63a";
}
.icon-execl:before {
content: "\e64d";
}
.icon-TXT1:before {
content: "\e64e";
}
.icon-PPT1:before {
content: "\e64f";
}
.icon-ZIP:before {
content: "\e650";
}
.icon-PDF1:before {
content: "\e651";
}
.icon-cloud:before { .icon-cloud:before {
content: "\e988"; content: "\e988";
} }

File diff suppressed because one or more lines are too long

View File

@@ -5,6 +5,69 @@
"css_prefix_text": "icon-", "css_prefix_text": "icon-",
"description": "", "description": "",
"glyphs": [ "glyphs": [
{
"icon_id": "1767709",
"name": "代码",
"font_class": "daima",
"unicode": "e695",
"unicode_decimal": 59029
},
{
"icon_id": "6294488",
"name": "word",
"font_class": "word",
"unicode": "e64c",
"unicode_decimal": 58956
},
{
"icon_id": "1460463",
"name": "其他领域",
"font_class": "qitalingyu",
"unicode": "e62f",
"unicode_decimal": 58927
},
{
"icon_id": "5194070",
"name": "文件夹",
"font_class": "wenjianjia1",
"unicode": "e63a",
"unicode_decimal": 58938
},
{
"icon_id": "6294485",
"name": "execl",
"font_class": "execl",
"unicode": "e64d",
"unicode_decimal": 58957
},
{
"icon_id": "6294486",
"name": "TXT",
"font_class": "TXT1",
"unicode": "e64e",
"unicode_decimal": 58958
},
{
"icon_id": "6294487",
"name": "PPT",
"font_class": "PPT1",
"unicode": "e64f",
"unicode_decimal": 58959
},
{
"icon_id": "6294528",
"name": "ZIP",
"font_class": "ZIP",
"unicode": "e650",
"unicode_decimal": 58960
},
{
"icon_id": "6294529",
"name": "PDF",
"font_class": "PDF1",
"unicode": "e651",
"unicode_decimal": 58961
},
{ {
"icon_id": "18170211", "icon_id": "18170211",
"name": "云端,云,云服务", "name": "云端,云,云服务",