Browse Source

Merge branch 'qin_v2'

# Conflicts:
#	src/api/lowCode/index.ts
lwx_v2
hreenshan112 12 months ago
parent
commit
0136a94b6c
  1. 5
      index.html
  2. 11
      src/api/lowCode/index.ts
  3. 8
      src/api/lowCode/type.ts
  4. 189
      src/views/formTable/index.vue
  5. 475
      src/views/formTable/index_20241127.vue

5
index.html

@ -2,8 +2,11 @@
<html lang="en"> <html lang="en">
<head> <head>
<meta charset="UTF-8" /> <meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/vite.svg" /> <link rel="icon" type="imagex-icon" href="/favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta content="yes" name="apple-mobile-web-app-capable">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<title>数通智联化工云平台</title> <title>数通智联化工云平台</title>
</head> </head>
<body> <body>

11
src/api/lowCode/index.ts

@ -12,7 +12,8 @@ import {
appTableInfoPage, appTableInfoPage,
AppTaskInfo, AppTaskInfo,
sendAppTaskCount, sendAppTaskCount,
gainAppTask gainAppTask,
MenuTableInfo
} from '@/api/lowCode/type' } from '@/api/lowCode/type'
/** /**
@ 作者: 秦东 @ 作者: 秦东
@ -131,3 +132,11 @@ export function getFieldRecord(param1: any) {
}) })
} }
//按菜单顶级分组和表单
export function gainMenuGroupForm(data: AppTaskInfo):AxiosPromise<MenuTableInfo> {
return request({
url: '/systemapi/app/gainMenuGroupForm',
method: 'post',
data: data
});
}

8
src/api/lowCode/type.ts

@ -117,6 +117,14 @@ export interface appTableInfoPage{
tableId?: string; tableId?: string;
} }
//输出菜单表单
export interface MenuTableInfo {
id?: string;
title?: string;
list?:appTableInfoPage[]
}
//获取相应任务内容的统计数据 //获取相应任务内容的统计数据
export interface AppTaskInfo { export interface AppTaskInfo {
id?: string; id?: string;

189
src/views/formTable/index.vue

@ -6,7 +6,7 @@
<script lang='ts' setup> <script lang='ts' setup>
import { useRoute,useRouter } from 'vue-router' import { useRoute,useRouter } from 'vue-router'
import { appBasicInformation,appTableFormPage,appTableInfoPage,AppTaskInfo,sendAppTaskCount } from '@/api/lowCode/type' import { appBasicInformation,appTableFormPage,appTableInfoPage,AppTaskInfo,sendAppTaskCount } from '@/api/lowCode/type'
import { gainAppEditPsge,getAllAppTableForm,calculateQuantityOption } from '@/api/lowCode/index' import { gainAppEditPsge,getAllAppTableForm,calculateQuantityOption,gainMenuGroupForm } from '@/api/lowCode/index'
import Header from '@/views/common/header/formTable/header.vue' import Header from '@/views/common/header/formTable/header.vue'
@ -38,7 +38,7 @@ const gainAppCount = reactive<AppTaskInfo>({
}) })
const gainAppTaskList = ref<sendAppTaskCount[]>([]) const gainAppTaskList = ref<sendAppTaskCount[]>([])
const pageTotal = ref<number>(0) // const pageTotal = ref<number>(0) //
const pageList = ref<appTableInfoPage[]>([]) // const pageList = ref<any[]>([]) //
// //
const _scrollTop = ref<number>(0) const _scrollTop = ref<number>(0)
const loadingList = ref(false) // const loadingList = ref(false) //
@ -76,32 +76,12 @@ onMounted(()=>{
const loadAppTableForm = () => { const loadAppTableForm = () => {
loadText.value = "数据加载中,请稍后......" loadText.value = "数据加载中,请稍后......"
loadingList.value = true loadingList.value = true
getAllAppTableForm(appFormPage) gainMenuGroupForm(appFormPage)
.then(({data})=>{ .then(({data})=>{
// console.log("",data) console.log("加载表单数据",data)
pageTotal.value = pageTotal.value + data.count pageList.value = data
// pageTotal.value = data.total loadText.value = ""
// pageList.value = data.list loadingList.value = false
pageList.value.push(...data.list)
if(data.total > 0){
if(pageTotal.value < data.total){
let pagenum = appFormPage.pagesize - data.count
if (pagenum > 0) {
loadText.value = ""
loadingList.value = true
}else{
loadText.value = ""
loadingList.value = false
}
}else{
loadText.value = ""
loadingList.value = true
}
}else{
loadText.value = "此选项没有数据!"
loadingList.value = true
}
}) })
} }
/** /**
@ -181,7 +161,7 @@ const openApp = (val:sendAppTaskCount) => {
<template> <template>
<div class="appBodyCalss"> <div class="appBodyCalss">
<Header :header-title="appInfo.appName" :menu-tree="appInfo.menuTree" :call-back-click="true" /> <Header :header-title="appInfo.appName" :menu-tree="appInfo.menuTree" :call-back-click="true" />
<el-scrollbar ref="scrollAppBox" class="appIndexBody" @scroll="onHandleAppScroll"> <el-scrollbar ref="scrollAppBox" class="appIndexBody" >
<VisitingCard /> <VisitingCard />
<div class="myTaskMenu "> <div class="myTaskMenu ">
<el-card> <el-card>
@ -191,113 +171,37 @@ const openApp = (val:sendAppTaskCount) => {
</div> </div>
</el-card> </el-card>
</div> </div>
<!-- <el-row class="myRowBox" >
<el-col v-for="item in gainAppTaskList" :key="item.sort" :span="12" class="taskCardLeft">
<el-card class="myCardBox" shadow="always" @click="openInfo(item)">
<table>
<tbody>
<tr>
<td style="width:75px;">
<div class="iconSvgBox"><SvgIcon :icon-class="item.icon" :size="50" /></div>
</td>
<td valign="top" style="vertical-align: top;">
<div class="carCont">{{item.lable}}</div>
<div class="carCont magTop">{{item.count}}</div>
</td>
</tr>
</tbody>
</table>
</el-card>
</el-col> -->
<!-- <el-col :span="12" class="taskCardRight">
<el-card class="myCardBox" shadow="always">
<table>
<tbody>
<tr>
<td style="width:75px;">
<div class="iconSvgBox"><SvgIcon icon-class="gdqr" :size="50" /></div>
</td>
<td valign="top" style="vertical-align: top;">
<div class="carCont">已办事宜</div>
<div class="carCont magTop">0</div>
</td>
</tr>
</tbody>
</table>
</el-card>
</el-col>
<el-col :span="12" class="taskCardLeft">
<el-card class="myCardBox" shadow="always">
<table>
<tbody>
<tr>
<td style="width:75px;">
<div class="iconSvgBox"><SvgIcon icon-class="woChuangJianDe" :size="50" /></div>
</td>
<td valign="top" style="vertical-align: top;">
<div class="carCont">我创建的</div>
<div class="carCont magTop">0</div>
</td>
</tr>
</tbody>
</table>
</el-card>
</el-col>
<el-col :span="12" class="taskCardRight">
<el-card class="myCardBox" shadow="always">
<table>
<tbody>
<tr>
<td style="width:75px;">
<div class="iconSvgBox"><SvgIcon icon-class="chaoSongWoDe" :size="50" /></div>
</td>
<td valign="top" style="vertical-align: top;">
<div class="carCont">抄送我的</div>
<div class="carCont magTop">0</div>
</td>
</tr>
</tbody>
</table>
</el-card>
</el-col> -->
<!-- </el-row> -->
<!--内容列表--> <!--内容列表-->
<el-row>
<el-col v-for="item in pageList" :key="item.id" class="colBox" :span="6">
<div @click="openApp(item)">
<div v-if="item.icon!=''" class="iconImgBox"><el-image style="width: 40px; height: 40px" :src="item.icon" fit="cover" /></div>
<div v-else class="iconBox" style="background-color: #FFFFFF; color: #000000"><SvgIcon :icon-class="item.svg" :size="40" /></div>
<div class="appTitle">
<el-text type="info">{{item.label}}</el-text>
</div>
</div>
</el-col>
</el-row>
<!-- <div class="myAppRowBox"> <el-card v-for="item in pageList" :key="item.id" style="max-width: 100%; margin: 5px 0;">
<el-row :gutter="10"> <template #header>
<el-col v-for="item in pageList" :key="item.id" class="appInfoBox" :span="12" @click="openApp(item)"> <div class="card-header">
<el-image <el-text type="info">{{ item.title }}</el-text>
class="imgBox" </div>
:src="item.icon" </template>
> <el-row>
<template #error> <el-col v-for="itemChild in item.list" :key="itemChild.id" class="colBox" :span="6">
<div class="image-slot"> <div @click="openApp(itemChild)">
<SvgIcon :icon-class="item.svg" :size="'100%'" />
</div>
</template>
</el-image>
<div class="appTextTwo">{{item.label}}</div>
<div class="appText">创建人:{{item.founder}}</div>
<div class="appText">创建时间{{item.createDate}}</div>
<div v-if="itemChild.icon!=''" class="iconImgBox"><el-image style="width: 40px; height: 40px" :src="itemChild.icon" fit="cover" /></div>
<div v-else-if="itemChild.svg!=''" class="iconBox" style="background-color: #409EFF; color: #FFFFFF"><SvgIcon :icon-class="itemChild.svg" :size="40" /></div>
<div v-else class="iconBox" style="background-color: #409EFF; color: #FFFFFF"><SvgIcon icon-class="all" :size="40" /></div>
<div class="appTitle">
<el-text type="info">{{itemChild.label}}</el-text>
</div>
</div>
</el-col> </el-col>
</el-row> </el-row>
</div> --> </el-card>
<div v-if="loadingList" class="loading">{{loadText}}</div> <div v-if="loadingList" class="loading">{{loadText}}</div>
</el-scrollbar> </el-scrollbar>
</div> </div>
@ -305,6 +209,33 @@ const openApp = (val:sendAppTaskCount) => {
<style lang='scss' scoped> <style lang='scss' scoped>
.appBodyCalss{ .appBodyCalss{
// text-align: center; // text-align: center;
:deep .el-card__body{
padding:10px 0px 15px 0;
}
:deep .el-card__header{
padding:10px 10px;
}
.colBox{
text-align: center;
padding: 5px 5px;
}
.appTitle{
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
font-size: 12px;
}
.iconBox{
padding: 5px 5px;
display: inline-flex;
border-radius: 5px;
}
.iconImgBox{
padding: 5px 5px;
display: inline-flex;
border-radius: 5px;
border: 1px solid #E4E7ED;
}
} }
.myAppRowBox{ .myAppRowBox{
padding: 0 10px; padding: 0 10px;

475
src/views/formTable/index_20241127.vue

@ -0,0 +1,475 @@
<!--
@ 作者: 秦东
@ 时间: 2024-10-28 15:22:32
@ 备注: 自定义应用首页
-->
<script lang='ts' setup>
import { useRoute,useRouter } from 'vue-router'
import { appBasicInformation,appTableFormPage,appTableInfoPage,AppTaskInfo,sendAppTaskCount,gainMenuGroupForm } from '@/api/lowCode/type'
import { gainAppEditPsge,getAllAppTableForm,calculateQuantityOption } from '@/api/lowCode/index'
import Header from '@/views/common/header/formTable/header.vue'
import VisitingCard from '@/views/common/user/visitingCard.vue'
import SvgIcon from '@/components/svgIcon/index.vue'
const route = useRoute()
const router = useRouter()
const appInfo = reactive<appBasicInformation>({
appKey: "",
appName: "",
appSvg: "",
describe: "",
state: 0,
uuid: "",
menuTree:[]
})
//
const appFormPage = reactive<appTableFormPage>({
page:1,
pagesize:40,
id:route.query.id,
type:2
})
const gainAppCount = reactive<AppTaskInfo>({
id:route.query.id,
type:2
})
const gainAppTaskList = ref<sendAppTaskCount[]>([])
const pageTotal = ref<number>(0) //
const pageList = ref<appTableInfoPage[]>([]) //
//
const _scrollTop = ref<number>(0)
const loadingList = ref(false) //
const scrollAppBox = ref(null) //
const loadText = ref("数据加载中,请稍后......")
/**
@ 作者: 秦东
@ 时间: 2024-10-30 15:36:18
@ 功能: 获取app基本信息
*/
const getAppBasicInformation = () => {
gainAppEditPsge({id:route.query.id})
.then(({data}) => {
// console.log(' app',data)
appInfo.appKey = data.appKey
appInfo.appName = data.appName
appInfo.appSvg = data.appSvg
appInfo.describe = data.describe
appInfo.state = data.state
appInfo.uuid = data.uuid
appInfo.menuTree = data.menuTree
loadAppTableForm();
})
}
//
onMounted(()=>{
appTaskCardList()
getAppBasicInformation()
})
/**
@ 作者: 秦东
@ 时间: 2024-10-31 14:49:46
@ 功能: 加载表单数据
*/
const loadAppTableForm = () => {
loadText.value = "数据加载中,请稍后......"
loadingList.value = true
getAllAppTableForm(appFormPage)
.then(({data})=>{
// console.log("",data)
pageTotal.value = pageTotal.value + data.count
// pageTotal.value = data.total
// pageList.value = data.list
pageList.value.push(...data.list)
if(data.total > 0){
if(pageTotal.value < data.total){
let pagenum = appFormPage.pagesize - data.count
if (pagenum > 0) {
loadText.value = ""
loadingList.value = true
}else{
loadText.value = ""
loadingList.value = false
}
}else{
loadText.value = ""
loadingList.value = true
}
}else{
loadText.value = "此选项没有数据!"
loadingList.value = true
}
})
}
/**
@ 作者: 秦东
@ 时间: 2024-10-31 10:44:06
@ 功能: 滚动滑轮
*/
const onHandleAppScroll = (event:any) => {
if (loadingList.value === true) {
return
}
// console.log("onHandleScroll",loadingList.value, event)
let wrapRef = scrollAppBox.value.wrapRef
scrollAppBox.value.moveY = wrapRef.scrollTop * 100 / wrapRef.clientHeight
scrollAppBox.value.moveX = wrapRef.scrollLeft * 100 / wrapRef.clientWidth
let poor = wrapRef.scrollHeight - wrapRef.clientHeight
// console.log("wrapRef",wrapRef)
// console.log("moveY",scrollAppBox.value.moveY )
// console.log("moveX",scrollAppBox.value.moveX )
// console.log("poor",poor,event.scrollTop)
if (event.scrollTop + 2 >= poor) {
_scrollTop.value = event.scrollTop
loadingList.value=true
appFormPage.page++
// console.log("appFormPage.page",appFormPage.page++)
loadAppTableForm()
}
}
/**
@ 作者: 秦东
@ 时间: 2024-10-28 13:40:15
@ 功能: 监听当前页面是否回归到首页
*/
watch(()=>appFormPage.page,(val:number)=>{
if(val <= 1){
_scrollTop.value = 0
scrollAppBox.value.setScrollTop(_scrollTop)
}
})
/**
@ 作者: 秦东
@ 时间: 2024-11-01 08:33:47
@ 功能: 获取任务数量
*/
const appTaskCardList = () => {
calculateQuantityOption(gainAppCount)
.then(({data})=>{
// console.log("",data)
gainAppTaskList.value = data
})
}
/**
@ 作者: 秦东
@ 时间: 2024-11-01 09:36:29
@ 功能: 打开任务列表
*/
const openInfo = (val:sendAppTaskCount) => {
router.push({ path: "/form_table/taskList",query:{id: route.query.id,class:val.sort,title:val.lable}});
}
/**
@ 作者: 秦东
@ 时间: 2024-11-02 09:22:29
@ 功能: 打开App
*/
const openApp = (val:sendAppTaskCount) => {
if(val.isList){
router.push({ path: "/form_table/taskListPage",query:{id: val.tableId,key: val.appKeyStr,formid: val.versionId,formKey: val.idStr,title: val.label,state:1}});
}else{
router.push({ path: "/form_table/taskInfo",query:{id: val.tableId,key: val.appKeyStr,formid: val.versionId,formKey: val.idStr,title: val.label,state:2}});
}
}
</script>
<template>
<div class="appBodyCalss">
<Header :header-title="appInfo.appName" :menu-tree="appInfo.menuTree" :call-back-click="true" />
<el-scrollbar ref="scrollAppBox" class="appIndexBody" @scroll="onHandleAppScroll">
<VisitingCard />
<div class="myTaskMenu ">
<el-card>
<div v-for="item in gainAppTaskList" :key="item.sort" @click="openInfo(item)" class="taskBox">
<div class="iconSvgBoxt"><el-badge :value="item.count" :max="99" class="item"><SvgIcon :icon-class="item.icon" :size="30" /></el-badge></div>
{{item.lable}}
</div>
</el-card>
</div>
<!-- <el-row class="myRowBox" >
<el-col v-for="item in gainAppTaskList" :key="item.sort" :span="12" class="taskCardLeft">
<el-card class="myCardBox" shadow="always" @click="openInfo(item)">
<table>
<tbody>
<tr>
<td style="width:75px;">
<div class="iconSvgBox"><SvgIcon :icon-class="item.icon" :size="50" /></div>
</td>
<td valign="top" style="vertical-align: top;">
<div class="carCont">{{item.lable}}</div>
<div class="carCont magTop">{{item.count}}</div>
</td>
</tr>
</tbody>
</table>
</el-card>
</el-col> -->
<!-- <el-col :span="12" class="taskCardRight">
<el-card class="myCardBox" shadow="always">
<table>
<tbody>
<tr>
<td style="width:75px;">
<div class="iconSvgBox"><SvgIcon icon-class="gdqr" :size="50" /></div>
</td>
<td valign="top" style="vertical-align: top;">
<div class="carCont">已办事宜</div>
<div class="carCont magTop">0</div>
</td>
</tr>
</tbody>
</table>
</el-card>
</el-col>
<el-col :span="12" class="taskCardLeft">
<el-card class="myCardBox" shadow="always">
<table>
<tbody>
<tr>
<td style="width:75px;">
<div class="iconSvgBox"><SvgIcon icon-class="woChuangJianDe" :size="50" /></div>
</td>
<td valign="top" style="vertical-align: top;">
<div class="carCont">我创建的</div>
<div class="carCont magTop">0</div>
</td>
</tr>
</tbody>
</table>
</el-card>
</el-col>
<el-col :span="12" class="taskCardRight">
<el-card class="myCardBox" shadow="always">
<table>
<tbody>
<tr>
<td style="width:75px;">
<div class="iconSvgBox"><SvgIcon icon-class="chaoSongWoDe" :size="50" /></div>
</td>
<td valign="top" style="vertical-align: top;">
<div class="carCont">抄送我的</div>
<div class="carCont magTop">0</div>
</td>
</tr>
</tbody>
</table>
</el-card>
</el-col> -->
<!-- </el-row> -->
<!--内容列表-->
<el-card style="max-width: 100%; margin: 5px 0;">
<template #header>
<div class="card-header">
<el-text type="info">栏目</el-text>
</div>
</template>
</el-card>
<el-row>
<el-col v-for="item in pageList" :key="item.id" class="colBox" :span="6">
<div @click="openApp(item)">
<div v-if="item.icon!=''" class="iconImgBox"><el-image style="width: 40px; height: 40px" :src="item.icon" fit="cover" /></div>
<div v-else class="iconBox" style="background-color: #FFFFFF; color: #000000"><SvgIcon :icon-class="item.svg" :size="40" /></div>
<div class="appTitle">
<el-text type="info">{{item.label}}</el-text>
</div>
</div>
</el-col>
</el-row>
<!-- <div class="myAppRowBox">
<el-row :gutter="10">
<el-col v-for="item in pageList" :key="item.id" class="appInfoBox" :span="12" @click="openApp(item)">
<el-image
class="imgBox"
:src="item.icon"
>
<template #error>
<div class="image-slot">
<SvgIcon :icon-class="item.svg" :size="'100%'" />
</div>
</template>
</el-image>
<div class="appTextTwo">{{item.label}}</div>
<div class="appText">创建人:{{item.founder}}</div>
<div class="appText">创建时间{{item.createDate}}</div>
</el-col>
</el-row>
</div> -->
<div v-if="loadingList" class="loading">{{loadText}}</div>
</el-scrollbar>
</div>
</template>
<style lang='scss' scoped>
.appBodyCalss{
// text-align: center;
:deep .el-card__body{
padding:10px 0px 15px 0;
}
:deep .el-card__header{
padding:10px 10px;
}
.colBox{
text-align: center;
padding: 5px 5px;
}
.appTitle{
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
font-size: 12px;
}
.iconBox{
padding: 5px 5px;
display: inline-flex;
border-radius: 5px;
}
.iconImgBox{
padding: 5px 5px;
display: inline-flex;
border-radius: 5px;
border: 1px solid #E4E7ED;
}
}
.myAppRowBox{
padding: 0 10px;
// margin-top:15px;
.appInfoBox{
margin-top:15px;
}
}
.myRowBox{
// width: calc(100% - 20px);
// margin: 20px 0 0 10px;
:deep .el-card__body{
padding:5px;
}
}
.taskCardLeft{
padding: 10px 5px 0px 10px;
}
.taskCardRight{
padding: 10px 10px 0px 5px;
}
.myCardBox{
width: 100%;
}
.iconSvgBox{
width:66px;
background-color: #01A7F0;
padding: 8px;
border-radius: 10px;
color: #FFFFFF;
}
.carCont{
width:100%;
font-size: 18px;
font-weight:bold;
text-align: center;
}
.magTop{
margin-top: 5px;
font-size: 28px;
}
.imgBox{
display: flex;
width:100%;
height: 200px;
background-color: #EEEEEE;
align-items: center;
border-radius: 5px;
:deep .el-image__inner {
width:100%;
height: 200px;
}
}
.appTextTwo{
width:100%;
height:40px;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
}
.appText{
width:100%;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
margin-top: 5px;
}
.appIndexBody{
width:100%;
height: calc(100vh - 60px);
padding: 10px 10px 10px 10px;
}
.loading{
width:100%;
text-align: center;
height:40px;
line-height: 40px;
}
.myTaskMenu{
width:100%;
padding: 0 10px;
margin: 10px 0 15px 0;
text-align: center;
:deep .el-card__body{
padding: 15px 5px 5px 5px;
display: flex;
justify-content: space-between;
align-items: center;
}
.taskBox{
background-color: #FFFFFF;
}
.iconSvgBoxt{
width: 50px;
background-color: #01A7F0;
padding: 8px;
border-radius: 10px;
color: #FFFFFF;
margin: 0 auto;
}
}
.colBox{
text-align: center;
padding: 5px 5px;
}
.appTitle{
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
font-size: 12px;
}
.iconBox{
padding: 5px 5px;
display: inline-flex;
border-radius: 5px;
}
.iconImgBox{
padding: 5px 5px;
display: inline-flex;
border-radius: 5px;
border: 1px solid #E4E7ED;
}
</style>
Loading…
Cancel
Save