Browse Source

通知本地化及部分功能本地化异常处理

资源管理处理没有起作用的搜索功能
pull/862/head
李宏 3 years ago
parent
commit
d70436f24d
  1. 4
      apps/vue/src/api/localization/model/resourcesModel.ts
  2. 9
      apps/vue/src/api/localization/resources.ts
  3. 3
      apps/vue/src/utils/http/axios/index.ts
  4. 7
      apps/vue/src/views/localization/resources/components/ResourceTable.vue
  5. 2
      apps/vue/src/views/messages/notifications/datas/ModalData.ts
  6. 2
      apps/vue/src/views/messages/notifications/datas/TableData.ts
  7. 2
      apps/vue/src/views/saas/tenant/components/TenantTable.vue
  8. 25
      aspnet-core/migrate-database.bat
  9. 17
      aspnet-core/migrate-db-cmd.bat
  10. 7
      aspnet-core/modules/localization/LINGYUN.Abp.AspNetCore.Mvc.Localization/LINGYUN/Abp/AspNetCore/Mvc/Localization/GetWithFilter.cs
  11. 2
      aspnet-core/modules/localization/LINGYUN.Abp.AspNetCore.Mvc.Localization/LINGYUN/Abp/AspNetCore/Mvc/Localization/IResourceAppService.cs
  12. 14
      aspnet-core/modules/localization/LINGYUN.Abp.AspNetCore.Mvc.Localization/LINGYUN/Abp/AspNetCore/Mvc/Localization/ResourceAppService.cs
  13. 4
      aspnet-core/modules/localization/LINGYUN.Abp.AspNetCore.Mvc.Localization/LINGYUN/Abp/AspNetCore/Mvc/Localization/ResourceController.cs
  14. 14
      aspnet-core/services/LY.MicroService.WebhooksManagement.HttpApi.Host/WebhooksManagementHttpApiHostModule.Configure.cs
  15. 2
      aspnet-core/start-all-service.bat
  16. 26
      starter/00.auto-config-docker.cmd
  17. 4
      starter/01.migrate-db.cmd
  18. 4
      starter/08.start-realtime-message.bat
  19. 0
      starter/10.start-ids.bat
  20. 0
      starter/11.start-ids-admin.bat
  21. 0
      starter/12.start-localization.bat
  22. 0
      starter/13.start-platform.bat
  23. 0
      starter/14.start-messages.bat
  24. 0
      starter/15.start-task-management.bat
  25. 0
      starter/16.start-webhooks-management.bat
  26. 0
      starter/17.start-workflow-management.bat
  27. 0
      starter/18.start-admin.bat
  28. 0
      starter/70.start-internal-gateway.bat
  29. 9
      starter/80.start-host.cmd
  30. 6
      starter/91.install-node-module.cmd
  31. 9
      starter/99.start-all.cmd
  32. 2
      starter/99.start-ui.cmd
  33. 8
      starter/readme.md

4
apps/vue/src/api/localization/model/resourcesModel.ts

@ -26,3 +26,7 @@ export interface ResourcePagedResult extends PagedResultDto<Resource> {}
export interface GetResourcePagedRequest extends PagedAndSortedResultRequestDto { export interface GetResourcePagedRequest extends PagedAndSortedResultRequestDto {
filter?: string; filter?: string;
} }
export interface GetWithFilter {
filter?: string;
}

9
apps/vue/src/api/localization/resources.ts

@ -1,16 +1,17 @@
import { defAbpHttp } from '/@/utils/http/abp'; import { defAbpHttp } from '/@/utils/http/abp';
import { ResourceListResult, Resource, ResourceCreate, ResourceUpdate } from './model/resourcesModel'; import { ResourceListResult, Resource, ResourceCreate, ResourceUpdate, GetWithFilter } from './model/resourcesModel';
import { format } from '/@/utils/strings';
const remoteServiceName = 'LocalizationManagement'; const remoteServiceName = 'LocalizationManagement';
const controllerName = 'Resource'; const controllerName = 'Resource';
enum Api { enum Api {
GetList = '/api/abp/localization/resources', GetList = '/api/abp/localization/resources?filter={filter}',
} }
export const getList = () => { export const getList = (input: GetWithFilter) => {
return defAbpHttp.get<ResourceListResult>({ return defAbpHttp.get<ResourceListResult>({
url: Api.GetList, url: format(Api.GetList, input),
}); });
}; };

3
apps/vue/src/utils/http/axios/index.ts

@ -136,6 +136,9 @@ const transform: AxiosTransform = {
if ((config as Recordable)?.requestOptions?.withAcceptLanguage !== false) { if ((config as Recordable)?.requestOptions?.withAcceptLanguage !== false) {
const localeStore = useLocaleStoreWithOut(); const localeStore = useLocaleStoreWithOut();
config.headers['Accept-Language'] = localeStore.getLocale; config.headers['Accept-Language'] = localeStore.getLocale;
if (config.headers['Accept-Language'] == 'zh_CN') {
config.headers['Accept-Language'] = 'zh-Hans';
}
} }
return config; return config;
}, },

7
apps/vue/src/views/localization/resources/components/ResourceTable.vue

@ -47,8 +47,13 @@
import { getList, GetAsyncByName, DeleteAsyncByName } from '/@/api/localization/resources'; import { getList, GetAsyncByName, DeleteAsyncByName } from '/@/api/localization/resources';
import { Resource } from '/@/api/localization/model/resourcesModel'; import { Resource } from '/@/api/localization/model/resourcesModel';
import { getDataColumns } from './TableData'; import { getDataColumns } from './TableData';
import { reactive } from 'vue';
import ResourceModal from './ResourceModal.vue'; import ResourceModal from './ResourceModal.vue';
const state = reactive({
filter: 'noti'
});
const { createConfirm, createMessage } = useMessage(); const { createConfirm, createMessage } = useMessage();
const { L } = useLocalization(['LocalizationManagement', 'AbpLocalization', 'AbpUi']); const { L } = useLocalization(['LocalizationManagement', 'AbpLocalization', 'AbpUi']);
const [registerModal, { openModal }] = useModal(); const [registerModal, { openModal }] = useModal();
@ -88,7 +93,7 @@
function fetchResources() { function fetchResources() {
const form = getForm(); const form = getForm();
return form.validate().then(() => { return form.validate().then(() => {
return getList().then((res) => { return getList({filter: state.filter}).then((res) => {
setTableData(res.items); setTableData(res.items);
}); });
}); });

2
apps/vue/src/views/messages/notifications/datas/ModalData.ts

@ -2,7 +2,7 @@ import { useLocalization } from '/@/hooks/abp/useLocalization';
import { FormProps } from '/@/components/Form'; import { FormProps } from '/@/components/Form';
import { NotificationReadState } from '/@/api/messages/model/notificationsModel'; import { NotificationReadState } from '/@/api/messages/model/notificationsModel';
const { L } = useLocalization(['AbpMessageService', 'AbpUi']); const { L } = useLocalization(['AbpMessageService', 'Notifications', 'AbpUi']);
export function getSearchFormSchemas(): Partial<FormProps> { export function getSearchFormSchemas(): Partial<FormProps> {
return { return {

2
apps/vue/src/views/messages/notifications/datas/TableData.ts

@ -2,7 +2,7 @@ import { useLocalization } from '/@/hooks/abp/useLocalization';
import { BasicColumn } from '/@/components/Table'; import { BasicColumn } from '/@/components/Table';
import { formatToDateTime } from '/@/utils/dateUtil'; import { formatToDateTime } from '/@/utils/dateUtil';
const { L } = useLocalization('AbpMessageService'); const { L } = useLocalization('Notifications');
export function getDataColumns(): BasicColumn[] { export function getDataColumns(): BasicColumn[] {
return [ return [

2
apps/vue/src/views/saas/tenant/components/TenantTable.vue

@ -73,7 +73,7 @@
import TenantModal from './TenantModal.vue'; import TenantModal from './TenantModal.vue';
import ConnectionTableModal from './ConnectionTableModal.vue'; import ConnectionTableModal from './ConnectionTableModal.vue';
const { L } = useLocalization(['AbpSaas', 'AbpFeatureManagement']); const { L } = useLocalization(['AbpSaas', 'AbpFeatureManagement','WeChat']);
const { hasPermission } = usePermission(); const { hasPermission } = usePermission();
const tableElRef = ref<Nullable<TableActionType>>(null); const tableElRef = ref<Nullable<TableActionType>>(null);
const [registerConnectModal, { openModal: openConnectModal }] = useModal(); const [registerConnectModal, { openModal: openConnectModal }] = useModal();

25
aspnet-core/migrate-database.bat

@ -1,19 +1,12 @@
@echo off @echo off
cls cls
set stime=8
start .\migrate-db-cmd.bat LY.MicroService.BackendAdmin.DbMigrator admin --run call .\migrate-db-cmd.bat LY.MicroService.BackendAdmin.DbMigrator admin --run
ping -n %stime% 127.1 >nul call .\migrate-db-cmd.bat LY.MicroService.AuthServer.DbMigrator auth-server --run
start .\migrate-db-cmd.bat LY.MicroService.AuthServer.DbMigrator auth-server --run call .\migrate-db-cmd.bat LY.MicroService.IdentityServer.DbMigrator identityserver4-admin --run
ping -n %stime% 127.1 >nul call .\migrate-db-cmd.bat LY.MicroService.LocalizationManagement.DbMigrator localization --run
start .\migrate-db-cmd.bat LY.MicroService.IdentityServer.DbMigrator identityserver4-admin --run call .\migrate-db-cmd.bat LY.MicroService.Platform.DbMigrator platform --run
ping -n %stime% 127.1 >nul call .\migrate-db-cmd.bat LY.MicroService.RealtimeMessage.DbMigrator messages --run
start .\migrate-db-cmd.bat LY.MicroService.LocalizationManagement.DbMigrator localization --run call .\migrate-db-cmd.bat LY.MicroService.TaskManagement.DbMigrator task-management --run
ping -n %stime% 127.1 >nul call .\migrate-db-cmd.bat LY.MicroService.WebhooksManagement.DbMigrator webhooks-management --run
start .\migrate-db-cmd.bat LY.MicroService.Platform.DbMigrator platform --run pause
ping -n %stime% 127.1 >nul
start .\migrate-db-cmd.bat LY.MicroService.RealtimeMessage.DbMigrator messages --run
ping -n %stime% 127.1 >nul
start .\migrate-db-cmd.bat LY.MicroService.TaskManagement.DbMigrator task-management --run
ping -n %stime% 127.1 >nul
start .\migrate-db-cmd.bat LY.MicroService.WebhooksManagement.DbMigrator webhooks-management --run

17
aspnet-core/migrate-db-cmd.bat

@ -1,10 +1,9 @@
@echo off @echo off
cls
chcp 65001 chcp 65001
title %2 title %2
@echo %2 migration running @echo %2 migrating
cd .\migrations\%1 cd .\migrations\%1
@ -15,14 +14,18 @@ if '%3' equ '' goto run
exit exit
:run :run
dotnet run dotnet run
pause goto end
exit
:restore :restore
dotnet restore dotnet restore
exit goto end
:efu :efu
dotnet ef databse update dotnet ef databse update
exit goto end
:end
cd ..\..\
@echo %2 migrated
@echo --------

7
aspnet-core/modules/localization/LINGYUN.Abp.AspNetCore.Mvc.Localization/LINGYUN/Abp/AspNetCore/Mvc/Localization/GetWithFilter.cs

@ -0,0 +1,7 @@
namespace LINGYUN.Abp.AspNetCore.Mvc.Localization
{
public class GetWithFilter
{
public string Filter { get; set; }
}
}

2
aspnet-core/modules/localization/LINGYUN.Abp.AspNetCore.Mvc.Localization/LINGYUN/Abp/AspNetCore/Mvc/Localization/IResourceAppService.cs

@ -6,6 +6,6 @@ namespace LINGYUN.Abp.AspNetCore.Mvc.Localization
{ {
public interface IResourceAppService : IApplicationService public interface IResourceAppService : IApplicationService
{ {
Task<ListResultDto<ResourceDto>> GetListAsync(); Task<ListResultDto<ResourceDto>> GetListAsync(GetWithFilter filter);
} }
} }

14
aspnet-core/modules/localization/LINGYUN.Abp.AspNetCore.Mvc.Localization/LINGYUN/Abp/AspNetCore/Mvc/Localization/ResourceAppService.cs

@ -1,6 +1,12 @@
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
using Microsoft.Extensions.Options; using Microsoft.Extensions.Options;
using System.Linq; using Microsoft.Extensions.Localization;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Dynamic.Core;
using System.Threading.Tasks;
using Volo.Abp;
using System.Threading.Tasks; using System.Threading.Tasks;
using Volo.Abp.Application.Dtos; using Volo.Abp.Application.Dtos;
using Volo.Abp.Application.Services; using Volo.Abp.Application.Services;
@ -23,12 +29,14 @@ namespace LINGYUN.Abp.AspNetCore.Mvc.Localization
_externalLocalizationStore = externalLocalizationStore; _externalLocalizationStore = externalLocalizationStore;
} }
public virtual async Task<ListResultDto<ResourceDto>> GetListAsync() public virtual async Task<ListResultDto<ResourceDto>> GetListAsync(GetWithFilter input)
{ {
var externalResources = await _externalLocalizationStore.GetResourcesAsync(); var externalResources = (await _externalLocalizationStore.GetResourcesAsync())
.WhereIf(!input.Filter.IsNullOrWhiteSpace(), x => x.ResourceName.Contains(input.Filter));
var resources = _localizationOptions var resources = _localizationOptions
.Resources .Resources
.WhereIf(!input.Filter.IsNullOrWhiteSpace(), x => x.Value.ResourceName.Contains(input.Filter))
.Select(x => new ResourceDto .Select(x => new ResourceDto
{ {
Name = x.Value.ResourceName, Name = x.Value.ResourceName,

4
aspnet-core/modules/localization/LINGYUN.Abp.AspNetCore.Mvc.Localization/LINGYUN/Abp/AspNetCore/Mvc/Localization/ResourceController.cs

@ -19,9 +19,9 @@ namespace LINGYUN.Abp.AspNetCore.Mvc.Localization
} }
[HttpGet] [HttpGet]
public virtual Task<ListResultDto<ResourceDto>> GetListAsync() public virtual Task<ListResultDto<ResourceDto>> GetListAsync(GetWithFilter filter)
{ {
return _service.GetListAsync(); return _service.GetListAsync(filter);
} }
} }
} }

14
aspnet-core/services/LY.MicroService.WebhooksManagement.HttpApi.Host/WebhooksManagementHttpApiHostModule.Configure.cs

@ -2,6 +2,7 @@
using LINGYUN.Abp.BackgroundTasks; using LINGYUN.Abp.BackgroundTasks;
using LINGYUN.Abp.ExceptionHandling; using LINGYUN.Abp.ExceptionHandling;
using LINGYUN.Abp.ExceptionHandling.Emailing; using LINGYUN.Abp.ExceptionHandling.Emailing;
using LINGYUN.Abp.Localization.CultureMap;
using LINGYUN.Abp.Serilog.Enrichers.Application; using LINGYUN.Abp.Serilog.Enrichers.Application;
using LINGYUN.Abp.Serilog.Enrichers.UniqueId; using LINGYUN.Abp.Serilog.Enrichers.UniqueId;
using LINGYUN.Abp.Webhooks; using LINGYUN.Abp.Webhooks;
@ -358,6 +359,19 @@ public partial class WebhooksManagementHttpApiHostModule
options.UsePersistence<WebhooksManagementResource>(); options.UsePersistence<WebhooksManagementResource>();
}); });
Configure<AbpLocalizationCultureMapOptions>(options =>
{
var zhHansCultureMapInfo = new CultureMapInfo
{
TargetCulture = "zh-Hans",
SourceCultures = new string[] { "zh", "zh_CN", "zh-CN" }
};
options.CulturesMaps.Add(zhHansCultureMapInfo);
options.UiCulturesMaps.Add(zhHansCultureMapInfo);
});
} }
private void ConfigureSecurity(IServiceCollection services, IConfiguration configuration, bool isDevelopment = false) private void ConfigureSecurity(IServiceCollection services, IConfiguration configuration, bool isDevelopment = false)

2
aspnet-core/start-all-service.bat

@ -16,8 +16,6 @@ start .\start-http-api-host.bat LY.MicroService.TaskManagement.HttpApi.Host task
ping -n %stime% 127.1 >nul ping -n %stime% 127.1 >nul
start .\start-http-api-host.bat LY.MicroService.WebhooksManagement.HttpApi.Host webhooks-management--run start .\start-http-api-host.bat LY.MicroService.WebhooksManagement.HttpApi.Host webhooks-management--run
ping -n %stime% 127.1 >nul ping -n %stime% 127.1 >nul
start .\start-http-api-host.bat LY.MicroService.RealtimeMessage.HttpApi.Host realtime-message --run
ping -n %stime% 127.1 >nul
start .\start-http-api-host.bat LY.MicroService.WorkflowManagement.HttpApi.Host workflow-management --run start .\start-http-api-host.bat LY.MicroService.WorkflowManagement.HttpApi.Host workflow-management --run
ping -n %stime% 127.1 >nul ping -n %stime% 127.1 >nul
start .\start-http-api-host.bat LY.MicroService.BackendAdmin.HttpApi.Host admin --run start .\start-http-api-host.bat LY.MicroService.BackendAdmin.HttpApi.Host admin --run

26
starter/00.auto-config-docker.cmd

@ -0,0 +1,26 @@
docker network create --subnet=172.18.0.0/16 nt
docker pull mysql
docker volume rm mysql-data
docker volume rm mysql-log
docker volume create mysql-data
docker volume create mysql-log
docker run --ip 172.18.0.10 -d --name mysql --net nt -v mysql-log:/var/log/mysql -v mysql-data:/var/lib/mysql -p 3306:3306 -p 33060:33060 -e MYSQL_ROOT_PASSWORD=123456 -d mysql --init-connect="SET collation_connection=utf8mb4_0900_ai_ci" --init-connect="SET NAMES utf8mb4" --skip-character-set-client-handshake
docker pull rabbitmq:management
docker volume rm rabbitmq-home
docker volume create rabbitmq-home
docker run --ip 172.18.0.40 -d -id --name=rabbitmq --net nt -v rabbitmq-home:/var/lib/rabbitmq -p 15672:15672 -p 5672:5672 -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin rabbitmq:management
docker pull redis
docker volume rm redis-home
docker volume create redis-home
docker run --ip 172.18.0.50 -d --net nt -p 6379:6379 --name redis -v redis-home:/data redis
docker pull docker.elastic.co/elasticsearch/elasticsearch:8.9.0
docker volume rm elasticsearch-home
docker volume create elasticsearch-home
docker run --ip 172.18.0.60 -d --name es --net nt -v elasticsearch-home:/usr/share/elasticsearch/data -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms1G -Xmx1G" -e xpack.security.enabled=false -p 9200:9200 -p 9300:9300 -it docker.elastic.co/elasticsearch/elasticsearch:8.9.0
docker pull docker.elastic.co/kibana/kibana:8.9.0
docker run --ip 172.18.0.70 -d --name kib --net nt -p 5601:5601 docker.elastic.co/kibana/kibana:8.9.0

4
starter/01.migrate-db.cmd

@ -0,0 +1,4 @@
@echo off
cd ..\aspnet-core
migrate-database.bat

4
starter/08.start-realtime-message.bat

@ -1,4 +0,0 @@
@echo off
cls
cd ..\aspnet-core\
.\start-http-api-host.bat LY.MicroService.RealtimeMessage.HttpApi.Host realtime-message --run

0
starter/01.start-ids.bat → starter/10.start-ids.bat

0
starter/02.start-ids-admin.bat → starter/11.start-ids-admin.bat

0
starter/03.start-localization.bat → starter/12.start-localization.bat

0
starter/04.start-platform.bat → starter/13.start-platform.bat

0
starter/05.start-messages.bat → starter/14.start-messages.bat

0
starter/06.start-task-management.bat → starter/15.start-task-management.bat

0
starter/07.start-webhooks-management.bat → starter/16.start-webhooks-management.bat

0
starter/09.start-workflow-management.bat → starter/17.start-workflow-management.bat

0
starter/10.start-admin.bat → starter/18.start-admin.bat

0
starter/80.start-internal-gateway.bat → starter/70.start-internal-gateway.bat

9
starter/80.start-host.cmd

@ -0,0 +1,9 @@
@echo off
cls
title start-all
set stime=12
for /f "delims=" %%i in ('dir *.bat /b') do (
echo %%i
start %%i
ping -n %stime% 127.1 >nul
)

6
starter/91.install-node-module.cmd

@ -0,0 +1,6 @@
@echo off
cls
cd ../apps/vue/
title install-module
pnpm install
pause

9
starter/99.start-all.cmd

@ -1,9 +0,0 @@
@echo off
cls
title start-all
set stime=8
for /f "delims=" %%i in ('dir *.bat *.cmd /b /s^|findstr /v /i "99.start-all.cmd"') do (
echo %%i
start %%i
ping -n %stime% 127.1 >nul
)

2
starter/90.start-ui.bat → starter/99.start-ui.cmd

@ -2,4 +2,4 @@
cls cls
cd ../apps/vue/ cd ../apps/vue/
title abp-next-admin-ui title abp-next-admin-ui
npm run dev pnpm run dev

8
starter/readme.md

@ -0,0 +1,8 @@
快速启动后端项目:
1.使用 00.auto-config-docker.cmd 自动配置docker环境
2.使用 01.migrate-db.cmd 迁移数据库
3.使用 80.start-host.cmd 启动后端项目
注:请按自己电脑运行速度调整 80.start-host.cmd 文件中的 stime 参数。
快速启动前端项目:
1.使用 91.install-node-module.cmd 安装npm依赖
2.使用 99.start-all.cmd 启动项目
Loading…
Cancel
Save