Browse Source

feat:完善多语言支持,金豆消耗相关,修复了英文模式下图表的显示问题

milestone-20251209-多语言二期^2
zhangrenyuan 1 month ago
parent
commit
8e92df4d00
  1. 67
      src/components/locales/lang/zh-CN.js
  2. 2
      src/components/workspace/CashManagement.vue
  3. 82
      src/views/consume/bean/addBeanConsume.vue
  4. 141
      src/views/consume/bean/articleVideo.vue
  5. 18
      src/views/consume/bean/beanConsume.vue
  6. 125
      src/views/consume/bean/dieHardFan.vue
  7. 133
      src/views/consume/bean/liveStream.vue
  8. 2
      src/views/moneyManage/receiveDetail/receiveDetail1.vue
  9. 4
      src/views/permissions/userPermission.vue
  10. 2
      src/views/recharge/bean/addBeanRecharge.vue
  11. 2
      src/views/workspace/index.vue

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

@ -18,6 +18,20 @@ export default {
refundTypePlaceholder: '请选择退款类型', refundTypePlaceholder: '请选择退款类型',
market: '所属地区', market: '所属地区',
marketPlaceholder: '请选择所属地区', marketPlaceholder: '请选择所属地区',
type: '类型',
typePlaceholder: '请选择类型',
articleVideoID: '文章/视频ID',
articleVideoIDPlaceholder: '请输入文章/视频ID',
author: '作者',
authorPlaceholder: '请输入作者',
articleVideoTitle: '文章/视频标题',
articleVideoTitlePlaceholder: '请输入文章/视频标题',
giftName: '礼物名称',
giftNamePlaceholder: '请输入礼物名称',
channel: '频道',
channelPlaceholder: '请输入频道',
liveRoom: '直播间',
liveRoomPlaceholder: '请输入直播间',
consumePlatform: '消耗平台', consumePlatform: '消耗平台',
consumePlatformPlaceholder: '请选择消耗平台', consumePlatformPlaceholder: '请选择消耗平台',
rechargePlatform: '充值平台', rechargePlatform: '充值平台',
@ -29,6 +43,8 @@ export default {
orderNo: '订单号', orderNo: '订单号',
orderNoPlaceholder: '请输入订单号', orderNoPlaceholder: '请输入订单号',
consumeTime: '消耗时间', consumeTime: '消耗时间',
consumetime: '消费时间',
payTime: '付费时间',
rechargeTime: '充值时间', rechargeTime: '充值时间',
refundTime: '退款时间', refundTime: '退款时间',
updateTime: '更新时间', updateTime: '更新时间',
@ -120,6 +136,7 @@ export default {
checkFreeBean: '请输入免费金豆数', checkFreeBean: '请输入免费金豆数',
checkRemark: '请输入备注', checkRemark: '请输入备注',
checkFormInfo: '请检查并完善表单信息', checkFormInfo: '请检查并完善表单信息',
checkArticleIdFormat: '请检查文章ID格式',
// 校验提示(error) // 校验提示(error)
noEmptyJwcode: '精网号不能为空', noEmptyJwcode: '精网号不能为空',
noEmptySumGold: '消耗金币总数不能为空', noEmptySumGold: '消耗金币总数不能为空',
@ -181,6 +198,10 @@ export default {
// 金豆充值相关 // 金豆充值相关
systemRechargeAreaError: '系统充值地区获取失败', systemRechargeAreaError: '系统充值地区获取失败',
onlineRechargeAreaError: '线上充值地区获取失败', onlineRechargeAreaError: '线上充值地区获取失败',
// 金豆消耗相关
getGiftListFailed: '获取礼物列表失败,请稍后重试',
getChannelListFailed: '获取频道列表失败,请稍后重试',
getRegionListFailed: '获取地区列表失败,请稍后重试',
}, },
// 通用列表字段组 // 通用列表字段组
@ -189,6 +210,7 @@ export default {
name: '姓名', name: '姓名',
jwcode: '精网号', jwcode: '精网号',
market: '所属地区', market: '所属地区',
gift: '礼物',
sumGold: '金币总数', sumGold: '金币总数',
payPlatform: '平台信息', payPlatform: '平台信息',
type: '更新类型', type: '更新类型',
@ -228,6 +250,21 @@ export default {
freeBean: '免费金豆', freeBean: '免费金豆',
mobile: '手机', mobile: '手机',
other: '其他', other: '其他',
beanNum: '金豆数量',
beanNumTotal: '金豆总数',
isBackpack: '背包礼物',
yes: '是',
no: '否',
channel: '频道',
liveRoomName: '直播间名称',
consumetime: '消费时间',
memberType: '会员类型',
unknownType: '未知类型',
joinTime: '加入时间',
articleVideoID: '文章/视频ID',
articleVideoTitle: '文章/视频标题',
author: '作者',
payTime: '付费时间',
}, },
// 通用导出字段组 // 通用导出字段组
common_export: { common_export: {
@ -278,6 +315,9 @@ export default {
buy: '购买', buy: '购买',
operator: '操作人', operator: '操作人',
continueOperation: '是否继续操作?', continueOperation: '是否继续操作?',
// 金豆相关
permanentBean: '付费金豆',
freeBean: '免费金豆',
}, },
// 新增表单客户信息字段组 // 新增表单客户信息字段组
common_add_user: { common_add_user: {
@ -296,6 +336,8 @@ export default {
currentPayableBean: '当前付费金豆', currentPayableBean: '当前付费金豆',
currentFreeBean: '当前免费金豆', currentFreeBean: '当前免费金豆',
consumeTotalBean: '消耗金豆总数', consumeTotalBean: '消耗金豆总数',
permanentBean: '付费金豆',
freeBean: '免费金豆',
}, },
// 审核组 // 审核组
@ -426,6 +468,31 @@ export default {
}, },
// 新增消耗 // 新增消耗
addCoinConsume: '新增消耗', addCoinConsume: '新增消耗',
// 金豆消耗 ----------------------------------
addBeanConsume: '新增消耗',
liveStream: '直播',
dieHardFan: '铁粉',
articleVideo: '文章/视频',
confirmConsume: '确认消耗吗?',
prompt: '提示',
// 文章/视频
type: '类型',
reward: '打赏',
payBuy: '付费购买',
other: '其他',
consumeTypes: {
1: '发礼物',
2: '发红包',
3: '发福袋',
4: '付费直播',
5: '加入粉丝团',
6: '发弹幕',
7: '单次付费',
8: '连续包月',
9: '打赏',
10: '打赏',
11: '付费购买',
},
}, },
//退款组 //退款组

2
src/components/workspace/CashManagement.vue

@ -195,7 +195,7 @@ const getAdminData = async function () {
loading.value = true; // loading.value = true; //
const result = await API({url: '/admin/userinfo', data: {}}); const result = await API({url: '/admin/userinfo', data: {}});
marksFlag.value = result.markets === '总部' || result.markets === '研发部' marksFlag.value = result.markets === '总部' || result.markets === '研发部'
|| result.markets === 'headquarters' || result.markets === 'R&D Department';
|| result.markets === 'Headquarters' || result.markets === 'R&D Department';
console.log("marksFlag", marksFlag.value); console.log("marksFlag", marksFlag.value);
// alert(marksFlag.value) // alert(marksFlag.value)
} catch (error) { } catch (error) {

82
src/views/consume/bean/addBeanConsume.vue

@ -14,13 +14,17 @@ import throttle from 'lodash/throttle'
import { useAdminStore } from "@/store/index.js"; import { useAdminStore } from "@/store/index.js";
import { storeToRefs } from "pinia"; import { storeToRefs } from "pinia";
import _ from 'lodash' import _ from 'lodash'
//
import { useI18n } from 'vue-i18n';
const { t } = useI18n();
const user = ref({}) const user = ref({})
const getUser = async function (jwcode) { const getUser = async function (jwcode) {
if (consumeForm.value.jwcode) { if (consumeForm.value.jwcode) {
consumeForm.value.jwcode = consumeForm.value.jwcode.replace(/\s/g, ''); consumeForm.value.jwcode = consumeForm.value.jwcode.replace(/\s/g, '');
} else { } else {
ElMessage.error('请先输入精网号')
ElMessage.error(t('elmessage.checkJwcode'))
return false return false
} }
try { try {
@ -33,15 +37,15 @@ const getUser = async function (jwcode) {
if (result.code === 0) { if (result.code === 0) {
ElMessage.error(result.msg); ElMessage.error(result.msg);
} else if (result.data === null) { } else if (result.data === null) {
ElMessage.error("用户不存在");
ElMessage.error(t('elmessage.noUser'));
} else { } else {
user.value = result.data; user.value = result.data;
console.log("用户信息", user.value); console.log("用户信息", user.value);
ElMessage.success("查询成功");
ElMessage.success(t('elmessage.searchSuccess'));
} }
} catch (error) { } catch (error) {
console.log("请求失败", error); console.log("请求失败", error);
ElMessage.error("精网号错误");
ElMessage.error(t('elmessage.jwcodeError'));
} }
} }
@ -60,22 +64,22 @@ const adminStore = useAdminStore()
const { adminData } = storeToRefs(adminStore) const { adminData } = storeToRefs(adminStore)
const rules = reactive({ const rules = reactive({
jwcode: [ jwcode: [
{ required: true, message: '请输入精网号', trigger: 'blur' },
{ required: true, message: t('elmessage.checkJwcode'), trigger: 'blur' },
{ {
validator: (rule, value, callback) => { validator: (rule, value, callback) => {
if (!value) { if (!value) {
callback(new Error('精网号不能为空'));
callback(new Error(t('elmessage.noEmptyJwcode')));
return; return;
} }
if (/[^0-9]/.test(value)) { if (/[^0-9]/.test(value)) {
callback(new Error('精网号只能包含数字'));
callback(new Error(t('elmessage.limitDigitJwcode')));
return; return;
} }
callback(); callback();
}, trigger: 'blur' }, trigger: 'blur'
}], }],
permanentBean: [ permanentBean: [
{ required: true, message: '请输入付费金豆数', trigger: 'change' },
{ required: true, message: t('elmessage.checkPayBean'), trigger: 'change' },
{ {
validator: (rule, value, callback) => { validator: (rule, value, callback) => {
if (!value) { if (!value) {
@ -83,13 +87,13 @@ const rules = reactive({
} }
// //
if (!/^\d+$/.test(value)) { if (!/^\d+$/.test(value)) {
callback(new Error('请输入非负整数'));
callback(new Error(t('elmessage.checkNonNegative')));
return; return;
} }
// //
if (value.length > 6) { if (value.length > 6) {
callback(new Error('整数位数不能超过6位'));
callback(new Error(t('elmessage.limitSix')));
return; return;
} }
callback(); callback();
@ -99,7 +103,7 @@ const rules = reactive({
} }
], ],
freeBean: [ freeBean: [
{ required: true, message: '请输入免费金豆数', trigger: 'change' },
{ required: true, message: t('elmessage.checkFreeBean'), trigger: 'change' },
{ {
validator: (rule, value, callback) => { validator: (rule, value, callback) => {
if (!value) { if (!value) {
@ -107,13 +111,13 @@ const rules = reactive({
} }
// //
if (!/^\d+$/.test(value)) { if (!/^\d+$/.test(value)) {
callback(new Error('请输入非负整数'));
callback(new Error(t('elmessage.checkNonNegative')));
return; return;
} }
// //
if (value.length > 6) { if (value.length > 6) {
callback(new Error('整数位数不能超过6位'));
callback(new Error(t('elmessage.limitSix')));
return; return;
} }
callback(); callback();
@ -122,7 +126,7 @@ const rules = reactive({
} }
], ],
remark: [ remark: [
{ required: true, message: '请输入备注', trigger: 'blur' }
{ required: true, message: t('elmessage.checkRemark'), trigger: 'blur' }
] ]
}); });
@ -143,11 +147,11 @@ const handleConsumeForm = async () => {
formRef.value.validate((valid) => { formRef.value.validate((valid) => {
if (valid) { if (valid) {
if (Number(consumeForm.value.permanentBean) === 0 && Number(consumeForm.value.freeBean) === 0) { if (Number(consumeForm.value.permanentBean) === 0 && Number(consumeForm.value.freeBean) === 0) {
reject(new Error('付费金豆和免费金豆不能同时为0'));
reject(new Error(t('elmessage.noPayBeanFreeBeanZero')));
} }
resolve(); // resolve(); //
} else { } else {
reject(new Error('请检查并完善表单信息')); //
reject(new Error(t('elmessage.checkFormInfo'))); //
} }
}); });
}); });
@ -167,11 +171,11 @@ const handleConsumeForm = async () => {
// } // }
await ElMessageBox.confirm( await ElMessageBox.confirm(
'确认消耗吗?',
'提示',
t('consume.confirmConsume'),
t('consume.prompt'),
{ {
confirmButtonText: '确认',
cancelButtonText: '取消',
confirmButtonText: t('common.confirm'),
cancelButtonText: t('common.cancel'),
type: "primary", type: "primary",
lockScroll: false, lockScroll: false,
} }
@ -189,7 +193,7 @@ const handleConsumeForm = async () => {
}) })
addDisabled.value = false addDisabled.value = false
if (result.code == 200) { if (result.code == 200) {
ElMessage.success('新增成功')
ElMessage.success(t('elmessage.addsuccess'))
deleteConsumeForm() deleteConsumeForm()
user.value = {} user.value = {}
} else { } else {
@ -197,7 +201,7 @@ const handleConsumeForm = async () => {
} }
} catch (error) { } catch (error) {
console.log('金豆新增充值失败'); console.log('金豆新增充值失败');
ElMessage.error(error.message || '操作失败');
ElMessage.error(error.message || t('elmessage.operationFailed'));
} }
} }
const throttledHandleConsumeFormt = _.throttle(handleConsumeForm, 5000, { const throttledHandleConsumeFormt = _.throttle(handleConsumeForm, 5000, {
@ -209,22 +213,22 @@ const throttledHandleConsumeFormt = _.throttle(handleConsumeForm, 5000, {
<div class="left"> <div class="left">
<el-form :model="consumeForm" :rules="rules" ref="formRef" label-width="auto" style="max-width: 600px" <el-form :model="consumeForm" :rules="rules" ref="formRef" label-width="auto" style="max-width: 600px"
class="add-form"> class="add-form">
<el-form-item prop="jwcode" label="精网号" label-position="left">
<el-form-item prop="jwcode" :label="t('common_add.jwcode')" label-position="left">
<el-input v-model="consumeForm.jwcode" style="width: 220px" /> <el-input v-model="consumeForm.jwcode" style="width: 220px" />
<el-button type="primary" @click="getUser(consumeForm.jwcode)" style="margin-left: 20px">查询</el-button>
<el-button type="primary" @click="getUser(consumeForm.jwcode)" style="margin-left: 20px">{{ t('common.search') }}</el-button>
</el-form-item> </el-form-item>
<el-form-item prop="permanentBean" label="付费金豆" label-position="left">
<el-form-item prop="permanentBean" :label="t('common_add.permanentBean')" label-position="left">
<el-input v-model="consumeForm.permanentBean" placeholder="0" style="width: 100px" /> <el-input v-model="consumeForm.permanentBean" placeholder="0" style="width: 100px" />
</el-form-item> </el-form-item>
<el-form-item prop="freeBean" label="免费金豆" label-position="left">
<el-form-item prop="freeBean" :label="t('common_add.freeBean')" label-position="left">
<el-input v-model="consumeForm.freeBean" placeholder="0" style="width: 100px" /> <el-input v-model="consumeForm.freeBean" placeholder="0" style="width: 100px" />
</el-form-item> </el-form-item>
<el-form-item prop="remark" label="备注" label-position="left">
<el-form-item prop="remark" :label="t('common_add.remark')" label-position="left">
<el-input v-model="consumeForm.remark" style="width: 300px" :rows="5" maxlength="100" show-word-limit <el-input v-model="consumeForm.remark" style="width: 300px" :rows="5" maxlength="100" show-word-limit
type="textarea" /> type="textarea" />
</el-form-item> </el-form-item>
<el-button @click="deleteConsumeForm" style="margin-left: 8.5vw;margin-top:1vw" type="success">重置</el-button>
<el-button type="primary" :disabled="addDisabled" @click="handleConsumeForm" style="margin-top:1vw"> 提交
<el-button @click="deleteConsumeForm" style="margin-left: 9vw;margin-top:1vw" type="success">{{ t('common.reset') }}</el-button>
<el-button type="primary" :disabled="addDisabled" @click="handleConsumeForm" style="margin-top:1vw"> {{ t('common.submit') }}
</el-button> </el-button>
</el-form> </el-form>
</div> </div>
@ -233,12 +237,12 @@ const throttledHandleConsumeFormt = _.throttle(handleConsumeForm, 5000, {
<div class="right"> <div class="right">
<el-card v-if="user.jwcode" class="customer-info"> <el-card v-if="user.jwcode" class="customer-info">
<el-form :model="user" label-width="auto" label-position="left"> <el-form :model="user" label-width="auto" label-position="left">
<el-text size="large" style="margin-left: 7vw">客户信息</el-text>
<el-text size="large" style="margin-left: 5vw">{{ t('common_add_user.customerInfo') }}</el-text>
<!-- 第一行姓名 + 当前付费金豆 --> <!-- 第一行姓名 + 当前付费金豆 -->
<div style="margin-top: 0.5vw;display:flex;"> <div style="margin-top: 0.5vw;display:flex;">
<p style="width:6vw;">姓名:</p>
<p style="min-width:6vw;">{{ t('common_add_user.name') }}:</p>
<p style="color: #2fa1ff;width:6vw;">{{ user.name }}</p> <p style="color: #2fa1ff;width:6vw;">{{ user.name }}</p>
<p style="width:7vw;">当前付费金豆:</p>
<p style="width:7vw;">{{ t('common_add_user.permanentBean') }}:</p>
<p v-if="!isNaN(Number(user.permanentBean))" style="color: #2fa1ff;">{{ Number(user.permanentBean) }}</p> <p v-if="!isNaN(Number(user.permanentBean))" style="color: #2fa1ff;">{{ Number(user.permanentBean) }}</p>
<!-- 如果不是有效的数字显示默认值 --> <!-- 如果不是有效的数字显示默认值 -->
<p v-else></p> <p v-else></p>
@ -246,17 +250,17 @@ const throttledHandleConsumeFormt = _.throttle(handleConsumeForm, 5000, {
<!-- 第二行精网号 + 免费金豆 --> <!-- 第二行精网号 + 免费金豆 -->
<div style="display:flex"> <div style="display:flex">
<p style="width:6vw;">精网号:</p>
<p style="width:6vw;">{{ t('common_add_user.jwcode') }}:</p>
<p style="color: #2fa1ff;width:6vw;">{{ user.jwcode }}</p> <p style="color: #2fa1ff;width:6vw;">{{ user.jwcode }}</p>
<p style="width:7vw;">当前免费金豆:</p>
<p style="width:7vw;">{{ t('common_add_user.freeBean') }}:</p>
<p v-if="user.freeBean !== undefined" style="color: #2fa1ff;">{{ user.freeBean }}</p> <p v-if="user.freeBean !== undefined" style="color: #2fa1ff;">{{ user.freeBean }}</p>
</div> </div>
<!-- 第三行消费次数 + 所属门店 --> <!-- 第三行消费次数 + 所属门店 -->
<div style="display:flex"> <div style="display:flex">
<p style="width:6vw;">所属门店:</p>
<p style="width:6vw;">{{ t('common_add_user.store') }}:</p>
<p style="color: #2fa1ff;width:6vw;">{{ user.market }}</p> <p style="color: #2fa1ff;width:6vw;">{{ user.market }}</p>
<p style="width:7vw;">消耗金豆总数:</p>
<p style="width:7vw;">{{ t('common_add_user.consumeTotalBean') }}:</p>
<p style="color: #2fa1ff;" v-if="user.consumeSum != null">{{ user.consumeSum }}</p> <p style="color: #2fa1ff;" v-if="user.consumeSum != null">{{ user.consumeSum }}</p>
<p style="color: #2fa1ff;" v-else>{{ 0 }}</p> <p style="color: #2fa1ff;" v-else>{{ 0 }}</p>
</div> </div>
@ -285,13 +289,13 @@ const throttledHandleConsumeFormt = _.throttle(handleConsumeForm, 5000, {
.right { .right {
flex: 1; flex: 1;
display: flex; display: flex;
float: left;
// float: left;
.customer-info { .customer-info {
width: 35vw;
min-width: 35vw;
height: 28vh; height: 28vh;
margin-top: 5vh; margin-top: 5vh;
display: flex;
// display: flex;
justify-content: center; justify-content: center;
} }
} }

141
src/views/consume/bean/articleVideo.vue

@ -9,6 +9,10 @@ import { useAdminStore } from "@/store/index.js";
import { storeToRefs } from "pinia"; import { storeToRefs } from "pinia";
const adminStore = useAdminStore(); const adminStore = useAdminStore();
const { flag } = storeToRefs(adminStore); const { flag } = storeToRefs(adminStore);
//
import { useI18n } from 'vue-i18n';
const { t } = useI18n();
// flag // flag
watch(flag, (newFlag, oldFlag) => { watch(flag, (newFlag, oldFlag) => {
// flag // flag
@ -55,9 +59,9 @@ const channels = ref([])
// //
const consumeTypes = ref([ const consumeTypes = ref([
{ label: '打赏', value: 9 },
{ label: '打赏', value: 10 },
{ label: '付费购买', value: 11 },
{ label: t('consume.consumeTypes.9'), value: 9 },
{ label: t('consume.consumeTypes.10'), value: 10 },
{ label: t('consume.consumeTypes.11'), value: 11 },
]) ])
// payMode // payMode
@ -110,7 +114,7 @@ const getDept = async function () {
console.log('请求地区列表失败', error) console.log('请求地区列表失败', error)
ElMessage({ ElMessage({
type: 'error', type: 'error',
message: '获取地区列表失败,请稍后重试'
message: t('elmessage.getRegionListFailed')
}) })
} }
} }
@ -257,14 +261,14 @@ const search = function () {
if (beanConsumeArticle.value.jwcode) { if (beanConsumeArticle.value.jwcode) {
const numRef = /^\d{1,9}$/; const numRef = /^\d{1,9}$/;
if (!numRef.test(beanConsumeArticle.value.jwcode)) { if (!numRef.test(beanConsumeArticle.value.jwcode)) {
ElMessage.error('请检查精网号格式')
ElMessage.error(t('elmessage.checkJwcodeFormat'))
return return
} }
} }
if (beanConsumeArticle.value.articleId) { if (beanConsumeArticle.value.articleId) {
const numRef = /^\d{1,9}$/; const numRef = /^\d{1,9}$/;
if (!numRef.test(beanConsumeArticle.value.articleId)) { if (!numRef.test(beanConsumeArticle.value.articleId)) {
ElMessage.error('请检查文章ID格式')
ElMessage.error(t('elmessage.checkArticleIdFormat'))
return return
} }
} }
@ -401,9 +405,16 @@ const exportExcel = async function () {
}, },
} }
const res = await API({ url: '/export/exportArticle', data: params })
try {
const res = await API({url: '/export/exportArticle', data: params});
if (res.code === 200) { if (res.code === 200) {
ElMessage.success('导出成功')
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) const exportListVisible = ref(false)
@ -429,11 +440,11 @@ const getExportList = async () => {
}); });
exportList.value = filteredData exportList.value = filteredData
} else { } else {
ElMessage.error(result.msg || '获取导出列表失败')
ElMessage.error(result.msg || t('elmessage.getExportListError'))
} }
} catch (error) { } catch (error) {
console.error('获取导出列表出错:', error) console.error('获取导出列表出错:', error)
ElMessage.error('获取导出列表失败,请稍后重试')
ElMessage.error(t('elmessage.getExportListError'))
} finally { } finally {
exportListLoading.value = false exportListLoading.value = false
} }
@ -446,7 +457,7 @@ const downloadExportFile = (item) => {
link.download = item.fileName link.download = item.fileName
link.click() link.click()
} else { } else {
ElMessage.warning('文件还在导出中,请稍后再试')
ElMessage.warning(t('elmessage.exportingInProgress'))
} }
} }
// //
@ -468,15 +479,15 @@ const getTagType = (state) => {
const getTagText = (state) => { const getTagText = (state) => {
switch (state) { switch (state) {
case 0: case 0:
return '待执行';
return t('elmessage.pendingExecution');
case 1: case 1:
return '执行中';
return t('elmessage.executing');
case 2: case 2:
return '执行完成';
return t('elmessage.executed');
case 3: case 3:
return '执行出错';
return t('elmessage.errorExecution');
default: default:
return '未知状态';
return t('elmessage.unknownStatus');
} }
} }
</script> </script>
@ -486,27 +497,27 @@ const getTagText = (state) => {
<el-col style="margin-bottom: 1vh; "> <el-col style="margin-bottom: 1vh; ">
<div class="select"> <div class="select">
<div class="selectRow"> <div class="selectRow">
<el-text class="text" size="large">精网号</el-text>
<el-input class="selectContent" v-model="beanConsumeArticle.jwcode" placeholder="请输入精网号" clearable />
<el-text class="text" size="large">{{ t('common.jwcode') }}</el-text>
<el-input class="selectContent" v-model="beanConsumeArticle.jwcode" :placeholder="t('common.jwcodePlaceholder')" clearable />
</div> </div>
<div class="selectRow"> <div class="selectRow">
<el-text class="text" size="large">地区</el-text>
<el-select class="selectContent" v-model="beanConsumeArticle.dept" placeholder="请选择地区" clearable>
<el-text class="text" size="large">{{ t('common.market') }}</el-text>
<el-select class="selectContent" v-model="beanConsumeArticle.dept" :placeholder="t('common.marketPlaceholder')" clearable>
<el-option v-for="(item, index) in dept" :key="index" :label="item" :value="item" /> <el-option v-for="(item, index) in dept" :key="index" :label="item" :value="item" />
</el-select> </el-select>
</div> </div>
<div class="selectRow"> <div class="selectRow">
<el-text class="text" size="large">类型</el-text>
<el-select class="selectContent" style="width: 20px" v-model="beanConsumeArticle.payMode" placeholder="请选择类型"
<el-text class="text" size="large">{{ t('common.type') }}</el-text>
<el-select class="selectContent" style="width: 20px" v-model="beanConsumeArticle.payMode" :placeholder="t('common.typePlaceholder')"
clearable @change="handlePayModeChange"> clearable @change="handlePayModeChange">
<el-option label="打赏" value="0" />
<el-option label="付费购买" value="1" />
<el-option label="其他" value="2" />
<el-option :label="t('consume.reward')" value="0" />
<el-option :label="t('consume.payBuy')" value="1" />
<el-option :label="t('consume.other')" value="2" />
</el-select> </el-select>
</div> </div>
<div class="selectRow"> <div class="selectRow">
<el-text class="textB" size="large">文章/视频ID:</el-text>
<el-input class="selectContent" v-model="beanConsumeArticle.articleId" placeholder="请输入文章/视频ID" clearable />
<el-text class="textB" size="large">{{ t('common.articleVideoID') }}</el-text>
<el-input class="selectContent" v-model="beanConsumeArticle.articleId" :placeholder="t('common.articleVideoIDPlaceholder')" clearable />
</div> </div>
</div> </div>
@ -515,9 +526,9 @@ const getTagText = (state) => {
<el-col> <el-col>
<div class="select"> <div class="select">
<div class="selectRow" style="width: 33vw;"> <div class="selectRow" style="width: 33vw;">
<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="width:25vw" @change="handleDatePickerChange"
<el-text class="text" size="large">{{ t('common.payTime') }}</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="width:25vw" @change="handleDatePickerChange"
value-format="YYYY-MM-DD HH:mm:ss" :default-time="defaultTime" /> value-format="YYYY-MM-DD HH:mm:ss" :default-time="defaultTime" />
<div v-if="false"> <div v-if="false">
<el-button @click="getToday()" :type="activeTimeRange === 'today' ? 'primary' : ''"></el-button> <el-button @click="getToday()" :type="activeTimeRange === 'today' ? 'primary' : ''"></el-button>
@ -526,35 +537,35 @@ const getTagText = (state) => {
</div> </div>
</div> </div>
<div class="selectRow"> <div class="selectRow">
<el-text class="text" size="large">作者</el-text>
<el-input class="selectContent" v-model="beanConsumeArticle.author" placeholder="请输入作者" clearable />
<el-text class="text" size="large">{{ t('common.author') }}</el-text>
<el-input class="selectContent" v-model="beanConsumeArticle.author" :placeholder="t('common.authorPlaceholder')" clearable />
</div> </div>
<div class="selectRow"> <div class="selectRow">
<el-text class="textB" size="large">文章/视频标题</el-text>
<el-input class="selectContent" v-model="beanConsumeArticle.articleName" placeholder="请输入文章/视频标题" clearable />
<el-text class="textB" size="large">{{ t('common.articleVideoTitle') }}</el-text>
<el-input class="selectContent" v-model="beanConsumeArticle.articleName" :placeholder="t('common.articleVideoTitlePlaceholder')" clearable />
</div> </div>
</div> </div>
</el-col> </el-col>
<el-col> <el-col>
<div class="selectButton"> <div class="selectButton">
<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-col>
</el-card> </el-card>
<el-card class="card2"> <el-card class="card2">
<div class="goldStatistics"> <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>
<div style="overflow-y: auto"> <div style="overflow-y: auto">
<el-table :data="tableData" style="width: 82vw" height="57vh" @sort-change="handleSortChange"
<el-table :data="tableData" style="width: 82vw" height="61vh" @sort-change="handleSortChange"
:row-style="{ height: '50px' }"> :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"> <template #default="scope">
<span>{{ <span>{{
scope.$index + 1 + (getObj.pageNum - 1) * getObj.pageSize scope.$index + 1 + (getObj.pageNum - 1) * getObj.pageSize
@ -562,26 +573,26 @@ const getTagText = (state) => {
</template> </template>
</el-table-column> </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="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="type" :label="t('consume.type')" width="120px">
<template #default="scope"> <template #default="scope">
{{ {{
Array.isArray(consumeTypes) Array.isArray(consumeTypes)
? consumeTypes.find(item => item.value === Number(scope.row.type))?.label || '未知类型'
: '未知类型'
? consumeTypes.find(item => item.value === Number(scope.row.type))?.label || t('common_list.unknownType')
: t('common_list.unknownType')
}} }}
</template> </template>
</el-table-column> </el-table-column>
<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="articleId" label="文章/视频ID" width="150px" />
<el-table-column prop="articleName" label="文章/视频标题" width="150px" show-overflow-tooltip />
<el-table-column prop="author" label="作者" width="120px" show-overflow-tooltip />
<el-table-column prop="consumeTime" label="付费时间" sortable="custom" width="180px">
<el-table-column prop="beanNum" :label="t('common_list.beanNumTotal')" 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="articleId" :label="t('common_list.articleVideoID')" width="150px" />
<el-table-column prop="articleName" :label="t('common_list.articleVideoTitle')" width="150px" show-overflow-tooltip />
<el-table-column prop="author" :label="t('common_list.author')" width="120px" show-overflow-tooltip />
<el-table-column prop="consumeTime" :label="t('common_list.payTime')" sortable="custom" width="190px">
<template #default="scope"> <template #default="scope">
{{ formatTime(scope.row.consumeTime) }} {{ formatTime(scope.row.consumeTime) }}
</template> </template>
@ -598,33 +609,33 @@ const getTagText = (state) => {
</el-card> </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 :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"> <template #default="scope">
<el-tag :type="getTagType(scope.row.state)" :effect="scope.row.state === 3 ? 'light' : 'plain'"> <el-tag :type="getTagType(scope.row.state)" :effect="scope.row.state === 3 ? 'light' : 'plain'">
{{ getTagText(scope.row.state) }} {{ getTagText(scope.row.state) }}
</el-tag> </el-tag>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="createTime" label="创建时间">
<el-table-column prop="createTime" :label="t('common_export.createTime')">
<template #default="scope"> <template #default="scope">
{{ moment(scope.row.createTime).format('YYYY-MM-DD HH:mm:ss') }} {{ moment(scope.row.createTime).format('YYYY-MM-DD HH:mm:ss') }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作">
<el-table-column :label="t('common_export.operation')">
<template #default="scope"> <template #default="scope">
<el-button type="primary" size="small" @click="downloadExportFile(scope.row)" <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> </el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<template #footer> <template #footer>
<div class="dialog-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> </div>
</template> </template>
</el-dialog> </el-dialog>
@ -693,11 +704,11 @@ const getTagText = (state) => {
padding: 0 0.5vw; padding: 0 0.5vw;
.text { .text {
width: 5vw;
width: 5.3vw;
font-size: 15px; font-size: 15px;
} }
.textB { .textB {
width: 7vw;
width: 7.3vw;
font-size: 15px; font-size: 15px;
} }

18
src/views/consume/bean/beanConsume.vue

@ -6,36 +6,36 @@
:class="{ 'active-btn': activeTab === 'addBeanConsume' }" :class="{ 'active-btn': activeTab === 'addBeanConsume' }"
@click="navigateTo('addBeanConsume')" @click="navigateTo('addBeanConsume')"
v-if="hasAdd" v-if="hasAdd"
style="width: 6.5vw;"
style="min-width: 6.5vw;"
> >
新增消耗
{{ t('consume.addBeanConsume') }}
</el-button> </el-button>
<el-button <el-button
class="no-active-btn" class="no-active-btn"
:class="{ 'active-btn': activeTab === 'liveStream' }" :class="{ 'active-btn': activeTab === 'liveStream' }"
@click="navigateTo('liveStream')" @click="navigateTo('liveStream')"
v-if="hasLive" v-if="hasLive"
style="width: 6.5vw;"
style="min-width: 6.5vw;"
> >
直播
{{ t('consume.liveStream') }}
</el-button> </el-button>
<el-button <el-button
class="no-active-btn" class="no-active-btn"
:class="{ 'active-btn': activeTab === 'dieHardFan' }" :class="{ 'active-btn': activeTab === 'dieHardFan' }"
@click="navigateTo('dieHardFan')" @click="navigateTo('dieHardFan')"
v-if="hasFan" v-if="hasFan"
style="width: 6.5vw;"
style="min-width: 6.5vw;"
> >
铁粉
{{ t('consume.dieHardFan') }}
</el-button> </el-button>
<el-button <el-button
class="no-active-btn" class="no-active-btn"
:class="{ 'active-btn': activeTab === 'articleVideo' }" :class="{ 'active-btn': activeTab === 'articleVideo' }"
@click="navigateTo('articleVideo')" @click="navigateTo('articleVideo')"
v-if="hasArticleVideo" v-if="hasArticleVideo"
style="width: 6.5vw;"
style="min-width: 6.5vw;"
> >
文章/视频
{{ t('consume.articleVideo') }}
</el-button> </el-button>
</el-button-group> </el-button-group>
</div> </div>
@ -50,6 +50,8 @@ import {useRouter, useRoute} from 'vue-router';
import {storeToRefs} from 'pinia'; import {storeToRefs} from 'pinia';
import {useAdminStore} from '@/store/index.js'; import {useAdminStore} from '@/store/index.js';
import {hasMenuPermission, permissionMapping} from "@/utils/menuTreePermission.js"; import {hasMenuPermission, permissionMapping} from "@/utils/menuTreePermission.js";
import { useI18n } from 'vue-i18n';
const { t } = useI18n();
const router = useRouter(); const router = useRouter();
const route = useRoute(); const route = useRoute();

125
src/views/consume/bean/dieHardFan.vue

@ -8,6 +8,10 @@ import { useAdminStore } from "@/store/index.js";
import { storeToRefs } from "pinia"; import { storeToRefs } from "pinia";
const adminStore = useAdminStore(); const adminStore = useAdminStore();
const { flag } = storeToRefs(adminStore); const { flag } = storeToRefs(adminStore);
//
import { useI18n } from 'vue-i18n';
const { t } = useI18n();
// flag // flag
watch(flag, (newFlag, oldFlag) => { watch(flag, (newFlag, oldFlag) => {
// flag // flag
@ -68,7 +72,7 @@ const getChannel = async function () {
console.log('请求频道列表失败', error) console.log('请求频道列表失败', error)
ElMessage({ ElMessage({
type: 'error', type: 'error',
message: '获取频道列表失败,请稍后重试'
message: t('elmessage.getChannelListFailed')
}) })
} }
} }
@ -82,14 +86,14 @@ const getChannel = async function () {
// //
const consumeTypes = ref([ 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) { if (beanConsumeFan.value.jwcode) {
const numRef = /^\d{1,9}$/; const numRef = /^\d{1,9}$/;
if (!numRef.test(beanConsumeFan.value.jwcode)) { if (!numRef.test(beanConsumeFan.value.jwcode)) {
ElMessage.error('请检查精网号格式')
ElMessage.error(t('elmessage.checkJwcodeFormat'))
return return
} }
} }
@ -336,7 +340,7 @@ const getDept = async function () {
console.log('请求地区列表失败', error) console.log('请求地区列表失败', error)
ElMessage({ ElMessage({
type: 'error', type: 'error',
message: '获取地区列表失败,请稍后重试'
message: t('elmessage.getRegionListFailed')
}) })
} }
} }
@ -404,9 +408,16 @@ const exportExcel = async function () {
}, },
} }
const res = await API({ url: '/export/exportFan', data: params })
try {
const res = await API({url: '/export/exportFan', data: params});
if (res.code === 200) { if (res.code === 200) {
ElMessage.success('导出成功')
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) const exportListVisible = ref(false)
@ -432,11 +443,11 @@ const getExportList = async () => {
}); });
exportList.value = filteredData exportList.value = filteredData
} else { } else {
ElMessage.error(result.msg || '获取导出列表失败')
ElMessage.error(result.msg || t('elmessage.getExportListError'))
} }
} catch (error) { } catch (error) {
console.error('获取导出列表出错:', error) console.error('获取导出列表出错:', error)
ElMessage.error('获取导出列表失败,请稍后重试')
ElMessage.error(t('elmessage.getExportListError'))
} finally { } finally {
exportListLoading.value = false exportListLoading.value = false
} }
@ -449,7 +460,7 @@ const downloadExportFile = (item) => {
link.download = item.fileName link.download = item.fileName
link.click() link.click()
} else { } else {
ElMessage.warning('文件还在导出中,请稍后再试')
ElMessage.warning(t('elmessage.exportingInProgress'))
} }
} }
// //
@ -471,15 +482,15 @@ const getTagType = (state) => {
const getTagText = (state) => { const getTagText = (state) => {
switch (state) { switch (state) {
case 0: case 0:
return '待执行';
return t('elmessage.pendingExecution');
case 1: case 1:
return '执行中';
return t('elmessage.executing');
case 2: case 2:
return '执行完成';
return t('elmessage.executed');
case 3: case 3:
return '执行出错';
return t('elmessage.errorExecution');
default: default:
return '未知状态';
return t('elmessage.unknownStatus');
} }
} }
</script> </script>
@ -489,18 +500,18 @@ const getTagText = (state) => {
<el-col style="margin-bottom: 1vh"> <el-col style="margin-bottom: 1vh">
<div class="select"> <div class="select">
<div class="selectRow"> <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>
<div class="selectRow"> <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-option v-for="(item, index) in dept" :key="index" :label="item" :value="item" />
</el-select> </el-select>
</div> </div>
<div class="selectRow"> <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-option v-for="(item, index) in channels" :key="index" :label="item" :value="item" />
</el-select> </el-select>
</div> </div>
@ -509,9 +520,9 @@ const getTagText = (state) => {
<el-col> <el-col>
<div class="select"> <div class="select">
<div class="selectRow" style="width: 36vw;"> <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" /> @change="handleDatePickerChange" value-format="YYYY-MM-DD HH:mm:ss" :default-time="defaultTime" />
<div v-if="false"> <div v-if="false">
<el-button @click="getToday()" :type="activeTimeRange === 'today' ? 'primary' : ''"></el-button> <el-button @click="getToday()" :type="activeTimeRange === 'today' ? 'primary' : ''"></el-button>
@ -520,24 +531,24 @@ const getTagText = (state) => {
</div> </div>
</div> </div>
<div class="selectRow" style="justify-content: flex-start;"> <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>
</div> </div>
</el-col> </el-col>
</el-card> </el-card>
<el-card class="card2"> <el-card class="card2">
<div class="goldStatistics"> <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>
<div style="overflow-y: auto"> <div style="overflow-y: auto">
<el-table :data="tableData" style="width: 82vw" height="57vh" @sort-change="handleSortChange"
<el-table :data="tableData" style="width: 82vw" height="65vh" @sort-change="handleSortChange"
:row-style="{ height: '50px' }"> :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"> <template #default="scope">
<span>{{ <span>{{
scope.$index + 1 + (getObj.pageNum - 1) * getObj.pageSize scope.$index + 1 + (getObj.pageNum - 1) * getObj.pageSize
@ -545,20 +556,20 @@ const getTagText = (state) => {
</template> </template>
</el-table-column> </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"> <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> </template>
</el-table-column> </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> </el-table>
</div> </div>
@ -571,33 +582,33 @@ const getTagText = (state) => {
</el-card> </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 :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"> <template #default="scope">
<el-tag :type="getTagType(scope.row.state)" :effect="scope.row.state === 3 ? 'light' : 'plain'"> <el-tag :type="getTagType(scope.row.state)" :effect="scope.row.state === 3 ? 'light' : 'plain'">
{{ getTagText(scope.row.state) }} {{ getTagText(scope.row.state) }}
</el-tag> </el-tag>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="createTime" label="创建时间">
<el-table-column prop="createTime" :label="t('common_export.createTime')">
<template #default="scope"> <template #default="scope">
{{ moment(scope.row.createTime).format('YYYY-MM-DD HH:mm:ss') }} {{ moment(scope.row.createTime).format('YYYY-MM-DD HH:mm:ss') }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作">
<el-table-column :label="t('common_export.operation')">
<template #default="scope"> <template #default="scope">
<el-button type="primary" size="small" @click="downloadExportFile(scope.row)" <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> </el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<template #footer> <template #footer>
<div class="dialog-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> </div>
</template> </template>
</el-dialog> </el-dialog>
@ -663,7 +674,7 @@ const getTagText = (state) => {
padding: 0 0.5vw; padding: 0 0.5vw;
.text { .text {
width: 5vw;
width: 5.3vw;
font-size: 15px; font-size: 15px;
} }

133
src/views/consume/bean/liveStream.vue

@ -6,6 +6,9 @@ import API from '@/util/http.js'
import moment from 'moment' import moment from 'moment'
import {useAdminStore} from "@/store/index.js"; import {useAdminStore} from "@/store/index.js";
import {storeToRefs} from "pinia"; import {storeToRefs} from "pinia";
//
import { useI18n } from 'vue-i18n';
const { t } = useI18n();
const adminStore = useAdminStore(); const adminStore = useAdminStore();
const {flag} = storeToRefs(adminStore); const {flag} = storeToRefs(adminStore);
@ -73,7 +76,7 @@ const getGift = async function () {
console.log('请求礼物列表失败', error) console.log('请求礼物列表失败', error)
ElMessage({ ElMessage({
type: 'error', type: 'error',
message: '获取礼物列表失败,请稍后重试'
message: t('elmessage.getGiftListFailed')
}) })
} }
} }
@ -95,19 +98,19 @@ const getChannel = async function () {
console.log('请求频道列表失败', error) console.log('请求频道列表失败', error)
ElMessage({ ElMessage({
type: 'error', type: 'error',
message: '获取频道列表失败,请稍后重试'
message: t('elmessage.getChannelListFailed')
}) })
} }
} }
// //
const consumeTypes = ref([ 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) => { const handleTypeChange = (value) => {
@ -160,7 +163,7 @@ const getDept = async function () {
console.log('请求地区列表失败', error) console.log('请求地区列表失败', error)
ElMessage({ ElMessage({
type: 'error', type: 'error',
message: '获取地区列表失败,请稍后重试'
message: t('elmessage.getRegionListFailed')
}) })
} }
} }
@ -289,7 +292,7 @@ const search = function () {
if (beanConsumeLive.value.jwcode) { if (beanConsumeLive.value.jwcode) {
const numRef = /^\d{1,9}$/; const numRef = /^\d{1,9}$/;
if (!numRef.test(beanConsumeLive.value.jwcode)) { if (!numRef.test(beanConsumeLive.value.jwcode)) {
ElMessage.error('请检查精网号格式')
ElMessage.error(t('elmessage.checkJwcodeFormat'))
return return
} }
} }
@ -435,13 +438,13 @@ const exportExcel = async function () {
const res = await API({url: '/export/exportLive', data: params}); const res = await API({url: '/export/exportLive', data: params});
console.log('导出请求响应:', res); console.log('导出请求响应:', res);
if (res.code === 200) { if (res.code === 200) {
ElMessage.success('导出成功');
ElMessage.success(t('elmessage.exportSuccess'));
} else { } else {
ElMessage.error(res.message || '导出失败,请稍后重试');
ElMessage.error(res.message || t('elmessage.exportFailed'));
} }
} catch (error) { } catch (error) {
console.error('导出请求出错:', error); console.error('导出请求出错:', error);
ElMessage.error('导出失败,请稍后重试');
ElMessage.error(t('elmessage.exportFailed'));
} }
} }
const exportListVisible = ref(false) const exportListVisible = ref(false)
@ -468,11 +471,11 @@ const getExportList = async () => {
}); });
exportList.value = filteredData exportList.value = filteredData
} else { } else {
ElMessage.error(result.msg || '获取导出列表失败')
ElMessage.error(result.msg || t('elmessage.getExportListError'))
} }
} catch (error) { } catch (error) {
console.error('获取导出列表出错:', error) console.error('获取导出列表出错:', error)
ElMessage.error('获取导出列表失败,请稍后重试')
ElMessage.error(t('elmessage.getExportListError'))
} finally { } finally {
exportListLoading.value = false exportListLoading.value = false
} }
@ -485,7 +488,7 @@ const downloadExportFile = (item) => {
link.download = item.fileName link.download = item.fileName
link.click() link.click()
} else { } else {
ElMessage.warning('文件还在导出中,请稍后再试')
ElMessage.warning(t('elmessage.exportingInProgress'))
} }
} }
// //
@ -507,15 +510,15 @@ const getTagType = (state) => {
const getTagText = (state) => { const getTagText = (state) => {
switch (state) { switch (state) {
case 0: case 0:
return '待执行';
return t('elmessage.pendingExecution');
case 1: case 1:
return '执行中';
return t('elmessage.executing');
case 2: case 2:
return '执行完成';
return t('elmessage.executed');
case 3: case 3:
return '执行出错';
return t('elmessage.errorExecution');
default: default:
return '未知状态';
return t('elmessage.unknownStatus');
} }
} }
</script> </script>
@ -525,42 +528,42 @@ const getTagText = (state) => {
<el-col style="margin-bottom: 1vh"> <el-col style="margin-bottom: 1vh">
<div class="select"> <div class="select">
<div class="selectRow"> <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>
<div class="selectRow"> <div class="selectRow">
<el-text class="text">地区</el-text>
<el-select class="selectContent" v-model="beanConsumeLive.dept" placeholder="请选择地区" clearable>
<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-option v-for="(item, index) in dept" :key="index" :label="item" :value="item"/>
</el-select> </el-select>
</div> </div>
<div class="selectRow" style="width: 14vw;"> <div class="selectRow" style="width: 14vw;">
<el-text class="text">礼物名称</el-text>
<el-select class="selectContent" v-model="beanConsumeLive.gift" placeholder="请选择礼物名称" clearable
<el-text class="text">{{ t('common.giftName') }}</el-text>
<el-select class="selectContent" v-model="beanConsumeLive.gift" :placeholder="t('common.giftNamePlaceholder')" clearable
filterable filterable
allow-create default-first-option> allow-create default-first-option>
<el-option v-for="(item, index) in gifts" :key="index" :label="item" :value="item"/> <el-option v-for="(item, index) in gifts" :key="index" :label="item" :value="item"/>
</el-select> </el-select>
</div> </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
<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> filterable allow-create default-first-option>
<el-option v-for="(item, index) in channels" :key="index" :label="item" :value="item"/> <el-option v-for="(item, index) in channels" :key="index" :label="item" :value="item"/>
</el-select> </el-select>
</div> </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>
</div> </div>
</el-col> </el-col>
<el-col> <el-col>
<div class="select"> <div class="select">
<div class="selectRow" style="width: 31.4vw;"> <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"
<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"/> @change="handleDatePickerChange" :default-time="defaultTime"/>
<div v-if="false"> <div v-if="false">
<el-button @click="getToday()" :type="activeTimeRange === 'today' ? 'primary' : ''"> </el-button> <el-button @click="getToday()" :type="activeTimeRange === 'today' ? 'primary' : ''"> </el-button>
@ -569,24 +572,24 @@ const getTagText = (state) => {
</div> </div>
</div> </div>
<div class="selectRow" style="justify-content: flex-start;"> <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>
</div> </div>
</el-col> </el-col>
</el-card> </el-card>
<el-card class="card2"> <el-card class="card2">
<div class="goldStatistics"> <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>
<div style="overflow-y: auto"> <div style="overflow-y: auto">
<el-table :data="tableData" style="width: 82vw" height="56vh" @sort-change="handleSortChange"
<el-table :data="tableData" style="width: 82vw" height="65vh" @sort-change="handleSortChange"
:row-style="{ height: '50px' }"> :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"> <template #default="scope">
<span>{{ <span>{{
scope.$index + 1 + (getObj.pageNum - 1) * getObj.pageSize scope.$index + 1 + (getObj.pageNum - 1) * getObj.pageSize
@ -594,23 +597,23 @@ const getTagText = (state) => {
</template> </template>
</el-table-column> </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>
<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"> <template #default="scope">
{{ scope.row.isBackpack == 1 ? '是' : '否' }}
{{ scope.row.isBackpack == 1 ? t('common_list.yes') : t('common_list.no') }}
</template> </template>
</el-table-column> </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> </el-table>
</div> </div>
<el-pagination background :current-page="getObj.pageNum" :page-size="getObj.pageSize" <el-pagination background :current-page="getObj.pageNum" :page-size="getObj.pageSize"
@ -620,33 +623,33 @@ const getTagText = (state) => {
</el-card> </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 :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"> <template #default="scope">
<el-tag :type="getTagType(scope.row.state)" :effect="scope.row.state === 3 ? 'light' : 'plain'"> <el-tag :type="getTagType(scope.row.state)" :effect="scope.row.state === 3 ? 'light' : 'plain'">
{{ getTagText(scope.row.state) }} {{ getTagText(scope.row.state) }}
</el-tag> </el-tag>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="createTime" label="创建时间">
<el-table-column prop="createTime" :label="t('common_export.createTime')">
<template #default="scope"> <template #default="scope">
{{ moment(scope.row.createTime).format('YYYY-MM-DD HH:mm:ss') }} {{ moment(scope.row.createTime).format('YYYY-MM-DD HH:mm:ss') }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作">
<el-table-column :label="t('common_export.operation')">
<template #default="scope"> <template #default="scope">
<el-button type="primary" size="small" @click="downloadExportFile(scope.row)" <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> </el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<template #footer> <template #footer>
<div class="dialog-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> </div>
</template> </template>
</el-dialog> </el-dialog>
@ -711,7 +714,7 @@ const getTagText = (state) => {
padding: 0 0.5vw; padding: 0 0.5vw;
.text { .text {
width: 5vw;
width: 5.3vw;
font-size: 15px; font-size: 15px;
} }

2
src/views/moneyManage/receiveDetail/receiveDetail1.vue

@ -1497,7 +1497,7 @@ onMounted(async function () {
if (adminData.value.roleId == 2) { if (adminData.value.roleId == 2) {
superAdmin.value = true superAdmin.value = true
if(adminData.value.markets == '总部' || adminData.value.markets == '研发部' || adminData.value.markets == 'headquarters'){
if(adminData.value.markets == '总部' || adminData.value.markets == '研发部' || adminData.value.markets == 'Headquarters'){
console.log('提示了吗'); console.log('提示了吗');
ElMessageBox.alert('管理员账号只能看到所属地区对应地区财务数据,请注意设置所属地区','注意',{ ElMessageBox.alert('管理员账号只能看到所属地区对应地区财务数据,请注意设置所属地区','注意',{

4
src/views/permissions/userPermission.vue

@ -810,9 +810,9 @@ const confirmResetPassword = async function () {
// //
if (adminData.value.markets.includes(currentRow.value.market) || adminData.value.markets[0] === '总部' || adminData.value.markets[0] === '研发部' || adminData.value.markets[0] === 'headquarters' || adminData.value.markets[0] === 'R&D Department') {
if (adminData.value.markets.includes(currentRow.value.market) || adminData.value.markets[0] === '总部' || adminData.value.markets[0] === '研发部' || adminData.value.markets[0] === 'Headquarters' || adminData.value.markets[0] === 'R&D Department') {
console.log('符合条件,可以操作', adminData.value.markets.includes(currentRow.value.market) || adminData.value.markets[0] === '总部' || adminData.value.markets[0] === '研发部' || adminData.value.markets[0] === 'headquarters' || adminData.value.markets[0] === 'R&D Department');
console.log('符合条件,可以操作', adminData.value.markets.includes(currentRow.value.market) || adminData.value.markets[0] === '总部' || adminData.value.markets[0] === '研发部' || adminData.value.markets[0] === 'Headquarters' || adminData.value.markets[0] === 'R&D Department');
const params = { const params = {
account: currentRow.value.account, account: currentRow.value.account,
} }

2
src/views/recharge/bean/addBeanRecharge.vue

@ -276,7 +276,7 @@ const handleAddForm = async () => {
width: 35vw; width: 35vw;
height: 28vh; height: 28vh;
margin-top: 5vh; margin-top: 5vh;
display: flex;
// display: flex;
justify-content: center; justify-content: center;
} }
} }

2
src/views/workspace/index.vue

@ -42,7 +42,7 @@ const getAdminData = async function () {
loading.value = true; // loading.value = true; //
const result = await API({url: '/admin/userinfo', data: {}}); const result = await API({url: '/admin/userinfo', data: {}});
GraphFlag.value = result.markets !== '总部' && result.markets !== '研发部' GraphFlag.value = result.markets !== '总部' && result.markets !== '研发部'
&& result.markets !== 'headquarters' && result.markets !== 'R&D Department'
&& result.markets !== 'Headquarters' && result.markets !== 'R&D Department'
; ;

Loading…
Cancel
Save