fix: hide likei displays in admin

This commit is contained in:
hy 2026-04-22 17:06:02 +08:00
parent 44531d62bb
commit 32c4e70187
38 changed files with 269 additions and 113 deletions

View File

@ -5,7 +5,10 @@ import { useAccessStore } from '@vben/stores';
import { Input, Select } from 'antdv-next'; import { Input, Select } from 'antdv-next';
import { getAllowedSysOrigins } from '#/views/system/shared'; import {
getAllowedSysOrigins,
getDisplayableSysOriginOptions,
} from '#/views/system/shared';
import SysOriginSelect from '#/components/sys-origin-select.vue'; import SysOriginSelect from '#/components/sys-origin-select.vue';
type AccountSelectType = 'LONG' | 'SHORT'; type AccountSelectType = 'LONG' | 'SHORT';
@ -44,9 +47,12 @@ const sysOriginType = ref('');
const sysOriginOptions = computed(() => const sysOriginOptions = computed(() =>
getAllowedSysOrigins(accessStore.accessCodes || []), getAllowedSysOrigins(accessStore.accessCodes || []),
); );
const displaySysOriginOptions = computed(() =>
getDisplayableSysOriginOptions(sysOriginOptions.value),
);
const showSysOriginTypeSelect = computed( const showSysOriginTypeSelect = computed(
() => !props.sysOrigin && sysOriginOptions.value.length > 0, () => !props.sysOrigin && displaySysOriginOptions.value.length > 0,
); );
const sysOriginVal = computed(() => props.sysOrigin || sysOriginType.value); const sysOriginVal = computed(() => props.sysOrigin || sysOriginType.value);
@ -192,7 +198,7 @@ watch(
v-if="showSysOriginTypeSelect && selectType !== 'LONG'" v-if="showSysOriginTypeSelect && selectType !== 'LONG'"
v-model:value="sysOriginType" v-model:value="sysOriginType"
class="account-input__origin" class="account-input__origin"
:options="sysOriginOptions" :options="displaySysOriginOptions"
@change="handleSysOriginTypeChange" @change="handleSysOriginTypeChange"
/> />
</div> </div>

View File

@ -1,7 +1,12 @@
<script lang="ts" setup> <script lang="ts" setup>
import { computed } from 'vue'; import { computed } from 'vue';
import { SYS_ORIGIN_OPTIONS } from '#/views/system/shared'; import {
SYS_ORIGIN_OPTIONS,
getDisplaySysOriginText,
getDisplayableSysOriginOptions,
isHiddenSysOrigin,
} from '#/views/system/shared';
import SysOriginIcon from './sys-origin-icon.vue'; import SysOriginIcon from './sys-origin-icon.vue';
@ -16,15 +21,18 @@ const props = withDefaults(
}, },
); );
const optionMap = new Map(SYS_ORIGIN_OPTIONS.map((item) => [item.value, item])); const optionMap = new Map(
getDisplayableSysOriginOptions(SYS_ORIGIN_OPTIONS).map((item) => [item.value, item]),
);
const hidden = computed(() => isHiddenSysOrigin(props.value));
const option = computed(() => optionMap.get(String(props.value || ''))); const option = computed(() => optionMap.get(String(props.value || '')));
const label = computed(() => option.value?.label || String(props.value || '-')); const label = computed(() => option.value?.label || getDisplaySysOriginText(props.value));
const iconCode = computed(() => option.value?.icon || String(props.value || '')); const iconCode = computed(() => option.value?.icon || getDisplaySysOriginText(props.value));
</script> </script>
<template> <template>
<span class="sys-origin-label"> <span v-if="!hidden && label" class="sys-origin-label">
<SysOriginIcon :code="iconCode" :label="label" :size="size" /> <SysOriginIcon :code="iconCode" :label="label" :size="size" />
<span class="sys-origin-label__text">{{ label }}</span> <span class="sys-origin-label__text">{{ label }}</span>
</span> </span>

View File

@ -7,7 +7,9 @@ import { Select } from 'antdv-next';
import { import {
SYS_ORIGIN_OPTIONS, SYS_ORIGIN_OPTIONS,
getAllowedSysOrigins, getDisplayableSysOriginOptions,
getDisplayableSysOrigins,
isHiddenSysOrigin,
} from '#/views/system/shared'; } from '#/views/system/shared';
import SysOriginIcon from './sys-origin-icon.vue'; import SysOriginIcon from './sys-origin-icon.vue';
@ -40,27 +42,36 @@ const attrs = useAttrs();
const accessStore = useAccessStore(); const accessStore = useAccessStore();
const fallbackOptions = computed(() => { const fallbackOptions = computed(() => {
const options = getAllowedSysOrigins(accessStore.accessCodes || []); const options = getDisplayableSysOrigins(accessStore.accessCodes || []);
return (options.length > 0 ? options : SYS_ORIGIN_OPTIONS) as AppOriginOption[]; return (options.length > 0 ? options : getDisplayableSysOriginOptions(SYS_ORIGIN_OPTIONS)) as AppOriginOption[];
}); });
const normalizedOptions = computed(() => const normalizedOptions = computed(() =>
(props.options?.length ? props.options : fallbackOptions.value).map((item) => { getDisplayableSysOriginOptions(props.options?.length ? props.options : fallbackOptions.value).map(
const value = String(item.value ?? ''); (item) => {
const label = String(item.label ?? ('name' in item ? item.name : '') ?? value); const value = String(item.value ?? '');
return { const label = String(item.label ?? ('name' in item ? item.name : '') ?? value);
...item, return {
icon: String(item.icon || value).toLowerCase(), ...item,
label: label || value, icon: String(item.icon || value).toLowerCase(),
value, label: label || value,
}; value,
}), };
},
),
); );
const optionMap = computed( const optionMap = computed(
() => new Map(normalizedOptions.value.map((item) => [String(item.value), item])), () => new Map(normalizedOptions.value.map((item) => [String(item.value), item])),
); );
const displayValue = computed<SelectValue>(() => {
if (Array.isArray(props.value)) {
return props.value.filter((item) => !isHiddenSysOrigin(item));
}
return isHiddenSysOrigin(props.value) ? undefined : props.value;
});
const selectAttrs = computed(() => { const selectAttrs = computed(() => {
const nextAttrs = { ...attrs } as Record<string, any>; const nextAttrs = { ...attrs } as Record<string, any>;
delete nextAttrs.options; delete nextAttrs.options;
@ -75,7 +86,7 @@ const selectAttrs = computed(() => {
}); });
function renderContent(option?: Record<string, any> | null) { function renderContent(option?: Record<string, any> | null) {
if (!option) { if (!option || isHiddenSysOrigin(option.value ?? option.label ?? option.name)) {
return null; return null;
} }
const label = String(option.label || option.name || option.value || '-'); const label = String(option.label || option.name || option.value || '-');
@ -109,6 +120,9 @@ function renderOption(option: Record<string, any>) {
} }
function renderLabel(item: Record<string, any>) { function renderLabel(item: Record<string, any>) {
if (isHiddenSysOrigin(item?.value ?? item?.label)) {
return null;
}
return renderContent( return renderContent(
resolveOption(item) || { resolveOption(item) || {
icon: item?.value, icon: item?.value,
@ -127,7 +141,7 @@ function handleChange(value: SelectValue, option: any) {
<template> <template>
<Select <Select
v-bind="selectAttrs" v-bind="selectAttrs"
:value="value" :value="displayValue"
:options="normalizedOptions" :options="normalizedOptions"
option-filter-prop="label" option-filter-prop="label"
option-label-prop="label" option-label-prop="label"

View File

@ -0,0 +1,17 @@
<script lang="ts" setup>
import { computed } from 'vue';
import { Tag } from 'antdv-next';
import { getDisplaySysOriginText } from '#/views/system/shared';
const props = defineProps<{
value?: unknown;
}>();
const text = computed(() => getDisplaySysOriginText(props.value));
</script>
<template>
<Tag v-if="text">{{ text }}</Tag>
</template>

View File

@ -3,7 +3,10 @@ import { computed, reactive, ref, watch } from 'vue';
import type { LegacyVersionItem } from '#/api/legacy/app-system'; import type { LegacyVersionItem } from '#/api/legacy/app-system';
import { addAppVersion, updateAppVersion } from '#/api/legacy/app-system'; import { addAppVersion, updateAppVersion } from '#/api/legacy/app-system';
import { PLATFORM_ORIGINS } from '#/views/system/shared'; import {
PLATFORM_ORIGINS,
getDisplaySysOriginText,
} from '#/views/system/shared';
import { import {
Form, Form,
@ -45,9 +48,16 @@ const form = reactive<Record<string, any>>({
}); });
const isAdd = computed(() => !props.updateData); const isAdd = computed(() => !props.updateData);
const title = computed(() => const title = computed(() => {
isAdd.value ? `添加(${props.sysOrigin || '-'})` : `修改(${props.updateData?.sysOrigin || '-'})`, const sysOrigin = getDisplaySysOriginText(
); isAdd.value ? props.sysOrigin : props.updateData?.sysOrigin,
);
return sysOrigin
? `${isAdd.value ? '添加' : '修改'}(${sysOrigin})`
: isAdd.value
? '添加'
: '修改';
});
const selectedPlatform = computed( const selectedPlatform = computed(
() => PLATFORM_ORIGINS.find((item) => item.value === form.platform) || null, () => PLATFORM_ORIGINS.find((item) => item.value === form.platform) || null,

View File

@ -16,7 +16,11 @@ import {
} from '#/api/legacy/oss'; } from '#/api/legacy/oss';
import InlineFilterField from '#/views/_shared/inline-filter-field.vue'; import InlineFilterField from '#/views/_shared/inline-filter-field.vue';
import InlineFilterToolbar from '#/views/_shared/inline-filter-toolbar.vue'; import InlineFilterToolbar from '#/views/_shared/inline-filter-toolbar.vue';
import { formatDate, getAllowedSysOrigins } from '#/views/system/shared'; import {
formatDate,
getAllowedSysOrigins,
getDisplaySysOriginText,
} from '#/views/system/shared';
import { import {
Button, Button,
@ -279,7 +283,7 @@ loadData(true);
> >
<template #bodyCell="{ column, record }"> <template #bodyCell="{ column, record }">
<template v-if="column.key === 'sysOrigin'"> <template v-if="column.key === 'sysOrigin'">
{{ record.sysOrigin || '-' }} {{ getDisplaySysOriginText(record.sysOrigin) }}
</template> </template>
<template v-else-if="column.key === 'cover'"> <template v-else-if="column.key === 'cover'">
<img <img

View File

@ -18,6 +18,7 @@ import {
getAccessImgUrl, getAccessImgUrl,
simpleUploadFile, simpleUploadFile,
} from '#/api/legacy/oss'; } from '#/api/legacy/oss';
import SysOriginTag from '#/components/sys-origin-tag.vue';
import InlineFilterField from '#/views/_shared/inline-filter-field.vue'; import InlineFilterField from '#/views/_shared/inline-filter-field.vue';
import InlineFilterToolbar from '#/views/_shared/inline-filter-toolbar.vue'; import InlineFilterToolbar from '#/views/_shared/inline-filter-toolbar.vue';
import { import {
@ -37,7 +38,6 @@ import {
SelectOption, SelectOption,
Switch, Switch,
Table, Table,
Tag,
message, message,
} from 'antdv-next'; } from 'antdv-next';
@ -356,7 +356,7 @@ loadData(true);
> >
<template #bodyCell="{ column, record }"> <template #bodyCell="{ column, record }">
<template v-if="column.key === 'sysOrigin'"> <template v-if="column.key === 'sysOrigin'">
<Tag>{{ record.sysOrigin || '-' }}</Tag> <SysOriginTag :value="record.sysOrigin" />
</template> </template>
<template v-else-if="column.key === 'sourceType'"> <template v-else-if="column.key === 'sourceType'">
{{ getSourceTypeName(record.sourceType as number | string) }} {{ getSourceTypeName(record.sourceType as number | string) }}

View File

@ -2,7 +2,7 @@
import { computed, ref, watch } from 'vue'; import { computed, ref, watch } from 'vue';
import { getRoomProfileDetailsByRoomId } from '#/api/legacy/app-system'; import { getRoomProfileDetailsByRoomId } from '#/api/legacy/app-system';
import { formatDate } from '#/views/system/shared'; import { formatDate, getDisplaySysOriginText } from '#/views/system/shared';
import { import {
Card, Card,
@ -129,7 +129,7 @@ watch(
{{ roomDetails.del ? 'Yes' : 'NO' }} {{ roomDetails.del ? 'Yes' : 'NO' }}
</DescriptionsItem> </DescriptionsItem>
<DescriptionsItem label="平台"> <DescriptionsItem label="平台">
{{ userProfile.sysOriginChild || userProfile.originSys || '-' }} {{ getDisplaySysOriginText(userProfile.sysOriginChild || userProfile.originSys) }}
</DescriptionsItem> </DescriptionsItem>
<DescriptionsItem label="公告"> <DescriptionsItem label="公告">
{{ roomDetails.roomDesc || '-' }} {{ roomDetails.roomDesc || '-' }}

View File

@ -4,6 +4,7 @@ import { computed, reactive, ref, watch } from 'vue';
import { saveOrUpdateSpecialId } from '#/api/legacy/app-system'; import { saveOrUpdateSpecialId } from '#/api/legacy/app-system';
import { getUserBaseInfoBySysOriginAccount } from '#/api/legacy/user'; import { getUserBaseInfoBySysOriginAccount } from '#/api/legacy/user';
import AccountInput from '#/components/account-input.vue'; import AccountInput from '#/components/account-input.vue';
import { getDisplaySysOriginText } from '#/views/system/shared';
import { import {
Button, Button,
@ -173,7 +174,7 @@ async function handleSubmit() {
> >
<Form :label-col="{ span: 6 }" :wrapper-col="{ span: 18 }" layout="horizontal"> <Form :label-col="{ span: 6 }" :wrapper-col="{ span: 18 }" layout="horizontal">
<FormItem label="系统"> <FormItem label="系统">
<div class="readonly-value">{{ sysOrigin }}</div> <div class="readonly-value">{{ getDisplaySysOriginText(sysOrigin) }}</div>
</FormItem> </FormItem>
<FormItem label="用户"> <FormItem label="用户">
<AccountInput <AccountInput

View File

@ -21,6 +21,7 @@ import {
updateSpecialIdExpiredTime, updateSpecialIdExpiredTime,
} from '#/api/legacy/app-system'; } from '#/api/legacy/app-system';
import AccountInput from '#/components/account-input.vue'; import AccountInput from '#/components/account-input.vue';
import SysOriginTag from '#/components/sys-origin-tag.vue';
import InlineFilterField from '#/views/_shared/inline-filter-field.vue'; import InlineFilterField from '#/views/_shared/inline-filter-field.vue';
import InlineFilterToolbar from '#/views/_shared/inline-filter-toolbar.vue'; import InlineFilterToolbar from '#/views/_shared/inline-filter-toolbar.vue';
import { formatDate, import { formatDate,
@ -36,7 +37,6 @@ import {
Table, Table,
Tabs, Tabs,
TabPane, TabPane,
Tag,
message, message,
} from 'antdv-next'; } from 'antdv-next';
@ -398,7 +398,7 @@ loadLogData(true);
> >
<template #bodyCell="{ column, record }"> <template #bodyCell="{ column, record }">
<template v-if="column.key === 'sysOrigin'"> <template v-if="column.key === 'sysOrigin'">
<Tag>{{ getSpecialInfo(record).sysOrigin || '-' }}</Tag> <SysOriginTag :value="getSpecialInfo(record).sysOrigin" />
</template> </template>
<template v-else-if="column.key === 'user'"> <template v-else-if="column.key === 'user'">
<button class="user-cell" type="button" @click="openUserDetails(record)"> <button class="user-cell" type="button" @click="openUserDetails(record)">
@ -509,7 +509,7 @@ loadLogData(true);
> >
<template #bodyCell="{ column, record }"> <template #bodyCell="{ column, record }">
<template v-if="column.key === 'sysOrigin'"> <template v-if="column.key === 'sysOrigin'">
<Tag>{{ record.sysOrigin || '-' }}</Tag> <SysOriginTag :value="record.sysOrigin" />
</template> </template>
<template v-else-if="column.key === 'user'"> <template v-else-if="column.key === 'user'">
<button class="user-cell" type="button" @click="openUserDetails(record as any)"> <button class="user-cell" type="button" @click="openUserDetails(record as any)">

View File

@ -11,6 +11,8 @@ import SysOriginSelect from '#/components/sys-origin-select.vue';
import InlineFilterField from '#/views/_shared/inline-filter-field.vue'; import InlineFilterField from '#/views/_shared/inline-filter-field.vue';
import InlineFilterToolbar from '#/views/_shared/inline-filter-toolbar.vue'; import InlineFilterToolbar from '#/views/_shared/inline-filter-toolbar.vue';
import { getAllowedSysOrigins } from '#/views/system/shared'; import { getAllowedSysOrigins } from '#/views/system/shared';
import { getDisplaySysOriginText, getDisplayableSysOrigins } from '#/views/system/shared';
import SysOriginTag from '#/components/sys-origin-tag.vue';
import { import {
Button, Button,
@ -79,6 +81,9 @@ const sysOriginOptions = computed(() => {
const options = getAllowedSysOrigins(accessStore.accessCodes || []); const options = getAllowedSysOrigins(accessStore.accessCodes || []);
return options.length > 0 ? options : SYS_ORIGIN_OPTIONS; return options.length > 0 ? options : SYS_ORIGIN_OPTIONS;
}); });
const displaySysOriginOptions = computed(() =>
getDisplayableSysOrigins(accessStore.accessCodes || []),
);
const currentPage = computed< const currentPage = computed<
ApprovalGalleryPage | ApprovalHistoryPage | ApprovalTablePage | null ApprovalGalleryPage | ApprovalHistoryPage | ApprovalTablePage | null
@ -435,6 +440,9 @@ async function handleBulkAction(action: {
} }
function renderCellText(cell: ApprovalTableCell) { function renderCellText(cell: ApprovalTableCell) {
if (cell.type === 'origin') {
return getDisplaySysOriginText(cell.text);
}
return cell.text || '-'; return cell.text || '-';
} }
@ -502,6 +510,7 @@ function isAccountFilter(filter: ApprovalFilter) {
<InlineFilterToolbar> <InlineFilterToolbar>
<template v-for="filter in currentPage?.filters || []" :key="`${filter.type}-${filter.field || filter.label}`"> <template v-for="filter in currentPage?.filters || []" :key="`${filter.type}-${filter.field || filter.label}`">
<InlineFilterField <InlineFilterField
v-if="filter.type !== 'sysOrigin' || displaySysOriginOptions.length > 0"
:control-width="getFilterControlWidth(filter)" :control-width="getFilterControlWidth(filter)"
:label="filter.label" :label="filter.label"
:label-width="getFilterLabelWidth(filter)" :label-width="getFilterLabelWidth(filter)"
@ -730,7 +739,7 @@ function isAccountFilter(filter: ApprovalFilter) {
</template> </template>
<template v-else-if="cell.type === 'origin'"> <template v-else-if="cell.type === 'origin'">
<Tag>{{ renderCellText(cell) }}</Tag> <SysOriginTag :value="cell.text" />
</template> </template>
<template v-else-if="cell.type === 'images'"> <template v-else-if="cell.type === 'images'">

View File

@ -16,6 +16,7 @@ import {
userDynamicTable, userDynamicTable,
} from '#/api/legacy/dynamic'; } from '#/api/legacy/dynamic';
import AccountInput from '#/components/account-input.vue'; import AccountInput from '#/components/account-input.vue';
import SysOriginTag from '#/components/sys-origin-tag.vue';
import { formatDate, import { formatDate,
getAllowedSysOrigins } from '#/views/system/shared'; getAllowedSysOrigins } from '#/views/system/shared';
@ -370,7 +371,7 @@ loadData(true);
<div class="top-form"> <div class="top-form">
<div class="top-row"> <div class="top-row">
<span>平台</span> <span>平台</span>
<Tag>{{ query.sysOrigin }}</Tag> <SysOriginTag :value="query.sysOrigin" />
</div> </div>
<div class="top-row top-input"> <div class="top-row top-input">
<span>权重</span> <span>权重</span>

View File

@ -8,6 +8,7 @@ import {
activityPicture, activityPicture,
deleteActivityPicture, deleteActivityPicture,
} from '#/api/legacy/activity'; } from '#/api/legacy/activity';
import SysOriginTag from '#/components/sys-origin-tag.vue';
import { getAllowedSysOrigins } from '#/views/system/shared'; import { getAllowedSysOrigins } from '#/views/system/shared';
import { import {
@ -17,7 +18,6 @@ import {
Modal, Modal,
Pagination, Pagination,
Table, Table,
Tag,
message, message,
} from 'antdv-next'; } from 'antdv-next';
@ -133,7 +133,7 @@ async function handleCopy(id?: number | string) {
<Page title="活动配置"> <Page title="活动配置">
<Card> <Card>
<div class="toolbar"> <div class="toolbar">
<Tag>{{ query.sysOrigin || '-' }}</Tag> <SysOriginTag :value="query.sysOrigin" />
<Button :loading="loading" type="primary" @click="handleSearch"> <Button :loading="loading" type="primary" @click="handleSearch">
搜索 搜索
</Button> </Button>
@ -149,7 +149,7 @@ async function handleCopy(id?: number | string) {
> >
<template #bodyCell="{ column, record }"> <template #bodyCell="{ column, record }">
<template v-if="column.key === 'sysOrigin'"> <template v-if="column.key === 'sysOrigin'">
<Tag>{{ record.sysOrigin || '-' }}</Tag> <SysOriginTag :value="record.sysOrigin" />
</template> </template>
<template v-else-if="column.key === 'picture'"> <template v-else-if="column.key === 'picture'">
<Image :src="record.picture" class="picture" /> <Image :src="record.picture" class="picture" />

View File

@ -14,7 +14,7 @@ import {
updateBadge, updateBadge,
} from '#/api/legacy/badge'; } from '#/api/legacy/badge';
import AccountInput from '#/components/account-input.vue'; import AccountInput from '#/components/account-input.vue';
import { formatDate } from '#/views/system/shared'; import { formatDate, getDisplaySysOriginText } from '#/views/system/shared';
import { import {
Button, Button,
@ -326,7 +326,9 @@ watch(
class="picture-item" class="picture-item"
> >
<Image :src="item.selectUrl" class="badge-image" /> <Image :src="item.selectUrl" class="badge-image" />
<div>{{ item.sysOrigin }}</div> <div v-if="getDisplaySysOriginText(item.sysOrigin)">
{{ getDisplaySysOriginText(item.sysOrigin) }}
</div>
</div> </div>
</div> </div>
</template> </template>

View File

@ -13,6 +13,7 @@ import {
userBeautifulNumberApplyTable, userBeautifulNumberApplyTable,
} from '#/api/legacy/user'; } from '#/api/legacy/user';
import AccountInput from '#/components/account-input.vue'; import AccountInput from '#/components/account-input.vue';
import SysOriginTag from '#/components/sys-origin-tag.vue';
import { formatDate, import { formatDate,
getAllowedSysOrigins } from '#/views/system/shared'; getAllowedSysOrigins } from '#/views/system/shared';
@ -174,7 +175,7 @@ watch(
> >
<template #bodyCell="{ column, record }"> <template #bodyCell="{ column, record }">
<template v-if="column.key === 'sysOrigin'"> <template v-if="column.key === 'sysOrigin'">
<Tag>{{ record.sysOrigin || '-' }}</Tag> <SysOriginTag :value="record.sysOrigin" />
</template> </template>
<template v-else-if="column.key === 'userBaseInfo'"> <template v-else-if="column.key === 'userBaseInfo'">
<UserProfileLink :profile="record.userBaseInfo" /> <UserProfileLink :profile="record.userBaseInfo" />

View File

@ -10,6 +10,7 @@ import {
addActivityPicture, addActivityPicture,
updateActivityPicture, updateActivityPicture,
} from '#/api/legacy/activity'; } from '#/api/legacy/activity';
import { getDisplaySysOriginText } from '#/views/system/shared';
import { Button, Image, Input, Modal, message } from 'antdv-next'; import { Button, Image, Input, Modal, message } from 'antdv-next';
@ -105,7 +106,13 @@ async function submitForm() {
:confirm-loading="saving" :confirm-loading="saving"
:open="open" :open="open"
destroy-on-close destroy-on-close
:title="form.id ? `修改(${sysOrigin})` : `新增(${sysOrigin})`" :title="
getDisplaySysOriginText(sysOrigin)
? `${form.id ? '修改' : '新增'}(${getDisplaySysOriginText(sysOrigin)})`
: form.id
? '修改'
: '新增'
"
width="520px" width="520px"
@cancel="emit('close')" @cancel="emit('close')"
@ok="submitForm" @ok="submitForm"

View File

@ -10,7 +10,10 @@ import {
getAccessImgUrl, getAccessImgUrl,
simpleUploadFile, simpleUploadFile,
} from '#/api/legacy/oss'; } from '#/api/legacy/oss';
import { getAllowedSysOrigins } from '#/views/system/shared'; import {
getAllowedSysOrigins,
getDisplaySysOriginText,
} from '#/views/system/shared';
import { import {
Button, Button,
@ -48,6 +51,11 @@ const imageInputRef = ref<HTMLInputElement | null>(null);
const sourceInputRef = ref<HTMLInputElement | null>(null); const sourceInputRef = ref<HTMLInputElement | null>(null);
const uploadTarget = ref<{ field: UploadField; index: number } | null>(null); const uploadTarget = ref<{ field: UploadField; index: number } | null>(null);
function getCardTitle(sysOrigin: unknown) {
const text = getDisplaySysOriginText(sysOrigin);
return text ? `${text} 徽章资源` : '徽章资源';
}
function buildRows(row?: Record<string, any> | null) { function buildRows(row?: Record<string, any> | null) {
const pictureMap = new Map<string, Record<string, any>>(); const pictureMap = new Map<string, Record<string, any>>();
(row?.badgePictures || []).forEach((item: Record<string, any>) => { (row?.badgePictures || []).forEach((item: Record<string, any>) => {
@ -151,7 +159,7 @@ async function handleRemove(row: Record<string, any>, field: UploadField) {
v-for="item in list" v-for="item in list"
:key="item.sysOrigin" :key="item.sysOrigin"
size="small" size="small"
:title="`${item.sysOrigin} 徽章资源`" :title="getCardTitle(item.sysOrigin)"
> >
<div class="row"> <div class="row">
<div class="field"> <div class="field">

View File

@ -13,6 +13,7 @@ import {
updateBanner, updateBanner,
} from '#/api/legacy/system'; } from '#/api/legacy/system';
import AccountInput from '#/components/account-input.vue'; import AccountInput from '#/components/account-input.vue';
import { getDisplaySysOriginText } from '#/views/system/shared';
import { import {
AutoComplete, AutoComplete,
@ -324,7 +325,13 @@ async function submitForm() {
:confirm-loading="saving" :confirm-loading="saving"
:open="open" :open="open"
destroy-on-close destroy-on-close
:title="`${form.id ? '修改' : '新增'}(${sysOrigin})`" :title="
getDisplaySysOriginText(sysOrigin)
? `${form.id ? '修改' : '新增'}(${getDisplaySysOriginText(sysOrigin)})`
: form.id
? '修改'
: '新增'
"
width="760px" width="760px"
@cancel="emit('close')" @cancel="emit('close')"
@ok="submitForm" @ok="submitForm"

View File

@ -7,6 +7,7 @@ import {
simpleUploadFile, simpleUploadFile,
} from '#/api/legacy/oss'; } from '#/api/legacy/oss';
import { addMikeType, updateMikeType } from '#/api/legacy/mike'; import { addMikeType, updateMikeType } from '#/api/legacy/mike';
import { getDisplaySysOriginText } from '#/views/system/shared';
import { import {
Button, Button,
@ -80,9 +81,10 @@ const form = reactive<Record<string, any>>({
sysOrigin: '', sysOrigin: '',
}); });
const title = computed(() => const title = computed(() => {
`${form.id ? '修改' : '新增'}(${props.sysOrigin || form.sysOrigin || '-'})`, const sysOrigin = getDisplaySysOriginText(props.sysOrigin || form.sysOrigin);
); return sysOrigin ? `${form.id ? '修改' : '新增'}(${sysOrigin})` : form.id ? '修改' : '新增';
});
watch( watch(
() => props.open, () => props.open,

View File

@ -2,7 +2,7 @@
import { computed, ref, watch } from 'vue'; import { computed, ref, watch } from 'vue';
import { getInAppPurchase } from '#/api/legacy/operate'; import { getInAppPurchase } from '#/api/legacy/operate';
import { formatDate } from '#/views/system/shared'; import { formatDate, getDisplaySysOriginText } from '#/views/system/shared';
import { import {
Descriptions, Descriptions,
@ -99,7 +99,9 @@ watch(
<DescriptionsItem label="跟踪ID">{{ record?.details?.trackId || '-' }}</DescriptionsItem> <DescriptionsItem label="跟踪ID">{{ record?.details?.trackId || '-' }}</DescriptionsItem>
<DescriptionsItem label="订阅ID">{{ record?.details?.subscribeId || '-' }}</DescriptionsItem> <DescriptionsItem label="订阅ID">{{ record?.details?.subscribeId || '-' }}</DescriptionsItem>
<DescriptionsItem label="订单ID" :span="2">{{ record?.details?.orderId || '-' }}</DescriptionsItem> <DescriptionsItem label="订单ID" :span="2">{{ record?.details?.orderId || '-' }}</DescriptionsItem>
<DescriptionsItem label="系统">{{ record?.details?.sysOrigin || '-' }}</DescriptionsItem> <DescriptionsItem v-if="getDisplaySysOriginText(record?.details?.sysOrigin)" label="系统">
{{ getDisplaySysOriginText(record?.details?.sysOrigin) }}
</DescriptionsItem>
<DescriptionsItem label="平台">{{ record?.details?.factory?.platform || '-' }}</DescriptionsItem> <DescriptionsItem label="平台">{{ record?.details?.factory?.platform || '-' }}</DescriptionsItem>
<DescriptionsItem label="渠道">{{ record?.details?.factory?.factoryCode || '-' }}</DescriptionsItem> <DescriptionsItem label="渠道">{{ record?.details?.factory?.factoryCode || '-' }}</DescriptionsItem>
<DescriptionsItem label="国家编号">{{ record?.details?.countryCode || '-' }}</DescriptionsItem> <DescriptionsItem label="国家编号">{{ record?.details?.countryCode || '-' }}</DescriptionsItem>

View File

@ -6,6 +6,8 @@ import {
getRoomProfileBySysOriginAccount, getRoomProfileBySysOriginAccount,
listRoomProfileByAccount, listRoomProfileByAccount,
} from '#/api/legacy/room'; } from '#/api/legacy/room';
import SysOriginTag from '#/components/sys-origin-tag.vue';
import { getDisplaySysOriginText } from '#/views/system/shared';
import { import {
Button, Button,
@ -13,7 +15,6 @@ import {
Input, Input,
Modal, Modal,
Select, Select,
Tag,
} from 'antdv-next'; } from 'antdv-next';
type RoomSelectType = 'LONG_ID' | 'SHORT_ID'; type RoomSelectType = 'LONG_ID' | 'SHORT_ID';
@ -52,6 +53,10 @@ const matchedRoom = ref<Record<string, any> | null>(null);
const roomProfiles = ref<Array<Record<string, any>>>([]); const roomProfiles = ref<Array<Record<string, any>>>([]);
const selectDialogOpen = ref(false); const selectDialogOpen = ref(false);
function getVisibleSysOrigin(value: unknown) {
return getDisplaySysOriginText(value);
}
watch( watch(
() => props.roomId, () => props.roomId,
(value) => { (value) => {
@ -177,7 +182,9 @@ async function clickSearch() {
</div> </div>
<div v-else-if="matchedRoom" class="search-tip search-tip--success"> <div v-else-if="matchedRoom" class="search-tip search-tip--success">
已匹配: {{ matchedRoom.roomName || matchedRoom.id || '-' }} 已匹配: {{ matchedRoom.roomName || matchedRoom.id || '-' }}
<span v-if="matchedRoom.sysOrigin"> / {{ matchedRoom.sysOrigin }}</span> <span v-if="getVisibleSysOrigin(matchedRoom.sysOrigin)">
/ {{ getVisibleSysOrigin(matchedRoom.sysOrigin) }}
</span>
</div> </div>
<Modal <Modal
@ -199,7 +206,7 @@ async function clickSearch() {
/> />
<div class="room-copy"> <div class="room-copy">
<div class="room-title-row"> <div class="room-title-row">
<Tag v-if="item.sysOrigin">{{ item.sysOrigin }}</Tag> <SysOriginTag :value="item.sysOrigin" />
<span class="room-name">{{ item.roomName || '-' }}</span> <span class="room-name">{{ item.roomName || '-' }}</span>
</div> </div>
<div class="room-meta">房间ID {{ item.id || '-' }}</div> <div class="room-meta">房间ID {{ item.id || '-' }}</div>

View File

@ -5,6 +5,7 @@ import { Button, Input, Modal, message } from 'antdv-next';
import { createBankBalance } from '#/api/legacy/operate'; import { createBankBalance } from '#/api/legacy/operate';
import AccountInput from '#/components/account-input.vue'; import AccountInput from '#/components/account-input.vue';
import { getDisplaySysOriginText } from '#/views/system/shared';
const props = defineProps<{ const props = defineProps<{
open: boolean; open: boolean;
@ -68,7 +69,7 @@ async function submitForm() {
<div class="form-grid"> <div class="form-grid">
<div class="field"> <div class="field">
<div class="label">系统</div> <div class="label">系统</div>
<div class="value">{{ sysOrigin || '-' }}</div> <div class="value">{{ getDisplaySysOriginText(sysOrigin) }}</div>
</div> </div>
<div class="field"> <div class="field">
<div class="label">用户ID</div> <div class="label">用户ID</div>

View File

@ -9,7 +9,11 @@ import {
pageDaysUserData, pageDaysUserData,
} from '#/api/legacy/game'; } from '#/api/legacy/game';
import AccountInput from '#/components/account-input.vue'; import AccountInput from '#/components/account-input.vue';
import { formatDate, getAllowedSysOrigins } from '#/views/system/shared'; import {
formatDate,
getAllowedSysOrigins,
getDisplaySysOriginText,
} from '#/views/system/shared';
import { import {
Button, Button,
@ -256,7 +260,7 @@ function handleTableChange(_: any, __: any, sorter: any) {
<UserProfileLink :user-profile="record.userProfile" /> <UserProfileLink :user-profile="record.userProfile" />
</template> </template>
<template v-else-if="column.key === 'sysOrigin'"> <template v-else-if="column.key === 'sysOrigin'">
{{ record.userProfile?.originSys || record.sysOrigin || '-' }} {{ getDisplaySysOriginText(record.userProfile?.originSys || record.sysOrigin) }}
</template> </template>
<template v-else-if="column.key === 'earningsRate'"> <template v-else-if="column.key === 'earningsRate'">
{{ record.earningsRate || 0 }} % {{ record.earningsRate || 0 }} %

View File

@ -15,7 +15,8 @@ import { useAccessStore } from '@vben/stores';
import { getClsGoldRunningWater } from '#/api/legacy/operate'; import { getClsGoldRunningWater } from '#/api/legacy/operate';
import AccountInput from '#/components/account-input.vue'; import AccountInput from '#/components/account-input.vue';
import { formatDate, import { formatDate,
getAllowedSysOrigins } from '#/views/system/shared'; getAllowedSysOrigins,
getDisplaySysOriginText } from '#/views/system/shared';
import { import {
AutoComplete, AutoComplete,
@ -287,7 +288,7 @@ void loadData(true);
> >
<template #bodyCell="{ column, record }"> <template #bodyCell="{ column, record }">
<template v-if="column.key === 'sysOrigin'"> <template v-if="column.key === 'sysOrigin'">
{{ record.runningWater?.sysOrigin || record.sysOrigin || '-' }} {{ getDisplaySysOriginText(record.runningWater?.sysOrigin || record.sysOrigin) }}
</template> </template>
<template v-else-if="column.key === 'userProfile'"> <template v-else-if="column.key === 'userProfile'">
<UserProfileLink <UserProfileLink

View File

@ -15,7 +15,11 @@ import {
setLuckyDrawRatio, setLuckyDrawRatio,
setPoolPutRatio, setPoolPutRatio,
} from '#/api/legacy/game'; } from '#/api/legacy/game';
import { formatDate, getAllowedSysOrigins } from '#/views/system/shared'; import {
formatDate,
getAllowedSysOrigins,
getDisplaySysOriginText,
} from '#/views/system/shared';
import { import {
Button, Button,
@ -268,7 +272,9 @@ loadData(true);
<Card size="small" title="抽奖情况"> <Card size="small" title="抽奖情况">
<Descriptions :column="2" bordered size="small"> <Descriptions :column="2" bordered size="small">
<DescriptionsItem label="ID">{{ activeRow.id || '-' }}</DescriptionsItem> <DescriptionsItem label="ID">{{ activeRow.id || '-' }}</DescriptionsItem>
<DescriptionsItem label="系统">{{ activeRow.sysOrigin || '-' }}</DescriptionsItem> <DescriptionsItem v-if="getDisplaySysOriginText(activeRow.sysOrigin)" label="系统">
{{ getDisplaySysOriginText(activeRow.sysOrigin) }}
</DescriptionsItem>
<DescriptionsItem label="门票">{{ activeRow.tickets || 0 }}</DescriptionsItem> <DescriptionsItem label="门票">{{ activeRow.tickets || 0 }}</DescriptionsItem>
<DescriptionsItem label="抽奖数">{{ activeRow.lotterySize || 0 }}</DescriptionsItem> <DescriptionsItem label="抽奖数">{{ activeRow.lotterySize || 0 }}</DescriptionsItem>
<DescriptionsItem label="礼物价值">{{ activeRow.giftTotalAmount || 0 }}</DescriptionsItem> <DescriptionsItem label="礼物价值">{{ activeRow.giftTotalAmount || 0 }}</DescriptionsItem>

View File

@ -14,7 +14,8 @@ import {
standardConfigTable, standardConfigTable,
} from '#/api/legacy/game-lucky-gift'; } from '#/api/legacy/game-lucky-gift';
import { formatDate, import { formatDate,
getAllowedSysOrigins } from '#/views/system/shared'; getAllowedSysOrigins,
getDisplaySysOriginText } from '#/views/system/shared';
import { import {
Button, Button,
@ -66,6 +67,10 @@ const columns = [
{ dataIndex: 'createTime', key: 'createTime', title: '创建时间', width: 180 }, { dataIndex: 'createTime', key: 'createTime', title: '创建时间', width: 180 },
{ dataIndex: 'actions', key: 'actions', title: '操作', width: 220 }, { dataIndex: 'actions', key: 'actions', title: '操作', width: 220 },
]; ];
const editTitle = computed(() => {
const sysOrigin = getDisplaySysOriginText(form.id ? form.sysOrigin : query.sysOrigin);
return sysOrigin ? `${form.id ? '修改' : '添加'}(${sysOrigin})` : form.id ? '修改' : '添加';
});
watch( watch(
sysOriginOptions, sysOriginOptions,
@ -220,7 +225,7 @@ function handlePageChange(page: number, pageSize: number) {
<Modal <Modal
:confirm-loading="saving" :confirm-loading="saving"
:open="editOpen" :open="editOpen"
:title="form.id ? `修改(${form.sysOrigin || '-'})` : `添加(${query.sysOrigin || '-'})`" :title="editTitle"
@cancel="editOpen = false" @cancel="editOpen = false"
@ok="handleSave" @ok="handleSave"
> >

View File

@ -13,7 +13,8 @@ import {
flowLudoGame, flowLudoGame,
} from '#/api/legacy/game'; } from '#/api/legacy/game';
import { formatDate, import { formatDate,
getAllowedSysOrigins } from '#/views/system/shared'; getAllowedSysOrigins,
getDisplaySysOriginText } from '#/views/system/shared';
import { import {
Button, Button,
@ -259,7 +260,7 @@ function openPlayers(record: Record<string, any>) {
> >
<template #bodyCell="{ column, record }"> <template #bodyCell="{ column, record }">
<template v-if="column.key === 'sysOrigin'"> <template v-if="column.key === 'sysOrigin'">
{{ record.history?.sysOrigin || '-' }} {{ getDisplaySysOriginText(record.history?.sysOrigin) }}
</template> </template>
<template v-else-if="column.key === 'roomInfo'"> <template v-else-if="column.key === 'roomInfo'">
<div v-if="record.roomProfile" class="room-info"> <div v-if="record.roomProfile" class="room-info">

View File

@ -21,6 +21,7 @@ import {
PRODUCT_SHOWCASE_OPTIONS, PRODUCT_SHOWCASE_OPTIONS,
formatDate, formatDate,
getAllowedSysOrigins, getAllowedSysOrigins,
getDisplaySysOriginText,
} from '#/views/system/shared'; } from '#/views/system/shared';
import { import {
@ -315,7 +316,7 @@ async function handleShelfChange(record: Record<string, any>, checked: boolean)
<Image :src="record.cover" class="cover" /> <Image :src="record.cover" class="cover" />
</template> </template>
<template v-else-if="column.key === 'sysOrigin'"> <template v-else-if="column.key === 'sysOrigin'">
{{ record.sysOrigin || '-' }} {{ getDisplaySysOriginText(record.sysOrigin) }}
</template> </template>
<template v-else-if="column.key === 'type'"> <template v-else-if="column.key === 'type'">
{{ NOTICE_TYPE_LABELS[record.type] || record.type || '-' }} {{ NOTICE_TYPE_LABELS[record.type] || record.type || '-' }}

View File

@ -15,6 +15,7 @@ import {
} from '#/api/legacy/operate'; } from '#/api/legacy/operate';
import { regionConfigTable } from '#/api/legacy/system'; import { regionConfigTable } from '#/api/legacy/system';
import AccountInput from '#/components/account-input.vue'; import AccountInput from '#/components/account-input.vue';
import SysOriginTag from '#/components/sys-origin-tag.vue';
import { formatDate, import { formatDate,
getAllowedSysOrigins } from '#/views/system/shared'; getAllowedSysOrigins } from '#/views/system/shared';
@ -254,7 +255,7 @@ void loadData(true);
</template> </template>
<template v-else-if="column.key === 'platform'"> <template v-else-if="column.key === 'platform'">
<Space size="small"> <Space size="small">
<Tag>{{ record.details?.sysOrigin || '-' }}</Tag> <SysOriginTag :value="record.details?.sysOrigin" />
<Tag>{{ record.details?.factory?.platform || '-' }}</Tag> <Tag>{{ record.details?.factory?.platform || '-' }}</Tag>
<Tag>{{ record.details?.factory?.factoryCode || '-' }}</Tag> <Tag>{{ record.details?.factory?.factoryCode || '-' }}</Tag>
</Space> </Space>

View File

@ -12,7 +12,8 @@ import { useAccessStore } from '@vben/stores';
import { getPurchaseTable } from '#/api/legacy/operate'; import { getPurchaseTable } from '#/api/legacy/operate';
import AccountInput from '#/components/account-input.vue'; import AccountInput from '#/components/account-input.vue';
import { formatDate, import { formatDate,
getAllowedSysOrigins } from '#/views/system/shared'; getAllowedSysOrigins,
getDisplaySysOriginText } from '#/views/system/shared';
import { import {
Button, Button,
@ -191,7 +192,7 @@ void loadData(true);
</Tag> </Tag>
</template> </template>
<template v-else-if="column.key === 'sysOrigin'"> <template v-else-if="column.key === 'sysOrigin'">
{{ record.orderPurchase?.sysOrigin || '-' }} {{ getDisplaySysOriginText(record.orderPurchase?.sysOrigin) }}
</template> </template>
<template v-else-if="column.key === 'userBaseInfo'"> <template v-else-if="column.key === 'userBaseInfo'">
<Button type="link" @click="openUserDetails(record)"> <Button type="link" @click="openUserDetails(record)">

View File

@ -12,6 +12,7 @@ import {
deleteStartPagePlan, deleteStartPagePlan,
pageStartPagePlans, pageStartPagePlans,
} from '#/api/legacy/system'; } from '#/api/legacy/system';
import SysOriginTag from '#/components/sys-origin-tag.vue';
import { formatDate, import { formatDate,
getAllowedSysOrigins } from '#/views/system/shared'; getAllowedSysOrigins } from '#/views/system/shared';
@ -23,7 +24,6 @@ import {
Pagination, Pagination,
Select, Select,
Table, Table,
Tag,
message message
} from 'antdv-next'; } from 'antdv-next';
@ -180,7 +180,7 @@ function handleDelete(record: Record<string, any>) {
> >
<template #bodyCell="{ column, record }"> <template #bodyCell="{ column, record }">
<template v-if="column.key === 'sysOrigin'"> <template v-if="column.key === 'sysOrigin'">
<Tag>{{ record.sysOrigin || '-' }}</Tag> <SysOriginTag :value="record.sysOrigin" />
</template> </template>
<template v-else-if="column.key === 'type'"> <template v-else-if="column.key === 'type'">
{{ getTypeName(record.type) }} {{ getTypeName(record.type) }}

View File

@ -14,6 +14,7 @@ import {
deleteBanner, deleteBanner,
regionConfigTable, regionConfigTable,
} from '#/api/legacy/system'; } from '#/api/legacy/system';
import SysOriginTag from '#/components/sys-origin-tag.vue';
import { import {
formatDate, formatDate,
getAllowedSysOrigins, getAllowedSysOrigins,
@ -263,7 +264,7 @@ function getStatusColor(record: Record<string, any>) {
<Image :preview="false" :src="record.alertCover" class="small-cover" /> <Image :preview="false" :src="record.alertCover" class="small-cover" />
</template> </template>
<template v-else-if="column.key === 'sysOrigin'"> <template v-else-if="column.key === 'sysOrigin'">
<Tag>{{ record.sysOrigin || '-' }}</Tag> <SysOriginTag :value="record.sysOrigin" />
</template> </template>
<template v-else-if="column.key === 'content'"> <template v-else-if="column.key === 'content'">
<Popover placement="topLeft" trigger="hover"> <Popover placement="topLeft" trigger="hover">

View File

@ -21,6 +21,7 @@ import {
Switch, Switch,
message, message,
} from 'antdv-next'; } from 'antdv-next';
import { getDisplaySysOriginText } from '#/views/system/shared';
import RewardIcon from './reward-icon.vue'; import RewardIcon from './reward-icon.vue';
import { import {
@ -101,9 +102,10 @@ const sourceOptionsMap = reactive<
const selectedDraftResource = ref<DraftSourceOption | null>(null); const selectedDraftResource = ref<DraftSourceOption | null>(null);
const title = computed(() => const title = computed(() => {
`${form.id ? '修改' : '添加'}${props.sysOrigin || form.sysOrigin || '-'}`, const sysOrigin = getDisplaySysOriginText(props.sysOrigin || form.sysOrigin);
); return sysOrigin ? `${form.id ? '修改' : '添加'}${sysOrigin}` : form.id ? '修改' : '添加';
});
const rewardItems = computed(() => form.rewardConfigList); const rewardItems = computed(() => form.rewardConfigList);
const sourceSelectOptions = computed<DraftSourceOption[]>( const sourceSelectOptions = computed<DraftSourceOption[]>(

View File

@ -1,10 +1,7 @@
<script lang="ts" setup> <script lang="ts" setup>
import { onBeforeUnmount, onMounted, reactive } from 'vue'; import { onBeforeUnmount, onMounted, reactive } from 'vue';
import { import { purchaseTodayTotal } from '#/api/legacy/operate';
purchaseTodayTotal,
purchaseTodayTotalBySysOrigin,
} from '#/api/legacy/operate';
defineOptions({ name: 'StatisticsDatavPurchaseCount' }); defineOptions({ name: 'StatisticsDatavPurchaseCount' });
@ -18,7 +15,6 @@ const props = withDefaults(
); );
const summary = reactive({ const summary = reactive({
likeiTotal: 0,
total: 0, total: 0,
}); });
@ -36,19 +32,11 @@ function formatValue(value: number) {
} }
async function loadData() { async function loadData() {
const [totalResult, likeiResult] = await Promise.allSettled([ try {
purchaseTodayTotal(), summary.total = normalizeNumber(await purchaseTodayTotal());
purchaseTodayTotalBySysOrigin('LIKEI'), } catch {
]); summary.total = 0;
}
summary.total =
totalResult.status === 'fulfilled'
? normalizeNumber(totalResult.value)
: 0;
summary.likeiTotal =
likeiResult.status === 'fulfilled'
? normalizeNumber(likeiResult.value)
: 0;
} }
onMounted(() => { onMounted(() => {
@ -71,10 +59,6 @@ onBeforeUnmount(() => {
<div class="stat-card__label">总额</div> <div class="stat-card__label">总额</div>
<div class="stat-card__value">{{ formatValue(summary.total) }}</div> <div class="stat-card__value">{{ formatValue(summary.total) }}</div>
</div> </div>
<div class="stat-card">
<div class="stat-card__label">LIKEI</div>
<div class="stat-card__value">{{ formatValue(summary.likeiTotal) }}</div>
</div>
</div> </div>
</template> </template>
@ -82,7 +66,7 @@ onBeforeUnmount(() => {
.stat-grid { .stat-grid {
display: grid; display: grid;
gap: 16px; gap: 16px;
grid-template-columns: repeat(2, minmax(0, 1fr)); grid-template-columns: minmax(0, 1fr);
} }
.stat-card { .stat-card {

View File

@ -7,7 +7,6 @@ import { useAccessStore } from '@vben/stores';
import { getAllowedSysOrigins } from '#/views/system/shared'; import { getAllowedSysOrigins } from '#/views/system/shared';
import LatestPurchaseList from './components/latest-purchase-list.vue'; import LatestPurchaseList from './components/latest-purchase-list.vue';
import OnlineUserCountOrigin from './components/online-user-count-origin.vue';
import PurchaseCount from './components/purchase-count.vue'; import PurchaseCount from './components/purchase-count.vue';
defineOptions({ name: 'StatisticsDatav' }); defineOptions({ name: 'StatisticsDatav' });
@ -94,13 +93,6 @@ onBeforeUnmount(() => {
<PurchaseCount /> <PurchaseCount />
</div> </div>
</section> </section>
<section class="col-info">
<div class="title">Likei在线</div>
<div class="content">
<OnlineUserCountOrigin origin="LIKEI" />
</div>
</section>
</div> </div>
</div> </div>
</div> </div>

View File

@ -23,6 +23,7 @@ import {
BANK_CARD_TYPES, BANK_CARD_TYPES,
formatDate, formatDate,
getAllowedSysOrigins, getAllowedSysOrigins,
getDisplaySysOriginText,
REGION_ASSIST_TYPES, REGION_ASSIST_TYPES,
} from '#/views/system/shared'; } from '#/views/system/shared';
@ -756,7 +757,11 @@ loadCountryOptions();
<Drawer <Drawer
:open="regionDrawerOpen" :open="regionDrawerOpen"
:title="`${regionDrawerTitle}${regionQuery.sysOrigin}`" :title="
getDisplaySysOriginText(regionQuery.sysOrigin)
? `${regionDrawerTitle}${getDisplaySysOriginText(regionQuery.sysOrigin)}`
: regionDrawerTitle
"
destroy-on-close destroy-on-close
width="620" width="620"
@close="regionDrawerOpen = false" @close="regionDrawerOpen = false"
@ -897,7 +902,11 @@ loadCountryOptions();
<Drawer <Drawer
:open="assistDrawerOpen" :open="assistDrawerOpen"
:title="`${assistDrawerTitle}${assistQuery.sysOrigin}`" :title="
getDisplaySysOriginText(assistQuery.sysOrigin)
? `${assistDrawerTitle}${getDisplaySysOriginText(assistQuery.sysOrigin)}`
: assistDrawerTitle
"
destroy-on-close destroy-on-close
width="580" width="580"
@close="assistDrawerOpen = false" @close="assistDrawerOpen = false"

View File

@ -18,6 +18,37 @@ export const SYS_ORIGIN_OPTIONS: SysOriginOption[] = [
}, },
]; ];
const HIDDEN_SYS_ORIGINS = new Set(['LIKEI']);
export function normalizeSysOrigin(value: unknown) {
return String(value ?? '')
.trim()
.toUpperCase();
}
export function isHiddenSysOrigin(value: unknown) {
const normalized = normalizeSysOrigin(value);
return normalized ? HIDDEN_SYS_ORIGINS.has(normalized) : false;
}
export function getDisplaySysOriginText(value: unknown, fallback = '') {
if (isHiddenSysOrigin(value)) {
return fallback;
}
const text = String(value ?? '').trim();
return text || fallback;
}
export function getDisplayableSysOriginOptions<T extends { value?: unknown }>(
options: T[],
) {
return options.filter((item) => !isHiddenSysOrigin(item.value));
}
export function getDisplayableSysOrigins(accessCodes: string[] = []) {
return getDisplayableSysOriginOptions(getAllowedSysOrigins(accessCodes));
}
export const REGION_ASSIST_TYPES = [ export const REGION_ASSIST_TYPES = [
{ {
name: '房间贡献活动奖励比例(%)', name: '房间贡献活动奖励比例(%)',

View File

@ -1,5 +1,5 @@
<script lang="ts" setup> <script lang="ts" setup>
import { nextTick, onBeforeUnmount, ref, watch } from 'vue'; import { computed, nextTick, onBeforeUnmount, ref, watch } from 'vue';
import { useSortable } from '@vben/hooks'; import { useSortable } from '@vben/hooks';
@ -33,6 +33,7 @@ import {
getTeamPolicyRewardSummary, getTeamPolicyRewardSummary,
type TeamPolicyRewardDetailType, type TeamPolicyRewardDetailType,
} from '../policy-shared'; } from '../policy-shared';
import { getDisplaySysOriginText } from '#/views/system/shared';
defineOptions({ name: 'TeamPolicyRewardEditor' }); defineOptions({ name: 'TeamPolicyRewardEditor' });
@ -56,6 +57,15 @@ const optionMap = ref<Record<string, Array<Record<string, any>>>>({});
let sortableInstance: any = null; let sortableInstance: any = null;
const drawerTitle = computed(() => {
const sysOrigin = getDisplaySysOriginText(props.sysOrigin);
return sysOrigin
? `${props.allowEdit ? '编辑' : '查看'}(${sysOrigin})`
: props.allowEdit
? '编辑'
: '查看';
});
function isCurrency(type?: string) { function isCurrency(type?: string) {
return type === 'DIAMOND' || type === 'GOLD'; return type === 'DIAMOND' || type === 'GOLD';
} }
@ -374,7 +384,7 @@ onBeforeUnmount(() => {
<template> <template>
<Drawer <Drawer
:open="open" :open="open"
:title="`${allowEdit ? '编辑' : '查看'}(${sysOrigin || '-'})`" :title="drawerTitle"
destroy-on-close destroy-on-close
width="960" width="960"
@close="emit('close')" @close="emit('close')"