diff --git a/common/campusApi.js b/common/campusApi.js new file mode 100644 index 0000000..64ca5a0 --- /dev/null +++ b/common/campusApi.js @@ -0,0 +1,119 @@ +import tui from './httpRequest' + +function unwrap(res) { + if (!res) return null + if (res.success === false) { + uni.showToast({ title: res.message || '请求失败', icon: 'none', duration: 2000 }) + return null + } + return res.result !== undefined ? res.result : res +} + +function extractUploadUrl(fileObj) { + if (!fileObj) return '' + if (typeof fileObj === 'string') return fileObj + return fileObj.url || fileObj.fileUrl || fileObj.path || fileObj.fullPath || '' +} + +function buildQuery(data = {}) { + const query = Object.keys(data) + .filter(key => data[key] !== undefined && data[key] !== null && data[key] !== '') + .map(key => encodeURIComponent(key) + '=' + encodeURIComponent(data[key])) + .join('&') + return query ? '?' + query : '' +} + +export function uploadCampusImage(path) { + return tui.uploadFile('/upload/file', path).then(extractUploadUrl) +} + +export async function uploadCampusReleaseImage(path) { + const url = await tui.uploadFile('/upload/file', path).then(extractUploadUrl) + if (!url) return { url: '', passed: false, message: '图片上传失败,请稍后重试' } + const res = await tui.request('/app/campus/images/audit', 'POST', { url }, false, false, true) + if (res && res.success !== false) { + const auditResult = res.result !== undefined ? res.result : res + return auditResult && auditResult.passed ? { url, passed: true } : { url: '', passed: false, message: '图片审核未通过,请更换图片' } + } + return { url: '', passed: false, message: (res && res.message) || '图片审核未通过,请更换图片' } +} + +export function listCampusCategories(data = {}) { + return tui.request('/app/campus/categories', 'GET', data, false, true, true).then(unwrap) +} + +export function pageCampusPosts(data = {}) { + return tui.request('/app/campus/posts/page', 'POST', data, false, false, true).then(unwrap) +} + +export function pageCampusPartnerPosts(data = {}) { + return tui.request('/app/campus/partner/posts/page', 'POST', data, false, false, true).then(unwrap) +} + +export function matchCampusPartnerPost(data = {}) { + return tui.request('/app/campus/partner/posts/match', 'POST', data, false, false, true).then(unwrap) +} + +export function pageMyCampusPosts(data = {}) { + return tui.request('/app/campus/my/posts', 'POST', data, false, false, true).then(unwrap) +} + +export function getCampusPostDetail(id) { + return tui.request(`/app/campus/posts/${id}`, 'GET', {}, false, true, true).then(unwrap) +} + +export function publishCampusPost(data) { + return tui.request('/app/campus/posts', 'POST', data, false, false, false).then(unwrap) +} + +export function updateMyCampusPostStatus(data) { + return tui.request('/app/campus/my/posts/status', 'POST', data, false, false, false).then(unwrap) +} + +export function toggleCampusLike(data) { + return tui.request('/app/campus/like' + buildQuery(data), 'POST', {}, false, false, true).then(unwrap) +} + +export function addCampusComment(data) { + return tui.request('/app/campus/comments', 'POST', data, false, false, false).then(unwrap) +} + +export function pageCampusComments(postId, pageNum = 1, pageSize = 10) { + return tui.request('/app/campus/comments/page', 'GET', { postId, pageNum, pageSize }, false, true, true).then(unwrap) +} + +export function deleteCampusComment(id) { + return tui.request(`/app/campus/comments/${id}`, 'DELETE', {}, false, false, true).then(unwrap) +} + +export function createCampusChatSession(postId) { + return tui.request(`/app/campus/posts/${postId}/chat`, 'POST', {}, false, false, false).then(unwrap) +} + +export function getCampusChatSession(sessionId) { + return tui.request(`/app/campus/chat/sessions/${sessionId}`, 'GET', {}, false, true, true).then(unwrap) +} + +export function pageCampusChatMessages(sessionId, pageNum = 1, pageSize = 20) { + return tui.request(`/app/campus/chat/sessions/${sessionId}/messages/page`, 'GET', { pageNum, pageSize }, false, true, true).then(unwrap) +} + +export function sendCampusChatMessage(data) { + return tui.request('/app/campus/chat/messages', 'POST', data, false, false, false).then(unwrap) +} + +export function pageMyCampusSessions(data = {}) { + return tui.request('/app/campus/my/sessions', 'POST', data, false, false, true).then(unwrap) +} + +export function pageMyCampusMessageComments(data = {}) { + return tui.request('/app/campus/my/message-comments', 'POST', data, false, false, true).then(unwrap) +} + +export function submitCampusComplaint(data) { + return tui.request('/app/campus/complaints', 'POST', data, false, false, false).then(unwrap) +} + +export function getCampusUnreadSummary() { + return tui.request('/app/campus/unread/summary', 'GET', {}, false, true, true).then(unwrap) +} diff --git a/common/fishMarketApi.js b/common/fishMarketApi.js index 1917002..e6b98b0 100644 --- a/common/fishMarketApi.js +++ b/common/fishMarketApi.js @@ -3,7 +3,7 @@ import tui from './httpRequest' function unwrap(res) { if (!res) return null if (res.success === false) { - uni.showToast({ title: res.message || '请求失败', icon: 'none', duration: 3200 }) + uni.showToast({ title: res.message || '请求失败', icon: 'none', duration: 2000 }) return null } return res.result !== undefined ? res.result : res diff --git a/common/ieApi.js b/common/ieApi.js index da5f468..05e85b4 100644 --- a/common/ieApi.js +++ b/common/ieApi.js @@ -3,7 +3,21 @@ import tui from './httpRequest' function unwrap(res) { if (!res) return null if (res.success === false) { - uni.showToast({ title: res.message || '请求失败', icon: 'none', duration: 3200 }) + uni.showToast({ title: res.message || '请求失败', icon: 'none', duration: 2000 }) + return null + } + return res.result !== undefined ? res.result : res +} + +function unwrapSilent(res) { + if (!res || res.success === false) return null + return res.result !== undefined ? res.result : res +} + +function unwrapIeProfileSave(res) { + if (!res) return null + if (res.success === false) { + uni.showToast({ title: res.message || '请求失败', icon: 'none', duration: 1500 }) return null } return res.result !== undefined ? res.result : res @@ -28,7 +42,7 @@ function unwrapIeHome(res) { if (message.indexOf('i/e 身份已被封禁') !== -1 || message.indexOf('ie 身份已被封禁') !== -1) { return { banned: true, message } } - uni.showToast({ title: message, icon: 'none', duration: 3200 }) + uni.showToast({ title: message, icon: 'none', duration: 2000 }) return null } return res.result !== undefined ? res.result : res @@ -42,6 +56,10 @@ export function getIeUnreadCount() { return tui.request('/app/ie/unread-count', 'GET', {}, false, true, true).then(unwrap) } +export function markIeRoomRead(roomId) { + return tui.request(`/app/ie/rooms/${roomId}/read`, 'POST', {}, false, true, true).then(unwrapSilent).catch(() => null) +} + export function updateIeStatus(data) { return tui.request('/app/ie/status', 'POST', data, false, false, true).then(unwrap) } @@ -59,7 +77,7 @@ export function getIeRoomTargetProfile(roomId) { } export function saveIeProfile(data) { - return tui.request('/app/ie/profile', 'POST', data, false, false, false).then(unwrap) + return tui.request('/app/ie/profile', 'POST', data, false, false, false).then(unwrapIeProfileSave) } export function verifyIeRealName(data) { diff --git a/common/ieRealNameAuth.js b/common/ieRealNameAuth.js index d082fa5..d8ccbf9 100644 --- a/common/ieRealNameAuth.js +++ b/common/ieRealNameAuth.js @@ -1,7 +1,7 @@ import tui from './httpRequest' import { verifyIeRealName, verifyIeStudentCard, getIeRealNameAuditSetting } from './ieApi.js' -function showLongToast(title, duration = 3200) { +function showLongToast(title, duration = 2000) { const content = String(title || '操作未完成') if (content.length > 18) { uni.showModal({ @@ -277,7 +277,7 @@ async function ensureStudentCardVerified(profile, options = {}) { if (result.studentCardNeedRetry && attempt === 0) { continue } - showLongToast(result.message || '学生证认证未完成,请重新上传', 3200) + showLongToast(result.message || '学生证认证未完成,请重新上传', 2000) return false } return false @@ -287,12 +287,12 @@ async function ensureAliyunRealNameVerified(profile) { if (profile && profile.realNameVerified) return true const regionId = getCurrentRegionId() if (!regionId) { - showLongToast('请先选择校区后再进行实名认证', 3200) + showLongToast('请先选择校区后再进行实名认证', 2000) return false } const certName = await promptText('填写真实姓名', '请输入身份证上的姓名') if (!certName) { - showLongToast('未填写真实姓名,无法完成实名认证', 3200) + showLongToast('未填写真实姓名,无法完成实名认证', 2000) return false } if (!isValidMainlandName(certName)) { @@ -301,7 +301,7 @@ async function ensureAliyunRealNameVerified(profile) { } const certNo = (await promptText('填写身份证号', '请输入18位中国大陆居民身份证号')).toUpperCase() if (!certNo) { - showLongToast('未填写身份证号,无法完成实名认证', 3200) + showLongToast('未填写身份证号,无法完成实名认证', 2000) return false } if (!isValidMainlandIdCard(certNo)) { @@ -318,7 +318,7 @@ async function ensureAliyunRealNameVerified(profile) { uni.hideLoading() } if (!result || !result.realNameVerified) { - showLongToast((result && result.message) || '实名认证未完成,请稍后重试', 3200) + showLongToast((result && result.message) || '实名认证未完成,请稍后重试', 2000) return false } showLongToast('实名认证通过', 2200) @@ -395,7 +395,7 @@ export async function ensureIeVerifiedBeforeAction(options = {}) { } return true } catch (e) { - showLongToast((e && e.message) || '认证未完成,请稍后重试', 3200) + showLongToast((e && e.message) || '认证未完成,请稍后重试', 2000) return false } }