From 6c94077b9313c439d698461e39a0db24b81f1338 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=87=91=E8=B1=AA=20=E5=BB=96?= Date: Tue, 2 Jul 2024 00:09:17 +0800 Subject: [PATCH 1/2] Changes --- Web/src/api-services/apis/sys-unit-api.ts | 80 ++++++++++++ .../api-services/apis/sys-unit-group-api.ts | 74 +++++++++++ .../models/check-sys-unit-group-input.ts | 29 +++++ Web/src/views/basics-date/unit/index.vue | 119 ++++++++++++++---- 4 files changed, 276 insertions(+), 26 deletions(-) create mode 100644 Web/src/api-services/models/check-sys-unit-group-input.ts diff --git a/Web/src/api-services/apis/sys-unit-api.ts b/Web/src/api-services/apis/sys-unit-api.ts index 5eddc02..bbb7e7b 100644 --- a/Web/src/api-services/apis/sys-unit-api.ts +++ b/Web/src/api-services/apis/sys-unit-api.ts @@ -362,6 +362,54 @@ export const SysUnitApiAxiosParamCreator = function (configuration?: Configurati 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 {UpdateSysUnitInput} [body] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + apiSysUnitCheckPost: async (body?: UpdateSysUnitInput, options: AxiosRequestConfig = {}): Promise => { + const localVarPath = `/api/sysUnit/checkBaseUnit`; + // 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, @@ -473,6 +521,19 @@ export const SysUnitApiFp = function(configuration?: Configuration) { return axios.request(axiosRequestArgs); }; }, + /** + * + * @summary 校验基本单位是否唯一 + * @param body + * @param options + */ + async apiSysUnitCheckPost(body?: UpdateSysUnitInput, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise>> { + const localVarAxiosArgs = await SysUnitApiAxiosParamCreator(configuration).apiSysUnitCheckPost(body, options); + return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => { + const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url}; + return axios.request(axiosRequestArgs); + }; + }, } }; @@ -551,6 +612,15 @@ export const SysUnitApiFactory = function (configuration?: Configuration, basePa async apiSysUnitUpdatePost(body?: UpdateSysUnitInput, options?: AxiosRequestConfig): Promise> { return SysUnitApiFp(configuration).apiSysUnitUpdatePost(body, options).then((request) => request(axios, basePath)); }, + /** + * + * @summary 校验基本单位是否唯一 + * @param body + * @param options + */ + async apiSysUnitCheckPost(body?: UpdateSysUnitInput, options?: AxiosRequestConfig): Promise> { + return SysUnitApiFp(configuration).apiSysUnitCheckPost(body, options).then((request) => request(axios, basePath)); + }, }; }; @@ -637,4 +707,14 @@ export class SysUnitApi extends BaseAPI { public async apiSysUnitUpdatePost(body?: UpdateSysUnitInput, options?: AxiosRequestConfig) : Promise> { return SysUnitApiFp(this.configuration).apiSysUnitUpdatePost(body, options).then((request) => request(this.axios, this.basePath)); } + + /** + * + * @summary 校验基本单位是否唯一 + * @param body + * @param options + */ + async apiSysUnitCheckPost(body?: UpdateSysUnitInput, options?: AxiosRequestConfig): Promise> { + return SysUnitApiFp(this.configuration).apiSysUnitCheckPost(body, options).then((request) => request(this.axios, this.basePath)); + } } diff --git a/Web/src/api-services/apis/sys-unit-group-api.ts b/Web/src/api-services/apis/sys-unit-group-api.ts index 1c6fff4..4b73b91 100644 --- a/Web/src/api-services/apis/sys-unit-group-api.ts +++ b/Web/src/api-services/apis/sys-unit-group-api.ts @@ -25,6 +25,7 @@ import { AdminResultSysUnitGroup } from '../models'; import { DeleteSysUnitGroupInput } from '../models'; import { SysUnitGroupInput } from '../models'; import { UpdateSysUnitGroupInput } from '../models'; +import {CheckSysUnitGroupInput} from "/@/api-services/models/check-sys-unit-group-input"; /** * SysUnitGroupApi - axios parameter creator * @export @@ -313,6 +314,54 @@ export const SysUnitGroupApiAxiosParamCreator = function (configuration?: Config 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 {CheckSysUnitGroupInput} [body] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + apiSysUnitGroupCheckPost: async (body?: CheckSysUnitGroupInput, options: AxiosRequestConfig = {}): Promise => { + const localVarPath = `/api/sysUnitGroup/CheckUnitList`; + // 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, @@ -410,6 +459,20 @@ export const SysUnitGroupApiFp = function(configuration?: Configuration) { return axios.request(axiosRequestArgs); }; }, + /** + * + * @summary 检查单位组 + * @param {CheckSysUnitGroupInput} [body] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async apiSysUnitGroupCheckPost(body?: CheckSysUnitGroupInput, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise>> { + const localVarAxiosArgs = await SysUnitGroupApiAxiosParamCreator(configuration).apiSysUnitGroupCheckPost(body, options); + return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => { + const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url}; + return axios.request(axiosRequestArgs); + }; + }, } }; @@ -553,4 +616,15 @@ export class SysUnitGroupApi extends BaseAPI { public async apiSysUnitGroupUpdatePost(body?: UpdateSysUnitGroupInput, options?: AxiosRequestConfig) : Promise> { return SysUnitGroupApiFp(this.configuration).apiSysUnitGroupUpdatePost(body, options).then((request) => request(this.axios, this.basePath)); } + /** + * + * @summary 检查单位是否存在数据 + * @param {UpdateSysUnitGroupInput} [body] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof SysUnitGroupApi + */ + public async apiSysUnitGroupCheckPost(body?: CheckSysUnitGroupInput, options?: AxiosRequestConfig) : Promise> { + return SysUnitGroupApiFp(this.configuration).apiSysUnitGroupCheckPost(body, options).then((request) => request(this.axios, this.basePath)); + } } diff --git a/Web/src/api-services/models/check-sys-unit-group-input.ts b/Web/src/api-services/models/check-sys-unit-group-input.ts new file mode 100644 index 0000000..361fc5c --- /dev/null +++ b/Web/src/api-services/models/check-sys-unit-group-input.ts @@ -0,0 +1,29 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * 所有接口 + * 让 .NET 开发更简单、更通用、更流行。前后端分离架构(.NET6/Vue3),开箱即用紧随前沿技术。 + * + * 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 CheckSysUnitGroupInput + */ +export interface CheckSysUnitGroupInput { + /** + * 主键Id + * + * @type {number} + * @memberof UpdateSysUnitGroupInput + */ + id: number; +} diff --git a/Web/src/views/basics-date/unit/index.vue b/Web/src/views/basics-date/unit/index.vue index 9d4a85d..2768d2d 100644 --- a/Web/src/views/basics-date/unit/index.vue +++ b/Web/src/views/basics-date/unit/index.vue @@ -62,7 +62,47 @@
- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -216,10 +256,12 @@ import { SysUnitApi, SysUnitGroupApi } from '/@/api-services/api'; import { AddSysUnitInput, SqlSugarPagedListSysUnitOutput, SysUnitGroupOutput, SysUnitInput} from '/@/api-services/models'; import type { FormRules } from "element-plus"; import { ElMessageBox, ElMessage } from 'element-plus'; +import {auth} from "/@/utils/authFunction"; let data = reactive({ unit: [] as SqlSugarPagedListSysUnitOutput[],//单位数据 unitGroup: [] as SysUnitGroupOutput[],//单位组数据 + selectUnitGroupId:0, }); const ruleFormRef = ref(); @@ -268,6 +310,7 @@ const unitGroup = async () => { //单选 const radioChangeEvent = ({ row }) => { + data.selectUnitGroupId = row.id; unitPage({groupUnitId:row.id}) } const formInline = reactive({} as SysUnitInput) @@ -289,20 +332,35 @@ const addUnit= ()=>{ //提交 const unitSubmit = async () => { + //校验基本单位是否唯一 + let checkRes = await getAPI(SysUnitApi).apiSysUnitCheckPost(unitFrom.value); + if(checkRes.data.code === 200){ + const item = checkRes.data.result; if(mTitle.value=='新增'){ - let res = await getAPI(SysUnitApi).apiSysUnitAddPost(unitFrom.value); - if (res.data.code===200) { - dialogTableVisible.value = false; - unitPage(); - } + if(unitFrom.value.isBaseUnit && item!=null){ + ElMessage({ message: '基本单位必须唯一', type: 'error', }); + unitFrom.value.isBaseUnit = false; + return; + } + let res = await getAPI(SysUnitApi).apiSysUnitAddPost(unitFrom.value); + if (res.data.code===200) { + dialogTableVisible.value = false; + unitPage({groupUnitId:data.selectUnitGroupId}); + } }else{ - let res = await getAPI(SysUnitApi).apiSysUnitUpdatePost(unitFrom.value); - if (res.data.code===200) { - dialogTableVisible.value = false; - unitPage(); - } + if(unitFrom.value.isBaseUnit && item!=null && item.id!=unitFrom.value.id) + { + ElMessage({ message: '基本单位必须唯一', type: 'error', }); + unitFrom.value.isBaseUnit = false; + return; + } + let res = await getAPI(SysUnitApi).apiSysUnitUpdatePost(unitFrom.value); + if (res.data.code===200) { + dialogTableVisible.value = false; + unitPage({groupUnitId:data.selectUnitGroupId}); + } } - + } } const editUnit=async(row:any)=>{ @@ -321,7 +379,7 @@ const deleteUnit=async(row:any)=>{ let res = await getAPI(SysUnitApi).apiSysUnitDeletePost(row); if (res.data.code == 200) { ElMessage({ message: '成功', type: 'success', }) - unitPage() + unitPage(); //state.tableData.handleList(); } else ElMessage.error(res.data.message!) @@ -342,22 +400,31 @@ const editUnitGroup=async(row:any)=>{ } const deleteUnitGroup=async(row:any)=>{ - ElMessageBox.confirm(`确定删除?`, '提示', { - confirmButtonText: '确定', - cancelButtonText: '取消', - type: 'warning', - }) - .then(async () => { - console.log(row) - let res = await getAPI(SysUnitGroupApi).apiSysUnitGroupDeletePost(row); + let checkRes = await getAPI(SysUnitGroupApi).apiSysUnitGroupCheckPost({Id:row.id}); + if(checkRes.data.code == 200){ + const result = checkRes.data.result; + if(result){ + return ElMessage.error("存在单位数据,不允许删除") + } + ElMessageBox.confirm(`确定删除?`, '提示', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', + }) + .then(async () => { + console.log(row) + let res = await getAPI(SysUnitGroupApi).apiSysUnitGroupDeletePost(row); if (res.data.code == 200) { - ElMessage({ message: '成功', type: 'success', }) - unitPage() - //state.tableData.handleList(); + ElMessage({ message: '成功', type: 'success', }) + unitGroup() + unitPage() + //state.tableData.handleList(); } else ElMessage.error(res.data.message!) - }) - .catch(() => {}); + }) + .catch(() => {}); + } + } const pageVO1 = reactive({ From 6cf4381c534d05496d9842b06e0460af333fc0ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=87=91=E8=B1=AA=20=E5=BB=96?= Date: Tue, 2 Jul 2024 00:11:33 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=8D=95=E4=BD=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/SysUnit/Dto/SysUnitGroupInput.cs | 13 +++++++++++ .../Service/SysUnit/SysUnitGroupService.cs | 23 +++++++++++++++---- .../Service/SysUnit/SysUnitService.cs | 17 ++++++++++++++ .../Admin.NET.Core/Admin.NET.Core.csproj | 1 - 4 files changed, 48 insertions(+), 6 deletions(-) diff --git a/Admin.NET/Admin.NET.Application/Service/SysUnit/Dto/SysUnitGroupInput.cs b/Admin.NET/Admin.NET.Application/Service/SysUnit/Dto/SysUnitGroupInput.cs index e8793b9..1bd1e65 100644 --- a/Admin.NET/Admin.NET.Application/Service/SysUnit/Dto/SysUnitGroupInput.cs +++ b/Admin.NET/Admin.NET.Application/Service/SysUnit/Dto/SysUnitGroupInput.cs @@ -143,3 +143,16 @@ public class QueryByIdSysUnitGroupInput : DeleteSysUnitGroupInput { } + +/// +/// 单位组检查输入参数 +/// +public class CheckSysUnitGroupInput : SysUnitGroupBaseInput +{ + /// + /// 主键Id + /// + [Required(ErrorMessage = "主键Id不能为空")] + public long Id { get; set; } + +} diff --git a/Admin.NET/Admin.NET.Application/Service/SysUnit/SysUnitGroupService.cs b/Admin.NET/Admin.NET.Application/Service/SysUnit/SysUnitGroupService.cs index e446c99..5af701b 100644 --- a/Admin.NET/Admin.NET.Application/Service/SysUnit/SysUnitGroupService.cs +++ b/Admin.NET/Admin.NET.Application/Service/SysUnit/SysUnitGroupService.cs @@ -11,9 +11,14 @@ namespace Admin.NET.Application; public class SysUnitGroupService : IDynamicApiController, ITransient { private readonly SqlSugarRepository _rep; - public SysUnitGroupService(SqlSugarRepository rep) + + private readonly SysUnitService _sysUnitService; + + public SysUnitGroupService(SqlSugarRepository rep, + SysUnitService sysUnitService ) { _rep = rep; + _sysUnitService = sysUnitService; } /// @@ -101,9 +106,17 @@ public class SysUnitGroupService : IDynamicApiController, ITransient return await _rep.AsQueryable().Where(a => !a.IsDelete).Select().ToListAsync(); } - - - - + /// + /// 检查单位是否存在数据 + /// + /// + /// + [HttpPost] + [ApiDescriptionSettings(Name = "CheckUnitList")] + public async Task CheckUnitList(CheckSysUnitGroupInput input) + { + var sysUnits = await _sysUnitService.ListByGroupId(input.Id); + return sysUnits.Any(); + } } diff --git a/Admin.NET/Admin.NET.Application/Service/SysUnit/SysUnitService.cs b/Admin.NET/Admin.NET.Application/Service/SysUnit/SysUnitService.cs index 1bc22d9..ec10e43 100644 --- a/Admin.NET/Admin.NET.Application/Service/SysUnit/SysUnitService.cs +++ b/Admin.NET/Admin.NET.Application/Service/SysUnit/SysUnitService.cs @@ -2,6 +2,7 @@ using Admin.NET.Application.Const; using Admin.NET.Application.Entity; using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc.ViewFeatures; namespace Admin.NET.Application; /// /// 单位服务 @@ -171,5 +172,21 @@ public class SysUnitService : IDynamicApiController, ITransient return result; } + /// + /// 校验基本单位是否唯一 + /// + /// + /// + [HttpPost] + [ApiDescriptionSettings(Name = "checkBaseUnit")] + public async Task CheckBaseUnit(AddSysUnitInput input) + { + var result = await _rep.AsQueryable() + .Where(a => !a.IsDelete && a.IsBaseUnit==true) + .WhereIF(input.GroupUnitId > 0, u => u.GroupUnitId == input.GroupUnitId) + .FirstAsync(); + + return result; + } } diff --git a/Admin.NET/Admin.NET.Core/Admin.NET.Core.csproj b/Admin.NET/Admin.NET.Core/Admin.NET.Core.csproj index a564476..a6dd4b9 100644 --- a/Admin.NET/Admin.NET.Core/Admin.NET.Core.csproj +++ b/Admin.NET/Admin.NET.Core/Admin.NET.Core.csproj @@ -13,7 +13,6 @@ -