Authored by Bad

feat: 更新消息提示方式,优化用户交互体验

1 # 标题 1 # 标题
2 -VITE_APP_TITLE=鸿星健身管理系统 2 +VITE_APP_TITLE=自己练管理系统
3 3
4 # 项目本地运行端口号 4 # 项目本地运行端口号
5 VITE_PORT=9008 5 VITE_PORT=9008
@@ -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 }