feat: copy application

This commit is contained in:
wangdan-fit2cloud 2025-07-04 18:35:54 +08:00
parent ef51afb96e
commit fa842b0d13
10 changed files with 31 additions and 25 deletions

View File

@ -100,4 +100,5 @@ export default {
deleteConfirm: 'Confirm delete',
expand: 'Expand',
collapse: 'Collapse',
copyTitle: 'Copy',
}

View File

@ -10,7 +10,6 @@ export default {
workflowPlaceholder:
'Suitable for advanced users to build complex logic AI assistants using low-code drag-and-drop',
appTest: 'Debug Preview',
copy: 'Copy',
searchBar: {
placeholder: 'Search by name',
},

View File

@ -104,4 +104,5 @@ export default {
deleteConfirm: '是否删除',
expand: '展开',
collapse: '收起',
copyTitle: '副本',
}

View File

@ -9,7 +9,6 @@ export default {
simplePlaceholder: '适用于初级用户使用表单设置构建AI对话助手',
workflowPlaceholder: '适用于高级用户使用低代码拖拉拽方式构建复杂逻辑的AI对话助手',
appTest: '调试预览',
copy: '副本',
searchBar: {
placeholder: '按名称搜索',
},

View File

@ -28,10 +28,6 @@ export default {
saveMessage: '当前的更改尚未保存,确认退出吗?',
},
form: {
title: {
copy: '副本',
baseInfo: '基础信息',
},
toolName: {
label: '名称',
name: '工具名称',

View File

@ -100,4 +100,5 @@ export default {
deleteConfirm: '是否刪除',
expand: '展開',
collapse: '收起',
copyTitle: '副本',
}

View File

@ -9,7 +9,6 @@ export default {
simplePlaceholder: '適用於初級用戶使用表單設定構建AI對話助手',
workflowPlaceholder: '適用於高階用戶使用低代碼拖拉拽方式構建複雜邏輯的AI對話助手',
appTest: '調試預覽',
copy: '副本',
searchBar: {
placeholder: '按名稱搜尋',
},

View File

@ -104,6 +104,8 @@ const rules = reactive<FormRules<ApplicationFormType>>({
],
})
const currentFolder = ref('')
watch(dialogVisible, (bool) => {
if (!bool) {
applicationForm.value = {
@ -133,10 +135,11 @@ watch(dialogVisible, (bool) => {
}
})
const open = (data: any) => {
const open = (data: any, folder: string) => {
currentFolder.value = folder
const obj = cloneDeep(data)
delete obj['id']
obj['name'] = obj['name'] + ` ${t('views.application.form.title.copy')}`
obj['name'] = obj['name'] + ` ${t('common.copyTitle')}`
applicationForm.value = obj
dialogVisible.value = true
}
@ -160,7 +163,9 @@ const submitHandle = async (formEl: FormInstance | undefined) => {
if (!formEl) return
await formEl.validate((valid) => {
if (valid) {
applicationApi.postApplication(applicationForm.value, loading).then((res) => {
applicationApi
.postApplication({ ...applicationForm.value, folder_id: currentFolder.value }, loading)
.then((res) => {
MsgSuccess(t('common.createSuccess'))
if (isWorkFlow(applicationForm.value.type)) {
router.push({ path: `/application/${res.data.id}/workflow` })

View File

@ -244,7 +244,13 @@
<AppIcon iconName="app-migrate"></AppIcon>
{{ $t('common.moveTo') }}
</el-dropdown-item>
<el-dropdown-item
@click="copyApplication(item)"
v-if="permissionPrecise.create()"
>
<AppIcon iconName="app-copy"></AppIcon>
{{ $t('common.copy') }}
</el-dropdown-item>
<el-dropdown-item
divided
@click.stop="exportApplication(item)"
@ -405,15 +411,14 @@ const apiInputParams = ref([])
function copyApplication(row: any) {
application.asyncGetApplicationDetail(row.id, loading).then((res: any) => {
if (res?.data) {
CopyApplicationDialogRef.value.open({ ...res.data, model_id: res.data.model })
CopyApplicationDialogRef.value.open(
{ ...res.data, model_id: res.data.model },
folder.currentFolder?.id || 'default',
)
}
})
}
const is_show_copy_button = (row: any) => {
return user.userInfo ? user.userInfo.id == row.user_id : false
}
function settingApplication(row: any) {
if (isWorkFlow(row.type)) {
router.push({ path: `/application/${row.id}/workflow` })

View File

@ -481,7 +481,7 @@ async function copyTool(row: any) {
)
const obj = cloneDeep(res.data)
delete obj['id']
obj['name'] = obj['name'] + ` ${t('views.tool.form.title.copy')}`
obj['name'] = obj['name'] + ` ${t('common.copyTitle')}`
ToolFormDrawerRef.value.open(obj)
}