😎增加开启强制修改密码(未完待续)

This commit is contained in:
zuohuaijun 2024-09-01 02:31:52 +08:00
parent fd37e38402
commit 15ff1a29c9
13 changed files with 425 additions and 0 deletions

View File

@ -65,4 +65,9 @@ public class ClaimConst
/// 登录模式PC、APP /// 登录模式PC、APP
/// </summary> /// </summary>
public const string LoginMode = "LoginMode"; public const string LoginMode = "LoginMode";
/// <summary>
/// 最新密码修改时间
/// </summary>
public const string LastChangePasswordTime = "LastChangePasswordTime";
} }

View File

@ -81,6 +81,11 @@ public class ConfigConst
/// </summary> /// </summary>
public const string SysRegionSyncLevel = "sys_region_sync_level"; public const string SysRegionSyncLevel = "sys_region_sync_level";
/// <summary>
/// 开启强制修改密码
/// </summary>
public const string SysForceChangePassword = "sys_force_change_password";
/// <summary> /// <summary>
/// Default 分组 /// Default 分组
/// </summary> /// </summary>

View File

@ -313,6 +313,12 @@ public partial class SysUser : EntityTenant
[MaxLength(512)] [MaxLength(512)]
public string? Signature { get; set; } public string? Signature { get; set; }
/// <summary>
/// 最新密码修改时间
/// </summary>
[SugarColumn(ColumnDescription = "最新密码修改时间")]
public DateTime? LastChangePasswordTime { get; set; }
/// <summary> /// <summary>
/// 验证超级管理员类型,若账号类型为超级管理员则报错 /// 验证超级管理员类型,若账号类型为超级管理员则报错
/// </summary> /// </summary>

View File

@ -33,6 +33,8 @@ public class SysConfigSeedData : ISqlSugarEntitySeedData<SysConfig>
new SysConfig{ Id=1300000000211, Name="域登录验证", Code=ConfigConst.SysDomainLogin, Value="False", SysFlag=YesNoEnum.Y, Remark="是否开启域登录验证", OrderNo=120, GroupCode=ConfigConst.SysDefaultGroup, CreateTime=DateTime.Parse("2022-02-10 00:00:00") }, new SysConfig{ Id=1300000000211, Name="域登录验证", Code=ConfigConst.SysDomainLogin, Value="False", SysFlag=YesNoEnum.Y, Remark="是否开启域登录验证", OrderNo=120, GroupCode=ConfigConst.SysDefaultGroup, CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
new SysConfig{ Id=1300000000221, Name="数据校验日志", Code=ConfigConst.SysValidationLog, Value="True", SysFlag=YesNoEnum.Y, Remark="是否数据校验日志", OrderNo=130, GroupCode=ConfigConst.SysDefaultGroup, CreateTime=DateTime.Parse("2022-02-10 00:00:00") }, new SysConfig{ Id=1300000000221, Name="数据校验日志", Code=ConfigConst.SysValidationLog, Value="True", SysFlag=YesNoEnum.Y, Remark="是否数据校验日志", OrderNo=130, GroupCode=ConfigConst.SysDefaultGroup, CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
new SysConfig{ Id=1300000000231, Name="行政区域同步层级", Code=ConfigConst.SysRegionSyncLevel, Value="3", SysFlag=YesNoEnum.Y, Remark="行政区域同步层级 1-省级,2-市级,3-区县级,4-街道级,5-村级", OrderNo=140, GroupCode=ConfigConst.SysDefaultGroup, CreateTime=DateTime.Parse("2022-02-10 00:00:00") }, new SysConfig{ Id=1300000000231, Name="行政区域同步层级", Code=ConfigConst.SysRegionSyncLevel, Value="3", SysFlag=YesNoEnum.Y, Remark="行政区域同步层级 1-省级,2-市级,3-区县级,4-街道级,5-村级", OrderNo=140, GroupCode=ConfigConst.SysDefaultGroup, CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
new SysConfig{ Id=1300000000241, Name="开启强制修改密码", Code=ConfigConst.SysForceChangePassword, Value="True", SysFlag=YesNoEnum.Y, Remark="开启强制修改密码", OrderNo=150, GroupCode=ConfigConst.SysDefaultGroup, CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
new SysConfig{ Id=1300000000301, Name="系统主标题", Code=ConfigConst.SysWebTitle, Value="Admin.NET.Pro", SysFlag=YesNoEnum.Y, Remark="系统主标题", OrderNo=300, GroupCode=ConfigConst.SysWebConfigGroup, CreateTime=DateTime.Parse("2022-02-10 00:00:00") }, new SysConfig{ Id=1300000000301, Name="系统主标题", Code=ConfigConst.SysWebTitle, Value="Admin.NET.Pro", SysFlag=YesNoEnum.Y, Remark="系统主标题", OrderNo=300, GroupCode=ConfigConst.SysWebConfigGroup, CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
new SysConfig{ Id=1300000000311, Name="系统副标题", Code=ConfigConst.SysWebViceTitle, Value="Admin.NET.Pro", SysFlag=YesNoEnum.Y, Remark="系统副标题", OrderNo=310, GroupCode=ConfigConst.SysWebConfigGroup, CreateTime=DateTime.Parse("2022-02-10 00:00:00") }, new SysConfig{ Id=1300000000311, Name="系统副标题", Code=ConfigConst.SysWebViceTitle, Value="Admin.NET.Pro", SysFlag=YesNoEnum.Y, Remark="系统副标题", OrderNo=310, GroupCode=ConfigConst.SysWebConfigGroup, CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
new SysConfig{ Id=1300000000321, Name="系统描述", Code=ConfigConst.SysWebViceDesc, Value="站在巨人肩膀上的 .NET 通用权限开发框架", SysFlag=YesNoEnum.Y, Remark="系统描述", OrderNo=320, GroupCode=ConfigConst.SysWebConfigGroup, CreateTime=DateTime.Parse("2022-02-10 00:00:00") }, new SysConfig{ Id=1300000000321, Name="系统描述", Code=ConfigConst.SysWebViceDesc, Value="站在巨人肩膀上的 .NET 通用权限开发框架", SysFlag=YesNoEnum.Y, Remark="系统描述", OrderNo=320, GroupCode=ConfigConst.SysWebConfigGroup, CreateTime=DateTime.Parse("2022-02-10 00:00:00") },

View File

@ -230,6 +230,7 @@ public class SysAuthService : IDynamicApiController, ITransient
{ ClaimConst.OrgName, user.SysOrg?.Name }, { ClaimConst.OrgName, user.SysOrg?.Name },
{ ClaimConst.OrgType, user.SysOrg?.Type }, { ClaimConst.OrgType, user.SysOrg?.Type },
{ ClaimConst.LoginMode, loginMode }, { ClaimConst.LoginMode, loginMode },
{ ClaimConst.LastChangePasswordTime, user.LastChangePasswordTime },
}, tokenExpire); }, tokenExpire);
// 生成刷新Token令牌 // 生成刷新Token令牌

View File

@ -20,10 +20,12 @@ import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } fr
import { AddSubscribeMessageTemplateInput } from '../models'; import { AddSubscribeMessageTemplateInput } from '../models';
import { AdminResultGenerateQRImageOutput } from '../models'; import { AdminResultGenerateQRImageOutput } from '../models';
import { AdminResultObject } from '../models'; import { AdminResultObject } from '../models';
import { AdminResultSysFile } from '../models';
import { AdminResultWxOpenIdOutput } from '../models'; import { AdminResultWxOpenIdOutput } from '../models';
import { AdminResultWxPhoneOutput } from '../models'; import { AdminResultWxPhoneOutput } from '../models';
import { GenerateQRImageInput } from '../models'; import { GenerateQRImageInput } from '../models';
import { SendSubscribeMessageInput } from '../models'; import { SendSubscribeMessageInput } from '../models';
import { SetNickNameInput } from '../models';
import { WxOpenIdLoginInput } from '../models'; import { WxOpenIdLoginInput } from '../models';
/** /**
* SysWxOpenApi - axios parameter creator * SysWxOpenApi - axios parameter creator
@ -218,6 +220,170 @@ export const SysWxOpenApiAxiosParamCreator = function (configuration?: Configura
options: localVarRequestOptions, options: localVarRequestOptions,
}; };
}, },
/**
*
* @summary
* @param {SetNickNameInput} [body]
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
apiSysWxOpenSetNickNamePost: async (body?: SetNickNameInput, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
const localVarPath = `/api/sysWxOpen/setNickName`;
// use dummy base URL string because the URL constructor only accepts absolute URLs.
const localVarUrlObj = new URL(localVarPath, 'https://example.com');
let baseOptions;
if (configuration) {
baseOptions = configuration.baseOptions;
}
const localVarRequestOptions :AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options};
const localVarHeaderParameter = {} as any;
const localVarQueryParameter = {} as any;
// authentication Bearer required
// http bearer authentication required
if (configuration && configuration.accessToken) {
const accessToken = typeof configuration.accessToken === 'function'
? await configuration.accessToken()
: await configuration.accessToken;
localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
}
localVarHeaderParameter['Content-Type'] = 'application/json-patch+json';
const query = new URLSearchParams(localVarUrlObj.search);
for (const key in localVarQueryParameter) {
query.set(key, localVarQueryParameter[key]);
}
for (const key in options.params) {
query.set(key, options.params[key]);
}
localVarUrlObj.search = (new URLSearchParams(query)).toString();
let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
const needsSerialization = (typeof body !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
localVarRequestOptions.data = needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || "");
return {
url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,
options: localVarRequestOptions,
};
},
/**
*
* @summary
* @param {string} [openId]
* @param {Blob} [file]
* @param {string} [fileType]
* @param {string} [path]
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
apiSysWxOpenUploadAvatarPostForm: async (openId?: string, file?: Blob, fileType?: string, path?: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
const localVarPath = `/api/sysWxOpen/uploadAvatar`;
// use dummy base URL string because the URL constructor only accepts absolute URLs.
const localVarUrlObj = new URL(localVarPath, 'https://example.com');
let baseOptions;
if (configuration) {
baseOptions = configuration.baseOptions;
}
const localVarRequestOptions :AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options};
const localVarHeaderParameter = {} as any;
const localVarQueryParameter = {} as any;
const localVarFormParams = new FormData();
// authentication Bearer required
// http bearer authentication required
if (configuration && configuration.accessToken) {
const accessToken = typeof configuration.accessToken === 'function'
? await configuration.accessToken()
: await configuration.accessToken;
localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
}
if (openId !== undefined) {
localVarFormParams.append('OpenId', openId as any);
}
if (file !== undefined) {
localVarFormParams.append('File', file as any);
}
if (fileType !== undefined) {
localVarFormParams.append('FileType', fileType as any);
}
if (path !== undefined) {
localVarFormParams.append('Path', path as any);
}
localVarHeaderParameter['Content-Type'] = 'multipart/form-data';
const query = new URLSearchParams(localVarUrlObj.search);
for (const key in localVarQueryParameter) {
query.set(key, localVarQueryParameter[key]);
}
for (const key in options.params) {
query.set(key, options.params[key]);
}
localVarUrlObj.search = (new URLSearchParams(query)).toString();
let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
localVarRequestOptions.data = localVarFormParams;
return {
url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,
options: localVarRequestOptions,
};
},
/**
*
* @summary
* @param {string} openid
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
apiSysWxOpenUserInfoOpenidGet: async (openid: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
// verify required parameter 'openid' is not null or undefined
if (openid === null || openid === undefined) {
throw new RequiredError('openid','Required parameter openid was null or undefined when calling apiSysWxOpenUserInfoOpenidGet.');
}
const localVarPath = `/api/sysWxOpen/userInfo/{openid}`
.replace(`{${"openid"}}`, encodeURIComponent(String(openid)));
// use dummy base URL string because the URL constructor only accepts absolute URLs.
const localVarUrlObj = new URL(localVarPath, 'https://example.com');
let baseOptions;
if (configuration) {
baseOptions = configuration.baseOptions;
}
const localVarRequestOptions :AxiosRequestConfig = { method: 'GET', ...baseOptions, ...options};
const localVarHeaderParameter = {} as any;
const localVarQueryParameter = {} as any;
// authentication Bearer required
// http bearer authentication required
if (configuration && configuration.accessToken) {
const accessToken = typeof configuration.accessToken === 'function'
? await configuration.accessToken()
: await configuration.accessToken;
localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
}
const query = new URLSearchParams(localVarUrlObj.search);
for (const key in localVarQueryParameter) {
query.set(key, localVarQueryParameter[key]);
}
for (const key in options.params) {
query.set(key, options.params[key]);
}
localVarUrlObj.search = (new URLSearchParams(query)).toString();
let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
return {
url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,
options: localVarRequestOptions,
};
},
/** /**
* *
* @summary 🔖 * @summary 🔖
@ -506,6 +672,51 @@ export const SysWxOpenApiFp = function(configuration?: Configuration) {
return axios.request(axiosRequestArgs); return axios.request(axiosRequestArgs);
}; };
}, },
/**
*
* @summary
* @param {SetNickNameInput} [body]
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
async apiSysWxOpenSetNickNamePost(body?: SetNickNameInput, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<void>>> {
const localVarAxiosArgs = await SysWxOpenApiAxiosParamCreator(configuration).apiSysWxOpenSetNickNamePost(body, options);
return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
return axios.request(axiosRequestArgs);
};
},
/**
*
* @summary
* @param {string} [openId]
* @param {Blob} [file]
* @param {string} [fileType]
* @param {string} [path]
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
async apiSysWxOpenUploadAvatarPostForm(openId?: string, file?: Blob, fileType?: string, path?: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<AdminResultSysFile>>> {
const localVarAxiosArgs = await SysWxOpenApiAxiosParamCreator(configuration).apiSysWxOpenUploadAvatarPostForm(openId, file, fileType, path, options);
return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
return axios.request(axiosRequestArgs);
};
},
/**
*
* @summary
* @param {string} openid
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
async apiSysWxOpenUserInfoOpenidGet(openid: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<AdminResultObject>>> {
const localVarAxiosArgs = await SysWxOpenApiAxiosParamCreator(configuration).apiSysWxOpenUserInfoOpenidGet(openid, options);
return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
return axios.request(axiosRequestArgs);
};
},
/** /**
* *
* @summary 🔖 * @summary 🔖
@ -614,6 +825,39 @@ export const SysWxOpenApiFactory = function (configuration?: Configuration, base
async apiSysWxOpenSendSubscribeMessagePost(body?: SendSubscribeMessageInput, options?: AxiosRequestConfig): Promise<AxiosResponse<AdminResultObject>> { async apiSysWxOpenSendSubscribeMessagePost(body?: SendSubscribeMessageInput, options?: AxiosRequestConfig): Promise<AxiosResponse<AdminResultObject>> {
return SysWxOpenApiFp(configuration).apiSysWxOpenSendSubscribeMessagePost(body, options).then((request) => request(axios, basePath)); return SysWxOpenApiFp(configuration).apiSysWxOpenSendSubscribeMessagePost(body, options).then((request) => request(axios, basePath));
}, },
/**
*
* @summary
* @param {SetNickNameInput} [body]
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
async apiSysWxOpenSetNickNamePost(body?: SetNickNameInput, options?: AxiosRequestConfig): Promise<AxiosResponse<void>> {
return SysWxOpenApiFp(configuration).apiSysWxOpenSetNickNamePost(body, options).then((request) => request(axios, basePath));
},
/**
*
* @summary
* @param {string} [openId]
* @param {Blob} [file]
* @param {string} [fileType]
* @param {string} [path]
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
async apiSysWxOpenUploadAvatarPostForm(openId?: string, file?: Blob, fileType?: string, path?: string, options?: AxiosRequestConfig): Promise<AxiosResponse<AdminResultSysFile>> {
return SysWxOpenApiFp(configuration).apiSysWxOpenUploadAvatarPostForm(openId, file, fileType, path, options).then((request) => request(axios, basePath));
},
/**
*
* @summary
* @param {string} openid
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
async apiSysWxOpenUserInfoOpenidGet(openid: string, options?: AxiosRequestConfig): Promise<AxiosResponse<AdminResultObject>> {
return SysWxOpenApiFp(configuration).apiSysWxOpenUserInfoOpenidGet(openid, options).then((request) => request(axios, basePath));
},
/** /**
* *
* @summary 🔖 * @summary 🔖
@ -711,6 +955,42 @@ export class SysWxOpenApi extends BaseAPI {
public async apiSysWxOpenSendSubscribeMessagePost(body?: SendSubscribeMessageInput, options?: AxiosRequestConfig) : Promise<AxiosResponse<AdminResultObject>> { public async apiSysWxOpenSendSubscribeMessagePost(body?: SendSubscribeMessageInput, options?: AxiosRequestConfig) : Promise<AxiosResponse<AdminResultObject>> {
return SysWxOpenApiFp(this.configuration).apiSysWxOpenSendSubscribeMessagePost(body, options).then((request) => request(this.axios, this.basePath)); return SysWxOpenApiFp(this.configuration).apiSysWxOpenSendSubscribeMessagePost(body, options).then((request) => request(this.axios, this.basePath));
} }
/**
*
* @summary
* @param {SetNickNameInput} [body]
* @param {*} [options] Override http request option.
* @throws {RequiredError}
* @memberof SysWxOpenApi
*/
public async apiSysWxOpenSetNickNamePost(body?: SetNickNameInput, options?: AxiosRequestConfig) : Promise<AxiosResponse<void>> {
return SysWxOpenApiFp(this.configuration).apiSysWxOpenSetNickNamePost(body, options).then((request) => request(this.axios, this.basePath));
}
/**
*
* @summary
* @param {string} [openId]
* @param {Blob} [file]
* @param {string} [fileType]
* @param {string} [path]
* @param {*} [options] Override http request option.
* @throws {RequiredError}
* @memberof SysWxOpenApi
*/
public async apiSysWxOpenUploadAvatarPostForm(openId?: string, file?: Blob, fileType?: string, path?: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<AdminResultSysFile>> {
return SysWxOpenApiFp(this.configuration).apiSysWxOpenUploadAvatarPostForm(openId, file, fileType, path, options).then((request) => request(this.axios, this.basePath));
}
/**
*
* @summary
* @param {string} openid
* @param {*} [options] Override http request option.
* @throws {RequiredError}
* @memberof SysWxOpenApi
*/
public async apiSysWxOpenUserInfoOpenidGet(openid: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<AdminResultObject>> {
return SysWxOpenApiFp(this.configuration).apiSysWxOpenUserInfoOpenidGet(openid, options).then((request) => request(this.axios, this.basePath));
}
/** /**
* *
* @summary 🔖 * @summary 🔖

View File

@ -399,6 +399,14 @@ export interface AddUserInput {
*/ */
signature?: string | null; signature?: string | null;
/**
*
*
* @type {Date}
* @memberof AddUserInput
*/
lastChangePasswordTime?: Date | null;
/** /**
* *
* *

View File

@ -301,6 +301,7 @@ export * from './search';
export * from './security-rule-set'; export * from './security-rule-set';
export * from './send-subscribe-message-input'; export * from './send-subscribe-message-input';
export * from './serialization-format'; export * from './serialization-format';
export * from './set-nick-name-input';
export * from './signature-input'; export * from './signature-input';
export * from './sm-key-pair-output'; export * from './sm-key-pair-output';
export * from './sms-verify-code-input'; export * from './sms-verify-code-input';
@ -370,6 +371,7 @@ export * from './sys-schedule';
export * from './sys-user'; export * from './sys-user';
export * from './sys-user-ext-org'; export * from './sys-user-ext-org';
export * from './sys-wechat-pay'; export * from './sys-wechat-pay';
export * from './sys-wx-open-upload-avatar-body';
export * from './table-output'; export * from './table-output';
export * from './tenant-id-input'; export * from './tenant-id-input';
export * from './tenant-input'; export * from './tenant-input';

View File

@ -0,0 +1,38 @@
/* tslint:disable */
/* eslint-disable */
/**
* Admin.NET
* .NET <br/><u><b><font color='FF0000'> 👮</font></b></u>
*
* OpenAPI spec version: 1.0.0
*
*
* NOTE: This class is auto generated by the swagger code generator program.
* https://github.com/swagger-api/swagger-codegen.git
* Do not edit the class manually.
*/
/**
*
*
* @export
* @interface SetNickNameInput
*/
export interface SetNickNameInput {
/**
*
*
* @type {string}
* @memberof SetNickNameInput
*/
openId: string;
/**
*
*
* @type {string}
* @memberof SetNickNameInput
*/
nickName: string;
}

View File

@ -413,4 +413,12 @@ export interface SysUser {
* @memberof SysUser * @memberof SysUser
*/ */
signature?: string | null; signature?: string | null;
/**
*
*
* @type {Date}
* @memberof SysUser
*/
lastChangePasswordTime?: Date | null;
} }

View File

@ -0,0 +1,54 @@
/* tslint:disable */
/* eslint-disable */
/**
* Admin.NET
* .NET <br/><u><b><font color='FF0000'> 👮</font></b></u>
*
* OpenAPI spec version: 1.0.0
*
*
* NOTE: This class is auto generated by the swagger code generator program.
* https://github.com/swagger-api/swagger-codegen.git
* Do not edit the class manually.
*/
/**
*
*
* @export
* @interface SysWxOpenUploadAvatarBody
*/
export interface SysWxOpenUploadAvatarBody {
/**
*
*
* @type {string}
* @memberof SysWxOpenUploadAvatarBody
*/
openId: string;
/**
*
*
* @type {Blob}
* @memberof SysWxOpenUploadAvatarBody
*/
file: Blob;
/**
*
*
* @type {string}
* @memberof SysWxOpenUploadAvatarBody
*/
fileType?: string;
/**
*
*
* @type {string}
* @memberof SysWxOpenUploadAvatarBody
*/
path?: string;
}

View File

@ -399,6 +399,14 @@ export interface UpdateUserInput {
*/ */
signature?: string | null; signature?: string | null;
/**
*
*
* @type {Date}
* @memberof UpdateUserInput
*/
lastChangePasswordTime?: Date | null;
/** /**
* *
* *

View File

@ -414,6 +414,14 @@ export interface UserOutput {
*/ */
signature?: string | null; signature?: string | null;
/**
*
*
* @type {Date}
* @memberof UserOutput
*/
lastChangePasswordTime?: Date | null;
/** /**
* *
* *