'commit'
This commit is contained in:
104
static/js/app.js
104
static/js/app.js
@@ -9,12 +9,18 @@ createApp({
|
||||
|
||||
// Ad Overlay State
|
||||
const showAd = ref(true);
|
||||
const adCountdown = ref(10);
|
||||
const adCountdown = ref(15);
|
||||
let adTimer = null;
|
||||
|
||||
const apiBase = ref(window.location.origin || "http://localhost:8000");
|
||||
const isMobile = ref(window.innerWidth <= 768);
|
||||
|
||||
// Douyin State
|
||||
const shareText = ref('');
|
||||
const douyinLoading = ref(false);
|
||||
const douyinRecords = ref([]);
|
||||
let douyinTimer = null;
|
||||
|
||||
// Handle window resize
|
||||
window.addEventListener('resize', () => {
|
||||
isMobile.value = window.innerWidth <= 768;
|
||||
@@ -509,6 +515,86 @@ createApp({
|
||||
if (adTimer) clearInterval(adTimer);
|
||||
};
|
||||
|
||||
// Douyin Methods
|
||||
const startParsing = async () => {
|
||||
if (!shareText.value.trim()) return;
|
||||
douyinLoading.value = true;
|
||||
try {
|
||||
const response = await axios.post(apiBase.value + '/api/parse', { text: shareText.value });
|
||||
if (response.data.id || (response.data.ids && response.data.ids.length > 0)) {
|
||||
shareText.value = '';
|
||||
fetchDouyinRecords();
|
||||
if (typeof ElementPlus !== 'undefined') {
|
||||
const count = response.data.ids ? response.data.ids.length : 1;
|
||||
ElementPlus.ElMessage.success(`成功提交 ${count} 个解析任务`);
|
||||
}
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('Error:', error);
|
||||
if (typeof ElementPlus !== 'undefined') ElementPlus.ElMessage.error('解析请求失败');
|
||||
} finally {
|
||||
douyinLoading.value = false;
|
||||
}
|
||||
};
|
||||
|
||||
const fetchDouyinRecords = async (isManual) => {
|
||||
try {
|
||||
const response = await axios.get(apiBase.value + '/api/records');
|
||||
const newRecords = response.data;
|
||||
douyinRecords.value = newRecords.map(newRec => {
|
||||
const oldRec = douyinRecords.value.find(r => r.id === newRec.id);
|
||||
return {
|
||||
...newRec,
|
||||
expanded: oldRec ? oldRec.expanded : false,
|
||||
showOriginal: oldRec ? oldRec.showOriginal : false
|
||||
};
|
||||
});
|
||||
if (isManual === true || (isManual && isManual.type === 'click')) {
|
||||
if (typeof ElementPlus !== 'undefined') ElementPlus.ElMessage.success('列表已刷新');
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('Error fetching records:', error);
|
||||
if (isManual === true || (isManual && isManual.type === 'click')) {
|
||||
if (typeof ElementPlus !== 'undefined') ElementPlus.ElMessage.error('刷新失败');
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
const deleteRecord = async (id) => {
|
||||
if (!confirm('确定要删除这条记录吗?')) return;
|
||||
try {
|
||||
await axios.delete(apiBase.value + `/api/records/${id}`);
|
||||
fetchDouyinRecords();
|
||||
if (typeof ElementPlus !== 'undefined') ElementPlus.ElMessage.success('删除成功');
|
||||
} catch (error) {
|
||||
console.error('Error deleting:', error);
|
||||
if (typeof ElementPlus !== 'undefined') ElementPlus.ElMessage.error('删除失败');
|
||||
}
|
||||
};
|
||||
|
||||
const statusColor = (status) => {
|
||||
switch(status) {
|
||||
case 'COMPLETED': return '#10b981';
|
||||
case 'FAILED': return '#ef4444';
|
||||
case 'PROCESSING': return '#3b82f6';
|
||||
default: return '#9ca3af';
|
||||
}
|
||||
};
|
||||
|
||||
const statusType = (status) => {
|
||||
switch(status) {
|
||||
case 'COMPLETED': return 'success';
|
||||
case 'FAILED': return 'danger';
|
||||
case 'PROCESSING': return 'primary';
|
||||
default: return 'info';
|
||||
}
|
||||
};
|
||||
|
||||
const formatDate = (dateStr) => {
|
||||
if (!dateStr) return '';
|
||||
return new Date(dateStr).toLocaleString();
|
||||
};
|
||||
|
||||
// ==========================================
|
||||
// Lifecycle
|
||||
// ==========================================
|
||||
@@ -516,8 +602,19 @@ createApp({
|
||||
// Dashboard init
|
||||
initChart();
|
||||
loadAllOperatorsPrices();
|
||||
startAiAnalysis();
|
||||
// startAiAnalysis(); // Removed auto-start
|
||||
placeholder.value = "请点击右上角“开始分析”按钮以获取报告。";
|
||||
|
||||
// Douyin init
|
||||
fetchDouyinRecords();
|
||||
if (douyinTimer) clearInterval(douyinTimer);
|
||||
douyinTimer = setInterval(() => {
|
||||
// Only poll if tab is active
|
||||
if (activeTab.value === 'douyin') {
|
||||
fetchDouyinRecords();
|
||||
}
|
||||
}, 3000);
|
||||
|
||||
// Start Chart Type Carousel (10s interval)
|
||||
if (chartInterval) clearInterval(chartInterval);
|
||||
chartInterval = setInterval(() => {
|
||||
@@ -558,6 +655,9 @@ createApp({
|
||||
// Degree
|
||||
userQuery, queryLoading, queryResult, examples,
|
||||
handleDegreeSearch, setExample, renderedResult, stopDegreeGeneration,
|
||||
// Douyin
|
||||
shareText, douyinLoading, douyinRecords,
|
||||
startParsing, fetchDouyinRecords, deleteRecord, statusColor, statusType, formatDate,
|
||||
// Ad
|
||||
showAd, adCountdown, closeAd
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user