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.
1500 lines
42 KiB
1500 lines
42 KiB
<!--
|
|
@ 作者: 秦东
|
|
@ 时间: 2024-03-18 11:32:14
|
|
@ 备注: 自定义表单列表
|
|
-->
|
|
<script lang='ts' setup>
|
|
import { ElTable } from 'element-plus'
|
|
import { Hide, View } from '@element-plus/icons-vue'
|
|
import { attrButton,tableButton,tableButtonList,tableLogButtonList,tableAttrLogButtonList,diaOrDrawer } from '@/api/DesignForm/tableButton'
|
|
|
|
import { json2string,objToStringify,string2json,stringToObj } from '@/utils/DesignForm/form'
|
|
import { analysisForm,setFlowFormKeyPower } from '@/api/workflowapi/index'
|
|
import { gainFormTableField,editCustomerFormList,gainFormListCont,gainListTableField } from '@/api/DesignForm/requestapi'
|
|
import { formTableField,formTabelStruct } from "@/api/DesignForm/type";
|
|
|
|
import tempOtherUnit from '@/components/DesignForm/pageList/types'
|
|
import { ElMessage } from 'element-plus'
|
|
|
|
import Sortable from 'sortablejs'
|
|
//引入子组件
|
|
import PageListHeadTools from '@/views/sysworkflow/lowcodepage/pageListHeadTools.vue'
|
|
import ControlSetup from '@/views/sysworkflow/lowcodepage/pageSetUpDialog/controlSetup.vue'
|
|
import FieldSetUp from '@/views/sysworkflow/lowcodepage/pageSetUpDialog/fieldSetUp.vue'
|
|
import SearchField from '@/views/sysworkflow/lowcodepage/pageSetUpDialog/searchField.vue'
|
|
import PreviewPage from '@/views/sysworkflow/lowcodepage/pageSetUpDialog/previewPage.vue'
|
|
import CodePage from '@/views/sysworkflow/lowcodepage/pageSetUpDialog/codePage.vue'
|
|
|
|
|
|
const props = defineProps({
|
|
formKey:{
|
|
type:String,
|
|
default:""
|
|
},
|
|
formVersion:{
|
|
type:String,
|
|
default:""
|
|
},
|
|
tabsActive:{
|
|
type:Number,
|
|
default:1
|
|
},
|
|
state:{
|
|
type:Object,
|
|
default(){
|
|
return {}
|
|
}
|
|
}
|
|
});
|
|
|
|
const emits = defineEmits<{
|
|
(e: 'update:state', val: formStruct): void
|
|
(e: 'update:formKey', val: string): void
|
|
(e: 'update:formVersion', val: string): void
|
|
(e: 'judgeFlowIsEdit', val: boolean): void
|
|
(e: 'runNextWindows', val: number): void
|
|
(e: 'closeFormPage'): void
|
|
}>()
|
|
|
|
const statePro = computed({
|
|
get() {
|
|
return props.state
|
|
},
|
|
set(val: formStruct) {
|
|
emits('update:state', val)
|
|
}
|
|
});
|
|
|
|
const formTableActive = ref(1)
|
|
const pageLoading = ref(false)
|
|
//自定义列表结构
|
|
const state = reactive({
|
|
tableData: {
|
|
// tableProps: {}, //表格所有参数
|
|
columns: [],
|
|
config: {},
|
|
controlBtn:[],
|
|
operateBtn:[]
|
|
},
|
|
searchData: [],
|
|
loading: false,
|
|
attrObj: {},
|
|
config: {
|
|
pageSize:10,
|
|
searchIsShow:true,
|
|
searchFormIsShow:true,
|
|
openPageMode:"drawer"
|
|
},
|
|
tagList: {},
|
|
formId: props.formKey.toString() || '',
|
|
formList: [], // 所有可选表单数据源
|
|
name: '',
|
|
treeData: {}, // 左侧树相关
|
|
previewVisible: false,
|
|
tabsName: 'second',
|
|
formFieldList: [], // 表单数据源所有可选字段
|
|
formApi:{
|
|
type:"1",
|
|
addApiUrl:"",
|
|
editApiUrl:"",
|
|
delApiUrl:"",
|
|
lookApiUrl:""
|
|
},
|
|
dict: {},
|
|
refreshTable: true,
|
|
view:{
|
|
list:{
|
|
status:true,
|
|
isClick:false,
|
|
form:{
|
|
sortWord:"",
|
|
sort:1
|
|
}
|
|
},
|
|
date:{
|
|
status:false,
|
|
isClick:false,
|
|
form:{
|
|
startTime:"",
|
|
endTime:"",
|
|
dayType:1
|
|
}
|
|
}
|
|
,
|
|
time:{
|
|
status:false,
|
|
isClick:false,
|
|
form:{
|
|
sortWord:"",
|
|
sort:1
|
|
}
|
|
}
|
|
,
|
|
gantt:{
|
|
status:false,
|
|
isClick:false,
|
|
form:{
|
|
startTime:"",
|
|
endTime:"",
|
|
dayType:2,
|
|
sortWord:"",
|
|
sort:1
|
|
}
|
|
}
|
|
,
|
|
map:{
|
|
status:false,
|
|
isClick:false,
|
|
form:{
|
|
mapWord:"",
|
|
sortWord:"",
|
|
sort:1
|
|
}
|
|
}
|
|
}
|
|
})
|
|
|
|
const kaif = (id: number, callback?: (list: any) => void) => {
|
|
// const content = stringToObj(props.state.formData)
|
|
console.log('获取当前数据下所有字段',statePro.value.formData)
|
|
filterFiled(statePro.value.formData)
|
|
callback && callback(statePro.value.formData.list)
|
|
|
|
console.log('获取当前数据下所有字段--->',state.formFieldList)
|
|
}
|
|
const filterFiled = (obj: any) => {
|
|
obj?.list.forEach((item: FormList) => {
|
|
if (item.type === 'grid' || item.type === 'tabs') {
|
|
item.columns.forEach((col: FormList) => {
|
|
filterFiled(col)
|
|
})
|
|
} else if (['card', 'div'].includes(item.type)) {
|
|
filterFiled(item)
|
|
} else if (!excludeType.includes(item.type) && item.name) {
|
|
state.formFieldList.push({
|
|
prop: item.name,
|
|
label: item.formItem?.label,
|
|
help: item.config.help || ''
|
|
})
|
|
}
|
|
})
|
|
}
|
|
const excludeType = [
|
|
'txt',
|
|
'title',
|
|
'table',
|
|
'component',
|
|
'upload',
|
|
'button',
|
|
'tinymce',
|
|
'inputSlot',
|
|
'flex'
|
|
]
|
|
|
|
const powerUnitAry = ref<any>({
|
|
nodeKey:"",
|
|
recUnitAry:{
|
|
masterUnitList:[],
|
|
sunUnitList:[],
|
|
unitAllKey:[],
|
|
unitAllState:[]
|
|
}
|
|
})
|
|
const formTableField = reactive<formTableField>({})
|
|
/**
|
|
@ 作者: 秦东
|
|
@ 时间: 2024-03-13 08:24:54
|
|
@ 功能: 解析表单
|
|
*/
|
|
const jieForm = () => {
|
|
// analysisForm({nodeKey:"begin",nodeJson:JSON.stringify(statePro.value.formData)})
|
|
// .then((data)=>{
|
|
// if(data.code == 0){
|
|
// powerUnitAry.value = data.data
|
|
// }
|
|
// })
|
|
if(props.formKey != ""){
|
|
gainFormTableField({id:props.formKey.toString()})
|
|
.then((data)=>{
|
|
console.log('解析表单--->',data)
|
|
formTableField.masterTable=data.data.masterTable
|
|
formTableField.sunTable=data.data.sunTable
|
|
})
|
|
}
|
|
|
|
}
|
|
const handleSelectionChange = (val: User[]) => {
|
|
console.log('表单选中--->',val)
|
|
}
|
|
// watch(()=>statePro.value,()=>{
|
|
// jieForm()
|
|
// },
|
|
// {
|
|
// deep: true
|
|
// })
|
|
watch(()=>props.tabsActive,(val:number)=>{
|
|
if(val == 3){
|
|
jieForm();
|
|
getListInfo();
|
|
}
|
|
})
|
|
onMounted(()=>{
|
|
jieForm();
|
|
nextTick(() => {
|
|
columnDrop()
|
|
getListInfo();
|
|
gainFormTableKeyWord(props.appPageKey.toString())
|
|
})
|
|
})
|
|
|
|
const allKeyWords = ref<any[]>([])
|
|
const timeKeyWords = ref<any[]>([])
|
|
const mapKeyWords = ref<any[]>([])
|
|
const isMapTrue = ref(true)
|
|
/**
|
|
@ 作者: 秦东
|
|
@ 时间: 2024-07-06 10:44:54
|
|
@ 功能: 获取数据表字段数据
|
|
*/
|
|
const gainFormTableKeyWord = (val:string) => {
|
|
gainListTableField({id:val.toString()})
|
|
.then((data) =>{
|
|
console.log("获取数据表字段数据",data)
|
|
allKeyWords.value = data.data.allKeyWords
|
|
timeKeyWords.value = data.data.timeKeyWords
|
|
mapKeyWords.value = data.data.mapKeyWords
|
|
isMapTrue.value = !data.data.isMap
|
|
})
|
|
}
|
|
|
|
|
|
const setUpFieldInfo = ref<tableButton>()
|
|
const setUpFieldIsOpen= ref(false)
|
|
|
|
const tableAttrBut = ref<InstanceType<typeof ElTable>>()
|
|
/**
|
|
@ 作者: 秦东
|
|
@ 时间: 2024-03-25 11:51:46
|
|
@ 功能: 设置字段属性
|
|
*/
|
|
const setUpField = (val:any) =>{
|
|
console.log("设置字段属性-->",val)
|
|
setUpFieldInfo.value = val
|
|
|
|
setUpFieldIsOpen.value = true
|
|
|
|
console.log("设置字段属性-1->",setUpFieldIsOpen)
|
|
}
|
|
/**
|
|
@ 作者: 秦东
|
|
@ 时间: 2024-03-27 09:17:15
|
|
@ 功能: 设置功能按钮
|
|
*/
|
|
const listButtonIsShow = ref(false)
|
|
const setUpFieldBut = () => {
|
|
// console.log("设置字段属性-->")
|
|
listButtonIsShow.value = true
|
|
}
|
|
//功能按钮
|
|
const tableAttrButClick = (val:tableButton[]) => {
|
|
if(zhuDaunIsTrue.value == true){
|
|
if(state.tableData.controlBtn.length > 0){
|
|
state.tableData.controlBtn.splice(0, state.tableData.controlBtn.length);
|
|
state.tableData.controlBtn = val
|
|
}else{
|
|
state.tableData.controlBtn = val
|
|
}
|
|
}
|
|
}
|
|
/**
|
|
@ 作者: 秦东
|
|
@ 时间: 2024-03-25 14:58:22
|
|
@ 功能: 功能字段
|
|
*/
|
|
const tableFieldAttrButClick = (val:tableButton[]) => {
|
|
if(zhuDaunIsTrue.value == true){
|
|
if(val.length > 0){ //判断是否有选中的字段
|
|
if(state.tableData.columns.length > 0){ //判断列表是否有数据
|
|
val.forEach((item:tableButton)=>{
|
|
let isTrue = true;
|
|
state.tableData.columns.forEach((itemTab:tableButton)=>{
|
|
if(item.id == itemTab.id){
|
|
isTrue = false;
|
|
}
|
|
});
|
|
if(isTrue){
|
|
state.tableData.columns.push(item)
|
|
}
|
|
})
|
|
}else{ //列表无数据,直接新增
|
|
val.forEach((item:tableButton)=>{
|
|
state.tableData.columns.push(item)
|
|
})
|
|
}
|
|
//此处往下是处理列表中有为选中的字段
|
|
let delField = []
|
|
tableAttrLogButtonList.forEach((item:tableButton)=>{
|
|
let isTrue = true;
|
|
val.forEach((itemVal:tableButton)=>{
|
|
if(item.id == itemVal.id){
|
|
isTrue = false
|
|
}
|
|
})
|
|
if(isTrue){
|
|
delField.push(item.id)
|
|
}
|
|
});
|
|
if(delField.length > 0){
|
|
state.tableData.columns.forEach((itemTab:tableButton,index:number)=>{
|
|
delField.forEach((item:string)=>{
|
|
if(item == itemTab.id){
|
|
state.tableData.columns.splice(index,1) //删除列表中已经存在的字段
|
|
}
|
|
})
|
|
|
|
});
|
|
}
|
|
}else{ //无选中的字段
|
|
if(state.tableData.columns.length > 0){
|
|
tableAttrLogButtonList.forEach((item:tableButton)=>{
|
|
state.tableData.columns.forEach((itemTab:tableButton,index:number)=>{
|
|
if(item.id == itemTab.id){
|
|
state.tableData.columns.splice(index,1) //删除列表中已经存在的字段
|
|
}
|
|
});
|
|
});
|
|
}
|
|
}
|
|
if(state.tableData.columns.length > 0){
|
|
let isOpent = true;
|
|
state.tableData.columns.forEach((itemTab:tableButton)=>{
|
|
if(itemTab.fieldClass == "__control"){
|
|
isOpent = false;
|
|
}
|
|
});
|
|
if(isOpent){
|
|
state.tableData.operateBtn = [];
|
|
}
|
|
}else{
|
|
state.tableData.operateBtn = [];
|
|
}
|
|
}
|
|
}
|
|
const zhuDaunIsTrue = ref(false);
|
|
/**
|
|
@ 作者: 秦东
|
|
@ 时间: 2024-03-25 16:36:38
|
|
@ 功能: 列表字段处理
|
|
*/
|
|
const tableListFieldClick = (val:any[]) => {
|
|
console.log("列表字段处理-->",val)
|
|
// zhuDaunIsTrue.value = true
|
|
if(zhuDaunIsTrue.value == true){
|
|
if(val.length > 0){
|
|
if(state.tableData.columns.length > 0){ //判断列表是否有数据
|
|
val.forEach((item:tableButton)=>{
|
|
let isTrue = true;
|
|
state.tableData.columns.forEach((itemTab:tableButton)=>{
|
|
if(item.id == itemTab.id){
|
|
console.log("列表字段处理-111->",val)
|
|
isTrue = false;
|
|
}
|
|
});
|
|
if(isTrue){
|
|
state.tableData.columns.push(item)
|
|
}
|
|
})
|
|
}else{ //列表无数据,直接新增
|
|
val.forEach((item:any)=>{
|
|
state.tableData.columns.push(item)
|
|
})
|
|
}
|
|
//此处往下是处理列表中有为选中的字段
|
|
let delField = []
|
|
formTableField.masterTable.forEach((item:tableButton)=>{
|
|
let isTrue = true;
|
|
val.forEach((itemVal:tableButton)=>{
|
|
if(item.id == itemVal.id){
|
|
isTrue = false
|
|
}
|
|
})
|
|
if(isTrue){
|
|
delField.push(item.id)
|
|
}
|
|
});
|
|
if(delField.length > 0){
|
|
state.tableData.columns.forEach((itemTab:tableButton,index:number)=>{
|
|
delField.forEach((item:string)=>{
|
|
if(item == itemTab.id){
|
|
state.tableData.columns.splice(index,1) //删除列表中已经存在的字段
|
|
}
|
|
})
|
|
|
|
});
|
|
}
|
|
}else{
|
|
if(state.tableData.columns.length > 0){
|
|
formTableField.masterTable.forEach((item:tableButton)=>{
|
|
state.tableData.columns.forEach((itemTab:tableButton,index:number)=>{
|
|
if(item.id == itemTab.id){
|
|
state.tableData.columns.splice(index,1) //删除列表中已经存在的字段
|
|
}
|
|
});
|
|
});
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
const container = ref()
|
|
//拖动字段排序
|
|
const columnDrop = () => {
|
|
const wrapperTr = container.value.querySelector(
|
|
'.el-table__header-wrapper tr'
|
|
)
|
|
console.log("wrapperTr",wrapperTr)
|
|
Sortable.create(wrapperTr, {
|
|
animation: 180,
|
|
delay: 0,
|
|
onEnd: (evt: any) => {
|
|
console.log("evt",evt.oldIndex,evt.newIndex)
|
|
const oldItem = state.tableData.columns[evt.oldIndex]
|
|
state.tableData.columns.splice(evt.oldIndex, 1)
|
|
state.tableData.columns.splice(evt.newIndex, 0, oldItem)
|
|
// 重染表格,否则点下面的设置对不上了
|
|
state.refreshTable = false
|
|
nextTick(() => {
|
|
state.refreshTable = true
|
|
nextTick(() => {
|
|
columnDrop() // 拖完后拖不到了,再执行一下
|
|
})
|
|
})
|
|
}
|
|
})
|
|
}
|
|
|
|
const tableFieldList = ref<InstanceType<typeof ElTable>>()
|
|
const tableFieldAttrBut = ref<InstanceType<typeof ElTable>>()
|
|
|
|
/**
|
|
@ 作者: 秦东
|
|
@ 时间: 2024-03-27 08:27:22
|
|
@ 功能: 删除表头列表字段
|
|
*/
|
|
const delCol = (val:any) => {
|
|
let delInfo = []
|
|
let delInfoBut = []
|
|
if(state.tableData.columns.length > 0) {
|
|
|
|
state.tableData.columns.forEach((item: any, index: number) => {
|
|
if (item.id === val.id) {
|
|
state.tableData.columns.splice(index, 1)
|
|
if(item.attribute == "-"){
|
|
delInfoBut.push(item)
|
|
}else{
|
|
delInfo.push(item)
|
|
}
|
|
}
|
|
|
|
})
|
|
|
|
// tableFieldList.value!.toggleRowSelection(delInfo, true)
|
|
console.log("delInfo",delInfo)
|
|
// tableFieldList.value!.clearSelection()
|
|
}else{
|
|
tableFieldList.value!.clearSelection()
|
|
tableFieldAttrBut.value!.clearSelection()
|
|
}
|
|
if(delInfo.length > 0){
|
|
delInfo.forEach((item:any)=>{
|
|
tableFieldList.value!.toggleRowSelection(item, false)
|
|
})
|
|
}
|
|
if(delInfoBut.length > 0){
|
|
delInfoBut.forEach((item:any)=>{
|
|
tableFieldAttrBut.value!.toggleRowSelection(item, false)
|
|
})
|
|
}
|
|
}
|
|
/**
|
|
@ 作者: 秦东
|
|
@ 时间: 2024-03-27 10:13:34
|
|
@ 功能: 更新列表记录操作按钮
|
|
*/
|
|
const updataLogBut = (val:attrButton[]) => {
|
|
console.log("更新列表记录操作按钮",val)
|
|
let isWrete = true
|
|
if(state.tableData.columns && state.tableData.columns.length > 0){
|
|
state.tableData.columns.forEach((item:any)=>{
|
|
if(item.fieldClass == "__control"){
|
|
state.tableData.operateBtn = val.value
|
|
isWrete = false
|
|
}
|
|
})
|
|
}
|
|
if(isWrete){
|
|
state.tableData.operateBtn = [];
|
|
}
|
|
// console.log("更新列表记录操作按钮------1------->",state.tableData.operateBtn)
|
|
}
|
|
|
|
/**
|
|
@ 作者: 秦东
|
|
@ 时间: 2024-03-28 15:00:12
|
|
@ 功能: 处理查询条件
|
|
*/
|
|
const addOrDelSearchField = (val:attrButton,isTrue:boolean) => {
|
|
if(isTrue){
|
|
if(state.searchData.length>0){
|
|
let isWrite = true;
|
|
state.searchData.forEach((item:attrButton,index:number)=>{
|
|
if(item.id==val.id){
|
|
isWrite = false;
|
|
}
|
|
})
|
|
if(isWrite){
|
|
state.searchData.push(val)
|
|
}
|
|
}else{
|
|
state.searchData.push(val)
|
|
}
|
|
}else{
|
|
if(state.searchData.length>0){
|
|
state.searchData.forEach((item:attrButton,index:number)=>{
|
|
if(item.id==val.id){
|
|
state.searchData.splice(index,1)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
}
|
|
|
|
// 定义自定义表头
|
|
const readerColumn = (column:any) => {
|
|
// console.log(column)
|
|
let labelLong = column.label.length // 表头label长度
|
|
if(column.label.length < 3) {
|
|
labelLong = 3
|
|
}
|
|
let size = 30 // 根据需求定义一个字体的标尺
|
|
// column.minWidth = labelLong * size
|
|
//@ts-ignore
|
|
return labelLong * size
|
|
}
|
|
|
|
const adaptiveWidth = (colName: any) =>{
|
|
if (!colName) {
|
|
return
|
|
}
|
|
colName += ''
|
|
const english = /\w+/
|
|
let colWidth = 0
|
|
for (const char of colName) {
|
|
if (english.test(char)) {
|
|
colWidth += 30
|
|
} else {
|
|
colWidth += 30
|
|
}
|
|
}
|
|
return colWidth
|
|
}
|
|
const codeIsShow = ref(false) //生成代码
|
|
/**
|
|
@ 作者: 秦东
|
|
@ 时间: 2024-03-29 11:12:26
|
|
@ 功能: 列表头部按钮操作
|
|
*/
|
|
const listPageTools = (type: string) => {
|
|
console.log("列表头部操作--》",type)
|
|
switch(type){
|
|
case "del":
|
|
clearData()
|
|
break;
|
|
case "eye":
|
|
state.previewVisible = true
|
|
break;
|
|
case "json":
|
|
drawer.title = "查看表格列表结构"
|
|
dialogOpen(state, { direction: 'ltr', type: 'json' })
|
|
break;
|
|
case "save":
|
|
saveFormListData()
|
|
case "close":
|
|
emits('closeFormPage')
|
|
break;
|
|
default:
|
|
}
|
|
}
|
|
|
|
/**
|
|
@ 作者: 秦东
|
|
@ 时间: 2024-03-29 14:42:39
|
|
@ 功能: 关闭预览
|
|
*/
|
|
const handlePreviewClose = () => {
|
|
state.previewVisible = false
|
|
}
|
|
const drawer = reactive({
|
|
visible: false,
|
|
title: '',
|
|
direction: 'ltr',
|
|
content: '',
|
|
codeType: ''
|
|
})
|
|
/**
|
|
@ 作者: 秦东
|
|
@ 时间: 2024-03-29 14:08:49
|
|
@ 功能: 数据格式处理
|
|
*/
|
|
const dialogOpen = (obj: any, params: any = {}) => {
|
|
drawer.visible = true
|
|
Object.assign(drawer, { direction: 'ltr' }, params)
|
|
let editData = objToStringify(obj, true)
|
|
switch (params.type) {
|
|
case 'dict':
|
|
editData = json2string(obj, true)
|
|
break
|
|
case 'beforeRequest':
|
|
case 'beforeDelete':
|
|
case 'treeBeforeRequest':
|
|
if (!obj) {
|
|
editData = beforeRequest
|
|
}
|
|
break
|
|
case 'afterResponse':
|
|
case 'treeAfterResponse':
|
|
if (!obj) {
|
|
editData = afterResponse
|
|
}
|
|
break
|
|
}
|
|
drawer.content = editData
|
|
}
|
|
/**
|
|
@ 作者: 秦东
|
|
@ 时间: 2024-03-29 11:02:51
|
|
@ 功能: 清空数据
|
|
*/
|
|
const clearData = () => {
|
|
tableFieldList.value!.clearSelection()
|
|
tableFieldAttrBut.value!.clearSelection()
|
|
tableAttrBut.value!.clearSelection()
|
|
state.searchData = []
|
|
// state.tableData.controlBtn = []
|
|
// state.tableData.columns = []
|
|
state.tableData.operateBtn = []
|
|
state.tableData.config = {}
|
|
if(formTableField.masterTable){
|
|
formTableField.masterTable.forEach((item)=>{
|
|
item.isSearch = false;
|
|
})
|
|
}
|
|
|
|
}
|
|
|
|
/**
|
|
@ 作者: 秦东
|
|
@ 时间: 2024-03-29 14:58:52
|
|
@ 功能: 添加自定义表单列表设定
|
|
*/
|
|
const saveFormListData = () => {
|
|
const { type ,addApiUrl ,editApiUrl,delApiUrl,lookApiUrl } = state.formApi
|
|
if(!props.formKey || props.formKey == "" || props.formKey == null || props.formKey == undefined){
|
|
return ElMessage.error('未知表单参数!请先保存前置表单后再操作!')
|
|
}
|
|
console.log("添加自定义表单列表设定",state.formApi)
|
|
if(type != 1){
|
|
if(addApiUrl=="" || editApiUrl=="" || delApiUrl=="" || lookApiUrl == ""){
|
|
return ElMessage.error('请补全列表第三方APIUrl!')
|
|
}
|
|
}
|
|
if(state.tableData.columns.length < 1){
|
|
return ElMessage.error('未设置表单查询项!不可提交!')
|
|
}
|
|
let params: any = {
|
|
data: json2string(state),
|
|
id: props.formKey.toString()
|
|
}
|
|
console.log("添加自定义表单列表设定",params)
|
|
editCustomerFormList(params)
|
|
.then((data)=>{
|
|
console.log("添加自定义表单列表设定",data)
|
|
ElMessage.success(data.msg)
|
|
})
|
|
}
|
|
/**
|
|
@ 作者: 秦东
|
|
@ 时间: 2024-04-01 08:41:31
|
|
@ 功能: 获取列表内容
|
|
*/
|
|
const getListInfo = () => {
|
|
console.log("获取列表内容1111",props.formKey)
|
|
gainFormListCont({id:props.formKey.toString()})
|
|
.then((data)=>{
|
|
console.log("获取列表内容",data)
|
|
if(data.data.listjson != null && data.data.listjson != ""){
|
|
let stateData = string2json(data.data.listjson)
|
|
console.log("获取列表内容---->",stateData)
|
|
state.tableData = stateData.tableData
|
|
state.searchData = stateData.searchData
|
|
state.loading = stateData.loading
|
|
state.attrObj = stateData.attrObj
|
|
state.config = stateData.config
|
|
state.tagList = stateData.tagList
|
|
state.formId = stateData.formId
|
|
state.formList = stateData.formList
|
|
state.name = stateData.name
|
|
state.treeData = stateData.treeData
|
|
state.previewVisible = stateData.previewVisible
|
|
state.formFieldList = stateData.formFieldList
|
|
state.formApi = stateData.formApi
|
|
state.dict = stateData.dict
|
|
state.refreshTable = stateData.refreshTable
|
|
state.view = stateData.view
|
|
|
|
console.log("获取列表内容--1-->",stateData.view)
|
|
console.log("获取列表内容--2-->",state.view)
|
|
}
|
|
|
|
|
|
zhuDaunIsTrue.value = false
|
|
|
|
if(state.tableData && state.tableData.columns && state.tableData.columns.length > 0) {
|
|
|
|
if(formTableField.masterTable && formTableField.masterTable.length > 0){
|
|
state.tableData.columns.forEach((itemCol:any)=>{
|
|
formTableField.masterTable.forEach((item:any)=>{
|
|
if(itemCol.id == item.id){
|
|
console.log("========>",item)
|
|
item.isSearch = true
|
|
tableFieldList.value!.toggleRowSelection(item, true)
|
|
}
|
|
})
|
|
})
|
|
|
|
}
|
|
|
|
if(tableAttrLogButtonList && tableAttrLogButtonList.length > 0){
|
|
state.tableData.columns.forEach((itemCol:any)=>{
|
|
tableAttrLogButtonList.forEach((item:any)=>{
|
|
if(itemCol.id == item.id){
|
|
tableFieldAttrBut.value!.toggleRowSelection(item, true)
|
|
}
|
|
})
|
|
})
|
|
}
|
|
|
|
// // let delInfo = []
|
|
// // let delInfoBut = []
|
|
|
|
// // state.tableData.columns.forEach((item: any) => {
|
|
// // if(item.fieldClass != "-"){
|
|
// // delInfo.push(item)
|
|
// // }else{
|
|
// // delInfoBut.push(item)
|
|
// // }
|
|
// // // tableFieldList.value!.toggleRowSelection(item, true)
|
|
// // // if
|
|
// // // tableFieldAttrBut.value!.toggleRowSelection(item, true)
|
|
// // })
|
|
// // if(delInfo.length > 0){
|
|
// // delInfo.forEach((item:any)=>{
|
|
// // tableFieldList.value!.toggleRowSelection(item, true)
|
|
// // })
|
|
// // }
|
|
// // if(delInfoBut.length > 0){
|
|
// // delInfoBut.forEach((item:any)=>{
|
|
// // tableFieldAttrBut.value!.toggleRowSelection(item, true)
|
|
// // })
|
|
// // }
|
|
}
|
|
|
|
if(state.tableData && state.tableData.controlBtn && state.tableData.controlBtn.length > 0) {
|
|
|
|
state.tableData.controlBtn.forEach((itemCol:any)=>{
|
|
tableButtonList.forEach((item:any)=>{
|
|
if(itemCol.id == item.id){
|
|
tableAttrBut.value!.toggleRowSelection(item, true)
|
|
}
|
|
})
|
|
})
|
|
}
|
|
|
|
zhuDaunIsTrue.value = true
|
|
})
|
|
|
|
}
|
|
|
|
|
|
</script>
|
|
<template>
|
|
<div class="design-containers design-table" v-loading="pageLoading">
|
|
<!-- <div class="components-list">
|
|
<el-divider content-position="left">表格列字段</el-divider>
|
|
<el-table
|
|
ref="multipleTableRef"
|
|
:data="powerUnitAry.recUnitAry.masterUnitList"
|
|
style="width: 100%"
|
|
@selection-change="handleSelectionChange"
|
|
>
|
|
<el-table-column type="selection" width="30" />
|
|
<el-table-column label="栏目">
|
|
<template #default="scope">{{ scope.row.name }}</template>
|
|
</el-table-column>
|
|
</el-table>
|
|
</div> -->
|
|
<div class="main-body">
|
|
<div class="header">
|
|
<div class="field">
|
|
|
|
</div>
|
|
<PageListHeadTools @clearData="listPageTools" />
|
|
</div>
|
|
<div ref="container" class="table_box main_table">
|
|
|
|
<div class="search-box" >
|
|
<SearchField v-if="state.searchData&&state.searchData.length>0&&state.config.searchIsShow" v-model:searchData="state.searchData" />
|
|
<div v-else class="tipBox" >条件查询搜索区域</div>
|
|
</div>
|
|
|
|
|
|
|
|
<div class="operateButArea">
|
|
<div class="operatLeft">
|
|
<el-text v-if="state.tableData.controlBtn.length === 0" class="mx-1 tipBox" type="info">操作按钮区域</el-text>
|
|
<el-button
|
|
v-for="item in state.tableData.controlBtn"
|
|
v-bind="item"
|
|
:key="item.type"
|
|
>
|
|
{{ item.label }}
|
|
</el-button>
|
|
</div>
|
|
<div>
|
|
<el-button-group class="ml-4">
|
|
<el-tooltip
|
|
v-if="state.config.searchFormIsShow"
|
|
class="box-item"
|
|
effect="dark"
|
|
content="折叠查询表单"
|
|
placement="top"
|
|
>
|
|
<el-button size="small" @click="state.config.searchIsShow=!state.config.searchIsShow" class="fa fa-search" />
|
|
</el-tooltip>
|
|
<el-tooltip
|
|
v-if="state.view.list.status"
|
|
class="box-item"
|
|
effect="dark"
|
|
content="列表视图"
|
|
placement="top"
|
|
>
|
|
<el-button size="small" class="fa fa-table" :color="state.view.list.isClick?'#a0cfff':''" @click="tabsView(state.view.list)" />
|
|
</el-tooltip>
|
|
<el-tooltip
|
|
v-if="state.view.date.status"
|
|
class="box-item"
|
|
effect="dark"
|
|
content="日历视图"
|
|
placement="top"
|
|
>
|
|
<el-button size="small" class="fa fa-calendar" />
|
|
</el-tooltip>
|
|
<el-tooltip
|
|
v-if="state.view.time.status"
|
|
class="box-item"
|
|
effect="dark"
|
|
content="时间轴"
|
|
placement="top"
|
|
>
|
|
<el-button size="small" class="fa fa-clock-o" />
|
|
</el-tooltip>
|
|
<el-tooltip
|
|
v-if="state.view.gantt.status"
|
|
class="box-item"
|
|
effect="dark"
|
|
content="甘特图"
|
|
placement="top"
|
|
>
|
|
<el-button size="small" class="fa fa-bar-chart" />
|
|
</el-tooltip>
|
|
<el-tooltip
|
|
v-if="state.view.map.status"
|
|
class="box-item"
|
|
effect="dark"
|
|
content="地图视图"
|
|
placement="top"
|
|
>
|
|
<el-button size="small" class="fa fa-map-signs" />
|
|
</el-tooltip>
|
|
|
|
</el-button-group>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="operateButArea tipBox" v-if="!state.tableData.columns?.length">
|
|
表格列设置区域,可从左上角 添加表格列字段
|
|
选择已有列或直接从上方工具栏 生成脚本预览 编辑
|
|
</div>
|
|
<el-table
|
|
:data="[{}]"
|
|
v-bind="state.tableData.tableProps || {}"
|
|
ref="tableEl"
|
|
|
|
>
|
|
<template
|
|
v-for="item in state.tableData.columns"
|
|
:key="item.prop || item.label"
|
|
>
|
|
|
|
<el-table-column v-bind="item" :width="readerColumn(item)">
|
|
|
|
<template #header="scope">
|
|
<div class="field_close">
|
|
<el-text>{{ item.label }}</el-text>
|
|
<i ><el-icon @click="delCol(item)"><Close /></el-icon></i>
|
|
</div>
|
|
<el-tooltip placement="top" v-if="item.help">
|
|
<template #content>
|
|
<span v-html="item.help"></span>
|
|
</template>
|
|
<i class="icon-help"></i>
|
|
</el-tooltip>
|
|
</template>
|
|
<template #default v-if="item.field !== 'index'">
|
|
<el-checkbox v-if="item.field === 'checkbox'" />
|
|
<span v-if="item.field === 'operate'">操作</span>
|
|
<span v-if="item.field !== 'checkbox'&&item.field !== 'operate'" >数据</span>
|
|
</template>
|
|
</el-table-column>
|
|
</template>
|
|
</el-table>
|
|
<div class="table-tip">
|
|
操作提示:<br />
|
|
*从数据列表配置中选择 所属表单<br />
|
|
*从左上角 添加表格字段 选择预设字段<br />
|
|
*可拖动表头字段移动调整表头字段排列顺序<br />
|
|
*可通过顶部工具栏 生成脚本预览 查看或编辑添加自定义字段<br />
|
|
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="sidebar-tools">
|
|
<el-tabs ref="multipleTableRef" v-model="formTableActive" class="form_tabs" @tab-click="handleClick">
|
|
<el-tab-pane label="字段设置" :name="1">
|
|
<el-divider content-position="left">功能字段</el-divider>
|
|
<el-table ref="tableFieldAttrBut" :data="tableAttrLogButtonList" border style="width: 100%" @selection-change="tableFieldAttrButClick">
|
|
<el-table-column fixed type="selection" width="40" align="center" />
|
|
<el-table-column prop="label" label="字段" />
|
|
<el-table-column fixed="right" label="设置" width="55" align="center">
|
|
<template #default="scope">
|
|
<el-icon v-if="scope.row.fieldClass=='__control'" title="设置" @click="setUpFieldBut(scope.row)"><Setting /></el-icon>
|
|
</template>
|
|
</el-table-column>
|
|
</el-table>
|
|
<el-divider content-position="left">列表字段</el-divider>
|
|
<el-table ref="tableFieldList" :data="formTableField.masterTable" border @selection-change="tableListFieldClick" style="width: 100%">
|
|
<el-table-column fixed type="selection" width="40" align="center" />
|
|
<el-table-column prop="label" label="字段">
|
|
<template #default="scope">
|
|
{{scope.row.label}}({{scope.row.fieldClass}}[{{scope.row.pattern}}])
|
|
</template>
|
|
</el-table-column>
|
|
<el-table-column fixed="right" label="查询" width="55" align="center">
|
|
<template #default="scope">
|
|
<el-switch
|
|
v-model="scope.row.isSearch"
|
|
:active-action-icon="View"
|
|
:inactive-action-icon="Hide"
|
|
style="--el-switch-on-color: #13ce66; --el-switch-off-color: #ff4949"
|
|
@change="addOrDelSearchField(scope.row, $event)"
|
|
/>
|
|
</template>
|
|
</el-table-column>
|
|
<!-- <el-table-column fixed="right" label="设置" width="55" align="center">
|
|
<template #default="scope">
|
|
<el-icon title="设置" @click="setUpField(scope.row)"><Setting /></el-icon>
|
|
</template>
|
|
</el-table-column> -->
|
|
</el-table>
|
|
<!-- <el-divider content-position="left">查询条件</el-divider> -->
|
|
</el-tab-pane>
|
|
<el-tab-pane label="列表设置" :name="2">
|
|
<el-divider content-position="left">开启视图</el-divider>
|
|
<div class="demo_collapse">
|
|
<el-collapse v-value="activeName" @change="handleChange">
|
|
<el-collapse-item name="list" :class="state.view.list.status?'isTrueItem':''" :disabled="!state.view.list.status">
|
|
<template #title>
|
|
<div class="collapse-title">
|
|
<div>
|
|
<i class="fa fa-table"></i>
|
|
<el-text>列表视图</el-text>
|
|
</div>
|
|
<el-switch v-if="1==0" class="openOfClose" v-model="state.view.list.status" @click.stop="showCollapse" />
|
|
</div>
|
|
</template>
|
|
<div>
|
|
<el-form
|
|
label-position="top"
|
|
label-width="auto"
|
|
:model="state.view.list.form"
|
|
style="max-width: 600px"
|
|
>
|
|
<el-form-item label="排序字段">
|
|
<el-select v-model="state.view.list.form.sortWord" placeholder="请选择排序字段">
|
|
<el-option v-for="item in allKeyWords" :key="item.value" :label="item.label" :value="item.value" />
|
|
</el-select>
|
|
</el-form-item>
|
|
|
|
<el-form-item label="排序方式">
|
|
<el-radio-group v-model="state.view.list.form.sort">
|
|
<el-radio :label="1">降序</el-radio>
|
|
<el-radio :label="2">升序</el-radio>
|
|
</el-radio-group>
|
|
</el-form-item>
|
|
|
|
|
|
</el-form>
|
|
</div>
|
|
</el-collapse-item>
|
|
<el-collapse-item title="Consistency" name="date" :class="state.view.date.status?'isTrueItem':''" :disabled="!state.view.date.status">
|
|
<template #title>
|
|
<div class="collapse-title">
|
|
<div>
|
|
<i class="fa fa-calendar"></i>
|
|
<el-text>日历视图</el-text>
|
|
</div>
|
|
<el-switch class="openOfClose" v-model="state.view.date.status" @click.stop="showCollapse" />
|
|
</div>
|
|
</template>
|
|
<div>
|
|
<el-form
|
|
label-position="top"
|
|
label-width="auto"
|
|
:model="state.view.date.form"
|
|
style="max-width: 600px"
|
|
>
|
|
<el-form-item >
|
|
<span slot="label">
|
|
时间跨度
|
|
<el-tooltip
|
|
class="box-item"
|
|
effect="dark"
|
|
content="假如一个任务今天开始,明天结束。日历列表中用区间日期展示这一条信息。"
|
|
placement="top"
|
|
>
|
|
<i class="fa fa-question-circle-o"></i>
|
|
</el-tooltip>
|
|
</span>
|
|
<el-select v-model="state.view.date.form.startTime" clearable placeholder="请选择开始时间">
|
|
<template #prefix>从</template>
|
|
<el-option v-for="item in timeKeyWords" :key="item.value" :label="item.label" :value="item.value" />
|
|
</el-select>
|
|
<el-select v-model="state.view.date.form.endTime" clearable placeholder="请选择结束时间" style="margin-top:10px;">
|
|
<template #prefix>至</template>
|
|
<el-option v-for="item in timeKeyWords" :key="item.value" :label="item.label" :value="item.value" />
|
|
</el-select>
|
|
</el-form-item>
|
|
|
|
<el-form-item label="默认展示">
|
|
<el-select v-model="state.view.date.form.dayType" clearable placeholder="请选择展示方式">
|
|
<el-option label="月" :value="1" />
|
|
<el-option label="周" :value="2" />
|
|
<el-option label="日" :value="3" />
|
|
</el-select>
|
|
</el-form-item>
|
|
|
|
|
|
</el-form>
|
|
</div>
|
|
</el-collapse-item>
|
|
|
|
|
|
<el-collapse-item title="Consistency" name="time" :class="state.view.time.status?'isTrueItem':''" :disabled="!state.view.time.status">
|
|
<template #title>
|
|
<div class="collapse-title">
|
|
<div>
|
|
<i class="fa fa-clock-o"></i>
|
|
<el-text>时间轴</el-text>
|
|
</div>
|
|
<el-switch class="openOfClose" v-model="state.view.time.status" @click.stop="showCollapse" />
|
|
</div>
|
|
</template>
|
|
<div>
|
|
<el-form
|
|
label-position="top"
|
|
label-width="auto"
|
|
:model="state.view.time.form"
|
|
style="max-width: 600px"
|
|
>
|
|
<el-form-item label="时间轴字段">
|
|
<el-select v-model="state.view.time.form.sortWord" placeholder="请选择时间轴段">
|
|
<el-option v-for="item in timeKeyWords" :key="item.value" :label="item.label" :value="item.value" />
|
|
</el-select>
|
|
</el-form-item>
|
|
|
|
<el-form-item label="排序方式">
|
|
<el-radio-group v-model="state.view.time.form.sort">
|
|
<el-radio :label="1">降序</el-radio>
|
|
<el-radio :label="2">升序</el-radio>
|
|
</el-radio-group>
|
|
</el-form-item>
|
|
|
|
|
|
</el-form>
|
|
</div>
|
|
</el-collapse-item>
|
|
|
|
<el-collapse-item title="Consistency" name="gantt" :class="state.view.gantt.status?'isTrueItem':''" :disabled="!state.view.gantt.status">
|
|
<template #title>
|
|
<div class="collapse-title">
|
|
<div>
|
|
<i class="fa fa-bar-chart fa-rotate-0 "></i>
|
|
<el-text>甘特图</el-text>
|
|
</div>
|
|
<el-switch class="openOfClose" v-model="state.view.gantt.status" @click.stop="showCollapse" />
|
|
</div>
|
|
</template>
|
|
<div>
|
|
<el-form
|
|
label-position="top"
|
|
label-width="auto"
|
|
:model="state.view.gantt.form"
|
|
style="max-width: 600px"
|
|
>
|
|
<el-form-item label="时间设置">
|
|
<el-select v-model="state.view.gantt.form.startTime" clearable placeholder="请选择开始时间">
|
|
<template #prefix>开始时间</template>
|
|
<el-option v-for="item in timeKeyWords" :key="item.value" :label="item.label" :value="item.value" />
|
|
</el-select>
|
|
<el-select v-model="state.view.gantt.form.endTime" clearable placeholder="请选择结束时间" style="margin-top:10px;">
|
|
<template #prefix>结束时间</template>
|
|
<el-option v-for="item in timeKeyWords" :key="item.value" :label="item.label" :value="item.value" />
|
|
</el-select>
|
|
</el-form-item>
|
|
|
|
<el-form-item label="默认时间刻度">
|
|
<el-select v-model="state.view.gantt.form.dayType" clearable placeholder="请选择展示方式">
|
|
<el-option label="时" :value="1" />
|
|
<el-option label="日" :value="2" />
|
|
<el-option label="周" :value="3" />
|
|
<el-option label="月" :value="4" />
|
|
<el-option label="季" :value="5" />
|
|
<el-option label="年" :value="6" />
|
|
</el-select>
|
|
</el-form-item>
|
|
|
|
<el-form-item label="排序字段">
|
|
<el-select v-model="state.view.gantt.form.sortWord" placeholder="请选择时间轴段">
|
|
<el-option v-for="item in allKeyWords" :key="item.value" :label="item.label" :value="item.value" />
|
|
</el-select>
|
|
</el-form-item>
|
|
|
|
<el-form-item label="排序方式">
|
|
<el-radio-group v-model="state.view.gantt.form.sort">
|
|
<el-radio :label="1">降序</el-radio>
|
|
<el-radio :label="2">升序</el-radio>
|
|
</el-radio-group>
|
|
</el-form-item>
|
|
|
|
|
|
</el-form>
|
|
</div>
|
|
</el-collapse-item>
|
|
|
|
<el-collapse-item title="Consistency" name="map" :class="state.view.map.status?'isTrueItem':''" :disabled="!state.view.map.status">
|
|
<template #title>
|
|
<div class="collapse-title">
|
|
<div>
|
|
<i class="fa fa-map-signs"></i>
|
|
<el-text>地图视图</el-text>
|
|
</div>
|
|
<el-switch class="openOfClose" v-model="state.view.map.status" :disabled="isMapTrue" @click.stop="showCollapse" />
|
|
</div>
|
|
</template>
|
|
<div>
|
|
<el-form
|
|
label-position="top"
|
|
label-width="auto"
|
|
:model="state.view.map.form"
|
|
style="max-width: 600px"
|
|
>
|
|
<el-form-item label="位置字段">
|
|
<el-select v-model="state.view.map.form.mapWord" placeholder="请选择位置字段">
|
|
<el-option v-for="item in mapKeyWords" :key="item.value" :label="item.label" :value="item.value" />
|
|
</el-select>
|
|
</el-form-item>
|
|
|
|
<el-form-item label="排序字段">
|
|
<el-select v-model="state.view.map.form.sortWord" placeholder="请选择时间轴段">
|
|
<el-option v-for="item in allKeyWords" :key="item.value" :label="item.label" :value="item.value" />
|
|
</el-select>
|
|
</el-form-item>
|
|
|
|
<el-form-item label="排序方式">
|
|
<el-radio-group v-model="state.view.map.form.sort">
|
|
<el-radio :label="1">降序</el-radio>
|
|
<el-radio :label="2">升序</el-radio>
|
|
</el-radio-group>
|
|
</el-form-item>
|
|
|
|
|
|
</el-form>
|
|
</div>
|
|
</el-collapse-item>
|
|
|
|
|
|
|
|
</el-collapse>
|
|
</div>
|
|
<el-divider content-position="left">功能按钮</el-divider>
|
|
<el-table ref="tableAttrBut" :data="tableButtonList" border style="width: 100%" @selection-change="tableAttrButClick">
|
|
<el-table-column fixed type="selection" width="40" align="center" />
|
|
<el-table-column prop="label" label="字段" />
|
|
</el-table>
|
|
<el-divider content-position="left">基本功能设置</el-divider>
|
|
<el-form :model="state.config" label-width="auto" style="width: 96%; margin-left:2%;">
|
|
<el-form-item label="每页显示数据得数量">
|
|
<el-input-number
|
|
v-model="state.config.pageSize"
|
|
class="mx-4"
|
|
:min="1"
|
|
:max="10000"
|
|
controls-position="right"
|
|
/>
|
|
</el-form-item>
|
|
<el-form-item label="数据添加编辑打开方式">
|
|
|
|
<el-select
|
|
v-model="state.config.openPageMode"
|
|
clearable
|
|
placeholder="请选择"
|
|
>
|
|
<el-option
|
|
v-for="itemOpt in diaOrDrawer"
|
|
:key="itemOpt.value"
|
|
:label="itemOpt.label"
|
|
:value="itemOpt.value"
|
|
/>
|
|
</el-select>
|
|
</el-form-item>
|
|
<el-form-item label="可折叠查询表单">
|
|
<el-switch
|
|
v-model="state.config.searchFormIsShow"
|
|
:active-action-icon="View"
|
|
:inactive-action-icon="Hide"
|
|
style="--el-switch-on-color: #13ce66; --el-switch-off-color: #ff4949"
|
|
/>
|
|
</el-form-item>
|
|
</el-form>
|
|
<el-divider content-position="left">数据处理事件</el-divider>
|
|
<el-form :model="state.formApi" label-width="auto" style="width: 96%; margin-left:2%;">
|
|
<el-form-item label="数据处理方式">
|
|
<el-switch
|
|
v-model="state.formApi.type"
|
|
active-text="默认"
|
|
inactive-text="第三方API"
|
|
active-value="1"
|
|
inactive-value="2"
|
|
style="--el-switch-on-color: #13ce66; --el-switch-off-color: #409EFF"
|
|
/>
|
|
</el-form-item>
|
|
<el-form-item v-if="state.formApi.type!=1" label="填加APIUrl">
|
|
<el-input v-model="state.formApi.addApiUrl" placeholder="请输入接口地址">
|
|
<template #prefix>http://</template>
|
|
</el-input>
|
|
</el-form-item>
|
|
<el-form-item v-if="state.formApi.type!=1" label="编辑APIUrl">
|
|
<el-input v-model="state.formApi.editApiUrl" placeholder="请输入接口地址">
|
|
<template #prefix>http://</template>
|
|
</el-input>
|
|
</el-form-item>
|
|
<el-form-item v-if="state.formApi.type!=1" label="删除APIUrl">
|
|
<el-input v-model="state.formApi.delApiUrl" placeholder="请输入接口地址">
|
|
<template #prefix>http://</template>
|
|
</el-input>
|
|
</el-form-item>
|
|
<el-form-item v-if="state.formApi.type!=1" label="查看APIUrl">
|
|
<el-input v-model="state.formApi.lookApiUrl" placeholder="请输入接口地址">
|
|
<template #prefix>http://</template>
|
|
</el-input>
|
|
</el-form-item>
|
|
</el-form>
|
|
|
|
</el-tab-pane>
|
|
</el-tabs>
|
|
<!-- {{props.formKey}}
|
|
<br>
|
|
{{props.formVersion}}
|
|
<br>
|
|
{{formTableField}} -->
|
|
</div>
|
|
|
|
|
|
<ace-drawer
|
|
v-model="drawer.visible"
|
|
:title="drawer.title"
|
|
:direction="drawer.direction"
|
|
:content="drawer.content"
|
|
:code-type="drawer.codeType"
|
|
@before-close="drawerBeforeClose"
|
|
@confirm="dialogConfirm"
|
|
/>
|
|
<FieldSetUp v-model:is-open="setUpFieldIsOpen" :setup-field-info="setUpFieldInfo" />
|
|
<ControlSetup v-model:is-show="listButtonIsShow" v-model:contbutary:="state.tableData.operateBtn" @updata-log-but="updataLogBut" />
|
|
<CodePage v-model:is-show="codeIsShow" :list-data="state" />
|
|
|
|
<el-drawer
|
|
v-model="state.previewVisible"
|
|
title="列表预览"
|
|
direction="btt"
|
|
:before-close="handlePreviewClose"
|
|
size="90%"
|
|
>
|
|
<ak-page-list
|
|
:data="state.tableData"
|
|
:search-data="state.searchData"
|
|
:config="state.config"
|
|
v-if="state.previewVisible"
|
|
/>
|
|
|
|
</el-drawer>
|
|
</div>
|
|
</template>
|
|
<style lang='scss' scoped>
|
|
.design-containers{
|
|
display: flex;
|
|
background-color: #FFFFFF;
|
|
margin: 0;
|
|
.components-list{
|
|
width: 200px;
|
|
padding: 0;
|
|
overflow-y: auto;
|
|
height: calc(100vh - 40px);
|
|
position: relative;
|
|
overflow-x: hidden;
|
|
border-right: 1px solid #e0e0e0;
|
|
}
|
|
}
|
|
.form_tabs > .el-tabs__content{
|
|
padding: 0;
|
|
}
|
|
.table_box{
|
|
background: #fff;
|
|
border: 1px dashed #999;
|
|
margin: 10px;
|
|
height: calc(100vh - 100px);
|
|
overflow-y: auto;
|
|
overflow-x: hidden;
|
|
position: relative;
|
|
.table-tip{
|
|
color: #999;
|
|
padding: 30px 0;
|
|
line-height: 22px;
|
|
}
|
|
.operateButArea{
|
|
width: 100%;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
margin-top:15px;
|
|
.operatLeft{
|
|
padding-bottom: 2px;
|
|
}
|
|
}
|
|
}
|
|
.main_table{
|
|
padding: 10px 20px;
|
|
|
|
}
|
|
.cell{
|
|
min-width:120px;
|
|
}
|
|
.field_close{
|
|
i{
|
|
display: none;
|
|
cursor: pointer;
|
|
}
|
|
|
|
}
|
|
.field_close:hover{
|
|
i{
|
|
display: inline;
|
|
cursor: pointer;
|
|
}
|
|
|
|
}
|
|
.tipBox{
|
|
border: 1px dotted #ddd;
|
|
padding: 3px 5px;
|
|
border-radius: 5px;
|
|
color: #999;
|
|
text-align: center;
|
|
cursor: pointer;
|
|
}
|
|
.demo_collapse{
|
|
padding: 0 10px;
|
|
|
|
:deep .el-collapse{
|
|
border: 0px;
|
|
|
|
}
|
|
:deep .el-collapse-item__header {
|
|
padding-left:5px;
|
|
border: 1px solid #eeeeee;
|
|
border-radius:10px;
|
|
|
|
}
|
|
:deep .el-collapse-item{
|
|
border-radius: 10px 10px;
|
|
background-color: rgb(245, 247, 250) !important;
|
|
margin-bottom: 10px;
|
|
.el-collapse-item__wrap{
|
|
background-color: rgb(245, 247, 250) !important;
|
|
}
|
|
|
|
.collapse-title{
|
|
i{
|
|
padding:0 5px 0 0;
|
|
}
|
|
}
|
|
.openOfClose{
|
|
margin:9px 9px 0 0;
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
:deep .el-collapse-item:last-child{
|
|
margin-bottom:0;
|
|
}
|
|
|
|
:deep .el-collapse-item__content {
|
|
|
|
padding-left: 10px;
|
|
padding-bottom:0px;
|
|
padding-top: 10px;
|
|
}
|
|
|
|
:deep .collapse-title {
|
|
flex: 1 0 90%;
|
|
order: 1;
|
|
display: flex;
|
|
justify-content: space-between;
|
|
|
|
.el-collapse-item__header {
|
|
flex: 1 0 auto;
|
|
order: -1;
|
|
}
|
|
}
|
|
}
|
|
.isTrueItem{
|
|
:deep .el-collapse-item__header{
|
|
color:#79bbff;
|
|
background-color: #c6e2ff;
|
|
}
|
|
.el-text{
|
|
color:#337ecc;
|
|
}
|
|
}
|
|
</style>
|
|
|