|
|
@@ -4,17 +4,17 @@
|
|
|
/>
|
|
|
<div class="container">
|
|
|
<nav class="settings-nav">
|
|
|
- <div class="nav-item" :class="{'active': activeIndex === 0}" @click="activeIndex = 0">
|
|
|
+ <div class="nav-item" :class="{'active': activeIndex === 0}" @click="toggleTab(0)">
|
|
|
<img src="@/assets/images/setting/icon1.png" class="nav-icon" v-if="activeIndex !== 0"/>
|
|
|
<img src="@/assets/images/setting/icon1a.png" class="nav-icon" v-else/>
|
|
|
<span>基础配置</span>
|
|
|
</div>
|
|
|
- <div class="nav-item" :class="{'active': activeIndex === 2}" @click="activeIndex = 2">
|
|
|
+ <div class="nav-item" :class="{'active': activeIndex === 2}" @click="toggleTab(2)">
|
|
|
<img src="@/assets/images/setting/icon3.png" class="nav-icon" v-if="activeIndex !== 2"/>
|
|
|
<img src="@/assets/images/setting/icon3a.png" class="nav-icon" v-else/>
|
|
|
<span>其他设置</span>
|
|
|
</div>
|
|
|
- <div class="nav-item" v-if="configInfoStore.appModel === 1" :class="{'active': activeIndex === 4}" @click="activeIndex = 4">
|
|
|
+ <div class="nav-item" v-if="configInfoStore.appModel === 1" :class="{'active': activeIndex === 4}" @click="toggleTab(4)">
|
|
|
<img src="@/assets/images/setting/icon4.png" class="nav-icon" v-if="activeIndex !== 4"/>
|
|
|
<img src="@/assets/images/setting/icon4a.png" class="nav-icon" v-else/>
|
|
|
<span>左右脚程序设置</span>
|
|
|
@@ -25,15 +25,30 @@
|
|
|
<!--基础配置-->
|
|
|
<div class="selectBox" v-if="activeIndex === 0">
|
|
|
<div class="form-item">
|
|
|
- <label>主图尺寸:</label>
|
|
|
- <div class="select-wrapper">
|
|
|
+ <label>主图尺寸:</label>
|
|
|
+ <div class="select-wrapper">
|
|
|
<el-select multiple
|
|
|
collapse-tags
|
|
|
multiple-limit="3"
|
|
|
v-model="formData.basic_configs.main_image_size" placeholder="请选择">
|
|
|
<el-option v-for="item in mainImageSizeList" :key="item.value" :label="item.label" :value="item.value"></el-option>
|
|
|
</el-select>
|
|
|
- </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <!-- 新增自定义输入框 -->
|
|
|
+ <div class="form-item" v-if="formData.basic_configs.main_image_size.includes('custom')">
|
|
|
+ <label>自定义尺寸:</label>
|
|
|
+ <div class="select-wrapper">
|
|
|
+ <el-input
|
|
|
+ type="text"
|
|
|
+ v-model.number="customInput"
|
|
|
+ maxlength="4"
|
|
|
+ placeholder="请输入1-2000的尺寸值"
|
|
|
+ class="w-full px-3 py-2 border rounded-md"
|
|
|
+ @keypress="handleKeyPress"
|
|
|
+ @input="handleInput"
|
|
|
+ />
|
|
|
+ </div>
|
|
|
</div>
|
|
|
<div class="form-item">
|
|
|
<label>图片输出格式:</label>
|
|
|
@@ -54,40 +69,46 @@
|
|
|
</div>
|
|
|
<!--基础配置-->
|
|
|
<!--其他设置-->
|
|
|
- <div class="selectBox" style="padding-top: 0px" v-if="activeIndex === 2">
|
|
|
- <div class="form-item">
|
|
|
- <label>产品类型:</label>
|
|
|
- <div class="select-wrapper">
|
|
|
- <el-select v-model="formData.other_configs.product_type" placeholder="请选择">
|
|
|
- <el-option v-for="item in productTypeList" :key="item.value" :label="item.label" :value="item.value"></el-option>
|
|
|
- </el-select>
|
|
|
- </div>
|
|
|
+ <template v-if="activeIndex === 2">
|
|
|
+
|
|
|
+ <div class="selectBox" style="padding-top: 0px" >
|
|
|
+ <div class="form-item">
|
|
|
+ <label>产品类型:</label>
|
|
|
+ <div class="select-wrapper">
|
|
|
+ <el-select v-model="formData.other_configs.product_type" placeholder="请选择">
|
|
|
+ <el-option v-for="item in productTypeList" :key="item.value" :label="item.label" :value="item.value"></el-option>
|
|
|
+ </el-select>
|
|
|
</div>
|
|
|
- <div class="form-item">
|
|
|
- <label>默认抠图模式:</label>
|
|
|
- <div class="select-wrapper">
|
|
|
- <el-select v-model="formData.other_configs.cutout_mode" placeholder="请选择">
|
|
|
- <el-option v-for="item in defaultCutoutModeList" :key="item.value" :label="item.label" :value="item.value"></el-option>
|
|
|
- </el-select>
|
|
|
- </div>
|
|
|
+ </div>
|
|
|
+ <div class="form-item">
|
|
|
+ <label>默认抠图模式:</label>
|
|
|
+ <div class="select-wrapper">
|
|
|
+ <el-select v-model="formData.other_configs.cutout_mode" placeholder="请选择">
|
|
|
+ <el-option v-for="item in defaultCutoutModeList" :key="item.value" :label="item.label" :value="item.value"></el-option>
|
|
|
+ </el-select>
|
|
|
</div>
|
|
|
- <div class="form-item">
|
|
|
- <label>设备运动速度:</label>
|
|
|
- <div class="select-wrapper">
|
|
|
- <el-select v-model="formData.other_configs.device_speed" placeholder="请选择">
|
|
|
- <el-option v-for="item in deviceSpeedList" :key="item.value" :label="item.label" :value="item.value"></el-option>
|
|
|
- </el-select>
|
|
|
- </div>
|
|
|
+ </div>
|
|
|
+ <div class="form-item">
|
|
|
+ <label>设备运动速度:</label>
|
|
|
+ <div class="select-wrapper">
|
|
|
+ <el-select v-model="formData.other_configs.device_speed" placeholder="请选择">
|
|
|
+ <el-option v-for="item in deviceSpeedList" :key="item.value" :label="item.label" :value="item.value"></el-option>
|
|
|
+ </el-select>
|
|
|
</div>
|
|
|
-<!-- <div class="form-item">
|
|
|
- <label>运行模式:</label>
|
|
|
- <div class="select-wrapper">
|
|
|
- <el-select v-model="formData.other_configs.running_mode" placeholder="请选择">
|
|
|
- <el-option v-for="item in runModeList" :key="item.value" :label="item.label" :value="item.value"></el-option>
|
|
|
- </el-select>
|
|
|
- </div>
|
|
|
- </div>-->
|
|
|
- </div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <!-- <div class="form-item">
|
|
|
+ <label>运行模式:</label>
|
|
|
+ <div class="select-wrapper">
|
|
|
+ <el-select v-model="formData.other_configs.running_mode" placeholder="请选择">
|
|
|
+ <el-option v-for="item in runModeList" :key="item.value" :label="item.label" :value="item.value"></el-option>
|
|
|
+ </el-select>
|
|
|
+ </div>
|
|
|
+ </div>-->
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <other-config/>
|
|
|
+ </template>
|
|
|
<!--其他设置-->
|
|
|
<div class="selectBox" style="padding-top: 0px;padding-left: 0;" v-if="activeIndex === 4">
|
|
|
<actionConfig/>
|
|
|
@@ -95,7 +116,7 @@
|
|
|
</div>
|
|
|
</div>
|
|
|
<div class="text-center mt-8">
|
|
|
- <button class="bg-gradient-to-r from-primary" @click="saveSetting(activeIndex)" v-if="activeIndex !== 4">
|
|
|
+ <button class="bg-gradient-to-r from-primary" @click="onSava(activeIndex)" v-if="activeIndex !== 4">
|
|
|
保存
|
|
|
</button>
|
|
|
</div>
|
|
|
@@ -123,6 +144,7 @@ import { digiCamControlWEB } from '@/utils/appconfig'
|
|
|
import { useCheckInfo } from '@/composables/userCheck';
|
|
|
import { preview } from '@planckdev/element-plus/utils'
|
|
|
import actionConfig from './components/action_config.vue'
|
|
|
+import otherConfig from './components/otherConfig'
|
|
|
useCheckInfo();
|
|
|
|
|
|
// 路由和状态管理初始化
|
|
|
@@ -191,11 +213,17 @@ const mainImageSizeList = ref([
|
|
|
{ label: '1200*1200', value: 1200 },
|
|
|
{ label: '1400*1400', value: 1400 },
|
|
|
{ label: '1600*1600', value: 1600 },
|
|
|
+ { label: '自定义', value: 'custom' } // 新增自定义选项
|
|
|
]);
|
|
|
+
|
|
|
+const customInput = ref(null); // 新增自定义输入值
|
|
|
+
|
|
|
const imageFormatList = ref([
|
|
|
{ label: 'jpg', value: 'jpg' },
|
|
|
{ label: 'png', value: 'png' },
|
|
|
{ label: 'jpeg', value: 'jpeg' },
|
|
|
+ { label: 'webp', value: 'webp' },
|
|
|
+ { label: 'avif', value: 'avif' },
|
|
|
]);
|
|
|
const imageSharpeningList = ref([
|
|
|
{ label: '0', value: '0' },
|
|
|
@@ -227,9 +255,9 @@ const defaultCutoutModeList = ref([
|
|
|
{ label: '精细化抠图', value: '精细化抠图' },
|
|
|
]);
|
|
|
const deviceSpeedList = ref([
|
|
|
- { label: '一档', value: '1' },
|
|
|
- { label: '二档', value: '2' },
|
|
|
- { label: '三档', value: '3' },
|
|
|
+ { label: '一档', value: '一档' },
|
|
|
+ { label: '二档', value: '二档' },
|
|
|
+ { label: '三档', value: '三档' },
|
|
|
]);
|
|
|
/*
|
|
|
const runModeList = ref([
|
|
|
@@ -275,7 +303,7 @@ const indexKey ={
|
|
|
watch(() => route.query.type, async (newType,oldType) => {
|
|
|
|
|
|
if(['0','1','2'].includes(oldType)){
|
|
|
- await saveSetting(oldType)
|
|
|
+ // await saveSetting(oldType)
|
|
|
}
|
|
|
const typeValue = parseInt(newType) || 0;
|
|
|
if(typeValue === 4) return;
|
|
|
@@ -287,7 +315,22 @@ watch(() => route.query.type, async (newType,oldType) => {
|
|
|
});
|
|
|
clientStore.ipc.on(icpList.setting.getSysConfig, (event, result) => {
|
|
|
if(result.code == 0 && result.data){
|
|
|
+
|
|
|
formData[indexKey[typeValue]] = result.data
|
|
|
+ const presetSizes = mainImageSizeList.value.map(item => item.value);
|
|
|
+ const receivedSizes = result.data.main_image_size ? [...result.data.main_image_size] : [];
|
|
|
+
|
|
|
+ // 分离自定义值
|
|
|
+ const customValues = receivedSizes.filter(v => !presetSizes.includes(v));
|
|
|
+ if (customValues.length > 0) {
|
|
|
+ customInput.value = customValues[0]; // 保留第一个自定义值
|
|
|
+ // 更新选中状态
|
|
|
+ formData.basic_configs.main_image_size = receivedSizes
|
|
|
+ .filter(v => presetSizes.includes(v))
|
|
|
+ .concat('custom');
|
|
|
+ } else {
|
|
|
+ formData.basic_configs.main_image_size = receivedSizes;
|
|
|
+ }
|
|
|
}
|
|
|
console.log('icpList.setting.getSysConfig')
|
|
|
console.log(result)
|
|
|
@@ -324,37 +367,92 @@ onMounted(() => {
|
|
|
|
|
|
});
|
|
|
|
|
|
+
|
|
|
+const handleKeyPress = (event) => {
|
|
|
+ const char = event.key;
|
|
|
+ // 只允许输入数字字符
|
|
|
+ if (!/^\d+$/.test(char)) {
|
|
|
+ event.preventDefault(); // 阻止非数字输入
|
|
|
+ }
|
|
|
+};
|
|
|
+const handleInput = (value) => {
|
|
|
+ if (value > 2000) {
|
|
|
+ customInput.value = 2000;
|
|
|
+ } else if (value < 1) {
|
|
|
+ customInput.value = 1;
|
|
|
+ }
|
|
|
+};
|
|
|
+
|
|
|
+const toggleTab = async (item) => {
|
|
|
+ let oldType = activeIndex.value;
|
|
|
+
|
|
|
+ if([0,1,2].includes(oldType)){
|
|
|
+ const next = await saveSetting(oldType)
|
|
|
+ if(next === false) return ;
|
|
|
+ }
|
|
|
+ activeIndex.value = item;
|
|
|
+};
|
|
|
+
|
|
|
+const onSava = async (index)=>{
|
|
|
+ const next = await saveSetting(index)
|
|
|
+
|
|
|
+ if(next !== false){
|
|
|
+ ElMessage.success('保存成功')
|
|
|
+ }
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
/**
|
|
|
* 保存当前表单配置。
|
|
|
*/
|
|
|
const saveSetting = async (index) => {
|
|
|
+ // 构建临时提交数据
|
|
|
+ const submitData = {
|
|
|
+ ...formData[indexKey[index]]
|
|
|
+ };
|
|
|
+ if(index === 0) {
|
|
|
+ if (formData.basic_configs.main_image_size.length === 0) {
|
|
|
+ ElMessage.error('请选择主图尺寸!');
|
|
|
+ return false;
|
|
|
+ }
|
|
|
|
|
|
- if(index === 0){
|
|
|
- if(formData.basic_configs.main_image_size.length === 0){
|
|
|
+ // 处理自定义尺寸逻辑
|
|
|
+ const selectedSizes = [...formData.basic_configs.main_image_size]; // 创建副本避免修改原始数据
|
|
|
|
|
|
- ElMessage.error('请选择主图尺寸!');
|
|
|
- return;
|
|
|
+ if (selectedSizes.includes('custom')) {
|
|
|
+ if (!customInput.value || isNaN(customInput.value) ||
|
|
|
+ customInput.value < 1 || customInput.value > 2000) {
|
|
|
+ ElMessage.error('请输入1-2000之间的有效数值');
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 创建新数组用于提交
|
|
|
+ const submitSizes = selectedSizes
|
|
|
+ .filter(v => v !== 'custom')
|
|
|
+ .concat(parseInt(customInput.value));
|
|
|
+
|
|
|
+ submitData.main_image_size = submitSizes
|
|
|
}
|
|
|
+
|
|
|
}
|
|
|
- await new Promise((resolve, reject) => {
|
|
|
-
|
|
|
- clientStore.ipc.removeAllListeners(icpList.setting.updateSysConfigs);
|
|
|
- clientStore.ipc.send(icpList.setting.updateSysConfigs,{
|
|
|
- key: indexKey[index],
|
|
|
- value:JSON.stringify({
|
|
|
- ...formData[indexKey[index]]
|
|
|
- })
|
|
|
- });
|
|
|
- clientStore.ipc.on(icpList.setting.updateSysConfigs, async (event, result) => {
|
|
|
- clientStore.ipc.removeAllListeners(icpList.setting.updateSysConfigs);
|
|
|
- if(result.code === 0 && result.msg){
|
|
|
- resolve(result)
|
|
|
- }
|
|
|
+ console.log(submitData);
|
|
|
+ await new Promise((resolve, reject) => {
|
|
|
+ clientStore.ipc.removeAllListeners(icpList.setting.updateSysConfigs);
|
|
|
+ clientStore.ipc.send(icpList.setting.updateSysConfigs,{
|
|
|
+ key: indexKey[index],
|
|
|
+ value: JSON.stringify(submitData)
|
|
|
+ });
|
|
|
|
|
|
- });
|
|
|
- });
|
|
|
|
|
|
|
|
|
+ clientStore.ipc.on(icpList.setting.updateSysConfigs, async (event, result) => {
|
|
|
+ clientStore.ipc.removeAllListeners(icpList.setting.updateSysConfigs);
|
|
|
+ if(result.code === 0 && result.msg){
|
|
|
+ resolve(true)
|
|
|
+ }
|
|
|
+
|
|
|
+ });
|
|
|
+ });
|
|
|
};
|
|
|
|
|
|
|