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 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 axios from 'axios';
import { showToast } from 'vant';
// import router from '@/router/index'; // import router from '@/router/index';
// import { A_COMMON_CLEAR_TOKEN } from '@/stores/constance/constance.common.js'; // 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.resolve(response);
} }
// return Promise.reject(/* new Error(response.message || 'Error') */); // 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; export default service;

View File

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