数通互联化工云平台
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

164 lines
3.9 KiB

<!--
@ 作者: 秦东
@ 时间: 2024-05-09 15:12:45
@ 备注: 自定义表单组件页面(App专用)
-->
<script lang="ts" setup>
import { jsonParseStringify } from "@/utils/DesignForm";
import controlListData from "@/components/DesignForm/assembly";
import Draggable from "vuedraggable-es";
import "@/assets/iconfont/iconfont.css";
//引入页面
import FormVersion from "@/components/DesignForm/formVersion.vue";
const props = withDefaults(
defineProps<{
tableKey?: number | string;
signCode?: number | string;
}>(),
{}
);
const designType = inject("formDesignType") as string; //注入一个由祖先组件或整个应用 (通过 app.provide()) 提供的值。
const isSearch = computed(() => {
return designType === "search";
});
// 默认搜索允许显示的字段
const searchField = [
"input",
"radio",
"checkbox",
"select",
"datePicker",
"timePicker",
"inputNumber",
"cascader",
"component",
"button",
];
/**
@ 作者: 秦东
@ 时间: 2024-05-09 10:58:56
@ 功能: 表单组件数据
*/
const controlList = computed(() => {
if (designType === "search") {
// 只返回基础字段
const temp: any = [];
controlListData.forEach((item: any) => {
if (item.children) {
const filter = item.children.filter((ch: any) => {
return searchField.includes(ch.type);
});
if (filter && filter.length) {
temp.push({ title: item.title, children: filter });
}
}
});
return temp;
} else {
return controlListData;
}
});
const tableVersion = ref(); //版本显示器
const emits = defineEmits<{
(e: "versionUpdateForm", value: string): void;
(e: "versionPreviewPage", value: string): void;
}>();
/**
@ 作者: 秦东
@ 时间: 2024-05-09 11:36:59
@ 功能: 启用和禁用版本
*/
const enableOrDisable = (val?: any) => {
// console.log("启用和禁用版本",val)
emits("versionUpdateForm", val);
};
/**
@ 作者: 秦东
@ 时间: 2024-05-21 09:05:20
@ 功能: 预览版本
*/
const previewPage = (val?: any) => {
emits("versionPreviewPage", val);
};
/**
@ 作者: 秦东
@ 时间: 2024-05-09 11:40:15
@ 功能: 打开版本选择页面
*/
const useVersionClick = () => {
tableVersion.value.open();
};
const activities = [
{
content: "Event start",
timestamp: "2018-04-15",
},
{
content: "Approved",
timestamp: "2018-04-13",
},
{
content: "Success",
timestamp: "2018-04-11",
},
];
/**
@ 作者: 秦东
@ 时间: 2024-05-15 10:15:14
@ 功能: 克隆选中的组件数据结构
*/
const clone = (origin: any) => {
// console.log("克隆选中的组件数据结构",origin)
return jsonParseStringify(origin);
};
</script>
<template>
<div class="components-list">
<div v-for="(list, index) in controlList" :key="index">
<div class="title">
{{ list.title }}
<div v-if="index === 0 && !isSearch" class="template" @click="useVersionClick">
版本
</div>
</div>
<draggable
v-model="list.children"
tag="ul"
:group="{ name: 'form', pull: 'clone', put: false }"
ghost-class="ghost"
:sort="false"
:clone="clone"
:item-key="key123"
>
<template #item="{ element }">
<li class="fontIcon" :class="[element.type]">
<i v-if="element.iconFont == ''" :class="`icon-${element.icon}`"></i>
<i v-if="element.iconFont != ''" :class="`fa ${element.iconFont} `"></i>
<span :title="element.label">{{ element.label }}</span>
</li>
</template>
</draggable>
</div>
</div>
<FormVersion
ref="tableVersion"
:table-key="props.tableKey"
:sign-code="props.signCode"
@enableOrDisable="enableOrDisable"
@previewPage="previewPage"
/>
</template>
<style lang="scss" scoped>
.tab_pane_body {
text-align: center;
}
.fontIcon {
height: 35px;
i {
padding: 3px 0px 0 0px;
}
}
</style>