This commit is contained in:
BianLzhaoMin 2026-01-27 15:29:24 +08:00
parent 1e4ef09b67
commit 5a7d1bc77c
2 changed files with 130 additions and 43 deletions

View File

@ -56,3 +56,11 @@ export function updateLoopSendStatusAPI(data) {
}) })
} }
// 获取短信余额
export function getSmsBalanceAPI() {
return request({
url: '/msgJob/getMessageBalance',
method: 'GET',
})
}

View File

@ -1,56 +1,64 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<!-- 短信余额提示 -->
<el-alert
v-if="smsBalance !== null"
:title="`短信余额剩余${smsBalance}条,请及时充值!`"
type="warning"
:closable="false"
show-icon
style="margin-bottom: 20px"
/>
<!-- 循环发送短信列表 --> <!-- 循环发送短信列表 -->
<ComTable <div class="table-wrapper">
ref="comTableRef" <!-- 表格工具栏区域 -->
:form-columns="formColumns" <div class="table-toolbar">
:table-columns="tableColumns" <div class="toolbar-left">
:load-data="listLoopSendAPI" <ComButton
:show-toolbar="true" type="primary"
:show-action="true" icon="Plus"
:action-columns="actionColumns" @click="onHandleAdd"
> v-hasPermi="['sms:loopTask:add']"
<template #toolbar> >
<ComButton 新建
type="primary" </ComButton>
icon="Plus" </div>
@click="onHandleAdd" <div class="toolbar-right">
v-hasPermi="['sms:loopTask:add']" <!-- 短信余额提醒 -->
> <el-alert
新建 v-if="smsBalance !== null"
</ComButton> :title="`短信余额剩余 ${smsBalance} 条,请及时充值!`"
</template> type="warning"
<template #taskStatus="{ row }"> :closable="false"
<el-switch show-icon
active-value="0" class="balance-alert"
inactive-value="1" />
:model-value="getTaskStatusValue(row)" </div>
:loading="getSwitchLoading(row.id)" </div>
:disabled="getSwitchLoading(row.id)"
@change="(value) => debouncedStatusChange(value, row)" <ComTable
/> ref="comTableRef"
</template> :form-columns="formColumns"
</ComTable> :table-columns="tableColumns"
:load-data="listLoopSendAPI"
:show-toolbar="false"
:show-action="true"
:action-columns="actionColumns"
>
<template #taskStatus="{ row }">
<el-switch
active-value="0"
inactive-value="1"
:model-value="getTaskStatusValue(row)"
:loading="getSwitchLoading(row.id)"
:disabled="getSwitchLoading(row.id)"
@change="(value) => debouncedStatusChange(value, row)"
/>
</template>
</ComTable>
</div>
</div> </div>
</template> </template>
<script setup name="LoopSend"> <script setup name="LoopSend">
import { ref, computed, getCurrentInstance } from 'vue' import { ref, computed, getCurrentInstance, onMounted } from 'vue'
import { useRouter } from 'vue-router' import { useRouter } from 'vue-router'
import { debounce } from 'lodash-es' import { debounce } from 'lodash-es'
import { import {
listLoopSendAPI,
delLoopSendAPI, delLoopSendAPI,
listLoopSendAPI,
getSmsBalanceAPI,
updateLoopSendStatusAPI, updateLoopSendStatusAPI,
} from '@/api/sMsSendManage/loopSend.js' } from '@/api/sMsSendManage/loopSend.js'
import config from './config' import config from './config'
@ -62,7 +70,7 @@ const { proxy } = getCurrentInstance()
const { tableColumns, buildFormColumns } = config const { tableColumns, buildFormColumns } = config
const comTableRef = ref(null) const comTableRef = ref(null)
const smsBalance = ref(null) // const smsBalance = ref(null) //
const switchLoadingMap = new Map() // switch loading const switchLoadingMap = new Map() // switch loading
// //
@ -193,10 +201,81 @@ const onHandleStatusChange = (value, row) => {
// 使 300ms // 使 300ms
const debouncedStatusChange = debounce(onHandleStatusChange, 300) const debouncedStatusChange = debounce(onHandleStatusChange, 300)
//
const getSmsBalance = async () => {
try {
const result = await getSmsBalanceAPI()
if (result.code === 200) {
smsBalance.value = result.data || result.balance || null
}
} catch (error) {
console.error('获取短信余额失败:', error)
}
}
onMounted(() => {
getSmsBalance()
})
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.app-container { .app-container {
padding: 20px; padding: 20px;
} }
.table-wrapper {
display: flex;
flex-direction: column;
gap: 0;
}
.table-toolbar {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 16px;
padding: 0;
}
.toolbar-left {
display: flex;
align-items: center;
gap: 12px;
}
.toolbar-right {
display: flex;
align-items: center;
gap: 12px;
}
.balance-alert {
margin: 0;
max-width: 400px;
:deep(.el-alert__content) {
.el-alert__title {
font-size: 14px;
font-weight: 500;
color: #e6a23c;
}
}
}
@media (max-width: 768px) {
.table-toolbar {
flex-direction: column;
align-items: flex-start;
gap: 12px;
}
.toolbar-right {
width: 100%;
}
.balance-alert {
max-width: 100%;
}
}
</style> </style>