Browse Source

时间轴视图

lwx_14
超级管理员 1 year ago
parent
commit
50260da9b7
  1. 17
      src/api/DesignForm/requestapi.ts
  2. 53
      src/api/DesignForm/tableButton.ts
  3. 179
      src/components/DesignForm/app/index.vue
  4. 122
      src/components/DesignForm/app/timeAxis.vue
  5. 74
      src/components/DesignForm/tableListPage/index.vue
  6. 2
      src/types/components.d.ts
  7. 2
      src/views/sysworkflow/lowcodepage/appPage/appPageForm/openAppFormPage.vue
  8. 478
      src/views/sysworkflow/lowcodepage/appPage/appPageForm/pageList.vue
  9. 441
      src/views/sysworkflow/lowcodepage/pageList.vue
  10. 55
      src/views/sysworkflow/lowcodepage/runApp/runAppForm.vue

17
src/api/DesignForm/requestapi.ts

@ -544,3 +544,20 @@ export function afreshAppSubmit(data: any) {
data: data
});
}
//获取数据库表字段
export function gainTableField(data: any) {
return request({
url: '/systemapi/customer_form/gainTableField',
method: 'post',
data: data
});
}
//获取数据库表字段
export function gainListTableField(data: any) {
return request({
url: '/systemapi/customer_form/gainListTableField',
method: 'post',
data: data
});
}

53
src/api/DesignForm/tableButton.ts

@ -289,3 +289,56 @@ export const weekForDay = [
label: '周日',
}
]
export interface viewPageType {
list:{
status:boolean,
isClick:boolean,
form:{
sortWord:string,
sortClass:number
}
},
date:{
status:boolean,
isClick:boolean,
form:{
startTime:string,
endTime:string,
dayType:number
}
}
,
time:{
status:boolean,
isClick:boolean,
form:{
sortWord:string,
sort:number
}
}
,
gantt:{
status:boolean,
isClick:boolean,
form:{
startTime:string,
endTime:string,
dayType:number,
sortWord:string,
sort:number
}
}
,
map:{
status:boolean,
isClick:boolean,
form:{
mapWord:string,
sortWord:string,
sort:number
}
}
}

179
src/components/DesignForm/app/index.vue

@ -7,7 +7,7 @@
import { json2string,objToStringify,string2json,stringToObj } from '@/utils/DesignForm/form'
import { onBeforeRouteLeave, useRoute, useRouter } from 'vue-router'
import { useDesignFormStore } from '@/store/DesignForm/designForm'
import { attrButton,FormPageList,FormPageConfig } from '@/api/DesignForm/tableButton'
import { attrButton,FormPageList,FormPageConfig,viewPageType } from '@/api/DesignForm/tableButton'
import { inputUnit,timeUnit,choiceUnit,switchUnit,orgUnit,checkboxUnit } from '@/api/DesignForm/fieldUnit'
import type { FormInstance, FormRules,ElNotification } from 'element-plus'
import { gainFormPageListCont } from '@/api/DesignForm/requestapi'
@ -21,6 +21,7 @@ import { softDeletion,retractRunWorkFlow } from '@/api/taskapi/management'
//
import FormPageCont from '@/components/DesignForm/tableListPage/formPageCont.vue'
import TableFlow from '@/views/sysworkflow/lowcodepage/pageFlow/appTableFlow.vue'
import TimeAxisPage from '@/components/DesignForm/app/timeAxis.vue'
const props = withDefaults(
defineProps<{
@ -44,6 +45,7 @@ const props = withDefaults(
signCode?:string,
pickAppMenu?:any
versiontitle?:string,
viewPage?:viewPageType
}>(),
{
showPage: true,
@ -79,6 +81,9 @@ const props = withDefaults(
},
lookPageIsShow:() => {
return false
},
viewPage: () => {
return []
}
}
)
@ -287,13 +292,17 @@ watch(()=>props.formId,(val:any)=>{
},{
deep: true,
})
const timeAxisRef = ref(null)
/**
@ 作者: 秦东
@ 时间: 2024-04-01 15:51:32
@ 功能: 获取数据
*/
const getPageData = () => {
state.loading = true;
let sendData = {
formId:props.formId,
page:state.currentPage,
@ -301,16 +310,35 @@ const getPageData = () => {
searchData:json2string(props.searchData)
}
console.log("获取列表详细信息",sendData)
gainFormPageListCont(sendData)
.then((data)=>{
console.log("获取列表详细信息----------------->",data)
tableDataList.value = data.data.list
state.total = data.data.total
state.loading = false;
})
.finally(()=>{
state.loading = false;
})
switch(viewType.value){
case 2:
break;
case 3:
nextTick(()=>{
console.log("获取列表详细信息-------222---------->",timeAxisRef.value)
timeAxisRef.value.searchTimeList(sendData)
})
break;
case 4:
break;
case 5:
break;
default:
state.loading = true;
gainFormPageListCont(sendData)
.then((data)=>{
console.log("获取列表详细信息----------------->",data)
tableDataList.value = data.data.list
state.total = data.data.total
state.loading = false;
})
.finally(()=>{
state.loading = false;
})
}
}
onMounted(()=>{
getPageData()
@ -325,7 +353,7 @@ const judjeRadio = (val: any, options: any[]) => {
if(options && options.length > 0){
options.forEach((item)=>{
if(item.value == val){
console.log("判断单选值",val, item.value,item.label)
// console.log("",val, item.value,item.label)
val = item.label
}
})
@ -455,6 +483,53 @@ const editFormSendFlow = (val:any) => {
drawerWith.value = container.value?.clientWidth
lookPageInfoIsShow.value = true;
}
const viewType = ref(1)
const viewLayout = ref<any>()
/**
@ 作者: 秦东
@ 时间: 2024-07-08 09:39:52
@ 功能: 切换视图展示方式
*/
const tabsView = (val:any,types:number) => {
viewType.value = types
val.isClick = true
viewLayout.value = val
console.log("切换视图展示方式",val)
switch(types){
case 2:
props.viewPage.list.isClick = false
props.viewPage.time.isClick = false
props.viewPage.gantt.isClick = false
props.viewPage.map.isClick = false
break;
case 3:
props.viewPage.list.isClick = false
props.viewPage.date.isClick = false
props.viewPage.gantt.isClick = false
props.viewPage.map.isClick = false
getPageData()
break;
case 4:
props.viewPage.list.isClick = false
props.viewPage.date.isClick = false
props.viewPage.time.isClick = false
props.viewPage.map.isClick = false
break;
case 5:
props.viewPage.list.isClick = false
props.viewPage.date.isClick = false
props.viewPage.time.isClick = false
props.viewPage.gantt.isClick = false
break;
default:
props.viewPage.date.isClick = false
props.viewPage.time.isClick = false
props.viewPage.gantt.isClick = false
props.viewPage.map.isClick = false
break;
}
}
</script>
<template>
<div ref="container" v-loading="state.loading" class="table-list-comm">
@ -540,6 +615,7 @@ const editFormSendFlow = (val:any) => {
</el-form>
</el-col>
<el-col :span="24">
<div class="operateButArea">
<div class="operatLeft">
<el-text v-if="data.controlBtn.length === 0" class="mx-1 tipBox" type="info">操作按钮区域</el-text>
@ -553,19 +629,67 @@ const editFormSendFlow = (val:any) => {
</el-button>
</div>
<div>
<el-tooltip
v-if="config.searchFormIsShow"
class="box-item"
effect="dark"
content="折叠查询表单"
placement="bottom"
>
<el-icon @click="config.searchIsShow=!config.searchIsShow"><Search /></el-icon>
</el-tooltip>
<el-button-group class="ml-4">
<el-tooltip
v-if="config.searchFormIsShow"
class="box-item"
effect="dark"
content="折叠查询表单"
placement="bottom"
>
<el-button size="small" @click="config.searchIsShow=!config.searchIsShow" class="fa fa-search" />
</el-tooltip>
<el-tooltip
v-if="viewPage.list.status"
class="box-item"
effect="dark"
content="列表视图"
placement="top"
>
<el-button size="small" class="fa fa-table" :color="viewPage.list.isClick?'#a0cfff':''" @click="tabsView(viewPage.list,1)" />
</el-tooltip>
<el-tooltip
v-if="viewPage.date.status"
class="box-item"
effect="dark"
content="日历视图"
placement="top"
>
<el-button size="small" class="fa fa-calendar" :color="viewPage.date.isClick?'#a0cfff':''" @click="tabsView(viewPage.date,2)" />
</el-tooltip>
<el-tooltip
v-if="viewPage.time.status"
class="box-item"
effect="dark"
content="时间轴"
placement="top"
>
<el-button size="small" class="fa fa-clock-o" :color="viewPage.time.isClick?'#a0cfff':''" @click="tabsView(viewPage.time,3)" />
</el-tooltip>
<el-tooltip
v-if="viewPage.gantt.status"
class="box-item"
effect="dark"
content="甘特图"
placement="top"
>
<el-button size="small" class="fa fa-bar-chart" :color="viewPage.gantt.isClick?'#a0cfff':''" @click="tabsView(viewPage.gantt,4)" />
</el-tooltip>
<el-tooltip
v-if="viewPage.map.status"
class="box-item"
effect="dark"
content="地图视图"
placement="top"
>
<el-button size="small" class="fa fa-map-signs" :color="viewPage.map.isClick?'#a0cfff':''" @click="tabsView(viewPage.map,5)" />
</el-tooltip>
</el-button-group>
</div>
</div>
</el-col>
<el-col :span="24">
<el-col v-if="viewType==1" :span="24">
<el-table
v-bind="data.tableProps"
ref="table"
@ -712,7 +836,7 @@ const editFormSendFlow = (val:any) => {
</template>
</el-table>
</el-col>
<el-col v-if="state.total > 0" :span="24">
<el-col v-if="viewType==1&&state.total > 0" :span="24">
<div class="pageBox">
<el-pagination
v-model:currentPage="state.currentPage"
@ -725,6 +849,12 @@ const editFormSendFlow = (val:any) => {
/>
</div>
</el-col>
<el-col v-if="viewType==3" :span="24">
<TimeAxisPage ref="timeAxisRef" :data="tableDataList" :view-layout="viewLayout" :columns-filter="columnsFilter" />
</el-col>
<el-col :span="24" style="display:none">
{{ props.data}}
@ -867,4 +997,5 @@ const editFormSendFlow = (val:any) => {
.demo-image__error .image-slot .el-icon {
font-size: 30px;
}
</style>

122
src/components/DesignForm/app/timeAxis.vue

@ -0,0 +1,122 @@
<!--
@ 作者: 秦东
@ 时间: 2024-07-08 10:43:52
@ 备注: 自定义应用时间轴视图
-->
<script lang='ts' setup>
const props = defineProps({
data:{
type:Object,
default(){
return {}
}
},
viewLayout:{
type:Object,
default(){
return {}
}
},
columnsFilter:{
type:Object,
default(){
return {}
}
}
});
const loadTimePage = ref(false)
const noMore = ref(false)
const timeDisabled = computed(() => noMore.value || loadTimePage.value)
let chuDiNumber = 0
const loadTimeLog = () =>{
noMore.value = true
chuDiNumber ++
console.log("触底次数",chuDiNumber)
}
/**
@ 作者: 秦东
@ 时间: 2024-07-08 13:11:43
@ 功能: 时间轴数据搜索
*/
const searchTimeList = (val:any) =>{
console.log("时间轴数据搜索",val)
console.log("时间轴数据搜索--->",props.columnsFilter)
val.viewClass = {
class:"time",
sortWord:"creater_time",
sort:1,
startTime:"",
endTime:"",
dayType:"",
mapWord:""
}
}
defineExpose({
searchTimeList
})
</script>
<template>
<ul v-infinite-scroll="loadTimeLog" class="infinite-list" :infinite-scroll-disabled="timeDisabled">
{{viewLayout}}
<el-timeline :reverse="true" class="timeLineStyle">
<el-timeline-item center v-for="(item,index) in props.data" :key="index" :hollow="index%3==0" :type="index%3==0?'primary':''" :icon="index%3==0?'':'MoreFilled'" :size="index%3==0?'large':''">
<div class="timeLeft" v-if="index%3==0">
<table>
<tr>
<td rowspan="2">
<el-text class="leftDay">88</el-text>
</td>
<td >
<el-text>星期三</el-text>
</td>
</tr>
<tr>
<td >
<el-text>8888/88</el-text>
</td>
</tr>
</table>
</div>
<div class="leftCont" v-if="index%3==0">
</div>
<el-card v-if="index%3!=0">
<h4>Update Github template</h4>
<p v-for="item in props.columnsFilter">{{item.fieldClass}}</p>
</el-card>
</el-timeline-item>
</el-timeline>
<p v-if="loadTimePage">Loading...</p>
<p v-if="noMore">数据已全部展示</p>
</ul>
</template>
<style lang='scss' scoped>
.infinite-list {
height: calc(100vh - 345px);
// height:100px;
padding: 10px 0 0 0;
margin: 20px 0 0 0;
list-style: none;
overflow: auto
}
.timeLineStyle{
margin: 0 0 0 120px;
}
.timeLeft{
position: absolute;
left: -120px;
}
.leftCont{
height:40px;
}
.leftDay{
font-size:30px;
padding: 0 5px 0 0;
vertical-align: middle; /* 垂直居中 */
}
</style>

74
src/components/DesignForm/tableListPage/index.vue

@ -7,7 +7,7 @@
import { json2string,objToStringify,string2json,stringToObj } from '@/utils/DesignForm/form'
import { onBeforeRouteLeave, useRoute, useRouter } from 'vue-router'
import { useDesignFormStore } from '@/store/DesignForm/designForm'
import { attrButton,FormPageList,FormPageConfig } from '@/api/DesignForm/tableButton'
import { attrButton,FormPageList,FormPageConfig,viewPageType } from '@/api/DesignForm/tableButton'
import { inputUnit,timeUnit,choiceUnit,switchUnit,orgUnit,checkboxUnit } from '@/api/DesignForm/fieldUnit'
import type { FormInstance, FormRules,ElNotification } from 'element-plus'
import { gainFormPageListCont } from '@/api/DesignForm/requestapi'
@ -40,6 +40,7 @@ const props = withDefaults(
lookPageIsShow?:boolean,
versionid?:string,
versiontitle?:string,
viewPage?:viewPageType
}>(),
{
showPage: true,
@ -72,6 +73,9 @@ const props = withDefaults(
},
lookPageIsShow:() => {
return false
},
viewPage: () => {
return []
}
}
)
@ -537,19 +541,67 @@ const editFormSendFlow = (val:any) => {
:key="item.type"
@click="setUpClick(item)"
>
{{ item.label }}
{{ item.label }}123
</el-button>
</div>
<div>
<el-tooltip
v-if="config.searchFormIsShow"
class="box-item"
effect="dark"
content="折叠查询表单"
placement="bottom"
>
<el-icon @click="config.searchIsShow=!config.searchIsShow"><Search /></el-icon>
</el-tooltip>
<el-button-group class="ml-4">
<el-tooltip
v-if="config.searchFormIsShow"
class="box-item"
effect="dark"
content="折叠查询表单"
placement="bottom"
>
<el-button size="small" @click="config.searchIsShow=!config.searchIsShow" class="fa fa-search" />
</el-tooltip>
<el-tooltip
v-if="viewPage.list.status"
class="box-item"
effect="dark"
content="列表视图"
placement="top"
>
<el-button size="small" class="fa fa-table" :color="viewPage.list.isClick?'#a0cfff':''" @click="tabsView(viewPage.list)" />
</el-tooltip>
<el-tooltip
v-if="viewPage.date.status"
class="box-item"
effect="dark"
content="日历视图"
placement="top"
>
<el-button size="small" class="fa fa-calendar" />
</el-tooltip>
<el-tooltip
v-if="viewPage.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="viewPage.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="viewPage.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>
</el-col>

2
src/types/components.d.ts

@ -174,6 +174,7 @@ declare module '@vue/runtime-core' {
TableListPage: typeof import('./../components/DesignForm/tableListPage/index.vue')['default']
Template: typeof import('./../components/DesignForm/template.vue')['default']
TextPage: typeof import('./../components/DesignForm/designLayout/textPage.vue')['default']
TimeAxis: typeof import('./../components/DesignForm/app/timeAxis.vue')['default']
Tinymce: typeof import('./../components/DesignForm/public/form/tinymce.vue')['default']
Tinymce_1: typeof import('./../components/DesignForm/public/form/tinymce_1.vue')['default']
Tooltip: typeof import('./../components/DesignForm/tooltip.vue')['default']
@ -185,6 +186,7 @@ declare module '@vue/runtime-core' {
Yuanjao: typeof import('./../components/DesignForm/designLayout/yuanjao.vue')['default']
}
export interface ComponentCustomProperties {
vInfiniteScroll: typeof import('element-plus/es')['ElInfiniteScroll']
vLoading: typeof import('element-plus/es')['ElLoadingDirective']
}
}

2
src/views/sysworkflow/lowcodepage/appPage/appPageForm/openAppFormPage.vue

@ -180,6 +180,7 @@ const gainAppFormPageInit = () =>{
stateList.formApi = stateData.formApi
stateList.dict = stateData.dict
stateList.refreshTable = stateData.refreshTable
stateList.view = stateData.view
}
if(data.data.page){
console.log("data.data.mastesform", data.data)
@ -231,6 +232,7 @@ defineExpose({
:versionid="versionId"
:versiontitle="versionTitle"
v-model:look-page-is-show="lookPageIsShow"
:viewPage="stateList.view"
/>
<ak-form
v-if="activePage==2"

478
src/views/sysworkflow/lowcodepage/appPage/appPageForm/pageList.vue

@ -10,7 +10,8 @@ import { attrButton,tableButton,tableButtonList,tableLogButtonList,tableAttrLogB
import { json2string,objToStringify,string2json,stringToObj } from '@/utils/DesignForm/form'
import { analysisForm,setFlowFormKeyPower } from '@/api/workflowapi/index'
import { gainFormTableField,editCustomerFormList,gainFormListCont } from '@/api/DesignForm/requestapi'
import { gainFormTableField,editCustomerFormList,gainFormListCont,gainListTableField } from '@/api/DesignForm/requestapi'
import { formTableField,formTabelStruct } from "@/api/DesignForm/type";
import tempOtherUnit from '@/components/DesignForm/pageList/types'
@ -132,7 +133,59 @@ const state = reactive({
lookApiUrl:""
},
dict: {},
refreshTable: true
refreshTable: true,
view:{
list:{
status:true,
isClick:true,
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
}
}
}
})
/**
@ 作者: 秦东
@ -202,6 +255,7 @@ const jieForm = () => {
})
}
}
/**
@ 作者: 秦东
@ 时间: 2024-05-21 15:41:53
@ -212,8 +266,31 @@ onMounted(()=>{
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
})
}
/**
@ 作者: 秦东
@ 时间: 2024-05-21 15:42:18
@ -271,6 +348,7 @@ const getListInfo = () => {
state.formApi = stateData.formApi
state.dict = stateData.dict
state.refreshTable = stateData.refreshTable
state.view = stateData.view
}
@ -612,6 +690,37 @@ const dialogOpen = (obj: any, params: any = {}) => {
}
drawer.content = editData
}
const activeName = ref<any[]>(["list"])
const listOnOrOff = ref(true)
const viewList1 = ref()
/**
@ 作者: 秦东
@ 时间: 2024-07-05 16:11:05
@ 功能: 折叠组件变动事件
*/
const handleChange = (val: string[]) => {
console.log("折叠组件变动事件--->",val,activeName)
// judjeIsTrue
}
const judjeIsTrue = (val:string) => {
if (activeName.value.includes(val)){
return true
}else{
false
}
}
const tabsView = (val:any) => {
val.isClick = !val.isClick
}
</script>
<template>
<el-main class="mainBox">
@ -642,15 +751,67 @@ const dialogOpen = (obj: any, params: any = {}) => {
</el-button>
</div>
<div>
<el-tooltip
v-if="state.config.searchFormIsShow"
class="box-item"
effect="dark"
content="折叠查询表单"
placement="bottom"
>
<el-icon @click="state.config.searchIsShow=!state.config.searchIsShow"><Search /></el-icon>
</el-tooltip>
<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>
@ -770,9 +931,233 @@ const dialogOpen = (obj: any, params: any = {}) => {
</div>
</el-tab-pane>
<el-tab-pane label="列表设置" :name="2">
<el-divider content-position="left">开启视图</el-divider>
<div class="demo-collapse">
111
<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>
<div class="form_tabs">
@ -929,4 +1314,71 @@ const dialogOpen = (obj: any, params: any = {}) => {
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>

441
src/views/sysworkflow/lowcodepage/pageList.vue

@ -10,7 +10,7 @@ import { attrButton,tableButton,tableButtonList,tableLogButtonList,tableAttrLogB
import { json2string,objToStringify,string2json,stringToObj } from '@/utils/DesignForm/form'
import { analysisForm,setFlowFormKeyPower } from '@/api/workflowapi/index'
import { gainFormTableField,editCustomerFormList,gainFormListCont } from '@/api/DesignForm/requestapi'
import { gainFormTableField,editCustomerFormList,gainFormListCont,gainListTableField } from '@/api/DesignForm/requestapi'
import { formTableField,formTabelStruct } from "@/api/DesignForm/type";
import tempOtherUnit from '@/components/DesignForm/pageList/types'
@ -101,7 +101,57 @@ const state = reactive({
lookApiUrl:""
},
dict: {},
refreshTable: true
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) => {
@ -193,8 +243,31 @@ onMounted(()=>{
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)
@ -677,6 +750,10 @@ const getListInfo = () => {
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)
}
@ -794,15 +871,63 @@ const getListInfo = () => {
</el-button>
</div>
<div>
<el-tooltip
v-if="state.config.searchFormIsShow"
class="box-item"
effect="dark"
content="折叠查询表单"
placement="bottom"
>
<el-icon @click="state.config.searchIsShow=!state.config.searchIsShow"><Search /></el-icon>
</el-tooltip>
<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>
@ -894,7 +1019,233 @@ const getListInfo = () => {
<!-- <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" />
@ -1080,4 +1431,70 @@ const getListInfo = () => {
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>

55
src/views/sysworkflow/lowcodepage/runApp/runAppForm.vue

@ -70,7 +70,58 @@ const stateList = reactive({
lookApiUrl:""
},
dict: {},
refreshTable: true
refreshTable: true,
view:{
list:{
status:true,
isClick:false,
form:{
sortWord:"",
sortClass: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 appFormTitle = ref("")
const versionTitle = ref<string>("") //
@ -134,6 +185,7 @@ const initLoadData = () => {
stateList.formApi = stateData.formApi
stateList.dict = stateData.dict
stateList.refreshTable = stateData.refreshTable
stateList.view = stateData.view
}
if(data.data.page){
console.log("data.data.mastesform", data.data)
@ -190,6 +242,7 @@ watch(() => props.pickAppMenu,(val:any) => {
:versiontitle="versionTitle"
:sign-code="appInitData.signCode"
:pickAppMenu="props.pickAppMenu"
:viewPage="stateList.view"
/>
<AppFormPage
v-else

Loading…
Cancel
Save