前端模拟器设置增加预设、增加MuMu应用分身选项
All checks were successful
ci/woodpecker/push/check_format Pipeline was successful

This commit is contained in:
zhbaor 2024-12-10 09:47:22 +08:00
parent 66533a603e
commit 5f6ada0322
5 changed files with 182 additions and 104 deletions

View file

@ -1 +1 @@
.sss-container[data-v-b52b1842]{display:flex;width:100%;gap:8px}.wrapper[data-v-b52b1842]{white-space:pre-wrap;-webkit-user-select:text;user-select:text}.title[data-v-b52b1842]{font-size:18px;font-weight:500;margin-bottom:6px}p[data-v-d479d5bf]{margin:0 0 10px}.misc-container[data-v-d479d5bf]{display:flex;align-items:center;gap:12px}.header[data-v-d479d5bf]{margin:12px 0}.tasktable[data-v-6e42e723]{margin-top:4px;width:100%;overflow:scroll}.tasktable table[data-v-6e42e723]{border-collapse:collapse;width:100%}.btn-clear[data-v-6e42e723]{margin:4px}@media screen and (max-width: 1399px){.tasktable[data-v-6e42e723]{max-height:300px}.tasktable td[data-v-6e42e723]{width:10.2857142857%}.tasktable td[data-v-6e42e723]:first-child{width:10%}.tasktable td[data-v-6e42e723]:nth-child(2){width:18%}.tasktable thead[data-v-6e42e723]{position:sticky;top:0;background-color:#7ea5b4;z-index:1}}@media screen and (min-width: 1400px){.tasktable td[data-v-6e42e723]{width:10.2857142857%}.tasktable td[data-v-6e42e723]:first-child{width:10%}.tasktable td[data-v-6e42e723]:nth-child(2){width:18%}.tasktable thead[data-v-6e42e723]{background-color:#7ea5b4}}.class1[data-v-6e42e723]{background-color:var(--06f96d6a);text-align:center;vertical-align:middle}.class2[data-v-6e42e723]{background-color:var(--292d8683);text-align:center;vertical-align:middle}.custom-tag[data-v-6e42e723]{width:100%;height:100%;justify-content:space-between}.today[data-v-6e42e723]{font-weight:400;font-size:12px}.activity[data-v-6e42e723]{align-items:center;gap:4px!important}.card-title[data-v-6e42e723]{transition:.3s}.disabled[data-v-6e42e723]{color:var(--6d545694)}.form-item[data-v-6e42e723]{margin:0 0 4px}p[data-v-748f667d]{margin:2px 0}h4[data-v-748f667d]{margin:12px 0 8px}table[data-v-748f667d]{width:100%}td[data-v-748f667d]:nth-child(1){width:80px}.ignore-blacklist[data-v-748f667d]{margin-bottom:10px;display:flex;gap:12px}.h4[data-v-748f667d]{font-size:16px;font-weight:500}.maa-shop[data-v-748f667d]{margin:8px 0}.item[data-v-748f667d]{font-weight:500;font-size:16px}p[data-v-707c6f48]{margin:0 0 8px}h4[data-v-707c6f48]{margin:12px 0 10px}.big-table[data-v-707c6f48]{margin-top:10px;max-width:320px}.big-table th[data-v-707c6f48]{text-align:center}.big-table tr[data-v-707c6f48]{width:70px}.big-table td[data-v-707c6f48]{height:24px}.big-table td[data-v-707c6f48]:nth-child(1){width:70px;text-align:center}.big-table td[data-v-707c6f48]:nth-child(2){width:420px}.final[data-v-707c6f48]{margin:16px 0 0}.item[data-v-e95953da]{font-weight:500;font-size:16px}.n-divider[data-v-e95953da]:not(.n-divider--vertical){margin:6px 0}.subtitle[data-v-31c5d919]{margin:12px 0 6px}.misc-container{margin-top:12px;display:flex;align-items:center;gap:12px}.email-title[data-v-7cbc22ce]{width:100%}.expand[data-v-7cbc22ce]{flex-grow:1}.email-table[data-v-7cbc22ce]{width:100%;margin-bottom:12px}.email-test[data-v-7cbc22ce]{display:flex;align-items:center;gap:16px}.email-mode[data-v-7cbc22ce]{margin-left:20px}.email-label[data-v-7cbc22ce]{width:68px}p[data-v-7cbc22ce]{margin:0 0 10px}.mt-16[data-v-7cbc22ce]{margin-top:16px}.threshold[data-v-32cd0fe1]{display:flex;align-items:center;gap:14px;width:100%}.mower-basic[data-v-32cd0fe1]{width:100%}.mower-basic td[data-v-32cd0fe1]:nth-child(1){width:120px}.mower-basic td[data-v-32cd0fe1]:nth-child(3){padding-left:6px;width:40px}.riic-conf[data-v-32cd0fe1]{width:100%}.riic-conf td[data-v-32cd0fe1]:nth-child(1){width:130px}.riic-conf td[data-v-32cd0fe1]:nth-child(3){padding-left:12px;width:120px}.coord td[data-v-32cd0fe1]{width:120px}.coord td[data-v-32cd0fe1]:nth-child(1),.coord td[data-v-32cd0fe1]:nth-child(3){width:30px}.coord td[data-v-32cd0fe1]:nth-child(2){padding-right:30px}.coord-label[data-v-32cd0fe1]{width:40px;padding-left:8px}p[data-v-32cd0fe1]{margin:0 0 8px}h4[data-v-32cd0fe1]{margin:12px 0 10px}.time-table[data-v-32cd0fe1]{width:100%;margin-bottom:12px}.time-table td[data-v-32cd0fe1]:nth-child(1){width:40px}.scale[data-v-32cd0fe1]{width:60px;text-align:right}.scale-apply[data-v-32cd0fe1]{margin-left:24px}.waiting-table th[data-v-32cd0fe1],.waiting-table td[data-v-32cd0fe1]{padding:4px;min-width:70px;width:100px}.waiting-table th[data-v-32cd0fe1]:first-child,.waiting-table td[data-v-32cd0fe1]:first-child{width:auto;padding:4px 8px}@media (max-width: 1399px){.grid-two{margin:0 0 -10px;width:100%;max-width:600px}.grid-left{display:grid;row-gap:10px;grid-template-columns:100%}.grid-right{display:grid;row-gap:10px;grid-template-columns:100%;margin-top:10px}}@media (min-width: 1400px){.grid-two{display:grid;grid-template-columns:minmax(0px,1fr) minmax(0px,1fr);align-items:flex-start;gap:5px}.grid-left,.grid-right{display:grid;gap:5px;grid-template-columns:100%;max-width:600px}}.n-divider:not(.n-divider--vertical){margin:14px 0 8px} .sss-container[data-v-b52b1842]{display:flex;width:100%;gap:8px}.wrapper[data-v-b52b1842]{white-space:pre-wrap;-webkit-user-select:text;user-select:text}.title[data-v-b52b1842]{font-size:18px;font-weight:500;margin-bottom:6px}p[data-v-d479d5bf]{margin:0 0 10px}.misc-container[data-v-d479d5bf]{display:flex;align-items:center;gap:12px}.header[data-v-d479d5bf]{margin:12px 0}.tasktable[data-v-6e42e723]{margin-top:4px;width:100%;overflow:scroll}.tasktable table[data-v-6e42e723]{border-collapse:collapse;width:100%}.btn-clear[data-v-6e42e723]{margin:4px}@media screen and (max-width: 1399px){.tasktable[data-v-6e42e723]{max-height:300px}.tasktable td[data-v-6e42e723]{width:10.2857142857%}.tasktable td[data-v-6e42e723]:first-child{width:10%}.tasktable td[data-v-6e42e723]:nth-child(2){width:18%}.tasktable thead[data-v-6e42e723]{position:sticky;top:0;background-color:#7ea5b4;z-index:1}}@media screen and (min-width: 1400px){.tasktable td[data-v-6e42e723]{width:10.2857142857%}.tasktable td[data-v-6e42e723]:first-child{width:10%}.tasktable td[data-v-6e42e723]:nth-child(2){width:18%}.tasktable thead[data-v-6e42e723]{background-color:#7ea5b4}}.class1[data-v-6e42e723]{background-color:var(--06f96d6a);text-align:center;vertical-align:middle}.class2[data-v-6e42e723]{background-color:var(--292d8683);text-align:center;vertical-align:middle}.custom-tag[data-v-6e42e723]{width:100%;height:100%;justify-content:space-between}.today[data-v-6e42e723]{font-weight:400;font-size:12px}.activity[data-v-6e42e723]{align-items:center;gap:4px!important}.card-title[data-v-6e42e723]{transition:.3s}.disabled[data-v-6e42e723]{color:var(--6d545694)}.form-item[data-v-6e42e723]{margin:0 0 4px}p[data-v-748f667d]{margin:2px 0}h4[data-v-748f667d]{margin:12px 0 8px}table[data-v-748f667d]{width:100%}td[data-v-748f667d]:nth-child(1){width:80px}.ignore-blacklist[data-v-748f667d]{margin-bottom:10px;display:flex;gap:12px}.h4[data-v-748f667d]{font-size:16px;font-weight:500}.maa-shop[data-v-748f667d]{margin:8px 0}.item[data-v-748f667d]{font-weight:500;font-size:16px}p[data-v-707c6f48]{margin:0 0 8px}h4[data-v-707c6f48]{margin:12px 0 10px}.big-table[data-v-707c6f48]{margin-top:10px;max-width:320px}.big-table th[data-v-707c6f48]{text-align:center}.big-table tr[data-v-707c6f48]{width:70px}.big-table td[data-v-707c6f48]{height:24px}.big-table td[data-v-707c6f48]:nth-child(1){width:70px;text-align:center}.big-table td[data-v-707c6f48]:nth-child(2){width:420px}.final[data-v-707c6f48]{margin:16px 0 0}.item[data-v-e95953da]{font-weight:500;font-size:16px}.n-divider[data-v-e95953da]:not(.n-divider--vertical){margin:6px 0}.subtitle[data-v-31c5d919]{margin:12px 0 6px}.misc-container{margin-top:12px;display:flex;align-items:center;gap:12px}.email-title[data-v-7cbc22ce]{width:100%}.expand[data-v-7cbc22ce]{flex-grow:1}.email-table[data-v-7cbc22ce]{width:100%;margin-bottom:12px}.email-test[data-v-7cbc22ce]{display:flex;align-items:center;gap:16px}.email-mode[data-v-7cbc22ce]{margin-left:20px}.email-label[data-v-7cbc22ce]{width:68px}p[data-v-7cbc22ce]{margin:0 0 10px}.mt-16[data-v-7cbc22ce]{margin-top:16px}.threshold[data-v-e1745eff]{display:flex;align-items:center;gap:14px;width:100%}.mower-basic[data-v-e1745eff]{width:100%}.mower-basic td[data-v-e1745eff]:nth-child(1){width:120px}.mower-basic td[data-v-e1745eff]:nth-child(3){padding-left:6px;width:40px}.riic-conf[data-v-e1745eff]{width:100%}.riic-conf td[data-v-e1745eff]:nth-child(1){width:130px}.riic-conf td[data-v-e1745eff]:nth-child(3){padding-left:12px;width:120px}.coord td[data-v-e1745eff]{width:120px}.coord td[data-v-e1745eff]:nth-child(1),.coord td[data-v-e1745eff]:nth-child(3){width:30px}.coord td[data-v-e1745eff]:nth-child(2){padding-right:30px}.coord-label[data-v-e1745eff]{width:40px;padding-left:8px}p[data-v-e1745eff]{margin:0 0 8px}h4[data-v-e1745eff]{margin:12px 0 10px}.time-table[data-v-e1745eff]{width:100%;margin-bottom:12px}.time-table td[data-v-e1745eff]:nth-child(1){width:40px}.scale[data-v-e1745eff]{width:60px;text-align:right}.scale-apply[data-v-e1745eff]{margin-left:24px}.waiting-table th[data-v-e1745eff],.waiting-table td[data-v-e1745eff]{padding:4px;min-width:70px;width:100px}.waiting-table th[data-v-e1745eff]:first-child,.waiting-table td[data-v-e1745eff]:first-child{width:auto;padding:4px 8px}.card-title[data-v-e1745eff]{margin-right:12px}@media (max-width: 1399px){.grid-two{margin:0 0 -10px;width:100%;max-width:600px}.grid-left{display:grid;row-gap:10px;grid-template-columns:100%}.grid-right{display:grid;row-gap:10px;grid-template-columns:100%;margin-top:10px}}@media (min-width: 1400px){.grid-two{display:grid;grid-template-columns:minmax(0px,1fr) minmax(0px,1fr);align-items:flex-start;gap:5px}.grid-left,.grid-right{display:grid;gap:5px;grid-template-columns:100%;max-width:600px}}.n-divider:not(.n-divider--vertical){margin:14px 0 8px}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -31,8 +31,8 @@ const emulator_types = [
] ]
const launch_options = [ const launch_options = [
{ label: '使用adb命令启动', value: 'adb' }, { label: '运行命令', value: 'command' },
{ label: '点击屏幕启动', value: 'tap' } { label: '点击屏幕', value: 'tap' }
] ]
const stop_options = [ const stop_options = [
@ -94,6 +94,7 @@ const app_control_options = computed(() => {
const result = [{ label: 'ADB', value: 'adb' }] const result = [{ label: 'ADB', value: 'adb' }]
if (conf.value.emulator.name == 'MuMu12') { if (conf.value.emulator.name == 'MuMu12') {
result.push({ label: 'MuMu模拟器12应用管理器', value: 'mumumanager' }) result.push({ label: 'MuMu模拟器12应用管理器', value: 'mumumanager' })
result.push({ label: 'MuMu模拟器12应用分身', value: 'adb_multiuser' })
} }
if (conf.value.screencap_strategy == 'scrcpy' && conf.value.control_strategy == 'scrcpy') { if (conf.value.screencap_strategy == 'scrcpy' && conf.value.control_strategy == 'scrcpy') {
result.push({ label: 'scrcpy virtual display', value: 'scrcpy' }) result.push({ label: 'scrcpy virtual display', value: 'scrcpy' })
@ -170,20 +171,93 @@ async function auto_fill() {
} }
const message = useMessage() const message = useMessage()
const preset = ref('custom')
watch(preset, () => {
if (preset.value == 'mumu') {
conf.value.emulator.name = 'MuMu12'
conf.value.screencap_strategy = 'mumuipc'
conf.value.control_strategy = 'mumuipc'
conf.value.app_control_strategy = 'mumumanager'
conf.value.kill_server_when_idle = true
} else if (preset.value == 'mumultiuser') {
conf.value.emulator.name = 'MuMu12'
conf.value.screencap_strategy = 'mumuipc'
conf.value.control_strategy = 'mumuipc'
conf.value.app_control_strategy = 'adb_multiuser'
conf.value.kill_server_when_idle = true
conf.value.strategy_when_idle = 'exit_game'
} else if (preset.value == 'scrcpy') {
conf.value.screencap_strategy = 'scrcpy'
conf.value.control_strategy = 'scrcpy'
conf.value.app_control_strategy = 'scrcpy'
conf.value.kill_server_when_idle = true
conf.value.strategy_when_idle = 'exit_game'
}
})
const presets = [
{ label: 'MuMu全家桶', value: 'mumu' },
{ label: 'MuMu应用分身', value: 'mumultiuser' },
{ label: 'scrcpy virtual display', value: 'scrcpy' },
{ label: '自定义', value: 'custom' }
]
onMounted(() => {
if (
conf.value.emulator.name == 'MuMu12' &&
conf.value.screencap_strategy == 'mumuipc' &&
conf.value.control_strategy == 'mumuipc' &&
conf.value.app_control_strategy == 'mumumanager' &&
conf.value.kill_server_when_idle == true
) {
preset.value = 'mumu'
} else if (
conf.value.emulator.name == 'MuMu12' &&
conf.value.screencap_strategy == 'mumuipc' &&
conf.value.control_strategy == 'mumuipc' &&
conf.value.app_control_strategy == 'adb_multiuser' &&
conf.value.kill_server_when_idle == true &&
conf.value.strategy_when_idle == 'exit_game'
) {
preset.value = 'mumultiuser'
} else if (
conf.value.screencap_strategy == 'scrcpy' &&
conf.value.control_strategy == 'scrcpy' &&
conf.value.app_control_strategy == 'scrcpy' &&
conf.value.kill_server_when_idle == true &&
conf.value.strategy_when_idle == 'exit_game'
) {
preset.value = 'scrcpy'
}
})
</script> </script>
<template> <template>
<div class="grid-two"> <div class="grid-two">
<div class="grid-left"> <div class="grid-left">
<div> <div>
<n-card title="设备与游戏设置"> <n-card>
<template #header>
<div class="card-title">设备与游戏</div>
<n-select v-model:value="preset" :options="presets" />
<n-button
class="dialog-btn"
v-if="auto_fill_enable"
@click="auto_fill"
:loading="auto_fill_animation"
>
自动填写设置
</n-button>
</template>
<n-form <n-form
:label-placement="mobile ? 'top' : 'left'" :label-placement="mobile ? 'top' : 'left'"
:show-feedback="false" :show-feedback="false"
label-width="120" label-width="120"
label-align="left" label-align="left"
> >
<n-form-item label="模拟器"> <n-form-item label="模拟器" v-if="!preset.startsWith('mumu')">
<n-select v-model:value="conf.emulator.name" :options="emulator_types" /> <n-select v-model:value="conf.emulator.name" :options="emulator_types" />
</n-form-item> </n-form-item>
<n-form-item v-if="conf.emulator.name"> <n-form-item v-if="conf.emulator.name">
@ -196,14 +270,6 @@ const message = useMessage()
</help-text> </help-text>
</template> </template>
<n-input v-model:value="conf.emulator.index" /> <n-input v-model:value="conf.emulator.index" />
<n-button
class="dialog-btn"
v-if="auto_fill_enable"
@click="auto_fill"
:loading="auto_fill_animation"
>
自动填写设置
</n-button>
</n-form-item> </n-form-item>
<n-form-item v-if="conf.emulator.name"> <n-form-item v-if="conf.emulator.name">
<template #label> <template #label>
@ -252,6 +318,7 @@ const message = useMessage()
/> />
</n-form-item> </n-form-item>
<n-divider /> <n-divider />
<template v-if="preset != 'mumu'">
<n-form-item label="ADB路径"> <n-form-item label="ADB路径">
<n-input type="textarea" :autosize="true" v-model:value="conf.maa_adb_path" /> <n-input type="textarea" :autosize="true" v-model:value="conf.maa_adb_path" />
<n-button @click="select_maa_adb_path" class="dialog-btn">...</n-button> <n-button @click="select_maa_adb_path" class="dialog-btn">...</n-button>
@ -267,6 +334,8 @@ const message = useMessage()
<n-input v-model:value="conf.adb" /> <n-input v-model:value="conf.adb" />
</n-form-item> </n-form-item>
<n-divider /> <n-divider />
</template>
<template v-if="preset == 'custom'">
<n-form-item label="截图方案"> <n-form-item label="截图方案">
<n-select v-model:value="conf.screencap_strategy" :options="screencap_options" /> <n-select v-model:value="conf.screencap_strategy" :options="screencap_options" />
</n-form-item> </n-form-item>
@ -283,7 +352,10 @@ const message = useMessage()
<n-select v-model:value="conf.control_strategy" :options="touch_options" /> <n-select v-model:value="conf.control_strategy" :options="touch_options" />
</n-form-item> </n-form-item>
<n-form-item label="应用控制方案"> <n-form-item label="应用控制方案">
<n-select v-model:value="conf.app_control_strategy" :options="app_control_options" /> <n-select
v-model:value="conf.app_control_strategy"
:options="app_control_options"
/>
</n-form-item> </n-form-item>
<n-form-item label="旋转截图" v-if="conf.screencap_strategy == 'droidcast'"> <n-form-item label="旋转截图" v-if="conf.screencap_strategy == 'droidcast'">
<n-radio-group v-model:value="conf.droidcast.rotate"> <n-radio-group v-model:value="conf.droidcast.rotate">
@ -320,6 +392,8 @@ const message = useMessage()
:autosize="true" :autosize="true"
/> />
</n-form-item> </n-form-item>
<n-divider />
</template>
<n-form-item :show-label="false"> <n-form-item :show-label="false">
<n-flex vertical style="gap: 12px"> <n-flex vertical style="gap: 12px">
<n-flex align="center" style="gap: 12px"> <n-flex align="center" style="gap: 12px">
@ -350,7 +424,7 @@ const message = useMessage()
</n-space> </n-space>
</n-radio-group> </n-radio-group>
</n-form-item> </n-form-item>
<n-form-item label="启动游戏"> <n-form-item label="启动游戏" v-if="preset == 'custom'">
<n-select v-model:value="conf.tap_to_launch_game.enable" :options="launch_options" /> <n-select v-model:value="conf.tap_to_launch_game.enable" :options="launch_options" />
</n-form-item> </n-form-item>
<n-form-item v-if="conf.tap_to_launch_game.enable == 'tap'" label="点击坐标"> <n-form-item v-if="conf.tap_to_launch_game.enable == 'tap'" label="点击坐标">
@ -359,10 +433,10 @@ const message = useMessage()
<span class="coord-label">Y:</span> <span class="coord-label">Y:</span>
<n-input-number v-model:value="conf.tap_to_launch_game.y" /> <n-input-number v-model:value="conf.tap_to_launch_game.y" />
</n-form-item> </n-form-item>
<n-form-item label="任务结束"> <n-form-item label="任务结束" v-if="!['scrcpy', 'mumultiuser'].includes(preset)">
<n-select v-model:value="conf.strategy_when_idle" :options="stop_options" /> <n-select v-model:value="conf.strategy_when_idle" :options="stop_options" />
</n-form-item> </n-form-item>
<n-form-item :show-label="false"> <n-form-item :show-label="false" v-if="preset == 'custom'">
<n-checkbox v-model:checked="conf.kill_server_when_idle"> <n-checkbox v-model:checked="conf.kill_server_when_idle">
<span>任务结束时关闭ADB Server</span> <span>任务结束时关闭ADB Server</span>
<help-text>建议开启多开不受影响</help-text> <help-text>建议开启多开不受影响</help-text>
@ -733,6 +807,10 @@ h4 {
} }
} }
} }
.card-title {
margin-right: 12px;
}
</style> </style>
<style> <style>

View file

@ -39,7 +39,7 @@ export const useConfigStore = defineStore('config', () => {
} }
data.package_type = data.package_type == 1 ? 'official' : 'bilibili' data.package_type = data.package_type == 1 ? 'official' : 'bilibili'
data.resting_threshold = data.resting_threshold * 100 data.resting_threshold = data.resting_threshold * 100
data.tap_to_launch_game.enable = data.tap_to_launch_game.enable ? 'tap' : 'adb' data.tap_to_launch_game.enable = data.tap_to_launch_game.enable ? 'tap' : 'command'
return data return data
} }