Compare commits

...

19 Commits

@ -0,0 +1,34 @@
{
// Use IntelliSense to find out which attributes exist for C# debugging
// Use hover for the description of the existing attributes
// For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md
"version": "0.2.0",
"configurations": [
{
"name": ".NET Core Launch (web)",
"type": "coreclr",
"request": "launch",
"preLaunchTask": "build",
// If you have changed target frameworks, make sure to update the program path.
"program": "${workspaceFolder}/src/KopSoftWms/bin/Debug/netcoreapp3.0/KopSoftWms.dll",
"args": [],
"cwd": "${workspaceFolder}/src/KopSoftWms",
"stopAtEntry": false,
"launchBrowser": {
"enabled": true
},
"env": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"sourceFileMap": {
"/Views": "${workspaceFolder}/Views"
}
},
{
"name": ".NET Core Attach",
"type": "coreclr",
"request": "attach",
"processId": "${command:pickProcess}"
}
]
}

36
.vscode/tasks.json vendored

@ -0,0 +1,36 @@
{
"version": "2.0.0",
"tasks": [
{
"label": "build",
"command": "dotnet",
"type": "process",
"args": [
"build",
"${workspaceFolder}/src/KopSoftWms/KopSoftWms.csproj"
],
"problemMatcher": "$tsc"
},
{
"label": "publish",
"command": "dotnet",
"type": "process",
"args": [
"publish",
"${workspaceFolder}/src/KopSoftWms/KopSoftWms.csproj"
],
"problemMatcher": "$tsc"
},
{
"label": "watch",
"command": "dotnet",
"type": "process",
"args": [
"watch",
"run",
"${workspaceFolder}/src/KopSoftWms/KopSoftWms.csproj"
],
"problemMatcher": "$tsc"
}
]
}

@ -1,16 +1,23 @@
[![Build Status](https://lysilver.visualstudio.com/kopsoftwms/_apis/build/status/lysilver.KopSoftWms?branchName=master)](https://lysilver.visualstudio.com/kopsoftwms/_build/latest?definitionId=3&branchName=master)
****
* KopSoftPrint标签打印软件 http://mes.kopsoft.cn/KopSoftPrint/
* KopSoft标签打印软件 http://tuoshui.net.cn/Print/
* GitHub https://github.com/williamyang1984/KopSoftPrint
* 码云 https://gitee.com/williamyang1984/KopSoftPrint
****
* KopSoftWms仓库管理系统 http://wms.kopsoft.cn/
*
* KopSoft仓库管理系统 http://wms.kopsoft.cn/
* GitHub https://github.com/lysilver/KopSoftWms
* 码云 https://gitee.com/yulou/KopSoftWms
*
* 技术QQ群 421635
* 技术论坛 http://tangqiao.net.cn/forum.php?mod=forumdisplay&fid=47
****
* KopSoftMes制造执行系统 http://mes.kopsoft.cn/
****
| 版本 | 分支 |
| ---- | ---- |
| netcore2.2 | master |
| netcore3.0 | netcore3.0 |
| netcore3.1 | netcore3.1 |
## 功能模块
- [x] 用户管理
@ -35,15 +42,15 @@
## 技术
`core 2.2`
`net core`
* 基于.Net Core 2.2开发;
* 基于.Net Core 2.2~3.1开发;
* 支持sqlserver、mysql数据库其他数据库未测试脚本在docs/sql
* 前端采用 vue、polyfill、qs、 axios、 bootstrap、adminlte、layer、bootstrap-datetimepicker、bootstrap-table、bootstrap-select等
* 后端采用 asp.net mvc core 2.2、sqlsugar、fluentValidation、nlog、Jil、DI、Ganss、雪花算法、Xunit、npoi因在linux上报错后期替换掉bug修复https://www.cnblogs.com/Robbery/p/10115234.html
* 后端采用 asp.net mvc core、sqlsugar、fluentValidation、nlog、Jil、DI、Ganss、雪花算法、Xunit、npoi因在linux上报错后期替换掉bug修复https://www.cnblogs.com/Robbery/p/10115234.html

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -1,8 +1,8 @@
FROM microsoft/dotnet:2.2-aspnetcore-runtime AS base
FROM mcr.microsoft.com/dotnet/core/aspnet:3.0 AS base
WORKDIR /app
EXPOSE 5000
FROM microsoft/dotnet:2.2-sdk AS build
FROM mcr.microsoft.com/dotnet/core/sdk:3.0 AS build
WORKDIR /src
COPY ["KopSoftWms/KopSoftWms.csproj", "KopSoftWms/"]
COPY ["Orm/Orm.csproj", "Orm/"]

@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<TargetFramework>netstandard2.1</TargetFramework>
<RootNamespace>YL.Core.Dto</RootNamespace>
<LangVersion>7.1</LangVersion>
</PropertyGroup>

@ -7,7 +7,7 @@ namespace YL.Core.Entity
public class BaseEntity
{
/// <summary>
/// Desc:1未删除 0删除
/// Desc:1未删除 0 Delete
/// Default:
/// Nullable:True
/// </summary>

@ -1,16 +1,31 @@
<Project Sdk="Microsoft.NET.Sdk">
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<TargetFramework>netstandard2.1</TargetFramework>
<RootNamespace>YL.Core.Entity</RootNamespace>
<LangVersion>7.1</LangVersion>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="FluentValidation" Version="8.4.0" />
<PackageReference Include="FluentValidation.AspNetCore" Version="8.4.0" />
<PackageReference Include="MediatR" Version="7.0.0" />
<PackageReference Include="sqlSugarCore" Version="4.9.9.10" />
<PackageReference Include="FluentValidation" Version="8.6.2" />
<PackageReference Include="FluentValidation.AspNetCore" Version="8.6.2" />
<PackageReference Include="MediatR" Version="8.0.1" />
<PackageReference Include="sqlSugarCore" Version="5.0.0.13" />
</ItemGroup>
<ItemGroup>
<Compile Update="Properties\Resources.Designer.cs">
<DesignTime>True</DesignTime>
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Update="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
</EmbeddedResource>
</ItemGroup>
</Project>

@ -6,7 +6,7 @@ namespace YL.Core.Entity.Fluent.Validation
{
public CarrierFluent()
{
RuleFor(x => x.CarrierNo).NotNull().NotEmpty().WithMessage("承运商编号不能为空").Length(1, 20).WithMessage("承运商编号长度不能超过20");
RuleFor(x => x.CarrierNo).NotNull().NotEmpty().WithMessage(Properties.Resources.OPERATION_NOTNULL).Length(1, 20).WithMessage("承运商编号长度不能超过20");
RuleFor(x => x.CarrierName).NotNull().NotEmpty().WithMessage("承运商名称不能为空").Length(1, 50).WithMessage("承运商编号长度不能超过50");
RuleFor(x => x.Remark).MaximumLength(200).WithMessage("备注长度不能超过200");
}

@ -0,0 +1,123 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="OPERATION_NOTNULL" xml:space="preserve">
<value>承运商编号不能为空</value>
</data>
</root>

@ -0,0 +1,123 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="OPERATION_NOTNULL" xml:space="preserve">
<value>Поле "оператор" не может быть пустым</value>
</data>
</root>

@ -0,0 +1,72 @@
//------------------------------------------------------------------------------
// <auto-generated>
// Этот код создан программой.
// Исполняемая версия:4.0.30319.42000
//
// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае
// повторной генерации кода.
// </auto-generated>
//------------------------------------------------------------------------------
namespace YL.Core.Entity.Properties {
using System;
/// <summary>
/// Класс ресурса со строгой типизацией для поиска локализованных строк и т.д.
/// </summary>
// Этот класс создан автоматически классом StronglyTypedResourceBuilder
// с помощью такого средства, как ResGen или Visual Studio.
// Чтобы добавить или удалить член, измените файл .ResX и снова запустите ResGen
// с параметром /str или перестройте свой проект VS.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources() {
}
/// <summary>
/// Возвращает кэшированный экземпляр ResourceManager, использованный этим классом.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("YL.Core.Entity.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Перезаписывает свойство CurrentUICulture текущего потока для всех
/// обращений к ресурсу с помощью этого класса ресурса со строгой типизацией.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
/// <summary>
/// Ищет локализованную строку, похожую на Operator name can&apos;t be null.
/// </summary>
internal static string OPERATION_NOTNULL {
get {
return ResourceManager.GetString("OPERATION_NOTNULL", resourceCulture);
}
}
}
}

@ -0,0 +1,123 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="OPERATION_NOTNULL" xml:space="preserve">
<value>Operator name can't be null</value>
</data>
</root>

@ -35,7 +35,7 @@ namespace YL.Core.Entity
public string DeptName { get; set; }
/// <summary>
/// Desc:1未删除 0删除
/// Desc:1未删除 0 Delete
/// Default:
/// Nullable:True
/// </summary>

@ -44,7 +44,7 @@ namespace YL.Core.Entity
public string DictType { get; set; }
/// <summary>
/// Desc:1未删除 0删除
/// Desc:1未删除 0 Delete
/// Default:1
/// Nullable:False
/// </summary>

@ -70,7 +70,7 @@ namespace YL.Core.Entity
public string MenuType { get; set; }
/// <summary>
/// Desc:1未删除 0删除
/// Desc:1未删除 0 Delete
/// Default:
/// Nullable:True
/// </summary>

@ -39,7 +39,7 @@ namespace YL.Core.Entity
public string RoleType { get; set; }
/// <summary>
/// Desc:1未删除 0删除
/// Desc:1未删除 0 Delete
/// Default:1
/// Nullable:False
/// </summary>

@ -62,7 +62,7 @@ namespace YL.Core.Entity
public int? Mantissa { get; set; }
/// <summary>
/// Desc:1未删除 0删除
/// Desc:1未删除 0 Deleted
/// Default:
/// Nullable:False
/// </summary>

@ -118,7 +118,7 @@ namespace YL.Core.Entity
public byte? Sex { get; set; }
/// <summary>
/// Desc:1未删除 0删除
/// Desc:1未删除 0 Deleted
/// Default:
/// Nullable:True
/// </summary>

@ -69,7 +69,7 @@ namespace YL.Core.Entity
public string Tel { get; set; }
/// <summary>
/// Desc:是否删除 1未删除 0删除
/// Desc:是否删除 1未删除 0 Deleted
/// Default:1
/// Nullable:True
/// </summary>

@ -52,7 +52,7 @@ namespace YL.Core.Entity
public string Tel { get; set; }
/// <summary>
/// Desc:是否删除 1未删除 0删除
/// Desc:是否删除 1未删除 0 Deleted
/// Default:1
/// Nullable:True
/// </summary>

@ -88,7 +88,7 @@ namespace YL.Core.Entity
public DateTime? ModifiedDate { get; set; }
/// <summary>
/// Desc:1未删除 0删除
/// Desc:1未删除 0 Deleted
/// Default:1
/// Nullable:False
/// </summary>

@ -77,7 +77,7 @@ namespace YL.Core.Entity
public string Remark { get; set; }
/// <summary>
/// Desc:是否删除 1未删除 0删除
/// Desc:是否删除 1未删除 0 Deleted
/// Default:1
/// Nullable:True
/// </summary>

@ -37,7 +37,7 @@ namespace YL.Core.Entity
public string WarehouseName { get; set; }
/// <summary>
/// Desc:是否删除 1未删除 0删除
/// Desc:是否删除 1未删除 0 Deleted
/// Default:1
/// Nullable:True
/// </summary>

@ -4,6 +4,7 @@ using System.Collections.Generic;
using System.Data;
using System.Dynamic;
using System.Linq.Expressions;
using System.Threading.Tasks;
using YL.NetCore;
using YL.Utils.Table;
@ -13,7 +14,11 @@ namespace IRepository
{
#region add
bool Insert(T t);
bool Insert(T t, bool IgnoreNullColumn = true);
bool InsertIgnoreNullColumn(T t);
bool InsertIgnoreNullColumn(T t, params string[] columns);
bool Insert(SqlSugarClient client, T t);
@ -21,6 +26,10 @@ namespace IRepository
bool Insert(List<T> t);
bool InsertIgnoreNullColumn(List<T> t);
bool InsertIgnoreNullColumn(List<T> t, params string[] columns);
DbResult<bool> InsertTran(T t);
DbResult<bool> InsertTran(List<T> t);
@ -96,6 +105,8 @@ namespace IRepository
List<T> QueryableToList(Expression<Func<T, bool>> expression);
Task<List<T>> QueryableToListAsync(Expression<Func<T, bool>> expression);
string QueryableToJson(string select, Expression<Func<T, bool>> expressionWhere);
List<T> QueryableToList(string tableName);

@ -1,16 +1,17 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<TargetFramework>netstandard2.1</TargetFramework>
<LangVersion>7.1</LangVersion>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="sqlSugarCore" Version="4.9.9.10" />
<PackageReference Include="sqlSugarCore" Version="5.0.0.13" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Entity\Entity.csproj" />
<ProjectReference Include="..\NetCore\YL.NetCore.csproj" />
<ProjectReference Include="..\YL.Utils\YL.Utils.csproj" />
</ItemGroup>
</Project>

@ -4,6 +4,7 @@ using System.Collections.Generic;
using System.Data;
using System.Dynamic;
using System.Linq.Expressions;
using System.Threading.Tasks;
using YL.NetCore;
using YL.Utils.Table;
@ -13,7 +14,11 @@ namespace IServices
{
#region add
bool Insert(T t);
bool Insert(T t, bool IgnoreNullColumn = true);
bool InsertIgnoreNullColumn(T t);
bool InsertIgnoreNullColumn(T t, params string[] columns);
bool Insert(SqlSugarClient client, T t);
@ -21,6 +26,10 @@ namespace IServices
bool Insert(List<T> t);
bool InsertIgnoreNullColumn(List<T> t);
bool InsertIgnoreNullColumn(List<T> t, params string[] columns);
DbResult<bool> InsertTran(T t);
DbResult<bool> InsertTran(List<T> t);
@ -83,6 +92,8 @@ namespace IServices
List<T> QueryableToList(Expression<Func<T, bool>> expression);
Task<List<T>> QueryableToListAsync(Expression<Func<T, bool>> expression);
string QueryableToJson(string select, Expression<Func<T, bool>> expressionWhere);
List<T> QueryableToList(string tableName);

@ -1,12 +1,12 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<TargetFramework>netstandard2.1</TargetFramework>
<LangVersion>7.1</LangVersion>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="sqlSugarCore" Version="4.9.9.10" />
<PackageReference Include="sqlSugarCore" Version="5.0.0.13" />
</ItemGroup>
<ItemGroup>

@ -1,7 +1,7 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.28307.572
# Visual Studio Version 17
VisualStudioVersion = 17.0.32112.339
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "KopSoftWms", "KopSoftWms\KopSoftWms.csproj", "{AB10278E-541F-43A6-BB31-360B8F43AE92}"
EndProject
@ -41,6 +41,10 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Services", "Services\Servic
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "XUnitTestKopSoftWms", "..\test\XUnitTestKopSoftWms\XUnitTestKopSoftWms.csproj", "{B3B2E6B4-3457-449F-9144-6030A795D2AD}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Localization", "Localization", "{7E7171C5-F87E-4384-AC36-1FBE90D7714B}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "YL.Localization", "YL.Localization\YL.Localization.csproj", "{0C9FDC64-F7C7-4B35-B314-3DA67DBCDBCC}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@ -95,6 +99,10 @@ Global
{B3B2E6B4-3457-449F-9144-6030A795D2AD}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B3B2E6B4-3457-449F-9144-6030A795D2AD}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B3B2E6B4-3457-449F-9144-6030A795D2AD}.Release|Any CPU.Build.0 = Release|Any CPU
{0C9FDC64-F7C7-4B35-B314-3DA67DBCDBCC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{0C9FDC64-F7C7-4B35-B314-3DA67DBCDBCC}.Debug|Any CPU.Build.0 = Debug|Any CPU
{0C9FDC64-F7C7-4B35-B314-3DA67DBCDBCC}.Release|Any CPU.ActiveCfg = Release|Any CPU
{0C9FDC64-F7C7-4B35-B314-3DA67DBCDBCC}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@ -117,6 +125,8 @@ Global
{FCA45070-6064-40DB-A5E8-4778E0C99E2D} = {37A7799B-1F85-4746-A9EA-B0F219831CDA}
{5ECAA16F-5715-4310-B2C9-68C4BA72B432} = {8FA3375D-7742-471C-8012-99F882F13CE0}
{B3B2E6B4-3457-449F-9144-6030A795D2AD} = {113E9737-A3EA-493C-9C39-2F044C12C41C}
{7E7171C5-F87E-4384-AC36-1FBE90D7714B} = {34B22F89-6684-4AD7-B92A-8C452BA1AFB9}
{0C9FDC64-F7C7-4B35-B314-3DA67DBCDBCC} = {7E7171C5-F87E-4384-AC36-1FBE90D7714B}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {D493867C-D775-4AEC-9F0A-298A298D9FFE}

@ -22,6 +22,10 @@ namespace YL.NetCore.Attributes
var viewData = (context.Controller as Controller)?.ViewData;
var viewBag = (context.Controller as Controller)?.ViewBag;
var services = context.HttpContext.RequestServices;
//var log = services.GetService(typeof(ILoggerFactory)) as ILoggerFactory;
//ILogger<CheckMenuAttribute> logger = log.CreateLogger<CheckMenuAttribute>();
//logger.LogInformation("");
var properties = context.ActionDescriptor.Properties;
var claims = context.HttpContext.User?.Claims;
var cache = services.GetService(typeof(IMemoryCache)) as IMemoryCache;
@ -37,8 +41,7 @@ namespace YL.NetCore.Attributes
}
if (viewBag != null)
{
viewBag.keywords = properties["keywords"].ToString();
viewBag.description = properties["description"].ToString();
viewBag.title = properties["title"].ToString();
viewBag.company = properties["company"].ToString();
viewBag.customer = properties["customer"].ToString();
viewBag.nickname = claims.SingleOrDefault(c => c.Type == ClaimTypes.Name).Value;

@ -112,7 +112,7 @@ namespace YL.NetCore.Attributes
var model = new Core.Entity.Sys_log
{
Browser = GlobalCore.GetBrowser(),
CreateBy = claims.SingleOrDefault(c => c.Type == ClaimTypes.Sid).Value.ToInt64(),
CreateBy = claims.First(c => c.Type == ClaimTypes.Sid).ToInt64(),
CreateDate = DateTimeExt.DateTime,
Description = des,
LogId = PubId.SnowflakeId,

@ -38,6 +38,16 @@ namespace KopSoftWms.Controllers
{
//TempData["returnUrl"] = returnUrl;
//_userServices.Login(UserDtoCache.UserId, GetIp());
//_mediator.Publish(new Sys_log
//{
// LogId = PubId.SnowflakeId,
// Browser = GetBrowser(),
// CreateBy = UserDtoCache.UserId,
// Description = $"{UserDtoCache.UserNickname}登录成功",
// LogIp = GetIp(),
// Url = GetUrl(),
// LogType = LogType.login.EnumToString(),
//});
//_logServices.Insert(new Sys_log
//{
// LogId = PubId.SnowflakeId,
@ -48,16 +58,15 @@ namespace KopSoftWms.Controllers
// Url = GetUrl(),
// LogType = LogType.login.EnumToString(),
//});
ViewBag.keywords = GetDescriptor("keywords");
ViewBag.description = GetDescriptor("description");
ViewBag.title = GetDescriptor("title");
ViewBag.company = GetDescriptor("company");
ViewBag.customer = GetDescriptor("customer");
ViewBag.nickname = UserDtoCache.UserNickname;
ViewBag.headimg = UserDtoCache.HeadImg;
ViewBag.nickname = UserDtoCache?.UserNickname;
ViewBag.headimg = UserDtoCache?.HeadImg;
//菜单
////菜单
var menus = _roleServices.GetMenu(UserDtoCache.RoleId.Value);
GetMemoryCache.Set("menu_" + UserDtoCache.UserId, menus);
GetMemoryCache.Set("menu_" + UserDtoCache?.UserId, menus);
ViewData["menu"] = menus;
return View();
}
@ -84,7 +93,7 @@ namespace KopSoftWms.Controllers
public IActionResult Welcome()
{
//ViewBag.keywords = GetDescriptor("keywords");
ViewBag.title = GetDescriptor("title");
return View();
}

@ -236,7 +236,7 @@ namespace KopSoftWms.Controllers
}
/// <summary>
/// 删除
/// Delete
/// </summary>
/// <param name="id">主表id</param>
/// <returns></returns>

@ -19,6 +19,8 @@ using YL.Utils.Pub;
using YL.Utils.Security;
using YL.Utils.Json;
using MediatR;
using Microsoft.Extensions.Localization;
using YL.Localization;
namespace KopSoftWms.Controllers
{
@ -30,8 +32,9 @@ namespace KopSoftWms.Controllers
private readonly IConfiguration _configuration;
private readonly Xss _xss;
private readonly IMediator _mediator;
private readonly IStringLocalizer<SharedResource> _sharedLocalizer;
public LoginController(Xss xss, ISys_logServices logServices, IHttpContextAccessor httpContext, IConfiguration configuration, ISys_userServices sys_User, IMediator mediator)
public LoginController(Xss xss, ISys_logServices logServices, IHttpContextAccessor httpContext, IConfiguration configuration, ISys_userServices sys_User, IMediator mediator, IStringLocalizer<SharedResource> sharedLocalizer)
{
_httpContext = httpContext;
_configuration = configuration;
@ -39,6 +42,7 @@ namespace KopSoftWms.Controllers
_logServices = logServices;
_xss = xss;
_mediator = mediator;
_sharedLocalizer = sharedLocalizer;
}
//string returnUrl = null
@ -46,15 +50,19 @@ namespace KopSoftWms.Controllers
[AllowAnonymous]
public IActionResult Index()
{
//HttpContext.Request.EnableRewind();
//TempData["returnUrl"] = returnUrl;
ViewBag.keywords = GetDescriptor("keywords");
ViewBag.description = GetDescriptor("description");
ViewBag.title = GetDescriptor("title");
ViewBag.company = GetDescriptor("company");
ViewBag.customer = GetDescriptor("customer");
var a = LogType.addOrUpdate;
var b = LogType.update;
if (a == b)
throw new Exception("du");
return View();
}
[Route("Login/CheckLoginAsync")]
[HttpPost]
[AllowAnonymous]
public async Task<IActionResult> CheckLoginAsync([FromBody]SysUserDto sys)
@ -112,6 +120,15 @@ namespace KopSoftWms.Controllers
Url = GetUrl(),
LogType = LogType.login.EnumToString()
});
//_logServices.Insert(new Sys_log
//{
// LogId = PubId.SnowflakeId,
// Browser = GetBrowser(),
// Description = $"{_xss.Filter(sys.UserNickname)}登录失败",
// LogIp = GetIp(),
// Url = GetUrl(),
// LogType = LogType.login.EnumToString()
//});
}
item.Item3 = null;
//return Json(item);

@ -1,4 +1,5 @@
FROM microsoft/dotnet:2.2-aspnetcore-runtime AS base
#FROM microsoft/dotnet:2.2-aspnetcore-runtime AS base
FROM mcr.microsoft.com/dotnet/core/aspnet:3.0 AS base
WORKDIR /app
EXPOSE 5000

@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>netcoreapp2.2</TargetFramework>
<TargetFramework>net6.0</TargetFramework>
<TypeScriptToolsVersion>3.0</TypeScriptToolsVersion>
<LangVersion>7.1</LangVersion>
<DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
@ -9,11 +9,6 @@
<ItemGroup>
<Content Remove="bundleconfig.json" />
<Content Remove="wwwroot\js\vqypa.min.js" />
</ItemGroup>
<ItemGroup>
<_ContentIncludedByDefault Remove="wwwroot\js\vqypa.min.js" />
</ItemGroup>
<ItemGroup>
@ -26,14 +21,12 @@
<None Include="wwwroot\fonts\fontawesome-webfont.woff2" />
<None Include="wwwroot\js\locales\bootstrap-datetimepicker.zh-CN.js" />
<None Include="wwwroot\js\locales\bootstrap-datetimepicker.zh-TW.js" />
<None Include="wwwroot\js\vqypa.min.js" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="MediatR.Extensions.Microsoft.DependencyInjection" Version="7.0.0" />
<PackageReference Include="Microsoft.AspNetCore.App" />
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.7.8" />
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="2.2.3" />
<PackageReference Include="MediatR.Extensions.Microsoft.DependencyInjection" Version="8.0.0" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" Version="3.1.3" />
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="3.1.2" />
<PackageReference Include="Pomelo.AspNetCore.TimedJob" Version="2.0.0-rtm-10046" />
</ItemGroup>
@ -44,6 +37,7 @@
<ProjectReference Include="..\Orm\Orm.csproj" />
<ProjectReference Include="..\Repository\Repository.csproj" />
<ProjectReference Include="..\Services\Services.csproj" />
<ProjectReference Include="..\YL.Localization\YL.Localization.csproj" />
</ItemGroup>
<ItemGroup>

@ -7,13 +7,16 @@
internalLogLevel="Off" internalLogFile="c:\temp\nlog-internal.log">
<!-- optional, add some variables
${local-ip} ${aspnet-request-ip}
https://github.com/nlog/NLog/wiki/Configuration-file#variables
-->
<variable name="variable1" value="${newline}date ${date}${newline}level ${level}${newline}logger ${logger}${newline}machinename ${machinename}
${newline}message ${message} ${newline}exception${exception}
${newline}clientip${local-ip}${newline}message ${message} ${newline}exception${exception}
${newline}appdomain ${appdomain}${newline}assembly-version ${assembly-version}${newline}basedir ${basedir}
${newline}callsite ${callsite}${newline}callsite-linenumber ${callsite-linenumber}${newline}counter ${counter}${newline}nlogdir ${nlogdir}
${newline}processid ${processid}${newline}processname ${processname}${newline}specialfolder ${specialfolder}
${newline}processid ${processid}${newline}processname ${processname}
${newline}traceid ${aspnet-traceidentifier}
${newline}specialfolder ${specialfolder}
${newline}stacktrace: ${stacktrace}${newline}-----------------------------------------------------------" />
<variable name="variable2" value="日志时间:${longdate}${newline}日志来源:${callsite}${newline}日志级别:${uppercase:${level}}${newline}消息内容:${message}${newline}异常信息:${exception}${newline}stacktrace: ${stacktrace}${newline}==============================================================${newline}" />
<!--
@ -25,7 +28,11 @@ ${newline}stacktrace: ${stacktrace}${newline}-----------------------------------
Write events to a file with the date in the filename. -->
<!--<target xsi:type="File" name="f" fileName="${basedir}/logs/${shortdate}.log"
layout="${longdate} ${uppercase:${level}} ${message}" />-->
<target name="log_file" xsi:type="File" fileName="${basedir}/logs/${shortdate}.log" layout="${variable1}" />
<target name="log_file" xsi:type="AsyncWrapper" queueLimit="5000" overflowAction="Discard">
<target xsi:type="File" fileName="${basedir}/logs/${shortdate}/${shortdate}.${level}.log"
layout="${variable1}" archiveAboveSize="2097152" archiveEvery="Day" />
</target>
<!--<target name="log_file" xsi:type="File" fileName="${basedir}/logs/${shortdate}.log" layout="${variable1}" />-->
<target name="log_file2" xsi:type="File" fileName="${basedir}/logs/${shortdate}.log" layout="${variable2}" />
</targets>
@ -36,7 +43,7 @@ ${newline}stacktrace: ${stacktrace}${newline}-----------------------------------
-->
<!--<logger name="*" minlevel="Debug" writeTo="f" />-->
<logger name="*" minlevel="Debug" writeTo="log_file" />
<logger name="*" minlevel="Info" writeTo="log_file2" />
<!--<logger name="*" minlevel="Info" writeTo="log_file2" />-->
<!--<logger name="*" writeTo="log_file2" />-->
</rules>
</nlog>

@ -1,5 +1,5 @@
using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Hosting;
using YL.Utils.Configs;
namespace YL
@ -11,19 +11,25 @@ namespace YL
CreateWebHostBuilder(args).Build().Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args)
public static IHostBuilder CreateWebHostBuilder(string[] args)
{
var config = ConfigUtil.GetConfiguration;
if (string.IsNullOrWhiteSpace(config["urls"]))
{
return WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>();
return Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}
else
{
return WebHost.CreateDefaultBuilder(args)
.UseConfiguration(ConfigUtil.GetConfiguration)
.UseStartup<Startup>();
return Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseConfiguration(ConfigUtil.GetConfiguration);
webBuilder.UseStartup<Startup>();
});
}
}
}

@ -1,16 +1,19 @@
using IRepository;
using IServices;
using MediatR;
using Microsoft.AspNetCore.Authentication.Cookies;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.HttpOverrides;
using Microsoft.AspNetCore.Localization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Razor;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Repository;
using Services;
using SqlSugar;
using System;
using System.Globalization;
using System.Text;
using YL.Core.Orm.SqlSugar;
using YL.NetCore.Attributes;
@ -18,10 +21,6 @@ using YL.NetCore.Conventions;
using YL.NetCore.DI;
using YL.NetCoreApp.Extensions;
using YL.Utils.Json;
using MediatR;
using Microsoft.Extensions.DependencyInjection.Extensions;
using Microsoft.AspNetCore.Mvc.Controllers;
using Microsoft.AspNetCore.Mvc.Filters;
namespace YL
{
@ -37,22 +36,51 @@ namespace YL
//IServiceProvider This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddLocalization
(options =>
{
options.ResourcesPath = "Resources";
});
services.Configure<RequestLocalizationOptions>(options =>
{
CultureInfo[] supportedCultures = new[]
{
new CultureInfo("en"),
new CultureInfo("cn"),
new CultureInfo("ru")
};
options.DefaultRequestCulture = new RequestCulture("en");
options.SupportedCultures = supportedCultures;
options.SupportedUICultures = supportedCultures;
});
services.AddMvc(option =>
{
option.Filters.Add<BaseExceptionAttribute>();
//option.Filters.Add<FilterXSSAttribute>();
option.Conventions.Add(new ApplicationDescription("keywords", Configuration["sys:keywords"]));
option.Conventions.Add(new ApplicationDescription("description", Configuration["sys:description"]));
option.Conventions.Add(new ApplicationDescription("title", Configuration["sys:title"]));
option.Conventions.Add(new ApplicationDescription("company", Configuration["sys:company"]));
option.Conventions.Add(new ApplicationDescription("customer", Configuration["sys:customer"]));
}).SetCompatibilityVersion(CompatibilityVersion.Latest);
}).AddViewLocalization(LanguageViewLocationExpanderFormat.Suffix);
services.AddControllersWithViews();
services.AddRazorPages().AddRazorRuntimeCompilation();
//services.AddControllersWithViews(option =>
//{
// option.Filters.Add<BaseExceptionAttribute>();
// //option.Filters.Add<FilterXSSAttribute>();
// option.Conventions.Add(new ApplicationDescription("title", Configuration["sys:title"]));
// option.Conventions.Add(new ApplicationDescription("company", Configuration["sys:company"]));
// option.Conventions.Add(new ApplicationDescription("customer", Configuration["sys:customer"]));
//});
//services.Configure<CookiePolicyOptions>(options =>
//{
// // This lambda determines whether user consent for non-essential cookies is needed for a given request.
// options.CheckConsentNeeded = context => true;
// options.MinimumSameSitePolicy = SameSiteMode.None;
//});
services.AddTimedJob();
// services.AddTimedJob();
services.AddOptions();
services.AddXsrf();
services.AddXss();
@ -84,22 +112,22 @@ namespace YL
{
o.JsonType = JsonType.Jil;
});
services.AddDIProperty();
services.AddHttpContextAccessor();
services.AddHtmlEncoder();
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
services.AddBr(); //br压缩
services.AddResponseCompression();//添加压缩
services.AddResponseCaching(); //响应式缓存
services.AddMemoryCache();
services.AddMediatR(typeof(Startup).GetTypeInfo().Assembly);
//@1 DependencyInjection 注册
services.AddNlog(); //添加Nlog
services.AddBr() //br压缩
.AddResponseCompression()//添加压缩
.AddResponseCaching() //响应式缓存
.AddMemoryCache()
.AddMediatR(typeof(Startup).GetTypeInfo().Assembly)
//@1 DependencyInjection 注册
.AddNlog(); //添加Nlog
RegisterBase(services);
ServiceExtension.RegisterAssembly(services, "Services");
ServiceExtension.RegisterAssembly(services, "Repository");
var bulid = services.BuildServiceProvider();
ServiceResolve.SetServiceResolve(bulid);
//var bulid = services.BuildServiceProvider();
//ServiceResolve.SetServiceResolve(bulid);
}
/// <summary>
@ -129,7 +157,7 @@ namespace YL
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
@ -139,28 +167,32 @@ namespace YL
{
app.UseExceptionHandler("/Home/Error");
}
app.UseStaticFiles(); //使用静态文件
app.UseGlobalCore();
app.UseExecuteTime();
app.UseTimedJob();
// app.UseTimedJob();
app.UseResponseCompression(); //使用压缩
app.UseResponseCaching(); //使用缓存
app.UseStaticFiles(); //使用静态文件
app.UseCookiePolicy();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseRequestLocalization();
app.UseStatusCodePagesWithRedirects("/Home/Error/{0}");
app.UseMvc(routes =>
app.UseEndpoints(endpoints =>
{
routes.MapRoute(
name: "default",
template: "{controller=Login}/{action=Index}/{id?}");
// Areas
routes.MapRoute(
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
endpoints.MapAreaControllerRoute(
name: "areas",
template: "{area:exists}/{controller=Home}/{action=Index}/{id?}"
);
areaName: "areas",
pattern: "{area:exists}/{controller=Home}/{action=Index}/{id?}");
endpoints.MapRazorPages();
});
}
}

@ -1,4 +1,7 @@
<div class="content-wrapper">
@using Microsoft.AspNetCore.Mvc.Localization
@inject IHtmlLocalizer<YL.Localization.SharedResource> _sharedLocalizer
<div class="content-wrapper">
<section class="content-header">
<h1>
基础资料
@ -29,7 +32,7 @@
<span class="glyphicon glyphicon-pencil" aria-hidden="true"></span>修改
</button>
<button id="btn_delete" v-on:click="deleteL" type="button" class="btn btn-default">
<span class="glyphicon glyphicon-remove" aria-hidden="true"></span>删除
<span class="glyphicon glyphicon-remove" aria-hidden="true"></span>@_sharedLocalizer["DELETE"]
</button>
</div>
<table id="bootstraptable" class="table table-bordered text-nowrap table-hover"></table>

@ -1,4 +1,7 @@
<div class="content-wrapper">
@using Microsoft.AspNetCore.Mvc.Localization
@inject IHtmlLocalizer<YL.Localization.SharedResource> _sharedLocalizer
<div class="content-wrapper">
<section class="content-header">
<h1>
基础资料
@ -29,7 +32,7 @@
<span class="glyphicon glyphicon-pencil" aria-hidden="true"></span>修改
</button>
<button id="btn_delete" v-on:click="deleteL" type="button" class="btn btn-default">
<span class="glyphicon glyphicon-remove" aria-hidden="true"></span>删除
<span class="glyphicon glyphicon-remove" aria-hidden="true"></span>@_sharedLocalizer["DELETE"]
</button>
<button id="btn_import" v-on:click="importL" type="button" class="btn btn-default">
<span class="glyphicon glyphicon-import" aria-hidden="true"></span>导入

@ -1,4 +1,7 @@
<div class="content-wrapper">
@using Microsoft.AspNetCore.Mvc.Localization
@inject IHtmlLocalizer<YL.Localization.SharedResource> _sharedLocalizer
<div class="content-wrapper">
<section class="content-header">
<h1>
仓库管理
@ -47,7 +50,7 @@
<span class="glyphicon glyphicon-pencil" aria-hidden="true"></span>修改
</button>
<button id="btn_delete" v-on:click="deleteL" type="button" class="btn btn-default">
<span class="glyphicon glyphicon-remove" aria-hidden="true"></span>删除
<span class="glyphicon glyphicon-remove" aria-hidden="true"></span>@_sharedLocalizer["DELETE"]
</button>
</div>
<table id="bootstraptable" class="table table-bordered text-nowrap table-hover"></table>

@ -1,4 +1,7 @@
<div class="content-wrapper">
@using Microsoft.AspNetCore.Mvc.Localization
@inject IHtmlLocalizer<YL.Localization.SharedResource> _sharedLocalizer
<div class="content-wrapper">
<section class="content-header">
<h1>
系统管理
@ -29,7 +32,7 @@
<span class="glyphicon glyphicon-pencil" aria-hidden="true"></span>修改
</button>
<button id="btn_delete" v-on:click="deleteL" type="button" class="btn btn-default">
<span class="glyphicon glyphicon-remove" aria-hidden="true"></span>删除
<span class="glyphicon glyphicon-remove" aria-hidden="true"></span>@_sharedLocalizer["DELETE"]
</button>
</div>
<table id="bootstraptable" class="table table-bordered text-nowrap table-hover"></table>

@ -1,4 +1,7 @@
<div class="content-wrapper">
@using Microsoft.AspNetCore.Mvc.Localization
@inject IHtmlLocalizer<YL.Localization.SharedResource> _sharedLocalizer
<div class="content-wrapper">
<section class="content-header">
<h1>
系统管理
@ -48,7 +51,7 @@
<span class="glyphicon glyphicon-pencil" aria-hidden="true"></span>修改
</button>
<button id="btn_delete" v-on:click="deleteL" type="button" class="btn btn-default">
<span class="glyphicon glyphicon-remove" aria-hidden="true"></span>删除
<span class="glyphicon glyphicon-remove" aria-hidden="true"></span>@_sharedLocalizer["DELETE"]
</button>
</div>
<table id="bootstraptable" class="table table-bordered text-nowrap table-hover"></table>
@ -67,6 +70,14 @@
datemax: '',
DictType: ''
},
computed: {
qParams: function () {
var data = {
DictType: this.DictType
};
return data;
}
},
//beforeCreate: function () {
// this.$nextTick(function () {
// this.$refs.Dict.parentNode.parentNode.classList.add("active");
@ -176,7 +187,7 @@
var qParams = {
DictType: _self.DictType
};
yui.table("bootstraptable", "/Dict/List", obj, "POST", "DictId", true, qParams);
yui.table("bootstraptable", "/Dict/List", obj, "POST", "DictId", true, this.qParams);
},
showL: function () {
yui.layershow("添加字典", "/Dict/Add", 510, 400);

@ -63,7 +63,7 @@
<span class="glyphicon glyphicon-pencil" aria-hidden="true"></span>修改
</button>
<button id="btn_delete" v-on:click="deleteL" type="button" class="btn btn-default">
<span class="glyphicon glyphicon-remove" aria-hidden="true"></span>删除
<span class="glyphicon glyphicon-remove" aria-hidden="true"></span>@_sharedLocalizer["DELETE"]
</button>
</div>*@
<table id="bootstraptable" class="table table-bordered text-nowrap table-hover"></table>

@ -1,4 +1,7 @@
@using YL.Utils.Json;
@using Microsoft.AspNetCore.Mvc.Localization
@inject IHtmlLocalizer<YL.Localization.SharedResource> _sharedLocalizer
@using YL.Utils.Json;
@{
Layout = "_LayoutH";
@model YL.Core.Dto.Wms_invmovedetailDto
@ -77,7 +80,7 @@
<th data-field="ActQty">实际数量</th>
<th data-field="Remark">备注</th>
<th data-field="InventorymoveId" data-visible="false">InventorymoveId</th>
<th data-formatter="operateFormatter" data-events="operateEvents">删除</th>
<th data-formatter="operateFormatter" data-events="operateEvents">@_sharedLocalizer["DELETE"]</th>
</tr>
</thead>
</table>
@ -121,7 +124,7 @@
//fa-heart
return [
'<a class="remove" href="javascript:void(0)" title="Remove">',
'<i class="fa fa-trash">删除</i>',
'<i class="fa fa-trash">@_sharedLocalizer["CANCEL"]</i>',
'</a>'
].join('')
};

@ -1,4 +1,7 @@
<div class="content-wrapper">
@using Microsoft.AspNetCore.Mvc.Localization
@inject IHtmlLocalizer<YL.Localization.SharedResource> _sharedLocalizer
<div class="content-wrapper">
<section class="content-header">
<h1>
仓库管理
@ -59,7 +62,7 @@
<span class="glyphicon glyphicon-pencil" aria-hidden="true"></span>修改
</button>
<button id="btn_delete" v-on:click="deleteL" type="button" class="btn btn-default">
<span class="glyphicon glyphicon-remove" aria-hidden="true"></span>删除
<span class="glyphicon glyphicon-remove" aria-hidden="true"></span>@_sharedLocalizer["DELETE"]
</button>
</div>
<table id="bootstraptable" class="table table-bordered text-nowrap table-hover"></table>
@ -273,7 +276,7 @@
sortable: true,
formatter: function (value, row, index) {
if (value != 2) {
return ['<button id="deleteDetailL" type="button" class="btn btn-link" style="margin-top:-8px;">删除</button>'
return ['<button id="deleteDetailL" type="button" class="btn btn-link" style="margin-top:-8px;">@_sharedLocalizer["CANCEL"]</button>'
].join('');
} else {
@ -539,7 +542,7 @@
if (arr.length > 0) {
var index = layer.confirm("您确定要删除吗?", { btn: ["确定", "取消"] }, function () {
var id = arr[0].InventorymoveId;
yui.$axiosget('/InventoryMoveId/Delete?id=' + id)
yui.$axiosget('/InventoryMove/Delete?id=' + id)
.then(function (response) {
if (response.data.Item1) {
layer.msg(response.data.Item2 || errorMsg, { icon: 1 });

@ -47,7 +47,7 @@
<span class="glyphicon glyphicon-pencil" aria-hidden="true"></span>修改
</button>
<button id="btn_delete" v-on:click="deleteL" type="button" class="btn btn-default">
<span class="glyphicon glyphicon-remove" aria-hidden="true"></span>删除
<span class="glyphicon glyphicon-remove" aria-hidden="true"></span>@_sharedLocalizer["DELETE"]
</button>
</div>*@
<table id="bootstraptable" class="table table-bordered text-nowrap table-hover"></table>

@ -24,7 +24,7 @@
</div>
@*<div id="toolbar" class="btn-group">
<button id="btn_delete" v-on:click="deleteL" type="button" class="btn btn-default">
<span class="glyphicon glyphicon-remove" aria-hidden="true"></span>删除
<span class="glyphicon glyphicon-remove" aria-hidden="true"></span>@_sharedLocalizer["DELETE"]
</button>
</div>*@
<div id="container" style="min-width:700px;height:400px"></div>

@ -1,4 +1,7 @@
<div class="content-wrapper">
@using Microsoft.AspNetCore.Mvc.Localization
@inject IHtmlLocalizer<YL.Localization.SharedResource> _sharedLocalizer
<div class="content-wrapper">
<section class="content-header">
<h1>
日志管理
@ -22,7 +25,7 @@
</div>
<div id="toolbar" class="btn-group">
<button id="btn_delete" v-on:click="deleteL" type="button" class="btn btn-default">
<span class="glyphicon glyphicon-remove" aria-hidden="true"></span>删除
<span class="glyphicon glyphicon-remove" aria-hidden="true"></span>@_sharedLocalizer["DELETE"]
</button>
</div>
<div class="table-responsive">
@ -51,7 +54,7 @@
</div>*@
<div id="toolbar" class="btn-group">
<button id="btn_delete" v-on:click="deleteL" type="button" class="btn btn-default">
<span class="glyphicon glyphicon-remove" aria-hidden="true"></span>删除
<span class="glyphicon glyphicon-remove" aria-hidden="true"></span>@_sharedLocalizer["CANCEL"]
</button>
</div>
@*<table id="bootstraptable" class="table table-bordered table-hover"></table>*@

@ -1,4 +1,7 @@
@{
@using Microsoft.AspNetCore.Mvc.Localization
@inject IHtmlLocalizer<YL.Localization.SharedResource> _sharedLocalizer
@{
Layout = null;
}
<!DOCTYPE html>
@ -35,16 +38,16 @@
color: #fff;
}
.snow-container {
position: fixed;
top: -1px;
left: 0;
width: 100%;
height: 100%;
pointer-events: none;
z-index: -1;
}
</style>
.snow-container {
position: fixed;
top: -1px;
left: 0;
width: 100%;
height: 100%;
pointer-events: none;
z-index: -1;
}
</style>
</head>
<body class="hold-transition login-page">
<div id="app">
@ -97,7 +100,7 @@
UserNickname: '',
Pwd: '',
disabled: false,
submit: "登录",
submit: '@_sharedLocalizer["LOGIN"]',
reset: "取消",
isSelected: false
},
@ -108,7 +111,7 @@
_self.isSelected = true;
//es5写法
if (_self.UserNickname.length <= 0) {
layer.msg('账号不能为空', { icon: 5 });
layer.msg('@_sharedLocalizer["ACCOUNT_NOT_NULL"]', { icon: 5 });
_self.disabled = false;
_self.isSelected = false;
return false;

@ -1,4 +1,7 @@
<div class="content-wrapper">
@using Microsoft.AspNetCore.Mvc.Localization
@inject IHtmlLocalizer<YL.Localization.SharedResource> _sharedLocalizer
<div class="content-wrapper">
<section class="content-header">
<h1>
基础资料
@ -29,7 +32,7 @@
<span class="glyphicon glyphicon-pencil" aria-hidden="true"></span>修改
</button>
<button id="btn_delete" v-on:click="deleteL" type="button" class="btn btn-default">
<span class="glyphicon glyphicon-remove" aria-hidden="true"></span>删除
<span class="glyphicon glyphicon-remove" aria-hidden="true"></span>@_sharedLocalizer["DELETE"]
</button>
<button id="btn_export" v-on:click="exportL" type="button" class="btn btn-default">
<span class="glyphicon glyphicon-export" aria-hidden="true"></span>导出

@ -1,4 +1,7 @@
<div class="content-wrapper">
@using Microsoft.AspNetCore.Mvc.Localization
@inject IHtmlLocalizer<YL.Localization.SharedResource> _sharedLocalizer
<div class="content-wrapper">
<section class="content-header">
<h1>
仓库管理
@ -29,7 +32,7 @@
<span class="glyphicon glyphicon-pencil" aria-hidden="true"></span>修改
</button>
<button id="btn_delete" v-on:click="deleteL" type="button" class="btn btn-default">
<span class="glyphicon glyphicon-remove" aria-hidden="true"></span>删除
<span class="glyphicon glyphicon-remove" aria-hidden="true"></span>@_sharedLocalizer["DELETE"]
</button>
</div>
<table id="bootstraptable" class="table table-bordered text-nowrap table-hover"></table>

@ -1,4 +1,7 @@
<div class="content-wrapper">
@using Microsoft.AspNetCore.Mvc.Localization
@inject IHtmlLocalizer<YL.Localization.SharedResource> _sharedLocalizer
<div class="content-wrapper">
<section class="content-header">
<h1>
系统管理
@ -31,7 +34,7 @@
<span class="glyphicon glyphicon-pencil" aria-hidden="true"></span>修改
</button>
<button id="btn_delete" v-on:click="deleteL" type="button" class="btn btn-default">
<span class="glyphicon glyphicon-remove" aria-hidden="true"></span>删除
<span class="glyphicon glyphicon-remove" aria-hidden="true"></span>@_sharedLocalizer["DELETE"]
</button>
<button id="btn_delete" v-on:click="queryL" type="button" class="btn btn-default">
<span class="glyphicon glyphicon-th-large" aria-hidden="true"></span>权限

@ -1,4 +1,7 @@
<div class="content-wrapper">
@using Microsoft.AspNetCore.Mvc.Localization
@inject IHtmlLocalizer<YL.Localization.SharedResource> _sharedLocalizer
<div class="content-wrapper">
<section class="content-header">
<h1>
仓库管理
@ -72,10 +75,10 @@
<span class="glyphicon glyphicon-pencil" aria-hidden="true"></span>修改
</button>
@*<button id="btn_auditin" v-on:click="auditinL" type="button" class="btn btn-default">
<span class="glyphicon glyphicon-ok-circle" aria-hidden="true"></span>审核
</button>*@
<span class="glyphicon glyphicon-ok-circle" aria-hidden="true"></span>审核
</button>*@
<button id="btn_delete" v-on:click="deleteL" type="button" class="btn btn-default">
<span class="glyphicon glyphicon-remove" aria-hidden="true"></span>删除
<span class="glyphicon glyphicon-remove" aria-hidden="true"></span>@_sharedLocalizer["DELETE"]
</button>
</div>
<table id="bootstraptable" class="table table-bordered text-nowrap table-hover"></table>
@ -98,6 +101,15 @@
stockInList: [],
stockInDList: [],
},
computed: {
qParams: function () {
var data = {
StockInStatus: this.StockInStatus,
StockInType: this.StockInType
};
return data;
}
},
mounted: function () {
var _self = this;
_self.$nextTick(function () {
@ -275,7 +287,7 @@
sortable: true,
formatter: function (value, row, index) {
if (value != 2) {
return ['<button id="deleteDetailL" type="button" class="btn btn-link" style="margin-top:-8px;">删除</button>'
return ['<button id="deleteDetailL" type="button" class="btn btn-link" style="margin-top:-8px;">@_sharedLocalizer["CANCEL"]</button>'
, '<button id="editDetailL" type="button" class="btn btn-link" style="margin-top:-8px;">修改</button>'
].join('');
} else {
@ -392,7 +404,7 @@
}
}];
yui.table2("bootstraptable", "/StockIn/List", "/StockIn/ListDetail", obj, objSub, "POST", "StockInId", "StockInId", true, qParams);
yui.table2("bootstraptable", "/StockIn/List", "/StockIn/ListDetail", obj, objSub, "POST", "StockInId", "StockInId", true, _self.qParams);
//yui.table("bootstraptable", "/StockIn/List", obj, "POST", "StockInId", true, qParams);
},
showL: function () {

@ -1,4 +1,7 @@
<div class="content-wrapper">
@using Microsoft.AspNetCore.Mvc.Localization
@inject IHtmlLocalizer<YL.Localization.SharedResource> _sharedLocalizer
<div class="content-wrapper">
<section class="content-header">
<h1>
仓库管理
@ -75,7 +78,7 @@
<span class="glyphicon glyphicon-ok-circle" aria-hidden="true"></span>发货
</button>
<button id="btn_delete" v-on:click="deleteL" type="button" class="btn btn-default">
<span class="glyphicon glyphicon-remove" aria-hidden="true"></span>删除
<span class="glyphicon glyphicon-remove" aria-hidden="true"></span>@_sharedLocalizer["CANCEL"]
</button>
</div>
<table id="bootstraptable" class="table table-bordered text-nowrap table-hover"></table>
@ -98,6 +101,15 @@
stockOutList: [],
stockOutDList: [],
},
computed: {
qParams: function () {
var data = {
StockOutStatus: _self.StockOutStatus,
StockOutType: _self.StockOutType
};
return data;
}
},
mounted: function () {
var _self = this;
_self.$nextTick(function () {
@ -278,7 +290,7 @@
sortable: true,
formatter: function (value, row, index) {
if (value != 2) {
return ['<button id="deleteDetailL" type="button" class="btn btn-link" style="margin-top:-8px;">删除</button>'
return ['<button id="deleteDetailL" type="button" class="btn btn-link" style="margin-top:-8px;">@_sharedLocalizer["DELETE"]</button>'
, '<button id="editDetailL" type="button" class="btn btn-link" style="margin-top:-8px;">修改</button>'
].join('');
} else {
@ -396,7 +408,7 @@
}
}];
yui.table2("bootstraptable", "/StockOut/List", "/StockOut/ListDetail", obj, objSub, "POST", "StockOutId", "StockOutId", true, qParams);
yui.table2("bootstraptable", "/StockOut/List", "/StockOut/ListDetail", obj, objSub, "POST", "StockOutId", "StockOutId", true, _self.qParams);
//yui.table("bootstraptable", "/StockIn/List", obj, "POST", "StockInId", true, qParams);
},
showL: function () {

@ -1,4 +1,7 @@
<div class="content-wrapper">
@using Microsoft.AspNetCore.Mvc.Localization
@inject IHtmlLocalizer<YL.Localization.SharedResource> _sharedLocalizer
<div class="content-wrapper">
<section class="content-header">
<h1>
仓库管理
@ -29,7 +32,7 @@
<span class="glyphicon glyphicon-pencil" aria-hidden="true"></span>修改
</button>
<button id="btn_delete" v-on:click="deleteL" type="button" class="btn btn-default">
<span class="glyphicon glyphicon-remove" aria-hidden="true"></span>删除
<span class="glyphicon glyphicon-remove" aria-hidden="true"></span>@_sharedLocalizer["DELETE"]
</button>
</div>
<table id="bootstraptable" class="table table-bordered text-nowrap table-hover"></table>

@ -1,4 +1,7 @@
<div class="content-wrapper">
@using Microsoft.AspNetCore.Mvc.Localization
@inject IHtmlLocalizer<YL.Localization.SharedResource> _sharedLocalizer
<div class="content-wrapper">
<section class="content-header">
<h1>
基础资料
@ -29,7 +32,7 @@
<span class="glyphicon glyphicon-pencil" aria-hidden="true"></span>修改
</button>
<button id="btn_delete" v-on:click="deleteL" type="button" class="btn btn-default">
<span class="glyphicon glyphicon-remove" aria-hidden="true"></span>删除
<span class="glyphicon glyphicon-remove" aria-hidden="true"></span>@_sharedLocalizer["DELETE"]
</button>
</div>
<table id="bootstraptable" class="table table-bordered text-nowrap table-hover"></table>

@ -1,4 +1,7 @@
<div class="content-wrapper">
@using Microsoft.AspNetCore.Mvc.Localization
@inject IHtmlLocalizer<YL.Localization.SharedResource> _sharedLocalizer
<div class="content-wrapper">
<section class="content-header">
<h1>
仓库管理
@ -29,7 +32,7 @@
<span class="glyphicon glyphicon-pencil" aria-hidden="true"></span>修改
</button>
<button id="btn_delete" v-on:click="deleteL" type="button" class="btn btn-default">
<span class="glyphicon glyphicon-remove" aria-hidden="true"></span>删除
<span class="glyphicon glyphicon-remove" aria-hidden="true"></span>@_sharedLocalizer["DELETE"]
</button>
</div>
<table id="bootstraptable" class="table table-bordered text-nowrap table-hover"></table>

@ -1,9 +1,9 @@
{
"Logging": {
"LogLevel": {
"Default": "Debug",
"System": "Information",
"Microsoft": "Information"
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
}
}

@ -1,13 +1,16 @@
{
"Logging": {
"LogLevel": {
"Default": "Warning"
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"urls": "", //http://*:9099;http://*:9098 "" Kestrel
"SqlSugar": {
"DbType": "MySql", //MySql SqlServer PostgreSQL Oracle Sqlite
"SqlServerConnectionString": "server=127.0.0.1;user id=sa;password=000000;database=kopsoftwms",
"DbType": "SqlServer", //MySql SqlServer PostgreSQL Oracle Sqlite
//"SqlServerConnectionString": "server=127.0.0.1;user id=sa;password=000000;database=kopsoftwms",
"SqlServerConnectionString": "Data Source=(localdb)\\MSSQLLocalDB;Initial Catalog=WMS;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False",
"MySqlConnectionString": "server=127.0.0.1;database=kopsoftwms;port=3306;uid=root;pwd=000000;charset='utf8'",
"PostgreSQLConnectionString": "Host=localhost;Port=5432;Username=postgres;Password=123456;Database=wms",
"OracleConnectionString": "User ID=IFSAPP;Password=IFSAPP;Data Source=(DESCRIPTION = (ADDRESS_LIST=(ADDRESS=(PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521)))(CONNECT_DATA = (SERVICE_NAME = RACE)))",
@ -25,7 +28,8 @@
"keywords": "二维码标签打印软件,WMS仓库管理系统,ERP企业资源计划,日化MES制造执行系统,SCADA数据采集与监控",
"description": "工业信息化自动化解决方案",
"company": "KopSoft",
"customer": "KopSoftWms仓库管理系统"
"customer": "KopSoftWms仓库管理系统",
"title":"KopSoftWms仓库管理系统"
},
"Des": {
"Project": "技术栈",

File diff suppressed because one or more lines are too long

@ -419,7 +419,8 @@
temp.datemin = _self.$refs.datemin.value;
temp.datemax = _self.$refs.datemax.value;
}
return yui.extend(temp, qParams);
return yui.extend(temp, app.qParams);
//return yui.extend(temp, qParams);
//return $.extend(temp, qParams);
},
queryParamsType: 'limit',
@ -487,7 +488,7 @@
temp.datemin = _self.$refs.datemin.value;
temp.datemax = _self.$refs.datemax.value;
}
return yui.extend(temp, qParams);
return yui.extend(temp, app.qParams);
//return $.extend(temp, qParams);
},
//queryParams: function (params) {
@ -568,7 +569,7 @@
temp.datemin = _self.$refs.datemin.value;
temp.datemax = _self.$refs.datemax.value;
}
return yui.extend(temp, qParams);
return yui.extend(temp, app.qParams);
//return $.extend(temp, qParams);
},
//queryParams: function (params) {

File diff suppressed because one or more lines are too long

@ -1,22 +1,44 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<TargetFramework>netstandard2.1</TargetFramework>
<RootNamespace>YL.NetCore</RootNamespace>
<AssemblyName>YL.NetCore</AssemblyName>
<LangVersion>7.1</LangVersion>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Autofac" Version="4.9.2" />
<PackageReference Include="Autofac.Extensions.DependencyInjection" Version="4.4.0" />
<PackageReference Include="Microsoft.AspNetCore.Http.Abstractions" Version="2.2.0" />
<PackageReference Include="Microsoft.AspNetCore.Mvc" Version="2.2.0" />
<PackageReference Include="Microsoft.AspNetCore.ResponseCompression" Version="2.2.0" />
<Compile Remove="Autofac\**" />
<Compile Remove="Conventions\**" />
<Compile Remove="DI\**" />
<Compile Remove="HtmlExtensions\**" />
<Compile Remove="Middlewares\**" />
<EmbeddedResource Remove="Autofac\**" />
<EmbeddedResource Remove="Conventions\**" />
<EmbeddedResource Remove="DI\**" />
<EmbeddedResource Remove="HtmlExtensions\**" />
<EmbeddedResource Remove="Middlewares\**" />
<None Remove="Autofac\**" />
<None Remove="Conventions\**" />
<None Remove="DI\**" />
<None Remove="HtmlExtensions\**" />
<None Remove="Middlewares\**" />
</ItemGroup>
<ItemGroup>
<Compile Include="Autofac\AutofacConfig.cs" />
<Compile Include="Autofac\AutofacResolver.cs" />
<Compile Include="Autofac\ContainerManager.cs" />
<Compile Include="Autofac\IResolver.cs" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Autofac" Version="5.1.2" />
<PackageReference Include="Autofac.Extensions.DependencyInjection" Version="6.0.0" />
<PackageReference Include="Microsoft.Extensions.Caching.Redis" Version="2.2.0" />
<PackageReference Include="Microsoft.Extensions.DependencyModel" Version="2.1.0" />
<PackageReference Include="Microsoft.Extensions.DependencyModel" Version="3.1.3" />
<PackageReference Include="System.Runtime.Loader" Version="4.3.0" />
<PackageReference Include="System.Text.Encodings.Web" Version="4.5.0" />
<PackageReference Include="System.Text.Encodings.Web" Version="4.7.0" />
</ItemGroup>
<ItemGroup>

@ -7,6 +7,7 @@ using Microsoft.AspNetCore.Mvc.Routing;
using Microsoft.AspNetCore.ResponseCompression;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using System;
using System.IO;
using System.IO.Compression;
using System.Linq;
@ -14,14 +15,9 @@ using System.Text.Encodings.Web;
using System.Text.Unicode;
using YL.Utils.Check;
using YL.Utils.Extensions;
using YL.Utils.Json;
using YL.Utils.Log;
using YL.Utils.Security;
using YL.Utils.Json;
using System;
using Microsoft.AspNetCore.Mvc.Controllers;
using Microsoft.Extensions.DependencyInjection.Extensions;
using YL.NetCore.DI;
using Microsoft.AspNetCore.Mvc.Filters;
namespace YL.NetCoreApp.Extensions
{
@ -58,7 +54,8 @@ namespace YL.NetCoreApp.Extensions
public static IServiceCollection AddContextFactory(this IServiceCollection services)
{
return services.AddSingleton<IHttpContextFactory, HttpContextFactory>();
//HttpContextFactory
return services.AddSingleton<IHttpContextFactory, DefaultHttpContextFactory>();
}
/// <summary>
@ -301,13 +298,5 @@ namespace YL.NetCoreApp.Extensions
return services.AddTransient(typeof(Lazy<>));
}
}
public static IServiceCollection AddDIProperty(this IServiceCollection services)
{
//替换控制器构建者类实现控制器和Filter类属性注入功能
services.Replace(ServiceDescriptor.Transient<IControllerActivator, PropertiesAutowiredControllerActivator>());
services.Replace(ServiceDescriptor.Transient<IFilterProvider, PropertiesAutowiredFilterProvider>());
return services;
}
}
}

@ -1,10 +1,7 @@
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Http.Internal;
using System;
using System.Diagnostics;
using System.IO;
using System.Threading.Tasks;
using YL.Utils.Log;
namespace YL.NetCore.Middlewares
{
@ -34,7 +31,8 @@ namespace YL.NetCore.Middlewares
private async Task<string> FormatRequest(HttpRequest request)
{
request.EnableRewind();
//request.EnableRewind();
request.EnableBuffering();
request.Body.Seek(0, SeekOrigin.Begin);
var text = await new StreamReader(request.Body).ReadToEndAsync();
request.Body.Seek(0, SeekOrigin.Begin);

@ -1,15 +1,15 @@
<Project Sdk="Microsoft.NET.Sdk">
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netcoreapp2.2</TargetFramework>
<TargetFramework>netcoreapp3.1</TargetFramework>
<RootNamespace>YL.NetCoreApp</RootNamespace>
<AssemblyName>YL.NetCoreApp</AssemblyName>
<LangVersion>7.1</LangVersion>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Diagnostics" Version="2.2.0" />
<PackageReference Include="Microsoft.AspNetCore.Server.Kestrel.Core" Version="2.2.0" />
<None Remove="DI\PropertiesAutowiredControllerActivator.txt" />
<None Remove="DI\PropertiesAutowiredFilterProvider.txt" />
</ItemGroup>
<ItemGroup>

@ -31,9 +31,9 @@ namespace YL.NetCore.NetCoreApp
{
private IMemoryCache _memory;
private IConfiguration _configuration;
public string AppRoot { get { return CreateService<IHostingEnvironment>().ContentRootPath; } }
public string AppRoot { get { return CreateService<IWebHostEnvironment>().ContentRootPath; } }
public string WebRoot { get { return CreateService<IHostingEnvironment>().WebRootPath; } }
public string WebRoot { get { return CreateService<IWebHostEnvironment>().WebRootPath; } }
protected IMemoryCache GetMemoryCache
{
@ -227,7 +227,7 @@ namespace YL.NetCore.NetCoreApp
var req = HttpContext.Request;
return $"{req.Scheme}://{req.Host}{req.PathBase}{req.Path}{req.QueryString}";
}
protected virtual string GetDisplayUrl()
{
return UriHelper.GetDisplayUrl(HttpContext.Request);
@ -240,7 +240,7 @@ namespace YL.NetCore.NetCoreApp
protected virtual string GetEncodedUrl()
{
return UriHelper.GetEncodedUrl(HttpContext.Request);
return UriHelper.GetEncodedUrl(HttpContext.Request);
}
protected virtual string GetBrowser()

@ -1,15 +1,15 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<TargetFramework>netstandard2.1</TargetFramework>
<RootNamespace>YL.Core.Orm</RootNamespace>
<LangVersion>7.1</LangVersion>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Dapper" Version="1.60.6" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="2.2.0" />
<PackageReference Include="sqlSugarCore" Version="4.9.9.10" />
<PackageReference Include="Dapper" Version="2.0.35" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="3.1.3" />
<PackageReference Include="sqlSugarCore" Version="5.0.0.13" />
</ItemGroup>
<ItemGroup>

@ -76,19 +76,28 @@ namespace YL.Core.Orm.SqlSugar
if (flag.Equals("true", StringComparison.OrdinalIgnoreCase))
{
db.Ado.IsEnableLogEvent = true;
//SQL执行完事件
db.Aop.OnLogExecuted = (sql, pars) =>
{
log.Info(sql);
};
//SQL执行前事件
db.Aop.OnLogExecuting = (sql, pars) =>
{
log.Info(db.Utilities.SerializeObject(pars.ToDictionary(it => it.ParameterName, it => it.Value)));
foreach (var item in pars)
{
sql = sql.Replace(item.ParameterName.ToString(), $"'{item.Value?.ToString()}'");
}
log.Info($"执行前SQL: {sql}");
//log.Info(db.Utilities.SerializeObject(pars.ToDictionary(it => it.ParameterName, it => it.Value)));
};
//SQL执行完事件
db.Aop.OnLogExecuted = (sql, pars) =>
{
foreach (var item in pars)
{
sql = sql.Replace(item.ParameterName.ToString(), $"'{item.Value?.ToString()}'");
}
log.Info($"执行后SQL: {sql}");
};
db.Aop.OnError = (exp) =>//执行SQL 错误事件
{
log.Debug(exp.Message);
log.Debug(exp, exp.Sql);
};
}
else
@ -126,19 +135,28 @@ namespace YL.Core.Orm.SqlSugar
if (flag.Equals("true", StringComparison.OrdinalIgnoreCase))
{
db.Ado.IsEnableLogEvent = true;
//SQL执行完事件
db.Aop.OnLogExecuted = (sql, pars) =>
{
log.Info(sql);
};
//SQL执行前事件
db.Aop.OnLogExecuting = (sql, pars) =>
{
log.Info(db.Utilities.SerializeObject(pars.ToDictionary(it => it.ParameterName, it => it.Value)));
foreach (var item in pars)
{
sql = sql.Replace(item.ParameterName.ToString(), $"'{item.Value?.ToString()}'");
}
log.Info($"执行前SQL: {sql}");
//log.Info(db.Utilities.SerializeObject(pars.ToDictionary(it => it.ParameterName, it => it.Value)));
};
//SQL执行完事件
db.Aop.OnLogExecuted = (sql, pars) =>
{
foreach (var item in pars)
{
sql = sql.Replace(item.ParameterName.ToString(), $"'{item.Value?.ToString()}'");
}
log.Info($"执行后SQL: {sql}");
};
db.Aop.OnError = (exp) =>//执行SQL 错误事件
{
log.Debug(exp.Message + ";;" + exp.Sql);
log.Debug(exp, exp.Sql);
};
}
else
@ -175,19 +193,28 @@ namespace YL.Core.Orm.SqlSugar
if (flag.Equals("true", StringComparison.OrdinalIgnoreCase))
{
db.Ado.IsEnableLogEvent = true;
//SQL执行完事件
db.Aop.OnLogExecuted = (sql, pars) =>
{
log.Info(sql);
};
//SQL执行前事件
db.Aop.OnLogExecuting = (sql, pars) =>
{
log.Info(db.Utilities.SerializeObject(pars.ToDictionary(it => it.ParameterName, it => it.Value)));
foreach (var item in pars)
{
sql = sql.Replace(item.ParameterName.ToString(), $"'{item.Value?.ToString()}'");
}
log.Info($"执行前SQL: {sql}");
//log.Info(db.Utilities.SerializeObject(pars.ToDictionary(it => it.ParameterName, it => it.Value)));
};
//SQL执行完事件
db.Aop.OnLogExecuted = (sql, pars) =>
{
foreach (var item in pars)
{
sql = sql.Replace(item.ParameterName.ToString(), $"'{item.Value?.ToString()}'");
}
log.Info($"执行后SQL: {sql}");
};
db.Aop.OnError = (exp) =>//执行SQL 错误事件
{
log.Debug(exp.Message);
log.Debug(exp, exp.Sql);
};
}
else

@ -5,6 +5,7 @@ using System.Collections.Generic;
using System.Data;
using System.Dynamic;
using System.Linq.Expressions;
using System.Threading.Tasks;
using YL.Utils.Extensions;
using YL.Utils.Json;
using YL.Utils.Table;
@ -22,9 +23,19 @@ namespace Repository
#region add
public bool Insert(T t)
public bool Insert(T t, bool IgnoreNullColumn = true)
{
return _db.Insertable(t).ExecuteCommand() > 0;
return _db.Insertable(t).IgnoreColumns(IgnoreNullColumn).ExecuteCommand() > 0;
}
public bool InsertIgnoreNullColumn(T t)
{
return _db.Insertable(t).IgnoreColumns(true).ExecuteCommand() > 0;
}
public bool InsertIgnoreNullColumn(T t, params string[] columns)
{
return _db.Insertable(t).IgnoreColumns(columns).ExecuteCommand() > 0;
}
public bool Insert(SqlSugarClient client, T t)
@ -42,6 +53,16 @@ namespace Repository
return _db.Insertable(t).ExecuteCommand() > 0;
}
public bool InsertIgnoreNullColumn(List<T> t)
{
return _db.Insertable(t).IgnoreColumns(true).ExecuteCommand() > 0;
}
public bool InsertIgnoreNullColumn(List<T> t, params string[] columns)
{
return _db.Insertable(t).IgnoreColumns(columns).ExecuteCommand() > 0;
}
public DbResult<bool> InsertTran(T t)
{
var result = _db.Ado.UseTran(() =>
@ -132,7 +153,7 @@ namespace Repository
};
}
//_db.Updateable(entity).IgnoreColumns(c => list.Contains(c)).Where(isNull).ExecuteCommand()
return _db.Updateable(entity).IgnoreColumns(isNull).IgnoreColumns(c => list.Contains(c)).ExecuteCommand() > 0;
return _db.Updateable(entity).IgnoreColumns(isNull).IgnoreColumns(list.ToArray()).ExecuteCommand() > 0;
}
public bool Update(List<T> entity)
@ -206,6 +227,11 @@ namespace Repository
return _db.Queryable<T>().Where(expression).ToList();
}
public Task<List<T>> QueryableToListAsync(Expression<Func<T, bool>> expression)
{
return _db.Queryable<T>().Where(expression).ToListAsync();
}
public string QueryableToJson(string select, Expression<Func<T, bool>> expressionWhere)
{
var query = _db.Queryable<T>().Select(select).Where(expressionWhere).ToList();

@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<TargetFramework>netstandard2.1</TargetFramework>
<LangVersion>7.1</LangVersion>
</PropertyGroup>

@ -8,6 +8,7 @@ using System.Linq.Expressions;
using YL.Utils.Table;
using YL.Utils.Extensions;
using System.Data;
using System.Threading.Tasks;
namespace Services
{
@ -23,9 +24,19 @@ namespace Services
#region add
public bool Insert(T t)
public bool Insert(T t, bool IgnoreNullColumn = true)
{
return _baseRepository.Insert(t);
return _baseRepository.Insert(t, IgnoreNullColumn);
}
public bool InsertIgnoreNullColumn(T t)
{
return _baseRepository.InsertIgnoreNullColumn(t);
}
public bool InsertIgnoreNullColumn(T t, params string[] columns)
{
return _baseRepository.InsertIgnoreNullColumn(t, columns);
}
public bool Insert(SqlSugarClient client, T t)
@ -38,6 +49,16 @@ namespace Services
return _baseRepository.Insert(t);
}
public bool InsertIgnoreNullColumn(List<T> t)
{
return _baseRepository.InsertIgnoreNullColumn(t);
}
public bool InsertIgnoreNullColumn(List<T> t, params string[] columns)
{
return _baseRepository.InsertIgnoreNullColumn(t, columns);
}
public long InsertBigIdentity(T t)
{
return _baseRepository.InsertBigIdentity(t);
@ -65,17 +86,17 @@ namespace Services
public bool ExecuteCommand(string sql, object parameters)
{
throw new NotImplementedException();
return _baseRepository.ExecuteCommand(sql, parameters);
}
public bool ExecuteCommand(string sql, params SugarParameter[] parameters)
{
throw new NotImplementedException();
return _baseRepository.ExecuteCommand(sql, parameters);
}
public bool ExecuteCommand(string sql, List<SugarParameter> parameters)
{
throw new NotImplementedException();
return _baseRepository.ExecuteCommand(sql, parameters);
}
#endregion add
@ -196,6 +217,11 @@ namespace Services
return _baseRepository.QueryableToList(expression);
}
public Task<List<T>> QueryableToListAsync(Expression<Func<T, bool>> expression)
{
return _baseRepository.QueryableToListAsync(expression);
}
public List<T> QueryableToList(string tableName)
{
return _baseRepository.QueryableToList(tableName);

@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<TargetFramework>netstandard2.1</TargetFramework>
<LangVersion>7.1</LangVersion>
</PropertyGroup>

@ -6,7 +6,7 @@ using System.Collections.Generic;
using System.Linq;
using YL.Core.Entity;
using YL.Core.Entity.Fluent.Validation;
using YL.NetCore.DI;
using YL.Utils.Env;
using YL.Utils.Extensions;
using YL.Utils.Json;
using YL.Utils.Log;
@ -125,7 +125,7 @@ namespace Services
}
else
{
var _nlog = ServiceResolve.Resolve<ILogUtil>();
var _nlog = GlobalCore.GetRequiredService<ILogUtil>();
_nlog.Debug(flag.ErrorMessage);
return (false, PubConst.Import3);
}

@ -0,0 +1,16 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Text;
namespace YL.Localization
{
[Serializable]
public class LocalizableDescriptionAttribute : DescriptionAttribute
{
public LocalizableDescriptionAttribute(string inClassName)
: base(Resources.SharedResource.ResourceManager.GetString(inClassName))
{ }
}
}

@ -0,0 +1,135 @@
//------------------------------------------------------------------------------
// <auto-generated>
// Этот код создан программой.
// Исполняемая версия:4.0.30319.42000
//
// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае
// повторной генерации кода.
// </auto-generated>
//------------------------------------------------------------------------------
namespace YL.Localization.Resources {
using System;
/// <summary>
/// Класс ресурса со строгой типизацией для поиска локализованных строк и т.д.
/// </summary>
// Этот класс создан автоматически классом StronglyTypedResourceBuilder
// с помощью такого средства, как ResGen или Visual Studio.
// Чтобы добавить или удалить член, измените файл .ResX и снова запустите ResGen
// с параметром /str или перестройте свой проект VS.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
public class SharedResource {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal SharedResource() {
}
/// <summary>
/// Возвращает кэшированный экземпляр ResourceManager, использованный этим классом.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
public static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("YL.Localization.Resources.SharedResource", typeof(SharedResource).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Перезаписывает свойство CurrentUICulture текущего потока для всех
/// обращений к ресурсу с помощью этого класса ресурса со строгой типизацией.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
public static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
/// <summary>
/// Ищет локализованную строку, похожую на Account cannot be empty.
/// </summary>
public static string ACCOUNT_NOT_NULL {
get {
return ResourceManager.GetString("ACCOUNT_NOT_NULL", resourceCulture);
}
}
/// <summary>
/// Ищет локализованную строку, похожую на Cancel.
/// </summary>
public static string CANCEL {
get {
return ResourceManager.GetString("CANCEL", resourceCulture);
}
}
/// <summary>
/// Ищет локализованную строку, похожую на Error.
/// </summary>
public static string ERROR {
get {
return ResourceManager.GetString("ERROR", resourceCulture);
}
}
/// <summary>
/// Ищет локализованную строку, похожую на Exception.
/// </summary>
public static string EXCEPTION {
get {
return ResourceManager.GetString("EXCEPTION", resourceCulture);
}
}
/// <summary>
/// Ищет локализованную строку, похожую на Insert.
/// </summary>
public static string INSERT {
get {
return ResourceManager.GetString("INSERT", resourceCulture);
}
}
/// <summary>
/// Ищет локализованную строку, похожую на Insert or update.
/// </summary>
public static string INSERT_OR_UPDATE {
get {
return ResourceManager.GetString("INSERT_OR_UPDATE", resourceCulture);
}
}
/// <summary>
/// Ищет локализованную строку, похожую на Login.
/// </summary>
public static string LOGIN {
get {
return ResourceManager.GetString("LOGIN", resourceCulture);
}
}
/// <summary>
/// Ищет локализованную строку, похожую на Update.
/// </summary>
public static string UPDATE {
get {
return ResourceManager.GetString("UPDATE", resourceCulture);
}
}
}
}

@ -0,0 +1,144 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="ACCOUNT_NOT_NULL" xml:space="preserve">
<value>账号不能为空</value>
</data>
<data name="CANCEL" xml:space="preserve">
<value>取消</value>
</data>
<data name="ERROR" xml:space="preserve">
<value>错误</value>
</data>
<data name="EXCEPTION" xml:space="preserve">
<value>异常</value>
</data>
<data name="INSERT" xml:space="preserve">
<value>添加</value>
</data>
<data name="INSERT_OR_UPDATE" xml:space="preserve">
<value>添加或修改</value>
</data>
<data name="LOGIN" xml:space="preserve">
<value>登录</value>
</data>
<data name="UPDATE" xml:space="preserve">
<value>修改</value>
</data>
</root>

@ -0,0 +1,144 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="ACCOUNT_NOT_NULL" xml:space="preserve">
<value>Account cannot be empty</value>
</data>
<data name="CANCEL" xml:space="preserve">
<value>Cancel</value>
</data>
<data name="ERROR" xml:space="preserve">
<value>Error</value>
</data>
<data name="EXCEPTION" xml:space="preserve">
<value>Exception</value>
</data>
<data name="INSERT" xml:space="preserve">
<value>Insert</value>
</data>
<data name="INSERT_OR_UPDATE" xml:space="preserve">
<value>Insert or update</value>
</data>
<data name="LOGIN" xml:space="preserve">
<value>Login</value>
</data>
<data name="UPDATE" xml:space="preserve">
<value>Update</value>
</data>
</root>

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save