mirror of
https://gitee.com/blackfox/geekai.git
synced 2025-12-07 01:08:24 +08:00
fixed keling model selection
This commit is contained in:
parent
4dcb0d850c
commit
393bfa137e
@ -123,7 +123,7 @@ func (h *VideoHandler) KeLingCreate(c *gin.Context) {
|
|||||||
var data struct {
|
var data struct {
|
||||||
Channel string `json:"channel"`
|
Channel string `json:"channel"`
|
||||||
TaskType string `json:"task_type"` // 任务类型: text2video/image2video
|
TaskType string `json:"task_type"` // 任务类型: text2video/image2video
|
||||||
Model string `json:"model"` // 模型: default/anime
|
Model string `json:"model"` // 模型: kling-v1-5,kling-v1-6
|
||||||
Prompt string `json:"prompt"` // 视频描述
|
Prompt string `json:"prompt"` // 视频描述
|
||||||
NegPrompt string `json:"negative_prompt"` // 负面提示词
|
NegPrompt string `json:"negative_prompt"` // 负面提示词
|
||||||
CfgScale float64 `json:"cfg_scale"` // 相关性系数(0-1)
|
CfgScale float64 `json:"cfg_scale"` // 相关性系数(0-1)
|
||||||
@ -145,7 +145,14 @@ func (h *VideoHandler) KeLingCreate(c *gin.Context) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if user.Power < h.App.SysConfig.LumaPower {
|
// 计算当前任务所需算力
|
||||||
|
key := fmt.Sprintf("%s_%s_%s", data.Model, data.Mode, data.Duration)
|
||||||
|
power := h.App.SysConfig.KeLingPowers[key]
|
||||||
|
if power == 0 {
|
||||||
|
resp.ERROR(c, "当前模型暂不支持")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if user.Power < power {
|
||||||
resp.ERROR(c, "您的算力不足,请充值后再试!")
|
resp.ERROR(c, "您的算力不足,请充值后再试!")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
@ -43,9 +43,8 @@
|
|||||||
<!-- 模型选择 -->
|
<!-- 模型选择 -->
|
||||||
<div class="param-line">
|
<div class="param-line">
|
||||||
<el-form-item label="模型选择">
|
<el-form-item label="模型选择">
|
||||||
<el-select v-model="params.model" placeholder="请选择模型">
|
<el-select v-model="params.model" placeholder="请选择模型" @change="updateModelPower">
|
||||||
<el-option label="默认模型" value="default" />
|
<el-option v-for="item in models" :key="item.value" :label="item.text" :value="item.value" />
|
||||||
<el-option label="动漫风格" value="anime" />
|
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</div>
|
</div>
|
||||||
@ -53,7 +52,7 @@
|
|||||||
<!-- 视频时长 -->
|
<!-- 视频时长 -->
|
||||||
<div class="param-line">
|
<div class="param-line">
|
||||||
<el-form-item label="视频时长">
|
<el-form-item label="视频时长">
|
||||||
<el-select v-model="params.duration" placeholder="请选择时长">
|
<el-select v-model="params.duration" placeholder="请选择时长" @change="updateModelPower">
|
||||||
<el-option label="5秒" value="5" />
|
<el-option label="5秒" value="5" />
|
||||||
<el-option label="10秒" value="10" />
|
<el-option label="10秒" value="10" />
|
||||||
</el-select>
|
</el-select>
|
||||||
@ -63,7 +62,7 @@
|
|||||||
<!-- 生成模式 -->
|
<!-- 生成模式 -->
|
||||||
<div class="param-line">
|
<div class="param-line">
|
||||||
<el-form-item label="生成模式">
|
<el-form-item label="生成模式">
|
||||||
<el-select v-model="params.mode" placeholder="请选择模式">
|
<el-select v-model="params.mode" placeholder="请选择模式" @change="updateModelPower">
|
||||||
<el-option label="标准模式" value="std" />
|
<el-option label="标准模式" value="std" />
|
||||||
<el-option label="专业模式" value="pro" />
|
<el-option label="专业模式" value="pro" />
|
||||||
</el-select>
|
</el-select>
|
||||||
@ -83,10 +82,10 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- 运镜控制 -->
|
<!-- 运镜控制 -->
|
||||||
<div class="param-line">
|
<div class="param-line" v-if="showCameraControl">
|
||||||
<div class="param-line pt">
|
<div class="param-line pt">
|
||||||
<span>运镜控制:</span>
|
<span>运镜控制:</span>
|
||||||
<el-tooltip content="生成画面的运镜效果" placement="right">
|
<el-tooltip content="生成画面的运镜效果,仅 1.5的高级模式可用" placement="right">
|
||||||
<el-icon>
|
<el-icon>
|
||||||
<InfoFilled />
|
<InfoFilled />
|
||||||
</el-icon>
|
</el-icon>
|
||||||
@ -94,7 +93,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- 添加运镜类型选择 -->
|
<!-- 添加运镜类型选择 -->
|
||||||
<el-form-item label="运镜类型">
|
<div class="param-line">
|
||||||
<el-select
|
<el-select
|
||||||
v-model="params.camera_control.type"
|
v-model="params.camera_control.type"
|
||||||
placeholder="请选择运镜类型"
|
placeholder="请选择运镜类型"
|
||||||
@ -106,7 +105,7 @@
|
|||||||
<el-option label="右旋推进" value="right_turn_forward" />
|
<el-option label="右旋推进" value="right_turn_forward" />
|
||||||
<el-option label="左旋推进" value="left_turn_forward" />
|
<el-option label="左旋推进" value="left_turn_forward" />
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</div>
|
||||||
|
|
||||||
<!-- 仅在simple模式下显示详细配置 -->
|
<!-- 仅在simple模式下显示详细配置 -->
|
||||||
<div
|
<div
|
||||||
@ -533,7 +532,7 @@ import {
|
|||||||
} from "@element-plus/icons-vue";
|
} from "@element-plus/icons-vue";
|
||||||
import { httpGet, httpPost, httpDownload } from "@/utils/http";
|
import { httpGet, httpPost, httpDownload } from "@/utils/http";
|
||||||
import { ElMessage, ElMessageBox } from "element-plus";
|
import { ElMessage, ElMessageBox } from "element-plus";
|
||||||
import { getClientId, checkSession } from "@/store/cache";
|
import {checkSession, getSystemInfo} from "@/store/cache";
|
||||||
import Clipboard from "clipboard";
|
import Clipboard from "clipboard";
|
||||||
|
|
||||||
import {
|
import {
|
||||||
@ -544,11 +543,24 @@ import {
|
|||||||
} from "@/utils/dialog";
|
} from "@/utils/dialog";
|
||||||
import { replaceImg } from "@/utils/libs";
|
import { replaceImg } from "@/utils/libs";
|
||||||
|
|
||||||
|
const models = ref([
|
||||||
|
{
|
||||||
|
text: "可灵 1.6",
|
||||||
|
value: "kling-v1-6",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: "可灵 1.5",
|
||||||
|
value: "kling-v1-5",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
text: "可灵 1.0",
|
||||||
|
value: "kling-v1",
|
||||||
|
},
|
||||||
|
]);
|
||||||
// 参数设置
|
// 参数设置
|
||||||
const params = reactive({
|
const params = reactive({
|
||||||
// client_id: getClientId(),
|
|
||||||
task_type: "text2video",
|
task_type: "text2video",
|
||||||
model: "default",
|
model: models.value[0].value,
|
||||||
prompt: "",
|
prompt: "",
|
||||||
negative_prompt: "",
|
negative_prompt: "",
|
||||||
cfg_scale: 0.7,
|
cfg_scale: 0.7,
|
||||||
@ -591,6 +603,7 @@ const changeRate = (item) => {
|
|||||||
params.aspect_ratio = item.value;
|
params.aspect_ratio = item.value;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
// 状态变量
|
// 状态变量
|
||||||
let pollTimer = null;
|
let pollTimer = null;
|
||||||
const generating = ref(false);
|
const generating = ref(false);
|
||||||
@ -600,7 +613,6 @@ const availablePower = ref(100);
|
|||||||
const taskFilter = ref("all");
|
const taskFilter = ref("all");
|
||||||
const runningTasks = ref([]);
|
const runningTasks = ref([]);
|
||||||
const finishedTasks = ref([]);
|
const finishedTasks = ref([]);
|
||||||
const total = ref(0);
|
|
||||||
const pageSize = ref(4);
|
const pageSize = ref(4);
|
||||||
const currentPage = ref(1);
|
const currentPage = ref(1);
|
||||||
const previewVisible = ref(false);
|
const previewVisible = ref(false);
|
||||||
@ -608,9 +620,17 @@ const currentVideo = ref("");
|
|||||||
const isOver = ref(false);
|
const isOver = ref(false);
|
||||||
const pullTask = ref(true);
|
const pullTask = ref(true);
|
||||||
const waterfallKey = ref(Date.now());
|
const waterfallKey = ref(Date.now());
|
||||||
|
const showCameraControl = ref(false);
|
||||||
|
const keLingPowers = ref({});
|
||||||
|
|
||||||
|
// 动态更新模型消耗的算力
|
||||||
|
const updateModelPower = () => {
|
||||||
|
showCameraControl.value = params.model === "kling-v1-5" && params.mode === "pro";
|
||||||
|
powerCost.value = keLingPowers.value[`${params.model}_${params.mode}_${params.duration}`];
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
// 方法定义
|
// 方法定义
|
||||||
|
|
||||||
const tabChange = (tab) => {
|
const tabChange = (tab) => {
|
||||||
params.task_type = tab;
|
params.task_type = tab;
|
||||||
};
|
};
|
||||||
@ -789,10 +809,10 @@ const fetchTasks = async () => {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// 检测任务状态
|
// // 检测任务状态
|
||||||
const checkAllCompleted = () => {
|
// const checkAllCompleted = () => {
|
||||||
return runningTasks.value.length === 0;
|
// return runningTasks.value.length === 0;
|
||||||
};
|
// };
|
||||||
|
|
||||||
const previewVideo = (task) => {
|
const previewVideo = (task) => {
|
||||||
currentVideo.value = task.video_url;
|
currentVideo.value = task.video_url;
|
||||||
@ -830,8 +850,9 @@ const clipboard = ref(null);
|
|||||||
// 生命周期钩子
|
// 生命周期钩子
|
||||||
onMounted(async () => {
|
onMounted(async () => {
|
||||||
checkSession()
|
checkSession()
|
||||||
.then(async () => {
|
.then(async (u) => {
|
||||||
isLogin.value = true;
|
isLogin.value = true;
|
||||||
|
availablePower.value = u.power;
|
||||||
console.log("mounted-isLogin-可以继续", isLogin.value);
|
console.log("mounted-isLogin-可以继续", isLogin.value);
|
||||||
|
|
||||||
await fetchTasks();
|
await fetchTasks();
|
||||||
@ -854,6 +875,10 @@ onMounted(async () => {
|
|||||||
clipboard.value.on("error", () => {
|
clipboard.value.on("error", () => {
|
||||||
ElMessage.error("复制失败!");
|
ElMessage.error("复制失败!");
|
||||||
});
|
});
|
||||||
|
// 获取系统配置
|
||||||
|
getSystemInfo().then((res) => {
|
||||||
|
keLingPowers.value = res.data.keling_powers;
|
||||||
|
});
|
||||||
});
|
});
|
||||||
onUnmounted(() => {
|
onUnmounted(() => {
|
||||||
clearInterval(pollTimer);
|
clearInterval(pollTimer);
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="login flex w-full flex-col place-content-center h-lvh">
|
<div class="login flex w-full flex-col place-content-center h-lvh">
|
||||||
<el-image src="/images/logo.png" class="w-1/2 mx-auto logo" />
|
<el-image :src="logo" class="w-1/2 mx-auto logo" />
|
||||||
<div class="title text-center text-3xl font-bold mt-8">{{ title }}</div>
|
<div class="title text-center text-3xl font-bold mt-8">{{ title }}</div>
|
||||||
<div class="w-full p-8">
|
<div class="w-full p-8">
|
||||||
<login-dialog @success="loginSuccess" />
|
<login-dialog @success="loginSuccess" />
|
||||||
@ -16,6 +16,7 @@ import { ref, onMounted } from "vue";
|
|||||||
|
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
const title = ref("登录");
|
const title = ref("登录");
|
||||||
|
const logo = ref("");
|
||||||
|
|
||||||
const loginSuccess = () => {
|
const loginSuccess = () => {
|
||||||
router.back();
|
router.back();
|
||||||
@ -24,6 +25,7 @@ const loginSuccess = () => {
|
|||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
getSystemInfo().then((res) => {
|
getSystemInfo().then((res) => {
|
||||||
title.value = res.data.title;
|
title.value = res.data.title;
|
||||||
|
logo.value = res.data.logo;
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user