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

View File

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

View File

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

View File

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