create-wenuts-cli 2.2.0 → 2.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/template/default/eslint.config.mjs +16 -4
- package/template/default/package.json +4 -1
- package/template/default/postcss.config.mjs +12 -12
- package/template/default/src/api/user.ts +145 -145
- package/template/default/src/app/[local]/(default-layout)/layout.tsx +1 -1
- package/template/default/src/app/[local]/(default-layout)/page.tsx +1 -1
- package/template/default/src/app/[local]/(no-layout)/home/page.tsx +11 -11
- package/template/default/src/app/[local]/(no-layout)/login/components/LoginHandle/index.tsx +40 -44
- package/template/default/src/app/[local]/(no-layout)/login/page.tsx +32 -32
- package/template/default/src/app/[local]/layout.tsx +38 -38
- package/template/default/src/app/api/auth/[...nextauth]/route.ts +38 -41
- package/template/default/src/app/layout.tsx +17 -17
- package/template/default/src/components/System/ClientLayout/index.tsx +42 -42
- package/template/default/src/components/System/LoginModal/index.tsx +48 -53
- package/template/default/src/components/System/ThemeProvider/index.tsx +33 -44
- package/template/default/src/config/CookieMap.ts +1 -1
- package/template/default/src/i18n/routing.ts +8 -9
- package/template/default/src/libs/casdoor_provider.ts +31 -33
- package/template/default/src/libs/fetchCookie/serverCookies.ts +5 -5
- package/template/default/src/libs/nextauth.ts +38 -41
- package/template/default/src/middleware.ts +6 -6
- package/template/default/src/store/useUserStore.ts +35 -35
- package/template/default/src/types/payment.ts +139 -139
- package/template/default/src/types/user.ts +81 -87
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
import { cookies } from
|
|
1
|
+
'use server';
|
|
2
|
+
import { cookies } from 'next/headers';
|
|
3
3
|
|
|
4
4
|
export const getServerSideCookie = async (key: string): Promise<any> => {
|
|
5
|
-
|
|
5
|
+
const cookieStore = await cookies();
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
const cookieDetail = cookieStore.get(key);
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
return cookieDetail ? cookieDetail.value : '';
|
|
10
10
|
};
|
|
@@ -1,49 +1,46 @@
|
|
|
1
|
-
import UserApi from
|
|
2
|
-
import CookieMap from
|
|
3
|
-
import NextAuth, { NextAuthOptions } from
|
|
4
|
-
import GoogleProvider from
|
|
5
|
-
import { cookies } from
|
|
6
|
-
import CasdoorProvider from
|
|
1
|
+
import UserApi from '@/api/user';
|
|
2
|
+
import CookieMap from '@/config/CookieMap';
|
|
3
|
+
import NextAuth, { NextAuthOptions } from 'next-auth';
|
|
4
|
+
import GoogleProvider from 'next-auth/providers/google';
|
|
5
|
+
import { cookies } from 'next/headers';
|
|
6
|
+
import CasdoorProvider from './casdoor_provider';
|
|
7
7
|
export const authOptions: NextAuthOptions = {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
8
|
+
secret: process.env.NEXTAUTH_SECRET,
|
|
9
|
+
providers: [
|
|
10
|
+
GoogleProvider({
|
|
11
|
+
clientId: process.env.NEXT_PUBLIC_GOOGLE_CLIENT_ID!,
|
|
12
|
+
clientSecret: process.env.GOOGLE_SECRET!,
|
|
13
|
+
async profile(profile, tokens) {
|
|
14
|
+
// 获取用户信息
|
|
15
|
+
const cookieStore = await cookies();
|
|
16
|
+
const accessToken = tokens.access_token;
|
|
17
17
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
18
|
+
const userState = await UserApi.userLogin({
|
|
19
|
+
srcType: 'google',
|
|
20
|
+
token: accessToken,
|
|
21
|
+
});
|
|
22
22
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
issuer: process.env.NEXT_PUBLIC_CASDOOR_ISSUER!,
|
|
39
|
-
}),
|
|
40
|
-
],
|
|
23
|
+
cookieStore.set(CookieMap.UserState, encodeURIComponent(JSON.stringify(userState.data)));
|
|
24
|
+
return {
|
|
25
|
+
id: userState.data.token || '',
|
|
26
|
+
name: userState.data.name || '',
|
|
27
|
+
email: userState.data.email || '',
|
|
28
|
+
image: userState.data.avatar || '',
|
|
29
|
+
};
|
|
30
|
+
},
|
|
31
|
+
}),
|
|
32
|
+
CasdoorProvider({
|
|
33
|
+
clientId: process.env.NEXT_PUBLIC_CASDOOR_CLIENT_ID!,
|
|
34
|
+
clientSecret: process.env.CASDOOR_SECRET!,
|
|
35
|
+
issuer: process.env.NEXT_PUBLIC_CASDOOR_ISSUER!,
|
|
36
|
+
}),
|
|
37
|
+
],
|
|
41
38
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
39
|
+
callbacks: {
|
|
40
|
+
session: async ({ session, token, user }) => {
|
|
41
|
+
return session;
|
|
42
|
+
},
|
|
45
43
|
},
|
|
46
|
-
},
|
|
47
44
|
};
|
|
48
45
|
|
|
49
46
|
export default NextAuth(authOptions);
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import createMiddleware from
|
|
2
|
-
import { routing } from
|
|
1
|
+
import createMiddleware from 'next-intl/middleware';
|
|
2
|
+
import { routing } from './i18n/routing';
|
|
3
3
|
|
|
4
4
|
export default createMiddleware(routing);
|
|
5
5
|
|
|
6
6
|
export const config = {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
7
|
+
// Match all pathnames except for
|
|
8
|
+
// - … if they start with `/api`, `/trpc`, `/_next` or `/_vercel`
|
|
9
|
+
// - … the ones containing a dot (e.g. `favicon.ico`)
|
|
10
|
+
matcher: '/((?!api|trpc|_next|_vercel|.*\\..*).*)',
|
|
11
11
|
};
|
|
@@ -1,42 +1,42 @@
|
|
|
1
|
-
import { PaymentReason } from
|
|
2
|
-
import { IUserProfile } from
|
|
3
|
-
import { create } from
|
|
1
|
+
import { PaymentReason } from '@/types/payment';
|
|
2
|
+
import { IUserProfile } from '@/types/user';
|
|
3
|
+
import { create } from 'zustand';
|
|
4
4
|
|
|
5
5
|
interface IUserStore {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
6
|
+
userInfo: null | IUserProfile; // 用户信息,null 为未登录
|
|
7
|
+
paymentReason: PaymentReason; // 购买的原因
|
|
8
|
+
setUserInfo: (info: null | IUserProfile) => void; // 改变用户信息
|
|
9
|
+
setCreditInfo: (args: { credit: number; subCredit: number }) => void; // 更新用户点数
|
|
10
|
+
openLoginModal: () => void; // 打开登录弹框
|
|
11
|
+
setOpenLoginModal: (openLoginModal: () => void) => void;
|
|
12
|
+
paymentModalProxy: () => void; // 打开订阅、加油包弹框事件
|
|
13
|
+
openPaymentModal: (reason: PaymentReason) => void; // 设置订阅原因并执行 paymentModalProxy()
|
|
14
14
|
}
|
|
15
15
|
|
|
16
|
-
const userStore = create<IUserStore>(
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
16
|
+
const userStore = create<IUserStore>(set => ({
|
|
17
|
+
userInfo: null,
|
|
18
|
+
paymentReason: PaymentReason.None,
|
|
19
|
+
setUserInfo: info => set({ userInfo: info }),
|
|
20
|
+
setCreditInfo: (args: { credit: number; subCredit: number }) =>
|
|
21
|
+
set((state: IUserStore) => ({
|
|
22
|
+
userInfo: {
|
|
23
|
+
...state.userInfo!,
|
|
24
|
+
...args,
|
|
25
|
+
},
|
|
26
|
+
})),
|
|
27
|
+
openLoginModal: () => {},
|
|
28
|
+
setOpenLoginModal: openLoginModal => set({ openLoginModal }),
|
|
29
|
+
paymentModalProxy: () => {},
|
|
30
|
+
openPaymentModal: reason =>
|
|
31
|
+
set(state => {
|
|
32
|
+
if (state.userInfo) {
|
|
33
|
+
state.paymentModalProxy();
|
|
34
|
+
return { paymentReason: reason };
|
|
35
|
+
} else {
|
|
36
|
+
state.openLoginModal();
|
|
37
|
+
return {};
|
|
38
|
+
}
|
|
39
|
+
}),
|
|
40
40
|
}));
|
|
41
41
|
|
|
42
42
|
export default userStore;
|
|
@@ -1,41 +1,41 @@
|
|
|
1
1
|
interface IPackageDesc {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
text: string;
|
|
3
|
+
state: number; // 1 || 0
|
|
4
|
+
tip: string;
|
|
5
5
|
}
|
|
6
6
|
|
|
7
7
|
interface IPackageFeature {
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
name: string;
|
|
9
|
+
value: string; // 'yes' || 'no' || 'text'
|
|
10
10
|
}
|
|
11
11
|
|
|
12
12
|
interface IPackageBenefit {
|
|
13
|
-
|
|
14
|
-
|
|
13
|
+
name: string;
|
|
14
|
+
features: IPackageFeature[];
|
|
15
15
|
}
|
|
16
16
|
|
|
17
17
|
export interface IPackage {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
18
|
+
id: string;
|
|
19
|
+
name: string;
|
|
20
|
+
code: string;
|
|
21
|
+
price: number;
|
|
22
|
+
credit: number;
|
|
23
|
+
descs: IPackageDesc[] | null;
|
|
24
|
+
discount: number;
|
|
25
|
+
oldPrice: number;
|
|
26
|
+
benefits: IPackageBenefit[] | null;
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
export interface IPackageListResponse {
|
|
30
|
-
|
|
30
|
+
item: IPackage[];
|
|
31
31
|
}
|
|
32
32
|
|
|
33
33
|
export interface IPayOrderEntity {
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
34
|
+
payType: string;
|
|
35
|
+
pkgCode: string;
|
|
36
|
+
money: number;
|
|
37
|
+
reason: string;
|
|
38
|
+
status: number;
|
|
39
39
|
}
|
|
40
40
|
|
|
41
41
|
/**
|
|
@@ -43,121 +43,121 @@ export interface IPayOrderEntity {
|
|
|
43
43
|
* 点数不足,key - 以 Notoken 结尾;value - 以 _noken 结尾;
|
|
44
44
|
*/
|
|
45
45
|
export enum PaymentReason {
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
46
|
+
None = '',
|
|
47
|
+
OldUser = 'old_user', // 老用户弹框
|
|
48
|
+
BuyMoreToken = 'buy_more_token', // 购买更多点数(打开加油包弹框)
|
|
49
|
+
|
|
50
|
+
// 图片,key - 以 I 开头;value - 以 i_ 开头;
|
|
51
|
+
IFaceRestore = 'i_face_restore', // 图片脸部修复
|
|
52
|
+
IFaceRestoreNotoken = 'i_face_restore_notoken', // 点数不足 - 图片脸部修复
|
|
53
|
+
IClarityUpcaler = 'i_clarity_upcaler', // 图片智能超分
|
|
54
|
+
IClarityUpcalerNotoken = 'i_clarity_upcaler_notoken', // 点数不足 - 图片智能超分
|
|
55
|
+
IFastUpcalerNotoken = 'i_fast_upcaler_notoken', // 点数不足 - 图片快速超分
|
|
56
|
+
IGenerativeUpscale = 'i_generative_upscale', // 生成式超分
|
|
57
|
+
IGenerativeUpscaleNotoken = 'i_generative_upscale_notoken', // 点数不足 - 生成式超分
|
|
58
|
+
IGeneratorModel = 'i_generator_model', // 图片生成付费模型(包含 Basic 和 LoRA 模型)
|
|
59
|
+
IGeneratorPerformance = 'i_generator_performance', // 图片生成质量
|
|
60
|
+
IGeneratorCount = 'i_generator_count', // 图片生成数量
|
|
61
|
+
IGeneratorPrivate = 'i_generator_private', // 图片生成隐私模式
|
|
62
|
+
IGeneratorLossless = 'i_generator_lossless', // 图片生成无损生成
|
|
63
|
+
IGeneratorNotoken = '', // 点数不足 - 图片生成
|
|
64
|
+
IDownloadAll = 'i_download_all', // 图片批量下载
|
|
65
|
+
IDownloadAllOriginal = 'i_download_all_original', // 图片批量下载原图
|
|
66
|
+
IMakePrivate = 'i_make_private', // 生成图片结果设置成私密
|
|
67
|
+
IFastEditNotoken = 'i_fast_edit_notoken', // 点数不足 - 图片快速编辑
|
|
68
|
+
IMJVary = 'i_mj_vary', // Midjourney 模型结果独有变体(20250611 Midjourney 模型现在全是付费模型)
|
|
69
|
+
IMJVaryNotoken = 'i_mj_vary_notoken', // 点数不足 - Midjourney 模型结果独有变体(20250611 Midjourney 模型现在全是付费模型)
|
|
70
|
+
IMJUpsample = 'i_mj_upsample', // Midjourney 模型结果独有放大(20250611 Midjourney 模型现在全是付费模型)
|
|
71
|
+
IMJUpsampleNotoken = 'i_mj_upsample_notoken', // 点数不足 - Midjourney 模型结果独有放大(20250611 Midjourney 模型现在全是付费模型)
|
|
72
|
+
IFluxOutpaint = 'i_flux_outpaint', // Flux 模型结果独有扩图
|
|
73
|
+
IFluxOutpaintNotoken = 'i_flux_outpaint_notoken', // 点数不足 - Flux 模型结果独有扩图
|
|
74
|
+
IFluxInpaint = 'i_flux_inpaint', // Flux 模型结果独有修复
|
|
75
|
+
IFluxInpaintNotoken = 'i_flux_inpaint_notoken', // 点数不足 - Flux 模型结果独有修复
|
|
76
|
+
IEffectGeneratorModel = 'i_effect_generator_model', // 图片付费特效
|
|
77
|
+
IEffectGeneratorPrivate = 'i_effect_generator_private', // 图片特效生成隐私模式
|
|
78
|
+
IEffectGeneratorNotoken = 'i_effect_generator_notoken', // 点数不足 - 图片特效生成
|
|
79
|
+
|
|
80
|
+
// 视频,key - 以 V 开头;value - 以 v_ 开头;
|
|
81
|
+
VGeneratorModel = 'v_generator_model', // 视频生成付费模型(20250611 只有付费模型)
|
|
82
|
+
VGeneratorDuration = 'v_generator_duration', // 视频生成时长(20250611 只有付费模型,时长还没有定义付费模型)
|
|
83
|
+
VGeneratorPrivate = 'v_generator_private', // 视频生成隐私模式
|
|
84
|
+
VGeneratorNotoken = 'v_generator_notoken', // 点数不足 - 视频生成
|
|
85
|
+
VUpcaler = 'v_upcaler', // 视频超分
|
|
86
|
+
VUpcalerNotoken = 'v_upcaler_notoken', // 点数不足 - 视频超分
|
|
87
|
+
VEffectGeneratorModel = 'v_effect_generator_model', // 视频付费特效
|
|
88
|
+
VEffectGeneratorPrivate = 'v_effect_generator_private', // 视频特效生成隐私模式
|
|
89
|
+
VEffectGeneratorNotoken = 'v_effect_generator_notoken', // 点数不足 - 视频特效生成
|
|
90
|
+
VEffectMakePrivate = 'v_effect_make_private', // 视频特效结果设置成私密
|
|
91
|
+
|
|
92
|
+
// 音乐,key - 以 M 开头;value - 以 m_ 开头;
|
|
93
|
+
MGeneratorModel = 'm_generator_model', // 音乐生成付费模型
|
|
94
|
+
MExtendedLyricsNotoken = 'm_extended_lyrics_notoken', // 点数不足 - 扩展歌词
|
|
95
|
+
MGeneratorNotoken = 'm_generator_notoken', // 点数不足 - 音乐生成
|
|
96
|
+
MStems = 'm_stems', // 乐器分离
|
|
97
|
+
MStemsNotoken = 'm_stems_notoken', // 点数不足 - 乐器分离
|
|
98
|
+
MDownloadWAV = 'm_download_wav', // 音乐下载 WAV 格式
|
|
99
|
+
MDownloadWAVNotoken = 'm_download_wav_notoken', // 点数不足 - 音乐下载 WAV 格式
|
|
100
|
+
MChangeCover = 'm_change_cover', // 改变音乐封面
|
|
101
|
+
MGeneratorVideoNotoken = 'm_generator_video_notoken', // 点数不足 - 音乐生成视频
|
|
102
|
+
MGeneratorVideo = 'm_generator_video', // 音乐生成视频
|
|
103
|
+
MProofOfCreation = 'm_proof_of_creation', // 音乐证明创作
|
|
104
|
+
|
|
105
|
+
// Headshot
|
|
106
|
+
HeadshotStyle = 'headshot_style', // 头像生成的付费风格
|
|
107
|
+
HeadshotGeneratorNotoken = 'headshot_generator_notoken', // 点数不足 - 头像生成
|
|
108
|
+
|
|
109
|
+
// ImageUpscaler
|
|
110
|
+
ImageUpscalerClarity = 'image_upscaler_clarity', // 图片智能超分(超分页面
|
|
111
|
+
ImageUpscalerNotoken = 'image_upscaler_notoken', // 点数不足 - 图片超分(超分页面
|
|
112
|
+
ImageUpscalerFaceRestore = 'image_upscaler_face_restore', // 图片快速超分人脸修复
|
|
113
|
+
|
|
114
|
+
// Phantom
|
|
115
|
+
PhantomGeneratorImage = 'phantom_generator_image', // Phantom 的其他付费类型
|
|
116
|
+
PhantomGeneratorPrivate = 'phantom_generator_private', // Phantom 生成隐私模式
|
|
117
|
+
PhantomGeneratorNotoken = 'phantom_generator_notoken', // 点数不足 - Phantom 生成
|
|
118
|
+
PhantomMakePrivate = 'phantom_make_private', // Phantom 结果设置成私密
|
|
119
|
+
PhantomDownloadAll = 'phantom_download_all', // Phantom 下载单个任务中所有图片
|
|
120
|
+
PhantomDownloadAllOrigin = 'phantom_download_all_origin', // Phantom 下载单个任务中所有原图
|
|
121
|
+
PhantomOpenNsfwMask = 'phantom_open_nsfw_mask', // Phantom 打开 NSFW 蒙层
|
|
122
|
+
PhantomClarityUpscale = 'phantom_clarity_upscale', // Phantom 智能超分
|
|
123
|
+
PhantomClarityUpscaleNotoken = 'phantom_clarity_upscale_notoken', // 点数不足 - Phantom 智能超分
|
|
124
|
+
PhantomUpscaleNotoken = 'phantom_upscale_notoken', // 点数不足 - Phantom 超分
|
|
125
|
+
PhantomGeneratorModel = 'phantom_generator_model', // Phantom 使用付费模型生成
|
|
126
|
+
PhantomSelectModel = 'phantom_select_model', // Phantom 选择付费模型
|
|
127
|
+
|
|
128
|
+
// Background Remover
|
|
129
|
+
BgRemoverHDNotoken = 'bg_remover_hd_notoken', // 点数不足 - 去背景结果高清下载
|
|
130
|
+
|
|
131
|
+
// Image Face Swap
|
|
132
|
+
IFaceSwapNotoken = 'i_face_swap_notoken', // 点数不足 - 图片换脸
|
|
133
|
+
|
|
134
|
+
// Video Face Swap
|
|
135
|
+
VFaceSwapEnhance = 'v_face_swap_enhance', // 视频换脸视频增强
|
|
136
|
+
VFaceSwapNotoken = 'v_face_swap_notoken', // 点数不足 - 视频换脸
|
|
137
|
+
VFaceSwapDuration = 'v_face_swap_duration', // 时长 - 视频换脸
|
|
138
|
+
VFaceSwapRestore = 'v_face_swap_restore', // 增强 - 视频换脸
|
|
139
|
+
|
|
140
|
+
// AI Dnace
|
|
141
|
+
DanceGeneratorNotoken = 'dance_generator_notoken', // 点数不足 - AI Dance 生成
|
|
142
|
+
|
|
143
|
+
// AI Editor
|
|
144
|
+
EditorNotoken = 'editor_notoken', // 点数不足 - 图片编辑
|
|
145
|
+
|
|
146
|
+
// Talking Avatar
|
|
147
|
+
AvatarNotoken = 'avatar_notoken', // 点数不足 - Avatar 生成
|
|
148
|
+
|
|
149
|
+
// AI Chat
|
|
150
|
+
ChatCharacter = 'chat_character', // AI 聊天付费角色
|
|
151
|
+
ChatNotoken = 'chat_notoken', // AI 聊天点数不足
|
|
152
|
+
|
|
153
|
+
// AI Assistant
|
|
154
|
+
AssistantModel = 'assistant_model', // 智能助理付费模型
|
|
155
|
+
AssistantNotoken = 'assistant_notoken', // 点数不足 - 智能助理聊天
|
|
156
|
+
|
|
157
|
+
// Profile
|
|
158
|
+
ProfileNSFW = 'profile_nsfw', // 设置 NSFW 内容显示
|
|
159
|
+
ProfilePrivateGenerate = 'profile_private_generate', // 设置私密生成设置
|
|
160
|
+
|
|
161
|
+
// NSFW Click
|
|
162
|
+
NsfwClick = 'nsfw_click', // NSFW 点击
|
|
163
163
|
}
|