feat: Update CellData.sql with new SELECT and DROP statements; enhance ScriptPanel.vue with collapsible log section and SQL completion support

This commit is contained in:
2026-06-25 18:05:19 +08:00
parent c31228d174
commit 639bae694d
3 changed files with 66 additions and 32 deletions
+15 -1
View File
@@ -1 +1,15 @@
# demo SELECT * FROM `cellinfo`;
DROP TABLE IF EXISTS `4G`;
DROP TABLE IF EXISTS `5G`;
DROP TABLE IF EXISTS `4G_Date`;
DROP TABLE IF EXISTS `4G_MAX`;
DROP TABLE IF EXISTS `CCE_MAX`;
DROP TABLE IF EXISTS `ULPRB_MAX`;
DROP TABLE IF EXISTS `DLPRB_MAX`;
DROP TABLE IF EXISTS `4G_MAX_IDX`;
DROP TABLE IF EXISTS `CCE_MAX_IDX`;
DROP TABLE IF EXISTS `ULPRB_MAX_IDX`;
DROP TABLE IF EXISTS `DLPRB_MAX_IDX`;
DROP TABLE IF EXISTS `日流量`;
DROP TABLE IF EXISTS `4G日均流量`;
DROP TABLE IF EXISTS `4G_结果表`;
+47 -12
View File
@@ -5,17 +5,15 @@
</div> </div>
<div v-if="taskStatus || taskId" class="script-process-section"> <div v-if="taskStatus || taskId" class="script-process-section">
<div class="upload-process-card script-process-card"> <n-collapse>
<div class="card-header"> <n-collapse-item name="log">
<div class="card-header-left"> <template #header>
<span class="card-title">脚本执行进度</span> <span class="card-title">脚本执行进度</span>
<span class="process-status" :class="statusClass">{{ statusText }}</span> <span class="process-status" :class="statusClass" style="margin-left:8px">{{ statusText }}</span>
</div> </template>
<div class="card-header-right"> <template #header-extra>
<n-button size="small" tertiary :disabled="!taskId" @click="refreshStatus">刷新</n-button> <n-button size="tiny" quaternary :disabled="!taskId" @click.stop="refreshStatus">刷新</n-button>
</div> </template>
</div>
<div class="card-body">
<div class="colored-log-panel script-log" role="log" aria-label="脚本执行日志"> <div class="colored-log-panel script-log" role="log" aria-label="脚本执行日志">
<pre class="colored-log-content"><span <pre class="colored-log-content"><span
v-for="(line, index) in logLines" v-for="(line, index) in logLines"
@@ -24,8 +22,8 @@
:class="`log-level-${line.level}`" :class="`log-level-${line.level}`"
>{{ line.text }}</span></pre> >{{ line.text }}</span></pre>
</div> </div>
</div> </n-collapse-item>
</div> </n-collapse>
</div> </div>
<div class="script-status-bar"> <div class="script-status-bar">
@@ -48,6 +46,7 @@ import {
import * as monaco from 'monaco-editor/esm/vs/editor/editor.api.js'; import * as monaco from 'monaco-editor/esm/vs/editor/editor.api.js';
import editorWorker from 'monaco-editor/esm/vs/editor/editor.worker?worker'; import editorWorker from 'monaco-editor/esm/vs/editor/editor.worker?worker';
import 'monaco-editor/esm/vs/basic-languages/sql/sql.contribution'; import 'monaco-editor/esm/vs/basic-languages/sql/sql.contribution';
import { language as mysqlLanguage } from 'monaco-editor/esm/vs/basic-languages/mysql/mysql.js';
import { apiPost } from '../api/client'; import { apiPost } from '../api/client';
import type { ApiMessage, ScriptContent, TaskStatus } from '../types'; import type { ApiMessage, ScriptContent, TaskStatus } from '../types';
@@ -220,6 +219,42 @@ function createEditor() {
void saveScript(); void saveScript();
}); });
const completionItems: Array<{ label: string; kind: monaco.languages.CompletionItemKind }> = [];
const seen = new Set<string>();
const add = (list: string[] | undefined, kind: monaco.languages.CompletionItemKind) => {
for (const item of list || []) {
const upper = item.toUpperCase();
if (!seen.has(upper)) {
seen.add(upper);
completionItems.push({ label: upper, kind });
}
}
};
add(mysqlLanguage.keywords as string[], monaco.languages.CompletionItemKind.Keyword);
add(mysqlLanguage.operators as string[], monaco.languages.CompletionItemKind.Operator);
add(mysqlLanguage.builtinFunctions as string[], monaco.languages.CompletionItemKind.Function);
disposables.push(
monaco.languages.registerCompletionItemProvider('sql', {
provideCompletionItems(model, position) {
const word = model.getWordUntilPosition(position);
const range = {
startLineNumber: position.lineNumber,
endLineNumber: position.lineNumber,
startColumn: word.startColumn,
endColumn: word.endColumn,
};
return {
suggestions: completionItems.map(item => ({
label: item.label,
kind: item.kind,
insertText: item.label,
range,
})),
};
},
})
);
updateCursor(); updateCursor();
} }
+4 -19
View File
@@ -2248,28 +2248,13 @@ select {
} }
.script-process-section { .script-process-section {
flex: 0 1 clamp(168px, 26vh, 280px); flex: 0 0 auto;
min-height: 148px;
margin: 8px 16px 0; margin: 8px 16px 0;
overflow: hidden;
} }
.script-process-card { .script-process-section .script-log {
display: flex; max-height: clamp(140px, 22vh, 240px);
height: 100%; overflow: auto;
min-height: 0;
flex-direction: column;
}
.script-process-section .card-body {
flex: 1;
min-height: 0;
padding: 12px 16px 16px;
}
.script-log {
height: 100%;
min-height: 0;
} }
/* ==================== Responsive ==================== */ /* ==================== Responsive ==================== */