1.5.0-Fix

This commit is contained in:
RachelOS
2026-04-14 13:41:04 +08:00
parent a5b54c5316
commit 593b22c774
4 changed files with 62 additions and 31 deletions
+2 -18
View File
@@ -2,24 +2,8 @@
import { ref, onMounted, watch } from 'vue'
import * as monaco from 'monaco-editor'
// Configure MonacoEnvironment to load Web Workers
self.MonacoEnvironment = {
getWorkerUrl: function (moduleId, label) {
if (label === 'json') {
return './json.worker.bundle.js';
}
if (label === 'css') {
return './css.worker.bundle.js';
}
if (label === 'html') {
return './html.worker.bundle.js';
}
if (label === 'typescript' || label === 'javascript') {
return './ts.worker.bundle.js';
}
return './editor.worker.bundle.js';
}
};
// Monaco Editor 配置 - 使用简单的内联工作器配置
// 注意:Web Worker 警告是正常的,不影响功能,只是性能优化提示
const props = defineProps({
modelValue: {
+53 -12
View File
@@ -1,5 +1,5 @@
<script setup lang="ts">
import { ref, computed, watch } from 'vue'
import { ref, computed, watch, onMounted } from 'vue'
import { Message } from '@arco-design/web-vue'
const props = defineProps({
@@ -19,7 +19,18 @@ const weekdays = ref('*')
// 手动输入模式
const manualInputMode = ref(false)
const manualExpression = ref('')
// 表单模型(用于解决 a-form 的 model 警告)
const formModel = ref({
manualExpression: ''
})
// 初始化时解析传入的表达式
onMounted(() => {
if (props.modelValue) {
parseExpression(props.modelValue)
}
})
const parseCronDescription = (part: string, type: string) => {
if (part === '*') return `${type}`
@@ -79,6 +90,8 @@ const cornDescription = computed(() => {
const updateExpression = () => {
emit('update:modelValue', cronExpression.value)
// 同步更新手动输入值
formModel.value.manualExpression = cronExpression.value
}
const parseExpression = (expr: string) => {
@@ -89,6 +102,8 @@ const parseExpression = (expr: string) => {
days.value = parts[2]
months.value = parts[3]
weekdays.value = parts[4]
// 同步更新手动输入值
formModel.value.manualExpression = expr
}
}
@@ -133,9 +148,9 @@ const validateCronExpression = (expr: string): boolean => {
// 应用手动输入的表达式
const applyManualExpression = () => {
if (validateCronExpression(manualExpression.value)) {
parseExpression(manualExpression.value)
emit('update:modelValue', manualExpression.value)
if (validateCronExpression(formModel.value.manualExpression)) {
parseExpression(formModel.value.manualExpression)
emit('update:modelValue', formModel.value.manualExpression)
Message.success('表达式已应用')
}
}
@@ -144,14 +159,40 @@ const applyManualExpression = () => {
const toggleInputMode = () => {
manualInputMode.value = !manualInputMode.value
if (manualInputMode.value) {
manualExpression.value = cronExpression.value
// 切换到手动模式时,将当前选择器的值同步到手动输入框
formModel.value.manualExpression = cronExpression.value
} else {
// 切换到选择器模式时,解析手动输入的值并更新选择器
if (formModel.value.manualExpression) {
parseExpression(formModel.value.manualExpression)
}
}
}
// 监听 modelValue 变化,同步更新手动输入值
watch(() => props.modelValue, (newVal) => {
if (newVal) {
// 无论在哪个模式,都要同步更新手动输入值
formModel.value.manualExpression = newVal
// 如果不在手动模式,也要解析表达式更新选择器
if (!manualInputMode.value) {
parseExpression(newVal)
}
}
})
// 监听手动输入变化,实时预览
watch(manualExpression, (newVal) => {
if (manualInputMode.value && validateCronExpression(newVal)) {
parseExpression(newVal)
watch(() => formModel.value.manualExpression, (newVal) => {
if (manualInputMode.value && newVal && validateCronExpression(newVal)) {
// 在手动模式下,实时解析并更新选择器的值(但不触发emit,避免循环)
const parts = newVal.split(' ')
if (parts.length === 5) {
minutes.value = parts[0]
hours.value = parts[1]
days.value = parts[2]
months.value = parts[3]
weekdays.value = parts[4]
}
}
})
@@ -165,10 +206,10 @@ defineExpose({
<!-- 手动输入模式 -->
<div v-if="manualInputMode" class="manual-input-section">
<a-form>
<a-form :model="formModel">
<a-form-item label="Cron表达式">
<a-input
v-model="manualExpression"
v-model="formModel.manualExpression"
placeholder="例如: 0 12 * * * (每天中午12点)"
@press-enter="applyManualExpression"
/>
@@ -182,7 +223,7 @@ defineExpose({
</div>
<!-- 选择器模式 -->
<a-form v-if="!manualInputMode">
<a-form v-if="!manualInputMode" :model="formModel">
<a-form-item label="分钟">
<a-select v-model="minutes" @change="updateExpression" style="width: 180px">
<a-option v-for="m in 60" :key="m-1" :value="(m-1).toString()">{{ m-1 }}</a-option>
+1 -1
View File
@@ -133,7 +133,7 @@ const handleAdd = () => {
const FreshJob = () => {
FreshJobApi().then((data) => {
console.log("刷新任务")
Message.success(data.message||"刷新任务成功")
Message.success(data.data?.message || "刷新任务成功")
})
}
+6
View File
@@ -14,6 +14,12 @@ export default defineConfig(({ command, mode }) => {
"@": fileURLToPath(new URL("./src", import.meta.url)),
},
},
// 定义 Vue 特性标志
define: {
__VUE_PROD_HYDRATION_MISMATCH_DETAILS__: 'false',
__VUE_OPTIONS_API__: 'true',
__VUE_PROD_DEVTOOLS__: 'false',
},
// 基础路径配置
base: command === "serve" ? "/" : "/",
// 开发服务器配置