程控源调整

This commit is contained in:
caozehui
2026-06-25 10:52:19 +08:00
parent 1a35510801
commit 2ea0557f4e
3 changed files with 111 additions and 16 deletions

View File

@@ -158,18 +158,20 @@
type="primary" type="primary"
size="large" size="large"
@click="startLoading" @click="startLoading"
:disabled="pauseDisabled" :loading="isStarting"
:disabled="props.startDisabeld || isStarting || isStopping"
> >
启动 {{ isStarting ? '启动中' : '启动' }}
</el-button> </el-button>
<el-button <el-button
:icon="VideoPause" :icon="VideoPause"
type="primary" type="danger"
size="large" size="large"
@click="stopLoading" @click="stopLoading"
:disabled="pauseDisabled" :loading="isStopping"
:disabled="props.pauseDisabled || isStarting || isStopping"
> >
停止 {{ isStopping ? '停止中' : '停止' }}
</el-button> </el-button>
</div> </div>
</div> </div>
@@ -269,6 +271,10 @@ const tableData: any = ref([])
const tabData: any = ref([]) const tabData: any = ref([])
const showLoading = ref(false) const showLoading = ref(false)
const isStarting = ref(false)
const isStopping = ref(false)
const selectedScriptName = ref('')
const pendingScriptName = ref('')
const column = ref([ const column = ref([
{ {
label: 'L1', label: 'L1',
@@ -291,7 +297,13 @@ const hour = ref(0)
const minute = ref(0) const minute = ref(0)
const second = ref(0) const second = ref(0)
const emit = defineEmits(['update:activeName', 'update:activeIndex', 'update:startDisabeld', 'update:pauseDisabled']) const emit = defineEmits([
'update:activeName',
'update:activeIndex',
'update:startDisabeld',
'update:pauseDisabled',
'update:runningScriptName'
])
watch( watch(
() => props.formControl.scriptId, () => props.formControl.scriptId,
@@ -305,6 +317,16 @@ watch(
} }
} }
) )
watch(
() => props.startDisabeld,
value => {
if (!value) {
isStarting.value = false
}
}
)
const controlContent = ref<controlSource.ResControl>({ const controlContent = ref<controlSource.ResControl>({
userPageId: '', userPageId: '',
scriptId: '', scriptId: '',
@@ -376,6 +398,7 @@ const setTab = row => {
activeName.value = row.activeName activeName.value = row.activeName
childActiveName.value = row.childActiveName childActiveName.value = row.childActiveName
childActiveIndex.value = row.activeIndex childActiveIndex.value = row.activeIndex
selectedScriptName.value = row.scriptName || ''
getTree() getTree()
emit('update:activeName', activeName.value) // 触发事件并传递 activeName.value emit('update:activeName', activeName.value) // 触发事件并传递 activeName.value
emit('update:activeIndex', row.activeIndex) // 触发事件并传递 activeName.value emit('update:activeIndex', row.activeIndex) // 触发事件并传递 activeName.value
@@ -450,6 +473,12 @@ const view = (row: Partial<TestScript.ResTestScript> = {}) => {
// 定义 startLoading 方法 // 定义 startLoading 方法
const startLoading = async () => { const startLoading = async () => {
if (props.startDisabeld || isStarting.value || isStopping.value) {
return
}
isStarting.value = true
pendingScriptName.value = selectedScriptName.value
emit('update:startDisabeld', true) emit('update:startDisabeld', true)
emit('update:pauseDisabled', true) emit('update:pauseDisabled', true)
ElMessage.success({ message: '启动中...', duration: 6000 }) ElMessage.success({ message: '启动中...', duration: 6000 })
@@ -458,25 +487,49 @@ const startLoading = async () => {
controlContent.value.scriptId = props.formControl.scriptId controlContent.value.scriptId = props.formControl.scriptId
controlContent.value.scriptIndex = childActiveIndex.value controlContent.value.scriptIndex = childActiveIndex.value
controlContent.value.sourceId = props.formControl.sourceId controlContent.value.sourceId = props.formControl.sourceId
setTimeout(async () => {
try {
await new Promise(resolve => setTimeout(resolve, 3000))
await startSimulateTest(controlContent.value) await startSimulateTest(controlContent.value)
}, 3000) } catch (error) {
isStarting.value = false
pendingScriptName.value = ''
emit('update:startDisabeld', false)
emit('update:pauseDisabled', true)
ElMessage.error('启动失败!')
}
} }
// 定义 startLoading 方法 // 定义 startLoading 方法
const stopLoading = async () => { const stopLoading = async () => {
if (props.pauseDisabled || isStarting.value || isStopping.value) {
return
}
isStopping.value = true
// 启动加载逻辑 // 启动加载逻辑
controlContent.value.userPageId = JwtUtil.getLoginName() controlContent.value.userPageId = JwtUtil.getLoginName()
controlContent.value.scriptId = props.formControl.scriptId controlContent.value.scriptId = props.formControl.scriptId
controlContent.value.scriptIndex = childActiveIndex.value controlContent.value.scriptIndex = childActiveIndex.value
controlContent.value.sourceId = props.formControl.sourceId controlContent.value.sourceId = props.formControl.sourceId
try {
await closeSimulateTest(controlContent.value) await closeSimulateTest(controlContent.value)
emit('update:pauseDisabled', true) emit('update:pauseDisabled', true)
emit('update:startDisabeld', true) emit('update:startDisabeld', true)
ElMessage.success({ message: '停止中...', duration: 5000 }) ElMessage.success({ message: '停止中...', duration: 5000 })
} catch (error) {
isStopping.value = false
emit('update:pauseDisabled', false)
emit('update:startDisabeld', false)
ElMessage.error('停止失败!')
}
} }
const startTimeCount = () => { const startTimeCount = () => {
isStarting.value = false
emit('update:runningScriptName', pendingScriptName.value || selectedScriptName.value)
pendingScriptName.value = ''
// Loading效果展示 // Loading效果展示
showLoading.value = true showLoading.value = true
@@ -500,6 +553,8 @@ const secondToTime = (secd: number) => {
} }
const stopTimeCount = () => { const stopTimeCount = () => {
isStopping.value = false
emit('update:runningScriptName', '')
if (timer) { if (timer) {
clearInterval(timer) clearInterval(timer)
timer = null timer = null

View File

@@ -60,7 +60,8 @@ const handleNodeClick = (data, node) => {
emit('setTab', { emit('setTab', {
activeName: active, activeName: active,
childActiveName: childActive, childActiveName: childActive,
activeIndex:data.index activeIndex:data.index,
scriptName: data.sourceDesc || data.scriptTypeName || ''
}) })
} }
@@ -112,7 +113,8 @@ function handleCheckChange(data,isChecked) {
emit('setTab', { emit('setTab', {
activeName: data.scriptType, activeName: data.scriptType,
childActiveName: data.scriptTypeCode, childActiveName: data.scriptTypeCode,
activeIndex:data.index activeIndex:data.index,
scriptName: data.sourceDesc || data.scriptTypeName || ''
}) })
} }
} }

View File

@@ -53,8 +53,12 @@
<el-card v-if="show" style="margin-bottom: 10px"> <el-card v-if="show" style="margin-bottom: 10px">
<div class="connection-status-row"> <div class="connection-status-row">
<div class="connection-status-left">
<span class="connection-status-dot" :class="`is-${connectionState.status}`"></span> <span class="connection-status-dot" :class="`is-${connectionState.status}`"></span>
<span>{{ connectionStatusText }}</span> <span class="connection-status-text">{{ connectionStatusText }}</span>
</div>
<el-divider direction="vertical" />
<div class="running-script-status" :title="runningScriptStatusText">{{ runningScriptStatusText }}</div>
</div> </div>
</el-card> </el-card>
@@ -71,6 +75,7 @@
@update:startDisabeld="startDisabeld = $event" @update:startDisabeld="startDisabeld = $event"
v-model:pauseDisabled="pauseDisabled" v-model:pauseDisabled="pauseDisabled"
@update:pauseDisabled="pauseDisabled = $event" @update:pauseDisabled="pauseDisabled = $event"
@update:runningScriptName="runningScriptName = $event"
/> />
</el-card> </el-card>
</div> </div>
@@ -128,6 +133,7 @@ const formContent = ref<TestScript.ResTestScript>({
const connectionState = ref(createDisconnectedState()); const connectionState = ref(createDisconnectedState());
const startDisabeld = ref(true); const startDisabeld = ref(true);
const pauseDisabled = ref(true); const pauseDisabled = ref(true);
const runningScriptName = ref("");
const controlSourceDetailRef = ref<InstanceType<typeof ControlSourceDetail>>(); const controlSourceDetailRef = ref<InstanceType<typeof ControlSourceDetail>>();
const controlContent = ref<controlSource.ResControl>({ const controlContent = ref<controlSource.ResControl>({
@@ -171,6 +177,9 @@ const closeSocket = () => {
const isSourceSwitchEnabled = computed(() => isSourceSelectable(connectionState.value)); const isSourceSwitchEnabled = computed(() => isSourceSelectable(connectionState.value));
const isConnectButtonEnabled = computed(() => canConnect(connectionState.value)); const isConnectButtonEnabled = computed(() => canConnect(connectionState.value));
const connectionStatusText = computed(() => getConnectionStatusText(connectionState.value)); const connectionStatusText = computed(() => getConnectionStatusText(connectionState.value));
const runningScriptStatusText = computed(() =>
runningScriptName.value ? `当前正在加量的脚本:${runningScriptName.value}` : "当前无正在加量脚本"
);
const connectionStatusColor = computed(() => { const connectionStatusColor = computed(() => {
switch (connectionState.value.status) { switch (connectionState.value.status) {
case "connecting": case "connecting":
@@ -363,6 +372,7 @@ watch(
resetConnectionState(); resetConnectionState();
startDisabeld.value = true; startDisabeld.value = true;
pauseDisabled.value = true; pauseDisabled.value = true;
runningScriptName.value = "";
controlSourceDetailRef.value?.stopTimeCount(); controlSourceDetailRef.value?.stopTimeCount();
} }
); );
@@ -481,9 +491,37 @@ const start = async () => {
align-items: center; align-items: center;
gap: 8px; gap: 8px;
color: var(--el-text-color-regular); color: var(--el-text-color-regular);
min-width: 0;
white-space: nowrap;
overflow: hidden;
}
.connection-status-left {
flex: 0 0 10%;
min-width: 0;
display: flex;
align-items: center;
gap: 8px;
overflow: hidden;
}
.connection-status-text {
min-width: 0;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.running-script-status {
flex: 0 0 80%;
min-width: 0;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
} }
.connection-status-dot { .connection-status-dot {
flex: 0 0 auto;
width: 8px; width: 8px;
height: 8px; height: 8px;
border-radius: 50%; border-radius: 50%;