Merge branch 'main' of https://dd3skj.picp.vip/zhaoxinyu/v4
This commit is contained in:
@@ -18,7 +18,6 @@ import org.nutz.lang.util.NutMap;
|
|||||||
import org.nutz.mvc.annotation.At;
|
import org.nutz.mvc.annotation.At;
|
||||||
import org.nutz.mvc.annotation.Ok;
|
import org.nutz.mvc.annotation.Ok;
|
||||||
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
@@ -53,11 +52,14 @@ public class FlowTodoCenterController {
|
|||||||
t.variable,
|
t.variable,
|
||||||
ins.state AS instanceState,
|
ins.state AS instanceState,
|
||||||
ins.id AS instanceId,
|
ins.id AS instanceId,
|
||||||
ins.businessNo
|
ins.businessNo,
|
||||||
|
cat.`name` categoryName
|
||||||
FROM
|
FROM
|
||||||
wf_process_task t
|
wf_process_task t
|
||||||
LEFT JOIN wf_process_task_actor ta ON ta.processTaskId = t.id
|
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_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
|
$condition
|
||||||
""");
|
""");
|
||||||
Cnd cnd = Cnd.NEW();
|
Cnd cnd = Cnd.NEW();
|
||||||
@@ -89,11 +91,14 @@ public class FlowTodoCenterController {
|
|||||||
t.variable,
|
t.variable,
|
||||||
ins.state AS instanceState,
|
ins.state AS instanceState,
|
||||||
ins.id AS instanceId,
|
ins.id AS instanceId,
|
||||||
ins.businessNo
|
ins.businessNo,
|
||||||
|
cat.`name` categoryName
|
||||||
FROM
|
FROM
|
||||||
wf_process_task t
|
wf_process_task t
|
||||||
LEFT JOIN wf_process_task_actor ta ON ta.processTaskId = t.id
|
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_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
|
$condition
|
||||||
""");
|
""");
|
||||||
Cnd cnd = Cnd.NEW();
|
Cnd cnd = Cnd.NEW();
|
||||||
@@ -122,10 +127,13 @@ public class FlowTodoCenterController {
|
|||||||
ins.operator,
|
ins.operator,
|
||||||
ins.variable,
|
ins.variable,
|
||||||
ins.createdAt,
|
ins.createdAt,
|
||||||
GROUP_CONCAT(DISTINCT t.displayName) as taskName
|
GROUP_CONCAT(DISTINCT t.displayName) as taskName,
|
||||||
|
cat.`name` categoryName
|
||||||
FROM
|
FROM
|
||||||
wf_process_instance ins
|
wf_process_instance ins
|
||||||
LEFT JOIN wf_process_task t ON t.processInstanceId = ins.id and t.taskState = 10
|
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
|
$condition
|
||||||
""");
|
""");
|
||||||
Cnd cnd = Cnd.NEW();
|
Cnd cnd = Cnd.NEW();
|
||||||
@@ -178,7 +186,24 @@ public class FlowTodoCenterController {
|
|||||||
dao.execute(doneSql);
|
dao.execute(doneSql);
|
||||||
int doneCount = doneSql.getInt();
|
int doneCount = doneSql.getInt();
|
||||||
|
|
||||||
return Result.success(Map.of("startedCount", startedCount, "todoCount", todoCount, "doneCount", doneCount));
|
// 查询未读消息
|
||||||
|
Sql msgSql = Sqls.create("""
|
||||||
|
SELECT
|
||||||
|
count(DISTINCT r.messageId)
|
||||||
|
FROM
|
||||||
|
global_message_receiver r
|
||||||
|
LEFT JOIN global_message m ON m.id = r.messageId
|
||||||
|
WHERE
|
||||||
|
r.receiverId = @userId
|
||||||
|
AND r.isRead = 0
|
||||||
|
AND m.`status` = 2
|
||||||
|
""");
|
||||||
|
msgSql.setParam("userId", SecurityUtil.getUserId());
|
||||||
|
msgSql.setCallback(Sqls.callback.integer());
|
||||||
|
dao.execute(msgSql);
|
||||||
|
int msgCount = msgSql.getInt();
|
||||||
|
|
||||||
|
return Result.success(Map.of("startedCount", startedCount, "todoCount", todoCount, "doneCount", doneCount, "notifications", msgCount));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,6 +36,13 @@ public class SysHomeV4Controller {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@At("/home2")
|
||||||
|
@Ok("beetl:/layouts/v4/home/index.html")
|
||||||
|
@SaCheckLogin
|
||||||
|
public void home2() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 应用中心
|
* 应用中心
|
||||||
*/
|
*/
|
||||||
|
|||||||
+3
-2
@@ -2,6 +2,7 @@ package com.budwk.app.zhgh.democratic.suggestionBox.controller;
|
|||||||
|
|
||||||
import cn.dev33.satoken.annotation.SaCheckLogin;
|
import cn.dev33.satoken.annotation.SaCheckLogin;
|
||||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||||
|
import cn.dev33.satoken.annotation.SaMode;
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import com.budwk.app.base.annotation.SLog;
|
import com.budwk.app.base.annotation.SLog;
|
||||||
import com.budwk.app.base.page.Pagination;
|
import com.budwk.app.base.page.Pagination;
|
||||||
@@ -53,7 +54,7 @@ public class SuggestionBoxMineController {
|
|||||||
|
|
||||||
|
|
||||||
@At
|
@At
|
||||||
@SaCheckPermission("suggestionBox.mine")
|
@SaCheckPermission(value = {"suggestionBox.mine", "h5.suggestionBox.mine"}, mode = SaMode.OR)
|
||||||
public Result pageData(Integer pageNumber, Integer pageSize, String searchKeyword, Integer year) {
|
public Result pageData(Integer pageNumber, Integer pageSize, String searchKeyword, Integer year) {
|
||||||
Sql sql = Sqls.create("""
|
Sql sql = Sqls.create("""
|
||||||
SELECT
|
SELECT
|
||||||
@@ -100,7 +101,7 @@ public class SuggestionBoxMineController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@At
|
@At
|
||||||
@SaCheckPermission("suggestionBox.mine")
|
@SaCheckPermission(value = {"suggestionBox.mine", "h5.suggestionBox.mine"}, mode = SaMode.OR)
|
||||||
@Aop(TransAop.READ_COMMITTED)
|
@Aop(TransAop.READ_COMMITTED)
|
||||||
@ApiOperation("删除")
|
@ApiOperation("删除")
|
||||||
@SLog(tag = "建言献策-我的申请", msg = "删除")
|
@SLog(tag = "建言献策-我的申请", msg = "删除")
|
||||||
|
|||||||
+5
-4
@@ -2,6 +2,7 @@ package com.budwk.app.zhgh.democratic.suggestionBox.controller;
|
|||||||
|
|
||||||
import cn.dev33.satoken.annotation.SaCheckLogin;
|
import cn.dev33.satoken.annotation.SaCheckLogin;
|
||||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||||
|
import cn.dev33.satoken.annotation.SaMode;
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import com.budwk.app.base.page.Pagination;
|
import com.budwk.app.base.page.Pagination;
|
||||||
import com.budwk.app.base.result.Result;
|
import com.budwk.app.base.result.Result;
|
||||||
@@ -44,14 +45,14 @@ public class SuggestionBoxQueryController {
|
|||||||
|
|
||||||
@At
|
@At
|
||||||
@Ok("beetl:/platform/zhghh5/democratic/suggestionBox/query/index.html")
|
@Ok("beetl:/platform/zhghh5/democratic/suggestionBox/query/index.html")
|
||||||
@SaCheckPermission("suggestionBox.query")
|
@SaCheckPermission("h5.suggestionBox.query")
|
||||||
public void h5Index() {
|
public void h5() {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@At
|
@At
|
||||||
@SaCheckPermission("suggestionBox.query")
|
@SaCheckPermission(value = {"suggestionBox.query", "h5.suggestionBox.query"}, mode = SaMode.OR)
|
||||||
public Result pageData(Integer pageNumber, Integer pageSize, String searchKeyword, Integer year) {
|
public Result pageData(Integer pageNumber, Integer pageSize, String searchKeyword, Integer year) {
|
||||||
Sql sql = Sqls.create("""
|
Sql sql = Sqls.create("""
|
||||||
SELECT
|
SELECT
|
||||||
@@ -97,7 +98,7 @@ public class SuggestionBoxQueryController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@At
|
@At
|
||||||
@SaCheckLogin
|
@SaCheckPermission(value = {"suggestionBox.query", "h5.suggestionBox.query"}, mode = SaMode.OR)
|
||||||
@Aop(TransAop.READ_COMMITTED)
|
@Aop(TransAop.READ_COMMITTED)
|
||||||
@ApiOperation("删除")
|
@ApiOperation("删除")
|
||||||
public Result delete(@Param("id") String id) {
|
public Result delete(@Param("id") String id) {
|
||||||
|
|||||||
+5
-4
@@ -2,6 +2,7 @@ package com.budwk.app.zhgh.democratic.suggestionBox.controller;
|
|||||||
|
|
||||||
import cn.dev33.satoken.annotation.SaCheckLogin;
|
import cn.dev33.satoken.annotation.SaCheckLogin;
|
||||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||||
|
import cn.dev33.satoken.annotation.SaMode;
|
||||||
import cn.hutool.core.lang.Dict;
|
import cn.hutool.core.lang.Dict;
|
||||||
import com.budwk.app.base.annotation.SLog;
|
import com.budwk.app.base.annotation.SLog;
|
||||||
import com.budwk.app.base.result.Result;
|
import com.budwk.app.base.result.Result;
|
||||||
@@ -55,7 +56,7 @@ public class SuggestionBoxWriteController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@At
|
@At
|
||||||
@SaCheckPermission("suggestionBox.write")
|
@SaCheckPermission(value = {"suggestionBox.write", "h5.suggestionBox.write"}, mode = SaMode.OR)
|
||||||
@ApiOperation("保存申请")
|
@ApiOperation("保存申请")
|
||||||
@SLog(tag = "建言献策-填写申请", msg = "保存申请")
|
@SLog(tag = "建言献策-填写申请", msg = "保存申请")
|
||||||
public Result save(@Param("data") SuggestionBox suggestionBox) {
|
public Result save(@Param("data") SuggestionBox suggestionBox) {
|
||||||
@@ -66,7 +67,7 @@ public class SuggestionBoxWriteController {
|
|||||||
|
|
||||||
|
|
||||||
@At
|
@At
|
||||||
@SaCheckPermission("suggestionBox.write")
|
@SaCheckPermission(value = {"suggestionBox.write", "h5.suggestionBox.write"}, mode = SaMode.OR)
|
||||||
@ApiOperation("提交申请")
|
@ApiOperation("提交申请")
|
||||||
@Aop(TransAop.READ_COMMITTED)
|
@Aop(TransAop.READ_COMMITTED)
|
||||||
@SLog(tag = "建言献策-填写申请", msg = "提交申请")
|
@SLog(tag = "建言献策-填写申请", msg = "提交申请")
|
||||||
@@ -88,7 +89,7 @@ public class SuggestionBoxWriteController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@At
|
@At
|
||||||
@SaCheckPermission("suggestionBox.write")
|
@SaCheckPermission(value = {"suggestionBox.write", "h5.suggestionBox.write"}, mode = SaMode.OR)
|
||||||
@ApiOperation("重新提交申请")
|
@ApiOperation("重新提交申请")
|
||||||
@Aop(TransAop.READ_COMMITTED)
|
@Aop(TransAop.READ_COMMITTED)
|
||||||
@SLog(tag = "建言献策-填写申请", msg = "重新提交申请")
|
@SLog(tag = "建言献策-填写申请", msg = "重新提交申请")
|
||||||
@@ -103,7 +104,7 @@ public class SuggestionBoxWriteController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@At
|
@At
|
||||||
@SaCheckPermission("suggestionBox.write")
|
@SaCheckPermission(value = {"suggestionBox.write", "h5.suggestionBox.write"}, mode = SaMode.OR)
|
||||||
@ApiOperation("获取申请信息")
|
@ApiOperation("获取申请信息")
|
||||||
public Result info(@Param("id") String id) {
|
public Result info(@Param("id") String id) {
|
||||||
SuggestionBox box = dao.fetch(SuggestionBox.class, id);
|
SuggestionBox box = dao.fetch(SuggestionBox.class, id);
|
||||||
|
|||||||
+3
-2
@@ -1,6 +1,7 @@
|
|||||||
package com.budwk.app.zhgh.democratic.suggestionBox.controller;
|
package com.budwk.app.zhgh.democratic.suggestionBox.controller;
|
||||||
|
|
||||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||||
|
import cn.dev33.satoken.annotation.SaMode;
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import com.budwk.app.base.page.Pagination;
|
import com.budwk.app.base.page.Pagination;
|
||||||
import com.budwk.app.base.param.PageForm;
|
import com.budwk.app.base.param.PageForm;
|
||||||
@@ -49,7 +50,7 @@ public class SuggestionXghController {
|
|||||||
|
|
||||||
|
|
||||||
@At
|
@At
|
||||||
@SaCheckPermission("suggestionBox.xgh")
|
@SaCheckPermission(value = {"suggestionBox.xgh", "h5.suggestionBox.xgh"}, mode = SaMode.OR)
|
||||||
public Result pageData(PageForm pageForm, String taskId, String searchKeyword, Integer year, boolean approval) {
|
public Result pageData(PageForm pageForm, String taskId, String searchKeyword, Integer year, boolean approval) {
|
||||||
Sql sql = Sqls.create("""
|
Sql sql = Sqls.create("""
|
||||||
SELECT
|
SELECT
|
||||||
@@ -114,7 +115,7 @@ public class SuggestionXghController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@At
|
@At
|
||||||
@SaCheckPermission("suggestionBox.xgh")
|
@SaCheckPermission(value = {"suggestionBox.xgh", "h5.suggestionBox.xgh"}, mode = SaMode.OR)
|
||||||
@ApiOperation("查询任务")
|
@ApiOperation("查询任务")
|
||||||
public Result queryTask(@Valid @Param("taskId") String taskId) {
|
public Result queryTask(@Valid @Param("taskId") String taskId) {
|
||||||
Sql sql = Sqls.create("""
|
Sql sql = Sqls.create("""
|
||||||
|
|||||||
Binary file not shown.
|
After Width: | Height: | Size: 68 KiB |
File diff suppressed because one or more lines are too long
+13
File diff suppressed because one or more lines are too long
@@ -243,7 +243,6 @@ layout("/layouts/v4/baseLayout.html"){
|
|||||||
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
debugger
|
|
||||||
const app = JSON.parse(window.sessionStorage.getItem("zhgh_sub_app"))
|
const app = JSON.parse(window.sessionStorage.getItem("zhgh_sub_app"))
|
||||||
$("#sub-app-container #sidebar-menu .menu-header .menu-title").text(app?.name)
|
$("#sub-app-container #sidebar-menu .menu-header .menu-title").text(app?.name)
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
@@ -325,7 +324,7 @@ layout("/layouts/v4/baseLayout.html"){
|
|||||||
this.menus = res.data
|
this.menus = res.data
|
||||||
window.sessionStorage.setItem("zhgh_sub_app_menus", JSON.stringify(res.data))
|
window.sessionStorage.setItem("zhgh_sub_app_menus", JSON.stringify(res.data))
|
||||||
this.echoMenus()
|
this.echoMenus()
|
||||||
this.matchUrlToMenu()
|
// this.matchUrlToMenu()
|
||||||
} else {
|
} else {
|
||||||
this.menus = []
|
this.menus = []
|
||||||
}
|
}
|
||||||
@@ -339,7 +338,7 @@ layout("/layouts/v4/baseLayout.html"){
|
|||||||
const find = (list, parentIds = []) => {
|
const find = (list, parentIds = []) => {
|
||||||
for (const m of list) {
|
for (const m of list) {
|
||||||
if (m.href && pathname.includes(m.href.split('?')[0])) {
|
if (m.href && pathname.includes(m.href.split('?')[0])) {
|
||||||
return { menu: m, parentIds }
|
return {menu: m, parentIds}
|
||||||
}
|
}
|
||||||
if (m.children?.length) {
|
if (m.children?.length) {
|
||||||
const hit = find(m.children, [...parentIds, m.id])
|
const hit = find(m.children, [...parentIds, m.id])
|
||||||
@@ -370,7 +369,6 @@ layout("/layouts/v4/baseLayout.html"){
|
|||||||
// 设置应用信息
|
// 设置应用信息
|
||||||
setAppInfo(app) {
|
setAppInfo(app) {
|
||||||
if (app) {
|
if (app) {
|
||||||
debugger
|
|
||||||
// 储存到缓存
|
// 储存到缓存
|
||||||
window.sessionStorage.setItem("zhgh_sub_app", JSON.stringify(app))
|
window.sessionStorage.setItem("zhgh_sub_app", JSON.stringify(app))
|
||||||
// 储存到div中
|
// 储存到div中
|
||||||
@@ -388,14 +386,50 @@ layout("/layouts/v4/baseLayout.html"){
|
|||||||
console.log(this.openedMenus)
|
console.log(this.openedMenus)
|
||||||
console.log(this.activeMenuIndex)
|
console.log(this.activeMenuIndex)
|
||||||
|
|
||||||
if (!this.activeMenuIndex) {
|
if (!this.activeMenuIndex && '/platform/v4/subApp' === window.location.pathname) {
|
||||||
this.defaultSelect()
|
this.defaultSelect()
|
||||||
|
} else {
|
||||||
|
|
||||||
|
this.hrefSelect()
|
||||||
}
|
}
|
||||||
|
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
// 地址选中
|
||||||
|
hrefSelect() {
|
||||||
|
function findMenuPath(menus, targetHref) {
|
||||||
|
function search(items, path) {
|
||||||
|
for (const item of items) {
|
||||||
|
// 如果当前项匹配 href,返回路径(包含自己)
|
||||||
|
if (item.href === targetHref) {
|
||||||
|
return [...path, item];
|
||||||
|
}
|
||||||
|
// 如果有子菜单,递归查找
|
||||||
|
if (item.children?.length) {
|
||||||
|
const result = search(item.children, [...path, item]);
|
||||||
|
if (result) return result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return search(menus, []);
|
||||||
|
}
|
||||||
|
|
||||||
|
const result = findMenuPath(this.menus, window.location.pathname)
|
||||||
|
|
||||||
|
this.activeMenuIndex = result[result.length-1]
|
||||||
|
this.openedMenus = result.map(v=>v.id)
|
||||||
|
|
||||||
|
this.$nextTick(() => {
|
||||||
|
this.menuSelect(this.activeMenuIndex, this.openedMenus)
|
||||||
|
// 使用pjax跳转
|
||||||
|
commonUtil.pjaxPush(self.href)
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
// 默认选中
|
// 默认选中
|
||||||
defaultSelect() {
|
defaultSelect() {
|
||||||
// 查找第一个有href的子菜单
|
// 查找第一个有href的子菜单
|
||||||
|
|||||||
@@ -326,7 +326,7 @@ layout("/layouts/v4/baseLayout.html"){
|
|||||||
|
|
||||||
<div class="apps-wrapper" id="app">
|
<div class="apps-wrapper" id="app">
|
||||||
<div class="apps-hero">
|
<div class="apps-hero">
|
||||||
<img src="/assets/platform/img/v4/yyzx.png" alt="应用中心" />
|
<img src="/assets/platform/img/home/app.png" alt="应用中心" />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="apps-container">
|
<div class="apps-container">
|
||||||
@@ -338,7 +338,7 @@ layout("/layouts/v4/baseLayout.html"){
|
|||||||
:class="['apps-sidebar-item', activeCategory === category.id ? 'active' : '']"
|
:class="['apps-sidebar-item', activeCategory === category.id ? 'active' : '']"
|
||||||
@click="changeCategory(category.id)"
|
@click="changeCategory(category.id)"
|
||||||
>
|
>
|
||||||
<i :class="category.icon"></i>
|
<i :class="category.icon || 'fa fa-th-large'"></i>
|
||||||
{{ category.name }}
|
{{ category.name }}
|
||||||
</div>
|
</div>
|
||||||
</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/form-create.min.js"></script>
|
||||||
<script src="${base!}/assets/platform/plugins/form-create/index.umd.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!}/assets/platform/plugins/snaker/SnakerflowDesigner.umd.min.js"></script>-->
|
||||||
|
|
||||||
<script src="${base!}/components/plugins/sysDict/DictData.js"></script>
|
<script src="${base!}/components/plugins/sysDict/DictData.js"></script>
|
||||||
@@ -619,7 +623,7 @@
|
|||||||
</a>
|
</a>
|
||||||
<a href="/platform/v4/serv" data-pjax class="v4-nav-item">
|
<a href="/platform/v4/serv" data-pjax class="v4-nav-item">
|
||||||
<i class="fa fa-th-large"></i>
|
<i class="fa fa-th-large"></i>
|
||||||
服务中心
|
流程中心
|
||||||
</a>
|
</a>
|
||||||
<a href="/platform/v4/todo" data-pjax class="v4-nav-item">
|
<a href="/platform/v4/todo" data-pjax class="v4-nav-item">
|
||||||
<i class="fa fa-th-large"></i>
|
<i class="fa fa-th-large"></i>
|
||||||
|
|||||||
@@ -1414,8 +1414,7 @@ layout("/layouts/v4/baseLayout.html"){
|
|||||||
|
|
||||||
.oa-recommend-grid {
|
.oa-recommend-grid {
|
||||||
display: grid;
|
display: grid;
|
||||||
grid-template-columns: repeat(3, 1fr);
|
grid-template-columns: repeat(4, 1fr);
|
||||||
gap: 16px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.oa-recommend-item {
|
.oa-recommend-item {
|
||||||
@@ -1423,20 +1422,21 @@ layout("/layouts/v4/baseLayout.html"){
|
|||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
padding: 20px 16px;
|
|
||||||
/* background: #f8f9fa; */
|
/* background: #f8f9fa; */
|
||||||
border-radius: 8px;
|
border-radius: 8px;
|
||||||
transition: all 0.2s ease;
|
transition: all 0.2s ease;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
min-height: 120px;
|
min-height: 100px;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
min-width: 0;
|
min-width: 0;
|
||||||
|
padding: 10px 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.oa-recommend-item:hover {
|
.oa-recommend-item:hover {
|
||||||
background: #e9ecef;
|
/*background: #e9ecef;*/
|
||||||
transform: translateY(-2px);
|
/*transform: translateY(-2px);*/
|
||||||
|
transform: scale(1.05);
|
||||||
}
|
}
|
||||||
|
|
||||||
.oa-recommend-item-icon {
|
.oa-recommend-item-icon {
|
||||||
|
|||||||
@@ -0,0 +1,272 @@
|
|||||||
|
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="activity.id">
|
||||||
|
<div class="item" @click="go(activity)">
|
||||||
|
<div class="img-box">
|
||||||
|
<img :src="activity.cover || 'https://www.ncu.edu.cn/__local/8/52/2C/644986B4C9A030F7B65300178A6_8679CB08_18467.jpg'"
|
||||||
|
alt="">
|
||||||
|
</div>
|
||||||
|
<h4 class="title">
|
||||||
|
{{ activity.name}}
|
||||||
|
</h4>
|
||||||
|
<!--报名时间-->
|
||||||
|
<div class="time">
|
||||||
|
<p>
|
||||||
|
<i class="fa fa-clock-o"></i>
|
||||||
|
时间:{{ activity.startDate }}至{{ activity.endDate }}
|
||||||
|
</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;
|
||||||
|
padding: 40px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.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 20px 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;
|
||||||
|
height: 60px;
|
||||||
|
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,300 @@
|
|||||||
|
const entry = {
|
||||||
|
template: /*language=HTML*/ `
|
||||||
|
<div class="entry-wrapper">
|
||||||
|
<div class="entry-title">
|
||||||
|
常用入口
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="entry-container">
|
||||||
|
<!-- 左侧分类导航 -->
|
||||||
|
<div class="sidebar">
|
||||||
|
<div class="category" :class="{active: activeCategory === 'serv'}"
|
||||||
|
@click="setActiveCategory('serv')">
|
||||||
|
<i class="fa fa-star"></i>
|
||||||
|
<span>推荐服务</span>
|
||||||
|
</div>
|
||||||
|
<div class="category" :class="{active: activeCategory === 'app'}" @click="setActiveCategory('app')">
|
||||||
|
<i class="fa fa-fire"></i>
|
||||||
|
<span>推荐应用</span>
|
||||||
|
</div>
|
||||||
|
<div class="category" :class="{active: activeCategory === 'fav'}"
|
||||||
|
@click="setActiveCategory('fav')">
|
||||||
|
<i class="fa fa-heart"></i>
|
||||||
|
<span>收藏服务</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- 右侧服务卡片区域 -->
|
||||||
|
<div class="content">
|
||||||
|
<div class="services-grid">
|
||||||
|
<div class="service-card" v-for="(service, index) in currentServices" :key="index"
|
||||||
|
@click="openService(service)">
|
||||||
|
<div class="service-icon">
|
||||||
|
<img :src="service.picIcon">
|
||||||
|
</div>
|
||||||
|
<div class="service-info">
|
||||||
|
<h4 class="service-name">{{ service.name }}</h4>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
`,
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
activeCategory: 'serv',
|
||||||
|
hasMore: true,
|
||||||
|
entries: {
|
||||||
|
serv: [],
|
||||||
|
app: [],
|
||||||
|
fav: []
|
||||||
|
},
|
||||||
|
}
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
currentServices() {
|
||||||
|
return this.entries[this.activeCategory] || [];
|
||||||
|
}
|
||||||
|
},
|
||||||
|
created() {
|
||||||
|
this.getRecommendService()
|
||||||
|
this.getRecommendApp()
|
||||||
|
this.getFavorite()
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
setActiveCategory(category) {
|
||||||
|
this.activeCategory = category;
|
||||||
|
},
|
||||||
|
|
||||||
|
// 查询推荐服务
|
||||||
|
async getRecommendService() {
|
||||||
|
this.$axios.post('/platform/home/listRecommendService', {platform: "PC"}).then(res => {
|
||||||
|
if (res.code === 0) {
|
||||||
|
this.entries.serv = res.data
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
// 获取推荐应用
|
||||||
|
async getRecommendApp() {
|
||||||
|
this.$axios.post('/platform/home/listRecommendApp', {platform: "PC"}).then(res => {
|
||||||
|
if (res.code === 0) {
|
||||||
|
this.entries.app = res.data
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
// 获取我的收藏
|
||||||
|
async getFavorite() {
|
||||||
|
this.$axios.post('/platform/home/listFavorite', {platform: "PC"}).then(res => {
|
||||||
|
if (res.code === 0) {
|
||||||
|
this.entries.fav = res.data
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
// 点击服务
|
||||||
|
openService(service) {
|
||||||
|
if(this.activeCategory === 'serv'){
|
||||||
|
if(!service.href) this.$message.error('无效的链接地址')
|
||||||
|
window.open(service.href)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if(this.activeCategory === 'app'){
|
||||||
|
// 储存到缓存
|
||||||
|
window.sessionStorage.setItem("zhgh_sub_app", JSON.stringify(service))
|
||||||
|
// 新标签页打开
|
||||||
|
window.open("/platform/v4/subApp?appId=" + service.id, "_blank")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if(this.activeCategory === 'fav'){
|
||||||
|
if(!service.href) this.$message.error('无效的链接地址')
|
||||||
|
window.open(service.href)
|
||||||
|
return
|
||||||
|
|
||||||
|
if(!service.parentId){
|
||||||
|
// 储存到缓存
|
||||||
|
window.sessionStorage.setItem("zhgh_sub_app", JSON.stringify(app))
|
||||||
|
// 新标签页打开
|
||||||
|
window.open("/platform/v4/subApp?appId=" + app.id, "_blank")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
},
|
||||||
|
style: /*language=CSS*/ `
|
||||||
|
.entry-wrapper {
|
||||||
|
width: 100%;
|
||||||
|
background-image: url(https://www.ncu.edu.cn/images/bbg1.jpg);
|
||||||
|
background-size: cover;
|
||||||
|
background-position: center;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
}
|
||||||
|
|
||||||
|
.entry-title {
|
||||||
|
font-size: 30px;
|
||||||
|
color: #000000;
|
||||||
|
display: block;
|
||||||
|
font-weight: bold;
|
||||||
|
position: relative;
|
||||||
|
text-align: center;
|
||||||
|
padding: 40px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.entry-container {
|
||||||
|
width: 80%;
|
||||||
|
max-width: 80%;
|
||||||
|
margin: 0 auto;
|
||||||
|
padding: 20px;
|
||||||
|
display: flex;
|
||||||
|
gap: 30px;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sidebar {
|
||||||
|
width: 200px;
|
||||||
|
flex-shrink: 0;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: space-between;
|
||||||
|
}
|
||||||
|
|
||||||
|
.category {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
padding: 12px 16px;
|
||||||
|
margin-bottom: 2px;
|
||||||
|
cursor: pointer;
|
||||||
|
transition: background-color 0.2s ease;
|
||||||
|
border-left: 3px solid transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
.category:hover {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
.category.active {
|
||||||
|
color: var(--color-primary);
|
||||||
|
}
|
||||||
|
|
||||||
|
.category i {
|
||||||
|
font-size: 14px;
|
||||||
|
margin-right: 10px;
|
||||||
|
width: 16px;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.category span {
|
||||||
|
font-size: 18px;
|
||||||
|
font-weight: 700;
|
||||||
|
}
|
||||||
|
|
||||||
|
.content {
|
||||||
|
flex: 1;
|
||||||
|
height: 164px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.services-grid {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
|
||||||
|
gap: 20px;
|
||||||
|
grid-template-rows: repeat(2, 1fr);
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.service-card {
|
||||||
|
padding: 12px;
|
||||||
|
height: 72px;
|
||||||
|
cursor: pointer;
|
||||||
|
transition: background-color 0.2s ease;
|
||||||
|
border: none;
|
||||||
|
background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAYEAAAB4CAYAAAAUs05BAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAANrSURBVHgB7dzNapNZAMfh0zbNYGgosYql4wiCFEEZXLiYG3DrdryPuQbvpXMB7t24m4UOCiKuEtCKsaVNiTRaXhshLvyoSd/Yzf95oORA827PLycn5yxsdZ/crKql+6WG1uLy0d3Lm29Pes+jfm+1N9w/VwD4qXtXbmyf9P/Hu29Wng/6K6WOqnq6WACI1ZgM1pqt0Z31qztlBoMPh0sPXr+8OMsztzsbe9fanfcFgG9sdZ+tz/L+6+0LB7c6lw5meWZ7OGg+7HfPj8dWAgDBRAAgmAgABBMBgGAiABBMBACCiQBAsIV5nBiehXMCAD826zmBWpwYBsi2UFXV5vHrP6WGycnhae4QAuD0JncGneak8He8sBIACCYCAMEa//b+bx5vDJ/dRgQAtY2/EprDVdJ9KwGAYLWukgbgbI03g+tuCLtKGoDPRAAgmAgABBMBgGAiABBMBACCiQBAMBEACCYCAMFEACCYCAAEEwGAYCIAEEwEAIKJAEAwEQAIJgIAwUQAIJgIAAQTAYBgIgAQTAQAgokAQDARAAgmAgDBRAAgmAgABBMBgGAiABBMBACCiQBAMBEACCYCAMFEACCYCAAEEwGAYCIAEEwEAIKJAEAwEQAIJgIAwUQAIJgIAAQTAYBgIgAQTAQAgokAQDARAAgmAgDBRAAgmAgABBMBgGAiABBMBACCiQBAMBEACCYCAMFEACCYCAAEEwGAYCIAEEwEAIKJAEAwEQAIJgIAwUQAIJgIAAQTAYBgIgAQTAQAgokAQDARAAgmAgDBRAAgmAgABBMBgGAiABBMBACCiQBAMBEACCYCAMFEACCYCAAEEwGAYCIAEKwxGbwbDZtb3WfrpYbW4vLR3cubbwsAv8Tj3Tcrzwf9lTInVgIAwRp///Hn6Ph1u9Qw+HC49OD1y4sFgDNxvX3h4Fbn0kGpZ8dKACCYCAAEW9jqPrlZVUv3yymtNVujv9Y29qb9Ouh2Z2PvWrvzvgDwjWl+oLM/OlwefBw1fm+1682lVfXUSgAg2JefiI4/0d9Zv7oz7YPbw0HzYb97fjxuL/92dO/KjRM3lx/1e6u94f65AsBPnTSnTubfWeftr58fj60EAIKJAEAwEQAIJgIAwUQAIJgIAAQTAYBgc71Kehr/7b5aHf8VAGqZx7xtJQAQ7BOP4saDQA2PwQAAAABJRU5ErkJggg==) no-repeat;
|
||||||
|
background-size: 100% 100%;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.service-card:hover {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
.service-icon {
|
||||||
|
width: 32px;
|
||||||
|
height: 32px;
|
||||||
|
flex-shrink: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.service-icon img {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
border-radius: 4px;
|
||||||
|
object-fit: cover;
|
||||||
|
}
|
||||||
|
|
||||||
|
.service-info {
|
||||||
|
flex: 1;
|
||||||
|
min-width: 0;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.service-name {
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: 400;
|
||||||
|
color: #333;
|
||||||
|
margin: 0;
|
||||||
|
line-height: 1.4;
|
||||||
|
white-space: nowrap;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 响应式设计 */
|
||||||
|
@media (max-width: 768px) {
|
||||||
|
.entry-container {
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sidebar {
|
||||||
|
width: 100%;
|
||||||
|
display: flex;
|
||||||
|
overflow-x: auto;
|
||||||
|
gap: 0;
|
||||||
|
border-bottom: 1px solid #e8e8e8;
|
||||||
|
padding-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.category {
|
||||||
|
flex-shrink: 0;
|
||||||
|
margin-bottom: 0;
|
||||||
|
white-space: nowrap;
|
||||||
|
border-left: none;
|
||||||
|
border-bottom: 3px solid transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
.category.active {
|
||||||
|
border-left: none;
|
||||||
|
border-bottom-color: #1890ff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.services-grid {
|
||||||
|
grid-template-columns: repeat(auto-fill, minmax(160px, 1fr));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 480px) {
|
||||||
|
.services-grid {
|
||||||
|
grid-template-columns: 1fr 1fr;
|
||||||
|
}
|
||||||
|
|
||||||
|
.service-card {
|
||||||
|
padding: 12px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
`
|
||||||
|
}
|
||||||
@@ -0,0 +1,103 @@
|
|||||||
|
<!--#
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
.section-wrapper {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.act-wrapper{
|
||||||
|
width: 100%;
|
||||||
|
background-image: url(https://www.ncu.edu.cn/images/bbg1.jpg);
|
||||||
|
background-size: cover;
|
||||||
|
background-position: center center;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
</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>
|
||||||
|
|
||||||
|
<user></user>
|
||||||
|
|
||||||
|
<entry></entry>
|
||||||
|
|
||||||
|
<!-- 工会活动 -->
|
||||||
|
<div class="section-wrapper act-wrapper">
|
||||||
|
<act/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<jcdt :list="websiteNews.grassroots"></jcdt>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- 引入Swiper JS -->
|
||||||
|
<script src="https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.js"></script>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
<!--#include("act.js"){}#-->
|
||||||
|
<!--#include("jcdt.js"){}#-->
|
||||||
|
<!--#include("entry.js"){}#-->
|
||||||
|
<!--#include("user.js"){}#-->
|
||||||
|
new Vue({
|
||||||
|
el: '#v4-home-app',
|
||||||
|
data(){
|
||||||
|
return{
|
||||||
|
websiteNews:{
|
||||||
|
grassroots:[],
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
components: {
|
||||||
|
'act': act,
|
||||||
|
'jcdt': jcdt,
|
||||||
|
'entry': entry,
|
||||||
|
'user': user,
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
this.getWebSiteNews()
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
getWebSiteNews(){
|
||||||
|
this.$axios.post('/platform/home/getNews').then(res => {
|
||||||
|
if (res.code === 0) {
|
||||||
|
this.websiteNews = res.data
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
<!--#
|
||||||
|
}
|
||||||
|
#-->
|
||||||
@@ -0,0 +1,137 @@
|
|||||||
|
const jcdt = {
|
||||||
|
template: /*language=HTML*/ `
|
||||||
|
<div class="jcdt-wrapper">
|
||||||
|
<div class="jcdt-container">
|
||||||
|
<div class="jcdt-title">
|
||||||
|
基层动态
|
||||||
|
</div>
|
||||||
|
<div class="jcdt-content">
|
||||||
|
<div class="jcdt-list">
|
||||||
|
<div class="jcdt-item" v-for="item in list" :key="item.title">
|
||||||
|
<div class="date">{{item.date}}</div>
|
||||||
|
<div class="title">{{item.title}}</div>
|
||||||
|
<div class="image">
|
||||||
|
<img :src="item.image" alt="">
|
||||||
|
</div>
|
||||||
|
<div class="summary">{{item.summary}}</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
`,
|
||||||
|
data() {
|
||||||
|
return {}
|
||||||
|
},
|
||||||
|
props: {
|
||||||
|
list: {
|
||||||
|
type: Array,
|
||||||
|
default: []
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {},
|
||||||
|
style: /*language=CSS*/ `
|
||||||
|
.jcdt-wrapper {
|
||||||
|
width: 100%;
|
||||||
|
background-image: url(https://cdgh.ncu.edu.cn/images/index_bg2.png);
|
||||||
|
background-size: cover;
|
||||||
|
background-position: center;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
}
|
||||||
|
|
||||||
|
.jcdt-container {
|
||||||
|
width: 80%;
|
||||||
|
max-width: 80%;
|
||||||
|
margin: 0 auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.jcdt-title{
|
||||||
|
font-size: 30px;
|
||||||
|
color: #000000;
|
||||||
|
display: block;
|
||||||
|
font-weight: bold;
|
||||||
|
position: relative;
|
||||||
|
text-align: center;
|
||||||
|
padding: 40px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.jcdt-list {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: repeat(4, 1fr);
|
||||||
|
gap: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.jcdt-item {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
padding: 16px;
|
||||||
|
border: none;
|
||||||
|
border-bottom: 3px solid transparent;
|
||||||
|
transition: all 0.3s ease;
|
||||||
|
cursor: pointer;
|
||||||
|
height: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.jcdt-item:hover{
|
||||||
|
background: #ffffff;
|
||||||
|
border-bottom-color: var(--color-primary);
|
||||||
|
transform: translateY(-4px);
|
||||||
|
box-shadow: 0 8px 20px rgba(0, 0, 0, 0.15);
|
||||||
|
}
|
||||||
|
|
||||||
|
.jcdt-item .date {
|
||||||
|
font-size: 20px;
|
||||||
|
font-weight: bold;
|
||||||
|
white-space: nowrap;
|
||||||
|
text-align: left;
|
||||||
|
margin-bottom: 8px;
|
||||||
|
transition: opacity 0.3s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.jcdt-item .title {
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: 600;
|
||||||
|
margin-bottom: 12px;
|
||||||
|
line-height: 1.4;
|
||||||
|
display: -webkit-box;
|
||||||
|
-webkit-line-clamp: 2;
|
||||||
|
-webkit-box-orient: vertical;
|
||||||
|
overflow: hidden;
|
||||||
|
height: 45px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.jcdt-item .image {
|
||||||
|
width: 100%;
|
||||||
|
height: 180px;
|
||||||
|
margin: 0 0 16px 0;
|
||||||
|
border-radius: 8px;
|
||||||
|
overflow: hidden;
|
||||||
|
background: #f5f5f5;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
|
||||||
|
transition: transform 0.3s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.jcdt-item .image img {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
object-fit: cover;
|
||||||
|
transition: transform 0.3s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.jcdt-item .summary {
|
||||||
|
font-size: 14px;
|
||||||
|
color: #666;
|
||||||
|
line-height: 1.6;
|
||||||
|
display: -webkit-box;
|
||||||
|
-webkit-line-clamp: 3;
|
||||||
|
-webkit-box-orient: vertical;
|
||||||
|
overflow: hidden;
|
||||||
|
text-align: justify;
|
||||||
|
margin-bottom: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
`
|
||||||
|
}
|
||||||
@@ -0,0 +1,249 @@
|
|||||||
|
const user = {
|
||||||
|
template: /*language=HTML*/ `
|
||||||
|
<div class="user-wrapper">
|
||||||
|
<div class="user-container">
|
||||||
|
<div class="user-info-section">
|
||||||
|
<div class="user-details">
|
||||||
|
<div class="user-name">${@auth.getPrincipalProperty('username')}</div>
|
||||||
|
<div class="user-meta">
|
||||||
|
<div class="meta-item">
|
||||||
|
<span class="meta-label">工号:</span>
|
||||||
|
<span class="meta-value">${@auth.getPrincipalProperty('loginname')}</span>
|
||||||
|
</div>
|
||||||
|
<div class="meta-item">
|
||||||
|
<span class="meta-label">单位:</span>
|
||||||
|
<span class="meta-value">
|
||||||
|
<!--#if(!isEmpty(@auth.getPrincipalProperty('unit'))){#-->
|
||||||
|
${@auth.getPrincipalProperty('unit').getName()}
|
||||||
|
<!--#}#-->
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<div class="meta-item">
|
||||||
|
<span class="meta-label">分工会:</span>
|
||||||
|
<span class="meta-value">
|
||||||
|
<!--#if(!isEmpty(@auth.getPrincipalProperty('union'))){#-->
|
||||||
|
${@auth.getPrincipalProperty('union').getName()}
|
||||||
|
<!--#}#-->
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="stats-section">
|
||||||
|
<div class="stats-grid">
|
||||||
|
<div class="stat-item pending" @click="handleStatClick('todo')">
|
||||||
|
<div class="stat-icon">
|
||||||
|
<i class="fa fa-clock-o"></i>
|
||||||
|
</div>
|
||||||
|
<div class="stat-content">
|
||||||
|
<div class="stat-label">待办</div>
|
||||||
|
<div class="stat-number">{{ stats.todoCount }}</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="stat-item completed" @click="handleStatClick('done')">
|
||||||
|
<div class="stat-icon">
|
||||||
|
<i class="fa fa-check-circle"></i>
|
||||||
|
</div>
|
||||||
|
<div class="stat-content">
|
||||||
|
<div class="stat-label">已办</div>
|
||||||
|
<div class="stat-number">{{ stats.doneCount }}</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="stat-item messages" @click="handleStatClick('notification')">
|
||||||
|
<div class="stat-icon">
|
||||||
|
<i class="fa fa-bell"></i>
|
||||||
|
</div>
|
||||||
|
<div class="stat-content">
|
||||||
|
<div class="stat-label">消息</div>
|
||||||
|
<div class="stat-number">{{ stats.notifications }}</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="stat-item reminders" @click="handleStatClick('started')">
|
||||||
|
<div class="stat-icon">
|
||||||
|
<i class="fa fa-file-text"></i>
|
||||||
|
</div>
|
||||||
|
<div class="stat-content">
|
||||||
|
<div class="stat-label">发起</div>
|
||||||
|
<div class="stat-number">{{ stats.startedCount }}</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
`,
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
stats: {
|
||||||
|
todoCount: 0,
|
||||||
|
doneCount: 0,
|
||||||
|
notifications: 0,
|
||||||
|
startedCount: 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
handleStatClick(type) {
|
||||||
|
if (['todo', 'done', 'application'].includes(type)) {
|
||||||
|
window.open('/flow/todoCenter?status=' + type)
|
||||||
|
} else if (type === 'notification') {
|
||||||
|
window.open('/platform/v4/msg')
|
||||||
|
}
|
||||||
|
},
|
||||||
|
loadStats() {
|
||||||
|
this.$axios.post("/flow/todoCenter/statistics").then(res => {
|
||||||
|
if (res.code === 0) {
|
||||||
|
this.stats = res.data;
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
this.loadStats();
|
||||||
|
},
|
||||||
|
style: /*language=CSS*/ `
|
||||||
|
.user-wrapper {
|
||||||
|
width: 100%;
|
||||||
|
background-image: url(https://www.ncu.edu.cn/images/bbg1.jpg);
|
||||||
|
background-size: cover;
|
||||||
|
background-position: center;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
}
|
||||||
|
|
||||||
|
.user-container {
|
||||||
|
width: 80%;
|
||||||
|
max-width: 80%;
|
||||||
|
margin: 0 auto;
|
||||||
|
padding: 20px;
|
||||||
|
display: flex;
|
||||||
|
gap: 30px;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.user-info-section {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
min-width: 0;
|
||||||
|
width: 390px;
|
||||||
|
background-image: url(https://cdgh.ncu.edu.cn/images/index_bg2.png);
|
||||||
|
background-size: cover;
|
||||||
|
background-position: center;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
padding: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.user-details {
|
||||||
|
flex: 1;
|
||||||
|
min-width: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.user-name {
|
||||||
|
font-size: 20px;
|
||||||
|
font-weight: 600;
|
||||||
|
color: #1a1a1a;
|
||||||
|
margin-bottom: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.user-meta {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 6px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.meta-item {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.meta-label {
|
||||||
|
color: #666;
|
||||||
|
min-width: 60px;
|
||||||
|
flex-shrink: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.meta-value {
|
||||||
|
color: #333;
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 右侧统计区域 */
|
||||||
|
.stats-section {
|
||||||
|
flex: 1;
|
||||||
|
min-width: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stats-grid {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: repeat(4, 1fr);
|
||||||
|
gap: 32px;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stat-item {
|
||||||
|
display: flex;
|
||||||
|
align-items: flex-start;
|
||||||
|
gap: 12px;
|
||||||
|
cursor: pointer;
|
||||||
|
transition: all 0.3s ease;
|
||||||
|
padding: 16px;
|
||||||
|
position: relative;
|
||||||
|
background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAYEAAAB4CAYAAAAUs05BAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAANrSURBVHgB7dzNapNZAMfh0zbNYGgosYql4wiCFEEZXLiYG3DrdryPuQbvpXMB7t24m4UOCiKuEtCKsaVNiTRaXhshLvyoSd/Yzf95oORA827PLycn5yxsdZ/crKql+6WG1uLy0d3Lm29Pes+jfm+1N9w/VwD4qXtXbmyf9P/Hu29Wng/6K6WOqnq6WACI1ZgM1pqt0Z31qztlBoMPh0sPXr+8OMsztzsbe9fanfcFgG9sdZ+tz/L+6+0LB7c6lw5meWZ7OGg+7HfPj8dWAgDBRAAgmAgABBMBgGAiABBMBACCiQBAsIV5nBiehXMCAD826zmBWpwYBsi2UFXV5vHrP6WGycnhae4QAuD0JncGneak8He8sBIACCYCAMEa//b+bx5vDJ/dRgQAtY2/EprDVdJ9KwGAYLWukgbgbI03g+tuCLtKGoDPRAAgmAgABBMBgGAiABBMBACCiQBAMBEACCYCAMFEACCYCAAEEwGAYCIAEEwEAIKJAEAwEQAIJgIAwUQAIJgIAAQTAYBgIgAQTAQAgokAQDARAAgmAgDBRAAgmAgABBMBgGAiABBMBACCiQBAMBEACCYCAMFEACCYCAAEEwGAYCIAEEwEAIKJAEAwEQAIJgIAwUQAIJgIAAQTAYBgIgAQTAQAgokAQDARAAgmAgDBRAAgmAgABBMBgGAiABBMBACCiQBAMBEACCYCAMFEACCYCAAEEwGAYCIAEEwEAIKJAEAwEQAIJgIAwUQAIJgIAAQTAYBgIgAQTAQAgokAQDARAAgmAgDBRAAgmAgABBMBgGAiABBMBACCiQBAMBEACCYCAMFEACCYCAAEEwGAYCIAEKwxGbwbDZtb3WfrpYbW4vLR3cubbwsAv8Tj3Tcrzwf9lTInVgIAwRp///Hn6Ph1u9Qw+HC49OD1y4sFgDNxvX3h4Fbn0kGpZ8dKACCYCAAEW9jqPrlZVUv3yymtNVujv9Y29qb9Ouh2Z2PvWrvzvgDwjWl+oLM/OlwefBw1fm+1682lVfXUSgAg2JefiI4/0d9Zv7oz7YPbw0HzYb97fjxuL/92dO/KjRM3lx/1e6u94f65AsBPnTSnTubfWeftr58fj60EAIKJAEAwEQAIJgIAwUQAIJgIAAQTAYBgc71Kehr/7b5aHf8VAGqZx7xtJQAQ7BOP4saDQA2PwQAAAABJRU5ErkJggg==) no-repeat;
|
||||||
|
background-size: 100% 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stat-item:hover {
|
||||||
|
transform: translateY(-2px);
|
||||||
|
}
|
||||||
|
|
||||||
|
.stat-icon {
|
||||||
|
position: absolute;
|
||||||
|
top: 12px;
|
||||||
|
right: 12px;
|
||||||
|
width: 32px;
|
||||||
|
height: 32px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
border-radius: 6px;
|
||||||
|
font-size: 16px;
|
||||||
|
color: #999;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stat-icon i {
|
||||||
|
font-size: 32px;
|
||||||
|
color: var(--color-primary-3);
|
||||||
|
}
|
||||||
|
|
||||||
|
.stat-content {
|
||||||
|
flex: 1;
|
||||||
|
min-width: 0;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stat-label {
|
||||||
|
font-size: 16px;
|
||||||
|
color: #333;
|
||||||
|
font-weight: 700;
|
||||||
|
line-height: 1;
|
||||||
|
text-align: center;
|
||||||
|
padding: 15px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stat-number {
|
||||||
|
font-size: 32px;
|
||||||
|
font-weight: 700;
|
||||||
|
color: var(--color-primary);
|
||||||
|
line-height: 1;
|
||||||
|
flex: 1;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
`
|
||||||
|
}
|
||||||
@@ -334,7 +334,7 @@ layout("/layouts/v4/baseLayout.html"){
|
|||||||
:class="['apps-sidebar-item', activeCategory === category.id ? 'active' : '']"
|
:class="['apps-sidebar-item', activeCategory === category.id ? 'active' : '']"
|
||||||
@click="changeCategory(category.id)"
|
@click="changeCategory(category.id)"
|
||||||
>
|
>
|
||||||
<i :class="category.icon"></i>
|
<i :class="category.icon || 'fa fa-th-large'"></i>
|
||||||
{{ category.name }}
|
{{ category.name }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -350,22 +350,22 @@ layout("/layouts/v4/baseLayout.html"){
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- 字母过滤 -->
|
<!-- 字母过滤 -->
|
||||||
<div class="apps-filter">
|
<!-- <div class="apps-filter">-->
|
||||||
<div class="apps-filter-title">首字母:</div>
|
<!-- <div class="apps-filter-title">首字母:</div>-->
|
||||||
<div class="apps-filter-tags alphabet-filter">
|
<!-- <div class="apps-filter-tags alphabet-filter">-->
|
||||||
<div :class="['filter-tag', activeAlphabet === '' ? 'active' : '']" @click="changeAlphabet('')">
|
<!-- <div :class="['filter-tag', activeAlphabet === '' ? 'active' : '']" @click="changeAlphabet('')">-->
|
||||||
全部
|
<!-- 全部-->
|
||||||
</div>
|
<!-- </div>-->
|
||||||
<div
|
<!-- <div-->
|
||||||
v-for="letter in alphabets"
|
<!-- v-for="letter in alphabets"-->
|
||||||
:key="letter"
|
<!-- :key="letter"-->
|
||||||
:class="['alphabet-item', activeAlphabet === letter ? 'active' : '']"
|
<!-- :class="['alphabet-item', activeAlphabet === letter ? 'active' : '']"-->
|
||||||
@click="changeAlphabet(letter)"
|
<!-- @click="changeAlphabet(letter)"-->
|
||||||
>
|
<!-- >-->
|
||||||
{{ letter }}
|
<!-- {{ letter }}-->
|
||||||
</div>
|
<!-- </div>-->
|
||||||
</div>
|
<!-- </div>-->
|
||||||
</div>
|
<!-- </div>-->
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- 应用网格 -->
|
<!-- 应用网格 -->
|
||||||
|
|||||||
@@ -289,12 +289,8 @@ layout("/layouts/v4/baseLayout.html"){
|
|||||||
<span class="task-title">{{scope.row.variable?.instanceName}}</span>
|
<span class="task-title">{{scope.row.variable?.instanceName}}</span>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column prop="taskName" label="任务节点" min-width="150"
|
<el-table-column prop="taskName" label="任务节点" min-width="150" show-overflow-tooltip></el-table-column>
|
||||||
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="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="initiatorName" label="申请人" min-width="120">
|
<el-table-column prop="initiatorName" label="申请人" min-width="120">
|
||||||
<template slot-scope="{row}">{{row.variable.initiatorName}}</template>
|
<template slot-scope="{row}">{{row.variable.initiatorName}}</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
|
|||||||
Reference in New Issue
Block a user