refactor: 重构项目,为所有的 AI 工具都引入算力,采用算力统一结算各个工具的调用次数和权限

This commit is contained in:
RockYang
2024-03-12 15:40:44 +08:00
parent 316636f83c
commit e746aafa2f
45 changed files with 438 additions and 298 deletions

View File

@@ -9,7 +9,7 @@
<div class="content" v-html="content"></div>
<div class="bar" v-if="createdAt !== ''">
<span class="bar-item"><el-icon><Clock/></el-icon> {{ createdAt }}</span>
<span class="bar-item">算力消耗: {{ finalTokens }}</span>
<span class="bar-item">Tokens: {{ finalTokens }}</span>
</div>
</div>
</div>

View File

@@ -9,12 +9,12 @@
<div class="content" v-html="content"></div>
<div class="bar" v-if="createdAt !== ''">
<span class="bar-item"><el-icon><Clock/></el-icon> {{ createdAt }}</span>
<span class="bar-item">算力消耗: {{ tokens }}</span>
<span class="bar-item">Tokens: {{ tokens }}</span>
<el-tooltip
class="box-item"
effect="light"
effect="dark"
content="复制回答"
placement="top"
placement="bottom"
>
<el-button type="info" class="copy-reply" :data-clipboard-text="orgContent">
<el-icon>
@@ -24,7 +24,6 @@
</el-tooltip>
</div>
</div>
</div>
</div>
</template>

View File

@@ -438,7 +438,7 @@
<template #default>
<div class="mj-list-item-prompt">
<span>{{ scope.item.prompt }}</span>
<el-icon class="copy-prompt"
<el-icon class="copy-prompt-mj"
:data-clipboard-text="scope.item.prompt">
<DocumentCopy/>
</el-icon>
@@ -485,7 +485,7 @@
</template>
<script setup>
import {nextTick, onMounted, ref} from "vue"
import {nextTick, onMounted, onUnmounted, ref} from "vue"
import {
ChromeFilled,
Delete,
@@ -662,6 +662,7 @@ const connect = () => {
});
}
const clipboard = ref(null)
onMounted(() => {
checkSession().then(user => {
imgCalls.value = user['img_calls']
@@ -675,16 +676,20 @@ onMounted(() => {
router.push('/login')
});
const clipboard = new Clipboard('.copy-prompt');
clipboard.on('success', () => {
clipboard.value = new Clipboard('.copy-prompt-mj');
clipboard.value.on('success', () => {
ElMessage.success("复制成功!");
})
clipboard.on('error', () => {
clipboard.value.on('error', () => {
ElMessage.error('复制失败!');
})
})
onUnmounted(() => {
clipboard.value.destroy()
})
// 获取运行中的任务
const fetchRunningJobs = () => {
httpGet(`/api/mj/jobs?status=0`).then(res => {
@@ -745,10 +750,14 @@ const fetchFinishJobs = (page) => {
jobs[i]['can_opt'] = true
}
}
finishedJobs.value = finishedJobs.value.concat(jobs)
if (jobs.length < pageSize.value) {
isOver.value = true
}
if (page === 1) {
finishedJobs.value = jobs
} else {
finishedJobs.value = finishedJobs.value.concat(jobs)
}
nextTick(() => loading.value = false)
}).catch(e => {
loading.value = false

View File

@@ -411,7 +411,7 @@
</el-divider>
<div class="prompt">
<span>{{ item.prompt }}</span>
<el-icon class="copy-prompt" :data-clipboard-text="item.prompt">
<el-icon class="copy-prompt-sd" :data-clipboard-text="item.prompt">
<DocumentCopy/>
</el-icon>
</div>
@@ -424,7 +424,7 @@
</el-divider>
<div class="prompt">
<span>{{ item.params.negative_prompt }}</span>
<el-icon class="copy-prompt" :data-clipboard-text="item.params.negative_prompt">
<el-icon class="copy-prompt-sd" :data-clipboard-text="item.params.negative_prompt">
<DocumentCopy/>
</el-icon>
</div>
@@ -511,7 +511,7 @@
</template>
<script setup>
import {onMounted, ref} from "vue"
import {onMounted, onUnmounted, ref} from "vue"
import {Delete, DocumentCopy, InfoFilled, Orange, Picture, Refresh} from "@element-plus/icons-vue";
import {httpGet, httpPost} from "@/utils/http";
import {ElMessage, ElMessageBox, ElNotification} from "element-plus";
@@ -629,6 +629,7 @@ const connect = () => {
});
}
const clipboard = ref(null)
onMounted(() => {
checkSession().then(user => {
imgCalls.value = user['img_calls']
@@ -639,16 +640,20 @@ onMounted(() => {
}).catch(() => {
router.push('/login')
});
const clipboard = new Clipboard('.copy-prompt');
clipboard.on('success', () => {
clipboard.value = new Clipboard('.copy-prompt-sd');
clipboard.value.on('success', () => {
ElMessage.success("复制成功!");
})
clipboard.on('error', () => {
clipboard.value.on('error', () => {
ElMessage.error('复制失败!');
})
})
onUnmounted(() => {
clipboard.value.destroy()
})
const fetchRunningJobs = (userId) => {
// 获取运行中的任务
httpGet(`/api/sd/jobs?status=0&user_id=${userId}`).then(res => {
@@ -694,7 +699,11 @@ const fetchFinishJobs = (page) => {
if (res.data.length < pageSize.value) {
isOver.value = true
}
finishedJobs.value = finishedJobs.value.concat(res.data)
if (page === 1) {
finishedJobs.value = res.data
} else {
finishedJobs.value = finishedJobs.value.concat(res.data)
}
loading.value = false
}).catch(e => {
loading.value = false

View File

@@ -53,7 +53,7 @@
content="复制提示词"
placement="top"
>
<el-icon class="copy-prompt" :data-clipboard-text="slotProp.item.prompt">
<el-icon class="copy-prompt-wall" :data-clipboard-text="slotProp.item.prompt">
<DocumentCopy/>
</el-icon>
</el-tooltip>
@@ -143,7 +143,7 @@
</el-divider>
<div class="prompt">
<span>{{ item.prompt }}</span>
<el-icon class="copy-prompt" :data-clipboard-text="item.prompt">
<el-icon class="copy-prompt-wall" :data-clipboard-text="item.prompt">
<DocumentCopy/>
</el-icon>
</div>
@@ -156,7 +156,7 @@
</el-divider>
<div class="prompt">
<span>{{ item.params.negative_prompt }}</span>
<el-icon class="copy-prompt" :data-clipboard-text="item.params.negative_prompt">
<el-icon class="copy-prompt-wall" :data-clipboard-text="item.params.negative_prompt">
<DocumentCopy/>
</el-icon>
</div>
@@ -243,7 +243,7 @@
</template>
<script setup>
import {nextTick, onMounted, ref} from "vue"
import {nextTick, onMounted, onUnmounted, ref} from "vue"
import {DocumentCopy, Picture} from "@element-plus/icons-vue";
import {httpGet} from "@/utils/http";
import {ElMessage} from "element-plus";
@@ -314,17 +314,22 @@ const getNext = () => {
getNext()
const clipboard = ref(null)
onMounted(() => {
const clipboard = new Clipboard('.copy-prompt');
clipboard.on('success', () => {
clipboard.value = new Clipboard('.copy-prompt-wall');
clipboard.value.on('success', () => {
ElMessage.success("复制成功!");
})
clipboard.on('error', () => {
clipboard.value.on('error', () => {
ElMessage.error('复制失败!');
})
})
onUnmounted(() => {
clipboard.value.destroy()
})
const changeImgType = () => {
document.getElementById('waterfall-box').scrollTo(0, 0)
page.value = 0