207 lines
6.4 KiB
PHP
207 lines
6.4 KiB
PHP
<?php
|
||
// 处理AI摘要保存
|
||
if (isset($_POST['save_ai_summary']) && $_POST['save_ai_summary'] == '1') {
|
||
$postId = intval($_POST['post_id']);
|
||
$summary = trim($_POST['summary_content']);
|
||
|
||
if ($postId > 0 && !empty($summary)) {
|
||
$db = Typecho_Db::get();
|
||
|
||
// 检查字段是否存在
|
||
$field = $db->fetchRow($db->select()
|
||
->from('table.fields')
|
||
->where('cid = ?', $postId)
|
||
->where('name = ?', 'description'));
|
||
|
||
if ($field) {
|
||
// 更新字段
|
||
$db->query($db->update('table.fields')
|
||
->rows(array('str_value' => $summary))
|
||
->where('cid = ?', $postId)
|
||
->where('name = ?', 'description'));
|
||
} else {
|
||
// 插入新字段
|
||
$db->query($db->insert('table.fields')
|
||
->rows(array(
|
||
'cid' => $postId,
|
||
'name' => 'description',
|
||
'type' => 'str',
|
||
'str_value' => $summary,
|
||
'int_value' => 0
|
||
)));
|
||
}
|
||
|
||
// 注意:这里不重定向,因为前端使用AJAX
|
||
}
|
||
}
|
||
?>
|
||
<?php if (!defined("__TYPECHO_ROOT_DIR__")) {exit();} ?>
|
||
|
||
<?php $this->footer(); ?>
|
||
|
||
<div class="flex grow flex-col justify-between top">
|
||
<ul class="flex flex-col flex-wrap content-center gap-y-2 ">
|
||
<li class="relative nav-li">
|
||
<button onclick="jasmine.switchDark()" title="日夜模式" id="theme-toggle">
|
||
<iconify-icon id="theme-icon"
|
||
class="rounded px-2 py-1 text-2xl jasmine-primary-bg-hover btop"></iconify-icon>
|
||
</button>
|
||
</li>
|
||
|
||
<?php if (class_exists('TocPlugin_Plugin')): ?>
|
||
<?php echo TocPlugin_Plugin::outputNavigationButtons(); ?>
|
||
<?php endif; ?>
|
||
</ul>
|
||
</div>
|
||
|
||
<script>
|
||
<?php $this->options->customScript(); ?>
|
||
</script>
|
||
<!-- OwO 表情 -->
|
||
<script src="<?php $this->options->themeUrl('/owo/OwO.min.js'); ?>"></script>
|
||
<!--图片灯箱JS 2024.2.3-->
|
||
<script src="https://qcm.xgsd.cc/js/view-image.min.js"></script>
|
||
<script>window.ViewImage && ViewImage.init('.markdown-body img');</script>
|
||
<script>
|
||
<?php $this->options->customScript(); ?>
|
||
</script>
|
||
|
||
<?php if($this->fields->zhaiyao):?>
|
||
<?php if ($this->is("post")): ?>
|
||
<link rel="stylesheet" href="https://www.shitoucuo.com/usr/themes/sagrre/assets/dist/tianli_gpt.css">
|
||
<script>
|
||
let tianliGPT_wordLimit = 5000;
|
||
let tianliGPT_postSelector = '.markdown-body';
|
||
let tianliGPT_key = 'b1b2e6754734b2ad1e1b64e75b1c3956eb15';
|
||
|
||
// 标记是否已保存,防止重复保存
|
||
let aiSummarySaved = false;
|
||
|
||
// 获取完整的AI摘要内容
|
||
function getFullAISummary() {
|
||
const element = document.querySelector('.tianliGPT-explanation');
|
||
if (element && element.textContent && element.textContent.length > 20) {
|
||
return element.textContent.trim();
|
||
}
|
||
return null;
|
||
}
|
||
|
||
// 保存到字段(使用AJAX,不刷新页面)
|
||
function saveToDescription(postId, summary) {
|
||
if (aiSummarySaved) return;
|
||
|
||
console.log('保存AI摘要,长度:', summary.length);
|
||
|
||
// 使用FormData发送请求
|
||
const formData = new FormData();
|
||
formData.append('save_ai_summary', '1');
|
||
formData.append('post_id', postId);
|
||
formData.append('summary_content', summary);
|
||
|
||
fetch('', {
|
||
method: 'POST',
|
||
body: formData
|
||
})
|
||
.then(response => response.text())
|
||
.then(() => {
|
||
console.log('AI摘要保存成功');
|
||
aiSummarySaved = true;
|
||
})
|
||
.catch(error => {
|
||
console.log('保存完成');
|
||
});
|
||
}
|
||
|
||
// 检查并保存AI摘要
|
||
function checkAndSaveAISummary() {
|
||
if (aiSummarySaved) return true;
|
||
|
||
const postId = <?php echo $this->cid; ?>;
|
||
const summary = getFullAISummary();
|
||
|
||
if (summary && summary.length > 50) { // 确保是完整的摘要
|
||
console.log('找到完整AI摘要,长度:', summary.length);
|
||
saveToDescription(postId, summary);
|
||
return true;
|
||
}
|
||
|
||
return false;
|
||
}
|
||
|
||
// 智能监听AI摘要生成
|
||
function initAISummarySaver() {
|
||
// 先等待一段时间,让AI摘要完全生成
|
||
setTimeout(() => {
|
||
// 第一次检查
|
||
if (!checkAndSaveAISummary()) {
|
||
// 设置一个较长的检查间隔,避免频繁检查
|
||
let checkCount = 0;
|
||
const maxChecks = 5;
|
||
|
||
const checkInterval = setInterval(() => {
|
||
checkCount++;
|
||
if (checkAndSaveAISummary() || checkCount >= maxChecks) {
|
||
clearInterval(checkInterval);
|
||
}
|
||
}, 3000); // 每3秒检查一次
|
||
}
|
||
}, 8000); // 等待8秒后开始检查,给AI摘要足够时间生成
|
||
|
||
// 监听DOM变化,但只在AI摘要区域变化时处理
|
||
const observer = new MutationObserver((mutations) => {
|
||
if (aiSummarySaved) {
|
||
observer.disconnect();
|
||
return;
|
||
}
|
||
|
||
for (let mutation of mutations) {
|
||
for (let node of mutation.addedNodes) {
|
||
if (node.nodeType === 1) {
|
||
// 只有当新增的元素包含AI摘要时才处理
|
||
if (node.classList && node.classList.contains('tianliGPT-explanation')) {
|
||
console.log('检测到AI摘要元素变化');
|
||
setTimeout(() => checkAndSaveAISummary(), 1000);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
});
|
||
|
||
// 只观察AI摘要区域的变化
|
||
const aiContainer = document.querySelector('.tianli-gpt');
|
||
if (aiContainer) {
|
||
observer.observe(aiContainer, {
|
||
childList: true,
|
||
subtree: true,
|
||
characterData: true
|
||
});
|
||
}
|
||
}
|
||
|
||
// 页面加载完成后启动
|
||
document.addEventListener('DOMContentLoaded', function() {
|
||
// 延迟启动,避免干扰AI摘要的正常生成
|
||
setTimeout(initAISummarySaver, 2000);
|
||
});
|
||
|
||
// 如果页面已经加载完成
|
||
if (document.readyState === 'complete') {
|
||
setTimeout(initAISummarySaver, 2000);
|
||
}
|
||
</script>
|
||
<script src="https://www.shitoucuo.com/usr/themes/sagrre/assets/dist/tianli_gpt.min.js"></script>
|
||
<?php endif; ?>
|
||
<?php endif; ?>
|
||
<script>
|
||
|
||
/*评论表情配置*/
|
||
var OwO_demo = new OwO({
|
||
|
||
target: document.getElementsByClassName('OwO-textarea')[0],
|
||
api: '/usr/themes/sagrre/owo/OwO.json',
|
||
position: 'down',
|
||
width: '66vw',
|
||
maxHeight: '250px'
|
||
});
|
||
</script>
|