feat: 更新消息提示方式,优化用户交互体验
Showing
10 changed files
with
73 additions
and
88 deletions
| @@ -124,7 +124,6 @@ const formRules = reactive({ | @@ -124,7 +124,6 @@ const formRules = reactive({ | ||
| 124 | categoryId: [{ required: true, message: '请选择部位分类', trigger: 'change' }], | 124 | categoryId: [{ required: true, message: '请选择部位分类', trigger: 'change' }], |
| 125 | equipmentId: [{ required: true, message: '请选择用具分类', trigger: 'change' }], | 125 | equipmentId: [{ required: true, message: '请选择用具分类', trigger: 'change' }], |
| 126 | exerciseType: [{ required: true, message: '请选择动作类型', trigger: 'change' }], | 126 | exerciseType: [{ required: true, message: '请选择动作类型', trigger: 'change' }], |
| 127 | - urlTutorial: [{ required: true, message: '请上传教程地址', trigger: 'blur' }], | ||
| 128 | stepDescription: [{ required: true, message: '请输入动作步骤', trigger: 'blur' }] | 127 | stepDescription: [{ required: true, message: '请输入动作步骤', trigger: 'blur' }] |
| 129 | }) | 128 | }) |
| 130 | 129 |
| @@ -85,7 +85,7 @@ const getList = async () => { | @@ -85,7 +85,7 @@ const getList = async () => { | ||
| 85 | tableData.value = res.list || [] | 85 | tableData.value = res.list || [] |
| 86 | queryParams.total = res.total || 0 | 86 | queryParams.total = res.total || 0 |
| 87 | } catch (err) { | 87 | } catch (err) { |
| 88 | - ElMessage.error('请求失败,请检查网络或接口') | 88 | + message.error('请求失败,请检查网络或接口') |
| 89 | } finally { | 89 | } finally { |
| 90 | loading.value = false | 90 | loading.value = false |
| 91 | } | 91 | } |
| @@ -111,17 +111,17 @@ const openDetailDialog = (row) => { | @@ -111,17 +111,17 @@ const openDetailDialog = (row) => { | ||
| 111 | // ===================== 删除 ===================== | 111 | // ===================== 删除 ===================== |
| 112 | const handleDelete = async (id) => { | 112 | const handleDelete = async (id) => { |
| 113 | try { | 113 | try { |
| 114 | - await ElMessageBox.confirm('确定要删除吗?', '提示', { | 114 | + await message.confirm('确定要删除吗?', '提示', { |
| 115 | confirmButtonText: '确定', | 115 | confirmButtonText: '确定', |
| 116 | cancelButtonText: '取消', | 116 | cancelButtonText: '取消', |
| 117 | type: 'warning' | 117 | type: 'warning' |
| 118 | }) | 118 | }) |
| 119 | await stuTrainingRecordsApi.deleteStuTrainingRecordPage(id) | 119 | await stuTrainingRecordsApi.deleteStuTrainingRecordPage(id) |
| 120 | - ElMessage.success('删除成功') | 120 | + message.success('删除成功') |
| 121 | getList() | 121 | getList() |
| 122 | } catch (err) { | 122 | } catch (err) { |
| 123 | if (err !== 'cancel') { | 123 | if (err !== 'cancel') { |
| 124 | - ElMessage.error('删除失败') | 124 | + message.error('删除失败') |
| 125 | } | 125 | } |
| 126 | } | 126 | } |
| 127 | } | 127 | } |
| @@ -89,11 +89,11 @@ | @@ -89,11 +89,11 @@ | ||
| 89 | 89 | ||
| 90 | <script setup> | 90 | <script setup> |
| 91 | import { ref, onMounted, reactive, computed, watch } from 'vue' | 91 | import { ref, onMounted, reactive, computed, watch } from 'vue' |
| 92 | -import { ElMessage, ElMessageBox } from 'element-plus' | 92 | + |
| 93 | import { SupersetsApi } from '@/api/store/training/Supersets' | 93 | import { SupersetsApi } from '@/api/store/training/Supersets' |
| 94 | import { ExercisesApi } from '@/api/store/training/pose' | 94 | import { ExercisesApi } from '@/api/store/training/pose' |
| 95 | import { dateFormatter } from '@/utils/formatTime' | 95 | import { dateFormatter } from '@/utils/formatTime' |
| 96 | - | 96 | +const message = useMessage() // 消息弹窗 |
| 97 | // ===================== 查询参数 ===================== | 97 | // ===================== 查询参数 ===================== |
| 98 | const queryParams = reactive({ | 98 | const queryParams = reactive({ |
| 99 | pageNo: 1, | 99 | pageNo: 1, |
| @@ -170,7 +170,7 @@ const loadExercisesList = async () => { | @@ -170,7 +170,7 @@ const loadExercisesList = async () => { | ||
| 170 | const res = await ExercisesApi.getExercisesList(false) | 170 | const res = await ExercisesApi.getExercisesList(false) |
| 171 | exercisesList.value = res || [] | 171 | exercisesList.value = res || [] |
| 172 | } catch (err) { | 172 | } catch (err) { |
| 173 | - ElMessage.error('加载动作列表失败') | 173 | + message.error('加载动作列表失败') |
| 174 | } | 174 | } |
| 175 | } | 175 | } |
| 176 | 176 | ||
| @@ -187,7 +187,7 @@ const getList = async () => { | @@ -187,7 +187,7 @@ const getList = async () => { | ||
| 187 | tableData.value = list | 187 | tableData.value = list |
| 188 | total.value = resTotal | 188 | total.value = resTotal |
| 189 | } catch (err) { | 189 | } catch (err) { |
| 190 | - ElMessage.error('获取超级组列表失败') | 190 | + message.error('获取超级组列表失败') |
| 191 | } finally { | 191 | } finally { |
| 192 | loading.value = false | 192 | loading.value = false |
| 193 | } | 193 | } |
| @@ -229,24 +229,24 @@ const handleEdit = async (row) => { | @@ -229,24 +229,24 @@ const handleEdit = async (row) => { | ||
| 229 | }) | 229 | }) |
| 230 | dialogVisible.value = true | 230 | dialogVisible.value = true |
| 231 | } catch (err) { | 231 | } catch (err) { |
| 232 | - ElMessage.error('加载编辑数据失败') | 232 | + message.error('加载编辑数据失败') |
| 233 | } | 233 | } |
| 234 | } | 234 | } |
| 235 | 235 | ||
| 236 | // ===================== 删除 ===================== | 236 | // ===================== 删除 ===================== |
| 237 | const handleDelete = async (row) => { | 237 | const handleDelete = async (row) => { |
| 238 | try { | 238 | try { |
| 239 | - await ElMessageBox.confirm(`确定要删除超级组「${row.name}」吗?`, '提示', { | 239 | + await message.confirm(`确定要删除超级组「${row.name}」吗?`, '提示', { |
| 240 | confirmButtonText: '确定', | 240 | confirmButtonText: '确定', |
| 241 | cancelButtonText: '取消', | 241 | cancelButtonText: '取消', |
| 242 | type: 'warning' | 242 | type: 'warning' |
| 243 | }) | 243 | }) |
| 244 | await SupersetsApi.deleteSupersets(row.id) | 244 | await SupersetsApi.deleteSupersets(row.id) |
| 245 | - ElMessage.success('删除成功') | 245 | + message.success('删除成功') |
| 246 | getList() | 246 | getList() |
| 247 | } catch (err) { | 247 | } catch (err) { |
| 248 | if (err !== 'cancel') { | 248 | if (err !== 'cancel') { |
| 249 | - ElMessage.error('删除失败') | 249 | + message.error('删除失败') |
| 250 | } | 250 | } |
| 251 | } | 251 | } |
| 252 | } | 252 | } |
| @@ -275,17 +275,17 @@ const submitForm = async () => { | @@ -275,17 +275,17 @@ const submitForm = async () => { | ||
| 275 | } | 275 | } |
| 276 | if (isEdit.value) { | 276 | if (isEdit.value) { |
| 277 | await SupersetsApi.updateSupersets(payload) | 277 | await SupersetsApi.updateSupersets(payload) |
| 278 | - ElMessage.success('修改超级组成功!') | 278 | + message.success('修改超级组成功!') |
| 279 | } else { | 279 | } else { |
| 280 | await SupersetsApi.createSupersets(payload) | 280 | await SupersetsApi.createSupersets(payload) |
| 281 | - ElMessage.success('新增超级组成功!') | 281 | + message.success('新增超级组成功!') |
| 282 | } | 282 | } |
| 283 | dialogVisible.value = false | 283 | dialogVisible.value = false |
| 284 | getList() | 284 | getList() |
| 285 | } catch (err) { | 285 | } catch (err) { |
| 286 | const msg = err?.response?.data?.msg || err?.message | 286 | const msg = err?.response?.data?.msg || err?.message |
| 287 | if (msg && typeof msg !== 'object') { | 287 | if (msg && typeof msg !== 'object') { |
| 288 | - ElMessage.error(msg) | 288 | + message.error(msg) |
| 289 | } | 289 | } |
| 290 | } | 290 | } |
| 291 | } | 291 | } |
| @@ -38,7 +38,7 @@ | @@ -38,7 +38,7 @@ | ||
| 38 | <el-table-column prop="name" label="文件夹名字" align="center" /> | 38 | <el-table-column prop="name" label="文件夹名字" align="center" /> |
| 39 | <el-table-column prop="cover" label="封面" align="center" min-width="120"> | 39 | <el-table-column prop="cover" label="封面" align="center" min-width="120"> |
| 40 | <template #default="scope"> | 40 | <template #default="scope"> |
| 41 | - <img class="cover-img" :src="scope.row.urlCover || lostImg" alt="模板封面" /> | 41 | + <img class="cover-img" :src="scope.row.urlCover" alt="模板封面" /> |
| 42 | </template> | 42 | </template> |
| 43 | </el-table-column> | 43 | </el-table-column> |
| 44 | <el-table-column prop="createTime" label="创建时间" align="center" width="220" :formatter="dateFormatter" /> | 44 | <el-table-column prop="createTime" label="创建时间" align="center" width="220" :formatter="dateFormatter" /> |
| @@ -103,9 +103,9 @@ import { ref, reactive, onMounted, watch } from 'vue' | @@ -103,9 +103,9 @@ import { ref, reactive, onMounted, watch } from 'vue' | ||
| 103 | import { dateFormatter } from '@/utils/formatTime' | 103 | import { dateFormatter } from '@/utils/formatTime' |
| 104 | import { templateCategorysApi } from '@/api/store/training/templateCategorys' | 104 | import { templateCategorysApi } from '@/api/store/training/templateCategorys' |
| 105 | import { TrainingTemplatesApi } from '@/api/store/training/templates' | 105 | import { TrainingTemplatesApi } from '@/api/store/training/templates' |
| 106 | -import lostImg from '@/assets/imgs/lost.png' | ||
| 107 | -import { ElMessage, ElMessageBox } from 'element-plus' | ||
| 108 | 106 | ||
| 107 | + | ||
| 108 | +const message= useMessage() // 消息弹窗 | ||
| 109 | // ===================== 列表状态 ===================== | 109 | // ===================== 列表状态 ===================== |
| 110 | const tableData = ref([]) | 110 | const tableData = ref([]) |
| 111 | const loading = ref(false) | 111 | const loading = ref(false) |
| @@ -144,7 +144,7 @@ const loadTemplateList = async () => { | @@ -144,7 +144,7 @@ const loadTemplateList = async () => { | ||
| 144 | const res = await TrainingTemplatesApi.getTemplateList(false) | 144 | const res = await TrainingTemplatesApi.getTemplateList(false) |
| 145 | templateList.value = res || [] | 145 | templateList.value = res || [] |
| 146 | } catch { | 146 | } catch { |
| 147 | - ElMessage.error('加载模板列表失败') | 147 | + message.error('加载模板列表失败') |
| 148 | } | 148 | } |
| 149 | } | 149 | } |
| 150 | 150 | ||
| @@ -174,7 +174,7 @@ const getList = async () => { | @@ -174,7 +174,7 @@ const getList = async () => { | ||
| 174 | tableData.value = res.list || [] | 174 | tableData.value = res.list || [] |
| 175 | queryParams.total = res.total || 0 | 175 | queryParams.total = res.total || 0 |
| 176 | } catch { | 176 | } catch { |
| 177 | - ElMessage.error('请求失败,请检查网络或接口') | 177 | + message.error('请求失败,请检查网络或接口') |
| 178 | } finally { | 178 | } finally { |
| 179 | loading.value = false | 179 | loading.value = false |
| 180 | } | 180 | } |
| @@ -238,13 +238,13 @@ const submitForm = async () => { | @@ -238,13 +238,13 @@ const submitForm = async () => { | ||
| 238 | try { | 238 | try { |
| 239 | if (isEdit.value) { | 239 | if (isEdit.value) { |
| 240 | await templateCategorysApi.updateTemplateCategorys(payload) | 240 | await templateCategorysApi.updateTemplateCategorys(payload) |
| 241 | - ElMessage.success('编辑成功') | 241 | + message.success('编辑成功') |
| 242 | } else { | 242 | } else { |
| 243 | await templateCategorysApi.createTemplateCategorys(payload) | 243 | await templateCategorysApi.createTemplateCategorys(payload) |
| 244 | - ElMessage.success('新增成功') | 244 | + message.success('新增成功') |
| 245 | } | 245 | } |
| 246 | } catch { | 246 | } catch { |
| 247 | - ElMessage.error('提交失败,请检查网络或接口') | 247 | + message.error('提交失败,请检查网络或接口') |
| 248 | } finally { | 248 | } finally { |
| 249 | loading.value = false | 249 | loading.value = false |
| 250 | dialogVisible.value = false | 250 | dialogVisible.value = false |
| @@ -255,16 +255,16 @@ const submitForm = async () => { | @@ -255,16 +255,16 @@ const submitForm = async () => { | ||
| 255 | // ===================== 删除 ===================== | 255 | // ===================== 删除 ===================== |
| 256 | const handleDelete = async (id) => { | 256 | const handleDelete = async (id) => { |
| 257 | try { | 257 | try { |
| 258 | - await ElMessageBox.confirm('确定要删除吗?', '提示', { | 258 | + await message.confirm('确定要删除吗?', '提示', { |
| 259 | confirmButtonText: '确定', | 259 | confirmButtonText: '确定', |
| 260 | cancelButtonText: '取消', | 260 | cancelButtonText: '取消', |
| 261 | type: 'warning' | 261 | type: 'warning' |
| 262 | }) | 262 | }) |
| 263 | await templateCategorysApi.deleteTemplateCategorys(id) | 263 | await templateCategorysApi.deleteTemplateCategorys(id) |
| 264 | - ElMessage.success('删除成功') | 264 | + message.success('删除成功') |
| 265 | } catch (err) { | 265 | } catch (err) { |
| 266 | if (err !== 'cancel') { | 266 | if (err !== 'cancel') { |
| 267 | - ElMessage.error('删除失败,请检查网络或接口') | 267 | + message.error('删除失败,请检查网络或接口') |
| 268 | } | 268 | } |
| 269 | } finally { | 269 | } finally { |
| 270 | getList() | 270 | getList() |
| @@ -97,13 +97,13 @@ | @@ -97,13 +97,13 @@ | ||
| 97 | </template> | 97 | </template> |
| 98 | <script setup> | 98 | <script setup> |
| 99 | import { ref, onMounted, reactive, nextTick, watch } from 'vue' | 99 | import { ref, onMounted, reactive, nextTick, watch } from 'vue' |
| 100 | -import { ElMessage, ElMessageBox } from 'element-plus' | 100 | + |
| 101 | import { Minus, Plus } from '@element-plus/icons-vue' | 101 | import { Minus, Plus } from '@element-plus/icons-vue' |
| 102 | import { TrainingTemplatesApi } from '@/api/store/training/templates' | 102 | import { TrainingTemplatesApi } from '@/api/store/training/templates' |
| 103 | import { ExercisesApi } from '@/api/store/training/pose' | 103 | import { ExercisesApi } from '@/api/store/training/pose' |
| 104 | import ExerciseSetTable from '../templates/ExerciseSetTable.vue' | 104 | import ExerciseSetTable from '../templates/ExerciseSetTable.vue' |
| 105 | import { SupersetsApi } from '@/api/store/training/Supersets' | 105 | import { SupersetsApi } from '@/api/store/training/Supersets' |
| 106 | - | 106 | +const message=useMessage() // 消息弹窗 |
| 107 | // ==================== 常量定义 ==================== | 107 | // ==================== 常量定义 ==================== |
| 108 | const UNIT_TYPE = { GROUP: 1, SUPERSET: 2 } | 108 | const UNIT_TYPE = { GROUP: 1, SUPERSET: 2 } |
| 109 | 109 | ||
| @@ -169,7 +169,7 @@ const loadSuperGroupList = async () => { | @@ -169,7 +169,7 @@ const loadSuperGroupList = async () => { | ||
| 169 | superGroupList.value = res || [] | 169 | superGroupList.value = res || [] |
| 170 | } catch (err) { | 170 | } catch (err) { |
| 171 | console.error('加载超级组列表失败:', err) | 171 | console.error('加载超级组列表失败:', err) |
| 172 | - ElMessage.error('加载超级组列表失败') | 172 | + |
| 173 | } | 173 | } |
| 174 | } | 174 | } |
| 175 | 175 | ||
| @@ -179,7 +179,7 @@ const loadExercisesList = async () => { | @@ -179,7 +179,7 @@ const loadExercisesList = async () => { | ||
| 179 | exercisesList.value = res || [] | 179 | exercisesList.value = res || [] |
| 180 | } catch (err) { | 180 | } catch (err) { |
| 181 | console.error('加载动作列表失败:', err) | 181 | console.error('加载动作列表失败:', err) |
| 182 | - ElMessage.error('加载动作列表失败') | 182 | + |
| 183 | } | 183 | } |
| 184 | } | 184 | } |
| 185 | 185 | ||
| @@ -217,7 +217,7 @@ const loadTemplateDetail = async (id) => { | @@ -217,7 +217,7 @@ const loadTemplateDetail = async (id) => { | ||
| 217 | }) | 217 | }) |
| 218 | } catch (err) { | 218 | } catch (err) { |
| 219 | console.error('获取模板详情失败:', err) | 219 | console.error('获取模板详情失败:', err) |
| 220 | - ElMessage.error('获取模板详情失败') | 220 | + |
| 221 | } finally { | 221 | } finally { |
| 222 | loading.value = false | 222 | loading.value = false |
| 223 | } | 223 | } |
| @@ -256,21 +256,21 @@ const getExerciseName = (id) => { | @@ -256,21 +256,21 @@ const getExerciseName = (id) => { | ||
| 256 | const addUnit = () => { | 256 | const addUnit = () => { |
| 257 | formData.units.push(createDefaultUnit(formData.units.length + 1)) | 257 | formData.units.push(createDefaultUnit(formData.units.length + 1)) |
| 258 | updateDynamicRules() | 258 | updateDynamicRules() |
| 259 | - ElMessage.success('新增单元成功(可切换为超级组)') | 259 | + message.success('新增单元成功(可切换为超级组)') |
| 260 | } | 260 | } |
| 261 | 261 | ||
| 262 | const delUnit = (unitIndex) => { | 262 | const delUnit = (unitIndex) => { |
| 263 | if (formData.units.length <= 1) { | 263 | if (formData.units.length <= 1) { |
| 264 | - ElMessage.warning('至少保留一个单元') | 264 | + message.warning('至少保留一个单元') |
| 265 | return | 265 | return |
| 266 | } | 266 | } |
| 267 | - ElMessageBox.confirm('确定要删除这个单元吗?', '提示', { type: 'warning' }).then(() => { | 267 | + message.confirm('确定要删除这个单元吗?', '提示', { type: 'warning' }).then(() => { |
| 268 | formData.units.splice(unitIndex, 1) | 268 | formData.units.splice(unitIndex, 1) |
| 269 | formData.units.forEach((unit, index) => { | 269 | formData.units.forEach((unit, index) => { |
| 270 | unit.sortOrder = index + 1 | 270 | unit.sortOrder = index + 1 |
| 271 | }) | 271 | }) |
| 272 | updateDynamicRules() | 272 | updateDynamicRules() |
| 273 | - ElMessage.success('单元删除成功') | 273 | + message.success('单元删除成功') |
| 274 | }) | 274 | }) |
| 275 | } | 275 | } |
| 276 | 276 | ||
| @@ -313,7 +313,7 @@ const onSelectItem = async (unitIndex, selectId) => { | @@ -313,7 +313,7 @@ const onSelectItem = async (unitIndex, selectId) => { | ||
| 313 | 313 | ||
| 314 | // ==================== 表单提交 ==================== | 314 | // ==================== 表单提交 ==================== |
| 315 | const handleCancel = () => { | 315 | const handleCancel = () => { |
| 316 | - ElMessage.info('取消保存表单内容') | 316 | + |
| 317 | formRef.value?.resetFields() | 317 | formRef.value?.resetFields() |
| 318 | Object.assign(formData, { | 318 | Object.assign(formData, { |
| 319 | id: 0, | 319 | id: 0, |
| @@ -333,13 +333,13 @@ const handleSubmit = async () => { | @@ -333,13 +333,13 @@ const handleSubmit = async () => { | ||
| 333 | try { | 333 | try { |
| 334 | await formRef.value.validate() | 334 | await formRef.value.validate() |
| 335 | } catch { | 335 | } catch { |
| 336 | - ElMessage.error('请按照要求填写') | 336 | + message.error('请按照要求填写') |
| 337 | return | 337 | return |
| 338 | } | 338 | } |
| 339 | 339 | ||
| 340 | const hasEmptyExercise = formData.units.some((unit) => !unit.exercises[0].exerciseId) | 340 | const hasEmptyExercise = formData.units.some((unit) => !unit.exercises[0].exerciseId) |
| 341 | if (hasEmptyExercise) { | 341 | if (hasEmptyExercise) { |
| 342 | - ElMessage.warning('请为所有动作组选择动作名称') | 342 | + message.warning('请为所有动作组选择动作名称') |
| 343 | return | 343 | return |
| 344 | } | 344 | } |
| 345 | 345 | ||
| @@ -378,11 +378,11 @@ const handleSubmit = async () => { | @@ -378,11 +378,11 @@ const handleSubmit = async () => { | ||
| 378 | } else { | 378 | } else { |
| 379 | await TrainingTemplatesApi.createTrainingTemplates(submitData) | 379 | await TrainingTemplatesApi.createTrainingTemplates(submitData) |
| 380 | } | 380 | } |
| 381 | - ElMessage.success('模板保存成功!') | 381 | + message.success('模板保存成功!') |
| 382 | router.back() | 382 | router.back() |
| 383 | } catch (err) { | 383 | } catch (err) { |
| 384 | console.error('保存失败:', err?.message || err) | 384 | console.error('保存失败:', err?.message || err) |
| 385 | - ElMessage.error(`保存失败:${err?.message || '网络/服务异常'}`) | 385 | + |
| 386 | } finally { | 386 | } finally { |
| 387 | loading.value = false | 387 | loading.value = false |
| 388 | } | 388 | } |
| @@ -41,7 +41,7 @@ | @@ -41,7 +41,7 @@ | ||
| 41 | <template #default="scope"> | 41 | <template #default="scope"> |
| 42 | <div class="cover-wrapper"> | 42 | <div class="cover-wrapper"> |
| 43 | <!-- 优先显示行数据封面,无则显示占位图 --> | 43 | <!-- 优先显示行数据封面,无则显示占位图 --> |
| 44 | - <img class="cover-img" :src="scope.row.urlCover || lostImg" alt="模板封面" align="center" /> | 44 | + <img class="cover-img" :src="scope.row.urlCover" alt="模板封面" align="center" /> |
| 45 | </div> | 45 | </div> |
| 46 | </template> | 46 | </template> |
| 47 | </el-table-column> | 47 | </el-table-column> |
| @@ -71,15 +71,14 @@ | @@ -71,15 +71,14 @@ | ||
| 71 | </template> | 71 | </template> |
| 72 | 72 | ||
| 73 | <script setup lang="ts"> | 73 | <script setup lang="ts"> |
| 74 | -import { ref, reactive, onMounted } from 'vue' | 74 | +import { ref, reactive, onMounted, watch } from 'vue' |
| 75 | import { useRouter } from 'vue-router' | 75 | import { useRouter } from 'vue-router' |
| 76 | -import { ElMessage, ElMessageBox } from 'element-plus' | ||
| 77 | -import lostImg from '@/assets/imgs/lost.png' | 76 | + |
| 78 | import { Search, Refresh, Plus } from '@element-plus/icons-vue' | 77 | import { Search, Refresh, Plus } from '@element-plus/icons-vue' |
| 79 | import { TrainingTemplatesApi } from '@/api/store/training/templates' | 78 | import { TrainingTemplatesApi } from '@/api/store/training/templates' |
| 80 | import { dateFormatter } from '@/utils/formatTime' | 79 | import { dateFormatter } from '@/utils/formatTime' |
| 81 | -import { watch } from 'vue' | ||
| 82 | 80 | ||
| 81 | +const message = useMessage() | ||
| 83 | // 路由实例 | 82 | // 路由实例 |
| 84 | const router = useRouter() | 83 | const router = useRouter() |
| 85 | const route = useRoute() | 84 | const route = useRoute() |
| @@ -129,7 +128,7 @@ const fetchList = async () => { | @@ -129,7 +128,7 @@ const fetchList = async () => { | ||
| 129 | tableData.value = res.list || [] | 128 | tableData.value = res.list || [] |
| 130 | pagination.total = res.total || 0 | 129 | pagination.total = res.total || 0 |
| 131 | } catch (err) { | 130 | } catch (err) { |
| 132 | - ElMessage.error('获取数据失败') | 131 | + |
| 133 | tableData.value = [] | 132 | tableData.value = [] |
| 134 | pagination.total = 0 | 133 | pagination.total = 0 |
| 135 | } finally { | 134 | } finally { |
| @@ -163,24 +162,19 @@ const handleEdit = (row: any) => { | @@ -163,24 +162,19 @@ const handleEdit = (row: any) => { | ||
| 163 | } | 162 | } |
| 164 | // 删除 | 163 | // 删除 |
| 165 | const handleDelete = (row: any) => { | 164 | const handleDelete = (row: any) => { |
| 166 | - ElMessageBox.confirm( | 165 | + message.delConfirm( |
| 167 | `确定要删除模板「${row.name}」吗?`, | 166 | `确定要删除模板「${row.name}」吗?`, |
| 168 | - '提示', | ||
| 169 | - { | ||
| 170 | - confirmButtonText: '确定', | ||
| 171 | - cancelButtonText: '取消', | ||
| 172 | - type: 'warning' | ||
| 173 | - } | 167 | + |
| 174 | ).then(async () => { | 168 | ).then(async () => { |
| 175 | try { | 169 | try { |
| 176 | await TrainingTemplatesApi.deleteTrainingTemplates(row.id) | 170 | await TrainingTemplatesApi.deleteTrainingTemplates(row.id) |
| 177 | - ElMessage.success('删除成功!') | 171 | + message.success('删除成功!') |
| 178 | fetchList() // 删除后刷新列表 | 172 | fetchList() // 删除后刷新列表 |
| 179 | } catch (err) { | 173 | } catch (err) { |
| 180 | - ElMessage.error('删除失败') | 174 | + console.log('删除失败', err) |
| 181 | } | 175 | } |
| 182 | }).catch(() => { | 176 | }).catch(() => { |
| 183 | - ElMessage.info('已取消删除') | 177 | + message.info('已取消删除') |
| 184 | }) | 178 | }) |
| 185 | } | 179 | } |
| 186 | 180 |
| @@ -72,11 +72,11 @@ | @@ -72,11 +72,11 @@ | ||
| 72 | 72 | ||
| 73 | <script setup lang="ts"> | 73 | <script setup lang="ts"> |
| 74 | import { ref, reactive, onMounted, nextTick } from 'vue' | 74 | import { ref, reactive, onMounted, nextTick } from 'vue' |
| 75 | -import { ElMessage, ElMessageBox } from 'element-plus' | 75 | + |
| 76 | import { Plus, Search, Refresh } from '@element-plus/icons-vue' | 76 | import { Plus, Search, Refresh } from '@element-plus/icons-vue' |
| 77 | import { dateFormatter } from '@/utils/formatTime' | 77 | import { dateFormatter } from '@/utils/formatTime' |
| 78 | import { EquipmentsApi, EquipmentsVO } from '@/api/store/training/tool' | 78 | import { EquipmentsApi, EquipmentsVO } from '@/api/store/training/tool' |
| 79 | - | 79 | +const message = useMessage() |
| 80 | //处理弹窗的参数 | 80 | //处理弹窗的参数 |
| 81 | const loading = ref(false) | 81 | const loading = ref(false) |
| 82 | const tableData = ref<EquipmentsVO[]>([]) | 82 | const tableData = ref<EquipmentsVO[]>([]) |
| @@ -129,7 +129,7 @@ const getList = async () => { | @@ -129,7 +129,7 @@ const getList = async () => { | ||
| 129 | console.log('用具分类分页接口返回数据:', res) | 129 | console.log('用具分类分页接口返回数据:', res) |
| 130 | } catch (err) { | 130 | } catch (err) { |
| 131 | console.error('❌ 请求失败:', err) | 131 | console.error('❌ 请求失败:', err) |
| 132 | - ElMessage.error('请求失败,请检查网络或接口') | 132 | + |
| 133 | } finally { | 133 | } finally { |
| 134 | loading.value = false | 134 | loading.value = false |
| 135 | } | 135 | } |
| @@ -192,15 +192,15 @@ const submitForm = async () => { | @@ -192,15 +192,15 @@ const submitForm = async () => { | ||
| 192 | if (isEdit.value) { | 192 | if (isEdit.value) { |
| 193 | // 编辑逻辑 | 193 | // 编辑逻辑 |
| 194 | await EquipmentsApi.updateEquipments({ id: formData.id, name: formData.toolName }) | 194 | await EquipmentsApi.updateEquipments({ id: formData.id, name: formData.toolName }) |
| 195 | - ElMessage.success('编辑成功') | 195 | + message.success('编辑成功') |
| 196 | } else { | 196 | } else { |
| 197 | // 新增逻辑(调用新增接口) | 197 | // 新增逻辑(调用新增接口) |
| 198 | await EquipmentsApi.createEquipments({ id: formData.id, name: formData.toolName }) | 198 | await EquipmentsApi.createEquipments({ id: formData.id, name: formData.toolName }) |
| 199 | - ElMessage.success('新增成功') | 199 | + message.success('新增成功') |
| 200 | } | 200 | } |
| 201 | } catch (error) { | 201 | } catch (error) { |
| 202 | console.error('❌ 提交失败:', error) | 202 | console.error('❌ 提交失败:', error) |
| 203 | - ElMessage.error('提交失败,请检查网络或接口') | 203 | + |
| 204 | } finally { | 204 | } finally { |
| 205 | loading.value = false | 205 | loading.value = false |
| 206 | dialogVisible.value = false | 206 | dialogVisible.value = false |
| @@ -212,15 +212,11 @@ const submitForm = async () => { | @@ -212,15 +212,11 @@ const submitForm = async () => { | ||
| 212 | // 处理删除 | 212 | // 处理删除 |
| 213 | const handleDelete = async (id: number) => { | 213 | const handleDelete = async (id: number) => { |
| 214 | try { | 214 | try { |
| 215 | - await ElMessageBox.confirm('确定要删除吗?', '提示', { | ||
| 216 | - confirmButtonText: '确定', | ||
| 217 | - cancelButtonText: '取消', | ||
| 218 | - type: 'warning' | ||
| 219 | - }) | 215 | + await message.delConfirm('确定要删除吗?') |
| 220 | 216 | ||
| 221 | // 能走到这里,说明用户点了确定 | 217 | // 能走到这里,说明用户点了确定 |
| 222 | await EquipmentsApi.deleteEquipments(id) | 218 | await EquipmentsApi.deleteEquipments(id) |
| 223 | - ElMessage.success('删除成功') | 219 | + message.success('删除成功') |
| 224 | } catch (err: any) { | 220 | } catch (err: any) { |
| 225 | // -------------------------- | 221 | // -------------------------- |
| 226 | // 关键:判断是不是用户点击了取消 | 222 | // 关键:判断是不是用户点击了取消 |
| @@ -232,7 +228,7 @@ const handleDelete = async (id: number) => { | @@ -232,7 +228,7 @@ const handleDelete = async (id: number) => { | ||
| 232 | 228 | ||
| 233 | // 只有真正的请求错误才走这里 | 229 | // 只有真正的请求错误才走这里 |
| 234 | console.error('❌ 请求失败:', err) | 230 | console.error('❌ 请求失败:', err) |
| 235 | - ElMessage.error('请求失败,请检查网络或接口') | 231 | + |
| 236 | } finally { | 232 | } finally { |
| 237 | getList() // 刷新列表 | 233 | getList() // 刷新列表 |
| 238 | } | 234 | } |
| @@ -112,10 +112,10 @@ | @@ -112,10 +112,10 @@ | ||
| 112 | 112 | ||
| 113 | <script setup> | 113 | <script setup> |
| 114 | import { ref, reactive, watch, onMounted, computed } from 'vue' | 114 | import { ref, reactive, watch, onMounted, computed } from 'vue' |
| 115 | -import { ElMessage } from 'element-plus' | 115 | + |
| 116 | import { TrainingTemplatesApi } from '@/api/store/training/templates' | 116 | import { TrainingTemplatesApi } from '@/api/store/training/templates' |
| 117 | import { trainingPlanApi } from '@/api/store/training/trainingPlan' | 117 | import { trainingPlanApi } from '@/api/store/training/trainingPlan' |
| 118 | - | 118 | +const message = useMessage() |
| 119 | // ==================== Props & Emits ==================== | 119 | // ==================== Props & Emits ==================== |
| 120 | const props = defineProps({ | 120 | const props = defineProps({ |
| 121 | visible: { type: Boolean, default: false }, | 121 | visible: { type: Boolean, default: false }, |
| @@ -227,7 +227,7 @@ const initEdit = async () => { | @@ -227,7 +227,7 @@ const initEdit = async () => { | ||
| 227 | isEdit.value = true | 227 | isEdit.value = true |
| 228 | const res = await trainingPlanApi.getTrainingPlanDetail(props.formData.id) | 228 | const res = await trainingPlanApi.getTrainingPlanDetail(props.formData.id) |
| 229 | if (!res || !res.id) { | 229 | if (!res || !res.id) { |
| 230 | - ElMessage.error('获取计划详情失败') | 230 | + message.error('获取计划详情失败') |
| 231 | return | 231 | return |
| 232 | } | 232 | } |
| 233 | SonFormData.value = res | 233 | SonFormData.value = res |
| @@ -276,7 +276,7 @@ const loadTemplateList = async () => { | @@ -276,7 +276,7 @@ const loadTemplateList = async () => { | ||
| 276 | const res = await TrainingTemplatesApi.getTrainingTemplatesPage({ pageNo: 1, pageSize: 100 }) | 276 | const res = await TrainingTemplatesApi.getTrainingTemplatesPage({ pageNo: 1, pageSize: 100 }) |
| 277 | templateList.value = res.list || [] | 277 | templateList.value = res.list || [] |
| 278 | if (templateList.value.length === 0) { | 278 | if (templateList.value.length === 0) { |
| 279 | - ElMessage.warning('暂无可用训练模板,请先创建模板') | 279 | + message.warning('暂无可用训练模板,请先创建模板') |
| 280 | } | 280 | } |
| 281 | } | 281 | } |
| 282 | 282 | ||
| @@ -291,7 +291,7 @@ const loadTemplateDetail = async (index, templateId) => { | @@ -291,7 +291,7 @@ const loadTemplateDetail = async (index, templateId) => { | ||
| 291 | }) | 291 | }) |
| 292 | templateDetailMap.value[index] = res | 292 | templateDetailMap.value[index] = res |
| 293 | } catch (err) { | 293 | } catch (err) { |
| 294 | - ElMessage.error('获取模板' + (index + 1) + '详情失败') | 294 | + console.log('获取模板详情失败', err) |
| 295 | } finally { | 295 | } finally { |
| 296 | templateLoading.value[index] = false | 296 | templateLoading.value[index] = false |
| 297 | } | 297 | } |
| @@ -358,11 +358,11 @@ const handleSubmit = async () => { | @@ -358,11 +358,11 @@ const handleSubmit = async () => { | ||
| 358 | } else { | 358 | } else { |
| 359 | await trainingPlanApi.createTrainingPlan(SonFormData.value) | 359 | await trainingPlanApi.createTrainingPlan(SonFormData.value) |
| 360 | } | 360 | } |
| 361 | - ElMessage.success(isEdit.value ? '编辑成功' : '创建成功') | 361 | + message.success(isEdit.value ? '编辑成功' : '创建成功') |
| 362 | dialogVisible.value = false | 362 | dialogVisible.value = false |
| 363 | emit('submit') | 363 | emit('submit') |
| 364 | } catch (err) { | 364 | } catch (err) { |
| 365 | - ElMessage.error((isEdit.value ? '编辑' : '创建') + '失败') | 365 | + console.log('提交失败', err) |
| 366 | } finally { | 366 | } finally { |
| 367 | loading.value = false | 367 | loading.value = false |
| 368 | } | 368 | } |
| @@ -65,7 +65,7 @@ | @@ -65,7 +65,7 @@ | ||
| 65 | 65 | ||
| 66 | <script setup> | 66 | <script setup> |
| 67 | import { ref, reactive, onMounted } from 'vue' | 67 | import { ref, reactive, onMounted } from 'vue' |
| 68 | -import { ElMessage, ElMessageBox } from 'element-plus' | 68 | + |
| 69 | 69 | ||
| 70 | import { trainingPlanApi } from '@/api/store/training/trainingPlan' | 70 | import { trainingPlanApi } from '@/api/store/training/trainingPlan' |
| 71 | import TrainingPlanDialog from './trainingPlanDialog.vue' | 71 | import TrainingPlanDialog from './trainingPlanDialog.vue' |
| @@ -75,7 +75,7 @@ import { dateFormatter } from '@/utils/formatTime' | @@ -75,7 +75,7 @@ import { dateFormatter } from '@/utils/formatTime' | ||
| 75 | const DIFFICULTY_MAP = { 1: '初阶', 2: '中阶', 3: '高阶' } | 75 | const DIFFICULTY_MAP = { 1: '初阶', 2: '中阶', 3: '高阶' } |
| 76 | const TARGET_PEOPLE_MAP = { 1: '不限', 2: '青少年', 3: '成年人', 4: '中年人', 5: '运动损伤' } | 76 | const TARGET_PEOPLE_MAP = { 1: '不限', 2: '青少年', 3: '成年人', 4: '中年人', 5: '运动损伤' } |
| 77 | const TRAINING_SCENE_MAP = { 1: '不限', 2: '健身房', 3: '仅哑铃', 4: '仅哑铃 + 杠铃' } | 77 | const TRAINING_SCENE_MAP = { 1: '不限', 2: '健身房', 3: '仅哑铃', 4: '仅哑铃 + 杠铃' } |
| 78 | - | 78 | +const message = useMessage() |
| 79 | // ==================== 查询参数 ==================== | 79 | // ==================== 查询参数 ==================== |
| 80 | const queryParams = reactive({ | 80 | const queryParams = reactive({ |
| 81 | pageNo: 1, | 81 | pageNo: 1, |
| @@ -112,7 +112,7 @@ const getList = async () => { | @@ -112,7 +112,7 @@ const getList = async () => { | ||
| 112 | tableData.value = res.list || [] | 112 | tableData.value = res.list || [] |
| 113 | queryParams.total = res.total || 0 | 113 | queryParams.total = res.total || 0 |
| 114 | } catch (err) { | 114 | } catch (err) { |
| 115 | - ElMessage.error('请求失败,请检查网络或接口') | 115 | + console.error('获取训练计划列表失败', err) |
| 116 | } finally { | 116 | } finally { |
| 117 | loading.value = false | 117 | loading.value = false |
| 118 | } | 118 | } |
| @@ -159,17 +159,13 @@ const handleEdit = (row) => { | @@ -159,17 +159,13 @@ const handleEdit = (row) => { | ||
| 159 | // ==================== 删除 ==================== | 159 | // ==================== 删除 ==================== |
| 160 | const handleDelete = async (id) => { | 160 | const handleDelete = async (id) => { |
| 161 | try { | 161 | try { |
| 162 | - await ElMessageBox.confirm('确定要删除吗?', '提示', { | ||
| 163 | - confirmButtonText: '确定', | ||
| 164 | - cancelButtonText: '取消', | ||
| 165 | - type: 'warning' | ||
| 166 | - }) | 162 | + await message.delConfirm('确定要删除吗?') |
| 167 | await trainingPlanApi.deleteTrainingPlan(id) | 163 | await trainingPlanApi.deleteTrainingPlan(id) |
| 168 | - ElMessage.success('删除成功') | 164 | + message.success('删除成功') |
| 169 | getList() | 165 | getList() |
| 170 | } catch (err) { | 166 | } catch (err) { |
| 171 | if (err !== 'cancel') { | 167 | if (err !== 'cancel') { |
| 172 | - ElMessage.error('删除失败') | 168 | + message.error('删除失败') |
| 173 | } | 169 | } |
| 174 | } | 170 | } |
| 175 | } | 171 | } |
-
Please register or login to post a comment