Browse Source

feat: 添加国际化支持并优化活动管理功能和频道管理功能

- 新增活动管理和频道管理相关字段的翻译内容
milestone-20251209-多语言二期^2
zhangrenyuan 1 month ago
parent
commit
6403d4ab61
  1. 13
      src/components/locales/lang/en.js
  2. 18
      src/components/locales/lang/zh-CN.js
  3. 140
      src/views/activityManage/activity.vue
  4. 129
      src/views/channelManage/fans/fans.vue
  5. 187
      src/views/channelManage/reward/reward.vue

13
src/components/locales/lang/en.js

@ -27,6 +27,8 @@ export default {
payPlatformPlaceholder: 'Select platform',
updateType: 'Update Type',
updateTypePlaceholder: 'Select update type',
customerBelong: 'Customer Belonging',
activityBelong: 'Activity Belonging',
consumeTime: 'Consumption Time',
rechargeTime: 'Recharge Time',
refundTime: 'Refund Time',
@ -48,6 +50,7 @@ export default {
cancel: 'Cancel',
confirm: 'Confirm',
submit: 'Submit',
addActivity: 'Add Activity',
addReceive: 'Add Receive',
confirmRecharge: 'Confirm Recharge',
@ -76,6 +79,7 @@ export default {
// Dialog Titles
will: 'Will ',
deleteRecord: 'Delete Record!',
deleteActivityRecord: 'Delete this activity record',
},
// Message Group
@ -150,6 +154,7 @@ export default {
activityFormatError: 'Activity data format error. Please contact the administrator',
rechargeFormatError: 'Recharge method format error. Please contact the administrator',
getRechargeError: 'Failed to obtain recharge methods. Please try again later',
deleteSuccess: 'Deleted successfully',
// Export
exportSuccess: 'Export successful',
@ -182,6 +187,11 @@ export default {
refundModelPart: 'Partial Refund',
refundGoldCoin: 'Total refunded coins',
activity: 'Activity',
businessBelong: 'Performance Belonging',
startTime: 'Start Time',
endTime: 'End Time',
status: 'Status',
creator: 'Creator',
rateName: 'Currency',
rechargeAmount: 'Recharge Amount',
Gold: 'Gold Coin Quantity',
@ -219,6 +229,9 @@ export default {
jwcode: 'Homily ID',
activity: 'Activity',
activityPlaceholder: 'Please enter activity name',
businessBelong: 'Performance Belonging',
startTime: 'Start Time',
endTime: 'End Time',
permanentGold: 'Permanent Gold Coins',
freeGold: 'Free Gold Coins',
taskGold: 'Task Gold Coins',

18
src/components/locales/lang/zh-CN.js

@ -33,6 +33,8 @@ export default {
productNamePlaceholder: "请输入产品名称",
type: "类型",
typePlaceholder: "请选择类型",
customerBelong: "客户归属地",
activityBelong: "活动归属地",
articleVideoID: "文章/视频ID",
articleVideoIDPlaceholder: "请输入文章/视频ID",
author: "作者",
@ -81,6 +83,7 @@ export default {
cancel: "取消",
confirm: "确认",
submit: "提交",
addActivity: "新增活动",
modify: "修改",
addReceive: "添加收款",
confirmRecharge: "确认充值",
@ -124,6 +127,7 @@ export default {
// 对话框标题
will: "将要",
deleteRecord: "删除该翻译记录!",
deleteActivityRecord: "删除该活动数据",
willRefundOrder: "将要对该订单退款!",
willRecallOrder: "将要撤回该订单!",
// 市场
@ -159,6 +163,7 @@ export default {
limitRedAmount: "红包抵扣额不足",
inNetworkError: "网络异常,请重试",
adminInfoLoadFailed: "管理员信息加载异常,请稍后重试",
deleteSuccess: "删除成功",
// 校验精网号,充值等输入
checkInputContent: "请检查输入内容",
permanentAndFreeNoZero: "永久金币和免费金币不能同时为0",
@ -184,6 +189,11 @@ export default {
checkFreeBean: "请输入免费金豆数",
checkRemark: "请输入备注",
checkFormInfo: "请检查并完善表单信息",
selectBusinessBelong: "请选择业绩归属",
selectMarket: "请选择所属地区",
selectStartTime: "请选择开始时间",
selectEndTime: "请选择结束时间",
currentSelectionEmpty: "当前选择无数据",
checkArticleIdFormat: "请检查文章ID格式",
checkNameOrJwcode: "请输入姓名或精网号",
checkPermanentFormat: "请检查永久金币格式",
@ -310,6 +320,11 @@ export default {
refundVoucher: "退款截图",
refundSuccess: "退款成功",
activity: "活动名称",
businessBelong: "业绩归属地",
startTime: "开始时间",
endTime: "结束时间",
status: "状态",
creator: "添加人",
rateName: "货币名称",
num: "汇率",
rechargeAmount: "充值金额",
@ -396,6 +411,9 @@ export default {
marketPlaceholder: "请输入所属地区",
activity: "活动名称",
activityPlaceholder: "请输入活动名称",
businessBelong: "业绩归属",
startTime: "开始时间",
endTime: "结束时间",
permanentGold: "永久金币",
freeGold: "免费金币",
taskGold: "任务金币",

140
src/views/activityManage/activity.vue

@ -2,30 +2,30 @@
<el-card class="card1" style="margin-bottom: 1vh;">
<div class="condition">
<div class="condition-item1">
<el-text size="large">活动名称</el-text>
<el-input v-model="searchForm.activityName" style="width: 10vw" placeholder="请输入活动名称" clearable />
<el-text size="large">{{ t('common.activityName') }}</el-text>
<el-input v-model="searchForm.activityName" style="width: 10vw" :placeholder="t('common.activityNamePlaceholder')" clearable />
</div>
<div class="condition-item1">
<el-text size="large">业绩归属</el-text>
<el-text size="large">{{ t('common.type') }}</el-text>
<!-- <el-cascader v-model="searchForm.businessBelong" :options="marketOptions" placeholder="请选择所属地区" clearable
style="width: 10vw" /> -->
<el-select v-model="searchForm.businessBelong" placeholder="请选择业绩归属" style="width: 10vw" clearable>
<el-option label="客户归属地" value="客户归属地" />
<el-option label="活动归属地" value="活动归属地" />
<el-select v-model="searchForm.businessBelong" :placeholder="t('common.typePlaceholder')" style="width: 10vw" clearable>
<el-option :label="t('common.customerBelong')" value="客户归属地" />
<el-option :label="t('common.activityBelong')" value="活动归属地" />
</el-select>
</div>
<div class="condition-item2">
<el-text size="large">开始时间</el-text>
<el-date-picker v-model="searchForm.startTime" type="datetime" placeholder="请选择开始时间"
<el-text size="large">{{ t('common.startTime') }}</el-text>
<el-date-picker v-model="searchForm.startTime" type="datetime" :placeholder="t('common.startTime')"
format="YYYY-MM-DD HH:mm:ss" :default-time="defaultStartTime" clearable />
</div>
<div class="condition-item2">
<el-text size="large">结束时间</el-text>
<el-date-picker v-model="searchForm.endTime" type="datetime" placeholder="请选择结束时间"
<el-text size="large">{{ t('common.endTime') }}</el-text>
<el-date-picker v-model="searchForm.endTime" type="datetime" :placeholder="t('common.endTime')"
format="YYYY-MM-DD HH:mm:ss" :default-time="defaultEndTime" clearable />
</div>
<el-button type="primary" @click="getActivity">查询</el-button>
<el-button type="success" @click="reset">重置</el-button>
<el-button type="primary" @click="getActivity">{{ t('common.search') }}</el-button>
<el-button type="success" @click="reset">{{ t('common.reset') }}</el-button>
</div>
</el-card>
@ -33,31 +33,31 @@
<el-card class="card2">
<div class="add-item">
<el-button type="success" @click="showAdd = true">新增活动</el-button>
<el-button type="success" @click="showAdd = true">{{ t('common.addActivity') }}</el-button>
</div>
<div>
<el-table :data="tableData" style="width: 82vw;height:70vh;" :row-style="{ height: '50px' }">
<el-table-column type="index" label="序号" width="100px" fixed="left">
<el-table-column type="index" :label="t('common_list.id')" width="100px" fixed="left">
<template #default="scope">
<span>{{ scope.$index + 1 + (pagination.pageNum - 1) * pagination.pageSize }}</span>
</template>
</el-table-column>
<el-table-column prop="activityName" label="活动名称" width="150px" show-overflow-tooltip />
<el-table-column prop="businessBelong" label="业绩归属地" width="150px" />
<el-table-column prop="areaName" label="归属地" width="150px" />
<el-table-column prop="startTime" label="开始时间" width="200px">
<el-table-column prop="activityName" :label="t('common_list.activity')" width="150px" show-overflow-tooltip />
<el-table-column prop="businessBelong" :label="t('common_list.businessBelong')" width="150px" />
<el-table-column prop="areaName" :label="t('common_list.market')" width="150px" />
<el-table-column prop="startTime" :label="t('common_list.startTime')" width="200px">
<template #default="scope">
{{ moment(scope.row.startTime).format('YYYY-MM-DD HH:mm:ss') }}
</template>
</el-table-column>
<el-table-column prop="endTime" label="结束时间" width="200px">
<el-table-column prop="endTime" :label="t('common_list.endTime')" width="200px">
<template #default="scope">
{{
moment(scope.row.endTime).format('YYYY-MM-DD HH:mm:ss')
}}
</template>
</el-table-column>
<el-table-column prop="status" label="状态" width="150px">
<el-table-column prop="status" :label="t('common_list.status')" width="150px">
<template #default="scope">
{{ scope.row.status === '0' ? '未开始' :
scope.row.status === '1' ? '进行中' :
@ -65,10 +65,10 @@
}}
</template>
</el-table-column>
<el-table-column prop="creatorName" label="添加人" width="150px" />
<el-table-column prop="operation" label="操作" width="220px">
<el-table-column prop="creatorName" :label="t('common_list.creator')" width="150px" />
<el-table-column prop="operation" :label="t('common_list.operation')" width="220px">
<template #default="scope">
<el-button type="primary" text @click="editOpen(scope.row)">编辑</el-button>
<el-button type="primary" text @click="editOpen(scope.row)">{{ t('common.edit') }}</el-button>
<!-- <el-button type="danger" text @click="openDel(scope.row)">删除</el-button> -->
</template>
</el-table-column>
@ -84,72 +84,72 @@
<el-dialog v-model="showAdd" width="20vw" draggable align-center style="background-color: rgb(243,250,254);">
<div class="add-item">
<el-text size="large">活动名称</el-text>
<el-input v-model="addForm.activityName" style="width: 12vw" placeholder="请输入活动名称" maxlength="200" clearable />
<el-text size="large">{{ t('common_add.activity') }}</el-text>
<el-input v-model="addForm.activityName" style="width: 12vw" :placeholder="t('common_add.activityPlaceholder')" maxlength="200" clearable />
</div>
<div class="add-item">
<el-text size="large">业绩归属</el-text>
<el-text size="large">{{ t('common_add.businessBelong') }}</el-text>
<el-radio-group v-model="addForm.businessBelong" style="width: 12vw">
<el-radio size="large" value="客户归属地">客户归属地</el-radio>
<el-radio size="large" value="活动归属地">活动归属地</el-radio>
<el-radio size="large" value="客户归属地">{{ t('common.customerBelong') }}</el-radio>
<el-radio size="large" value="活动归属地">{{ t('common.activityBelong') }}</el-radio>
</el-radio-group>
</div>
<div class="add-item" v-show="addForm.businessBelong === '活动归属地'">
<el-text size="large">所属地区</el-text>
<el-cascader v-model="addForm.area" :options="marketOptions" placeholder="请选择所属地区" clearable
<el-text size="large">{{ t('common_add.market') }}</el-text>
<el-cascader v-model="addForm.area" :options="marketOptions" :placeholder="t('common_add.marketPlaceholder')" clearable
style="width: 12vw" />
</div>
<div class="add-item">
<el-text size="large">开始时间</el-text>
<el-date-picker v-model="addForm.startTime" type="datetime" placeholder="请选择开始时间"
<el-text size="large">{{ t('common_add.startTime') }}</el-text>
<el-date-picker v-model="addForm.startTime" type="datetime" :placeholder="t('common_add.startTime')"
:default-time="defaultStartTime" style="width: 12vw" />
</div>
<div class="add-item">
<el-text size="large">结束时间</el-text>
<el-date-picker v-model="addForm.endTime" type="datetime" placeholder="请选择结束时间"
<el-text size="large">{{ t('common_add.endTime') }}</el-text>
<el-date-picker v-model="addForm.endTime" type="datetime" :placeholder="t('common_add.endTime')"
:default-time="defaultEndTime" style="width: 12vw" />
</div>
<div style="display: flex; justify-content: center; margin-top: 5vh;">
<el-button type="primary" @click="hideAdd">取消</el-button>
<el-button type="primary" @click="throttleGetActivity">确定</el-button>
<el-button type="primary" @click="hideAdd">{{ t('common.cancel') }}</el-button>
<el-button type="primary" @click="throttleGetActivity">{{ t('common.confirm') }}</el-button>
</div>
</el-dialog>
<el-dialog v-model="showEdit" width="20vw" draggable align-center style="background-color: rgb(243,250,254);">
<div class="edit-item">
<el-text size="large">活动名称</el-text>
<el-input v-model="editForm.activityName" style="width: 12vw" placeholder="请输入活动名称" maxlength="200" clearable />
<el-text size="large">{{ t('common_add.activity') }}</el-text>
<el-input v-model="editForm.activityName" style="width: 12vw" :placeholder="t('common_add.activityPlaceholder')" maxlength="200" clearable />
</div>
<div class="edit-item">
<el-text size="large">业绩归属</el-text>
<el-text size="large">{{ t('common_add.businessBelong') }}</el-text>
<el-radio-group v-model="editForm.businessBelong" style="width: 12vw">
<el-radio size="large" value="客户归属地">客户归属地</el-radio>
<el-radio size="large" value="活动归属地">活动归属地</el-radio>
<el-radio size="large" value="客户归属地">{{ t('common.customerBelong') }}</el-radio>
<el-radio size="large" value="活动归属地">{{ t('common.activityBelong') }}</el-radio>
</el-radio-group>
</div>
<div class="edit-item" v-show="editForm.businessBelong === '活动归属地'">
<el-text size="large">所属地区</el-text>
<el-cascader v-model="editForm.area" :options="marketOptions" placeholder="请选择所属地区" clearable
<el-text size="large">{{ t('common_add.market') }}</el-text>
<el-cascader v-model="editForm.area" :options="marketOptions" :placeholder="t('common_add.marketPlaceholder')" clearable
style="width: 12vw" />
</div>
<div class="edit-item">
<el-text size="large">开始时间</el-text>
<el-date-picker v-model="editForm.startTime" type="datetime" placeholder="请选择开始时间"
<el-text size="large">{{ t('common_add.startTime') }}</el-text>
<el-date-picker v-model="editForm.startTime" type="datetime" :placeholder="t('common_add.startTime')"
:default-time="defaultStartTime" style="width: 12vw" />
</div>
<div class="edit-item">
<el-text size="large">结束时间</el-text>
<el-date-picker v-model="editForm.endTime" type="datetime" placeholder="请选择结束时间"
<el-text size="large">{{ t('common_add.endTime') }}</el-text>
<el-date-picker v-model="editForm.endTime" type="datetime" :placeholder="t('common_add.endTime')"
:default-time="defaultEndTime" style="width: 12vw" />
</div>
<div style="display: flex; justify-content: center; margin-top: 5vh;">
<el-button type="primary" @click="hideEdit">取消</el-button>
<el-button type="primary" @click="handleEdit">确定</el-button>
<el-button type="primary" @click="hideEdit">{{ t('common.cancel') }}</el-button>
<el-button type="primary" @click="handleEdit">{{ t('common.confirm') }}</el-button>
</div>
</el-dialog>
<ConfirmDialog v-model="showDel" message="删除该活动数据" @confirm="handleDel()" @cancel="hideDel" @close="hideDel" />
<ConfirmDialog v-model="showDel" :message="t('common.deleteActivityRecord')" @confirm="handleDel()" @cancel="hideDel" @close="hideDel" />
</template>
<script setup>
import { ElMessage, ElPagination } from 'element-plus';
@ -163,6 +163,10 @@ const adminStore = useAdminStore();
const { adminData, menuTree } = storeToRefs(adminStore)
import ConfirmDialog from '@/components/dialogs/ConfirmDialog.vue'
import _ from 'lodash'
//
import { useI18n } from 'vue-i18n';
const {t} = useI18n();
//
const activityNameReg = /^[\u4e00-\u9fa5a-zA-Z0-9,。!?、;:“”()‘’《》【】{}——~,.!?:;'--()""\[\]_&+=]+$/;
// --
@ -194,7 +198,7 @@ const editForm = ref({
const marketOptions = ref([])
const getActivity = async function () {
if (!hasMenuPermission(menuTree.value,permissionMapping.view_activity)) {
ElMessage.error('无此权限')
ElMessage.error(t('elmessage.noPermission'))
return
}
const rechargeActivity = {
@ -224,26 +228,26 @@ const getActivity = async function () {
}
const handleAdd = async function () {
if (!hasMenuPermission(menuTree.value,permissionMapping.add_activity)) {
ElMessage.error('无此权限')
ElMessage.error(t('elmessage.noPermission'))
return
}
const activityName = addForm.value.activityName
if (!validateActivityName(activityName)) return
if (!addForm.value.businessBelong) {
ElMessage.error('请选择业绩归属')
ElMessage.error(t('elmessage.selectBusinessBelong'))
return
}
if (addForm.value.businessBelong === '活动归属地' && addForm.value.area.length === 0) {
ElMessage.error('请选择所属地区')
ElMessage.error(t('elmessage.selectMarket'))
return
}
if (!addForm.value.startTime) {
ElMessage.error('请选择开始时间')
ElMessage.error(t('elmessage.selectStartTime'))
return
}
if (!addForm.value.endTime) {
ElMessage.error('请选择结束时间')
ElMessage.error(t('elmessage.selectEndTime'))
return
}
if (addForm.value.businessBelong === '客户归属地') {
@ -264,7 +268,7 @@ const handleAdd = async function () {
data: params
})
if (res.code === 200) {
ElMessage.success('添加成功')
ElMessage.success(t('elmessage.addSuccess'))
getActivity()
hideAdd()
addForm.value = {
@ -275,7 +279,7 @@ const handleAdd = async function () {
endTime: null,
}
} else {
ElMessage.error(res.msg || '添加失败')
ElMessage.error(res.msg || t('elmessage.addFailed'))
return
}
}
@ -283,30 +287,30 @@ const handleAdd = async function () {
const throttleGetActivity = _.throttle(handleAdd, 5000, { trailing: false });
const handleEdit = async function () {
if (!hasMenuPermission(menuTree.value,permissionMapping.edit_activity)) {
ElMessage.error('无此权限')
ElMessage.error(t('elmessage.noPermission'))
return
}
const activityName = editForm.value.activityName
if (!validateActivityName(activityName)) return
if (!editForm.value.activityName) {
ElMessage.error('请输入活动名称')
ElMessage.error(t('elmessage.checkActivity'))
return
}
if (!editForm.value.businessBelong) {
ElMessage.error('请选择业绩归属')
ElMessage.error(t('elmessage.selectBusinessBelong'))
return
}
if (editForm.value.businessBelong === '活动归属地' && editForm.value.area.length === 0) {
ElMessage.error('请选择所属地区')
ElMessage.error(t('elmessage.selectMarket'))
return
}
if (!editForm.value.startTime) {
ElMessage.error('请选择开始时间')
ElMessage.error(t('elmessage.selectStartTime'))
return
}
if (!editForm.value.endTime) {
ElMessage.error('请选择结束时间')
ElMessage.error(t('elmessage.selectEndTime'))
return
}
@ -329,18 +333,18 @@ const handleEdit = async function () {
data: params
})
if (res.code === 200) {
ElMessage.success('修改成功')
ElMessage.success(t('elmessage.editSuccess'))
getActivity()
hideEdit()
}
}
const handleDel = async function (row) {
if (!hasMenuPermission(menuTree.value,permissionMapping.delete_activity)) {
ElMessage.error('无此权限')
ElMessage.error(t('elmessage.noPermission'))
return
}
if (!currentDelRow.value) {
ElMessage.error('当前选择无数据')
ElMessage.error(t('elmessage.currentSelectionEmpty'))
return
}
const res = await API({
@ -350,7 +354,7 @@ const handleDel = async function (row) {
}
})
if (res.code === 200) {
ElMessage.success('删除成功')
ElMessage.success(t('elmessage.deleteSuccess'))
getActivity()
showDel.value = false
}

129
src/views/channelManage/fans/fans.vue

@ -8,6 +8,10 @@ import { useAdminStore } from "@/store/index.js";
import { storeToRefs } from "pinia";
const adminStore = useAdminStore();
const { flag } = storeToRefs(adminStore);
//
import { useI18n } from 'vue-i18n';
const { t } = useI18n();
// flag
watch(flag, (newFlag, oldFlag) => {
// flag
@ -68,7 +72,7 @@ const getChannel = async function () {
console.log('请求频道列表失败', error)
ElMessage({
type: 'error',
message: '获取频道列表失败,请稍后重试'
message: t('elmessage.getChannelListFailed')
})
}
}
@ -82,14 +86,14 @@ const getChannel = async function () {
//
const consumeTypes = ref([
{ label: '发礼物', value: 1 },
{ label: '发红包', value: 2 },
{ label: '发福袋', value: 3 },
{ label: '付费直播', value: 4 },
{ label: '加入粉丝团', value: 5 },
{ label: '发弹幕', value: 6 },
{ label: '单次付费', value: 7 },
{ label: '连续包月', value: 8 }
{ label: t('consume.consumeTypes.1'), value: 1 },
{ label: t('consume.consumeTypes.2'), value: 2 },
{ label: t('consume.consumeTypes.3'), value: 3 },
{ label: t('consume.consumeTypes.4'), value: 4 },
{ label: t('consume.consumeTypes.5'), value: 5 },
{ label: t('consume.consumeTypes.6'), value: 6 },
{ label: t('consume.consumeTypes.7'), value: 7 },
{ label: t('consume.consumeTypes.8'), value: 8 }
])
// //
@ -247,7 +251,7 @@ const search = function () {
if (beanConsumeFan.value.jwcode) {
const numRef = /^\d{1,9}$/;
if (!numRef.test(beanConsumeFan.value.jwcode)) {
ElMessage.error('请检查精网号格式')
ElMessage.error(t('elmessage.checkJwcodeFormat'))
return
}
}
@ -336,7 +340,7 @@ const getDept = async function () {
console.log('请求地区列表失败', error)
ElMessage({
type: 'error',
message: '获取地区列表失败,请稍后重试'
message: t('elmessage.getRegionListFailed')
})
}
}
@ -399,14 +403,21 @@ const exportExcel = async function () {
...beanConsumeFan.value,
sortField: sortField.value,
sortOrder: sortOrder.value,
roleId: adminData.value.roleId,
flag: flag.value,
roleId: adminData.value.roleId
},
}
const res = await API({ url: '/export/exportFan', data: params })
if (res.code === 200) {
ElMessage.success('导出成功')
try {
const res = await API({url: '/export/exportFan', data: params});
if (res.code === 200) {
ElMessage.success(t('elmessage.exportSuccess'));
} else {
ElMessage.error(res.message || t('elmessage.exportFailed'));
}
} catch (error) {
console.error('导出请求出错:', error);
ElMessage.error(t('elmessage.exportFailed'));
}
}
const exportListVisible = ref(false)
@ -432,11 +443,11 @@ const getExportList = async () => {
});
exportList.value = filteredData
} else {
ElMessage.error(result.msg || '获取导出列表失败')
ElMessage.error(result.msg || t('elmessage.getExportListError'))
}
} catch (error) {
console.error('获取导出列表出错:', error)
ElMessage.error('获取导出列表失败,请稍后重试')
ElMessage.error(t('elmessage.getExportListError'))
} finally {
exportListLoading.value = false
}
@ -449,7 +460,7 @@ const downloadExportFile = (item) => {
link.download = item.fileName
link.click()
} else {
ElMessage.warning('文件还在导出中,请稍后再试')
ElMessage.warning(t('elmessage.exportingInProgress'))
}
}
//
@ -471,15 +482,15 @@ const getTagType = (state) => {
const getTagText = (state) => {
switch (state) {
case 0:
return '待执行';
return t('elmessage.pendingExecution');
case 1:
return '执行中';
return t('elmessage.executing');
case 2:
return '执行完成';
return t('elmessage.executed');
case 3:
return '执行出错';
return t('elmessage.errorExecution');
default:
return '未知状态';
return t('elmessage.unknownStatus');
}
}
</script>
@ -489,18 +500,18 @@ const getTagText = (state) => {
<el-col style="margin-bottom: 1vh">
<div class="select">
<div class="selectRow">
<el-text class="text">精网号</el-text>
<el-input class="selectContent" v-model="beanConsumeFan.jwcode" placeholder="请输入精网号" clearable />
<el-text class="text">{{ t('common.jwcode') }}</el-text>
<el-input class="selectContent" v-model="beanConsumeFan.jwcode" :placeholder="t('common.jwcodePlaceholder')" clearable />
</div>
<div class="selectRow">
<el-text class="text">地区</el-text>
<el-select class="selectContent" v-model="beanConsumeFan.dept" placeholder="请选择地区" clearable>
<el-text class="text">{{ t('common.market') }}</el-text>
<el-select class="selectContent" v-model="beanConsumeFan.dept" :placeholder="t('common.marketPlaceholder')" clearable>
<el-option v-for="(item, index) in dept" :key="index" :label="item" :value="item" />
</el-select>
</div>
<div class="selectRow">
<el-text class="text">频道</el-text>
<el-select class="selectContent" v-model="beanConsumeFan.channel" placeholder="请选择频道" clearable filterable>
<el-text class="text">{{ t('common.channel') }}</el-text>
<el-select class="selectContent" v-model="beanConsumeFan.channel" :placeholder="t('common.channelPlaceholder')" clearable filterable>
<el-option v-for="(item, index) in channels" :key="index" :label="item" :value="item" />
</el-select>
</div>
@ -509,9 +520,9 @@ const getTagText = (state) => {
<el-col>
<div class="select">
<div class="selectRow" style="width: 36vw;">
<el-text class="text" size="large">消费时间</el-text>
<el-date-picker class="selectContent" v-model="getTime" type="datetimerange" range-separator=""
start-placeholder="起始时间" end-placeholder="结束时间" style="margin-right:1vw;width:25vw"
<el-text class="text" size="large">{{ t('common.consumetime') }}</el-text>
<el-date-picker class="selectContent" v-model="getTime" type="datetimerange" :range-separator="t('common.to')"
:start-placeholder="t('common.startTime')" :end-placeholder="t('common.endTime')" style="margin-right:1vw;width:25vw"
@change="handleDatePickerChange" value-format="YYYY-MM-DD HH:mm:ss" :default-time="defaultTime" />
<div v-if="false">
<el-button @click="getToday()" :type="activeTimeRange === 'today' ? 'primary' : ''"></el-button>
@ -520,24 +531,24 @@ const getTagText = (state) => {
</div>
</div>
<div class="selectRow" style="justify-content: flex-start;">
<el-button type="primary" @click="search()">查询</el-button>
<el-button type="primary" @click="exportExcel()">导出Excel</el-button>
<el-button type="primary" @click="openExportList">查看导出列表</el-button>
<el-button type="success" @click="reset()">重置</el-button>
<el-button type="primary" @click="search()">{{ t('common.search') }}</el-button>
<el-button type="primary" @click="exportExcel()">{{ t('common.exportExcel') }}</el-button>
<el-button type="primary" @click="openExportList">{{ t('common.viewExportList') }}</el-button>
<el-button type="success" @click="reset()">{{ t('common.reset') }}</el-button>
</div>
</div>
</el-col>
</el-card>
<el-card class="card2">
<div class="goldStatistics">
金豆总数{{ format3(Math.abs(permanentBean + freeBean)) }}&nbsp;&nbsp;&nbsp;&nbsp;
付费金豆数{{ format3(Math.abs(permanentBean)) }}&nbsp;&nbsp;&nbsp;&nbsp;
免费金豆数{{ format3(Math.abs(freeBean)) }}
{{ t('common.totalGoldBean') }}{{ format3(Math.abs(permanentBean + freeBean)) }}&nbsp;&nbsp;&nbsp;&nbsp;
{{ t('common.payGoldBean') }}{{ format3(Math.abs(permanentBean)) }}&nbsp;&nbsp;&nbsp;&nbsp;
{{ t('common.freeGoldBean') }}{{ format3(Math.abs(freeBean)) }}
</div>
<div style="overflow-y: auto">
<el-table :data="tableData" style="width: 82vw" height="69vh" @sort-change="handleSortChange"
<el-table :data="tableData" style="width: 82vw" height="65vh" @sort-change="handleSortChange"
:row-style="{ height: '50px' }">
<el-table-column type="index" label="序号" width="80px" fixed="left">
<el-table-column type="index" :label="t('common_list.id')" width="80px" fixed="left">
<template #default="scope">
<span>{{
scope.$index + 1 + (getObj.pageNum - 1) * getObj.pageSize
@ -545,20 +556,20 @@ const getTagText = (state) => {
</template>
</el-table-column>
<!-- 固定姓名列 -->
<el-table-column prop="name" label="姓名" width="150px" fixed="left" show-overflow-tooltip />
<el-table-column prop="name" :label="t('common_list.name')" width="150px" fixed="left" show-overflow-tooltip />
<!-- 固定精网号列 -->
<el-table-column prop="jwcode" label="精网号" width="110px" fixed="left" />
<el-table-column prop="dept" label="地区" width="110px" />
<el-table-column prop="beanNum" label="金豆数量" sortable="custom" width="120px" />
<el-table-column prop="buyBean" label="付费金豆数" sortable="custom" width="120px" />
<el-table-column prop="freeBean" label="免费金豆数" sortable="custom" width="120px" />
<el-table-column prop="channel" label="频道" width="190px" show-overflow-tooltip />
<el-table-column prop="type" label="会员类型" width="120px">
<el-table-column prop="jwcode" :label="t('common_list.jwcode')" width="110px" fixed="left" />
<el-table-column prop="dept" :label="t('common_list.market')" width="110px" />
<el-table-column prop="beanNum" :label="t('common_list.beanNum')" sortable="custom" width="120px" />
<el-table-column prop="buyBean" :label="t('common_list.permanentBean')" sortable="custom" width="120px" />
<el-table-column prop="freeBean" :label="t('common_list.freeBean')" sortable="custom" width="120px" />
<el-table-column prop="channel" :label="t('common_list.channel')" width="190px" show-overflow-tooltip />
<el-table-column prop="type" :label="t('common_list.memberType')" width="120px">
<template #default="scope">
{{consumeTypes.find(item => item.value === Number(scope.row.type))?.label || '未知类型'}}
{{consumeTypes.find(item => item.value === Number(scope.row.type))?.label || t('common_list.unknownType')}}
</template>
</el-table-column>
<el-table-column prop="consumeTime" label="加入时间" sortable="custom" width="180px" />
<el-table-column prop="consumeTime" :label="t('common_list.joinTime')" sortable="custom" width="190px" />
</el-table>
</div>
@ -571,33 +582,33 @@ const getTagText = (state) => {
</el-card>
<!-- 导出弹窗 -->
<el-dialog v-model="exportListVisible" title="导出列表" width="80%">
<el-dialog v-model="exportListVisible" :title="t('common_export.exportList')" width="80%">
<el-table :data="exportList" style="width: 100% ;height: 60vh;" :loading="exportListLoading">
<el-table-column prop="fileName" label="文件名" />
<el-table-column prop="state" label="状态">
<el-table-column prop="fileName" :label="t('common_export.fileName')" />
<el-table-column prop="state" :label="t('common_export.status')">
<template #default="scope">
<el-tag :type="getTagType(scope.row.state)" :effect="scope.row.state === 3 ? 'light' : 'plain'">
{{ getTagText(scope.row.state) }}
</el-tag>
</template>
</el-table-column>
<el-table-column prop="createTime" label="创建时间">
<el-table-column prop="createTime" :label="t('common_export.createTime')">
<template #default="scope">
{{ moment(scope.row.createTime).format('YYYY-MM-DD HH:mm:ss') }}
</template>
</el-table-column>
<el-table-column label="操作">
<el-table-column :label="t('common_export.operation')">
<template #default="scope">
<el-button type="primary" size="small" @click="downloadExportFile(scope.row)"
:disabled="scope.row.state !== 2">
下载
{{ t('common_export.download') }}
</el-button>
</template>
</el-table-column>
</el-table>
<template #footer>
<div class="dialog-footer">
<el-button text @click="exportListVisible = false">关闭</el-button>
<el-button text @click="exportListVisible = false">{{ t('common_export.close') }}</el-button>
</div>
</template>
</el-dialog>
@ -663,7 +674,7 @@ const getTagText = (state) => {
padding: 0 0.5vw;
.text {
width: 5vw;
width: 5.3vw;
font-size: 15px;
}

187
src/views/channelManage/reward/reward.vue

@ -1,16 +1,20 @@
<script setup>
import { computed, onMounted, ref, watch } from 'vue'
import { dayjs, ElMessage } from 'element-plus'
import {computed, onMounted, ref, watch} from 'vue'
import {dayjs, ElMessage} from 'element-plus'
import request from '@/util/http.js'
import API from '@/util/http.js'
import moment from 'moment'
import { useAdminStore } from "@/store/index.js";
import { storeToRefs } from "pinia";
import {useAdminStore} from "@/store/index.js";
import {storeToRefs} from "pinia";
//
import { useI18n } from 'vue-i18n';
const { t } = useI18n();
const adminStore = useAdminStore();
const { flag } = storeToRefs(adminStore);
const {flag} = storeToRefs(adminStore);
// flag
watch(flag, (newFlag, oldFlag) => {
watch(flag, (newFlag, oldFlag) => {
// flag
if (newFlag !== oldFlag) {
selectLiveBy()
@ -62,7 +66,7 @@ const getGift = async function () {
try {
const result = await request({
url: '/beanConsume/getLiveGift', // todo
data: { account: adminData.value.account }
data: {account: adminData.value.account}
})
console.log('请求礼物列表成功', result)
//
@ -72,7 +76,7 @@ const getGift = async function () {
console.log('请求礼物列表失败', error)
ElMessage({
type: 'error',
message: '获取礼物列表失败,请稍后重试'
message: t('elmessage.getGiftListFailed')
})
}
}
@ -84,7 +88,7 @@ const getChannel = async function () {
try {
const result = await request({
url: '/beanConsume/getLiveChannel', // todo
data: { account: adminData.value.account }
data: {account: adminData.value.account}
})
console.log('请求频道列表成功', result)
//
@ -94,19 +98,19 @@ const getChannel = async function () {
console.log('请求频道列表失败', error)
ElMessage({
type: 'error',
message: '获取频道列表失败,请稍后重试'
message: t('elmessage.getChannelListFailed')
})
}
}
//
const consumeTypes = ref([
{ label: '发礼物', value: 1 },
{ label: '发红包', value: 2 },
{ label: '发福袋', value: 3 },
{ label: '付费直播', value: 4 },
{ label: '加入粉丝团', value: 5 },
{ label: '发弹幕', value: 6 }
{label: t('consume.consumeTypes.1'), value: 1},
{label: t('consume.consumeTypes.2'), value: 2},
{label: t('consume.consumeTypes.3'), value: 3},
{label: t('consume.consumeTypes.4'), value: 4},
{label: t('consume.consumeTypes.5'), value: 5},
{label: t('consume.consumeTypes.6'), value: 6}
])
//
const handleTypeChange = (value) => {
@ -149,7 +153,7 @@ const getDept = async function () {
// url: '/general/dept',
url: '/beanConsume/getDept', // todo
data: { account: adminData.value.account }
data: {account: adminData.value.account}
})
console.log('请求地区列表成功', result)
//
@ -159,7 +163,7 @@ const getDept = async function () {
console.log('请求地区列表失败', error)
ElMessage({
type: 'error',
message: '获取地区列表失败,请稍后重试'
message: t('elmessage.getRegionListFailed')
})
}
}
@ -288,7 +292,7 @@ const search = function () {
if (beanConsumeLive.value.jwcode) {
const numRef = /^\d{1,9}$/;
if (!numRef.test(beanConsumeLive.value.jwcode)) {
ElMessage.error('请检查精网号格式')
ElMessage.error(t('elmessage.checkJwcodeFormat'))
return
}
}
@ -423,6 +427,7 @@ const exportExcel = async function () {
roleId: adminData.value.roleId,
flag: flag.value,
}
}
// 便
@ -430,16 +435,16 @@ const exportExcel = async function () {
try {
console.log('2')
const res = await API({ url: '/export/exportLive', data: params });
const res = await API({url: '/export/exportLive', data: params});
console.log('导出请求响应:', res);
if (res.code === 200) {
ElMessage.success('导出成功');
ElMessage.success(t('elmessage.exportSuccess'));
} else {
ElMessage.error(res.message || '导出失败,请稍后重试');
ElMessage.error(res.message || t('elmessage.exportFailed'));
}
} catch (error) {
console.error('导出请求出错:', error);
ElMessage.error('导出失败,请稍后重试');
ElMessage.error(t('elmessage.exportFailed'));
}
}
const exportListVisible = ref(false)
@ -459,18 +464,18 @@ const exportListLoading = ref(false)
const getExportList = async () => {
exportListLoading.value = true
try {
const result = await API({ url: '/export/export' })
const result = await API({url: '/export/export'})
if (result.code === 200) {
const filteredData = result.data.filter(item => {
return item.type === 6; //6
});
exportList.value = filteredData
} else {
ElMessage.error(result.msg || '获取导出列表失败')
ElMessage.error(result.msg || t('elmessage.getExportListError'))
}
} catch (error) {
console.error('获取导出列表出错:', error)
ElMessage.error('获取导出列表失败,请稍后重试')
ElMessage.error(t('elmessage.getExportListError'))
} finally {
exportListLoading.value = false
}
@ -483,7 +488,7 @@ const downloadExportFile = (item) => {
link.download = item.fileName
link.click()
} else {
ElMessage.warning('文件还在导出中,请稍后再试')
ElMessage.warning(t('elmessage.exportingInProgress'))
}
}
//
@ -505,15 +510,15 @@ const getTagType = (state) => {
const getTagText = (state) => {
switch (state) {
case 0:
return '待执行';
return t('elmessage.pendingExecution');
case 1:
return '执行中';
return t('elmessage.executing');
case 2:
return '执行完成';
return t('elmessage.executed');
case 3:
return '执行出错';
return t('elmessage.errorExecution');
default:
return '未知状态';
return t('elmessage.unknownStatus');
}
}
</script>
@ -523,42 +528,43 @@ const getTagText = (state) => {
<el-col style="margin-bottom: 1vh">
<div class="select">
<div class="selectRow">
<el-text class="text">精网号</el-text>
<el-input class="selectContent" v-model="beanConsumeLive.jwcode" placeholder="请输入精网号" clearable />
<el-text class="text">{{ t('common.jwcode') }}</el-text>
<el-input class="selectContent" v-model="beanConsumeLive.jwcode" :placeholder="t('common.jwcodePlaceholder')" clearable/>
</div>
<div class="selectRow">
<el-text class="text">地区</el-text>
<el-select class="selectContent" v-model="beanConsumeLive.dept" placeholder="请选择地区" clearable>
<el-option v-for="(item, index) in dept" :key="index" :label="item" :value="item" />
<el-text class="text">{{ t('common.market') }}</el-text>
<el-select class="selectContent" v-model="beanConsumeLive.dept" :placeholder="t('common.marketPlaceholder')" clearable>
<el-option v-for="(item, index) in dept" :key="index" :label="item" :value="item"/>
</el-select>
</div>
<div class="selectRow" style="width: 14vw;">
<el-text class="text">礼物名称</el-text>
<el-select class="selectContent" v-model="beanConsumeLive.gift" placeholder="请选择礼物名称" clearable filterable
allow-create default-first-option>
<el-option v-for="(item, index) in gifts" :key="index" :label="item" :value="item" />
<el-text class="text">{{ t('common.giftName') }}</el-text>
<el-select class="selectContent" v-model="beanConsumeLive.gift" :placeholder="t('common.giftNamePlaceholder')" clearable
filterable
allow-create default-first-option>
<el-option v-for="(item, index) in gifts" :key="index" :label="item" :value="item"/>
</el-select>
</div>
<div class="selectRow" style="width: 12vw;">
<el-text class="textB" size="large">频道</el-text>
<el-select class="selectContent" v-model="beanConsumeLive.liveChannel" placeholder="请选择频道" clearable
filterable allow-create default-first-option>
<el-option v-for="(item, index) in channels" :key="index" :label="item" :value="item" />
<div class="selectRow" style="min-width: 12vw;">
<el-text class="textB" size="large">{{ t('common.channel') }}</el-text>
<el-select class="selectContent" v-model="beanConsumeLive.liveChannel" :placeholder="t('common.channelPlaceholder')" clearable
filterable allow-create default-first-option>
<el-option v-for="(item, index) in channels" :key="index" :label="item" :value="item"/>
</el-select>
</div>
<div class="selectRow" style="width: 12vw;">
<el-text class="textB" size="large">直播间</el-text>
<el-input class="selectContent" v-model="beanConsumeLive.liveName" placeholder="请输入直播间" clearable />
<div class="selectRow" style="min-width: 12vw;">
<el-text class="textB" size="large">{{ t('common.liveRoom') }}</el-text>
<el-input class="selectContent" v-model="beanConsumeLive.liveName" :placeholder="t('common.liveRoomPlaceholder')" clearable/>
</div>
</div>
</el-col>
<el-col>
<div class="select">
<div class="selectRow" style="width: 31.4vw;">
<el-text class="text">消费时间</el-text>
<el-date-picker class="selectContent" v-model="getTime" type="datetimerange" range-separator=""
start-placeholder="起始时间" end-placeholder="结束时间" style="margin-right:1vw;width:480px"
@change="handleDatePickerChange" :default-time="defaultTime" />
<el-text class="text">{{ t('common.consumetime') }}</el-text>
<el-date-picker class="selectContent" v-model="getTime" type="datetimerange" :range-separator="t('common.to')"
:start-placeholder="t('common.startTime')" :end-placeholder="t('common.endTime')" style="margin-right:1vw;width:480px"
@change="handleDatePickerChange" :default-time="defaultTime"/>
<div v-if="false">
<el-button @click="getToday()" :type="activeTimeRange === 'today' ? 'primary' : ''"> </el-button>
<el-button @click="getYesterday()" :type="activeTimeRange === 'yesterday' ? 'primary' : ''"> </el-button>
@ -566,83 +572,84 @@ const getTagText = (state) => {
</div>
</div>
<div class="selectRow" style="justify-content: flex-start;">
<el-button type="primary" @click="search()">查询</el-button>
<el-button type="primary" @click="exportExcel()">导出excel</el-button>
<el-button type="primary" @click="openExportList">查看导出列表</el-button>
<el-button type="success" @click="reset()">重置</el-button>
<el-button type="primary" @click="search()">{{ t('common.search') }}</el-button>
<el-button type="primary" @click="exportExcel()">{{ t('common.exportExcel') }}</el-button>
<el-button type="primary" @click="openExportList">{{ t('common.viewExportList') }}</el-button>
<el-button type="success" @click="reset()">{{ t('common.reset') }}</el-button>
</div>
</div>
</el-col>
</el-card>
<el-card class="card2">
<div class="goldStatistics">
金豆总数{{ format3(Math.abs(permanentBean + freeBean)) }}&nbsp;&nbsp;&nbsp;&nbsp;
付费金豆数{{ format3(Math.abs(permanentBean)) }}&nbsp;&nbsp;&nbsp;&nbsp;
免费金豆数{{ format3(Math.abs(freeBean)) }}
{{ t('common.totalGoldBean') }}{{ format3(Math.abs(permanentBean + freeBean)) }}&nbsp;&nbsp;&nbsp;&nbsp;
{{ t('common.payGoldBean') }}{{ format3(Math.abs(permanentBean)) }}&nbsp;&nbsp;&nbsp;&nbsp;
{{ t('common.freeGoldBean') }}{{ format3(Math.abs(freeBean)) }}
</div>
<div style="overflow-y: auto">
<el-table :data="tableData" style="width: 82vw" height="69vh" @sort-change="handleSortChange"
:row-style="{ height: '50px' }">
<el-table-column type="index" label="序号" width="80px" fixed="left">
<el-table :data="tableData" style="width: 82vw" height="65vh" @sort-change="handleSortChange"
:row-style="{ height: '50px' }">
<el-table-column type="index" :label="t('common_list.id')" width="80px" fixed="left">
<template #default="scope">
<span>{{
scope.$index + 1 + (getObj.pageNum - 1) * getObj.pageSize
}}</span>
scope.$index + 1 + (getObj.pageNum - 1) * getObj.pageSize
}}</span>
</template>
</el-table-column>
<!-- 固定姓名列 -->
<el-table-column prop="name" label="姓名" width="150px" fixed="left" show-overflow-tooltip />
<el-table-column prop="name" :label="t('common_list.name')" width="150px" fixed="left" show-overflow-tooltip/>
<!-- 固定精网号列 -->
<el-table-column prop="jwcode" label="精网号" width="110px" fixed="left" />
<el-table-column prop="dept" label="地区" width="110px" />
<el-table-column prop="gift" label="礼物" width="140px">
<el-table-column prop="jwcode" :label="t('common_list.jwcode')" width="110px" fixed="left"/>
<el-table-column prop="dept" :label="t('common_list.market')" width="110px"/>
<el-table-column prop="gift" :label="t('common_list.gift')" width="150px">
</el-table-column>
<el-table-column prop="beanNum" label="金豆数量" sortable="custom" width="120px" />
<el-table-column prop="isBackpack" label="背包礼物" width="120px">
<el-table-column prop="beanNum" :label="t('common_list.beanNum')" sortable="custom" width="120px"/>
<el-table-column prop="isBackpack" :label="t('common_list.isBackpack')" width="120px">
<template #default="scope">
{{ scope.row.isBackpack == 1 ? '是' : '否' }}
{{ scope.row.isBackpack == 1 ? t('common_list.yes') : t('common_list.no') }}
</template>
</el-table-column>
<el-table-column prop="buyBean" label="付费金豆数" sortable="custom" width="120px" />
<el-table-column prop="freeBean" label="免费金豆数" sortable="custom" width="120px" />
<el-table-column prop="liveChannel" label="频道" width="120px" show-overflow-tooltip />
<el-table-column prop="liveName" label="直播间名称" width="160px" show-overflow-tooltip />
<el-table-column prop="consumeTime" label="消费时间" sortable="custom" width="180px" />
<el-table-column prop="buyBean" :label="t('common_list.permanentBean')" sortable="custom" width="120px"/>
<el-table-column prop="freeBean" :label="t('common_list.freeBean')" sortable="custom" width="120px"/>
<el-table-column prop="liveChannel" :label="t('common_list.channel')" width="120px" show-overflow-tooltip/>
<el-table-column prop="liveName" :label="t('common_list.liveRoomName')" width="160px" show-overflow-tooltip/>
<el-table-column prop="consumeTime" :label="t('common_list.consumetime')" sortable="custom" width="190px"/>
</el-table>
</div>
<el-pagination background :current-page="getObj.pageNum" :page-size="getObj.pageSize" :page-sizes="[5, 10, 20, 50, 100]" style="margin-top: 20px;"
layout="total, sizes, prev, pager, next, jumper" :total="total" @size-change="handlePageSizeChange"
@current-change="handleCurrentChange"></el-pagination>
<el-pagination background :current-page="getObj.pageNum" :page-size="getObj.pageSize"
:page-sizes="[5, 10, 20, 50, 100]" style="margin-top: 20px;"
layout="total, sizes, prev, pager, next, jumper" :total="total" @size-change="handlePageSizeChange"
@current-change="handleCurrentChange"></el-pagination>
</el-card>
<!-- 导出弹窗 -->
<el-dialog v-model="exportListVisible" title="导出列表" width="80%">
<el-dialog v-model="exportListVisible" :title="t('common_export.exportList')" width="80%">
<el-table :data="exportList" style="width: 100% ;height: 60vh;" :loading="exportListLoading">
<el-table-column prop="fileName" label="文件名" />
<el-table-column prop="state" label="状态">
<el-table-column prop="fileName" :label="t('common_export.fileName')"/>
<el-table-column prop="state" :label="t('common_export.status')">
<template #default="scope">
<el-tag :type="getTagType(scope.row.state)" :effect="scope.row.state === 3 ? 'light' : 'plain'">
{{ getTagText(scope.row.state) }}
</el-tag>
</template>
</el-table-column>
<el-table-column prop="createTime" label="创建时间">
<el-table-column prop="createTime" :label="t('common_export.createTime')">
<template #default="scope">
{{ moment(scope.row.createTime).format('YYYY-MM-DD HH:mm:ss') }}
</template>
</el-table-column>
<el-table-column label="操作">
<el-table-column :label="t('common_export.operation')">
<template #default="scope">
<el-button type="primary" size="small" @click="downloadExportFile(scope.row)"
:disabled="scope.row.state !== 2">
下载
:disabled="scope.row.state !== 2">
{{ t('common_export.download') }}
</el-button>
</template>
</el-table-column>
</el-table>
<template #footer>
<div class="dialog-footer">
<el-button text @click="exportListVisible = false">关闭</el-button>
<el-button text @click="exportListVisible = false">{{ t('common_export.close') }}</el-button>
</div>
</template>
</el-dialog>
@ -675,7 +682,7 @@ const getTagText = (state) => {
:deep(.el-table__header-wrapper),
:deep(.el-table__body-wrapper),
:deep(.el-table__cell),
/* 表格 */
/* 表格 */
:deep(.el-table__body td) {
background-color: #F3FAFE !important;
}
@ -707,7 +714,7 @@ const getTagText = (state) => {
padding: 0 0.5vw;
.text {
width: 5vw;
width: 5.3vw;
font-size: 15px;
}

Loading…
Cancel
Save