|
|
@@ -0,0 +1,38 @@
|
|
|
+<template>
|
|
|
+ <ContentWrap>
|
|
|
+ <el-form :inline="true" :model="queryParams">
|
|
|
+ <el-form-item label="租户"><el-select v-model="queryParams.tenantId" clearable filterable class="!w-240px"><el-option v-for="item in tenants" :key="item.id" :label="item.name" :value="item.id" /></el-select></el-form-item>
|
|
|
+ <el-form-item><el-button @click="getList"><Icon icon="ep:search" /> 搜索</el-button><el-button @click="resetQuery"><Icon icon="ep:refresh" /> 重置</el-button></el-form-item>
|
|
|
+ </el-form>
|
|
|
+ </ContentWrap>
|
|
|
+ <ContentWrap>
|
|
|
+ <el-table v-loading="loading" :data="list">
|
|
|
+ <el-table-column label="租户" min-width="180" align="center"><template #default="{ row }">{{ tenantName(row.tenantId) }}</template></el-table-column>
|
|
|
+ <el-table-column label="当前可用积分" prop="balance" align="center" />
|
|
|
+ <el-table-column label="累计充值" prop="totalRecharge" align="center" />
|
|
|
+ <el-table-column label="累计消耗" prop="totalConsume" align="center" />
|
|
|
+ <el-table-column label="状态" align="center"><template #default="{ row }"><el-tag :type="row.status === 1 ? 'success' : 'info'">{{ row.status === 1 ? '启用' : '停用' }}</el-tag></template></el-table-column>
|
|
|
+ <el-table-column label="操作" width="220" fixed="right"><template #default="{ row }"><el-button link type="primary" @click="openRecharge(row)">充值</el-button><el-button link type="primary" @click="openRecords(row)">消耗明细</el-button></template></el-table-column>
|
|
|
+ </el-table>
|
|
|
+ <Pagination :total="total" v-model:page="queryParams.pageNo" v-model:limit="queryParams.pageSize" @pagination="getList" />
|
|
|
+ </ContentWrap>
|
|
|
+ <el-dialog v-model="rechargeVisible" title="租户 AI 积分充值" width="420px">
|
|
|
+ <el-form :model="rechargeForm" label-width="90px"><el-form-item label="租户"><span>{{ tenantName(rechargeForm.tenantId) }}</span></el-form-item><el-form-item label="充值积分"><el-input-number v-model="rechargeForm.point" :min="1" :precision="0" /></el-form-item><el-form-item label="备注"><el-input v-model="rechargeForm.remark" maxlength="500" /></el-form-item></el-form>
|
|
|
+ <template #footer><el-button @click="rechargeVisible=false">取消</el-button><el-button type="primary" @click="submitRecharge">确认充值</el-button></template>
|
|
|
+ </el-dialog>
|
|
|
+</template>
|
|
|
+<script setup lang="ts">
|
|
|
+import * as PointApi from '@/api/ai/point'
|
|
|
+import * as TenantApi from '@/api/system/tenant'
|
|
|
+import { useRouter } from 'vue-router'
|
|
|
+defineOptions({ name: 'SystemAiPoint' })
|
|
|
+const router = useRouter(); const message = useMessage(); const loading = ref(false); const list = ref<any[]>([]); const total = ref(0); const tenants = ref<any[]>([])
|
|
|
+const queryParams = reactive<any>({ pageNo: 1, pageSize: 10, tenantId: undefined }); const rechargeVisible = ref(false); const rechargeForm = reactive<any>({ tenantId: undefined, point: 100000, remark: '' })
|
|
|
+const tenantName = (id: number) => tenants.value.find((item: any) => item.id === id)?.name || `租户#${id}`
|
|
|
+const getList = async () => { loading.value = true; try { const data = await PointApi.getAccountPage(queryParams); list.value = data.list; total.value = data.total } finally { loading.value = false } }
|
|
|
+const resetQuery = () => { queryParams.tenantId = undefined; queryParams.pageNo = 1; getList() }
|
|
|
+const openRecharge = (row: any) => { Object.assign(rechargeForm, { tenantId: row.tenantId, point: 100000, remark: '' }); rechargeVisible.value = true }
|
|
|
+const submitRecharge = async () => { await PointApi.recharge(rechargeForm); message.success('充值成功'); rechargeVisible.value = false; getList() }
|
|
|
+const openRecords = (row: any) => router.push({ path: '/system/ai-point-management/consume-history', query: { tenantId: row.tenantId } })
|
|
|
+onMounted(async () => { tenants.value = await TenantApi.getTenantList(); await getList() })
|
|
|
+</script>
|