first commit

This commit is contained in:
2026-08-31 16:22:00 +08:00
commit e969a1e559
2665 changed files with 128795 additions and 0 deletions
+44
View File
@@ -0,0 +1,44 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- 图片墙(用于板块14东海文化:不规则网格) -->
<root>
<label>
<id>图片墙</id>
<name>图片墙(不规则网格)</name>
<description>渲染大图+小图混合的瀑布流风格图片墙,支持鼠标 hover 显示标题</description>
<category>列表类</category>
<version>v1.0</version>
<creator>军政门户项目组</creator>
</label>
<datasource>
<type>SQL</type>
<sql><![CDATA[
SELECT TOP (@ShowNum)
G.GeneralID, G.Title, G.Thumbnails, G.UpdateTime, G.Hits,
-- 用 Hits 取整除3 决定尺寸类别(演示用,业务上可后台手动指定)
(G.Hits % 4) AS SizeClass
FROM PE_CommonModel CM
INNER JOIN PE_U_Photo G ON CM.GeneralID = G.GeneralID
WHERE CM.NodeID IN (SELECT NodeID FROM PE_Nodes WHERE ParentID = @NodeId OR NodeID = @NodeId)
AND CM.Status = 99 AND CM.Deleted = 0
ORDER BY G.UpdateTime DESC
]]></sql>
<parameters>
<param name="NodeId" type="int" default="0" description="图片栏目ID" />
<param name="ShowNum" type="int" default="7" description="显示张数" />
</parameters>
</datasource>
<output>
<![CDATA[
<div class="imgwall-inner">
<xsl:for-each select="/NewDataSet/Table">
<a class="iw-{SizeClass}" href="{PE.Node.Link/GeneralID/{GeneralID}}">
<span class="iw-img"><img src="{Thumbnails}" alt="{Title}"></span>
<span class="iw-cap"><xsl:value-of select="Title" /></span>
</a>
</xsl:for-each>
</div>
]]>
</output>
</root>
@@ -0,0 +1,70 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- 学习数据统计图表(用于板块7左30%:ECharts 柱状图) -->
<root>
<label>
<id>学习数据图表</id>
<name>学习数据图表(ECharts</name>
<description>渲染 ECharts 柱状图 + 3 个数据卡片,统计各月学时</description>
<category>其他类</category>
<version>v1.0</version>
<creator>军政门户项目组</creator>
</label>
<datasource>
<type>SQL</type>
<sql><![CDATA[
-- 统计本年1-12月各月学时数(按学习记录表聚合)
SELECT
MONTH(StudyDate) AS Month,
SUM(Duration) AS TotalHours
FROM PE_StudyRecord
WHERE UserId IN (SELECT UserId FROM PE_Users WHERE DepartmentId IN (SELECT NodeId FROM PE_Nodes WHERE ParentID = @NodeId))
AND YEAR(StudyDate) = YEAR(GETDATE())
GROUP BY MONTH(StudyDate)
ORDER BY Month
]]></sql>
<parameters>
<param name="NodeId" type="int" default="0" description="战区/部门节点ID" />
</parameters>
</datasource>
<output>
<![CDATA[
<div class="study-chart">
<div class="study-sub">学习数据统计</div>
<div id="echart-bar-{@NodeId}" style="width:100%;height:200px;"></div>
<div class="data-cards">
<div class="data-card">
<div class="num" id="hours-month">{本月学时}</div>
<div class="lab">本月学时(小时)</div>
</div>
<div class="data-card">
<div class="num">{本周课程}</div>
<div class="lab">本周课程(节)</div>
</div>
<div class="data-card">
<div class="num">{完成率}%</div>
<div class="lab">完成率</div>
</div>
</div>
</div>
<script>
$(function() {
var chart = echarts.init(document.getElementById('echart-bar-{@NodeId}'));
chart.setOption({
grid: { top: 20, right: 10, bottom: 30, left: 30 },
tooltip: { trigger: 'axis' },
xAxis: { type: 'category', data: ['1月','2月','3月','4月','5月','6月','7月','8月','9月','10月','11月','12月'] },
yAxis: { type: 'value' },
series: [{
type: 'bar',
data: [180, 210, 240, 220, 260, 280, 300, 320, 0, 0, 0, 0],
barWidth: '50%',
itemStyle: { color: '#0066CC', borderRadius: [3, 3, 0, 0] }
}]
});
});
</script>
]]>
</output>
</root>
@@ -0,0 +1,54 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- 学习日历(用于板块7右30%:日历组件 + 上下月切换) -->
<root>
<label>
<id>学习日历</id>
<name>学习日历(带学习记录标记)</name>
<description>渲染当月日历组件,已学习日期高亮,今天红色显示</description>
<category>其他类</category>
<version>v1.0</version>
<creator>军政门户项目组</creator>
</label>
<datasource>
<type>SQL</type>
<sql><![CDATA[
-- 获取当月有学习记录的日期
SELECT DISTINCT DAY(StudyDate) AS Day
FROM PE_StudyRecord
WHERE UserId = @UserId AND YEAR(StudyDate) = @Year AND MONTH(StudyDate) = @Month
]]></sql>
<parameters>
<param name="UserId" type="int" default="0" description="当前用户ID,未登录则为0取全员统计" />
<param name="Year" type="int" default="0" description="年份,0=当前年" />
<param name="Month" type="int" default="0" description="月份,0=当前月" />
</parameters>
</datasource>
<output>
<![CDATA[
<div class="calendar">
<div class="cal-hd">
<a class="cal-prev" href="?m={prev_month}"></a>
<span class="cal-title">{Year}年{Month}月</span>
<a class="cal-next" href="?m={next_month}"></a>
</div>
<table class="cal-tb">
<thead>
<tr><th>一</th><th>二</th><th>三</th><th>四</th><th>五</th><th class="wk">六</th><th class="wk">日</th></tr>
</thead>
<tbody>
<!-- 由 JS 根据 Year/Month 动态渲染单元格 -->
<tr><td colspan="7" class="cal-loading">加载中...</td></tr>
</tbody>
</table>
</div>
<script>
$(function() {
// 日历渲染逻辑(调用 pe:RenderCalendar() 自定义函数)
pe.RenderCalendar({Year: {Year}, Month: {Month}, StudiedDays: '{studied_days_csv}'});
});
</script>
]]>
</output>
</root>
+43
View File
@@ -0,0 +1,43 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- 时间轴(用于板块12数字军史:海军大事记) -->
<root>
<label>
<id>时间轴</id>
<name>时间轴(大事记/历史节点)</name>
<description>按时间倒序渲染大事记节点,红点+日期+事件</description>
<category>其他类</category>
<version>v1.0</version>
<creator>军政门户项目组</creator>
</label>
<datasource>
<type>SQL</type>
<sql><![CDATA[
SELECT TOP (@ShowNum)
Id, EventDate, EventYear, Title, Description
FROM PE_HistoryEvent
WHERE NodeId = @NodeId AND Status = 99
ORDER BY EventDate DESC
]]></sql>
<parameters>
<param name="NodeId" type="int" default="0" description="时间轴所属分类" />
<param name="ShowNum" type="int" default="5" description="显示条数" />
</parameters>
</datasource>
<output>
<![CDATA[
<div class="timeline">
<xsl:for-each select="/NewDataSet/Table">
<div class="tl-item">
<span class="dot"></span>
<span class="year">
<xsl:value-of select="CONVERT(varchar(10), EventDate, 102)" />
</span>
<span class="evt"><xsl:value-of select="Title" /></span>
</div>
</xsl:for-each>
</div>
]]>
</output>
</root>
@@ -0,0 +1,55 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- 视频信息列表(用于板块7精品课程 + 板块8东海视线) -->
<root>
<label>
<id>视频信息列表</id>
<name>视频信息列表</name>
<description>调取视频栏目信息,支持课程卡片、大封面、四宫格等样式</description>
<category>列表类</category>
<version>v2.0</version>
<creator>军政门户项目组</creator>
<createtime>2026-08-31</createtime>
</label>
<datasource>
<type>SQL</type>
<sql><![CDATA[
SELECT TOP (@ShowNum)
G.GeneralID, G.NodeID, G.Title, G.SubTitle, G.UpdateTime, G.Hits, G.EliteLevel,
G.Thumbnails, G.VideoUrl, G.VideoLength, G.Speaker, G.Author
FROM PE_CommonModel CM
INNER JOIN PE_U_Video G ON CM.GeneralID = G.GeneralID
WHERE CM.NodeID IN (SELECT NodeID FROM PE_Nodes WHERE ParentID = @NodeId OR NodeID = @NodeId)
AND CM.Status = 99 AND CM.Deleted = 0
ORDER BY G.UpdateTime DESC
]]></sql>
<parameters>
<param name="NodeId" type="int" default="0" description="视频栏目ID" />
<param name="ShowNum" type="int" default="6" description="显示条数" />
<param name="TitleLength" type="int" default="30" description="标题截取长度" />
<param name="Style" type="string" default="grid" description="渲染样式:card|big|grid|list" />
</parameters>
</datasource>
<output>
<![CDATA[
<ul class="video-list video-style-{@Style}">
<xsl:for-each select="/NewDataSet/Table">
<li>
<a href="{PE.Node.Link/GeneralID/{GeneralID}}" target="_blank">
<span class="v-img"><img src="{Thumbnails}" alt="{Title}"></span>
<span class="v-play">▶</span>
<span class="v-cap"><xsl:value-of select="pe:SubStr(Title, @TitleLength, '...')" /></span>
<xsl:if test="Speaker != ''">
<span class="v-meta">主讲:<xsl:value-of select="Speaker" /></span>
</xsl:if>
<xsl:if test="VideoLength != ''">
<span class="v-len"><xsl:value-of select="VideoLength" /></span>
</xsl:if>
</a>
</li>
</xsl:for-each>
</ul>
]]>
</output>
</root>