feat(survey): 问卷创建页面增加获取问卷详情和修改问卷状态功能

- 新增 getSurveysDetail 和 changeStatus 函数
- 实现问卷详情获取和状态修改功能
- 优化 saveSetting函数,支持不同数据类型转换- 添加问卷状态检查和自动修改逻辑
This commit is contained in:
陈昱达
2025-03-21 16:35:46 +08:00
parent a253372576
commit 18375e5b31
3 changed files with 97 additions and 42 deletions

View File

@@ -58,3 +58,17 @@ export function getSurveyTemplate(sn, params) {
params
});
}
export function getSurveysDetail(sn, params) {
return request({
url: `/console/surveys/${sn}`,
method: 'get',
params
});
}
export function changeStatus(params) {
return request({
url: `/console/surveys/${params.sn}/status`,
method: 'PATCH',
data: params
});
}

View File

@@ -1,4 +1,5 @@
import axios from 'axios';
import { showToast } from 'vant';
// import router from '@/router/index';
// import { A_COMMON_CLEAR_TOKEN } from '@/stores/constance/constance.common.js';
@@ -55,39 +56,45 @@ service.interceptors.response.use(
return Promise.resolve(response);
}
// return Promise.reject(/* new Error(response.message || 'Error') */);
},
(error) => {
// for debug
// if (error.response.status === 401) {
// const query = router.currentRoute.value.query;
// //关闭已弹出的所有弹框,防止弹框重叠
// // Modal.destroyAll();
// store.dispatch(A_COMMON_CLEAR_TOKEN);
// window.parent.postMessage(
// {
// code: '301',
// params: {}
// },
// '*'
// );
// store.commit('common/M_COMMON_SET_TOKEN_UNAUTHORIZED', false);
// } else if (error.response.status === 403) {
// router.push({
// path: '/error/403'
// });
// } else if (error.response.status === 404) {
// router.push({
// path: '/error/404'
// });
// } else if (error.response.status === 500) {
// router.push({
// path: '/error/500'
// });
// } else {
// // message.error(error.response.data?.message || '服务器错误');
// }
if (error.response.data?.message) {
showToast({
message: error.response.data?.message
});
}
return Promise.reject(error.response);
}
// (error) => {
// // for debug
// if (error.response.status === 401) {
// const query = router.currentRoute.value.query;
// //关闭已弹出的所有弹框,防止弹框重叠
// // Modal.destroyAll();
// store.dispatch(A_COMMON_CLEAR_TOKEN);
// window.parent.postMessage(
// {
// code: '301',
// params: {}
// },
// '*'
// );
// store.commit('common/M_COMMON_SET_TOKEN_UNAUTHORIZED', false);
// } else if (error.response.status === 403) {
// router.push({
// path: '/error/403'
// });
// } else if (error.response.status === 404) {
// router.push({
// path: '/error/404'
// });
// } else if (error.response.status === 500) {
// router.push({
// path: '/error/500'
// });
// } else {
// // message.error(error.response.data?.message || '服务器错误');
// }
// return Promise.reject(error.response);
// }
);
export default service;

View File

@@ -167,7 +167,7 @@
size="0.5rem"
:active-value="1"
:inactive-value="0"
@change="saveSetting('is_publish_number', ['publish_number'])"
@change="saveSetting('is_publish_number', ['publish_number'], 'number')"
></van-switch>
</template>
</van-cell>
@@ -181,7 +181,7 @@
label="投放数量最大为"
input-align="right"
type="number"
@blur="saveSetting($event, 'publish_number')"
@blur="saveSetting"
>
<template #right-icon> </template>
</van-field>
@@ -277,7 +277,7 @@
label="同一个IP地址只能作答"
:border="false"
input-align="right"
@blur="saveSetting($event, 'is_number')"
@blur="saveSetting"
>
<template #right-icon> </template>
</van-field>
@@ -290,7 +290,8 @@
size="0.5rem"
:active-value="1"
:inactive-value="0"
@change="saveSetting('is_browser_number', 'browser_number')"
type="number"
@change="saveSetting('is_browser_number', ['browser_number'])"
></van-switch>
</template>
</van-cell>
@@ -304,7 +305,7 @@
label="同一个浏览器只能作答"
:border="false"
input-align="right"
@blur="saveSetting($event, 'browser_number')"
@blur="saveSetting"
>
<template #right-icon> </template>
</van-field>
@@ -342,7 +343,9 @@ import {
snQuestions,
sync,
saveSettings,
saveProjectName
saveProjectName,
getSurveysDetail,
changeStatus
} from '@/api/design/index';
import Design from '@/views/Design/Index.vue';
import { useCounterStore } from '@/stores/counter';
@@ -391,6 +394,7 @@ const onConfirmDate = (e) => {
questionInfo.value.survey.end_time = e;
}
timePickerModel.value = false;
saveSetting();
};
// 获取选中的题目
@@ -489,25 +493,42 @@ const saveQuestionItem = (questionJson) => {
};
// 保存设置
const saveSetting = (parentKey, childKeys) => {
const saveSetting = (parentKey, childKeys, type) => {
const query = {};
function changeValueType(type, value) {
if (type) {
switch (type) {
case 'number':
return Number(value);
default:
return value;
}
} else {
return value;
}
}
settingList.map((item) => {
if (item === 'access_password') {
query[item] = JSON.stringify(questionInfo.value.survey[item]);
} else {
query[item] = questionInfo.value.survey[item];
if (item === 'is_time' && query[item] === 0) {
delete query['start_time'];
delete query['end_time'];
}
}
});
// 增删 修改 数据结构
if (parentKey) {
if (childKeys) {
childKeys.map((key) => {
query[key] = query[parentKey] === 1 ? query[key] : 0;
query[key] = query[parentKey] === 1 ? changeValueType(type, query[key]) : 0;
if (parentKey === 'is_time' && query[parentKey] === 0) {
delete query[key];
}
});
}
saveSettings({
sn: route.query.sn,
...query
@@ -587,8 +608,21 @@ const previewQuestion = () => {
router.push({ name: 'preview', query: { ...route.query } });
};
const surveyDetailFun = (back) => {
getSurveysDetail(route.query.sn).then((res) => {
if (res.data) {
// 投放中
if (res.data.data.status === 1) {
changeStatus({ sn: route.query.sn, status: 0 });
}
}
});
};
onMounted(async () => {
await getQuestionDetail();
surveyDetailFun();
});
</script>