This commit is contained in:
那些花儿
2025-09-25 17:00:19 +08:00
parent 4ef59d727a
commit 56902a6fc6
12 changed files with 413 additions and 35 deletions
@@ -53,11 +53,14 @@ public class FlowTodoCenterController {
t.variable,
ins.state AS instanceState,
ins.id AS instanceId,
ins.businessNo
ins.businessNo,
cat.`name` categoryName
FROM
wf_process_task t
LEFT JOIN wf_process_task_actor ta ON ta.processTaskId = t.id
LEFT JOIN wf_process_instance ins ON ins.id = t.processInstanceId
LEFT JOIN wf_process_define def ON def.id = ins.processDefineId
LEFT JOIN wf_process_category cat ON cat.id = def.category
$condition
""");
Cnd cnd = Cnd.NEW();
@@ -89,11 +92,14 @@ public class FlowTodoCenterController {
t.variable,
ins.state AS instanceState,
ins.id AS instanceId,
ins.businessNo
ins.businessNo,
cat.`name` categoryName
FROM
wf_process_task t
LEFT JOIN wf_process_task_actor ta ON ta.processTaskId = t.id
LEFT JOIN wf_process_instance ins ON ins.id = t.processInstanceId
LEFT JOIN wf_process_define def ON def.id = ins.processDefineId
LEFT JOIN wf_process_category cat ON cat.id = def.category
$condition
""");
Cnd cnd = Cnd.NEW();
@@ -122,10 +128,13 @@ public class FlowTodoCenterController {
ins.operator,
ins.variable,
ins.createdAt,
GROUP_CONCAT(DISTINCT t.displayName) as taskName
GROUP_CONCAT(DISTINCT t.displayName) as taskName,
cat.`name` categoryName
FROM
wf_process_instance ins
LEFT JOIN wf_process_task t ON t.processInstanceId = ins.id and t.taskState = 10
LEFT JOIN wf_process_define def ON def.id = ins.processDefineId
LEFT JOIN wf_process_category cat ON cat.id = def.category
$condition
""");
Cnd cnd = Cnd.NEW();
@@ -36,6 +36,13 @@ public class SysHomeV4Controller {
}
@At("/home2")
@Ok("beetl:/layouts/v4/home/index.html")
@SaCheckLogin
public void home2() {
}
/**
* 应用中心
*/
Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -326,7 +326,7 @@ layout("/layouts/v4/baseLayout.html"){
<div class="apps-wrapper" id="app">
<div class="apps-hero">
<img src="https://i.cug.edu.cn/data/sys-attach/download/1i8hmpaq7wmewu9c7w3pt9qhu3gb8bkcvow0" alt="应用中心" />
<img src="/assets/platform/img/home/app.png" alt="应用中心" />
</div>
<div class="apps-container">
@@ -338,7 +338,7 @@ layout("/layouts/v4/baseLayout.html"){
:class="['apps-sidebar-item', activeCategory === category.id ? 'active' : '']"
@click="changeCategory(category.id)"
>
<i :class="category.icon"></i>
<i :class="category.icon || 'fa fa-th-large'"></i>
{{ category.name }}
</div>
</div>
@@ -76,6 +76,10 @@
<script src="${base!}/assets/platform/plugins/form-create/form-create.min.js"></script>
<script src="${base!}/assets/platform/plugins/form-create/index.umd.js"></script>
<!-- swiper -->
<script src="${base!}/assets/platform/plugins/swiper/swiper-bundle.js"></script>
<link rel="stylesheet" href="${base!}/assets/platform/plugins/swiper/swiper-bundle.min.css"></link>
<!-- <script src="${base!}/assets/platform/plugins/snaker/SnakerflowDesigner.umd.min.js"></script>-->
<script src="${base!}/components/plugins/sysDict/DictData.js"></script>
@@ -619,7 +623,7 @@
</a>
<a href="/platform/v4/serv" data-pjax class="v4-nav-item">
<i class="fa fa-th-large"></i>
服务中心
流程中心
</a>
<a href="/platform/v4/todo" data-pjax class="v4-nav-item">
<i class="fa fa-th-large"></i>
@@ -1414,8 +1414,7 @@ layout("/layouts/v4/baseLayout.html"){
.oa-recommend-grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 16px;
grid-template-columns: repeat(4, 1fr);
}
.oa-recommend-item {
@@ -1423,20 +1422,21 @@ layout("/layouts/v4/baseLayout.html"){
flex-direction: column;
align-items: center;
text-align: center;
padding: 20px 16px;
/* background: #f8f9fa; */
border-radius: 8px;
transition: all 0.2s ease;
cursor: pointer;
min-height: 120px;
min-height: 100px;
width: 100%;
box-sizing: border-box;
min-width: 0;
padding: 10px 0;
}
.oa-recommend-item:hover {
background: #e9ecef;
transform: translateY(-2px);
/*background: #e9ecef;*/
/*transform: translateY(-2px);*/
transform: scale(1.05);
}
.oa-recommend-item-icon {
@@ -0,0 +1,271 @@
const act = {
template: /*language=HTML*/ `
<!-- 活动 -->
<div class="section-wrapper">
<div class="section-act" >
<!-- 标题 -->
<div class="section-act-title">
<span>工会活动</span>
</div>
<!-- Swiper容器 -->
<div class="activity-swiper-container">
<!-- 活动数据 - Swiper -->
<div class="swiper activity-swiper">
<div class="swiper-wrapper">
<div class="swiper-slide" v-for="(activity, index) in actList" :key="index">
<div class="item" @click="go(activity)">
<div class="img-box">
<img :src="activity.image || 'https://www.ncu.edu.cn/__local/8/52/2C/644986B4C9A030F7B65300178A6_8679CB08_18467.jpg'"
alt="">
</div>
<h4 class="title">
{{ activity.title || '欢迎参加周末电影鉴赏活动' }}
</h4>
<!--报名时间-->
<div class="time">
<p>
<i class="fa fa-clock-o"></i>
报名时间:{{ activity.startTime || '2017-05-01' }}至{{ activity.endTime ||
'2017-05-05' }}
</p>
</div>
</div>
</div>
</div>
</div>
<!-- 导航按钮 -->
<div class="swiper-button-next"></div>
<div class="swiper-button-prev"></div>
<!-- 进度条 -->
<div class="swiper-pagination"></div>
</div>
</div>
</div>
`,
data(){
return{
actList: [],
swiper: null
}
},
methods:{
/*查询活动*/
listAct() {
this.$axios.post("/platform/home/listHomeActivity").then((res) => {
if (res.code === 0) {
for (let i = 0; i < 10; i++) {
this.actList = this.actList.concat(res.data)
}
// this.actList = res.data
// 数据加载完成后初始化Swiper
this.$nextTick(() => {
this.initSwiper()
})
}
})
},
/*初始化Swiper*/
initSwiper() {
this.swiper = new Swiper('.activity-swiper', {
slidesPerView: 'auto',
spaceBetween: 30,
centeredSlides: false,
loop: false,
navigation: {
nextEl: '.swiper-button-next',
prevEl: '.swiper-button-prev',
},
pagination: {
el: '.swiper-pagination',
type: 'progressbar',
},
breakpoints: {
768: {
slidesPerView: 2,
},
1024: {
slidesPerView: 3,
},
1200: {
slidesPerView: 4,
}
}
})
},
go(act){
if (!act.url) {
this.$message.warning("管理员未配置活动链接")
return
}
window.open(act.url)
}
},
mounted(){
this.listAct()
},
style: /*language=CSS*/ `
.section-wrapper {
width: 100%;
}
.section-act {
width: 80%;
max-width: 80%;
margin: 30px auto;
}
.section-act .section-act-title span {
font-size: 30px;
color: #000000;
display: block;
font-weight: bold;
position: relative;
text-align: center;
}
.section-act .section-act-title span:hover {
color: var(--color-primary);
cursor: pointer;
}
/deep/ .section-act .section-act-title span::before {
content: '';
width: 24px;
height: 11px;
background: url(https://www.ncu.edu.cn/images/titl.svg) no-repeat center;
background-size: 24px 11px;
display: inline-block;
margin-right: 0;
vertical-align: middle;
}
/deep/ .section-act .section-act-title span::after {
content: '';
width: 24px;
height: 11px;
background: url(https://www.ncu.edu.cn/images/titr.svg) no-repeat center;
background-size: 24px 11px;
display: inline-block;
margin-left: 0;
vertical-align: middle;
}
/* Swiper容器样式 */
.activity-swiper-container {
position: relative;
width: 100%;
margin-top: 30px;
}
.activity-swiper {
width: 100%;
padding: 0 50px;
}
.activity-swiper .swiper-slide {
height: auto;
}
/* 导航按钮样式 */
.activity-swiper-container .swiper-button-next,
.activity-swiper-container .swiper-button-prev {
color: var(--color-primary);
background: white;
width: 40px;
height: 40px;
border-radius: 50%;
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
transition: all 0.3s ease;
}
.activity-swiper-container .swiper-button-next:hover,
.activity-swiper-container .swiper-button-prev:hover {
background: var(--color-primary);
color: white;
transform: scale(1.1);
}
/deep/ .activity-swiper-container .swiper-button-next::after,
/deep/ .activity-swiper-container .swiper-button-prev::after {
font-size: 16px;
font-weight: bold;
}
/* 进度条样式 */
.activity-swiper-container .swiper-pagination {
position: relative;
margin-top: 30px;
height: 4px;
}
.activity-swiper-container .swiper-pagination-progressbar {
background: #e0e0e0;
border-radius: 2px;
}
.activity-swiper-container .swiper-pagination-progressbar-fill {
background: var(--color-primary);
border-radius: 2px;
}
.activity-swiper .swiper-slide .item {
height: auto;
position: relative;
cursor: pointer;
}
.activity-swiper .swiper-slide .item .img-box {
width: 100%;
height: 200px;
overflow: hidden;
}
.activity-swiper .swiper-slide .item .img-box img {
width: 100%;
height: 100%;
object-fit: cover;
transition: transform 0.3s ease;
}
.activity-swiper .swiper-slide .item:hover .img-box img {
transform: scale(1.1);
}
.activity-swiper .swiper-slide .item h4 {
font-size: 20px;
margin-top: 10px;
color: #333;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
overflow: hidden;
text-overflow: ellipsis;
line-height: 1.5;
text-align: left;
transition: color 0.3s ease;
}
.activity-swiper .swiper-slide .item:hover h4 {
color: var(--color-primary);
}
.activity-swiper .swiper-slide .item .time {
margin-top: 8px;
}
.activity-swiper .swiper-slide .item .time p {
font-size: 14px;
margin: 0;
line-height: 1.5;
color: #666;
}
.activity-swiper .swiper-slide .item .time i {
margin-right: 5px;
color: var(--color-primary);
}
`
}
@@ -0,0 +1,64 @@
<!--#
layout("/layouts/v4/baseLayout.html"){
#-->
<!-- 引入Swiper CSS -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.css"/>
<style>
.section-banner {
position: relative;
overflow: hidden;
}
.section-banner .banner-img {
width: 100%;
height: 100%;
}
.section-banner .banner-img img {
width: 100%;
height: 100%;
object-fit: cover;
}
</style>
<div class="v4-container" id="v4-home-app">
<!-- 首页banner -->
<div class="section-banner">
<div class="banner-img">
<img src="${config.AppHomeImg!}" alt=""/>
</div>
</div>
<act/>
</div>
<!-- 引入Swiper JS -->
<script src="https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.js"></script>
<script>
<!--#include("act.js"){}#-->
new Vue({
el: '#v4-home-app',
data: {
},
components: {
'act': act
},
mounted() {
},
methods: {
}
})
</script>
<!--#
}
#-->
+17 -17
View File
@@ -334,7 +334,7 @@ layout("/layouts/v4/baseLayout.html"){
:class="['apps-sidebar-item', activeCategory === category.id ? 'active' : '']"
@click="changeCategory(category.id)"
>
<i :class="category.icon"></i>
<i :class="category.icon || 'fa fa-th-large'"></i>
{{ category.name }}
</div>
</div>
@@ -350,22 +350,22 @@ layout("/layouts/v4/baseLayout.html"){
</div>
<!-- 字母过滤 -->
<div class="apps-filter">
<div class="apps-filter-title">首字母:</div>
<div class="apps-filter-tags alphabet-filter">
<div :class="['filter-tag', activeAlphabet === '' ? 'active' : '']" @click="changeAlphabet('')">
全部
</div>
<div
v-for="letter in alphabets"
:key="letter"
:class="['alphabet-item', activeAlphabet === letter ? 'active' : '']"
@click="changeAlphabet(letter)"
>
{{ letter }}
</div>
</div>
</div>
<!-- <div class="apps-filter">-->
<!-- <div class="apps-filter-title">首字母:</div>-->
<!-- <div class="apps-filter-tags alphabet-filter">-->
<!-- <div :class="['filter-tag', activeAlphabet === '' ? 'active' : '']" @click="changeAlphabet('')">-->
<!-- 全部-->
<!-- </div>-->
<!-- <div-->
<!-- v-for="letter in alphabets"-->
<!-- :key="letter"-->
<!-- :class="['alphabet-item', activeAlphabet === letter ? 'active' : '']"-->
<!-- @click="changeAlphabet(letter)"-->
<!-- >-->
<!-- {{ letter }}-->
<!-- </div>-->
<!-- </div>-->
<!-- </div>-->
</div>
<!-- 应用网格 -->
@@ -289,12 +289,8 @@ layout("/layouts/v4/baseLayout.html"){
<span class="task-title">{{scope.row.variable?.instanceName}}</span>
</template>
</el-table-column>
<el-table-column prop="taskName" label="任务节点" min-width="150"
show-overflow-tooltip></el-table-column>
<el-table-column prop="categoryName" label="流程分类" min-width="150" show-overflow-tooltip>
<template slot-scope="{row}">{{categoryOptions.find(item => item.id === row.category)?.name}}
</template>
</el-table-column>
<el-table-column prop="taskName" label="任务节点" min-width="150" show-overflow-tooltip></el-table-column>
<el-table-column prop="categoryName" label="流程分类" min-width="150" show-overflow-tooltip></el-table-column>
<el-table-column prop="initiatorName" label="申请人" min-width="120">
<template slot-scope="{row}">{{row.variable.initiatorName}}</template>
</el-table-column>