diff --git a/src/api/base/srApi.ts b/src/api/base/srApi.ts
new file mode 100644
index 0000000..d7871c6
--- /dev/null
+++ b/src/api/base/srApi.ts
@@ -0,0 +1,26 @@
+// 生日贺卡相关API接口
+import { get, post } from "@/utils/request";
+
+/**
+ * 获取贺卡详情
+ * @param params { id: 推送记录ID }
+ */
+export const srGetCardDetailApi = async (params: { id: string }) => {
+ return await get("/api/srTsRecord/getCardDetail", params);
+};
+
+/**
+ * 标记贺卡为已查阅
+ * @param params { xxtsId: 消息推送ID }
+ */
+export const srMarkAsViewedApi = async (params: { xxtsId: string }) => {
+ return await post("/api/srTsRecord/markAsViewed", params);
+};
+
+/**
+ * 获取推送记录列表
+ */
+export const srFindPageApi = async (params: any) => {
+ return await get("/api/srTsRecord/findPage", params);
+};
+
diff --git a/src/api/base/tzApi.ts b/src/api/base/tzApi.ts
new file mode 100644
index 0000000..419074b
--- /dev/null
+++ b/src/api/base/tzApi.ts
@@ -0,0 +1,48 @@
+// 通知公告相关API接口
+import { get, post } from "@/utils/request";
+
+/**
+ * 获取通知列表(教师端)
+ * 注意:useLayout 期望返回对象 { rows: [...] },不要返回数组
+ */
+export const mobileTzListApi = async (params: any) => {
+ const res = await get("/api/notice/findPage", params);
+ // 返回原始响应,useLayout 会自动从 rows 字段取数据
+ return res;
+};
+
+/**
+ * 根据ID获取通知详情
+ */
+export const tzFindByIdApi = async (params: { id: string }) => {
+ return await get("/api/notice/findById", params);
+};
+
+/**
+ * 保存通知(新增/编辑)
+ */
+export const tzSaveApi = async (params: any) => {
+ return await post("/api/notice/save", params);
+};
+
+/**
+ * 删除通知
+ */
+export const tzDeleteApi = async (params: { ids: string }) => {
+ return await post("/api/notice/logicDelete", params);
+};
+
+/**
+ * 根据通知ID查询推送名单
+ */
+export const tzRecipientFindByNoticeIdApi = async (params: { noticeId: string }) => {
+ return await get("/api/noticeRecipient/findByNoticeId", params);
+};
+
+/**
+ * 推送通知消息
+ */
+export const xxtsSaveByNoticeParamsApi = async (params: { noticeId: string }) => {
+ return await post("/api/xxts/saveByNoticeParams", params);
+};
+
diff --git a/src/api/base/zwApi.ts b/src/api/base/zwApi.ts
index 661a392..9f348bd 100644
--- a/src/api/base/zwApi.ts
+++ b/src/api/base/zwApi.ts
@@ -37,6 +37,15 @@ export const findAllZw = () => {
+
+
+
+
+
+
+
+
+
diff --git a/src/components/BasicTeacherSelect/index.ts b/src/components/BasicTeacherSelect/index.ts
new file mode 100644
index 0000000..7b619cc
--- /dev/null
+++ b/src/components/BasicTeacherSelect/index.ts
@@ -0,0 +1,13 @@
+import BasicTeacherSelect from './index.vue';
+
+export interface TeacherInfo {
+ id: string;
+ jsxm: string;
+ jsId?: string;
+ dzzw?: string;
+ qtzw?: string;
+}
+
+export { BasicTeacherSelect };
+export default BasicTeacherSelect;
+
diff --git a/src/components/BasicTeacherSelect/index.vue b/src/components/BasicTeacherSelect/index.vue
new file mode 100644
index 0000000..34aa937
--- /dev/null
+++ b/src/components/BasicTeacherSelect/index.vue
@@ -0,0 +1,204 @@
+
+
+
+
+
+ {{ label }}
+
+
+ {{ displayText }}
+
+
+
+
+
+
+
+
+ {{ teacher.jsxm }}
+
+ 更多({{ selectedTeachers.length - maxDisplayCount }})
+
+
+
+
+
+
+
+
+
diff --git a/src/pages.json b/src/pages.json
index f9e02e1..e6561b6 100644
--- a/src/pages.json
+++ b/src/pages.json
@@ -1043,6 +1043,66 @@
"enablePullDownRefresh": false
}
},
+ {
+ "path": "pages/view/routine/tz/index",
+ "style": {
+ "navigationBarTitleText": "通知发布",
+ "enablePullDownRefresh": false
+ }
+ },
+ {
+ "path": "pages/view/routine/tz/publish",
+ "style": {
+ "navigationBarTitleText": "发布通知",
+ "enablePullDownRefresh": false
+ }
+ },
+ {
+ "path": "pages/view/routine/tz/detail",
+ "style": {
+ "navigationBarTitleText": "通知详情",
+ "enablePullDownRefresh": false
+ }
+ },
+ {
+ "path": "pages/view/routine/tz/push-list",
+ "style": {
+ "navigationBarTitleText": "推送名单",
+ "enablePullDownRefresh": false
+ }
+ },
+ {
+ "path": "pages/view/routine/tz/detailwb",
+ "style": {
+ "navigationBarTitleText": "通知详情",
+ "enablePullDownRefresh": false
+ }
+ },
+ {
+ "path": "pages/view/routine/sr/envelope",
+ "style": {
+ "navigationStyle": "custom",
+ "navigationBarTitleText": "生日祝福",
+ "enablePullDownRefresh": false,
+ "backgroundColor": "#ff9a9e"
+ }
+ },
+ {
+ "path": "pages/view/routine/sr/card",
+ "style": {
+ "navigationStyle": "custom",
+ "navigationBarTitleText": "生日祝福",
+ "enablePullDownRefresh": false,
+ "backgroundColor": "#ff9a9e"
+ }
+ },
+ {
+ "path": "pages/common/selectTeachers/index",
+ "style": {
+ "navigationBarTitleText": "选择教师",
+ "enablePullDownRefresh": false
+ }
+ },
{
"path": "pages/view/analysis/jl/statistics",
"style": {
diff --git a/src/pages/base/service/index.vue b/src/pages/base/service/index.vue
index 29fc262..1f4534d 100644
--- a/src/pages/base/service/index.vue
+++ b/src/pages/base/service/index.vue
@@ -609,6 +609,40 @@ const sections = reactive([
},
],
},
+ {
+ id: "gnyy-xxfb",
+ icon: "jlfb",
+ text: "信息发布",
+ show: true,
+ permissionKey: "gnyycommon-xxfb", // 信息发布权限编码
+ isFolder: true, // 标记为文件夹类型
+ folderItems: [
+ {
+ id: "xxfb-qdfb",
+ icon: "qdfb",
+ text: "签到发布",
+ show: true,
+ permissionKey: "routine-qdfb",
+ path: "/pages/view/routine/qd/index",
+ },
+ {
+ id: "xxfb-jlfb",
+ icon: "jlfb",
+ text: "发布接龙",
+ show: true,
+ permissionKey: "routine-bjjl",
+ path: "/pages/view/notice/index",
+ },
+ {
+ id: "xxfb-tzfb",
+ icon: "gw",
+ text: "通知发布",
+ show: true,
+ permissionKey: "routine-tzfb",
+ path: "/pages/view/routine/tz/index",
+ },
+ ],
+ },
],
},
{
diff --git a/src/pages/common/selectTeachers/index.vue b/src/pages/common/selectTeachers/index.vue
new file mode 100644
index 0000000..b32cb64
--- /dev/null
+++ b/src/pages/common/selectTeachers/index.vue
@@ -0,0 +1,1227 @@
+
+
+
+
+
+
+ 📋 选择条件
+
+
+
+ 选择类别
+
+
+
+ {{ getSelectTypeText() || '请选择类别' }}
+
+
+
+
+
+
+
+
+ 职务类型
+
+
+ {{ getZwTypeText() }}
+
+
+
+
+
+
+
+ {{ getSecondSelectLabel() }}
+
+
+
+
+
+
+
+ {{ getSecondSelectLabel() }}
+
+
+
+ {{ getSecondSelectText() || '请选择' }}
+
+
+
+
+
+
+
+
+ 教师类型
+
+
+
+ {{ getTeacherTypeText() || '请选择教师类型' }}
+
+
+
+
+
+
+
+
+ 💡 提示:选择"自定义教师"可以手动选择特定的教师
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.dictionaryValue }}
+
+
+
+
+
+
+
+
+
+
+ 👥 选择结果
+
+ ({{ selectedTeachers.length }})
+
+
+
+
+
+
+ {{ teacher.jsxm }}
+
+
+
+
+
+
+
+
+
+
+ {{ selectType ? '请先选择条件,加载教师列表' : '请选择筛选条件' }}
+
+
+
+
+
+
+ 加载中...
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/view/routine/lt/create.vue b/src/pages/view/routine/lt/create.vue
index cef17c9..67447c7 100644
--- a/src/pages/view/routine/lt/create.vue
+++ b/src/pages/view/routine/lt/create.vue
@@ -556,7 +556,7 @@ const handleBjConfirm = (e: any) => {
// 跳转到教师选择页面
const showTeacherTree = () => {
uni.navigateTo({
- url: '/pages/view/routine/qd/selectTeachers'
+ url: '/pages/common/selectTeachers/index'
});
};
diff --git a/src/pages/view/routine/lt/edit.vue b/src/pages/view/routine/lt/edit.vue
index 8cd8534..204dc38 100644
--- a/src/pages/view/routine/lt/edit.vue
+++ b/src/pages/view/routine/lt/edit.vue
@@ -591,7 +591,7 @@ const openCategoryPicker = () => {
// 跳转到教师选择页面
const showTeacherTree = () => {
uni.navigateTo({
- url: '/pages/view/routine/qd/selectTeachers'
+ url: '/pages/common/selectTeachers/index'
});
};
diff --git a/src/pages/view/routine/qd/publish.vue b/src/pages/view/routine/qd/publish.vue
index 814c386..e6b9c67 100644
--- a/src/pages/view/routine/qd/publish.vue
+++ b/src/pages/view/routine/qd/publish.vue
@@ -612,7 +612,7 @@ const handleSignatureChange = (e: any) => {
const showTeacherTree = () => {
uni.navigateTo({
- url: '/pages/view/routine/qd/selectTeachers'
+ url: '/pages/common/selectTeachers/index'
});
};
diff --git a/src/pages/view/routine/sr/card.vue b/src/pages/view/routine/sr/card.vue
new file mode 100644
index 0000000..67c2bb5
--- /dev/null
+++ b/src/pages/view/routine/sr/card.vue
@@ -0,0 +1,695 @@
+
+
+
+
+
+
+
+
+ 加载中...
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ greetingFromContent }}
+
+
+
+
+
+
+ {{ line || '\u00A0' }}
+
+
+
+
+
+
+
+
+
+
+ {{ cardData.signLabel }}
+ {{ cardData.signerName }}
+
+
+
+
+ {{ currentDate }}
+
+
+
+
+
+
+
+
+
+
+ 🎵
+
+
+
+
+
+ 🎂
+ 贺卡不存在或已过期
+
+
+
+
+
+
+
diff --git a/src/pages/view/routine/sr/envelope.vue b/src/pages/view/routine/sr/envelope.vue
new file mode 100644
index 0000000..39e1194
--- /dev/null
+++ b/src/pages/view/routine/sr/envelope.vue
@@ -0,0 +1,658 @@
+
+
+
+
+
+
+ ✨
+ ⭐
+ ✨
+ 🎉
+ ⭐
+ ✨
+
+
+
+
+ 您收到一封生日祝福
+ 点击信封查看
+
+
+
+
+
+
+
+
+
+
+
+
+ 🎂
+ 生日快乐
+ 点击查看完整贺卡
+
+
+
+
+
+
+
+
+
+
+ 🎂
+
+
+
+
+
+
+ 👆
+
+
+
+
+
+ 🎈
+ 🎁
+ 🎈
+
+
+
+
+ 🎵
+
+
+
+
+
+
+
diff --git a/src/pages/view/routine/tz/detail.vue b/src/pages/view/routine/tz/detail.vue
new file mode 100644
index 0000000..cf9d130
--- /dev/null
+++ b/src/pages/view/routine/tz/detail.vue
@@ -0,0 +1,664 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 类型:
+ {{ noticeData.noticeTypeName || '通知' }}
+
+
+ 发布人:
+ {{ noticeData.publishUserName || '未知' }}
+
+
+ 发布时间:
+ {{ formatTime(noticeData.publishTime) }}
+
+
+
+
+
+
+ 通知内容
+
+
+
+
+
+ 附件
+
+
+
+ {{ att.name }}
+
+
+
+
+
+
+
+ 推送统计
+
+
+ {{ noticeData.totalCount || 0 }}
+ 总推送
+
+
+
+ {{ noticeData.readCount || 0 }}
+ 已读
+
+
+
+ {{ (noticeData.totalCount || 0) - (noticeData.readCount || 0) }}
+ 未读
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 点击任意处关闭
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/view/routine/tz/detailwb.vue b/src/pages/view/routine/tz/detailwb.vue
new file mode 100644
index 0000000..5f44a5e
--- /dev/null
+++ b/src/pages/view/routine/tz/detailwb.vue
@@ -0,0 +1,722 @@
+
+
+
+
+
+
+
+
+
+ 加载中...
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 发布人: {{ noticeDetail.publishUserName || '未知' }}
+ 发布时间: {{ formatTime(noticeDetail.publishTime) }}
+
+
+
+
+
+ {{ contentPreview }}
+ 展开
+
+
+
+ 收起
+
+
+
+
+
+
+ 📎 附件
+
+
+
+ {{ att.name }}
+
+
+
+
+
+
+
+
+
+ 通知详情未找到
+
+
+
+
+
+
+
+
+
+
+
+
+ 点击任意处关闭
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/view/routine/tz/index.vue b/src/pages/view/routine/tz/index.vue
new file mode 100644
index 0000000..65d41a9
--- /dev/null
+++ b/src/pages/view/routine/tz/index.vue
@@ -0,0 +1,447 @@
+
+
+
+
+
+
+
+
+
+
+
+ {{ data.noticeTypeName || '通知' }}
+
+ 已读: {{ data.readCount || 0 }} / {{ data.totalCount || 0 }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/view/routine/tz/publish.vue b/src/pages/view/routine/tz/publish.vue
new file mode 100644
index 0000000..835bb25
--- /dev/null
+++ b/src/pages/view/routine/tz/publish.vue
@@ -0,0 +1,955 @@
+
+
+
+
+
+
+
+ 通知标题 *
+
+
+
+
+ 通知内容 *
+
+
+
+
+ 附件
+
+
+
+ {{ att.name }}
+
+
+
+
+
+
+
+ 添加图文/视频/文件
+
+
+
+
+
+
+
+
+ 通知类型
+
+ {{ noticeTypeText }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 推送类型
+
+
+
+ 立即推送
+
+
+
+ 定时推送
+
+
+
+
+
+
+
+
+ 提醒时间
+
+
+ {{ formData.remindTime || "请选择定时推送时间" }}
+
+
+
+
+
+
+
+
+
+ 发布时间
+
+
+ {{ formData.publishTime || "请选择" }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/view/routine/tz/push-list.vue b/src/pages/view/routine/tz/push-list.vue
new file mode 100644
index 0000000..367ee81
--- /dev/null
+++ b/src/pages/view/routine/tz/push-list.vue
@@ -0,0 +1,384 @@
+
+
+
+
+
+
+ {{ recipientList.length }}
+ 总人数
+
+
+
+ {{ readCount }}
+ 已读
+
+
+
+ {{ unreadCount }}
+ 未读
+
+
+
+
+
+
+ 全部
+
+
+ 已读
+
+
+ 未读
+
+
+
+
+
+
+
+
+ {{ item.jsxm }}
+ {{ item.deptName }}
+
+
+
+ {{ item.isRead === '1' ? '已读' : '未读' }}
+
+
+ {{ formatTime(item.readTime) }}
+
+
+
+
+
+
+ 暂无数据
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+