From ec9ec2ce02ede050215aa67d58ddbd7df3075025 Mon Sep 17 00:00:00 2001 From: wuxw <928255095@qq.com> Date: Mon, 23 Jun 2025 23:48:42 +0800 Subject: [PATCH] 开发完成物业公告问题 --- src/api/oa/addNoticeViewApi.js | 44 ++++++++++++++++++++++++++++++++++++++++++++ src/api/oa/editNoticeViewApi.js | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/api/oa/noticeDetailApi.js | 21 +++++++++++++++++++++ src/api/oa/noticeManageApi.js | 65 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/components/oa/deleteNotice.vue | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/i18n/oaI18n.js | 14 +++++++++++++- src/router/oaRouter.js | 26 +++++++++++++++++++++++--- src/views/oa/addNoticeViewLang.js | 46 ++++++++++++++++++++++++++++++++++++++++++++++ src/views/oa/addNoticeViewList.vue | 155 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/views/oa/editNoticeViewLang.js | 40 ++++++++++++++++++++++++++++++++++++++++ src/views/oa/editNoticeViewList.vue | 143 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/views/oa/noticeDetailLang.js | 28 ++++++++++++++++++++++++++++ src/views/oa/noticeDetailList.vue | 136 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/views/oa/noticeManageLang.js | 78 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/views/oa/noticeManageList.vue | 202 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 15 files changed, 1118 insertions(+), 4 deletions(-) create mode 100644 src/api/oa/addNoticeViewApi.js create mode 100644 src/api/oa/editNoticeViewApi.js create mode 100644 src/api/oa/noticeDetailApi.js create mode 100644 src/api/oa/noticeManageApi.js create mode 100644 src/components/oa/deleteNotice.vue create mode 100644 src/views/oa/addNoticeViewLang.js create mode 100644 src/views/oa/addNoticeViewList.vue create mode 100644 src/views/oa/editNoticeViewLang.js create mode 100644 src/views/oa/editNoticeViewList.vue create mode 100644 src/views/oa/noticeDetailLang.js create mode 100644 src/views/oa/noticeDetailList.vue create mode 100644 src/views/oa/noticeManageLang.js create mode 100644 src/views/oa/noticeManageList.vue diff --git a/src/api/oa/addNoticeViewApi.js b/src/api/oa/addNoticeViewApi.js new file mode 100644 index 0000000..d53d70d --- /dev/null +++ b/src/api/oa/addNoticeViewApi.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' +import { getCommunityId } from '@/api/community/communityApi' + +// 保存公告信息 +export function saveNotice(data) { + return new Promise((resolve, reject) => { + // 确保communityId存在 + if (!data.communityId) { + data.communityId = getCommunityId() + } + + request({ + url: '/notice.saveNotice', + method: 'post', + data + }).then(response => { + resolve(response.data) + }).catch(error => { + reject(error) + }) + }) +} + +// 上传图片 +export function uploadImage(file) { + const formData = new FormData() + formData.append('uploadFile', file) + formData.append('communityId', getCommunityId()) + + return new Promise((resolve, reject) => { + request({ + url: '/uploadImage', + method: 'post', + data: formData, + headers: { + 'Content-Type': 'multipart/form-data' + } + }).then(response => { + resolve(response.data) + }).catch(error => { + reject(error) + }) + }) +} \ No newline at end of file diff --git a/src/api/oa/editNoticeViewApi.js b/src/api/oa/editNoticeViewApi.js new file mode 100644 index 0000000..041abb6 --- /dev/null +++ b/src/api/oa/editNoticeViewApi.js @@ -0,0 +1,62 @@ +import request from '@/utils/request' +import { getCommunityId } from '@/api/community/communityApi' + +// 获取公告详情 +export function getNoticeDetail(params) { + return new Promise((resolve, reject) => { + request({ + url: '/notice.listNotices', + method: 'get', + params: { + ...params, + communityId: getCommunityId() + } + }).then(response => { + const res = response.data + resolve(res) + }).catch(error => { + reject(error) + }) + }) +} + +// 更新公告 +export function updateNotice(data) { + return new Promise((resolve, reject) => { + request({ + url: '/notice.updateNotice', + method: 'post', + data: { + ...data, + communityId: getCommunityId() + } + }).then(response => { + const res = response.data + resolve(res) + }).catch(error => { + reject(error) + }) + }) +} + +// 上传图片 +export function uploadNoticeImage(data) { + return new Promise((resolve, reject) => { + request({ + url: 'uploadImage', + method: 'post', + headers: { + 'Content-Type': 'multipart/form-data' + }, + data: { + ...data, + communityId: getCommunityId() + } + }).then(response => { + const res = response.data + resolve(res) + }).catch(error => { + reject(error) + }) + }) +} \ No newline at end of file diff --git a/src/api/oa/noticeDetailApi.js b/src/api/oa/noticeDetailApi.js new file mode 100644 index 0000000..950d333 --- /dev/null +++ b/src/api/oa/noticeDetailApi.js @@ -0,0 +1,21 @@ +import request from '@/utils/request' + +/** + * 获取公告详情 + * @param {Object} params 查询参数 + * @returns {Promise} + */ +export function getNoticeDetail(params) { + return new Promise((resolve, reject) => { + request({ + url: '/notice.listNotices', + method: 'get', + params + }).then(response => { + const res = response.data + resolve(res) + }).catch(error => { + reject(error) + }) + }) +} \ No newline at end of file diff --git a/src/api/oa/noticeManageApi.js b/src/api/oa/noticeManageApi.js new file mode 100644 index 0000000..815abab --- /dev/null +++ b/src/api/oa/noticeManageApi.js @@ -0,0 +1,65 @@ +import request from '@/utils/request' + +/** + * 获取公告列表 + * @param {Object} params 查询参数 + * @returns {Promise} + */ +export function listNotices(params) { + return new Promise((resolve, reject) => { + request({ + url: '/notice.listNotices', + method: 'get', + params + }).then(response => { + const res = response.data + resolve(res) + }).catch(error => { + reject(error) + }) + }) +} + +/** + * 删除公告 + * @param {Object} data 删除参数 + * @returns {Promise} + */ +export function deleteNotice(data) { + return new Promise((resolve, reject) => { + request({ + url: '/notice.deleteNotice', + method: 'post', + data + }).then(response => { + const res = response.data + resolve(res) + }).catch(error => { + reject(error) + }) + }) +} + +/** + * 获取字典数据 + * @param {String} dictType 字典类型 + * @param {String} dictName 字典名称 + * @returns {Promise} + */ +export function getDict(dictType, dictName) { + return new Promise((resolve, reject) => { + request({ + url: '/dict.getDict', + method: 'get', + params: { + dictType, + dictName + } + }).then(response => { + const res = response.data + resolve(res) + }).catch(error => { + reject(error) + }) + }) +} \ No newline at end of file diff --git a/src/components/oa/deleteNotice.vue b/src/components/oa/deleteNotice.vue new file mode 100644 index 0000000..d269447 --- /dev/null +++ b/src/components/oa/deleteNotice.vue @@ -0,0 +1,62 @@ + + + \ No newline at end of file diff --git a/src/i18n/oaI18n.js b/src/i18n/oaI18n.js index 40878cc..f79efd9 100644 --- a/src/i18n/oaI18n.js +++ b/src/i18n/oaI18n.js @@ -1,12 +1,24 @@ import { messages as activitiesTypeManageMessages } from '../views/oa/activitiesTypeManageLang' import { messages as activitiesManageMessages } from '../views/oa/activitiesManageLang' +import { messages as noticeManageMessages } from '../views/oa/noticeManageLang' +import { messages as addNoticeViewMessages } from '../views/oa/addNoticeViewLang' +import { messages as editNoticeViewMessages } from '../views/oa/editNoticeViewLang' +import { messages as noticeDetailMessages } from '../views/oa/noticeDetailLang' export const messages ={ en:{ ...activitiesTypeManageMessages.en, ...activitiesManageMessages.en, + ...noticeManageMessages.en, + ...addNoticeViewMessages.en, + ...editNoticeViewMessages.en, + ...noticeDetailMessages.en, }, zh:{ ...activitiesTypeManageMessages.zh, - ...activitiesManageMessages.zh, + ...activitiesManageMessages.zh, + ...noticeManageMessages.zh, + ...addNoticeViewMessages.zh, + ...editNoticeViewMessages.zh, + ...noticeDetailMessages.zh, } } \ No newline at end of file diff --git a/src/router/oaRouter.js b/src/router/oaRouter.js index 56eae27..1777b6a 100644 --- a/src/router/oaRouter.js +++ b/src/router/oaRouter.js @@ -5,8 +5,28 @@ export default [ component: () => import('@/views/oa/activitiesTypeManageList.vue') }, { - path:'/pages/property/activitiesManage', - name:'/pages/property/activitiesManage', + path: '/pages/property/activitiesManage', + name: '/pages/property/activitiesManage', component: () => import('@/views/oa/activitiesManageList.vue') - }, + }, + { + path: '/pages/common/noticeManage', + name: '/pages/common/noticeManage', + component: () => import('@/views/oa/noticeManageList.vue') + }, + { + path: '/views/oa/addNoticeView', + name: '/views/oa/addNoticeView', + component: () => import('@/views/oa/addNoticeViewList.vue') + }, + { + path: '/views/oa/editNoticeView', + name: '/views/oa/editNoticeView', + component: () => import('@/views/oa/editNoticeViewList.vue') + }, + { + path: '/views/oa/noticeDetail', + name: '/views/oa/noticeDetail', + component: () => import('@/views/oa/noticeDetailList.vue') + }, ] \ No newline at end of file diff --git a/src/views/oa/addNoticeViewLang.js b/src/views/oa/addNoticeViewLang.js new file mode 100644 index 0000000..f3aa597 --- /dev/null +++ b/src/views/oa/addNoticeViewLang.js @@ -0,0 +1,46 @@ +export const messages = { + en: { + addNoticeView: { + title: 'New Notice', + titleLabel: 'Title', + titlePlaceholder: 'Required, please fill in the title', + noticeTypeLabel: 'Notice Type', + noticeTypePlaceholder: 'Required, please select notice type', + noticeTypeOption1: 'Owner Notification (WeChat notification to followers)', + noticeTypeOption2: 'Staff Notification', + contentLabel: 'Notice Content', + contentPlaceholder: 'Required, please enter notice content', + submit: 'Submit', + cancel: 'Cancel', + validate: { + title: 'Title cannot be empty', + noticeType: 'Notice type cannot be empty', + content: 'Notice content cannot be empty' + }, + saveSuccess: 'Added successfully', + saveError: 'Failed to add notice' + } + }, + zh: { + addNoticeView: { + title: '新公告', + titleLabel: '标题', + titlePlaceholder: '必填,请填写标题', + noticeTypeLabel: '公告类型', + noticeTypePlaceholder: '必填,请选择公告类型', + noticeTypeOption1: '业主通知(微信通知关注用户)', + noticeTypeOption2: '员工通知', + contentLabel: '公告内容', + contentPlaceholder: '必填,请输入公告内容', + submit: '提交', + cancel: '取消', + validate: { + title: '标题不能为空', + noticeType: '公告类型不能为空', + content: '公告内容不能为空' + }, + saveSuccess: '添加成功', + saveError: '添加公告失败' + } + } +} \ No newline at end of file diff --git a/src/views/oa/addNoticeViewList.vue b/src/views/oa/addNoticeViewList.vue new file mode 100644 index 0000000..56d86cb --- /dev/null +++ b/src/views/oa/addNoticeViewList.vue @@ -0,0 +1,155 @@ + + + + + \ No newline at end of file diff --git a/src/views/oa/editNoticeViewLang.js b/src/views/oa/editNoticeViewLang.js new file mode 100644 index 0000000..7715f0b --- /dev/null +++ b/src/views/oa/editNoticeViewLang.js @@ -0,0 +1,40 @@ +export const messages = { + en: { + editNoticeView: { + title: 'Edit Notice', + titleLabel: 'Title', + titlePlaceholder: 'Required, please enter title', + contentLabel: 'Content', + contentPlaceholder: 'Required, please enter notice content', + validate: { + titleRequired: 'Title cannot be empty', + titleLength: 'Title must be between 4 to 100 characters', + contentRequired: 'Content cannot be empty', + contentMaxLength: 'Content cannot exceed 10000 characters', + noticeIdRequired: 'Notice ID cannot be empty' + }, + fetchError: 'Failed to fetch notice details', + updateSuccess: 'Notice updated successfully', + updateError: 'Failed to update notice' + } + }, + zh: { + editNoticeView: { + title: '修改公告', + titleLabel: '标题', + titlePlaceholder: '必填,请填写标题', + contentLabel: '公告内容', + contentPlaceholder: '必填,请输入公告内容', + validate: { + titleRequired: '标题不能为空', + titleLength: '标题必须在4至100字符之间', + contentRequired: '公告内容不能为空', + contentMaxLength: '公告内容不能超过10000个字', + noticeIdRequired: '公告ID不能为空' + }, + fetchError: '获取公告详情失败', + updateSuccess: '公告修改成功', + updateError: '公告修改失败' + } + } +} \ No newline at end of file diff --git a/src/views/oa/editNoticeViewList.vue b/src/views/oa/editNoticeViewList.vue new file mode 100644 index 0000000..56ec962 --- /dev/null +++ b/src/views/oa/editNoticeViewList.vue @@ -0,0 +1,143 @@ + + + + + \ No newline at end of file diff --git a/src/views/oa/noticeDetailLang.js b/src/views/oa/noticeDetailLang.js new file mode 100644 index 0000000..a40059f --- /dev/null +++ b/src/views/oa/noticeDetailLang.js @@ -0,0 +1,28 @@ +export const messages = { + en: { + noticeDetail: { + title: 'Notice Details', + back: 'Back', + titleLabel: 'Title', + noticeType: 'Notice Type', + startTime: 'Start Time', + endTime: 'End Time', + createTime: 'Create Time', + content: 'Content', + fetchError: 'Failed to fetch notice details' + } + }, + zh: { + noticeDetail: { + title: '公告详情', + back: '返回', + titleLabel: '标题', + noticeType: '公告类型', + startTime: '开始时间', + endTime: '结束时间', + createTime: '创建时间', + content: '公告内容', + fetchError: '获取公告详情失败' + } + } +} \ No newline at end of file diff --git a/src/views/oa/noticeDetailList.vue b/src/views/oa/noticeDetailList.vue new file mode 100644 index 0000000..77821c4 --- /dev/null +++ b/src/views/oa/noticeDetailList.vue @@ -0,0 +1,136 @@ + + + + + \ No newline at end of file diff --git a/src/views/oa/noticeManageLang.js b/src/views/oa/noticeManageLang.js new file mode 100644 index 0000000..64a972a --- /dev/null +++ b/src/views/oa/noticeManageLang.js @@ -0,0 +1,78 @@ +export const messages = { + en: { + noticeManage: { + search: { + title: 'Search Conditions', + noticeTypePlaceholder: 'Please select notice type', + ownerNotice: 'Owner Notice', + staffNotice: 'Staff Notice', + statePlaceholder: 'Please select status', + pendingNotice: 'Pending Notice', + notifying: 'Notifying', + noticeComplete: 'Notice Complete', + titlePlaceholder: 'Please enter notice title', + startTimePlaceholder: 'Required, please select start time', + endTimePlaceholder: 'Required, please select end time' + }, + list: { + title: 'Notice Information' + }, + table: { + noticeId: 'Notice ID', + title: 'Title', + noticeType: 'Notice Type', + startTime: 'Start Time', + endTime: 'End Time', + state: 'Status', + noticeRange: 'Notice Range' + }, + delete: { + title: 'Please confirm your operation', + confirmText: 'Confirm to delete this notice?', + cancelText: 'Cancel', + confirmButton: 'Confirm Delete', + successMessage: 'Delete successfully', + errorMessage: 'Delete failed' + }, + fetchError: 'Failed to fetch notice data' + } + }, + zh: { + noticeManage: { + search: { + title: '查询条件', + noticeTypePlaceholder: '请选择公告类型', + ownerNotice: '业主通知', + staffNotice: '员工通知', + statePlaceholder: '请选择状态', + pendingNotice: '待通知', + notifying: '通知中', + noticeComplete: '通知完成', + titlePlaceholder: '请输入公告标题', + startTimePlaceholder: '必填,请填写开始时间', + endTimePlaceholder: '必填,请填写结束时间' + }, + list: { + title: '公告信息' + }, + table: { + noticeId: '公告ID', + title: '标题', + noticeType: '公告类型', + startTime: '开始时间', + endTime: '结束时间', + state: '状态', + noticeRange: '通知范围' + }, + delete: { + title: '请确认您的操作', + confirmText: '确定删除公告?', + cancelText: '点错了', + confirmButton: '确认删除', + successMessage: '删除成功', + errorMessage: '删除失败' + }, + fetchError: '获取公告数据失败' + } + } +} \ No newline at end of file diff --git a/src/views/oa/noticeManageList.vue b/src/views/oa/noticeManageList.vue new file mode 100644 index 0000000..62fcd49 --- /dev/null +++ b/src/views/oa/noticeManageList.vue @@ -0,0 +1,202 @@ + + + + + \ No newline at end of file -- libgit2 0.21.4