This commit is contained in:
Kunagisa 2025-06-16 15:57:25 +08:00
parent c6c6df9c57
commit 4cc94e2132
5 changed files with 72 additions and 19 deletions

View File

@ -28,9 +28,10 @@ export const addDemand = async (demandData) => {
try {
const payload = {
...demandData,
content: demandData.sendcontent // 确保 content 与 sendcontent 一致
content: demandData.content // 直接使用传入的 content
};
const response = await axiosInstance.post('/demands/add', payload);
console.log('添加需求的数据:', payload);
return response.data;
} catch (error) {
console.error('添加需求失败:', error);
@ -50,13 +51,13 @@ export const updateDemand = async (id, dataToUpdate) => {
try {
const payload = {
sendcontent: dataToUpdate.sendcontent,
// 根据 DemandModel补齐其他必填或可选字段即使它们不被后端 update 逻辑使用
requester: dataToUpdate.requester || '',
qq_code: dataToUpdate.qq_code || '',
content: dataToUpdate.sendcontent, // 保持一致
content: dataToUpdate.content || '', // 直接使用传入的 content如果为空则使用空字符串
reward: dataToUpdate.reward || '',
date: dataToUpdate.date || new Date().toISOString().slice(0, 19).replace('T', ' ') // 确保有日期
date: dataToUpdate.date || new Date().toISOString().slice(0, 19).replace('T', ' ')
};
console.log('更新需求的数据:', payload);
const response = await axiosInstance.put(`/demands/update/${id}`, payload);
return response.data;
} catch (error) {

View File

@ -36,8 +36,8 @@
<td>{{ demand.reward || '无赏金' }}</td>
<td>{{ formatDate(demand.date) }}</td>
<td>
<!-- <button @click="editDemand(demand)" class="action-button edit">编辑</button>-->
<!-- <button @click="confirmDeleteDemand(demand.id)" class="action-button delete">删除</button>-->
<button @click="editDemand(demand)" class="action-button edit">编辑</button>
<button @click="confirmDeleteDemand(demand.id)" class="action-button delete">删除</button>
</td>
</tr>
</tbody>

View File

@ -62,7 +62,7 @@ export const logoutUser = () => { // 不再是 async因为它不执行异步
// console.log('jwt.js: logoutUser called. Clearing local storage.');
localStorage.removeItem('access_token');
localStorage.removeItem('user_id');
sessionStorage.removeItem('currentUser'); // 同时清除sessionStorage中的用户信息
//sessionStorage.removeItem('currentUser'); // 同时清除sessionStorage中的用户信息
// 导航将由调用者(如路由守卫)处理
};

View File

@ -172,9 +172,16 @@
</div>
<div class="form-row">
<span class="label">QQ号</span>
<input v-model="addForm.qq_code" class="input" placeholder="可选" />
<input
v-model="addForm.qq_code"
class="input"
placeholder="可选"
@input="validateQQ"
type="text"
pattern="[0-9]*"
inputmode="numeric"
/>
</div>
<div class="form-row">
<span class="label">需求内容</span>
<textarea
@ -303,8 +310,18 @@ const closeModal = () => {
}
//
const openAddModal = (demand) => {
reply.value = demand;
const openAddModal = () => {
//
addForm.value = {
requester: '',
content: '',
reward: '',
qq_code: '',
sendcontent: '',
author: '',
author_contact: ''
};
addError.value = '';
showAddModal.value = true;
}
@ -314,12 +331,25 @@ function closeAddModal() {
addError.value = ''
}
//
// script setup
const validateQQ = (event) => {
//
addForm.value.qq_code = event.target.value.replace(/[^\d]/g, '');
}
// submitAddForm QQ
async function submitAddForm() {
if (!addForm.value.content?.trim()) {
addError.value = '需求内容不能为空';
return;
}
// QQ
if (addForm.value.qq_code && !/^\d+$/.test(addForm.value.qq_code)) {
addError.value = 'QQ号必须为纯数字';
return;
}
addLoading.value = true;
addError.value = '';
try {

View File

@ -301,7 +301,16 @@ const changePage = (page) => {
//
const goToMapDetail = (id) => {
sessionStorage.setItem('maps_view_mode', viewMode.value)
//
const state = {
viewMode: viewMode.value,
currentPage: currentPage.value,
searchValue: searchValue.value,
playerCountFilter: playerCountFilter.value,
tagFilter: tagFilter.value,
selectedOrder: selectedOrder.value
}
sessionStorage.setItem('maps_state', JSON.stringify(state))
router.push(`/map/${id}`)
}
@ -324,13 +333,26 @@ const scrollToTop = () => {
}
onMounted(() => {
const savedMode = sessionStorage.getItem('maps_view_mode')
if (savedMode) {
viewMode.value = savedMode
} else if (window.innerWidth <= 700) {
viewMode.value = 'card'
//
const savedState = sessionStorage.getItem('maps_state')
if (savedState) {
const state = JSON.parse(savedState)
viewMode.value = state.viewMode
currentPage.value = state.currentPage
searchValue.value = state.searchValue
playerCountFilter.value = state.playerCountFilter
tagFilter.value = state.tagFilter
selectedOrder.value = state.selectedOrder
// 使
fetchMaps(currentPage.value)
} else {
//
if (window.innerWidth <= 700) {
viewMode.value = 'card'
}
fetchMaps(1)
}
fetchMaps(1)
getAllTags().then(tags => {
tagOptions.value = tags
})