feat: 教育管理员不可切换子账号订阅计划&Peding状态提示开始时间

This commit is contained in:
2026-01-05 15:48:21 +08:00
parent 9c9b219f3b
commit ebd5ceac41
4 changed files with 79 additions and 58 deletions

View File

@@ -96,7 +96,7 @@
style="width: 250px" style="width: 250px"
/> />
</div> </div>
<div class="admin_state_item" v-if="title?.value == 'Edit'"> <!-- <div class="admin_state_item" v-if="title?.value == 'Edit'">
<span> <span>
{{ $t('admin.SubscribePlan') }}: {{ $t('admin.SubscribePlan') }}:
<span>*</span> <span>*</span>
@@ -108,7 +108,7 @@
:field-names="{ label: 'name', value: 'id' }" :field-names="{ label: 'name', value: 'id' }"
:placeholder="$t('admin.SelectPlan')" :placeholder="$t('admin.SelectPlan')"
></a-select> ></a-select>
</div> </div> -->
</div> </div>
<div class="allUserPoeration_btn admin_page"> <div class="allUserPoeration_btn admin_page">
<div class="admin_search_item" @click="cancelDsign">{{ $t('admin.Close') }}</div> <div class="admin_search_item" @click="cancelDsign">{{ $t('admin.Close') }}</div>

View File

@@ -85,17 +85,24 @@
v-for="plan in planFilterOptions" v-for="plan in planFilterOptions"
:key="plan.id" :key="plan.id"
class="plan_item" class="plan_item"
:class="{ :class="{
active: subscriptionPlanId === plan.id, active: subscriptionPlanId === plan.id,
disabled: plan.status === 'PENDING' disabled: plan.status === 'PENDING'
}" }"
@click="plan.status !== 'PENDING' && selectPlanFilter(plan.id)" @click="plan.status !== 'PENDING' && selectPlanFilter(plan.id)"
> >
<span class="plan_name">{{ plan.name }}</span> <a-tooltip v-if="plan.status === 'PENDING'">
<MoreOutlined <template #title>{{ $t('admin.PlanStart') }} {{ plan.startTime }}</template>
class="plan_more_icon" <span class="plan_name">{{ plan.name }}</span>
@click.stop="plan.status !== 'PENDING' && openPlanRenameModal(plan)" <MoreOutlined class="plan_more_icon" />
/> </a-tooltip>
<template v-else>
<span class="plan_name">{{ plan.name }}</span>
<MoreOutlined
class="plan_more_icon"
@click.stop="plan.status !== 'PENDING' && openPlanRenameModal(plan)"
/>
</template>
</div> </div>
</div> </div>
<a-table <a-table
@@ -435,8 +442,11 @@ export default defineComponent({
if (!orgId) return if (!orgId) return
Https.axiosPost(Https.httpUrls.searchSubscribeByOrg, { Https.axiosPost(Https.httpUrls.searchSubscribeByOrg, {
organizationId: orgId, organizationId: orgId,
status: ['ACTIVE','PENDING'] status: ['ACTIVE', 'PENDING']
}).then(res => { }).then(res => {
res.forEach(plan => {
plan.startTime = formatTime(plan.currentPeriodStart, 'YYYY-MM-DD hh:mm:ss')
})
// 将与当前用户 subscriptionPlanId 相同的订阅计划放到第一个 // 将与当前用户 subscriptionPlanId 相同的订阅计划放到第一个
const userSubscriptionPlanId = store.state.UserHabit.userDetail.subscriptionPlanId const userSubscriptionPlanId = store.state.UserHabit.userDetail.subscriptionPlanId
if (userSubscriptionPlanId && Array.isArray(res)) { if (userSubscriptionPlanId && Array.isArray(res)) {
@@ -451,6 +461,7 @@ export default defineComponent({
} else { } else {
planFilterOptions.value = res planFilterOptions.value = res
} }
console.log(planFilterOptions.value)
}) })
} }
// 监听组织ID获取到值后再拉取订阅计划 // 监听组织ID获取到值后再拉取订阅计划
@@ -459,7 +470,8 @@ export default defineComponent({
orgId => { orgId => {
if (orgId) { if (orgId) {
fetchSubscribePlanList() fetchSubscribePlanList()
const userSubscriptionPlanId = store.state.UserHabit.userDetail.subscriptionPlanId const userSubscriptionPlanId =
store.state.UserHabit.userDetail.subscriptionPlanId
if (userSubscriptionPlanId) { if (userSubscriptionPlanId) {
selectPlanFilter(userSubscriptionPlanId) selectPlanFilter(userSubscriptionPlanId)
} }

View File

@@ -1593,7 +1593,8 @@ export default {
InputPlanName: '请输入计划名称', InputPlanName: '请输入计划名称',
Cancel: '取消', Cancel: '取消',
SelectPlan: '选择计划', SelectPlan: '选择计划',
AllPlan: '全部' AllPlan: '全部',
PlanStart:'订阅计划生效时间:'
}, },
Login: { Login: {
Login: '登录', Login: '登录',

View File

@@ -1192,9 +1192,10 @@ export default {
createGroup: 'Create Group', createGroup: 'Create Group',
slutionGroup: 'Slution Group', slutionGroup: 'Slution Group',
deleteLayer: 'Delete Layer', deleteLayer: 'Delete Layer',
cannotDeleteOnlyLayer: 'Cannot delete the last layer. At least one layer must remain.', cannotDeleteOnlyLayer:
'Cannot delete the last layer. At least one layer must remain.',
fixedLayerCannotDelete: 'Fixed layer cannot be deleted', fixedLayerCannotDelete: 'Fixed layer cannot be deleted',
backLayerCannotDelete: 'Background layer cannot be deleted', backLayerCannotDelete: 'Background layer cannot be deleted',
clearSelection: 'Clear Selection', clearSelection: 'Clear Selection',
AddPinnedLayer: 'Add a pinned layer', AddPinnedLayer: 'Add a pinned layer',
selectedLayers: 'The number of selected layers:', selectedLayers: 'The number of selected layers:',
@@ -1216,7 +1217,7 @@ export default {
color: 'Color', color: 'Color',
Print: 'Print', Print: 'Print',
Elements: 'Elements', Elements: 'Elements',
PrintAndElementsGroup: 'Print and Elements Group', PrintAndElementsGroup: 'Print and Elements Group',
KeyboardShortcutsOperationGuide: 'Keyboard shortcuts & Operation guide', KeyboardShortcutsOperationGuide: 'Keyboard shortcuts & Operation guide',
other: 'Other', other: 'Other',
touchDevice: 'Touch Device', touchDevice: 'Touch Device',
@@ -1335,14 +1336,14 @@ export default {
flipVertical: 'Vertical Flip', flipVertical: 'Vertical Flip',
cropAndAdd: 'Crop and Add', cropAndAdd: 'Crop and Add',
cropImage: 'Crop Image', cropImage: 'Crop Image',
noRepeat: 'no-repeat', noRepeat: 'no-repeat',
repeat: 'repeat', repeat: 'repeat',
repeatX: 'repeat-x', repeatX: 'repeat-x',
repeatY: 'repeat-y', repeatY: 'repeat-y',
repeatSetting: 'Repeat Setting', repeatSetting: 'Repeat Setting',
angle: 'Angle', angle: 'Angle',
scale: 'Scale', scale: 'Scale',
offset: 'Offset', offset: 'Offset',
group: 'Group', group: 'Group',
//长毛笔 //长毛笔
FurSettings: 'FurSettings', FurSettings: 'FurSettings',
@@ -1506,41 +1507,47 @@ export default {
DeleteTexture: 'Delete Texture', DeleteTexture: 'Delete Texture',
TextureSettings: 'Texture Settings', TextureSettings: 'Texture Settings',
TextureSelector: 'Texture Selector', TextureSelector: 'Texture Selector',
// 混合模式 // 混合模式
CompositeNormal: 'Normal', CompositeNormal: 'Normal',
CompositeNormalTip: 'Normal: Default, new graphics cover original content', CompositeNormalTip: 'Normal: Default, new graphics cover original content',
CompositeDarken: 'Darken', CompositeDarken: 'Darken',
CompositeDarkenTip: 'Darken: Take the darkest color', CompositeDarkenTip: 'Darken: Take the darkest color',
CompositeMultiply: 'Multiply', CompositeMultiply: 'Multiply',
CompositeMultiplyTip: 'Multiply: Darken the image', CompositeMultiplyTip: 'Multiply: Darken the image',
CompositeColorBurn: 'Color Burn', CompositeColorBurn: 'Color Burn',
CompositeColorBurnTip: 'Color Burn: Increase contrast and darken the bottom color', CompositeColorBurnTip: 'Color Burn: Increase contrast and darken the bottom color',
CompositeLighten: 'Lighten', CompositeLighten: 'Lighten',
CompositeLightenTip: 'Lighten: Take the brightest color', CompositeLightenTip: 'Lighten: Take the brightest color',
CompositeScreen: 'Screen', CompositeScreen: 'Screen',
CompositeScreenTip: 'Screen: Lighten the image', CompositeScreenTip: 'Screen: Lighten the image',
CompositeColorDodge: 'Color Dodge', CompositeColorDodge: 'Color Dodge',
CompositeColorDodgeTip: 'Color Dodge: Reduce contrast and lighten the bottom color', CompositeColorDodgeTip: 'Color Dodge: Reduce contrast and lighten the bottom color',
CompositeLighter: 'Color Dodge (Add)', CompositeLighter: 'Color Dodge (Add)',
CompositeLighterTip: 'Color Dodge (Add): Add the brightness of the overlapping parts', CompositeLighterTip: 'Color Dodge (Add): Add the brightness of the overlapping parts',
CompositeOverlay: 'Overlay', CompositeOverlay: 'Overlay',
CompositeOverlayTip: 'Overlay: Highlight effect', CompositeOverlayTip: 'Overlay: Highlight effect',
CompositeSoftLight: 'Soft Light', CompositeSoftLight: 'Soft Light',
CompositeSoftLightTip: 'Soft Light: Blend effect', CompositeSoftLightTip: 'Soft Light: Blend effect',
CompositeHardLight: 'Hard Light', CompositeHardLight: 'Hard Light',
CompositeHardLightTip: 'Hard Light: Highlight effect', CompositeHardLightTip: 'Hard Light: Highlight effect',
CompositeDifference: 'Difference', CompositeDifference: 'Difference',
CompositeDifferenceTip: 'Difference: Take the color difference between the two images', CompositeDifferenceTip:
CompositeExclusion: 'Exclusion', 'Difference: Take the color difference between the two images',
CompositeExclusionTip: 'Exclusion: Take the absolute value of the color difference between the two images', CompositeExclusion: 'Exclusion',
CompositeHue: 'Hue', CompositeExclusionTip:
CompositeHueTip: 'Hue: Preserve the original image color and change the hue of the new image', 'Exclusion: Take the absolute value of the color difference between the two images',
CompositeSaturation: 'Saturation', CompositeHue: 'Hue',
CompositeSaturationTip: 'Saturation: Preserve the original image hue and change the saturation of the new image', CompositeHueTip:
CompositeColor: 'Color', 'Hue: Preserve the original image color and change the hue of the new image',
CompositeColorTip: 'Color: Preserve the original image saturation and change the color of the new image', CompositeSaturation: 'Saturation',
CompositeLuminosity: 'Luminosity', CompositeSaturationTip:
CompositeLuminosityTip: 'Luminosity: Preserve the original image color and change the luminosity of the new image', 'Saturation: Preserve the original image hue and change the saturation of the new image',
CompositeColor: 'Color',
CompositeColorTip:
'Color: Preserve the original image saturation and change the color of the new image',
CompositeLuminosity: 'Luminosity',
CompositeLuminosityTip:
'Luminosity: Preserve the original image color and change the luminosity of the new image'
}, },
speedList: { speedList: {
High: 'High', High: 'High',
@@ -1624,7 +1631,7 @@ export default {
ChatRobot: 'ChatRobot', ChatRobot: 'ChatRobot',
Yes: 'Yes', Yes: 'Yes',
No: 'No', No: 'No',
SubscribePlan:'Subscribe Plan', SubscribePlan: 'Subscribe Plan',
SwitchPlanSuccess: 'Switch subscription plan successfully', SwitchPlanSuccess: 'Switch subscription plan successfully',
SwitchPlanFailed: 'Failed to switch subscription plan', SwitchPlanFailed: 'Failed to switch subscription plan',
NoPlanSelected: 'Please select a subscription plan first', NoPlanSelected: 'Please select a subscription plan first',
@@ -1637,7 +1644,8 @@ export default {
InputPlanName: 'Please enter plan name', InputPlanName: 'Please enter plan name',
Cancel: 'Cancel', Cancel: 'Cancel',
SelectPlan: 'Select Plan', SelectPlan: 'Select Plan',
AllPlan:'All' AllPlan: 'All',
PlanStart:'This plan will be actived from',
}, },
Login: { Login: {
Login: 'Login', Login: 'Login',
@@ -1656,7 +1664,7 @@ export default {
AgreePolicies: 'Please agree to all terms, privacy policy, and fees.', AgreePolicies: 'Please agree to all terms, privacy policy, and fees.',
PasswordConditions: 'You must satisfy ALL password conditions to register.', PasswordConditions: 'You must satisfy ALL password conditions to register.',
LoginWithGoogle: 'Sign in with Google', LoginWithGoogle: 'Sign in with Google',
LoginWithWechat: 'Sign in with Wechat', LoginWithWechat: 'Sign in with Wechat'
}, },
LoginPersonal: { LoginPersonal: {
Email: 'Email', Email: 'Email',