hookehuyr

feat(打卡详情): 完善计数打卡功能的数据初始化和回调处理

添加感恩计数打卡相关数据字段和回调处理逻辑
优化目标选择匹配逻辑,优先使用id匹配
将异步操作改为await方式确保执行顺序
......@@ -372,11 +372,16 @@ export function useCheckin() {
}
}
// 计数打卡相关数据
const gratitudeCount = ref(0)
const gratitudeFormList = ref([])
/**
* 初始化编辑数据
* @param {Array} taskOptions - 任务选项列表
* @param {Object} handlers - 回调处理函数
*/
const initEditData = async (taskOptions = []) => {
const initEditData = async (taskOptions = [], handlers = {}) => {
if (route.query.status === 'edit') {
try {
const { code, data } = await getUploadTaskInfoAPI({ i: route.query.post_id })
......@@ -386,12 +391,43 @@ export function useCheckin() {
// 小作业ID
subTaskId.value = data?.subtask_id
// 恢复计数打卡数据
if (data?.gratitude_count) {
gratitudeCount.value = data.gratitude_count
}
if (data?.gratitude_form_list && Array.isArray(data.gratitude_form_list)) {
gratitudeFormList.value = data.gratitude_form_list
}
// 更新选中的任务显示
if (subTaskId.value) {
selectedTaskValue.value = [subTaskId.value]
if (taskOptions && taskOptions.length > 0) {
const option = taskOptions.find(o => o.value === subTaskId.value)
selectedTaskText.value = option ? option.text : ''
// 处理计数打卡的回调
if (route.query.task_type === 'count' && option) {
// 1. 更新动态表单字段
if (handlers.onTaskFound) {
handlers.onTaskFound(option)
}
// 2. 确保目标列表已加载
if (handlers.ensureTargetList) {
await handlers.ensureTargetList(subTaskId.value)
}
// 3. 恢复选中的对象
if (gratitudeFormList.value.length > 0 && handlers.setTargets) {
handlers.setTargets(gratitudeFormList.value)
}
// 4. 恢复次数
if (gratitudeCount.value && handlers.setCount) {
handlers.setCount(gratitudeCount.value)
}
}
}
}
......@@ -442,6 +478,8 @@ export function useCheckin() {
isMakeup,
maxCount,
canSubmit,
gratitudeCount,
gratitudeFormList,
// 方法
beforeRead,
......
......@@ -208,7 +208,9 @@ const {
delItem,
onSubmit,
switchType,
initEditData
initEditData,
gratitudeCount,
gratitudeFormList
} = useCheckin()
// 动态字段文字
......@@ -275,7 +277,7 @@ const updateDynamicFormFields = (option) => {
}
// 确认作业选择
const onConfirmTask = ({ selectedOptions }) => {
const onConfirmTask = async ({ selectedOptions }) => {
const option = selectedOptions[0]
selectedTaskText.value = option.text
selectedTaskValue.value = [option.value]
......@@ -288,12 +290,12 @@ const onConfirmTask = ({ selectedOptions }) => {
// 如果是计数打卡,根据选中的作业ID查询计数对象
if (taskType.value === 'count') {
fetchTargetList(selectedTaskValue.value[0])
await fetchTargetList(selectedTaskValue.value[0])
}
}
// 监听作业选择变化, 当选中的作业ID变化时, 查询对应的计数对象
// watch(selectedTaskValue, (newVal) => {
// watch(selectedTaskValue, async (newVal) => {
// if (taskType.value === 'count' && newVal && newVal.length > 0) {
// // fetchTargetList(newVal[0])
// console.warn('选中的作业ID:', newVal[0]);
......@@ -310,7 +312,8 @@ const editingTarget = ref(null)
const isConfirmMode = ref(false) // 是否为确认模式(首次点击选中)
const toggleTarget = (item) => {
const index = selectedTargets.value.findIndex(t => t.name === item.name)
// 优先使用id匹配,如果id不存在,则使用name匹配
const index = selectedTargets.value.findIndex(t => (item.id ? t.id === item.id : t.name === item.name))
if (index > -1) {
// 取消选中
selectedTargets.value.splice(index, 1)
......@@ -916,12 +919,25 @@ onMounted(async () => {
// 如果是计数打卡,根据选中的作业ID查询计数对象
if (taskType.value === 'count') {
fetchTargetList(selectedTaskValue.value[0])
await fetchTargetList(selectedTaskValue.value[0])
}
}
// 初始化编辑数据
await initEditData(taskOptions.value)
await initEditData(taskOptions.value, {
onTaskFound: (option) => updateDynamicFormFields(option),
ensureTargetList: async (id) => {
if (targetList.value.length === 0) {
await fetchTargetList(id)
}
},
setTargets: (list) => {
selectedTargets.value = list
},
setCount: (val) => {
countValue.value = val
}
})
console.warn(selectedTaskValue.value);
})
......