Trim frontend build for lightweight AI agent admin
This commit is contained in:
@@ -0,0 +1,81 @@
|
||||
<script setup lang="ts">
|
||||
import type { DesignPreviewData } from './types';
|
||||
|
||||
import { computed, ref, watch } from 'vue';
|
||||
|
||||
import { ElButton, ElDialog, ElInput, ElMessage } from 'element-plus';
|
||||
|
||||
const props = defineProps<{
|
||||
preview?: DesignPreviewData;
|
||||
title?: string;
|
||||
visible: boolean;
|
||||
}>();
|
||||
|
||||
const emit = defineEmits<{
|
||||
(e: 'close'): void;
|
||||
(e: 'confirm', data: Record<string, any>): void;
|
||||
(e: 'update:visible', visible: boolean): void;
|
||||
}>();
|
||||
|
||||
const draftText = ref('{}');
|
||||
|
||||
const dialogTitle = computed(
|
||||
() => props.preview?.title || props.title || '确认内容',
|
||||
);
|
||||
|
||||
watch(
|
||||
() => [props.visible, props.preview] as const,
|
||||
() => {
|
||||
if (props.visible) {
|
||||
draftText.value = JSON.stringify(props.preview?.data || {}, null, 2);
|
||||
}
|
||||
},
|
||||
{ immediate: true },
|
||||
);
|
||||
|
||||
function handleClose() {
|
||||
emit('update:visible', false);
|
||||
emit('close');
|
||||
}
|
||||
|
||||
function handleConfirm() {
|
||||
try {
|
||||
const data = JSON.parse(draftText.value || '{}');
|
||||
emit('confirm', data && typeof data === 'object' ? data : { value: data });
|
||||
emit('update:visible', false);
|
||||
} catch {
|
||||
ElMessage.error('JSON 格式不正确');
|
||||
}
|
||||
}
|
||||
|
||||
function handleVisibleChange(visible: boolean) {
|
||||
if (!visible) handleClose();
|
||||
}
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<ElDialog
|
||||
:model-value="visible"
|
||||
:title="dialogTitle"
|
||||
width="720px"
|
||||
append-to-body
|
||||
destroy-on-close
|
||||
@update:model-value="handleVisibleChange"
|
||||
>
|
||||
<div class="space-y-3">
|
||||
<div class="text-muted-foreground text-sm">
|
||||
{{ preview?.type || 'design_preview' }}
|
||||
</div>
|
||||
<ElInput
|
||||
v-model="draftText"
|
||||
type="textarea"
|
||||
:rows="18"
|
||||
resize="vertical"
|
||||
/>
|
||||
</div>
|
||||
<template #footer>
|
||||
<ElButton @click="handleClose">取消</ElButton>
|
||||
<ElButton type="primary" @click="handleConfirm">确认</ElButton>
|
||||
</template>
|
||||
</ElDialog>
|
||||
</template>
|
||||
@@ -0,0 +1,23 @@
|
||||
import DesignPreviewDialog from './DesignPreviewDialog.vue';
|
||||
|
||||
type PreviewData = {
|
||||
data?: Record<string, any>;
|
||||
[key: string]: any;
|
||||
};
|
||||
|
||||
export type AppDesignData = PreviewData;
|
||||
export type AppSettingsData = PreviewData;
|
||||
export type DashboardBasicInfoData = PreviewData;
|
||||
export type DashboardDesignData = PreviewData;
|
||||
export type DashboardPublishData = PreviewData;
|
||||
export type DesignData = PreviewData;
|
||||
export type DesignType = string;
|
||||
export type SystemSummaryData = PreviewData;
|
||||
|
||||
export const AppDesignPanel = DesignPreviewDialog;
|
||||
export const AppSettingsPanel = DesignPreviewDialog;
|
||||
export const DashboardBasicInfoConfirmPanel = DesignPreviewDialog;
|
||||
export const DashboardDesignConfirmPanel = DesignPreviewDialog;
|
||||
export const DashboardPublishConfirmPanel = DesignPreviewDialog;
|
||||
export const DesignEditorPanel = DesignPreviewDialog;
|
||||
export const SystemSummaryConfirmPanel = DesignPreviewDialog;
|
||||
@@ -1,45 +1,34 @@
|
||||
import type { Component } from 'vue';
|
||||
import DesignPreviewDialog from '#/components/ai-chat-panel/DesignPreviewDialog.vue';
|
||||
|
||||
import { defineComponent, h } from 'vue';
|
||||
type PreviewData = {
|
||||
data?: Record<string, any>;
|
||||
[key: string]: any;
|
||||
};
|
||||
|
||||
export type DesignEditorData = Record<string, any>;
|
||||
export type AppDesignData = Record<string, any>;
|
||||
export type DashboardBasicInfoData = Record<string, any>;
|
||||
export type DashboardDesignData = Record<string, any>;
|
||||
export type DashboardPublishData = Record<string, any>;
|
||||
export type SystemSummaryData = Record<string, any>;
|
||||
export type AppDesignData = PreviewData;
|
||||
export type AppSettingsData = PreviewData;
|
||||
export type BasicFormData = PreviewData;
|
||||
export type DashboardBasicInfoData = PreviewData;
|
||||
export type DashboardDesignData = PreviewData;
|
||||
export type DashboardPublishData = PreviewData;
|
||||
export type DesignData = PreviewData;
|
||||
export type DesignType = string;
|
||||
export type FormBasicData = PreviewData;
|
||||
export type FormEditorData = PreviewData;
|
||||
export type PageBasicInfo = PreviewData;
|
||||
export type PageEditorData = PreviewData;
|
||||
export type PagePublishInfo = PreviewData;
|
||||
export type SystemSummaryData = PreviewData;
|
||||
|
||||
export interface FormEditorProps {
|
||||
readonly?: boolean;
|
||||
schema?: Record<string, any>;
|
||||
}
|
||||
|
||||
export interface PageEditorProps {
|
||||
readonly?: boolean;
|
||||
schema?: Record<string, any>;
|
||||
}
|
||||
|
||||
export const FORM_EDITOR_LIGHTWEIGHT = true;
|
||||
|
||||
function createLitePanel(name: string): Component {
|
||||
return defineComponent({
|
||||
name,
|
||||
setup(_, { slots }) {
|
||||
return () => h('div', { class: 'form-editor-lite-placeholder' }, slots.default?.());
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
export const BasicInfoEditor = createLitePanel('BasicInfoEditor');
|
||||
export const PublishInfoEditor = createLitePanel('PublishInfoEditor');
|
||||
export const PageBasicInfoEditor = createLitePanel('PageBasicInfoEditor');
|
||||
export const PagePublishInfoEditor = createLitePanel('PagePublishInfoEditor');
|
||||
export const FormEditorContent = createLitePanel('FormEditorContent');
|
||||
export const PageEditorContent = createLitePanel('PageEditorContent');
|
||||
export const DesignEditorPanel = createLitePanel('DesignEditorPanel');
|
||||
export const AppDesignPanel = createLitePanel('AppDesignPanel');
|
||||
export const AppSettingsPanel = createLitePanel('AppSettingsPanel');
|
||||
export const DashboardBasicInfoConfirmPanel = createLitePanel('DashboardBasicInfoConfirmPanel');
|
||||
export const DashboardDesignConfirmPanel = createLitePanel('DashboardDesignConfirmPanel');
|
||||
export const DashboardPublishConfirmPanel = createLitePanel('DashboardPublishConfirmPanel');
|
||||
export const SystemSummaryConfirmPanel = createLitePanel('SystemSummaryConfirmPanel');
|
||||
export const AppDesignPanel = DesignPreviewDialog;
|
||||
export const AppSettingsPanel = DesignPreviewDialog;
|
||||
export const BasicInfoEditor = DesignPreviewDialog;
|
||||
export const DashboardBasicInfoConfirmPanel = DesignPreviewDialog;
|
||||
export const DashboardDesignConfirmPanel = DesignPreviewDialog;
|
||||
export const DashboardPublishConfirmPanel = DesignPreviewDialog;
|
||||
export const DesignEditorPanel = DesignPreviewDialog;
|
||||
export const FormEditorContent = DesignPreviewDialog;
|
||||
export const PageBasicInfoEditor = DesignPreviewDialog;
|
||||
export const PageEditorContent = DesignPreviewDialog;
|
||||
export const PagePublishInfoEditor = DesignPreviewDialog;
|
||||
export const SystemSummaryConfirmPanel = DesignPreviewDialog;
|
||||
|
||||
@@ -53,9 +53,7 @@ import {
|
||||
import draggable from 'vuedraggable';
|
||||
|
||||
import { DeptSelector } from '../zq-form/dept-selector';
|
||||
import { FormSelector } from '../zq-form/form-selector';
|
||||
import { PostSelector } from '../zq-form/post-selector';
|
||||
import { TableSelector } from '../zq-form/table-selector';
|
||||
import { UserSelector } from '../zq-form/user-selector';
|
||||
import { useTableForm } from './init';
|
||||
|
||||
@@ -619,11 +617,9 @@ function isDialogFilterComponent(componentType: string): boolean {
|
||||
'department-selector',
|
||||
'dept-select',
|
||||
'dept-selector',
|
||||
'form-selector',
|
||||
'position-selector',
|
||||
'post-select',
|
||||
'post-selector',
|
||||
'table-selector',
|
||||
'user-select',
|
||||
'user-selector',
|
||||
].includes(componentType);
|
||||
@@ -1291,35 +1287,6 @@ function getSummaryMethod(param: { columns: any[]; data: any[] }) {
|
||||
:placeholder="$t('common.select')"
|
||||
@change="handleSelectorFilterChange"
|
||||
/>
|
||||
<FormSelector
|
||||
v-else-if="
|
||||
activeFilterComponentType === 'form-selector'
|
||||
"
|
||||
:model-value="tempFilterValues"
|
||||
:form-code="col.formCode"
|
||||
:value-field="col.formSelectorValueField || 'id'"
|
||||
:label-field="col.formSelectorLabelField || 'name'"
|
||||
multiple
|
||||
:placeholder="$t('common.select')"
|
||||
@change="handleSelectorFilterChange"
|
||||
/>
|
||||
<TableSelector
|
||||
v-else-if="
|
||||
activeFilterComponentType === 'table-selector'
|
||||
"
|
||||
:model-value="tempFilterValues"
|
||||
:data-source-type="col.tableSelectorDataSourceType"
|
||||
:form-code="col.formCode"
|
||||
:dict-code="col.tableSelectorDictCode"
|
||||
:data-source-code="col.tableSelectorDataSourceCode"
|
||||
:value-field="col.formSelectorValueField || 'id'"
|
||||
:label-field="col.formSelectorLabelField || 'name'"
|
||||
:columns="col.tableSelectorColumns"
|
||||
:search-fields="col.tableSelectorSearchFields"
|
||||
multiple
|
||||
:placeholder="$t('common.select')"
|
||||
@change="handleSelectorFilterChange"
|
||||
/>
|
||||
</div>
|
||||
<!-- 操作按钮 -->
|
||||
<div class="mt-2 flex justify-end gap-2">
|
||||
|
||||
Reference in New Issue
Block a user