Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
R
risk-monitor
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
蔡建
risk-monitor
Commits
fc3e7871
提交
fc3e7871
authored
3月 10, 2026
作者:
coderBryanFu
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
修改工作日程表模块
上级
d0c0200e
隐藏空白字符变更
内嵌
并排
正在显示
1 个修改的文件
包含
155 行增加
和
42 行删除
+155
-42
CalendarHeatmap.vue
...s/components/allGovernment/components/CalendarHeatmap.vue
+155
-42
没有找到文件。
src/views/ZMOverView/components/fourSuppress/components/allGovernment/components/CalendarHeatmap.vue
浏览文件 @
fc3e7871
...
@@ -37,22 +37,55 @@
...
@@ -37,22 +37,55 @@
<
/div
>
<
/div
>
<
/div
>
<
/div
>
<
/div> --
>
<
/div> --
>
<
el
-
dialog
v
-
model
=
"tooltipVisible"
width
=
"
690
px"
>
<
el
-
dialog
v
-
model
=
"tooltipVisible"
width
=
"
1298
px"
>
<
div
class
=
"tooltip-header flex-display"
>
<
div
class
=
"tooltip-header flex-display"
>
<
div
class
=
"tooltip-header-left text-title-3-bold"
>
{{
currentDate
}}
<
/div
>
<
div
class
=
"tooltip-header-left text-title-3-bold"
>
{{
currentDate
}}
<
/div
>
<
div
class
=
"tooltip-header-right text-title-3-show"
>
{{
`
${currentOrgNum
}
个部门/${currentDetailList.length
}
项举措
`
}}
<
div
class
=
"tooltip-header-right text-title-3-show"
>
{{
`
涉及${currentDetailList.length
}
项行政令
`
}}
<
/div
>
<
/div
>
<
/div
>
<
/div
>
<
div
class
=
"tooltip-main"
>
<
div
class
=
"tooltip-main"
>
<
div
class
=
"tooltip-main-item"
v
-
for
=
"item, index in currentDetailList"
:
key
=
"index"
>
<
div
class
=
"tooltip-main-item"
v
-
for
=
"item, index in currentDetailList"
:
key
=
"index"
>
<
div
class
=
"item-footer color-bg-active flex-display"
@
click
=
"handleToDetail(item)"
>
<
div
class
=
"item-main-header flex-display"
@
click
=
"handleToDetail(item)"
>
<
div
class
=
"footer-text text-tip-2 main-color"
>
{{
item
.
name
}}
<
/div
>
<
div
class
=
"item-main-header-left"
>
<
div
class
=
"footer-arrow"
>
<
div
class
=
"item-main-header-type color-bg-active text-tip-1 main-color"
>
{{
'政令'
}}
<
/div
>
<
img
src
=
"./right-arrow.svg"
alt
=
""
>
<
div
class
=
"text-title-3-bold main-color"
>
{{
item
.
administrativeOrderInfoTitle
}}
<
/div
>
<
/div
>
<
div
class
=
"item-main-header-right text-tip-1-bold main-color"
>
{{
`涉及${item.orgNum
}
个部门`
}}
<
/div
>
<
/div
>
<
/div
>
<
/div
>
<
div
class
=
"item-list"
v
-
for
=
"val, idx in item.list"
:
key
=
"idx"
>
<
div
class
=
"item-list"
>
<
div
class
=
"item-header flex-display"
>
<
div
class
=
"item-list-item flex-display"
v
-
for
=
"val, idx in item.innerList"
:
key
=
"idx"
>
<
div
class
=
"item-list-left flex-display"
>
<
div
class
=
"id text-bold main-color color-bg-active"
>
{{
idx
+
1
}}
<
/div
>
<
div
class
=
"info"
>
<
div
class
=
"content text-regular text-primary-80-clor"
>
{{
val
.
name
}}
<
/div
>
<
div
class
=
"area-box flex-display"
>
<
AreaTag
v
-
for
=
"tag, tagIdx in val.techDomainList"
:
key
=
"tagIdx"
:
tagName
=
"tag"
><
/AreaTag
>
<
/div
>
<
/div
>
<
/div
>
<
div
class
=
"item-list-right "
>
<
div
class
=
"right-list-item flex-display"
v
-
for
=
"org, orgIdx in val.orgList"
:
key
=
"orgIdx"
>
<
div
class
=
"org-box flex-display"
>
<
div
class
=
"logo"
>
<
img
style
=
"width: 100%; height: 100%;"
:
src
=
"org.orgLogoUrl"
alt
=
""
>
<
/div
>
<
div
class
=
"org-name text-tip-1 text-primary-80-clor"
>
{{
org
.
orgName
}}
<
/div
>
<
/div
>
<
div
class
=
"status"
>
<
div
class
=
"status-on text-tip-2"
v
-
if
=
"org.stauts === 2"
>
{{
'已落实'
}}
<
/div
>
<
div
class
=
"status-off text-tip-2"
v
-
else
>
{{
'未落实'
}}
<
/div
>
<
/div
>
<
/div
>
<
/div
>
<
/div
>
<!--
<
div
class
=
"item-header flex-display"
>
<
div
class
=
"item-header-left flex-display"
>
<
div
class
=
"item-header-left flex-display"
>
<
div
class
=
"logo"
>
<
div
class
=
"logo"
>
<
img
style
=
"width:100%; height: 100%"
:
src
=
"val.orgLogoUrl"
alt
=
"logo"
>
<
img
style
=
"width:100%; height: 100%"
:
src
=
"val.orgLogoUrl"
alt
=
"logo"
>
...
@@ -67,7 +100,7 @@
...
@@ -67,7 +100,7 @@
<
AreaTag
v
-
for
=
"tag, idxx in val.techDomainList.slice(0, 3)"
:
key
=
"idxx"
:
tagName
=
"tag"
><
/AreaTag
>
<
AreaTag
v
-
for
=
"tag, idxx in val.techDomainList.slice(0, 3)"
:
key
=
"idxx"
:
tagName
=
"tag"
><
/AreaTag
>
<
/div
>
<
/div
>
<
/div
>
<
/div
>
<
div
class
=
"item-content text-compact"
>
{{
val
.
name
}}
<
/div
>
<
div
class
=
"item-content text-compact"
>
{{
val
.
name
}}
<
/div>
--
>
<
/div
>
<
/div
>
...
@@ -430,6 +463,8 @@ function getOption() {
...
@@ -430,6 +463,8 @@ function getOption() {
// 点击政令,跳转详情
// 点击政令,跳转详情
const handleToDetail = (item) => {
const handleToDetail = (item) => {
console.log('item', item);
const path = "/decreeLayout/overview/introduction";
const path = "/decreeLayout/overview/introduction";
const query = { id: item.orderId
}
;
const query = { id: item.orderId
}
;
const route = router.resolve({ path, query
}
);
const route = router.resolve({ path, query
}
);
...
@@ -452,22 +487,47 @@ onMounted(() => {
...
@@ -452,22 +487,47 @@ onMounted(() => {
if (list.length > 0) {
if (list.length > 0) {
currentDate.value = date
currentDate.value = date
// 按 administrativeOrderInfoTitle 分类
// 按 administrativeOrderInfoTitle 分类
// const grouped = [];
// const map = new Map();
// 按 sanctionId 分类,sanctionId 相同合为一个元素,形式为 { name: 'xxx', info: {
}
}
const grouped = [];
const grouped = [];
const
m
ap = new Map();
const
titleM
ap = new Map();
list.forEach(item => {
list.forEach(item => {
const key = item.administrativeOrderInfoTitle;
const title = item.administrativeOrderInfoTitle || '';
if (!map.has(key)) {
if (!titleMap.has(title)) {
map.set(key, { name: key, list: []
}
);
titleMap.set(title, { administrativeOrderInfoTitle: title, innerList: [], orgNum: 0, orderId: item.orderId
}
);
grouped.push(map.get(key));
grouped.push(titleMap.get(title));
}
// 统计 orgNum
const group = titleMap.get(title);
// 用 Set 统计不同 orgName
if (!group._orgSet) group._orgSet = new Set();
group._orgSet.add(item.orgName);
group.orgNum = group._orgSet.size;
// 按 sanctionId 分类
const innerList = titleMap.get(title).innerList;
let sanctionGroup = innerList.find(g => g.sanctionId === item.sanctionId);
if (!sanctionGroup) {
sanctionGroup = {
sanctionId: item.sanctionId,
name: item.name,
techDomainList: item.techDomainList || [],
orgList: [],
info: []
}
;
innerList.push(sanctionGroup);
}
}
map.get(key).list.push(item);
sanctionGroup.orgList.push({
orgName: item.orgName,
orgLogoUrl: item.orgLogoUrl,
status: item.status
}
);
sanctionGroup.info.push({ ...item
}
);
}
);
}
);
currentDetailList.value = grouped;
currentDetailList.value = grouped;
console.log('currentDetailList', currentDetailList.value);
console.log('currentDetailList', currentDetailList.value);
// 统计不同 orgName 的个数
const orgNames = new Set(list.map(item => item.orgName));
currentOrgNum.value = orgNames.size
tooltipVisible.value = true
tooltipVisible.value = true
}
else {
}
else {
tooltipVisible.value = false
tooltipVisible.value = false
...
@@ -503,27 +563,39 @@ onBeforeUnmount(() => {
...
@@ -503,27 +563,39 @@ onBeforeUnmount(() => {
/* pointer-events: none; */
/* pointer-events: none; */
/* 让鼠标事件穿透到图表,避免闪烁 */
/* 让鼠标事件穿透到图表,避免闪烁 */
z-index: 1000;
z-index: 1000;
width:
670
px;
width:
1278
px;
background: rgb(255, 255, 255);
background: rgb(255, 255, 255);
}
}
.tooltip-header {
.tooltip-header {
height: 5
0
px;
height: 5
6
px;
box-sizing: border-box;
box-sizing: border-box;
padding: 1
3
px 24px;
padding: 1
2
px 24px;
justify-content: space-between;
justify-content: space-between;
border-bottom: 1px solid rgb(234, 236, 238);
border-bottom: 1px solid rgb(234, 236, 238);
}
}
.tooltip-main {
.tooltip-header-left{
padding: 0 24px 10px;
margin-top: 10px;
}
.tooltip-header-right{
height: 34px;
background: rgba(206, 79, 81, 0.1);
border-radius: 17px;
color: rgba(206, 79, 81);
padding: 5px 12px;
}
}
/* .tooltip-main {
padding: 0 24px 10px;
}
*/
.tooltip-main-item {
.tooltip-main-item {
padding: 10px 0;
padding: 10px 0;
width:
622
px;
width:
1254
px;
/* height: 144px; */
/* height: 144px; */
border-bottom: 1px solid rgb(234, 236, 238);
border-bottom: 1px solid rgb(234, 236, 238);
}
}
...
@@ -540,6 +612,50 @@ onBeforeUnmount(() => {
...
@@ -540,6 +612,50 @@ onBeforeUnmount(() => {
}
}
.item-list-item{
padding: 12px 12px 16px 20px;
border-bottom: 1px solid rgb(234, 236, 238);
}
.item-list-left{
width: 848px;
}
.area-box {
margin-top: 8px;
gap: 8px;
}
.id{
width: 30px;
height: 30px;
border-radius: 15px;
text-align: center;
line-height: 30px;
}
.info{
width: 800px;
}
.item-list-right{
width: 356px;
justify-content: space-between;
}
.right-list-item {
justify-content: space-between;
margin-bottom: 8px;
}
.org-box {
gap: 8px;
}
.org-name{
width: 234px;
}
.logo {
.logo {
width: 24px;
width: 24px;
height: 24px;
height: 24px;
...
@@ -559,36 +675,33 @@ onBeforeUnmount(() => {
...
@@ -559,36 +675,33 @@ onBeforeUnmount(() => {
background: rgba(206, 79, 81, 0.1);
background: rgba(206, 79, 81, 0.1);
}
}
.item-content {
height: 48px;
display: -webkit-box;
-webkit-line-clamp: 2;
/* 限制显示2行 */
-webkit-box-orient: vertical;
overflow: hidden;
text-overflow: ellipsis;
word-break: break-word;
/* 可选:防止单词被截断 */
}
.item-header-right {
.item-header-right {
gap: 8px;
gap: 8px;
}
}
.item-
foot
er {
.item-
main-head
er {
width:
622
px;
width:
1254
px;
height:
40
px;
height:
68
px;
padding: 0 8px;
padding: 0 8px;
margin-top: 4px;
border-radius: 4px;
border-radius: 4px;
justify-content: space-between;
justify-content: space-between;
align-items: center;
align-items: center;
cursor: pointer;
cursor: pointer;
border-bottom: 1px solid rgb(234, 236, 238);
}
.item-main-header-left {
display: flex;
gap: 8px;
align-items: center;
}
}
.footer-arrow {
.item-main-header-type {
width: 20px;
height: 28px;
height: 20px;
border-radius: 4px;
padding: 0 8px;
line-height: 28px;
text-align: center;
}
}
</style>
</style>
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论