😎1、增加职位类别字段及处理 2、优化账号页面 3、优化获取机构子树

This commit is contained in:
zuohuaijun 2025-10-18 22:36:25 +08:00
parent 4f8fdb65a4
commit 6cb45cff7c
21 changed files with 240 additions and 453 deletions

View File

@ -29,6 +29,13 @@ public partial class SysPos : EntityTenant
[MaxLength(64)] [MaxLength(64)]
public string? Code { get; set; } public string? Code { get; set; }
/// <summary>
/// 类别
/// </summary>
[SugarColumn(ColumnDescription = "类别", Length = 64)]
[MaxLength(64)]
public string? Type { get; set; }
/// <summary> /// <summary>
/// 排序 /// 排序
/// </summary> /// </summary>

View File

@ -104,7 +104,7 @@ public class SysOrgService : IDynamicApiController, ITransient
public async Task<List<SysOrg>> GetChildTree(long pid, int level) public async Task<List<SysOrg>> GetChildTree(long pid, int level)
{ {
var iSugarQueryable = _sysOrgRep.AsQueryable().OrderBy(u => new { u.OrderNo }); var iSugarQueryable = _sysOrgRep.AsQueryable().OrderBy(u => new { u.OrderNo });
return await iSugarQueryable.Where(u => u.Level < level).ToTreeAsync(u => u.Children, u => u.Pid, pid); return await iSugarQueryable.Where(u => u.Level < level).ToChildListAsync(u => u.Pid, pid, true);
} }
/// <summary> /// <summary>

View File

@ -17,6 +17,7 @@ public class PosDto
/// 名称 /// 名称
/// </summary> /// </summary>
[ImporterHeader(Name = "名称")] [ImporterHeader(Name = "名称")]
[Required(ErrorMessage = "名称不能为空")]
[ExporterHeader(DisplayName = "名称", IsBold = true)] [ExporterHeader(DisplayName = "名称", IsBold = true)]
public string Name { get; set; } public string Name { get; set; }
@ -27,6 +28,13 @@ public class PosDto
[ExporterHeader(DisplayName = "编码", IsBold = true)] [ExporterHeader(DisplayName = "编码", IsBold = true)]
public string Code { get; set; } public string Code { get; set; }
/// <summary>
/// 类别
/// </summary>
[ImporterHeader(Name = "类别")]
[ExporterHeader(DisplayName = "类别", IsBold = true)]
public string Type { get; set; }
/// <summary> /// <summary>
/// 排序 /// 排序
/// </summary> /// </summary>
@ -45,7 +53,6 @@ public class PosDto
/// 状态 /// 状态
/// </summary> /// </summary>
[ImporterHeader(Name = "状态")] [ImporterHeader(Name = "状态")]
[Required(ErrorMessage = "状态不能为空")]
[ValueMapping("启用", 1)] [ValueMapping("启用", 1)]
[ValueMapping("停用", 2)] [ValueMapping("停用", 2)]
[ExporterHeader(DisplayName = "状态", IsBold = true)] [ExporterHeader(DisplayName = "状态", IsBold = true)]

View File

@ -146,9 +146,15 @@ public class SysPosService : IDynamicApiController, ITransient
if (res == null || res.Exception != null) if (res == null || res.Exception != null)
throw Oops.Oh(res.Exception); throw Oops.Oh(res.Exception);
var importData = res.Data.ToList(); var posList = new List<SysPos>();
var importData = res.Data.ToList().GroupBy(u => new { u.Name, u.Type }).Select(u => u.First()).ToList(); // 以名称和类型除重
foreach (var item in importData)
{
if (string.IsNullOrWhiteSpace(item.Name)) continue;
posList.Add(item.Adapt<SysPos>());
}
// 按照编码条件进行批量更新或者新增 // 按照编码条件进行批量更新或者新增
await _sysPosRep.Context.Storageable(importData.Adapt<List<SysPos>>()).WhereColumns(u => u.Code).ExecuteCommandAsync(); await _sysPosRep.Context.Storageable(posList).WhereColumns(u => u.Code).ExecuteCommandAsync();
} }
/// <summary> /// <summary>

View File

@ -467,6 +467,32 @@ public class SysUserService : IDynamicApiController, ITransient
return await _sysUserExtOrgService.GetUserExtOrgList(userId); return await _sysUserExtOrgService.GetUserExtOrgList(userId);
} }
/// <summary>
/// 获取用户能看到的其他用户集合 🔖
/// </summary>
/// <returns></returns>
[DisplayName("获取用户能看到的其他用户集合")]
public async Task<List<UserOutput>> GetOwnUserList()
{
// 获取用户拥有的机构集合
var orgList = await _sysOrgService.GetUserOrgIdList();
return await _sysUserRep.AsQueryable()
.LeftJoin<SysOrg>((u, a) => u.OrgId == a.Id)
.LeftJoin<SysPos>((u, a, b) => u.PosId == b.Id)
.Where(u => u.AccountType != AccountTypeEnum.SuperAdmin)
.Where(u => orgList.Contains(u.OrgId))
.OrderBy(u => new { u.OrderNo, u.Id })
.Select((u, a, b) => new UserOutput
{
OrgName = a.Name,
PosName = b.Name,
RoleName = SqlFunc.Subqueryable<SysUserRole>().LeftJoin<SysRole>((m, n) => m.RoleId == n.Id).Where(m => m.UserId == u.Id).SelectStringJoin((m, n) => n.Name, ","),
DomainAccount = SqlFunc.Subqueryable<SysUserLdap>().Where(m => m.UserId == u.Id).Select(m => m.Account)
}, true)
.ToListAsync();
}
/// <summary> /// <summary>
/// 强制下线账号和失效Token /// 强制下线账号和失效Token
/// </summary> /// </summary>

View File

@ -12,9 +12,6 @@
* Do not edit the class manually. * Do not edit the class manually.
*/ */
export * from './apis/apijsonapi'; export * from './apis/apijsonapi';
export * from './apis/llmchange-model-test-api';
export * from './apis/llmtest-api';
export * from './apis/sse-service-api';
export * from './apis/sys-alipay-api'; export * from './apis/sys-alipay-api';
export * from './apis/sys-auth-api'; export * from './apis/sys-auth-api';
export * from './apis/sys-cache-api'; export * from './apis/sys-cache-api';

View File

@ -1,139 +0,0 @@
/* 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.
*/
import globalAxios, { AxiosResponse, AxiosInstance, AxiosRequestConfig } from 'axios';
import { Configuration } from '../configuration';
// Some imports not used depending on template conditions
// @ts-ignore
import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base';
import { AdminNETResultString } from '../models';
import { LLMModelInput } from '../models';
/**
* LLMChangeModelTestApi - axios parameter creator
* @export
*/
export const LLMChangeModelTestApiAxiosParamCreator = function (configuration?: Configuration) {
return {
/**
*
* @summary 使 OpenAIAzure OpenAIGoogle Gemini等
* @param {LLMModelInput} [body]
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
apiLLMChangeModelTestTestSwitchPost: async (body?: LLMModelInput, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
const localVarPath = `/api/lLMChangeModelTest/testSwitch`;
// 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,
};
},
}
};
/**
* LLMChangeModelTestApi - functional programming interface
* @export
*/
export const LLMChangeModelTestApiFp = function(configuration?: Configuration) {
return {
/**
*
* @summary 使 OpenAIAzure OpenAIGoogle Gemini等
* @param {LLMModelInput} [body]
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
async apiLLMChangeModelTestTestSwitchPost(body?: LLMModelInput, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<AdminNETResultString>>> {
const localVarAxiosArgs = await LLMChangeModelTestApiAxiosParamCreator(configuration).apiLLMChangeModelTestTestSwitchPost(body, options);
return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
return axios.request(axiosRequestArgs);
};
},
}
};
/**
* LLMChangeModelTestApi - factory interface
* @export
*/
export const LLMChangeModelTestApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) {
return {
/**
*
* @summary 使 OpenAIAzure OpenAIGoogle Gemini等
* @param {LLMModelInput} [body]
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
async apiLLMChangeModelTestTestSwitchPost(body?: LLMModelInput, options?: AxiosRequestConfig): Promise<AxiosResponse<AdminNETResultString>> {
return LLMChangeModelTestApiFp(configuration).apiLLMChangeModelTestTestSwitchPost(body, options).then((request) => request(axios, basePath));
},
};
};
/**
* LLMChangeModelTestApi - object-oriented interface
* @export
* @class LLMChangeModelTestApi
* @extends {BaseAPI}
*/
export class LLMChangeModelTestApi extends BaseAPI {
/**
*
* @summary 使 OpenAIAzure OpenAIGoogle Gemini等
* @param {LLMModelInput} [body]
* @param {*} [options] Override http request option.
* @throws {RequiredError}
* @memberof LLMChangeModelTestApi
*/
public async apiLLMChangeModelTestTestSwitchPost(body?: LLMModelInput, options?: AxiosRequestConfig) : Promise<AxiosResponse<AdminNETResultString>> {
return LLMChangeModelTestApiFp(this.configuration).apiLLMChangeModelTestTestSwitchPost(body, options).then((request) => request(this.axios, this.basePath));
}
}

View File

@ -1,130 +0,0 @@
/* 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.
*/
import globalAxios, { AxiosResponse, AxiosInstance, AxiosRequestConfig } from 'axios';
import { Configuration } from '../configuration';
// Some imports not used depending on template conditions
// @ts-ignore
import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base';
import { AdminNETResultString } from '../models';
/**
* LLMTestApi - axios parameter creator
* @export
*/
export const LLMTestApiAxiosParamCreator = function (configuration?: Configuration) {
return {
/**
*
* @summary 使使使
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
apiLLMTestTestPost: async (options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
const localVarPath = `/api/lLMTest/test`;
// 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;
}
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,
};
},
}
};
/**
* LLMTestApi - functional programming interface
* @export
*/
export const LLMTestApiFp = function(configuration?: Configuration) {
return {
/**
*
* @summary 使使使
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
async apiLLMTestTestPost(options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<AdminNETResultString>>> {
const localVarAxiosArgs = await LLMTestApiAxiosParamCreator(configuration).apiLLMTestTestPost(options);
return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
return axios.request(axiosRequestArgs);
};
},
}
};
/**
* LLMTestApi - factory interface
* @export
*/
export const LLMTestApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) {
return {
/**
*
* @summary 使使使
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
async apiLLMTestTestPost(options?: AxiosRequestConfig): Promise<AxiosResponse<AdminNETResultString>> {
return LLMTestApiFp(configuration).apiLLMTestTestPost(options).then((request) => request(axios, basePath));
},
};
};
/**
* LLMTestApi - object-oriented interface
* @export
* @class LLMTestApi
* @extends {BaseAPI}
*/
export class LLMTestApi extends BaseAPI {
/**
*
* @summary 使使使
* @param {*} [options] Override http request option.
* @throws {RequiredError}
* @memberof LLMTestApi
*/
public async apiLLMTestTestPost(options?: AxiosRequestConfig) : Promise<AxiosResponse<AdminNETResultString>> {
return LLMTestApiFp(this.configuration).apiLLMTestTestPost(options).then((request) => request(this.axios, this.basePath));
}
}

View File

@ -1,134 +0,0 @@
/* 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.
*/
import globalAxios, { AxiosResponse, AxiosInstance, AxiosRequestConfig } from 'axios';
import { Configuration } from '../configuration';
// Some imports not used depending on template conditions
// @ts-ignore
import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base';
/**
* SseServiceApi - axios parameter creator
* @export
*/
export const SseServiceApiAxiosParamCreator = function (configuration?: Configuration) {
return {
/**
*
* @param {number} id
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
sseChatIdGet: async (id: number, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
// verify required parameter 'id' is not null or undefined
if (id === null || id === undefined) {
throw new RequiredError('id','Required parameter id was null or undefined when calling sseChatIdGet.');
}
const localVarPath = `/sse/chat/{id}`
.replace(`{${"id"}}`, encodeURIComponent(String(id)));
// 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,
};
},
}
};
/**
* SseServiceApi - functional programming interface
* @export
*/
export const SseServiceApiFp = function(configuration?: Configuration) {
return {
/**
*
* @param {number} id
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
async sseChatIdGet(id: number, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<void>>> {
const localVarAxiosArgs = await SseServiceApiAxiosParamCreator(configuration).sseChatIdGet(id, options);
return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
return axios.request(axiosRequestArgs);
};
},
}
};
/**
* SseServiceApi - factory interface
* @export
*/
export const SseServiceApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) {
return {
/**
*
* @param {number} id
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
async sseChatIdGet(id: number, options?: AxiosRequestConfig): Promise<AxiosResponse<void>> {
return SseServiceApiFp(configuration).sseChatIdGet(id, options).then((request) => request(axios, basePath));
},
};
};
/**
* SseServiceApi - object-oriented interface
* @export
* @class SseServiceApi
* @extends {BaseAPI}
*/
export class SseServiceApi extends BaseAPI {
/**
*
* @param {number} id
* @param {*} [options] Override http request option.
* @throws {RequiredError}
* @memberof SseServiceApi
*/
public async sseChatIdGet(id: number, options?: AxiosRequestConfig) : Promise<AxiosResponse<void>> {
return SseServiceApiFp(this.configuration).sseChatIdGet(id, options).then((request) => request(this.axios, this.basePath));
}
}

View File

@ -23,6 +23,7 @@ import { AdminNETResultGrantRoleOutput } from '../models';
import { AdminNETResultInt32 } from '../models'; import { AdminNETResultInt32 } from '../models';
import { AdminNETResultInt64 } from '../models'; import { AdminNETResultInt64 } from '../models';
import { AdminNETResultListSysUserExtOrg } from '../models'; import { AdminNETResultListSysUserExtOrg } from '../models';
import { AdminNETResultListUserOutput } from '../models';
import { AdminNETResultSqlSugarPagedListUserOutput } from '../models'; import { AdminNETResultSqlSugarPagedListUserOutput } from '../models';
import { AdminNETResultString } from '../models'; import { AdminNETResultString } from '../models';
import { AdminNETResultSysUser } from '../models'; import { AdminNETResultSysUser } from '../models';
@ -374,6 +375,49 @@ export const SysUserApiAxiosParamCreator = function (configuration?: Configurati
options: localVarRequestOptions, options: localVarRequestOptions,
}; };
}, },
/**
*
* @summary 🔖
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
apiSysUserOwnUserListGet: async (options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
const localVarPath = `/api/sysUser/ownUserList`;
// 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 🔖
@ -811,6 +855,19 @@ export const SysUserApiFp = function(configuration?: Configuration) {
return axios.request(axiosRequestArgs); return axios.request(axiosRequestArgs);
}; };
}, },
/**
*
* @summary 🔖
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
async apiSysUserOwnUserListGet(options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<AdminNETResultListUserOutput>>> {
const localVarAxiosArgs = await SysUserApiAxiosParamCreator(configuration).apiSysUserOwnUserListGet(options);
return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
return axios.request(axiosRequestArgs);
};
},
/** /**
* *
* @summary 🔖 * @summary 🔖
@ -986,6 +1043,15 @@ export const SysUserApiFactory = function (configuration?: Configuration, basePa
async apiSysUserOwnRoleListUserIdGet(userId: number, options?: AxiosRequestConfig): Promise<AxiosResponse<AdminNETResultGrantRoleOutput>> { async apiSysUserOwnRoleListUserIdGet(userId: number, options?: AxiosRequestConfig): Promise<AxiosResponse<AdminNETResultGrantRoleOutput>> {
return SysUserApiFp(configuration).apiSysUserOwnRoleListUserIdGet(userId, options).then((request) => request(axios, basePath)); return SysUserApiFp(configuration).apiSysUserOwnRoleListUserIdGet(userId, options).then((request) => request(axios, basePath));
}, },
/**
*
* @summary 🔖
* @param {*} [options] Override http request option.
* @throws {RequiredError}
*/
async apiSysUserOwnUserListGet(options?: AxiosRequestConfig): Promise<AxiosResponse<AdminNETResultListUserOutput>> {
return SysUserApiFp(configuration).apiSysUserOwnUserListGet(options).then((request) => request(axios, basePath));
},
/** /**
* *
* @summary 🔖 * @summary 🔖
@ -1141,6 +1207,16 @@ export class SysUserApi extends BaseAPI {
public async apiSysUserOwnRoleListUserIdGet(userId: number, options?: AxiosRequestConfig) : Promise<AxiosResponse<AdminNETResultGrantRoleOutput>> { public async apiSysUserOwnRoleListUserIdGet(userId: number, options?: AxiosRequestConfig) : Promise<AxiosResponse<AdminNETResultGrantRoleOutput>> {
return SysUserApiFp(this.configuration).apiSysUserOwnRoleListUserIdGet(userId, options).then((request) => request(this.axios, this.basePath)); return SysUserApiFp(this.configuration).apiSysUserOwnRoleListUserIdGet(userId, options).then((request) => request(this.axios, this.basePath));
} }
/**
*
* @summary 🔖
* @param {*} [options] Override http request option.
* @throws {RequiredError}
* @memberof SysUserApi
*/
public async apiSysUserOwnUserListGet(options?: AxiosRequestConfig) : Promise<AxiosResponse<AdminNETResultListUserOutput>> {
return SysUserApiFp(this.configuration).apiSysUserOwnUserListGet(options).then((request) => request(this.axios, this.basePath));
}
/** /**
* *
* @summary 🔖 * @summary 🔖

View File

@ -102,6 +102,14 @@ export interface AddPosInput {
*/ */
code?: string | null; code?: string | null;
/**
*
*
* @type {string}
* @memberof AddPosInput
*/
type?: string | null;
/** /**
* *
* *

View File

@ -0,0 +1,71 @@
/* 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.
*/
import { UserOutput } from './user-output';
/**
*
*
* @export
* @interface AdminNETResultListUserOutput
*/
export interface AdminNETResultListUserOutput {
/**
*
*
* @type {number}
* @memberof AdminNETResultListUserOutput
*/
code?: number;
/**
* successwarningerror
*
* @type {string}
* @memberof AdminNETResultListUserOutput
*/
type?: string | null;
/**
*
*
* @type {string}
* @memberof AdminNETResultListUserOutput
*/
message?: string | null;
/**
*
*
* @type {Array<UserOutput>}
* @memberof AdminNETResultListUserOutput
*/
result?: Array<UserOutput> | null;
/**
*
*
* @type {any}
* @memberof AdminNETResultListUserOutput
*/
extras?: any | null;
/**
*
*
* @type {Date}
* @memberof AdminNETResultListUserOutput
*/
time?: Date;
}

View File

@ -94,6 +94,7 @@ export * from './admin-netresult-list-sys-user-ldap';
export * from './admin-netresult-list-sys-wechat-refund'; export * from './admin-netresult-list-sys-wechat-refund';
export * from './admin-netresult-list-table-output'; export * from './admin-netresult-list-table-output';
export * from './admin-netresult-list-tree-node'; export * from './admin-netresult-list-tree-node';
export * from './admin-netresult-list-user-output';
export * from './admin-netresult-login-output'; export * from './admin-netresult-login-output';
export * from './admin-netresult-login-user-output'; export * from './admin-netresult-login-user-output';
export * from './admin-netresult-notice-output'; export * from './admin-netresult-notice-output';
@ -309,7 +310,6 @@ export * from './job-trigger-input';
export * from './join-config'; export * from './join-config';
export * from './join-config-table-column'; export * from './join-config-table-column';
export * from './key-value-pair-string-string'; export * from './key-value-pair-string-string';
export * from './llmmodel-input';
export * from './layout-kind'; export * from './layout-kind';
export * from './list-schedule-input'; export * from './list-schedule-input';
export * from './log-input'; export * from './log-input';

View File

@ -1,38 +0,0 @@
/* 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.
*/
/**
* LLM模型输入
*
* @export
* @interface LLMModelInput
*/
export interface LLMModelInput {
/**
*
*
* @type {string}
* @memberof LLMModelInput
*/
productName?: string | null;
/**
* ID
*
* @type {string}
* @memberof LLMModelInput
*/
modelId?: string | null;
}

View File

@ -110,6 +110,14 @@ export interface PagePosOutput {
*/ */
code?: string | null; code?: string | null;
/**
*
*
* @type {string}
* @memberof PagePosOutput
*/
type?: string | null;
/** /**
* *
* *

View File

@ -110,6 +110,14 @@ export interface PosOutput {
*/ */
code?: string | null; code?: string | null;
/**
*
*
* @type {string}
* @memberof PosOutput
*/
type?: string | null;
/** /**
* *
* *

View File

@ -102,6 +102,14 @@ export interface UpdatePosInput {
*/ */
code?: string | null; code?: string | null;
/**
*
*
* @type {string}
* @memberof UpdatePosInput
*/
type?: string | null;
/** /**
* *
* *

View File

@ -19,6 +19,11 @@
<el-input v-model="state.ruleForm.code" :placeholder="$t('message.list.positionCode')" clearable /> <el-input v-model="state.ruleForm.code" :placeholder="$t('message.list.positionCode')" clearable />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
<el-form-item :label="$t('message.list.positionType')">
<el-input v-model="state.ruleForm.type" :placeholder="$t('message.list.positionType')" clearable />
</el-form-item>
</el-col>
<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
<el-form-item :label="$t('message.list.orderNo')"> <el-form-item :label="$t('message.list.orderNo')">
<el-input-number v-model="state.ruleForm.orderNo" :placeholder="$t('message.list.orderNo')" class="w100" /> <el-input-number v-model="state.ruleForm.orderNo" :placeholder="$t('message.list.orderNo')" class="w100" />

View File

@ -152,6 +152,7 @@ const options = useVxeTable<PagePosOutput>(
{ field: 'seq', type: 'seq', title: i18n.t('message.list.seq'), width: 60, fixed: 'left' }, { field: 'seq', type: 'seq', title: i18n.t('message.list.seq'), width: 60, fixed: 'left' },
{ field: 'name', title: i18n.t('message.list.jobTitle'), minWidth: 200, showOverflow: 'tooltip' }, { field: 'name', title: i18n.t('message.list.jobTitle'), minWidth: 200, showOverflow: 'tooltip' },
{ field: 'code', title: i18n.t('message.list.positionCode'), minWidth: 200, showOverflow: 'tooltip' }, { field: 'code', title: i18n.t('message.list.positionCode'), minWidth: 200, showOverflow: 'tooltip' },
{ field: 'type', title: i18n.t('message.list.positionType'), minWidth: 200, showOverflow: 'tooltip' },
{ field: 'userCount', title: i18n.t('message.list.staffCount'), showOverflow: 'tooltip', slots: { default: 'row_userCount' } }, { field: 'userCount', title: i18n.t('message.list.staffCount'), showOverflow: 'tooltip', slots: { default: 'row_userCount' } },
{ field: 'userList', title: i18n.t('message.list.staffDetails'), showOverflow: 'tooltip', slots: { default: 'row_userList' } }, { field: 'userList', title: i18n.t('message.list.staffDetails'), showOverflow: 'tooltip', slots: { default: 'row_userList' } },
{ field: 'orderNo', title: i18n.t('message.list.orderNo'), width: 80, showOverflow: 'tooltip' }, { field: 'orderNo', title: i18n.t('message.list.orderNo'), width: 80, showOverflow: 'tooltip' },

View File

@ -71,7 +71,7 @@
<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
<el-form-item :label="$t('message.list.jobTitle')"> <el-form-item :label="$t('message.list.jobTitle')">
<el-select v-model="state.ruleForm.posId" :placeholder="$t('message.list.jobTitle')" class="w100"> <el-select v-model="state.ruleForm.posId" :placeholder="$t('message.list.jobTitle')" class="w100">
<el-option v-for="d in state.posData" :key="d.id" :label="d.name" :value="d.id" /> <el-option v-for="d in state.posData" :key="d.id" :label="d.name + '/' + d.type" :value="d.id" />
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
@ -120,7 +120,7 @@
<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
<el-form-item :label="$t('message.list.jobTitle')"> <el-form-item :label="$t('message.list.jobTitle')">
<el-select v-model="state.ruleForm.extOrgIdList[k].posId" :placeholder="$t('message.list.jobTitle')" class="w100"> <el-select v-model="state.ruleForm.extOrgIdList[k].posId" :placeholder="$t('message.list.jobTitle')" class="w100">
<el-option v-for="d in state.posData" :key="d.id" :label="d.name" :value="d.id" /> <el-option v-for="d in state.posData" :key="d.id" :label="d.name + '/' + d.type" :value="d.id" />
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>

View File

@ -55,10 +55,10 @@
<el-empty :image-size="200" /> <el-empty :image-size="200" />
</template> </template>
<template #row_avatar="{ row }"> <template #row_avatar="{ row }">
<el-avatar :src="row.avatar" size="small"> {{ row.nickName?.slice(0, 1) ?? row.realName?.slice(0, 1) }} </el-avatar> <el-avatar :src="row.avatar" size="small" :style="{ backgroundColor: row.sex == 1 ? '#409EFF' : '#F56C6C' }"> {{ row.nickName?.slice(0, 1) ?? row.realName?.slice(0, 1) }} </el-avatar>
</template> </template>
<template #row_sex="{ row }"> <template #row_sex="{ row }">
<el-tag v-if="row.sex === 1" type="success"> {{ $t('message.list.male') }} </el-tag> <el-tag v-if="row.sex === 1" type="primary"> {{ $t('message.list.male') }} </el-tag>
<el-tag v-else-if="row.sex === 2" type="danger"> {{ $t('message.list.female') }} </el-tag> <el-tag v-else-if="row.sex === 2" type="danger"> {{ $t('message.list.female') }} </el-tag>
<el-tag v-else-if="row.sex === 0" type="info"> {{ $t('message.list.unknown') }} </el-tag> <el-tag v-else-if="row.sex === 0" type="info"> {{ $t('message.list.unknown') }} </el-tag>