From 15ff1a29c91e18049314ff63a184fbffbb418c8a Mon Sep 17 00:00:00 2001 From: zuohuaijun Date: Sun, 1 Sep 2024 02:31:52 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=98=8E=E5=A2=9E=E5=8A=A0=E5=BC=80?= =?UTF-8?q?=E5=90=AF=E5=BC=BA=E5=88=B6=E4=BF=AE=E6=94=B9=E5=AF=86=E7=A0=81?= =?UTF-8?q?=EF=BC=88=E6=9C=AA=E5=AE=8C=E5=BE=85=E7=BB=AD=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Admin.NET/Admin.NET.Core/Const/ClaimConst.cs | 5 + Admin.NET/Admin.NET.Core/Const/ConfigConst.cs | 5 + Admin.NET/Admin.NET.Core/Entity/SysUser.cs | 6 + .../SeedData/SysConfigSeedData.cs | 2 + .../Service/Auth/SysAuthService.cs | 1 + Web/src/api-services/apis/sys-wx-open-api.ts | 280 ++++++++++++++++++ Web/src/api-services/models/add-user-input.ts | 8 + Web/src/api-services/models/index.ts | 2 + .../models/set-nick-name-input.ts | 38 +++ Web/src/api-services/models/sys-user.ts | 8 + .../models/sys-wx-open-upload-avatar-body.ts | 54 ++++ .../api-services/models/update-user-input.ts | 8 + Web/src/api-services/models/user-output.ts | 8 + 13 files changed, 425 insertions(+) create mode 100644 Web/src/api-services/models/set-nick-name-input.ts create mode 100644 Web/src/api-services/models/sys-wx-open-upload-avatar-body.ts diff --git a/Admin.NET/Admin.NET.Core/Const/ClaimConst.cs b/Admin.NET/Admin.NET.Core/Const/ClaimConst.cs index 7fdf85f3..d16758e7 100644 --- a/Admin.NET/Admin.NET.Core/Const/ClaimConst.cs +++ b/Admin.NET/Admin.NET.Core/Const/ClaimConst.cs @@ -65,4 +65,9 @@ public class ClaimConst /// 登录模式PC、APP /// public const string LoginMode = "LoginMode"; + + /// + /// 最新密码修改时间 + /// + public const string LastChangePasswordTime = "LastChangePasswordTime"; } \ No newline at end of file diff --git a/Admin.NET/Admin.NET.Core/Const/ConfigConst.cs b/Admin.NET/Admin.NET.Core/Const/ConfigConst.cs index 54809813..e6ebf0d6 100644 --- a/Admin.NET/Admin.NET.Core/Const/ConfigConst.cs +++ b/Admin.NET/Admin.NET.Core/Const/ConfigConst.cs @@ -81,6 +81,11 @@ public class ConfigConst /// public const string SysRegionSyncLevel = "sys_region_sync_level"; + /// + /// 开启强制修改密码 + /// + public const string SysForceChangePassword = "sys_force_change_password"; + /// /// Default 分组 /// diff --git a/Admin.NET/Admin.NET.Core/Entity/SysUser.cs b/Admin.NET/Admin.NET.Core/Entity/SysUser.cs index da8808cd..0e03bc10 100644 --- a/Admin.NET/Admin.NET.Core/Entity/SysUser.cs +++ b/Admin.NET/Admin.NET.Core/Entity/SysUser.cs @@ -313,6 +313,12 @@ public partial class SysUser : EntityTenant [MaxLength(512)] public string? Signature { get; set; } + /// + /// 最新密码修改时间 + /// + [SugarColumn(ColumnDescription = "最新密码修改时间")] + public DateTime? LastChangePasswordTime { get; set; } + /// /// 验证超级管理员类型,若账号类型为超级管理员则报错 /// diff --git a/Admin.NET/Admin.NET.Core/SeedData/SysConfigSeedData.cs b/Admin.NET/Admin.NET.Core/SeedData/SysConfigSeedData.cs index 175212bb..cb7f81ae 100644 --- a/Admin.NET/Admin.NET.Core/SeedData/SysConfigSeedData.cs +++ b/Admin.NET/Admin.NET.Core/SeedData/SysConfigSeedData.cs @@ -33,6 +33,8 @@ public class SysConfigSeedData : ISqlSugarEntitySeedData 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=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=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") }, diff --git a/Admin.NET/Admin.NET.Core/Service/Auth/SysAuthService.cs b/Admin.NET/Admin.NET.Core/Service/Auth/SysAuthService.cs index f340f1ca..1ec9f33a 100644 --- a/Admin.NET/Admin.NET.Core/Service/Auth/SysAuthService.cs +++ b/Admin.NET/Admin.NET.Core/Service/Auth/SysAuthService.cs @@ -230,6 +230,7 @@ public class SysAuthService : IDynamicApiController, ITransient { ClaimConst.OrgName, user.SysOrg?.Name }, { ClaimConst.OrgType, user.SysOrg?.Type }, { ClaimConst.LoginMode, loginMode }, + { ClaimConst.LastChangePasswordTime, user.LastChangePasswordTime }, }, tokenExpire); // 生成刷新Token令牌 diff --git a/Web/src/api-services/apis/sys-wx-open-api.ts b/Web/src/api-services/apis/sys-wx-open-api.ts index 56387236..da5b694a 100644 --- a/Web/src/api-services/apis/sys-wx-open-api.ts +++ b/Web/src/api-services/apis/sys-wx-open-api.ts @@ -20,10 +20,12 @@ import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } fr import { AddSubscribeMessageTemplateInput } from '../models'; import { AdminResultGenerateQRImageOutput } from '../models'; import { AdminResultObject } from '../models'; +import { AdminResultSysFile } from '../models'; import { AdminResultWxOpenIdOutput } from '../models'; import { AdminResultWxPhoneOutput } from '../models'; import { GenerateQRImageInput } from '../models'; import { SendSubscribeMessageInput } from '../models'; +import { SetNickNameInput } from '../models'; import { WxOpenIdLoginInput } from '../models'; /** * SysWxOpenApi - axios parameter creator @@ -218,6 +220,170 @@ export const SysWxOpenApiAxiosParamCreator = function (configuration?: Configura options: localVarRequestOptions, }; }, + /** + * + * @summary 设置小程序用户昵称 + * @param {SetNickNameInput} [body] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + apiSysWxOpenSetNickNamePost: async (body?: SetNickNameInput, options: AxiosRequestConfig = {}): Promise => { + 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 => { + 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 => { + // 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 验证签名 🔖 @@ -506,6 +672,51 @@ export const SysWxOpenApiFp = function(configuration?: Configuration) { 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>> { + 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>> { + 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>> { + 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 验证签名 🔖 @@ -614,6 +825,39 @@ export const SysWxOpenApiFactory = function (configuration?: Configuration, base async apiSysWxOpenSendSubscribeMessagePost(body?: SendSubscribeMessageInput, options?: AxiosRequestConfig): Promise> { 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> { + 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> { + 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> { + return SysWxOpenApiFp(configuration).apiSysWxOpenUserInfoOpenidGet(openid, options).then((request) => request(axios, basePath)); + }, /** * * @summary 验证签名 🔖 @@ -711,6 +955,42 @@ export class SysWxOpenApi extends BaseAPI { public async apiSysWxOpenSendSubscribeMessagePost(body?: SendSubscribeMessageInput, options?: AxiosRequestConfig) : Promise> { 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> { + 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> { + 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> { + return SysWxOpenApiFp(this.configuration).apiSysWxOpenUserInfoOpenidGet(openid, options).then((request) => request(this.axios, this.basePath)); + } /** * * @summary 验证签名 🔖 diff --git a/Web/src/api-services/models/add-user-input.ts b/Web/src/api-services/models/add-user-input.ts index 0c07b86f..e41c975c 100644 --- a/Web/src/api-services/models/add-user-input.ts +++ b/Web/src/api-services/models/add-user-input.ts @@ -399,6 +399,14 @@ export interface AddUserInput { */ signature?: string | null; + /** + * 最新密码修改时间 + * + * @type {Date} + * @memberof AddUserInput + */ + lastChangePasswordTime?: Date | null; + /** * 账号 * diff --git a/Web/src/api-services/models/index.ts b/Web/src/api-services/models/index.ts index a4d00a28..d8d502c6 100644 --- a/Web/src/api-services/models/index.ts +++ b/Web/src/api-services/models/index.ts @@ -301,6 +301,7 @@ export * from './search'; export * from './security-rule-set'; export * from './send-subscribe-message-input'; export * from './serialization-format'; +export * from './set-nick-name-input'; export * from './signature-input'; export * from './sm-key-pair-output'; export * from './sms-verify-code-input'; @@ -370,6 +371,7 @@ export * from './sys-schedule'; export * from './sys-user'; export * from './sys-user-ext-org'; export * from './sys-wechat-pay'; +export * from './sys-wx-open-upload-avatar-body'; export * from './table-output'; export * from './tenant-id-input'; export * from './tenant-input'; diff --git a/Web/src/api-services/models/set-nick-name-input.ts b/Web/src/api-services/models/set-nick-name-input.ts new file mode 100644 index 00000000..62acc410 --- /dev/null +++ b/Web/src/api-services/models/set-nick-name-input.ts @@ -0,0 +1,38 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Admin.NET 通用权限开发平台 + * 让 .NET 开发更简单、更通用、更流行。整合最新技术,模块插件式开发,前后端分离,开箱即用。
👮不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任! + * + * 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; +} diff --git a/Web/src/api-services/models/sys-user.ts b/Web/src/api-services/models/sys-user.ts index 30c9eccd..2c1f0ee6 100644 --- a/Web/src/api-services/models/sys-user.ts +++ b/Web/src/api-services/models/sys-user.ts @@ -413,4 +413,12 @@ export interface SysUser { * @memberof SysUser */ signature?: string | null; + + /** + * 最新密码修改时间 + * + * @type {Date} + * @memberof SysUser + */ + lastChangePasswordTime?: Date | null; } diff --git a/Web/src/api-services/models/sys-wx-open-upload-avatar-body.ts b/Web/src/api-services/models/sys-wx-open-upload-avatar-body.ts new file mode 100644 index 00000000..d1faa9dd --- /dev/null +++ b/Web/src/api-services/models/sys-wx-open-upload-avatar-body.ts @@ -0,0 +1,54 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Admin.NET 通用权限开发平台 + * 让 .NET 开发更简单、更通用、更流行。整合最新技术,模块插件式开发,前后端分离,开箱即用。
👮不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任! + * + * 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; +} diff --git a/Web/src/api-services/models/update-user-input.ts b/Web/src/api-services/models/update-user-input.ts index 636b4347..bca5c7c5 100644 --- a/Web/src/api-services/models/update-user-input.ts +++ b/Web/src/api-services/models/update-user-input.ts @@ -399,6 +399,14 @@ export interface UpdateUserInput { */ signature?: string | null; + /** + * 最新密码修改时间 + * + * @type {Date} + * @memberof UpdateUserInput + */ + lastChangePasswordTime?: Date | null; + /** * 账号 * diff --git a/Web/src/api-services/models/user-output.ts b/Web/src/api-services/models/user-output.ts index d51ddcc0..9eec4666 100644 --- a/Web/src/api-services/models/user-output.ts +++ b/Web/src/api-services/models/user-output.ts @@ -414,6 +414,14 @@ export interface UserOutput { */ signature?: string | null; + /** + * 最新密码修改时间 + * + * @type {Date} + * @memberof UserOutput + */ + lastChangePasswordTime?: Date | null; + /** * 机构名称 *