mirror of
https://gitee.com/dotnetchina/OpenAuth.Net.git
synced 2026-07-28 22:27:59 +08:00
Compare commits
49 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fc8769b058 | ||
|
|
fb84a34b0e | ||
|
|
fdce44ec99 | ||
|
|
5c725b1026 | ||
|
|
fb5f0c35b7 | ||
|
|
82fe559792 | ||
|
|
034632e59b | ||
|
|
ccf8735c62 | ||
|
|
4e4b3f378f | ||
|
|
beaf0e5200 | ||
|
|
b17be2c2a0 | ||
|
|
260ca59a5e | ||
|
|
9ed0e72d36 | ||
|
|
4d7dc9bb49 | ||
|
|
bde3d9dd0f | ||
|
|
ba15b5acb7 | ||
|
|
3ad41d9d4f | ||
|
|
bbc5fb9b4d | ||
|
|
a9fa464896 | ||
|
|
ee2dda2868 | ||
|
|
8fb2e9d529 | ||
|
|
3373a91313 | ||
|
|
495e076dc1 | ||
|
|
9c69df2a36 | ||
|
|
50a848e2af | ||
|
|
4a68c9d215 | ||
|
|
846774fb6c | ||
|
|
d3be765841 | ||
|
|
bf25ea903f | ||
|
|
5abf7fe5bf | ||
|
|
086b73e7b2 | ||
|
|
e65516db22 | ||
|
|
4a5a1cd8e1 | ||
|
|
bb9d4cbcf3 | ||
|
|
fd8da78c43 | ||
|
|
fe42824a03 | ||
|
|
db8b73311b | ||
|
|
ebab9014d4 | ||
|
|
2e102feb3c | ||
|
|
c96224cf8b | ||
|
|
f2665731aa | ||
|
|
6dfac7128d | ||
|
|
6b214d9bf1 | ||
|
|
d0bff17bd7 | ||
|
|
c5d3645b16 | ||
|
|
d29994c8d4 | ||
|
|
22c6fe8b9a | ||
|
|
52a7884699 | ||
|
|
76a8b4975e |
21
CHANGELOG.md
21
CHANGELOG.md
@@ -1,3 +1,24 @@
|
||||
## v6.5
|
||||
|
||||
- **新特性**
|
||||
|
||||
- [新增] 增加知会功能。详情:[知会](http://doc.openauth.net.cn/core/flowinstance.html#%E7%9F%A5%E4%BC%9A);
|
||||
- [新增] 新增增加签逻辑。详情:[加签](http://doc.openauth.net.cn/core/flowinstance.html#%E5%8A%A0%E7%AD%BE);
|
||||
- [新增] 删除CodeSmith生成WebApi;
|
||||
|
||||
- **突破性变化**
|
||||
|
||||
- [新增] 全面调整流程添加逻辑;
|
||||
|
||||
- **问题修复**
|
||||
|
||||
|
||||
- **其他更改**
|
||||
|
||||
|
||||
- **不做实现**
|
||||
|
||||
---
|
||||
## v6.1
|
||||
|
||||
- **新特性**
|
||||
|
||||
46
Dockerfile
Normal file
46
Dockerfile
Normal file
@@ -0,0 +1,46 @@
|
||||
FROM mcr.microsoft.com/dotnet/aspnet:9.0 AS base
|
||||
WORKDIR /app
|
||||
# WebApi
|
||||
EXPOSE 52789
|
||||
# Mvc
|
||||
EXPOSE 1802
|
||||
# Identity
|
||||
EXPOSE 12796
|
||||
|
||||
FROM mcr.microsoft.com/dotnet/sdk:9.0 AS build
|
||||
WORKDIR /src
|
||||
# 将当前目录下的所有文件和文件夹复制到容器的当前工作目录中
|
||||
COPY *.sln ./
|
||||
COPY ["OpenAuth.WebApi/", "./OpenAuth.WebApi/"]
|
||||
COPY ["OpenAuth.Mvc/", "./OpenAuth.Mvc/"]
|
||||
COPY ["OpenAuth.Identity/", "./OpenAuth.Identity/"]
|
||||
COPY ["Infrastructure/", "./Infrastructure/"]
|
||||
COPY ["OpenAuth.App/", "./OpenAuth.App/"]
|
||||
COPY ["OpenAuth.Repository/", "./OpenAuth.Repository/"]
|
||||
|
||||
RUN dotnet restore OpenAuth.Net.sln
|
||||
|
||||
# 发布 WebApi
|
||||
WORKDIR "/src/OpenAuth.WebApi"
|
||||
RUN dotnet publish -c Release -o /app/publish/webapi
|
||||
|
||||
# 发布 Mvc
|
||||
WORKDIR "/src/OpenAuth.Mvc"
|
||||
RUN dotnet publish -c Release -o /app/publish/mvc
|
||||
|
||||
# 发布 Identity
|
||||
WORKDIR "/src/OpenAuth.Identity"
|
||||
RUN dotnet publish -c Release -o /app/publish/identity
|
||||
|
||||
FROM base AS final
|
||||
WORKDIR /app
|
||||
# 复制 WebApi 发布文件
|
||||
COPY --from=build /app/publish/webapi ./webapi
|
||||
# 复制 Mvc 发布文件
|
||||
COPY --from=build /app/publish/mvc ./mvc
|
||||
# 复制 Identity 发布文件
|
||||
COPY --from=build /app/publish/identity ./identity
|
||||
|
||||
# 启动 WebApi, Mvc, 和 Identity,就算失败也保持运行,方便查询日志
|
||||
ENTRYPOINT ["sh", "-c", "cd webapi && dotnet OpenAuth.WebApi.dll & cd mvc && dotnet OpenAuth.Mvc.dll & cd identity && dotnet OpenAuth.IdentityServer.dll || tail -f /dev/null"]
|
||||
|
||||
@@ -546,30 +546,7 @@ namespace Infrastructure.Extensions
|
||||
}
|
||||
return info;
|
||||
}
|
||||
|
||||
public static byte[] ToBytes(this object obj)
|
||||
{
|
||||
if (obj == null)
|
||||
return null;
|
||||
var bf = new BinaryFormatter();
|
||||
using (var ms = new MemoryStream())
|
||||
{
|
||||
bf.Serialize(ms, obj);
|
||||
return ms.ToArray();
|
||||
}
|
||||
}
|
||||
|
||||
public static object ToObject(this byte[] source)
|
||||
{
|
||||
using (var memStream = new MemoryStream())
|
||||
{
|
||||
var bf = new BinaryFormatter();
|
||||
memStream.Write(source, 0, source.Length);
|
||||
memStream.Seek(0, SeekOrigin.Begin);
|
||||
var obj = bf.Deserialize(memStream);
|
||||
return obj;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 将object转换为char类型信息。
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<TargetFramework>net9.0</TargetFramework>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
||||
@@ -10,7 +10,7 @@
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="AutoMapper" Version="9.0.0" />
|
||||
<PackageReference Include="AutoMapper" Version="13.0.1" />
|
||||
<PackageReference Include="EnyimMemcachedCore" Version="2.5.3" />
|
||||
<PackageReference Include="log4net" Version="2.0.12" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Http" Version="2.2.2" />
|
||||
@@ -21,7 +21,7 @@
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.5.0" />
|
||||
<PackageReference Include="NUnit3TestAdapter" Version="3.17.0" />
|
||||
<PackageReference Include="SixLabors.ImageSharp" Version="1.0.2" />
|
||||
<PackageReference Include="SqlSugarCore" Version="5.1.4.102" />
|
||||
<PackageReference Include="SqlSugarCore" Version="5.1.4.170" />
|
||||
<PackageReference Include="StackExchange.Redis" Version="2.2.4" />
|
||||
</ItemGroup>
|
||||
|
||||
|
||||
705
LICENSE
705
LICENSE
@@ -1,504 +1,201 @@
|
||||
GNU LESSER GENERAL PUBLIC LICENSE
|
||||
Version 2.1, February 1999
|
||||
|
||||
Copyright (C) 1991, 1999 Free Software Foundation, Inc.
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
[This is the first released version of the Lesser GPL. It also counts
|
||||
as the successor of the GNU Library Public License, version 2, hence
|
||||
the version number 2.1.]
|
||||
|
||||
Preamble
|
||||
|
||||
The licenses for most software are designed to take away your
|
||||
freedom to share and change it. By contrast, the GNU General Public
|
||||
Licenses are intended to guarantee your freedom to share and change
|
||||
free software--to make sure the software is free for all its users.
|
||||
|
||||
This license, the Lesser General Public License, applies to some
|
||||
specially designated software packages--typically libraries--of the
|
||||
Free Software Foundation and other authors who decide to use it. You
|
||||
can use it too, but we suggest you first think carefully about whether
|
||||
this license or the ordinary General Public License is the better
|
||||
strategy to use in any particular case, based on the explanations below.
|
||||
|
||||
When we speak of free software, we are referring to freedom of use,
|
||||
not price. Our General Public Licenses are designed to make sure that
|
||||
you have the freedom to distribute copies of free software (and charge
|
||||
for this service if you wish); that you receive source code or can get
|
||||
it if you want it; that you can change the software and use pieces of
|
||||
it in new free programs; and that you are informed that you can do
|
||||
these things.
|
||||
|
||||
To protect your rights, we need to make restrictions that forbid
|
||||
distributors to deny you these rights or to ask you to surrender these
|
||||
rights. These restrictions translate to certain responsibilities for
|
||||
you if you distribute copies of the library or if you modify it.
|
||||
|
||||
For example, if you distribute copies of the library, whether gratis
|
||||
or for a fee, you must give the recipients all the rights that we gave
|
||||
you. You must make sure that they, too, receive or can get the source
|
||||
code. If you link other code with the library, you must provide
|
||||
complete object files to the recipients, so that they can relink them
|
||||
with the library after making changes to the library and recompiling
|
||||
it. And you must show them these terms so they know their rights.
|
||||
|
||||
We protect your rights with a two-step method: (1) we copyright the
|
||||
library, and (2) we offer you this license, which gives you legal
|
||||
permission to copy, distribute and/or modify the library.
|
||||
|
||||
To protect each distributor, we want to make it very clear that
|
||||
there is no warranty for the free library. Also, if the library is
|
||||
modified by someone else and passed on, the recipients should know
|
||||
that what they have is not the original version, so that the original
|
||||
author's reputation will not be affected by problems that might be
|
||||
introduced by others.
|
||||
|
||||
Finally, software patents pose a constant threat to the existence of
|
||||
any free program. We wish to make sure that a company cannot
|
||||
effectively restrict the users of a free program by obtaining a
|
||||
restrictive license from a patent holder. Therefore, we insist that
|
||||
any patent license obtained for a version of the library must be
|
||||
consistent with the full freedom of use specified in this license.
|
||||
|
||||
Most GNU software, including some libraries, is covered by the
|
||||
ordinary GNU General Public License. This license, the GNU Lesser
|
||||
General Public License, applies to certain designated libraries, and
|
||||
is quite different from the ordinary General Public License. We use
|
||||
this license for certain libraries in order to permit linking those
|
||||
libraries into non-free programs.
|
||||
|
||||
When a program is linked with a library, whether statically or using
|
||||
a shared library, the combination of the two is legally speaking a
|
||||
combined work, a derivative of the original library. The ordinary
|
||||
General Public License therefore permits such linking only if the
|
||||
entire combination fits its criteria of freedom. The Lesser General
|
||||
Public License permits more lax criteria for linking other code with
|
||||
the library.
|
||||
|
||||
We call this license the "Lesser" General Public License because it
|
||||
does Less to protect the user's freedom than the ordinary General
|
||||
Public License. It also provides other free software developers Less
|
||||
of an advantage over competing non-free programs. These disadvantages
|
||||
are the reason we use the ordinary General Public License for many
|
||||
libraries. However, the Lesser license provides advantages in certain
|
||||
special circumstances.
|
||||
|
||||
For example, on rare occasions, there may be a special need to
|
||||
encourage the widest possible use of a certain library, so that it becomes
|
||||
a de-facto standard. To achieve this, non-free programs must be
|
||||
allowed to use the library. A more frequent case is that a free
|
||||
library does the same job as widely used non-free libraries. In this
|
||||
case, there is little to gain by limiting the free library to free
|
||||
software only, so we use the Lesser General Public License.
|
||||
|
||||
In other cases, permission to use a particular library in non-free
|
||||
programs enables a greater number of people to use a large body of
|
||||
free software. For example, permission to use the GNU C Library in
|
||||
non-free programs enables many more people to use the whole GNU
|
||||
operating system, as well as its variant, the GNU/Linux operating
|
||||
system.
|
||||
|
||||
Although the Lesser General Public License is Less protective of the
|
||||
users' freedom, it does ensure that the user of a program that is
|
||||
linked with the Library has the freedom and the wherewithal to run
|
||||
that program using a modified version of the Library.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow. Pay close attention to the difference between a
|
||||
"work based on the library" and a "work that uses the library". The
|
||||
former contains code derived from the library, whereas the latter must
|
||||
be combined with the library in order to run.
|
||||
|
||||
GNU LESSER GENERAL PUBLIC LICENSE
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. This License Agreement applies to any software library or other
|
||||
program which contains a notice placed by the copyright holder or
|
||||
other authorized party saying it may be distributed under the terms of
|
||||
this Lesser General Public License (also called "this License").
|
||||
Each licensee is addressed as "you".
|
||||
|
||||
A "library" means a collection of software functions and/or data
|
||||
prepared so as to be conveniently linked with application programs
|
||||
(which use some of those functions and data) to form executables.
|
||||
|
||||
The "Library", below, refers to any such software library or work
|
||||
which has been distributed under these terms. A "work based on the
|
||||
Library" means either the Library or any derivative work under
|
||||
copyright law: that is to say, a work containing the Library or a
|
||||
portion of it, either verbatim or with modifications and/or translated
|
||||
straightforwardly into another language. (Hereinafter, translation is
|
||||
included without limitation in the term "modification".)
|
||||
|
||||
"Source code" for a work means the preferred form of the work for
|
||||
making modifications to it. For a library, complete source code means
|
||||
all the source code for all modules it contains, plus any associated
|
||||
interface definition files, plus the scripts used to control compilation
|
||||
and installation of the library.
|
||||
|
||||
Activities other than copying, distribution and modification are not
|
||||
covered by this License; they are outside its scope. The act of
|
||||
running a program using the Library is not restricted, and output from
|
||||
such a program is covered only if its contents constitute a work based
|
||||
on the Library (independent of the use of the Library in a tool for
|
||||
writing it). Whether that is true depends on what the Library does
|
||||
and what the program that uses the Library does.
|
||||
|
||||
1. You may copy and distribute verbatim copies of the Library's
|
||||
complete source code as you receive it, in any medium, provided that
|
||||
you conspicuously and appropriately publish on each copy an
|
||||
appropriate copyright notice and disclaimer of warranty; keep intact
|
||||
all the notices that refer to this License and to the absence of any
|
||||
warranty; and distribute a copy of this License along with the
|
||||
Library.
|
||||
|
||||
You may charge a fee for the physical act of transferring a copy,
|
||||
and you may at your option offer warranty protection in exchange for a
|
||||
fee.
|
||||
|
||||
2. You may modify your copy or copies of the Library or any portion
|
||||
of it, thus forming a work based on the Library, and copy and
|
||||
distribute such modifications or work under the terms of Section 1
|
||||
above, provided that you also meet all of these conditions:
|
||||
|
||||
a) The modified work must itself be a software library.
|
||||
|
||||
b) You must cause the files modified to carry prominent notices
|
||||
stating that you changed the files and the date of any change.
|
||||
|
||||
c) You must cause the whole of the work to be licensed at no
|
||||
charge to all third parties under the terms of this License.
|
||||
|
||||
d) If a facility in the modified Library refers to a function or a
|
||||
table of data to be supplied by an application program that uses
|
||||
the facility, other than as an argument passed when the facility
|
||||
is invoked, then you must make a good faith effort to ensure that,
|
||||
in the event an application does not supply such function or
|
||||
table, the facility still operates, and performs whatever part of
|
||||
its purpose remains meaningful.
|
||||
|
||||
(For example, a function in a library to compute square roots has
|
||||
a purpose that is entirely well-defined independent of the
|
||||
application. Therefore, Subsection 2d requires that any
|
||||
application-supplied function or table used by this function must
|
||||
be optional: if the application does not supply it, the square
|
||||
root function must still compute square roots.)
|
||||
|
||||
These requirements apply to the modified work as a whole. If
|
||||
identifiable sections of that work are not derived from the Library,
|
||||
and can be reasonably considered independent and separate works in
|
||||
themselves, then this License, and its terms, do not apply to those
|
||||
sections when you distribute them as separate works. But when you
|
||||
distribute the same sections as part of a whole which is a work based
|
||||
on the Library, the distribution of the whole must be on the terms of
|
||||
this License, whose permissions for other licensees extend to the
|
||||
entire whole, and thus to each and every part regardless of who wrote
|
||||
it.
|
||||
|
||||
Thus, it is not the intent of this section to claim rights or contest
|
||||
your rights to work written entirely by you; rather, the intent is to
|
||||
exercise the right to control the distribution of derivative or
|
||||
collective works based on the Library.
|
||||
|
||||
In addition, mere aggregation of another work not based on the Library
|
||||
with the Library (or with a work based on the Library) on a volume of
|
||||
a storage or distribution medium does not bring the other work under
|
||||
the scope of this License.
|
||||
|
||||
3. You may opt to apply the terms of the ordinary GNU General Public
|
||||
License instead of this License to a given copy of the Library. To do
|
||||
this, you must alter all the notices that refer to this License, so
|
||||
that they refer to the ordinary GNU General Public License, version 2,
|
||||
instead of to this License. (If a newer version than version 2 of the
|
||||
ordinary GNU General Public License has appeared, then you can specify
|
||||
that version instead if you wish.) Do not make any other change in
|
||||
these notices.
|
||||
|
||||
Once this change is made in a given copy, it is irreversible for
|
||||
that copy, so the ordinary GNU General Public License applies to all
|
||||
subsequent copies and derivative works made from that copy.
|
||||
|
||||
This option is useful when you wish to copy part of the code of
|
||||
the Library into a program that is not a library.
|
||||
|
||||
4. You may copy and distribute the Library (or a portion or
|
||||
derivative of it, under Section 2) in object code or executable form
|
||||
under the terms of Sections 1 and 2 above provided that you accompany
|
||||
it with the complete corresponding machine-readable source code, which
|
||||
must be distributed under the terms of Sections 1 and 2 above on a
|
||||
medium customarily used for software interchange.
|
||||
|
||||
If distribution of object code is made by offering access to copy
|
||||
from a designated place, then offering equivalent access to copy the
|
||||
source code from the same place satisfies the requirement to
|
||||
distribute the source code, even though third parties are not
|
||||
compelled to copy the source along with the object code.
|
||||
|
||||
5. A program that contains no derivative of any portion of the
|
||||
Library, but is designed to work with the Library by being compiled or
|
||||
linked with it, is called a "work that uses the Library". Such a
|
||||
work, in isolation, is not a derivative work of the Library, and
|
||||
therefore falls outside the scope of this License.
|
||||
|
||||
However, linking a "work that uses the Library" with the Library
|
||||
creates an executable that is a derivative of the Library (because it
|
||||
contains portions of the Library), rather than a "work that uses the
|
||||
library". The executable is therefore covered by this License.
|
||||
Section 6 states terms for distribution of such executables.
|
||||
|
||||
When a "work that uses the Library" uses material from a header file
|
||||
that is part of the Library, the object code for the work may be a
|
||||
derivative work of the Library even though the source code is not.
|
||||
Whether this is true is especially significant if the work can be
|
||||
linked without the Library, or if the work is itself a library. The
|
||||
threshold for this to be true is not precisely defined by law.
|
||||
|
||||
If such an object file uses only numerical parameters, data
|
||||
structure layouts and accessors, and small macros and small inline
|
||||
functions (ten lines or less in length), then the use of the object
|
||||
file is unrestricted, regardless of whether it is legally a derivative
|
||||
work. (Executables containing this object code plus portions of the
|
||||
Library will still fall under Section 6.)
|
||||
|
||||
Otherwise, if the work is a derivative of the Library, you may
|
||||
distribute the object code for the work under the terms of Section 6.
|
||||
Any executables containing that work also fall under Section 6,
|
||||
whether or not they are linked directly with the Library itself.
|
||||
|
||||
6. As an exception to the Sections above, you may also combine or
|
||||
link a "work that uses the Library" with the Library to produce a
|
||||
work containing portions of the Library, and distribute that work
|
||||
under terms of your choice, provided that the terms permit
|
||||
modification of the work for the customer's own use and reverse
|
||||
engineering for debugging such modifications.
|
||||
|
||||
You must give prominent notice with each copy of the work that the
|
||||
Library is used in it and that the Library and its use are covered by
|
||||
this License. You must supply a copy of this License. If the work
|
||||
during execution displays copyright notices, you must include the
|
||||
copyright notice for the Library among them, as well as a reference
|
||||
directing the user to the copy of this License. Also, you must do one
|
||||
of these things:
|
||||
|
||||
a) Accompany the work with the complete corresponding
|
||||
machine-readable source code for the Library including whatever
|
||||
changes were used in the work (which must be distributed under
|
||||
Sections 1 and 2 above); and, if the work is an executable linked
|
||||
with the Library, with the complete machine-readable "work that
|
||||
uses the Library", as object code and/or source code, so that the
|
||||
user can modify the Library and then relink to produce a modified
|
||||
executable containing the modified Library. (It is understood
|
||||
that the user who changes the contents of definitions files in the
|
||||
Library will not necessarily be able to recompile the application
|
||||
to use the modified definitions.)
|
||||
|
||||
b) Use a suitable shared library mechanism for linking with the
|
||||
Library. A suitable mechanism is one that (1) uses at run time a
|
||||
copy of the library already present on the user's computer system,
|
||||
rather than copying library functions into the executable, and (2)
|
||||
will operate properly with a modified version of the library, if
|
||||
the user installs one, as long as the modified version is
|
||||
interface-compatible with the version that the work was made with.
|
||||
|
||||
c) Accompany the work with a written offer, valid for at
|
||||
least three years, to give the same user the materials
|
||||
specified in Subsection 6a, above, for a charge no more
|
||||
than the cost of performing this distribution.
|
||||
|
||||
d) If distribution of the work is made by offering access to copy
|
||||
from a designated place, offer equivalent access to copy the above
|
||||
specified materials from the same place.
|
||||
|
||||
e) Verify that the user has already received a copy of these
|
||||
materials or that you have already sent this user a copy.
|
||||
|
||||
For an executable, the required form of the "work that uses the
|
||||
Library" must include any data and utility programs needed for
|
||||
reproducing the executable from it. However, as a special exception,
|
||||
the materials to be distributed need not include anything that is
|
||||
normally distributed (in either source or binary form) with the major
|
||||
components (compiler, kernel, and so on) of the operating system on
|
||||
which the executable runs, unless that component itself accompanies
|
||||
the executable.
|
||||
|
||||
It may happen that this requirement contradicts the license
|
||||
restrictions of other proprietary libraries that do not normally
|
||||
accompany the operating system. Such a contradiction means you cannot
|
||||
use both them and the Library together in an executable that you
|
||||
distribute.
|
||||
|
||||
7. You may place library facilities that are a work based on the
|
||||
Library side-by-side in a single library together with other library
|
||||
facilities not covered by this License, and distribute such a combined
|
||||
library, provided that the separate distribution of the work based on
|
||||
the Library and of the other library facilities is otherwise
|
||||
permitted, and provided that you do these two things:
|
||||
|
||||
a) Accompany the combined library with a copy of the same work
|
||||
based on the Library, uncombined with any other library
|
||||
facilities. This must be distributed under the terms of the
|
||||
Sections above.
|
||||
|
||||
b) Give prominent notice with the combined library of the fact
|
||||
that part of it is a work based on the Library, and explaining
|
||||
where to find the accompanying uncombined form of the same work.
|
||||
|
||||
8. You may not copy, modify, sublicense, link with, or distribute
|
||||
the Library except as expressly provided under this License. Any
|
||||
attempt otherwise to copy, modify, sublicense, link with, or
|
||||
distribute the Library is void, and will automatically terminate your
|
||||
rights under this License. However, parties who have received copies,
|
||||
or rights, from you under this License will not have their licenses
|
||||
terminated so long as such parties remain in full compliance.
|
||||
|
||||
9. You are not required to accept this License, since you have not
|
||||
signed it. However, nothing else grants you permission to modify or
|
||||
distribute the Library or its derivative works. These actions are
|
||||
prohibited by law if you do not accept this License. Therefore, by
|
||||
modifying or distributing the Library (or any work based on the
|
||||
Library), you indicate your acceptance of this License to do so, and
|
||||
all its terms and conditions for copying, distributing or modifying
|
||||
the Library or works based on it.
|
||||
|
||||
10. Each time you redistribute the Library (or any work based on the
|
||||
Library), the recipient automatically receives a license from the
|
||||
original licensor to copy, distribute, link with or modify the Library
|
||||
subject to these terms and conditions. You may not impose any further
|
||||
restrictions on the recipients' exercise of the rights granted herein.
|
||||
You are not responsible for enforcing compliance by third parties with
|
||||
this License.
|
||||
|
||||
11. If, as a consequence of a court judgment or allegation of patent
|
||||
infringement or for any other reason (not limited to patent issues),
|
||||
conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot
|
||||
distribute so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you
|
||||
may not distribute the Library at all. For example, if a patent
|
||||
license would not permit royalty-free redistribution of the Library by
|
||||
all those who receive copies directly or indirectly through you, then
|
||||
the only way you could satisfy both it and this License would be to
|
||||
refrain entirely from distribution of the Library.
|
||||
|
||||
If any portion of this section is held invalid or unenforceable under any
|
||||
particular circumstance, the balance of the section is intended to apply,
|
||||
and the section as a whole is intended to apply in other circumstances.
|
||||
|
||||
It is not the purpose of this section to induce you to infringe any
|
||||
patents or other property right claims or to contest validity of any
|
||||
such claims; this section has the sole purpose of protecting the
|
||||
integrity of the free software distribution system which is
|
||||
implemented by public license practices. Many people have made
|
||||
generous contributions to the wide range of software distributed
|
||||
through that system in reliance on consistent application of that
|
||||
system; it is up to the author/donor to decide if he or she is willing
|
||||
to distribute software through any other system and a licensee cannot
|
||||
impose that choice.
|
||||
|
||||
This section is intended to make thoroughly clear what is believed to
|
||||
be a consequence of the rest of this License.
|
||||
|
||||
12. If the distribution and/or use of the Library is restricted in
|
||||
certain countries either by patents or by copyrighted interfaces, the
|
||||
original copyright holder who places the Library under this License may add
|
||||
an explicit geographical distribution limitation excluding those countries,
|
||||
so that distribution is permitted only in or among countries not thus
|
||||
excluded. In such case, this License incorporates the limitation as if
|
||||
written in the body of this License.
|
||||
|
||||
13. The Free Software Foundation may publish revised and/or new
|
||||
versions of the Lesser General Public License from time to time.
|
||||
Such new versions will be similar in spirit to the present version,
|
||||
but may differ in detail to address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the Library
|
||||
specifies a version number of this License which applies to it and
|
||||
"any later version", you have the option of following the terms and
|
||||
conditions either of that version or of any later version published by
|
||||
the Free Software Foundation. If the Library does not specify a
|
||||
license version number, you may choose any version ever published by
|
||||
the Free Software Foundation.
|
||||
|
||||
14. If you wish to incorporate parts of the Library into other free
|
||||
programs whose distribution conditions are incompatible with these,
|
||||
write to the author to ask for permission. For software which is
|
||||
copyrighted by the Free Software Foundation, write to the Free
|
||||
Software Foundation; we sometimes make exceptions for this. Our
|
||||
decision will be guided by the two goals of preserving the free status
|
||||
of all derivatives of our free software and of promoting the sharing
|
||||
and reuse of software generally.
|
||||
|
||||
NO WARRANTY
|
||||
|
||||
15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
|
||||
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
|
||||
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
|
||||
OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
|
||||
KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
|
||||
LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
|
||||
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||
|
||||
16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
|
||||
WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
|
||||
AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
|
||||
FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
|
||||
CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
|
||||
LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
|
||||
RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
|
||||
FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
|
||||
SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
|
||||
DAMAGES.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Libraries
|
||||
|
||||
If you develop a new library, and you want it to be of the greatest
|
||||
possible use to the public, we recommend making it free software that
|
||||
everyone can redistribute and change. You can do so by permitting
|
||||
redistribution under these terms (or, alternatively, under the terms of the
|
||||
ordinary General Public License).
|
||||
|
||||
To apply these terms, attach the following notices to the library. It is
|
||||
safest to attach them to the start of each source file to most effectively
|
||||
convey the exclusion of warranty; and each file should have at least the
|
||||
"copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the library's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
This library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with this library; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
|
||||
USA
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
You should also get your employer (if you work as a programmer) or your
|
||||
school, if any, to sign a "copyright disclaimer" for the library, if
|
||||
necessary. Here is a sample; alter the names:
|
||||
|
||||
Yoyodyne, Inc., hereby disclaims all copyright interest in the
|
||||
library `Frob' (a library for tweaking knobs) written by James Random
|
||||
Hacker.
|
||||
|
||||
<signature of Ty Coon>, 1 April 1990
|
||||
Ty Coon, President of Vice
|
||||
|
||||
That's all there is to it!
|
||||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
APPENDIX: How to apply the Apache License to your work.
|
||||
|
||||
To apply the Apache License to your work, attach the following
|
||||
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||
replaced with your own identifying information. (Don't include
|
||||
the brackets!) The text should be enclosed in the appropriate
|
||||
comment syntax for the file format. We also recommend that a
|
||||
file or class name and description of purpose be included on the
|
||||
same "printed page" as the copyright notice for easier
|
||||
identification within third-party archives.
|
||||
|
||||
Copyright [yyyy] [name of copyright owner]
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
|
||||
@@ -43,7 +43,7 @@ namespace OpenAuth.App
|
||||
get {
|
||||
var moduleIds = SugarClient.Queryable<Relevance>().Where(
|
||||
u =>
|
||||
(u.Key == Define.ROLEMODULE && _userRoleIds.Contains(u.FirstId))).Select(u => u.SecondId).ToList();
|
||||
u.Key == Define.ROLEMODULE && _userRoleIds.Contains(u.FirstId)).Select(u => u.SecondId).ToList();
|
||||
var elementIds = GetElementIds();
|
||||
|
||||
return SugarClient.Queryable<ModuleView>().Where(m =>moduleIds.Contains(m.Id))
|
||||
@@ -70,7 +70,7 @@ namespace OpenAuth.App
|
||||
{
|
||||
var elementIds = SugarClient.Queryable<Relevance>().Where(
|
||||
u =>
|
||||
(u.Key == Define.ROLEELEMENT && _userRoleIds.Contains(u.FirstId))).Select(u => u.SecondId).ToList();
|
||||
u.Key == Define.ROLEELEMENT && _userRoleIds.Contains(u.FirstId)).Select(u => u.SecondId).ToList();
|
||||
return elementIds;
|
||||
}
|
||||
|
||||
@@ -85,7 +85,7 @@ namespace OpenAuth.App
|
||||
{
|
||||
var resourceIds = SugarClient.Queryable<Relevance>().Where(
|
||||
u =>
|
||||
(u.Key == Define.ROLERESOURCE && _userRoleIds.Contains(u.FirstId))).Select(u => u.SecondId).ToList();
|
||||
u.Key == Define.ROLERESOURCE && _userRoleIds.Contains(u.FirstId)).Select(u => u.SecondId).ToList();
|
||||
return SugarClient.Queryable<Resource>().Where(u => resourceIds.Contains(u.Id)).ToList();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -33,16 +33,16 @@ namespace OpenAuth.App.Flow
|
||||
/// </summary>
|
||||
public FlowRuntime(FlowInstance instance)
|
||||
{
|
||||
dynamic schemeContentJson = instance.SchemeContent.ToJson();//获取工作流模板内容的json对象;
|
||||
dynamic schemeContentJson = instance.SchemeContent.ToJson(); //获取工作流模板内容的json对象;
|
||||
|
||||
InitLines(schemeContentJson);
|
||||
InitNodes(schemeContentJson);
|
||||
|
||||
currentNodeId = (instance.ActivityId == "" ? startNodeId : instance.ActivityId);
|
||||
currentNodeId = instance.ActivityId == "" ? startNodeId : instance.ActivityId;
|
||||
currentNodeType = GetNodeType(currentNodeId);
|
||||
FrmData = instance.FrmData;
|
||||
title = schemeContentJson.title;
|
||||
initNum = schemeContentJson.initNum?? 0;
|
||||
initNum = schemeContentJson.initNum ?? 0;
|
||||
previousId = instance.PreviousId;
|
||||
flowInstanceId = instance.Id;
|
||||
|
||||
@@ -54,7 +54,7 @@ namespace OpenAuth.App.Flow
|
||||
}
|
||||
else
|
||||
{
|
||||
nextNodeId = GetNextNodeId();//下一个节点
|
||||
nextNodeId = GetNextNodeId(); //下一个节点
|
||||
nextNodeType = GetNodeType(nextNodeId);
|
||||
}
|
||||
}
|
||||
@@ -76,6 +76,7 @@ namespace OpenAuth.App.Flow
|
||||
{
|
||||
Nodes.Add(node.id, node);
|
||||
}
|
||||
|
||||
if (node.type == FlowNode.START)
|
||||
{
|
||||
this.startNodeId = node.id;
|
||||
@@ -128,12 +129,12 @@ namespace OpenAuth.App.Flow
|
||||
|
||||
if (FrmData == "" || FrmData == "{}") return lines[0].to;
|
||||
|
||||
FrmData = FrmData.ToLower();//统一转小写
|
||||
var frmDataJson = FrmData.ToJObject();//获取数据内容
|
||||
FrmData = FrmData.ToLower(); //统一转小写
|
||||
var frmDataJson = FrmData.ToJObject(); //获取数据内容
|
||||
|
||||
foreach (var l in lines)
|
||||
{
|
||||
if (!(l.Compares.IsNullOrEmpty()) &&l.Compare(frmDataJson))
|
||||
if (!l.Compares.IsNullOrEmpty() && l.Compare(frmDataJson))
|
||||
{
|
||||
return l.to;
|
||||
}
|
||||
@@ -162,6 +163,7 @@ namespace OpenAuth.App.Flow
|
||||
{
|
||||
return GetNodeType(nextNodeId);
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
@@ -198,23 +200,23 @@ namespace OpenAuth.App.Flow
|
||||
/// <param name="nodeId">会签时,currentNodeId是会签开始节点。这个表示当前正在处理的节点</param>
|
||||
/// <param name="tag"></param>
|
||||
/// <returns>-1不通过,1等待,其它通过</returns>
|
||||
public string NodeConfluence(string nodeId, Tag tag)
|
||||
public string NodeConfluence(HttpClient httpClient, string nodeId, Tag tag)
|
||||
{
|
||||
var forkNode = Nodes[currentNodeId]; //会签开始节点
|
||||
var forkNode = Nodes[currentNodeId]; //会签开始节点
|
||||
FlowNode nextNode = GetNextNode(nodeId); //获取当前处理的下一个节点
|
||||
|
||||
int forkNumber = FromNodeLines[currentNodeId].Count; //直接与会签节点连接的点,即会签分支数目
|
||||
string res =string.Empty; //记录会签的结果,默认正在会签
|
||||
int forkNumber = FromNodeLines[currentNodeId].Count; //直接与会签节点连接的点,即会签分支数目
|
||||
string res = string.Empty; //记录会签的结果,默认正在会签
|
||||
if (forkNode.setInfo.NodeConfluenceType == "one") //有一个步骤通过即可
|
||||
{
|
||||
if (tag.Taged == (int) TagState.Ok)
|
||||
if (tag.Taged == (int)TagState.Ok)
|
||||
{
|
||||
if (nextNode.type == FlowNode.JOIN) //下一个节点是会签结束,则该线路结束
|
||||
if (nextNode.type == FlowNode.JOIN) //下一个节点是会签结束,则该线路结束
|
||||
{
|
||||
res = GetNextNodeId(nextNode.id);
|
||||
}
|
||||
}
|
||||
else if(tag.Taged ==(int) TagState.No)
|
||||
else if (tag.Taged == (int)TagState.No)
|
||||
{
|
||||
if (forkNode.setInfo.ConfluenceNo == null)
|
||||
{
|
||||
@@ -226,11 +228,11 @@ namespace OpenAuth.App.Flow
|
||||
}
|
||||
else
|
||||
{
|
||||
bool isFirst = true; //是不是从会签开始到现在第一个
|
||||
bool isFirst = true; //是不是从会签开始到现在第一个
|
||||
var preNode = GetPreNode(nodeId);
|
||||
while (preNode.id != forkNode.id) //反向一直到会签开始节点
|
||||
{
|
||||
if (preNode.setInfo != null && preNode.setInfo.Taged == (int) TagState.No)
|
||||
if (preNode.setInfo != null && preNode.setInfo.Taged == (int)TagState.No)
|
||||
{
|
||||
isFirst = false;
|
||||
break;
|
||||
@@ -246,19 +248,19 @@ namespace OpenAuth.App.Flow
|
||||
}
|
||||
else //默认所有步骤通过
|
||||
{
|
||||
if (tag.Taged == (int) TagState.No) //只要有一个不同意,那么流程就结束
|
||||
if (tag.Taged == (int)TagState.No) //只要有一个不同意,那么流程就结束
|
||||
{
|
||||
res = TagState.No.ToString("D");
|
||||
}
|
||||
else if(tag.Taged == (int)TagState.Ok)
|
||||
else if (tag.Taged == (int)TagState.Ok)
|
||||
{
|
||||
if (nextNode.type == FlowNode.JOIN) //这种模式下只有坚持到【会签结束】节点之前才有意义,是否需要判定这条线所有的节点都通过,不然直接执行这个节点??
|
||||
if (nextNode.type == FlowNode.JOIN) //这种模式下只有坚持到【会签结束】节点之前才有意义,是否需要判定这条线所有的节点都通过,不然直接执行这个节点??
|
||||
{
|
||||
if (forkNode.setInfo.ConfluenceOk == null)
|
||||
{
|
||||
forkNode.setInfo.ConfluenceOk = 1;
|
||||
}
|
||||
else if (forkNode.setInfo.ConfluenceOk == (forkNumber - 1)) //会签成功
|
||||
else if (forkNode.setInfo.ConfluenceOk == (forkNumber - 1)) //会签成功
|
||||
{
|
||||
res = GetNextNodeId(nextNode.id);
|
||||
}
|
||||
@@ -272,12 +274,12 @@ namespace OpenAuth.App.Flow
|
||||
|
||||
if (res == TagState.No.ToString("D"))
|
||||
{
|
||||
tag.Taged = (int) TagState.No;
|
||||
tag.Taged = (int)TagState.No;
|
||||
MakeTagNode(nextNode.id, tag);
|
||||
}
|
||||
else if (!string.IsNullOrEmpty(res)) //会签结束,标记合流节点
|
||||
{
|
||||
tag.Taged = (int) TagState.Ok;
|
||||
tag.Taged = (int)TagState.Ok;
|
||||
MakeTagNode(nextNode.id, tag);
|
||||
nextNodeId = res;
|
||||
nextNodeType = GetNodeType(res);
|
||||
@@ -287,9 +289,15 @@ namespace OpenAuth.App.Flow
|
||||
nextNodeId = nextNode.id;
|
||||
nextNodeType = GetNodeType(nextNode.id);
|
||||
}
|
||||
|
||||
if (!string.IsNullOrEmpty(res)) //会签结束节点配置了回调,则发起通知
|
||||
{
|
||||
NotifyThirdParty(httpClient, nextNode, tag);
|
||||
}
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
|
||||
//获取上一个节点
|
||||
private FlowNode GetPreNode(string nodeId = null)
|
||||
{
|
||||
@@ -298,6 +306,7 @@ namespace OpenAuth.App.Flow
|
||||
{
|
||||
throw new Exception("无法找到上一个点");
|
||||
}
|
||||
|
||||
return Nodes[lines[0].from];
|
||||
}
|
||||
|
||||
@@ -313,15 +322,17 @@ namespace OpenAuth.App.Flow
|
||||
{
|
||||
rejectType = node.setInfo.NodeRejectType;
|
||||
}
|
||||
|
||||
|
||||
if (rejectType == "0")
|
||||
{
|
||||
return previousId;
|
||||
}
|
||||
|
||||
if (rejectType == "1")
|
||||
{
|
||||
return GetNextNodeId(startNodeId);
|
||||
}
|
||||
|
||||
return previousId;
|
||||
}
|
||||
|
||||
@@ -348,8 +359,9 @@ namespace OpenAuth.App.Flow
|
||||
{
|
||||
if (item.Value.setInfo == null)
|
||||
{
|
||||
item.Value.setInfo = new Setinfo();
|
||||
item.Value.setInfo = new Setinfo();
|
||||
}
|
||||
|
||||
item.Value.setInfo.Taged = tag.Taged;
|
||||
item.Value.setInfo.UserId = tag.UserId;
|
||||
item.Value.setInfo.UserName = tag.UserName;
|
||||
@@ -375,9 +387,9 @@ namespace OpenAuth.App.Flow
|
||||
/// <summary>
|
||||
/// 通知三方系统,节点执行情况
|
||||
/// </summary>
|
||||
public void NotifyThirdParty(HttpClient client, Tag tag)
|
||||
public void NotifyThirdParty(HttpClient client, FlowNode node, Tag tag)
|
||||
{
|
||||
if (currentNode.setInfo == null || string.IsNullOrEmpty(currentNode.setInfo.ThirdPartyUrl))
|
||||
if (node.setInfo == null || string.IsNullOrEmpty(node.setInfo.ThirdPartyUrl))
|
||||
{
|
||||
return;
|
||||
}
|
||||
@@ -385,20 +397,20 @@ namespace OpenAuth.App.Flow
|
||||
var postData = new
|
||||
{
|
||||
flowInstanceId,
|
||||
nodeName=currentNode.name,
|
||||
nodeId = currentNodeId,
|
||||
nodeName = node.name,
|
||||
nodeId = node.id,
|
||||
userId = tag.UserId,
|
||||
userName = tag.UserName,
|
||||
result=tag.Taged, //1:通过;2:不通过;3驳回
|
||||
result = tag.Taged, //1:通过;2:不通过;3驳回
|
||||
description = tag.Description,
|
||||
execTime = tag.TagedTime,
|
||||
isFinish = currentNodeType == 4
|
||||
isFinish = node.type == FlowNode.END
|
||||
};
|
||||
|
||||
using (HttpContent httpContent = new StringContent(JsonHelper.Instance.Serialize(postData), Encoding.UTF8))
|
||||
{
|
||||
httpContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json");
|
||||
client.PostAsync(currentNode.setInfo.ThirdPartyUrl, httpContent);
|
||||
httpContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json");
|
||||
client.PostAsync(node.setInfo.ThirdPartyUrl, httpContent);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -449,7 +461,7 @@ namespace OpenAuth.App.Flow
|
||||
/// <summary>
|
||||
/// 下一个节点对象
|
||||
/// </summary>
|
||||
public FlowNode nextNode => nextNodeId != "-1"? Nodes[nextNodeId] : null;
|
||||
public FlowNode nextNode => nextNodeId != "-1" ? Nodes[nextNodeId] : null;
|
||||
|
||||
/// <summary>
|
||||
/// 上一个节点
|
||||
|
||||
@@ -93,10 +93,10 @@ namespace OpenAuth.App
|
||||
addFlowInstanceReq.CreateUserName = user.User.Account;
|
||||
|
||||
flowInstance.MakerList =
|
||||
(wfruntime.GetNextNodeType() != 4 ? GetNextMakers(wfruntime, addFlowInstanceReq) : "");
|
||||
flowInstance.IsFinish = (wfruntime.GetNextNodeType() == 4
|
||||
wfruntime.GetNextNodeType() != 4 ? GetNextMakers(wfruntime, addFlowInstanceReq) : "";
|
||||
flowInstance.IsFinish = wfruntime.GetNextNodeType() == 4
|
||||
? FlowInstanceStatus.Finished
|
||||
: FlowInstanceStatus.Running);
|
||||
: FlowInstanceStatus.Running;
|
||||
|
||||
|
||||
SugarClient.Ado.BeginTran();
|
||||
@@ -318,74 +318,15 @@ namespace OpenAuth.App
|
||||
|
||||
FlowRuntime wfruntime = new FlowRuntime(flowInstance);
|
||||
|
||||
#region 会签
|
||||
|
||||
if (flowInstance.ActivityType == 0) //当前节点是会签节点
|
||||
{
|
||||
//会签时的【当前节点】一直是会签开始节点
|
||||
//TODO: 标记会签节点的状态,这个地方感觉怪怪的
|
||||
wfruntime.MakeTagNode(wfruntime.currentNodeId, tag);
|
||||
|
||||
string canCheckId = ""; //寻找当前登录用户可审核的节点Id
|
||||
foreach (string fromForkStartNodeId in wfruntime.FromNodeLines[wfruntime.currentNodeId]
|
||||
.Select(u => u.to))
|
||||
{
|
||||
var fromForkStartNode = wfruntime.Nodes[fromForkStartNodeId]; //与会前开始节点直接连接的节点
|
||||
canCheckId = GetOneForkLineCanCheckNodeId(fromForkStartNode, wfruntime, tag);
|
||||
if (!string.IsNullOrEmpty(canCheckId)) break;
|
||||
}
|
||||
|
||||
if (canCheckId == "")
|
||||
{
|
||||
throw (new Exception("审核异常,找不到审核节点"));
|
||||
}
|
||||
|
||||
var content =
|
||||
$"{user.Account}-{DateTime.Now.ToString("yyyy-MM-dd HH:mm")}审批了【{wfruntime.Nodes[canCheckId].name}】" +
|
||||
$"结果:{(tag.Taged == 1 ? "同意" : "不同意")},备注:{tag.Description}";
|
||||
AddOperationHis(instanceId, tag, content);
|
||||
|
||||
wfruntime.MakeTagNode(canCheckId, tag); //标记审核节点状态
|
||||
string res = wfruntime.NodeConfluence(canCheckId, tag);
|
||||
if (res == TagState.No.ToString("D"))
|
||||
{
|
||||
flowInstance.IsFinish = FlowInstanceStatus.Disagree;
|
||||
}
|
||||
else if (!string.IsNullOrEmpty(res))
|
||||
{
|
||||
flowInstance.PreviousId = flowInstance.ActivityId;
|
||||
flowInstance.ActivityId = wfruntime.nextNodeId;
|
||||
flowInstance.ActivityType = wfruntime.nextNodeType;
|
||||
flowInstance.ActivityName = wfruntime.nextNode.name;
|
||||
flowInstance.IsFinish = (wfruntime.nextNodeType == 4
|
||||
? FlowInstanceStatus.Finished
|
||||
: FlowInstanceStatus.Running);
|
||||
flowInstance.MakerList =
|
||||
(wfruntime.nextNodeType == 4 ? "" : GetNextMakers(wfruntime));
|
||||
|
||||
AddTransHistory(wfruntime);
|
||||
}
|
||||
else
|
||||
{
|
||||
//会签过程中,需要更新用户
|
||||
flowInstance.MakerList = GetForkNodeMakers(wfruntime, wfruntime.currentNodeId);
|
||||
AddTransHistory(wfruntime);
|
||||
}
|
||||
|
||||
flowInstance.SchemeContent = JsonHelper.Instance.Serialize(wfruntime.ToSchemeObj());
|
||||
CounterSign(wfruntime, tag, flowInstance);
|
||||
}
|
||||
|
||||
#endregion 会签
|
||||
|
||||
#region 一般审核
|
||||
|
||||
else
|
||||
{
|
||||
VerifyNode(request, tag, flowInstance);
|
||||
}
|
||||
|
||||
#endregion 一般审核
|
||||
|
||||
//自定义开发表单,需要更新对应的数据库
|
||||
if (!string.IsNullOrEmpty(request.FrmData) && flowInstance.FrmType == 1)
|
||||
{
|
||||
@@ -394,18 +335,77 @@ namespace OpenAuth.App
|
||||
icf.Update(flowInstance.Id, flowInstance.FrmData);
|
||||
}
|
||||
|
||||
|
||||
SugarClient.Updateable(flowInstance).ExecuteCommand();
|
||||
//给流程创建人发送通知信息
|
||||
_messageApp.SendMsgTo(flowInstance.CreateUserId,
|
||||
$"你的流程[{flowInstance.CustomName}]已被{user.Name}处理。");
|
||||
|
||||
SugarClient.Ado.CommitTran();
|
||||
|
||||
wfruntime.NotifyThirdParty(_httpClientFactory.CreateClient(), tag);
|
||||
wfruntime.NotifyThirdParty(_httpClientFactory.CreateClient(), wfruntime.currentNode, tag);
|
||||
return true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 会签
|
||||
/// </summary>
|
||||
private void CounterSign(FlowRuntime wfruntime, Tag tag, FlowInstance flowInstance)
|
||||
{
|
||||
var user = _auth.GetCurrentUser().User;
|
||||
string instanceId = flowInstance.Id;
|
||||
//会签时的【当前节点】一直是会签开始节点
|
||||
//TODO: 标记会签节点的状态,这个地方感觉怪怪的
|
||||
wfruntime.MakeTagNode(wfruntime.currentNodeId, tag);
|
||||
|
||||
string canCheckId = ""; //寻找当前登录用户可审核的节点Id
|
||||
foreach (string fromForkStartNodeId in wfruntime.FromNodeLines[wfruntime.currentNodeId]
|
||||
.Select(u => u.to))
|
||||
{
|
||||
var fromForkStartNode = wfruntime.Nodes[fromForkStartNodeId]; //与会前开始节点直接连接的节点
|
||||
canCheckId = GetOneForkLineCanCheckNodeId(fromForkStartNode, wfruntime, tag);
|
||||
if (!string.IsNullOrEmpty(canCheckId)) break;
|
||||
}
|
||||
|
||||
if (canCheckId == "")
|
||||
{
|
||||
throw new Exception("审核异常,找不到审核节点");
|
||||
}
|
||||
|
||||
var content =
|
||||
$"{user.Account}-{DateTime.Now.ToString("yyyy-MM-dd HH:mm")}审批了【{wfruntime.Nodes[canCheckId].name}】" +
|
||||
$"结果:{(tag.Taged == 1 ? "同意" : "不同意")},备注:{tag.Description}";
|
||||
AddOperationHis(instanceId, tag, content);
|
||||
|
||||
wfruntime.MakeTagNode(canCheckId, tag); //标记审核节点状态
|
||||
string res = wfruntime.NodeConfluence(_httpClientFactory.CreateClient(), canCheckId, tag);
|
||||
if (res == TagState.No.ToString("D"))
|
||||
{
|
||||
flowInstance.IsFinish = FlowInstanceStatus.Disagree;
|
||||
}
|
||||
else if (!string.IsNullOrEmpty(res)) //会签结束,当前活动节点变为会签结束节点的下一个节点
|
||||
{
|
||||
flowInstance.PreviousId = flowInstance.ActivityId;
|
||||
flowInstance.ActivityId = wfruntime.nextNodeId;
|
||||
flowInstance.ActivityType = wfruntime.nextNodeType;
|
||||
flowInstance.ActivityName = wfruntime.nextNode.name;
|
||||
flowInstance.IsFinish = wfruntime.nextNodeType == 4
|
||||
? FlowInstanceStatus.Finished
|
||||
: FlowInstanceStatus.Running;
|
||||
flowInstance.MakerList =
|
||||
wfruntime.nextNodeType == 4 ? "" : GetNextMakers(wfruntime);
|
||||
|
||||
AddTransHistory(wfruntime);
|
||||
}
|
||||
else
|
||||
{
|
||||
//会签过程中,需要更新用户
|
||||
flowInstance.MakerList = GetForkNodeMakers(wfruntime, wfruntime.currentNodeId);
|
||||
AddTransHistory(wfruntime);
|
||||
}
|
||||
|
||||
flowInstance.SchemeContent = JsonHelper.Instance.Serialize(wfruntime.ToSchemeObj());
|
||||
|
||||
SugarClient.Updateable(flowInstance).ExecuteCommand();
|
||||
SugarClient.Ado.CommitTran();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 普通的节点审批
|
||||
/// </summary>
|
||||
@@ -486,9 +486,9 @@ namespace OpenAuth.App
|
||||
flowInstance.ActivityType = wfruntime.nextNodeType;
|
||||
flowInstance.ActivityName = wfruntime.nextNode.name;
|
||||
flowInstance.MakerList = wfruntime.nextNodeType == 4 ? "" : GetNextMakers(wfruntime, request);
|
||||
flowInstance.IsFinish = (wfruntime.nextNodeType == 4
|
||||
flowInstance.IsFinish = wfruntime.nextNodeType == 4
|
||||
? FlowInstanceStatus.Finished
|
||||
: FlowInstanceStatus.Running);
|
||||
: FlowInstanceStatus.Running;
|
||||
}
|
||||
}
|
||||
else //审批结果为不同意
|
||||
@@ -516,9 +516,12 @@ namespace OpenAuth.App
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
flowInstance.SchemeContent = JsonHelper.Instance.Serialize(wfruntime.ToSchemeObj());
|
||||
|
||||
SugarClient.Updateable(flowInstance).ExecuteCommand();
|
||||
SugarClient.Ado.CommitTran();
|
||||
|
||||
//如果审批通过,且下一个审批人是自己,则自动审批
|
||||
if (tag.Taged == (int)TagState.Ok)
|
||||
{
|
||||
@@ -527,7 +530,7 @@ namespace OpenAuth.App
|
||||
return;
|
||||
}
|
||||
|
||||
VerifyNode(request, tag, flowInstance);
|
||||
NodeVerification(request);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -616,7 +619,7 @@ namespace OpenAuth.App
|
||||
|
||||
SugarClient.Ado.CommitTran();
|
||||
|
||||
wfruntime.NotifyThirdParty(_httpClientFactory.CreateClient(), tag);
|
||||
wfruntime.NotifyThirdParty(_httpClientFactory.CreateClient(), wfruntime.currentNode, tag);
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -635,7 +638,7 @@ namespace OpenAuth.App
|
||||
string makerList = "";
|
||||
if (wfruntime.nextNodeId == "-1")
|
||||
{
|
||||
throw (new Exception("无法寻找到下一个节点"));
|
||||
throw new Exception("无法寻找到下一个节点");
|
||||
}
|
||||
|
||||
if (wfruntime.nextNodeType == 0) //如果是会签节点
|
||||
@@ -700,7 +703,7 @@ namespace OpenAuth.App
|
||||
makerList = GetNodeMarkers(wfruntime.nextNode);
|
||||
if (string.IsNullOrEmpty(makerList))
|
||||
{
|
||||
throw (new Exception("无法寻找到节点的审核者,请查看流程设计是否有问题!"));
|
||||
throw new Exception("无法寻找到节点的审核者,请查看流程设计是否有问题!");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -750,12 +753,12 @@ namespace OpenAuth.App
|
||||
var marker = GetNodeMarkers(node);
|
||||
if (marker == "")
|
||||
{
|
||||
throw (new Exception($"节点{node.name}没有审核者,请检查!"));
|
||||
throw new Exception($"节点{node.name}没有审核者,请检查!");
|
||||
}
|
||||
|
||||
if (marker == "1")
|
||||
{
|
||||
throw (new Exception($"节点{node.name}是会签节点,不能用所有人,请检查!"));
|
||||
throw new Exception($"节点{node.name}是会签节点,不能用所有人,请检查!");
|
||||
}
|
||||
|
||||
if (markers != "")
|
||||
@@ -1086,10 +1089,10 @@ namespace OpenAuth.App
|
||||
flowInstance.PreviousId = wfruntime.currentNodeId;
|
||||
flowInstance.CreateUserId = user.User.Id;
|
||||
flowInstance.CreateUserName = user.User.Account;
|
||||
flowInstance.MakerList = (wfruntime.GetNextNodeType() != 4 ? GetNextMakers(wfruntime) : "");
|
||||
flowInstance.IsFinish = (wfruntime.GetNextNodeType() == 4
|
||||
flowInstance.MakerList = wfruntime.GetNextNodeType() != 4 ? GetNextMakers(wfruntime) : "";
|
||||
flowInstance.IsFinish = wfruntime.GetNextNodeType() == 4
|
||||
? FlowInstanceStatus.Finished
|
||||
: FlowInstanceStatus.Running);
|
||||
: FlowInstanceStatus.Running;
|
||||
|
||||
SugarClient.Updateable(flowInstance).ExecuteCommand();
|
||||
|
||||
@@ -1117,7 +1120,7 @@ namespace OpenAuth.App
|
||||
FlowSchemeApp flowSchemeApp, FormApp formApp, IHttpClientFactory httpClientFactory,
|
||||
SysMessageApp messageApp, UserManagerApp userManagerApp, OrgManagerApp orgManagerApp,
|
||||
IServiceProvider serviceProvider, FlowApproverApp flowApproverApp,
|
||||
RevelanceManagerApp revelanceManagerApp) : base(client, auth)
|
||||
RevelanceManagerApp revelanceManagerApp, DbExtension dbExtension) : base(client, auth)
|
||||
{
|
||||
_revelanceApp = revelanceApp;
|
||||
_flowSchemeApp = flowSchemeApp;
|
||||
@@ -1129,6 +1132,7 @@ namespace OpenAuth.App
|
||||
_serviceProvider = serviceProvider;
|
||||
_flowApproverApp = flowApproverApp;
|
||||
_revelanceManagerApp = revelanceManagerApp;
|
||||
_dbExtension = dbExtension;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,40 +1,40 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
||||
<DocumentationFile>bin\Debug\net5.0\OpenAuth.App.xml</DocumentationFile>
|
||||
<NoWarn>1701;1702;1591;1573;1572;1570</NoWarn>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Compile Remove="Model\**" />
|
||||
<EmbeddedResource Remove="Model\**" />
|
||||
<None Remove="Model\**" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Autofac" Version="5.2.0" />
|
||||
<PackageReference Include="Autofac.Extensions.DependencyInjection" Version="6.0.0" />
|
||||
<PackageReference Include="Autofac.Extras.Quartz" Version="5.1.0" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="3.1.2" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" Version="3.1.2" />
|
||||
<PackageReference Include="Microsoft.Extensions.DependencyModel" Version="5.0.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.Http" Version="5.0.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.Logging.Log4Net.AspNetCore" Version="3.1.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="5.0.0" />
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.5.0" />
|
||||
<PackageReference Include="Moq" Version="4.13.1" />
|
||||
<PackageReference Include="NUnit" Version="3.13.1" />
|
||||
<PackageReference Include="NUnit3TestAdapter" Version="3.17.0" />
|
||||
<PackageReference Include="Quartz" Version="3.0.7" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\Infrastructure\Infrastructure.csproj" />
|
||||
<ProjectReference Include="..\OpenAuth.Repository\OpenAuth.Repository.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net9.0</TargetFramework>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
||||
<DocumentationFile>bin\Debug\net5.0\OpenAuth.App.xml</DocumentationFile>
|
||||
<NoWarn>1701;1702;1591;1573;1572;1570</NoWarn>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Compile Remove="Model\**" />
|
||||
<EmbeddedResource Remove="Model\**" />
|
||||
<None Remove="Model\**" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Autofac" Version="8.1.1" />
|
||||
<PackageReference Include="Autofac.Extensions.DependencyInjection" Version="10.0.0" />
|
||||
<PackageReference Include="Autofac.Extras.Quartz" Version="5.1.0" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="3.1.2" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" Version="3.1.2" />
|
||||
<PackageReference Include="Microsoft.Extensions.DependencyModel" Version="5.0.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.Http" Version="5.0.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.Logging.Log4Net.AspNetCore" Version="3.1.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="5.0.0" />
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.5.0" />
|
||||
<PackageReference Include="Moq" Version="4.13.1" />
|
||||
<PackageReference Include="NUnit" Version="3.13.1" />
|
||||
<PackageReference Include="NUnit3TestAdapter" Version="3.17.0" />
|
||||
<PackageReference Include="Quartz" Version="3.0.7" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\Infrastructure\Infrastructure.csproj" />
|
||||
<ProjectReference Include="..\OpenAuth.Repository\OpenAuth.Repository.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
||||
@@ -58,7 +58,7 @@ namespace OpenAuth.App.SSO
|
||||
{
|
||||
if (_appConfiguration.Value.IsIdentityAuth)
|
||||
{
|
||||
return (!string.IsNullOrEmpty(_httpContextAccessor.HttpContext.User.Identity.Name));
|
||||
return !string.IsNullOrEmpty(_httpContextAccessor.HttpContext.User.Identity.Name);
|
||||
}
|
||||
|
||||
if (string.IsNullOrEmpty(token))
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk.Web">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<TargetFramework>net9.0</TargetFramework>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
},
|
||||
"AllowedHosts": "*",
|
||||
"ConnectionStrings": {
|
||||
"OpenAuthDBContext": "Data Source=.;Initial Catalog=OpenAuthDB;User=sa;Password=000000"
|
||||
"OpenAuthDBContext": "Data Source=.;Encrypt=false;Initial Catalog=OpenAuthDB;User=sa;Password=000000"
|
||||
//"OpenAuthDBContext": "server=127.0.0.1;user id=root;database=openauthdb;password=000000" //my sql
|
||||
},
|
||||
"AppSetting": {
|
||||
|
||||
@@ -11,6 +11,10 @@ using OpenAuth.Repository.Domain;
|
||||
|
||||
namespace OpenAuth.Mvc.Models
|
||||
{
|
||||
/// <summary>
|
||||
/// 权限过滤器,用于检查用户是否登录,并进行相应的权限检查,
|
||||
/// 如果未登录,则重定向到登录页面,如果未授权,则重定向到错误页面
|
||||
/// </summary>
|
||||
public class OpenAuthFilter : IActionFilter
|
||||
{
|
||||
private readonly IAuth _authUtil;
|
||||
|
||||
@@ -1,481 +1,481 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk.Web">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<UseRazorBuildServer>false</UseRazorBuildServer>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
||||
<NoWarn>1701;1702;1591;1573;1572;1570</NoWarn>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Compile Remove="Views\Base\**" />
|
||||
<Content Remove="Views\Base\**" />
|
||||
<EmbeddedResource Remove="Views\Base\**" />
|
||||
<None Remove="Views\Base\**" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Autofac.Extensions.DependencyInjection" Version="6.0.0" />
|
||||
<PackageReference Include="IdentityServer4.AccessTokenValidation" Version="3.0.1" />
|
||||
<PackageReference Include="Microsoft.Extensions.Logging.Log4Net.AspNetCore" Version="3.1.0" />
|
||||
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="3.1.0" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\Infrastructure\Infrastructure.csproj" />
|
||||
<ProjectReference Include="..\OpenAuth.App\OpenAuth.App.csproj" />
|
||||
<ProjectReference Include="..\OpenAuth.Repository\OpenAuth.Repository.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<None Include="wwwroot\css\formpreview.css" />
|
||||
<None Include="wwwroot\css\images.css" />
|
||||
<None Include="wwwroot\css\login.css" />
|
||||
<None Include="wwwroot\css\main.css" />
|
||||
<None Include="wwwroot\css\metroStyle\img\line_conn.png" />
|
||||
<None Include="wwwroot\css\metroStyle\img\loading.gif" />
|
||||
<None Include="wwwroot\css\metroStyle\img\metro.gif" />
|
||||
<None Include="wwwroot\css\metroStyle\img\metro.png" />
|
||||
<None Include="wwwroot\css\metroStyle\metroStyle.css" />
|
||||
<None Include="wwwroot\css\treetable.css" />
|
||||
<None Include="wwwroot\images\alipay.jpg" />
|
||||
<None Include="wwwroot\images\code.jpg" />
|
||||
<None Include="wwwroot\images\face.jpg" />
|
||||
<None Include="wwwroot\images\login\buttonbg.png" />
|
||||
<None Include="wwwroot\images\login\cloud.png" />
|
||||
<None Include="wwwroot\images\login\hand.png" />
|
||||
<None Include="wwwroot\images\login\left_hand.png" />
|
||||
<None Include="wwwroot\images\login\light.png" />
|
||||
<None Include="wwwroot\images\login\loginbg1.png" />
|
||||
<None Include="wwwroot\images\login\loginbg2.png" />
|
||||
<None Include="wwwroot\images\login\loginbg3.png" />
|
||||
<None Include="wwwroot\images\login\logininfo.png" />
|
||||
<None Include="wwwroot\images\login\loginpassword.png" />
|
||||
<None Include="wwwroot\images\login\loginsj.png" />
|
||||
<None Include="wwwroot\images\login\loginuser.png" />
|
||||
<None Include="wwwroot\images\login\logo.png" />
|
||||
<None Include="wwwroot\images\login\right_hand.png" />
|
||||
<None Include="wwwroot\images\login\tou.png" />
|
||||
<None Include="wwwroot\images\logo.png" />
|
||||
<None Include="wwwroot\images\userface1.jpg" />
|
||||
<None Include="wwwroot\images\userface2.jpg" />
|
||||
<None Include="wwwroot\images\userface3.jpg" />
|
||||
<None Include="wwwroot\images\userface4.jpg" />
|
||||
<None Include="wwwroot\images\userface5.jpg" />
|
||||
<None Include="wwwroot\images\wechat.jpg" />
|
||||
<None Include="wwwroot\js\bodyTab.js" />
|
||||
<None Include="wwwroot\js\bootstrap.js" />
|
||||
<None Include="wwwroot\js\droptree.js" />
|
||||
<None Include="wwwroot\js\dtree.js" />
|
||||
<None Include="wwwroot\js\dtree\font\dtreefont.svg" />
|
||||
<None Include="wwwroot\js\flow-ui\img\wallbg.png" />
|
||||
<None Include="wwwroot\js\flowlayout.js" />
|
||||
<None Include="wwwroot\js\flow\config.js" />
|
||||
<None Include="wwwroot\js\flow\fonts\demo.css" />
|
||||
<None Include="wwwroot\js\flow\fonts\demo_fontclass.html" />
|
||||
<None Include="wwwroot\js\flow\fonts\demo_symbol.html" />
|
||||
<None Include="wwwroot\js\flow\fonts\demo_unicode.html" />
|
||||
<None Include="wwwroot\js\flow\fonts\iconflow.eot" />
|
||||
<None Include="wwwroot\js\flow\fonts\iconflow.svg" />
|
||||
<None Include="wwwroot\js\flow\fonts\iconflow.ttf" />
|
||||
<None Include="wwwroot\js\flow\fonts\iconflow.woff" />
|
||||
<None Include="wwwroot\js\flow\fonts\iconfont.css" />
|
||||
<None Include="wwwroot\js\flow\fonts\iconfont.js" />
|
||||
<None Include="wwwroot\js\flow\GooFlow.css" />
|
||||
<None Include="wwwroot\js\flow\GooFlow.export.js" />
|
||||
<None Include="wwwroot\js\flow\gooflow.js" />
|
||||
<None Include="wwwroot\js\flow\GooFlow.print.js" />
|
||||
<None Include="wwwroot\js\flow\GooFunc.js" />
|
||||
<None Include="wwwroot\js\flow\img\gooflow_icon.png" />
|
||||
<None Include="wwwroot\js\index.js" />
|
||||
<None Include="wwwroot\js\leftNav.js" />
|
||||
<None Include="wwwroot\js\openauth.js" />
|
||||
<None Include="wwwroot\js\slimscroll.js" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\anchor\anchor.html" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\attachment\attachment.css" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\attachment\attachment.html" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\attachment\attachment.js" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\attachment\fileTypeImages\icon_chm.gif" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\attachment\fileTypeImages\icon_default.png" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\attachment\fileTypeImages\icon_doc.gif" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\attachment\fileTypeImages\icon_exe.gif" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\attachment\fileTypeImages\icon_jpg.gif" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\attachment\fileTypeImages\icon_mp3.gif" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\attachment\fileTypeImages\icon_mv.gif" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\attachment\fileTypeImages\icon_pdf.gif" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\attachment\fileTypeImages\icon_ppt.gif" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\attachment\fileTypeImages\icon_psd.gif" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\attachment\fileTypeImages\icon_rar.gif" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\attachment\fileTypeImages\icon_txt.gif" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\attachment\fileTypeImages\icon_xls.gif" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\attachment\images\alignicon.gif" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\attachment\images\alignicon.png" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\attachment\images\bg.png" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\attachment\images\file-icons.gif" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\attachment\images\file-icons.png" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\attachment\images\icons.gif" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\attachment\images\icons.png" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\attachment\images\image.png" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\attachment\images\progress.png" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\attachment\images\success.gif" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\attachment\images\success.png" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\background\background.css" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\background\background.html" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\background\background.js" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\background\images\bg.png" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\background\images\success.png" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\charts\chart.config.js" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\charts\charts.css" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\charts\charts.html" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\charts\charts.js" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\charts\images\charts0.png" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\charts\images\charts1.png" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\charts\images\charts2.png" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\charts\images\charts3.png" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\charts\images\charts4.png" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\charts\images\charts5.png" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\emotion\emotion.css" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\emotion\emotion.html" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\emotion\emotion.js" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\emotion\images\0.gif" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\emotion\images\bface.gif" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\emotion\images\cface.gif" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\emotion\images\fface.gif" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\emotion\images\jxface2.gif" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\emotion\images\neweditor-tab-bg.png" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\emotion\images\tface.gif" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\emotion\images\wface.gif" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\emotion\images\yface.gif" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\gmap\gmap.html" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\help\help.css" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\help\help.html" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\help\help.js" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\image\image.css" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\image\image.html" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\image\image.js" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\image\images\alignicon.jpg" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\image\images\bg.png" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\image\images\icons.gif" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\image\images\icons.png" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\image\images\image.png" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\image\images\progress.png" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\image\images\success.gif" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\image\images\success.png" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\insertframe\insertframe.html" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\internal.js" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\link\link.html" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\map\map.html" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\map\show.html" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\music\music.css" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\music\music.html" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\music\music.js" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\preview\preview.html" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\scrawl\images\addimg.png" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\scrawl\images\brush.png" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\scrawl\images\delimg.png" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\scrawl\images\delimgH.png" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\scrawl\images\empty.png" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\scrawl\images\emptyH.png" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\scrawl\images\eraser.png" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\scrawl\images\redo.png" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\scrawl\images\redoH.png" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\scrawl\images\scale.png" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\scrawl\images\scaleH.png" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\scrawl\images\size.png" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\scrawl\images\undo.png" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\scrawl\images\undoH.png" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\scrawl\scrawl.css" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\scrawl\scrawl.html" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\scrawl\scrawl.js" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\searchreplace\searchreplace.html" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\searchreplace\searchreplace.js" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\snapscreen\snapscreen.html" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\spechars\spechars.html" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\spechars\spechars.js" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\table\dragicon.png" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\table\edittable.css" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\table\edittable.html" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\table\edittable.js" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\table\edittd.html" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\table\edittip.html" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\template\config.js" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\template\images\bg.gif" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\template\images\pre0.png" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\template\images\pre1.png" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\template\images\pre2.png" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\template\images\pre3.png" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\template\images\pre4.png" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\template\template.css" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\template\template.html" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\template\template.js" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\video\images\bg.png" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\video\images\center_focus.jpg" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\video\images\file-icons.gif" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\video\images\file-icons.png" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\video\images\icons.gif" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\video\images\icons.png" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\video\images\image.png" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\video\images\left_focus.jpg" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\video\images\none_focus.jpg" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\video\images\progress.png" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\video\images\right_focus.jpg" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\video\images\success.gif" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\video\images\success.png" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\video\video.css" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\video\video.html" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\video\video.js" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\webapp\webapp.html" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\wordimage\fClipboard_ueditor.swf" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\wordimage\imageUploader.swf" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\wordimage\tangram.js" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\wordimage\wordimage.html" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\wordimage\wordimage.js" />
|
||||
<None Include="wwwroot\js\ueditor\formdesign\bootstrap-ie.js" />
|
||||
<None Include="wwwroot\js\ueditor\formdesign\bootstrap\css\bootstrap-ie6.css" />
|
||||
<None Include="wwwroot\js\ueditor\formdesign\bootstrap\css\bootstrap-ie6.min.css" />
|
||||
<None Include="wwwroot\js\ueditor\formdesign\bootstrap\css\bootstrap-responsive.css" />
|
||||
<None Include="wwwroot\js\ueditor\formdesign\bootstrap\css\bootstrap-responsive.min.css" />
|
||||
<None Include="wwwroot\js\ueditor\formdesign\bootstrap\css\bootstrap.css" />
|
||||
<None Include="wwwroot\js\ueditor\formdesign\bootstrap\css\bootstrap.min.css" />
|
||||
<None Include="wwwroot\js\ueditor\formdesign\bootstrap\css\ie.css" />
|
||||
<None Include="wwwroot\js\ueditor\formdesign\bootstrap\img\glyphicons-halflings-white.png" />
|
||||
<None Include="wwwroot\js\ueditor\formdesign\bootstrap\img\glyphicons-halflings.png" />
|
||||
<None Include="wwwroot\js\ueditor\formdesign\bootstrap\js\bootstrap.js" />
|
||||
<None Include="wwwroot\js\ueditor\formdesign\bootstrap\js\bootstrap.min.js" />
|
||||
<None Include="wwwroot\js\ueditor\formdesign\checkbox.html" />
|
||||
<None Include="wwwroot\js\ueditor\formdesign\checkboxs.html" />
|
||||
<None Include="wwwroot\js\ueditor\formdesign\error.html" />
|
||||
<None Include="wwwroot\js\ueditor\formdesign\images\leipi_formdesign.png" />
|
||||
<None Include="wwwroot\js\ueditor\formdesign\images\progressbar.gif" />
|
||||
<None Include="wwwroot\js\ueditor\formdesign\images\qrcode.gif" />
|
||||
<None Include="wwwroot\js\ueditor\formdesign\images\template\bg.gif" />
|
||||
<None Include="wwwroot\js\ueditor\formdesign\images\template\pre0.png" />
|
||||
<None Include="wwwroot\js\ueditor\formdesign\images\template\pre1.png" />
|
||||
<None Include="wwwroot\js\ueditor\formdesign\jquery-1.7.2.min.js" />
|
||||
<None Include="wwwroot\js\ueditor\formdesign\leipi.formdesign.v4.js" />
|
||||
<None Include="wwwroot\js\ueditor\formdesign\leipi.html" />
|
||||
<None Include="wwwroot\js\ueditor\formdesign\leipi.style.css" />
|
||||
<None Include="wwwroot\js\ueditor\formdesign\listctrl.html" />
|
||||
<None Include="wwwroot\js\ueditor\formdesign\macros.html" />
|
||||
<None Include="wwwroot\js\ueditor\formdesign\more.html" />
|
||||
<None Include="wwwroot\js\ueditor\formdesign\progressbar.html" />
|
||||
<None Include="wwwroot\js\ueditor\formdesign\qrcode.html" />
|
||||
<None Include="wwwroot\js\ueditor\formdesign\radio.html" />
|
||||
<None Include="wwwroot\js\ueditor\formdesign\radios.html" />
|
||||
<None Include="wwwroot\js\ueditor\formdesign\Readme.txt" />
|
||||
<None Include="wwwroot\js\ueditor\formdesign\select.html" />
|
||||
<None Include="wwwroot\js\ueditor\formdesign\template.html" />
|
||||
<None Include="wwwroot\js\ueditor\formdesign\text.html" />
|
||||
<None Include="wwwroot\js\ueditor\formdesign\textarea.html" />
|
||||
<None Include="wwwroot\js\ueditor\formdesign\textfield.html.ajax.bak" />
|
||||
<None Include="wwwroot\js\ueditor\index.html" />
|
||||
<None Include="wwwroot\js\ueditor\lang\en\en.js" />
|
||||
<None Include="wwwroot\js\ueditor\lang\en\images\addimage.png" />
|
||||
<None Include="wwwroot\js\ueditor\lang\en\images\alldeletebtnhoverskin.png" />
|
||||
<None Include="wwwroot\js\ueditor\lang\en\images\alldeletebtnupskin.png" />
|
||||
<None Include="wwwroot\js\ueditor\lang\en\images\background.png" />
|
||||
<None Include="wwwroot\js\ueditor\lang\en\images\button.png" />
|
||||
<None Include="wwwroot\js\ueditor\lang\en\images\copy.png" />
|
||||
<None Include="wwwroot\js\ueditor\lang\en\images\deletedisable.png" />
|
||||
<None Include="wwwroot\js\ueditor\lang\en\images\deleteenable.png" />
|
||||
<None Include="wwwroot\js\ueditor\lang\en\images\listbackground.png" />
|
||||
<None Include="wwwroot\js\ueditor\lang\en\images\localimage.png" />
|
||||
<None Include="wwwroot\js\ueditor\lang\en\images\music.png" />
|
||||
<None Include="wwwroot\js\ueditor\lang\en\images\rotateleftdisable.png" />
|
||||
<None Include="wwwroot\js\ueditor\lang\en\images\rotateleftenable.png" />
|
||||
<None Include="wwwroot\js\ueditor\lang\en\images\rotaterightdisable.png" />
|
||||
<None Include="wwwroot\js\ueditor\lang\en\images\rotaterightenable.png" />
|
||||
<None Include="wwwroot\js\ueditor\lang\en\images\upload.png" />
|
||||
<None Include="wwwroot\js\ueditor\lang\zh-cn\images\copy.png" />
|
||||
<None Include="wwwroot\js\ueditor\lang\zh-cn\images\localimage.png" />
|
||||
<None Include="wwwroot\js\ueditor\lang\zh-cn\images\music.png" />
|
||||
<None Include="wwwroot\js\ueditor\lang\zh-cn\images\upload.png" />
|
||||
<None Include="wwwroot\js\ueditor\lang\zh-cn\zh-cn.js" />
|
||||
<None Include="wwwroot\js\ueditor\themes\default\css\ueditor.css" />
|
||||
<None Include="wwwroot\js\ueditor\themes\default\css\ueditor.min.css" />
|
||||
<None Include="wwwroot\js\ueditor\themes\default\dialogbase.css" />
|
||||
<None Include="wwwroot\js\ueditor\themes\default\images\anchor.gif" />
|
||||
<None Include="wwwroot\js\ueditor\themes\default\images\arrow.png" />
|
||||
<None Include="wwwroot\js\ueditor\themes\default\images\arrow_down.png" />
|
||||
<None Include="wwwroot\js\ueditor\themes\default\images\arrow_up.png" />
|
||||
<None Include="wwwroot\js\ueditor\themes\default\images\button-bg.gif" />
|
||||
<None Include="wwwroot\js\ueditor\themes\default\images\cancelbutton.gif" />
|
||||
<None Include="wwwroot\js\ueditor\themes\default\images\charts.png" />
|
||||
<None Include="wwwroot\js\ueditor\themes\default\images\cursor_h.gif" />
|
||||
<None Include="wwwroot\js\ueditor\themes\default\images\cursor_h.png" />
|
||||
<None Include="wwwroot\js\ueditor\themes\default\images\cursor_v.gif" />
|
||||
<None Include="wwwroot\js\ueditor\themes\default\images\cursor_v.png" />
|
||||
<None Include="wwwroot\js\ueditor\themes\default\images\dialog-title-bg.png" />
|
||||
<None Include="wwwroot\js\ueditor\themes\default\images\filescan.png" />
|
||||
<None Include="wwwroot\js\ueditor\themes\default\images\highlighted.gif" />
|
||||
<None Include="wwwroot\js\ueditor\themes\default\images\icons-all.gif" />
|
||||
<None Include="wwwroot\js\ueditor\themes\default\images\icons.gif" />
|
||||
<None Include="wwwroot\js\ueditor\themes\default\images\icons.png" />
|
||||
<None Include="wwwroot\js\ueditor\themes\default\images\loaderror.png" />
|
||||
<None Include="wwwroot\js\ueditor\themes\default\images\loading.gif" />
|
||||
<None Include="wwwroot\js\ueditor\themes\default\images\lock.gif" />
|
||||
<None Include="wwwroot\js\ueditor\themes\default\images\neweditor-tab-bg.png" />
|
||||
<None Include="wwwroot\js\ueditor\themes\default\images\pagebreak.gif" />
|
||||
<None Include="wwwroot\js\ueditor\themes\default\images\scale.png" />
|
||||
<None Include="wwwroot\js\ueditor\themes\default\images\sortable.png" />
|
||||
<None Include="wwwroot\js\ueditor\themes\default\images\spacer.gif" />
|
||||
<None Include="wwwroot\js\ueditor\themes\default\images\sparator_v.png" />
|
||||
<None Include="wwwroot\js\ueditor\themes\default\images\table-cell-align.png" />
|
||||
<None Include="wwwroot\js\ueditor\themes\default\images\tangram-colorpicker.png" />
|
||||
<None Include="wwwroot\js\ueditor\themes\default\images\toolbar_bg.png" />
|
||||
<None Include="wwwroot\js\ueditor\themes\default\images\unhighlighted.gif" />
|
||||
<None Include="wwwroot\js\ueditor\themes\default\images\upload.png" />
|
||||
<None Include="wwwroot\js\ueditor\themes\default\images\videologo.gif" />
|
||||
<None Include="wwwroot\js\ueditor\themes\default\images\word.gif" />
|
||||
<None Include="wwwroot\js\ueditor\themes\default\images\wordpaste.png" />
|
||||
<None Include="wwwroot\js\ueditor\themes\iframe.css" />
|
||||
<None Include="wwwroot\js\ueditor\third-party\codemirror\codemirror.js" />
|
||||
<None Include="wwwroot\js\ueditor\third-party\webuploader\Uploader.swf" />
|
||||
<None Include="wwwroot\js\ueditor\third-party\webuploader\webuploader.css" />
|
||||
<None Include="wwwroot\js\ueditor\third-party\webuploader\webuploader.custom.js" />
|
||||
<None Include="wwwroot\js\ueditor\third-party\webuploader\webuploader.custom.min.js" />
|
||||
<None Include="wwwroot\js\ueditor\third-party\webuploader\webuploader.flashonly.js" />
|
||||
<None Include="wwwroot\js\ueditor\third-party\webuploader\webuploader.flashonly.min.js" />
|
||||
<None Include="wwwroot\js\ueditor\third-party\webuploader\webuploader.html5only.js" />
|
||||
<None Include="wwwroot\js\ueditor\third-party\webuploader\webuploader.html5only.min.js" />
|
||||
<None Include="wwwroot\js\ueditor\third-party\webuploader\webuploader.js" />
|
||||
<None Include="wwwroot\js\ueditor\third-party\webuploader\webuploader.min.js" />
|
||||
<None Include="wwwroot\js\ueditor\third-party\webuploader\webuploader.withoutimage.js" />
|
||||
<None Include="wwwroot\js\ueditor\third-party\webuploader\webuploader.withoutimage.min.js" />
|
||||
<None Include="wwwroot\js\ueditor\third-party\zeroclipboard\ZeroClipboard.js" />
|
||||
<None Include="wwwroot\js\ueditor\third-party\zeroclipboard\ZeroClipboard.min.js" />
|
||||
<None Include="wwwroot\js\ueditor\third-party\zeroclipboard\ZeroClipboard.swf" />
|
||||
<None Include="wwwroot\js\ueditor\ueditor.all.js" />
|
||||
<None Include="wwwroot\js\ueditor\ueditor.all.min.js" />
|
||||
<None Include="wwwroot\js\ueditor\ueditor.config.js" />
|
||||
<None Include="wwwroot\js\ueditor\ueditor.parse.js" />
|
||||
<None Include="wwwroot\js\ueditor\ueditor.parse.min.js" />
|
||||
<None Include="wwwroot\js\utils.js" />
|
||||
<None Include="wwwroot\js\vue.js" />
|
||||
<None Include="wwwroot\js\ztree.js" />
|
||||
<None Include="wwwroot\layui\css\layui.css" />
|
||||
<None Include="wwwroot\layui\css\layui.mobile.css" />
|
||||
<None Include="wwwroot\layui\css\modules\code.css" />
|
||||
<None Include="wwwroot\layui\css\modules\laydate\default\font.css" />
|
||||
<None Include="wwwroot\layui\css\modules\laydate\default\laydate.css" />
|
||||
<None Include="wwwroot\layui\css\modules\laydate\icon.png" />
|
||||
<None Include="wwwroot\layui\css\modules\laydate\laydate.css" />
|
||||
<None Include="wwwroot\layui\css\modules\layer\default\icon-ext.png" />
|
||||
<None Include="wwwroot\layui\css\modules\layer\default\icon.png" />
|
||||
<None Include="wwwroot\layui\css\modules\layer\default\layer.css" />
|
||||
<None Include="wwwroot\layui\css\modules\layer\default\loading-0.gif" />
|
||||
<None Include="wwwroot\layui\css\modules\layer\default\loading-1.gif" />
|
||||
<None Include="wwwroot\layui\css\modules\layer\default\loading-2.gif" />
|
||||
<None Include="wwwroot\layui\font\iconfont.eot" />
|
||||
<None Include="wwwroot\layui\font\iconfont.svg" />
|
||||
<None Include="wwwroot\layui\font\iconfont.ttf" />
|
||||
<None Include="wwwroot\layui\font\iconfont.woff" />
|
||||
<None Include="wwwroot\layui\font\iconfont.woff2" />
|
||||
<None Include="wwwroot\layui\images\face\0.gif" />
|
||||
<None Include="wwwroot\layui\images\face\1.gif" />
|
||||
<None Include="wwwroot\layui\images\face\10.gif" />
|
||||
<None Include="wwwroot\layui\images\face\11.gif" />
|
||||
<None Include="wwwroot\layui\images\face\12.gif" />
|
||||
<None Include="wwwroot\layui\images\face\13.gif" />
|
||||
<None Include="wwwroot\layui\images\face\14.gif" />
|
||||
<None Include="wwwroot\layui\images\face\15.gif" />
|
||||
<None Include="wwwroot\layui\images\face\16.gif" />
|
||||
<None Include="wwwroot\layui\images\face\17.gif" />
|
||||
<None Include="wwwroot\layui\images\face\18.gif" />
|
||||
<None Include="wwwroot\layui\images\face\19.gif" />
|
||||
<None Include="wwwroot\layui\images\face\2.gif" />
|
||||
<None Include="wwwroot\layui\images\face\20.gif" />
|
||||
<None Include="wwwroot\layui\images\face\21.gif" />
|
||||
<None Include="wwwroot\layui\images\face\22.gif" />
|
||||
<None Include="wwwroot\layui\images\face\23.gif" />
|
||||
<None Include="wwwroot\layui\images\face\24.gif" />
|
||||
<None Include="wwwroot\layui\images\face\25.gif" />
|
||||
<None Include="wwwroot\layui\images\face\26.gif" />
|
||||
<None Include="wwwroot\layui\images\face\27.gif" />
|
||||
<None Include="wwwroot\layui\images\face\28.gif" />
|
||||
<None Include="wwwroot\layui\images\face\29.gif" />
|
||||
<None Include="wwwroot\layui\images\face\3.gif" />
|
||||
<None Include="wwwroot\layui\images\face\30.gif" />
|
||||
<None Include="wwwroot\layui\images\face\31.gif" />
|
||||
<None Include="wwwroot\layui\images\face\32.gif" />
|
||||
<None Include="wwwroot\layui\images\face\33.gif" />
|
||||
<None Include="wwwroot\layui\images\face\34.gif" />
|
||||
<None Include="wwwroot\layui\images\face\35.gif" />
|
||||
<None Include="wwwroot\layui\images\face\36.gif" />
|
||||
<None Include="wwwroot\layui\images\face\37.gif" />
|
||||
<None Include="wwwroot\layui\images\face\38.gif" />
|
||||
<None Include="wwwroot\layui\images\face\39.gif" />
|
||||
<None Include="wwwroot\layui\images\face\4.gif" />
|
||||
<None Include="wwwroot\layui\images\face\40.gif" />
|
||||
<None Include="wwwroot\layui\images\face\41.gif" />
|
||||
<None Include="wwwroot\layui\images\face\42.gif" />
|
||||
<None Include="wwwroot\layui\images\face\43.gif" />
|
||||
<None Include="wwwroot\layui\images\face\44.gif" />
|
||||
<None Include="wwwroot\layui\images\face\45.gif" />
|
||||
<None Include="wwwroot\layui\images\face\46.gif" />
|
||||
<None Include="wwwroot\layui\images\face\47.gif" />
|
||||
<None Include="wwwroot\layui\images\face\48.gif" />
|
||||
<None Include="wwwroot\layui\images\face\49.gif" />
|
||||
<None Include="wwwroot\layui\images\face\5.gif" />
|
||||
<None Include="wwwroot\layui\images\face\50.gif" />
|
||||
<None Include="wwwroot\layui\images\face\51.gif" />
|
||||
<None Include="wwwroot\layui\images\face\52.gif" />
|
||||
<None Include="wwwroot\layui\images\face\53.gif" />
|
||||
<None Include="wwwroot\layui\images\face\54.gif" />
|
||||
<None Include="wwwroot\layui\images\face\55.gif" />
|
||||
<None Include="wwwroot\layui\images\face\56.gif" />
|
||||
<None Include="wwwroot\layui\images\face\57.gif" />
|
||||
<None Include="wwwroot\layui\images\face\58.gif" />
|
||||
<None Include="wwwroot\layui\images\face\59.gif" />
|
||||
<None Include="wwwroot\layui\images\face\6.gif" />
|
||||
<None Include="wwwroot\layui\images\face\60.gif" />
|
||||
<None Include="wwwroot\layui\images\face\61.gif" />
|
||||
<None Include="wwwroot\layui\images\face\62.gif" />
|
||||
<None Include="wwwroot\layui\images\face\63.gif" />
|
||||
<None Include="wwwroot\layui\images\face\64.gif" />
|
||||
<None Include="wwwroot\layui\images\face\65.gif" />
|
||||
<None Include="wwwroot\layui\images\face\66.gif" />
|
||||
<None Include="wwwroot\layui\images\face\67.gif" />
|
||||
<None Include="wwwroot\layui\images\face\68.gif" />
|
||||
<None Include="wwwroot\layui\images\face\69.gif" />
|
||||
<None Include="wwwroot\layui\images\face\7.gif" />
|
||||
<None Include="wwwroot\layui\images\face\70.gif" />
|
||||
<None Include="wwwroot\layui\images\face\71.gif" />
|
||||
<None Include="wwwroot\layui\images\face\8.gif" />
|
||||
<None Include="wwwroot\layui\images\face\9.gif" />
|
||||
<None Include="wwwroot\layui\layui.js" />
|
||||
<None Include="wwwroot\userJs\assignModule.js" />
|
||||
<None Include="wwwroot\userJs\assignResource.js" />
|
||||
<None Include="wwwroot\userJs\assignRole.js" />
|
||||
<None Include="wwwroot\userJs\categories.js" />
|
||||
<None Include="wwwroot\userJs\flowinstanceDetail.js" />
|
||||
<None Include="wwwroot\userJs\flowInstanceDisposed.js" />
|
||||
<None Include="wwwroot\userJs\flowInstanceEdit.js" />
|
||||
<None Include="wwwroot\userJs\flowInstances.js" />
|
||||
<None Include="wwwroot\userJs\flowInstanceWait.js" />
|
||||
<None Include="wwwroot\userJs\flowSchemeDesign.js" />
|
||||
<None Include="wwwroot\userJs\flowSchemePreview.js" />
|
||||
<None Include="wwwroot\userJs\flowSchemes.js" />
|
||||
<None Include="wwwroot\userJs\formEdit.js" />
|
||||
<None Include="wwwroot\userJs\forms.js" />
|
||||
<None Include="wwwroot\userJs\login.js" />
|
||||
<None Include="wwwroot\userJs\main.js" />
|
||||
<None Include="wwwroot\userJs\modules.js" />
|
||||
<None Include="wwwroot\userJs\nodeInfo.js" />
|
||||
<None Include="wwwroot\userJs\orgs.js" />
|
||||
<None Include="wwwroot\userJs\preview.js" />
|
||||
<None Include="wwwroot\userJs\resources.js" />
|
||||
<None Include="wwwroot\userJs\roles.js" />
|
||||
<None Include="wwwroot\userJs\users.js" />
|
||||
<None Include="wwwroot\userJs\verification.js" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Content Update="appsettings.json">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</Content>
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
<Project Sdk="Microsoft.NET.Sdk.Web">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net9.0</TargetFramework>
|
||||
<UseRazorBuildServer>false</UseRazorBuildServer>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
||||
<NoWarn>1701;1702;1591;1573;1572;1570</NoWarn>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Compile Remove="Views\Base\**" />
|
||||
<Content Remove="Views\Base\**" />
|
||||
<EmbeddedResource Remove="Views\Base\**" />
|
||||
<None Remove="Views\Base\**" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Autofac.Extensions.DependencyInjection" Version="10.0.0" />
|
||||
<PackageReference Include="IdentityServer4.AccessTokenValidation" Version="3.0.1" />
|
||||
<PackageReference Include="Microsoft.Extensions.Logging.Log4Net.AspNetCore" Version="3.1.0" />
|
||||
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="3.1.0" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\Infrastructure\Infrastructure.csproj" />
|
||||
<ProjectReference Include="..\OpenAuth.App\OpenAuth.App.csproj" />
|
||||
<ProjectReference Include="..\OpenAuth.Repository\OpenAuth.Repository.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<None Include="wwwroot\css\formpreview.css" />
|
||||
<None Include="wwwroot\css\images.css" />
|
||||
<None Include="wwwroot\css\login.css" />
|
||||
<None Include="wwwroot\css\main.css" />
|
||||
<None Include="wwwroot\css\metroStyle\img\line_conn.png" />
|
||||
<None Include="wwwroot\css\metroStyle\img\loading.gif" />
|
||||
<None Include="wwwroot\css\metroStyle\img\metro.gif" />
|
||||
<None Include="wwwroot\css\metroStyle\img\metro.png" />
|
||||
<None Include="wwwroot\css\metroStyle\metroStyle.css" />
|
||||
<None Include="wwwroot\css\treetable.css" />
|
||||
<None Include="wwwroot\images\alipay.jpg" />
|
||||
<None Include="wwwroot\images\code.jpg" />
|
||||
<None Include="wwwroot\images\face.jpg" />
|
||||
<None Include="wwwroot\images\login\buttonbg.png" />
|
||||
<None Include="wwwroot\images\login\cloud.png" />
|
||||
<None Include="wwwroot\images\login\hand.png" />
|
||||
<None Include="wwwroot\images\login\left_hand.png" />
|
||||
<None Include="wwwroot\images\login\light.png" />
|
||||
<None Include="wwwroot\images\login\loginbg1.png" />
|
||||
<None Include="wwwroot\images\login\loginbg2.png" />
|
||||
<None Include="wwwroot\images\login\loginbg3.png" />
|
||||
<None Include="wwwroot\images\login\logininfo.png" />
|
||||
<None Include="wwwroot\images\login\loginpassword.png" />
|
||||
<None Include="wwwroot\images\login\loginsj.png" />
|
||||
<None Include="wwwroot\images\login\loginuser.png" />
|
||||
<None Include="wwwroot\images\login\logo.png" />
|
||||
<None Include="wwwroot\images\login\right_hand.png" />
|
||||
<None Include="wwwroot\images\login\tou.png" />
|
||||
<None Include="wwwroot\images\logo.png" />
|
||||
<None Include="wwwroot\images\userface1.jpg" />
|
||||
<None Include="wwwroot\images\userface2.jpg" />
|
||||
<None Include="wwwroot\images\userface3.jpg" />
|
||||
<None Include="wwwroot\images\userface4.jpg" />
|
||||
<None Include="wwwroot\images\userface5.jpg" />
|
||||
<None Include="wwwroot\images\wechat.jpg" />
|
||||
<None Include="wwwroot\js\bodyTab.js" />
|
||||
<None Include="wwwroot\js\bootstrap.js" />
|
||||
<None Include="wwwroot\js\droptree.js" />
|
||||
<None Include="wwwroot\js\dtree.js" />
|
||||
<None Include="wwwroot\js\dtree\font\dtreefont.svg" />
|
||||
<None Include="wwwroot\js\flow-ui\img\wallbg.png" />
|
||||
<None Include="wwwroot\js\flowlayout.js" />
|
||||
<None Include="wwwroot\js\flow\config.js" />
|
||||
<None Include="wwwroot\js\flow\fonts\demo.css" />
|
||||
<None Include="wwwroot\js\flow\fonts\demo_fontclass.html" />
|
||||
<None Include="wwwroot\js\flow\fonts\demo_symbol.html" />
|
||||
<None Include="wwwroot\js\flow\fonts\demo_unicode.html" />
|
||||
<None Include="wwwroot\js\flow\fonts\iconflow.eot" />
|
||||
<None Include="wwwroot\js\flow\fonts\iconflow.svg" />
|
||||
<None Include="wwwroot\js\flow\fonts\iconflow.ttf" />
|
||||
<None Include="wwwroot\js\flow\fonts\iconflow.woff" />
|
||||
<None Include="wwwroot\js\flow\fonts\iconfont.css" />
|
||||
<None Include="wwwroot\js\flow\fonts\iconfont.js" />
|
||||
<None Include="wwwroot\js\flow\GooFlow.css" />
|
||||
<None Include="wwwroot\js\flow\GooFlow.export.js" />
|
||||
<None Include="wwwroot\js\flow\gooflow.js" />
|
||||
<None Include="wwwroot\js\flow\GooFlow.print.js" />
|
||||
<None Include="wwwroot\js\flow\GooFunc.js" />
|
||||
<None Include="wwwroot\js\flow\img\gooflow_icon.png" />
|
||||
<None Include="wwwroot\js\index.js" />
|
||||
<None Include="wwwroot\js\leftNav.js" />
|
||||
<None Include="wwwroot\js\openauth.js" />
|
||||
<None Include="wwwroot\js\slimscroll.js" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\anchor\anchor.html" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\attachment\attachment.css" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\attachment\attachment.html" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\attachment\attachment.js" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\attachment\fileTypeImages\icon_chm.gif" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\attachment\fileTypeImages\icon_default.png" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\attachment\fileTypeImages\icon_doc.gif" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\attachment\fileTypeImages\icon_exe.gif" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\attachment\fileTypeImages\icon_jpg.gif" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\attachment\fileTypeImages\icon_mp3.gif" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\attachment\fileTypeImages\icon_mv.gif" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\attachment\fileTypeImages\icon_pdf.gif" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\attachment\fileTypeImages\icon_ppt.gif" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\attachment\fileTypeImages\icon_psd.gif" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\attachment\fileTypeImages\icon_rar.gif" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\attachment\fileTypeImages\icon_txt.gif" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\attachment\fileTypeImages\icon_xls.gif" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\attachment\images\alignicon.gif" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\attachment\images\alignicon.png" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\attachment\images\bg.png" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\attachment\images\file-icons.gif" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\attachment\images\file-icons.png" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\attachment\images\icons.gif" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\attachment\images\icons.png" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\attachment\images\image.png" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\attachment\images\progress.png" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\attachment\images\success.gif" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\attachment\images\success.png" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\background\background.css" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\background\background.html" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\background\background.js" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\background\images\bg.png" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\background\images\success.png" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\charts\chart.config.js" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\charts\charts.css" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\charts\charts.html" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\charts\charts.js" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\charts\images\charts0.png" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\charts\images\charts1.png" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\charts\images\charts2.png" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\charts\images\charts3.png" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\charts\images\charts4.png" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\charts\images\charts5.png" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\emotion\emotion.css" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\emotion\emotion.html" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\emotion\emotion.js" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\emotion\images\0.gif" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\emotion\images\bface.gif" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\emotion\images\cface.gif" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\emotion\images\fface.gif" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\emotion\images\jxface2.gif" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\emotion\images\neweditor-tab-bg.png" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\emotion\images\tface.gif" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\emotion\images\wface.gif" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\emotion\images\yface.gif" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\gmap\gmap.html" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\help\help.css" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\help\help.html" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\help\help.js" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\image\image.css" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\image\image.html" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\image\image.js" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\image\images\alignicon.jpg" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\image\images\bg.png" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\image\images\icons.gif" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\image\images\icons.png" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\image\images\image.png" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\image\images\progress.png" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\image\images\success.gif" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\image\images\success.png" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\insertframe\insertframe.html" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\internal.js" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\link\link.html" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\map\map.html" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\map\show.html" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\music\music.css" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\music\music.html" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\music\music.js" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\preview\preview.html" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\scrawl\images\addimg.png" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\scrawl\images\brush.png" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\scrawl\images\delimg.png" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\scrawl\images\delimgH.png" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\scrawl\images\empty.png" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\scrawl\images\emptyH.png" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\scrawl\images\eraser.png" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\scrawl\images\redo.png" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\scrawl\images\redoH.png" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\scrawl\images\scale.png" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\scrawl\images\scaleH.png" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\scrawl\images\size.png" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\scrawl\images\undo.png" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\scrawl\images\undoH.png" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\scrawl\scrawl.css" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\scrawl\scrawl.html" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\scrawl\scrawl.js" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\searchreplace\searchreplace.html" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\searchreplace\searchreplace.js" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\snapscreen\snapscreen.html" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\spechars\spechars.html" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\spechars\spechars.js" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\table\dragicon.png" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\table\edittable.css" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\table\edittable.html" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\table\edittable.js" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\table\edittd.html" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\table\edittip.html" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\template\config.js" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\template\images\bg.gif" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\template\images\pre0.png" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\template\images\pre1.png" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\template\images\pre2.png" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\template\images\pre3.png" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\template\images\pre4.png" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\template\template.css" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\template\template.html" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\template\template.js" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\video\images\bg.png" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\video\images\center_focus.jpg" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\video\images\file-icons.gif" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\video\images\file-icons.png" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\video\images\icons.gif" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\video\images\icons.png" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\video\images\image.png" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\video\images\left_focus.jpg" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\video\images\none_focus.jpg" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\video\images\progress.png" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\video\images\right_focus.jpg" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\video\images\success.gif" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\video\images\success.png" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\video\video.css" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\video\video.html" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\video\video.js" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\webapp\webapp.html" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\wordimage\fClipboard_ueditor.swf" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\wordimage\imageUploader.swf" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\wordimage\tangram.js" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\wordimage\wordimage.html" />
|
||||
<None Include="wwwroot\js\ueditor\dialogs\wordimage\wordimage.js" />
|
||||
<None Include="wwwroot\js\ueditor\formdesign\bootstrap-ie.js" />
|
||||
<None Include="wwwroot\js\ueditor\formdesign\bootstrap\css\bootstrap-ie6.css" />
|
||||
<None Include="wwwroot\js\ueditor\formdesign\bootstrap\css\bootstrap-ie6.min.css" />
|
||||
<None Include="wwwroot\js\ueditor\formdesign\bootstrap\css\bootstrap-responsive.css" />
|
||||
<None Include="wwwroot\js\ueditor\formdesign\bootstrap\css\bootstrap-responsive.min.css" />
|
||||
<None Include="wwwroot\js\ueditor\formdesign\bootstrap\css\bootstrap.css" />
|
||||
<None Include="wwwroot\js\ueditor\formdesign\bootstrap\css\bootstrap.min.css" />
|
||||
<None Include="wwwroot\js\ueditor\formdesign\bootstrap\css\ie.css" />
|
||||
<None Include="wwwroot\js\ueditor\formdesign\bootstrap\img\glyphicons-halflings-white.png" />
|
||||
<None Include="wwwroot\js\ueditor\formdesign\bootstrap\img\glyphicons-halflings.png" />
|
||||
<None Include="wwwroot\js\ueditor\formdesign\bootstrap\js\bootstrap.js" />
|
||||
<None Include="wwwroot\js\ueditor\formdesign\bootstrap\js\bootstrap.min.js" />
|
||||
<None Include="wwwroot\js\ueditor\formdesign\checkbox.html" />
|
||||
<None Include="wwwroot\js\ueditor\formdesign\checkboxs.html" />
|
||||
<None Include="wwwroot\js\ueditor\formdesign\error.html" />
|
||||
<None Include="wwwroot\js\ueditor\formdesign\images\leipi_formdesign.png" />
|
||||
<None Include="wwwroot\js\ueditor\formdesign\images\progressbar.gif" />
|
||||
<None Include="wwwroot\js\ueditor\formdesign\images\qrcode.gif" />
|
||||
<None Include="wwwroot\js\ueditor\formdesign\images\template\bg.gif" />
|
||||
<None Include="wwwroot\js\ueditor\formdesign\images\template\pre0.png" />
|
||||
<None Include="wwwroot\js\ueditor\formdesign\images\template\pre1.png" />
|
||||
<None Include="wwwroot\js\ueditor\formdesign\jquery-1.7.2.min.js" />
|
||||
<None Include="wwwroot\js\ueditor\formdesign\leipi.formdesign.v4.js" />
|
||||
<None Include="wwwroot\js\ueditor\formdesign\leipi.html" />
|
||||
<None Include="wwwroot\js\ueditor\formdesign\leipi.style.css" />
|
||||
<None Include="wwwroot\js\ueditor\formdesign\listctrl.html" />
|
||||
<None Include="wwwroot\js\ueditor\formdesign\macros.html" />
|
||||
<None Include="wwwroot\js\ueditor\formdesign\more.html" />
|
||||
<None Include="wwwroot\js\ueditor\formdesign\progressbar.html" />
|
||||
<None Include="wwwroot\js\ueditor\formdesign\qrcode.html" />
|
||||
<None Include="wwwroot\js\ueditor\formdesign\radio.html" />
|
||||
<None Include="wwwroot\js\ueditor\formdesign\radios.html" />
|
||||
<None Include="wwwroot\js\ueditor\formdesign\Readme.txt" />
|
||||
<None Include="wwwroot\js\ueditor\formdesign\select.html" />
|
||||
<None Include="wwwroot\js\ueditor\formdesign\template.html" />
|
||||
<None Include="wwwroot\js\ueditor\formdesign\text.html" />
|
||||
<None Include="wwwroot\js\ueditor\formdesign\textarea.html" />
|
||||
<None Include="wwwroot\js\ueditor\formdesign\textfield.html.ajax.bak" />
|
||||
<None Include="wwwroot\js\ueditor\index.html" />
|
||||
<None Include="wwwroot\js\ueditor\lang\en\en.js" />
|
||||
<None Include="wwwroot\js\ueditor\lang\en\images\addimage.png" />
|
||||
<None Include="wwwroot\js\ueditor\lang\en\images\alldeletebtnhoverskin.png" />
|
||||
<None Include="wwwroot\js\ueditor\lang\en\images\alldeletebtnupskin.png" />
|
||||
<None Include="wwwroot\js\ueditor\lang\en\images\background.png" />
|
||||
<None Include="wwwroot\js\ueditor\lang\en\images\button.png" />
|
||||
<None Include="wwwroot\js\ueditor\lang\en\images\copy.png" />
|
||||
<None Include="wwwroot\js\ueditor\lang\en\images\deletedisable.png" />
|
||||
<None Include="wwwroot\js\ueditor\lang\en\images\deleteenable.png" />
|
||||
<None Include="wwwroot\js\ueditor\lang\en\images\listbackground.png" />
|
||||
<None Include="wwwroot\js\ueditor\lang\en\images\localimage.png" />
|
||||
<None Include="wwwroot\js\ueditor\lang\en\images\music.png" />
|
||||
<None Include="wwwroot\js\ueditor\lang\en\images\rotateleftdisable.png" />
|
||||
<None Include="wwwroot\js\ueditor\lang\en\images\rotateleftenable.png" />
|
||||
<None Include="wwwroot\js\ueditor\lang\en\images\rotaterightdisable.png" />
|
||||
<None Include="wwwroot\js\ueditor\lang\en\images\rotaterightenable.png" />
|
||||
<None Include="wwwroot\js\ueditor\lang\en\images\upload.png" />
|
||||
<None Include="wwwroot\js\ueditor\lang\zh-cn\images\copy.png" />
|
||||
<None Include="wwwroot\js\ueditor\lang\zh-cn\images\localimage.png" />
|
||||
<None Include="wwwroot\js\ueditor\lang\zh-cn\images\music.png" />
|
||||
<None Include="wwwroot\js\ueditor\lang\zh-cn\images\upload.png" />
|
||||
<None Include="wwwroot\js\ueditor\lang\zh-cn\zh-cn.js" />
|
||||
<None Include="wwwroot\js\ueditor\themes\default\css\ueditor.css" />
|
||||
<None Include="wwwroot\js\ueditor\themes\default\css\ueditor.min.css" />
|
||||
<None Include="wwwroot\js\ueditor\themes\default\dialogbase.css" />
|
||||
<None Include="wwwroot\js\ueditor\themes\default\images\anchor.gif" />
|
||||
<None Include="wwwroot\js\ueditor\themes\default\images\arrow.png" />
|
||||
<None Include="wwwroot\js\ueditor\themes\default\images\arrow_down.png" />
|
||||
<None Include="wwwroot\js\ueditor\themes\default\images\arrow_up.png" />
|
||||
<None Include="wwwroot\js\ueditor\themes\default\images\button-bg.gif" />
|
||||
<None Include="wwwroot\js\ueditor\themes\default\images\cancelbutton.gif" />
|
||||
<None Include="wwwroot\js\ueditor\themes\default\images\charts.png" />
|
||||
<None Include="wwwroot\js\ueditor\themes\default\images\cursor_h.gif" />
|
||||
<None Include="wwwroot\js\ueditor\themes\default\images\cursor_h.png" />
|
||||
<None Include="wwwroot\js\ueditor\themes\default\images\cursor_v.gif" />
|
||||
<None Include="wwwroot\js\ueditor\themes\default\images\cursor_v.png" />
|
||||
<None Include="wwwroot\js\ueditor\themes\default\images\dialog-title-bg.png" />
|
||||
<None Include="wwwroot\js\ueditor\themes\default\images\filescan.png" />
|
||||
<None Include="wwwroot\js\ueditor\themes\default\images\highlighted.gif" />
|
||||
<None Include="wwwroot\js\ueditor\themes\default\images\icons-all.gif" />
|
||||
<None Include="wwwroot\js\ueditor\themes\default\images\icons.gif" />
|
||||
<None Include="wwwroot\js\ueditor\themes\default\images\icons.png" />
|
||||
<None Include="wwwroot\js\ueditor\themes\default\images\loaderror.png" />
|
||||
<None Include="wwwroot\js\ueditor\themes\default\images\loading.gif" />
|
||||
<None Include="wwwroot\js\ueditor\themes\default\images\lock.gif" />
|
||||
<None Include="wwwroot\js\ueditor\themes\default\images\neweditor-tab-bg.png" />
|
||||
<None Include="wwwroot\js\ueditor\themes\default\images\pagebreak.gif" />
|
||||
<None Include="wwwroot\js\ueditor\themes\default\images\scale.png" />
|
||||
<None Include="wwwroot\js\ueditor\themes\default\images\sortable.png" />
|
||||
<None Include="wwwroot\js\ueditor\themes\default\images\spacer.gif" />
|
||||
<None Include="wwwroot\js\ueditor\themes\default\images\sparator_v.png" />
|
||||
<None Include="wwwroot\js\ueditor\themes\default\images\table-cell-align.png" />
|
||||
<None Include="wwwroot\js\ueditor\themes\default\images\tangram-colorpicker.png" />
|
||||
<None Include="wwwroot\js\ueditor\themes\default\images\toolbar_bg.png" />
|
||||
<None Include="wwwroot\js\ueditor\themes\default\images\unhighlighted.gif" />
|
||||
<None Include="wwwroot\js\ueditor\themes\default\images\upload.png" />
|
||||
<None Include="wwwroot\js\ueditor\themes\default\images\videologo.gif" />
|
||||
<None Include="wwwroot\js\ueditor\themes\default\images\word.gif" />
|
||||
<None Include="wwwroot\js\ueditor\themes\default\images\wordpaste.png" />
|
||||
<None Include="wwwroot\js\ueditor\themes\iframe.css" />
|
||||
<None Include="wwwroot\js\ueditor\third-party\codemirror\codemirror.js" />
|
||||
<None Include="wwwroot\js\ueditor\third-party\webuploader\Uploader.swf" />
|
||||
<None Include="wwwroot\js\ueditor\third-party\webuploader\webuploader.css" />
|
||||
<None Include="wwwroot\js\ueditor\third-party\webuploader\webuploader.custom.js" />
|
||||
<None Include="wwwroot\js\ueditor\third-party\webuploader\webuploader.custom.min.js" />
|
||||
<None Include="wwwroot\js\ueditor\third-party\webuploader\webuploader.flashonly.js" />
|
||||
<None Include="wwwroot\js\ueditor\third-party\webuploader\webuploader.flashonly.min.js" />
|
||||
<None Include="wwwroot\js\ueditor\third-party\webuploader\webuploader.html5only.js" />
|
||||
<None Include="wwwroot\js\ueditor\third-party\webuploader\webuploader.html5only.min.js" />
|
||||
<None Include="wwwroot\js\ueditor\third-party\webuploader\webuploader.js" />
|
||||
<None Include="wwwroot\js\ueditor\third-party\webuploader\webuploader.min.js" />
|
||||
<None Include="wwwroot\js\ueditor\third-party\webuploader\webuploader.withoutimage.js" />
|
||||
<None Include="wwwroot\js\ueditor\third-party\webuploader\webuploader.withoutimage.min.js" />
|
||||
<None Include="wwwroot\js\ueditor\third-party\zeroclipboard\ZeroClipboard.js" />
|
||||
<None Include="wwwroot\js\ueditor\third-party\zeroclipboard\ZeroClipboard.min.js" />
|
||||
<None Include="wwwroot\js\ueditor\third-party\zeroclipboard\ZeroClipboard.swf" />
|
||||
<None Include="wwwroot\js\ueditor\ueditor.all.js" />
|
||||
<None Include="wwwroot\js\ueditor\ueditor.all.min.js" />
|
||||
<None Include="wwwroot\js\ueditor\ueditor.config.js" />
|
||||
<None Include="wwwroot\js\ueditor\ueditor.parse.js" />
|
||||
<None Include="wwwroot\js\ueditor\ueditor.parse.min.js" />
|
||||
<None Include="wwwroot\js\utils.js" />
|
||||
<None Include="wwwroot\js\vue.js" />
|
||||
<None Include="wwwroot\js\ztree.js" />
|
||||
<None Include="wwwroot\layui\css\layui.css" />
|
||||
<None Include="wwwroot\layui\css\layui.mobile.css" />
|
||||
<None Include="wwwroot\layui\css\modules\code.css" />
|
||||
<None Include="wwwroot\layui\css\modules\laydate\default\font.css" />
|
||||
<None Include="wwwroot\layui\css\modules\laydate\default\laydate.css" />
|
||||
<None Include="wwwroot\layui\css\modules\laydate\icon.png" />
|
||||
<None Include="wwwroot\layui\css\modules\laydate\laydate.css" />
|
||||
<None Include="wwwroot\layui\css\modules\layer\default\icon-ext.png" />
|
||||
<None Include="wwwroot\layui\css\modules\layer\default\icon.png" />
|
||||
<None Include="wwwroot\layui\css\modules\layer\default\layer.css" />
|
||||
<None Include="wwwroot\layui\css\modules\layer\default\loading-0.gif" />
|
||||
<None Include="wwwroot\layui\css\modules\layer\default\loading-1.gif" />
|
||||
<None Include="wwwroot\layui\css\modules\layer\default\loading-2.gif" />
|
||||
<None Include="wwwroot\layui\font\iconfont.eot" />
|
||||
<None Include="wwwroot\layui\font\iconfont.svg" />
|
||||
<None Include="wwwroot\layui\font\iconfont.ttf" />
|
||||
<None Include="wwwroot\layui\font\iconfont.woff" />
|
||||
<None Include="wwwroot\layui\font\iconfont.woff2" />
|
||||
<None Include="wwwroot\layui\images\face\0.gif" />
|
||||
<None Include="wwwroot\layui\images\face\1.gif" />
|
||||
<None Include="wwwroot\layui\images\face\10.gif" />
|
||||
<None Include="wwwroot\layui\images\face\11.gif" />
|
||||
<None Include="wwwroot\layui\images\face\12.gif" />
|
||||
<None Include="wwwroot\layui\images\face\13.gif" />
|
||||
<None Include="wwwroot\layui\images\face\14.gif" />
|
||||
<None Include="wwwroot\layui\images\face\15.gif" />
|
||||
<None Include="wwwroot\layui\images\face\16.gif" />
|
||||
<None Include="wwwroot\layui\images\face\17.gif" />
|
||||
<None Include="wwwroot\layui\images\face\18.gif" />
|
||||
<None Include="wwwroot\layui\images\face\19.gif" />
|
||||
<None Include="wwwroot\layui\images\face\2.gif" />
|
||||
<None Include="wwwroot\layui\images\face\20.gif" />
|
||||
<None Include="wwwroot\layui\images\face\21.gif" />
|
||||
<None Include="wwwroot\layui\images\face\22.gif" />
|
||||
<None Include="wwwroot\layui\images\face\23.gif" />
|
||||
<None Include="wwwroot\layui\images\face\24.gif" />
|
||||
<None Include="wwwroot\layui\images\face\25.gif" />
|
||||
<None Include="wwwroot\layui\images\face\26.gif" />
|
||||
<None Include="wwwroot\layui\images\face\27.gif" />
|
||||
<None Include="wwwroot\layui\images\face\28.gif" />
|
||||
<None Include="wwwroot\layui\images\face\29.gif" />
|
||||
<None Include="wwwroot\layui\images\face\3.gif" />
|
||||
<None Include="wwwroot\layui\images\face\30.gif" />
|
||||
<None Include="wwwroot\layui\images\face\31.gif" />
|
||||
<None Include="wwwroot\layui\images\face\32.gif" />
|
||||
<None Include="wwwroot\layui\images\face\33.gif" />
|
||||
<None Include="wwwroot\layui\images\face\34.gif" />
|
||||
<None Include="wwwroot\layui\images\face\35.gif" />
|
||||
<None Include="wwwroot\layui\images\face\36.gif" />
|
||||
<None Include="wwwroot\layui\images\face\37.gif" />
|
||||
<None Include="wwwroot\layui\images\face\38.gif" />
|
||||
<None Include="wwwroot\layui\images\face\39.gif" />
|
||||
<None Include="wwwroot\layui\images\face\4.gif" />
|
||||
<None Include="wwwroot\layui\images\face\40.gif" />
|
||||
<None Include="wwwroot\layui\images\face\41.gif" />
|
||||
<None Include="wwwroot\layui\images\face\42.gif" />
|
||||
<None Include="wwwroot\layui\images\face\43.gif" />
|
||||
<None Include="wwwroot\layui\images\face\44.gif" />
|
||||
<None Include="wwwroot\layui\images\face\45.gif" />
|
||||
<None Include="wwwroot\layui\images\face\46.gif" />
|
||||
<None Include="wwwroot\layui\images\face\47.gif" />
|
||||
<None Include="wwwroot\layui\images\face\48.gif" />
|
||||
<None Include="wwwroot\layui\images\face\49.gif" />
|
||||
<None Include="wwwroot\layui\images\face\5.gif" />
|
||||
<None Include="wwwroot\layui\images\face\50.gif" />
|
||||
<None Include="wwwroot\layui\images\face\51.gif" />
|
||||
<None Include="wwwroot\layui\images\face\52.gif" />
|
||||
<None Include="wwwroot\layui\images\face\53.gif" />
|
||||
<None Include="wwwroot\layui\images\face\54.gif" />
|
||||
<None Include="wwwroot\layui\images\face\55.gif" />
|
||||
<None Include="wwwroot\layui\images\face\56.gif" />
|
||||
<None Include="wwwroot\layui\images\face\57.gif" />
|
||||
<None Include="wwwroot\layui\images\face\58.gif" />
|
||||
<None Include="wwwroot\layui\images\face\59.gif" />
|
||||
<None Include="wwwroot\layui\images\face\6.gif" />
|
||||
<None Include="wwwroot\layui\images\face\60.gif" />
|
||||
<None Include="wwwroot\layui\images\face\61.gif" />
|
||||
<None Include="wwwroot\layui\images\face\62.gif" />
|
||||
<None Include="wwwroot\layui\images\face\63.gif" />
|
||||
<None Include="wwwroot\layui\images\face\64.gif" />
|
||||
<None Include="wwwroot\layui\images\face\65.gif" />
|
||||
<None Include="wwwroot\layui\images\face\66.gif" />
|
||||
<None Include="wwwroot\layui\images\face\67.gif" />
|
||||
<None Include="wwwroot\layui\images\face\68.gif" />
|
||||
<None Include="wwwroot\layui\images\face\69.gif" />
|
||||
<None Include="wwwroot\layui\images\face\7.gif" />
|
||||
<None Include="wwwroot\layui\images\face\70.gif" />
|
||||
<None Include="wwwroot\layui\images\face\71.gif" />
|
||||
<None Include="wwwroot\layui\images\face\8.gif" />
|
||||
<None Include="wwwroot\layui\images\face\9.gif" />
|
||||
<None Include="wwwroot\layui\layui.js" />
|
||||
<None Include="wwwroot\userJs\assignModule.js" />
|
||||
<None Include="wwwroot\userJs\assignResource.js" />
|
||||
<None Include="wwwroot\userJs\assignRole.js" />
|
||||
<None Include="wwwroot\userJs\categories.js" />
|
||||
<None Include="wwwroot\userJs\flowinstanceDetail.js" />
|
||||
<None Include="wwwroot\userJs\flowInstanceDisposed.js" />
|
||||
<None Include="wwwroot\userJs\flowInstanceEdit.js" />
|
||||
<None Include="wwwroot\userJs\flowInstances.js" />
|
||||
<None Include="wwwroot\userJs\flowInstanceWait.js" />
|
||||
<None Include="wwwroot\userJs\flowSchemeDesign.js" />
|
||||
<None Include="wwwroot\userJs\flowSchemePreview.js" />
|
||||
<None Include="wwwroot\userJs\flowSchemes.js" />
|
||||
<None Include="wwwroot\userJs\formEdit.js" />
|
||||
<None Include="wwwroot\userJs\forms.js" />
|
||||
<None Include="wwwroot\userJs\login.js" />
|
||||
<None Include="wwwroot\userJs\main.js" />
|
||||
<None Include="wwwroot\userJs\modules.js" />
|
||||
<None Include="wwwroot\userJs\nodeInfo.js" />
|
||||
<None Include="wwwroot\userJs\orgs.js" />
|
||||
<None Include="wwwroot\userJs\preview.js" />
|
||||
<None Include="wwwroot\userJs\resources.js" />
|
||||
<None Include="wwwroot\userJs\roles.js" />
|
||||
<None Include="wwwroot\userJs\users.js" />
|
||||
<None Include="wwwroot\userJs\verification.js" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Content Update="appsettings.json">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</Content>
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
||||
@@ -1,4 +1,14 @@
|
||||
{
|
||||
"profiles": {
|
||||
"OpenAuth.Mvc": {
|
||||
"commandName": "Project",
|
||||
"launchBrowser": true,
|
||||
"environmentVariables": {
|
||||
"ASPNETCORE_ENVIRONMENT": "Development"
|
||||
},
|
||||
"applicationUrl": "http://localhost:1802"
|
||||
}
|
||||
},
|
||||
"iisSettings": {
|
||||
"windowsAuthentication": false,
|
||||
"anonymousAuthentication": true,
|
||||
@@ -6,22 +16,5 @@
|
||||
"applicationUrl": "http://localhost:1802",
|
||||
"sslPort": 0
|
||||
}
|
||||
},
|
||||
"profiles": {
|
||||
"IIS Express": {
|
||||
"commandName": "Project",
|
||||
"launchBrowser": true,
|
||||
"environmentVariables": {
|
||||
"ASPNETCORE_ENVIRONMENT": "Development"
|
||||
}
|
||||
},
|
||||
"OpenAuth.Mvc": {
|
||||
"commandName": "Project",
|
||||
"launchBrowser": true,
|
||||
"environmentVariables": {
|
||||
"ASPNETCORE_ENVIRONMENT": "Development"
|
||||
},
|
||||
"applicationUrl": "http://localhost:5000"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,5 @@
|
||||
using System.IO;
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using Autofac;
|
||||
using Infrastructure;
|
||||
@@ -6,7 +7,6 @@ using Infrastructure.Extensions.AutofacManager;
|
||||
using Microsoft.AspNetCore.Builder;
|
||||
using Microsoft.AspNetCore.DataProtection;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.Extensions.Hosting;
|
||||
@@ -70,7 +70,7 @@ namespace OpenAuth.Mvc
|
||||
{
|
||||
// This lambda determines whether user consent for non-essential cookies is needed for a given request.
|
||||
//关闭GDPR规范
|
||||
options.CheckConsentNeeded = context => false;
|
||||
options.CheckConsentNeeded = (HttpContext context) => false;
|
||||
options.MinimumSameSitePolicy = SameSiteMode.None;
|
||||
});
|
||||
|
||||
@@ -99,8 +99,6 @@ namespace OpenAuth.Mvc
|
||||
|
||||
services.AddHttpClient();
|
||||
|
||||
services.AddDataProtection().PersistKeysToFileSystem(new DirectoryInfo(Configuration["DataProtection"]));
|
||||
|
||||
var sqlsugarTypes = UtilMethods.EnumToDictionary<SqlSugar.DbType>();
|
||||
var dbType = sqlsugarTypes.FirstOrDefault(it =>
|
||||
dbtypes.ToDictionary(u => u.Key, v => v.Value.ToLower()).ContainsValue(it.Key));
|
||||
@@ -123,7 +121,6 @@ namespace OpenAuth.Mvc
|
||||
|
||||
//设置定时启动的任务
|
||||
services.AddHostedService<QuartzService>();
|
||||
|
||||
}
|
||||
|
||||
public void ConfigureContainer(ContainerBuilder builder)
|
||||
@@ -144,8 +141,8 @@ namespace OpenAuth.Mvc
|
||||
else
|
||||
{
|
||||
app.UseExceptionHandler("/Home/Error");
|
||||
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
|
||||
app.UseHsts();
|
||||
// 生产环境开启HSTS
|
||||
// app.UseHsts();
|
||||
}
|
||||
|
||||
app.UseStaticFiles();
|
||||
|
||||
@@ -89,17 +89,23 @@
|
||||
<div class="row">
|
||||
<div class="sysNotice col">
|
||||
<blockquote class="layui-elem-quote title">更新日志</blockquote>
|
||||
<div class="layui-elem-quote layui-quote-nm">
|
||||
<div class="layui-elem-quote layui-quote-nm">
|
||||
<h3># 最新版</h3>
|
||||
<p>* 【新增】默认sdk升级.Net 9.0</p>
|
||||
<p>* 【新增】增加知会功能。详情:<a href="http://doc.openauth.net.cn/core/flowinstance.html#%E7%9F%A5%E4%BC%9A" target="_blank" class="layui-btn layui-btn-xs layui-btn-danger">知会</a></p>
|
||||
<p>* 【新增】新增增加签逻辑。详情:<a href="http://doc.openauth.net.cn/core/flowinstance.html#%E5%8A%A0%E7%AD%BE" target="_blank" class="layui-btn layui-btn-xs layui-btn-danger">加签</a></p>
|
||||
</div>
|
||||
<div class="layui-elem-quote layui-quote-nm">
|
||||
<h3># 6.0</h3>
|
||||
<p>* 【新增】框架升级至.Net 6.0</p>
|
||||
<p>* 【优化】升级layui至2.8.6</p>
|
||||
<p>
|
||||
<p>* 【优化】升级layui至2.8.6</p>
|
||||
<p>
|
||||
* 【新增】全面支持SqlSugar Orm:
|
||||
详见:<a href="http://doc.openauth.net.cn/core/sqlsugar.html" target="_blank" class="layui-btn layui-btn-xs layui-btn-danger">
|
||||
http://doc.openauth.net.cn/core/sqlsugar.html
|
||||
</a>
|
||||
</p>
|
||||
</div>
|
||||
详见:<a href="http://doc.openauth.net.cn/core/sqlsugar.html" target="_blank" class="layui-btn layui-btn-xs layui-btn-danger">
|
||||
http://doc.openauth.net.cn/core/sqlsugar.html
|
||||
</a>
|
||||
</p>
|
||||
</div>
|
||||
<div class="layui-elem-quote layui-quote-nm">
|
||||
<h3># 3.2</h3>
|
||||
<p>* 【新增】增加在swagger界面查看接口调用时间及SQL执行时间</p>
|
||||
|
||||
@@ -10,8 +10,8 @@
|
||||
"OpenAuthDBContext": "server=127.0.0.1;user id=root;database=openauthdb;password=000000" //my sql
|
||||
},
|
||||
"AppSetting": {
|
||||
"IdentityServerUrl": "http://demo.openauth.net.cn:12796", //IdentityServer服务器地址。如果为空,则不启用OAuth认证
|
||||
// "IdentityServerUrl": "", //IdentityServer服务器地址。如果为空,则不启用OAuth认证
|
||||
// "IdentityServerUrl": "http://demo.openauth.net.cn:12796", //IdentityServer服务器地址。如果为空,则不启用OAuth认证
|
||||
"IdentityServerUrl": "", //IdentityServer服务器地址。如果为空,则不启用OAuth认证
|
||||
"SSOPassport": "http://localhost:52789",
|
||||
"Version": "demo",
|
||||
"DbTypes": {
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
"AllowedHosts": "*",
|
||||
"DataProtection": "temp-keys/",
|
||||
"ConnectionStrings": {
|
||||
"OpenAuthDBContext": "Data Source=.;Initial Catalog=OpenAuthDB;User=sa;Password=000000"
|
||||
"OpenAuthDBContext": "Data Source=.;Encrypt=false;Initial Catalog=OpenAuthDB;User=sa;Password=000000"
|
||||
//"OpenAuthDBContext": "server=127.0.0.1;user id=root;database=openauthdb;password=000000" //my sql
|
||||
//"OpenAuthDBContext": "Host=localhost;Port=5432;Database=OpenAuth;Username=postgres;Password=123;" //PostgreSQL
|
||||
},
|
||||
|
||||
@@ -1,16 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<key id="628839e2-4f54-416f-9b66-23fafd007ab0" version="1">
|
||||
<creationDate>2020-04-24T08:26:04.9990208Z</creationDate>
|
||||
<activationDate>2020-04-24T08:26:04.9481282Z</activationDate>
|
||||
<expirationDate>2020-07-23T08:26:04.9481282Z</expirationDate>
|
||||
<descriptor deserializerType="Microsoft.AspNetCore.DataProtection.AuthenticatedEncryption.ConfigurationModel.AuthenticatedEncryptorDescriptorDeserializer, Microsoft.AspNetCore.DataProtection, Version=3.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60">
|
||||
<descriptor>
|
||||
<encryption algorithm="AES_256_CBC" />
|
||||
<validation algorithm="HMACSHA256" />
|
||||
<masterKey p4:requiresEncryption="true" xmlns:p4="http://schemas.asp.net/2015/03/dataProtection">
|
||||
<!-- Warning: the key below is in an unencrypted form. -->
|
||||
<value>blC9xnXdRf5Uytfd1qOaGG6Z9ouurZ4j3p9UUlOs54j0xEhqd01y0AmwUfrJDp37+HZqODq8vgzGz6xBDgv9ZQ==</value>
|
||||
</masterKey>
|
||||
</descriptor>
|
||||
</descriptor>
|
||||
</key>
|
||||
@@ -1,16 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<key id="dbe172a1-9e7b-4886-a94e-de8124a4bd0d" version="1">
|
||||
<creationDate>2020-09-10T03:37:11.831349Z</creationDate>
|
||||
<activationDate>2020-09-10T03:37:11.7080375Z</activationDate>
|
||||
<expirationDate>2020-12-09T03:37:11.7080375Z</expirationDate>
|
||||
<descriptor deserializerType="Microsoft.AspNetCore.DataProtection.AuthenticatedEncryption.ConfigurationModel.AuthenticatedEncryptorDescriptorDeserializer, Microsoft.AspNetCore.DataProtection, Version=3.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60">
|
||||
<descriptor>
|
||||
<encryption algorithm="AES_256_CBC" />
|
||||
<validation algorithm="HMACSHA256" />
|
||||
<masterKey p4:requiresEncryption="true" xmlns:p4="http://schemas.asp.net/2015/03/dataProtection">
|
||||
<!-- Warning: the key below is in an unencrypted form. -->
|
||||
<value>Db49pYY35Nbu4v2FWzc+MuYyu8RO8z/T8pkaHAH/M6aeVmjyeXaBfHnmOiS5LMitCKDqGBTUh15xNCErxEvQzg==</value>
|
||||
</masterKey>
|
||||
</descriptor>
|
||||
</descriptor>
|
||||
</key>
|
||||
@@ -1,3 +1,10 @@
|
||||
/*
|
||||
* @Author: yubaolee <yubaolee@163.com> | ahfu~ <954478625@qq.com>
|
||||
* @Date: 2023-12-25 14:43:53
|
||||
* @LastEditTime: 2024-12-03 14:00:32
|
||||
* @Description:
|
||||
* Copyright (c) 2024 by yubaolee | ahfu~ , All Rights Reserved.
|
||||
*/
|
||||
layui.config({
|
||||
base : "/js/"
|
||||
}).use(['form','element','layer','jquery'],function(){
|
||||
@@ -59,7 +66,7 @@ layui.config({
|
||||
})
|
||||
|
||||
//系统基本参数
|
||||
$(".version").text("v3.2"); //当前版本
|
||||
$(".version").text("v6.5"); //当前版本
|
||||
$(".author").text("yubaolee"); //开发作者
|
||||
$(".homePage").text("/Home/Index"); //网站首页
|
||||
$(".server").text("centos docker"); //服务器环境
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 16
|
||||
VisualStudioVersion = 16.0.28822.285
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
MinimumVisualStudioVersion = 16.0.28822.285
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OpenAuth.WebApi", "OpenAuth.WebApi\OpenAuth.WebApi.csproj", "{A44BD472-84E3-4D70-9DC5-06210617D6EE}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Infrastructure", "Infrastructure\Infrastructure.csproj", "{8F9EAD1A-9407-41BA-844A-02282B4646F3}"
|
||||
|
||||
@@ -94,7 +94,7 @@ namespace OpenAuth.Repository.Domain
|
||||
/// 前端界面是否缓存
|
||||
/// </summary>
|
||||
/// [Description("前端界面是否缓存")]
|
||||
public bool KeepAlive { get; set; }
|
||||
public bool? KeepAlive { get; set; }
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<TargetFramework>net9.0</TargetFramework>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
||||
@@ -10,8 +10,8 @@
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Autofac" Version="5.2.0" />
|
||||
<PackageReference Include="Autofac.Extensions.DependencyInjection" Version="6.0.0" />
|
||||
<PackageReference Include="Autofac" Version="8.1.1" />
|
||||
<PackageReference Include="Autofac.Extensions.DependencyInjection" Version="10.0.0" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="6.0.27" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="6.0.27" />
|
||||
<PackageReference Include="Moq" Version="4.13.1" />
|
||||
@@ -24,7 +24,7 @@
|
||||
<PackageReference Include="Oracle.EntityFrameworkCore" Version="6.21.130" />
|
||||
<PackageReference Include="Oracle.ManagedDataAccess.Core" Version="3.21.130" />
|
||||
<PackageReference Include="Pomelo.EntityFrameworkCore.MySql" Version="6.0.2" />
|
||||
<PackageReference Include="SqlSugarCore" Version="5.1.4.102" />
|
||||
<PackageReference Include="SqlSugarCore" Version="5.1.4.170" />
|
||||
<PackageReference Include="Z.EntityFramework.Plus.EFCore" Version="6.102.1.1" />
|
||||
</ItemGroup>
|
||||
|
||||
|
||||
@@ -30,7 +30,7 @@ namespace OpenAuth.WebApi.Controllers
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
public Response Assign(AssignReq request)
|
||||
public Response Assign([FromBody] AssignReq request)
|
||||
{
|
||||
var result = new Response();
|
||||
try
|
||||
@@ -49,7 +49,7 @@ namespace OpenAuth.WebApi.Controllers
|
||||
/// 取消关联
|
||||
/// </summary>
|
||||
[HttpPost]
|
||||
public Response UnAssign(AssignReq request)
|
||||
public Response UnAssign([FromBody] AssignReq request)
|
||||
{
|
||||
var result = new Response();
|
||||
try
|
||||
@@ -70,7 +70,7 @@ namespace OpenAuth.WebApi.Controllers
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
public Response AssignDataProperty(AssignDataReq request)
|
||||
public Response AssignDataProperty([FromBody] AssignDataReq request)
|
||||
{
|
||||
var result = new Response();
|
||||
try
|
||||
@@ -94,7 +94,7 @@ namespace OpenAuth.WebApi.Controllers
|
||||
/// <returns></returns>
|
||||
private static string lockobj = "lock";
|
||||
[HttpPost]
|
||||
public Response UnAssignDataProperty(AssignDataReq request)
|
||||
public Response UnAssignDataProperty([FromBody] AssignDataReq request)
|
||||
{
|
||||
var result = new Response();
|
||||
try
|
||||
@@ -118,7 +118,7 @@ namespace OpenAuth.WebApi.Controllers
|
||||
/// 角色分配用户,整体提交,会覆盖之前的配置
|
||||
/// </summary>
|
||||
[HttpPost]
|
||||
public Response AssignRoleUsers(AssignRoleUsers request)
|
||||
public Response AssignRoleUsers([FromBody] AssignRoleUsers request)
|
||||
{
|
||||
var result = new Response();
|
||||
try
|
||||
@@ -138,7 +138,7 @@ namespace OpenAuth.WebApi.Controllers
|
||||
/// 部门分配用户,整体提交,会覆盖之前的配置
|
||||
/// </summary>
|
||||
[HttpPost]
|
||||
public Response AssignOrgUsers(AssignOrgUsers request)
|
||||
public Response AssignOrgUsers([FromBody] AssignOrgUsers request)
|
||||
{
|
||||
var result = new Response();
|
||||
try
|
||||
|
||||
@@ -40,7 +40,7 @@ namespace OpenAuth.WebApi.Controllers
|
||||
|
||||
//修改
|
||||
[HttpPost]
|
||||
public Response Update(AddOrUpdateBuilderTableColumnReq obj)
|
||||
public Response Update([FromBody] AddOrUpdateBuilderTableColumnReq obj)
|
||||
{
|
||||
var result = new Response();
|
||||
try
|
||||
@@ -62,7 +62,7 @@ namespace OpenAuth.WebApi.Controllers
|
||||
/// <para>读取数据库结构与当前结构的差异,如果数据库有新增的字段,则自动加入</para>
|
||||
/// </summary>
|
||||
[HttpPost]
|
||||
public Response Sync(SyncStructureReq obj)
|
||||
public Response Sync([FromBody] SyncStructureReq obj)
|
||||
{
|
||||
var result = new Response();
|
||||
try
|
||||
|
||||
@@ -25,7 +25,7 @@ namespace OpenAuth.WebApi.Controllers
|
||||
/// <returns>返回添加的模版ID</returns>
|
||||
/// </summary>
|
||||
[HttpPost]
|
||||
public Response<string> Add(AddOrUpdateBuilderTableReq obj)
|
||||
public Response<string> Add([FromBody] AddOrUpdateBuilderTableReq obj)
|
||||
{
|
||||
var result = new Response<string>();
|
||||
try
|
||||
@@ -48,7 +48,7 @@ namespace OpenAuth.WebApi.Controllers
|
||||
/// <param name="obj"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
public Response Update(AddOrUpdateBuilderTableReq obj)
|
||||
public Response Update([FromBody] AddOrUpdateBuilderTableReq obj)
|
||||
{
|
||||
var result = new Response();
|
||||
try
|
||||
@@ -110,7 +110,7 @@ namespace OpenAuth.WebApi.Controllers
|
||||
/// <param name="obj"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
public Response CreateEntity(CreateEntityReq obj)
|
||||
public Response CreateEntity([FromBody] CreateEntityReq obj)
|
||||
{
|
||||
var result = new Response();
|
||||
try
|
||||
@@ -133,7 +133,7 @@ namespace OpenAuth.WebApi.Controllers
|
||||
/// <param name="obj"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
public Response CreateBusiness(CreateBusiReq obj)
|
||||
public Response CreateBusiness([FromBody] CreateBusiReq obj)
|
||||
{
|
||||
var result = new Response();
|
||||
try
|
||||
@@ -156,7 +156,7 @@ namespace OpenAuth.WebApi.Controllers
|
||||
/// <param name="obj"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
public Response CreateVue(CreateVueReq obj)
|
||||
public Response CreateVue([FromBody] CreateVueReq obj)
|
||||
{
|
||||
var result = new Response();
|
||||
try
|
||||
|
||||
@@ -20,7 +20,7 @@ using OpenAuth.App.Response;
|
||||
|
||||
//添加
|
||||
[HttpPost]
|
||||
public Response Add(AddOrUpdateCategoryTypeReq obj)
|
||||
public Response Add([FromBody] AddOrUpdateCategoryTypeReq obj)
|
||||
{
|
||||
var result = new Response();
|
||||
try
|
||||
@@ -39,7 +39,7 @@ using OpenAuth.App.Response;
|
||||
|
||||
//修改
|
||||
[HttpPost]
|
||||
public Response Update(AddOrUpdateCategoryTypeReq obj)
|
||||
public Response Update([FromBody] AddOrUpdateCategoryTypeReq obj)
|
||||
{
|
||||
var result = new Response();
|
||||
try
|
||||
|
||||
@@ -46,7 +46,7 @@ namespace OpenAuth.WebApi.Controllers
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
public Response Add(AddOrUpdateCategoryReq obj)
|
||||
public Response Add([FromBody] AddOrUpdateCategoryReq obj)
|
||||
{
|
||||
var result = new Response();
|
||||
try
|
||||
@@ -68,7 +68,7 @@ namespace OpenAuth.WebApi.Controllers
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
public Response Update(AddOrUpdateCategoryReq obj)
|
||||
public Response Update([FromBody] AddOrUpdateCategoryReq obj)
|
||||
{
|
||||
var result = new Response();
|
||||
try
|
||||
|
||||
@@ -337,7 +337,7 @@ namespace OpenAuth.WebApi.Controllers
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
[AllowAnonymous]
|
||||
public LoginResult Login(PassportLoginRequest request)
|
||||
public LoginResult Login([FromBody] PassportLoginRequest request)
|
||||
{
|
||||
var result = new LoginResult();
|
||||
try
|
||||
|
||||
@@ -45,7 +45,7 @@ namespace OpenAuth.WebApi.Controllers
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
public Response Add(AddOrUpdateDataPriviReq obj)
|
||||
public Response Add([FromBody] AddOrUpdateDataPriviReq obj)
|
||||
{
|
||||
var result = new Response();
|
||||
try
|
||||
@@ -67,7 +67,7 @@ namespace OpenAuth.WebApi.Controllers
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
public Response Update(AddOrUpdateDataPriviReq obj)
|
||||
public Response Update([FromBody] AddOrUpdateDataPriviReq obj)
|
||||
{
|
||||
var result = new Response();
|
||||
try
|
||||
|
||||
@@ -69,7 +69,7 @@ namespace OpenAuth.WebApi.Controllers
|
||||
/// <returns>服务器存储的文件信息</returns>
|
||||
[HttpPost]
|
||||
[AllowAnonymous]
|
||||
public Response<IList<UploadFile>> Upload(IFormFileCollection files)
|
||||
public Response<IList<UploadFile>> Upload([FromForm] IFormFileCollection files)
|
||||
{
|
||||
var result = new Response<IList<UploadFile>>();
|
||||
try
|
||||
@@ -93,7 +93,7 @@ namespace OpenAuth.WebApi.Controllers
|
||||
/// <returns>服务器存储的文件信息</returns>
|
||||
[HttpPost]
|
||||
[AllowAnonymous]
|
||||
public Response<IList<UploadFile>> UploadWithFormData(IFormCollection formdata)
|
||||
public Response<IList<UploadFile>> UploadWithFormData([FromForm] IFormCollection formdata)
|
||||
{
|
||||
var result = new Response<IList<UploadFile>>();
|
||||
try
|
||||
|
||||
@@ -21,7 +21,7 @@ namespace OpenAuth.WebApi.Controllers
|
||||
|
||||
//添加
|
||||
[HttpPost]
|
||||
public Response Add(AddApproverReq obj)
|
||||
public Response Add([FromBody] AddApproverReq obj)
|
||||
{
|
||||
var result = new Response();
|
||||
try
|
||||
@@ -39,7 +39,7 @@ namespace OpenAuth.WebApi.Controllers
|
||||
|
||||
//修改
|
||||
[HttpPost]
|
||||
public Response Update(AddApproverReq obj)
|
||||
public Response Update([FromBody] AddApproverReq obj)
|
||||
{
|
||||
var result = new Response();
|
||||
try
|
||||
|
||||
@@ -87,7 +87,7 @@ namespace OpenAuth.WebApi.Controllers
|
||||
/// <summary>召回流程</summary>
|
||||
/// <remarks> 召回后流程状态为【草稿】状态,可以再次发起流程。所有的流程节点状态还原,但保留审批记录 </remarks>
|
||||
[HttpPost]
|
||||
public Response ReCall(RecallFlowInstanceReq obj)
|
||||
public Response ReCall([FromBody] RecallFlowInstanceReq obj)
|
||||
{
|
||||
var result = new Response();
|
||||
try
|
||||
@@ -106,7 +106,7 @@ namespace OpenAuth.WebApi.Controllers
|
||||
/// <summary>启动流程</summary>
|
||||
/// <remarks> 通常是对状态为【草稿】的流程进行操作,进入运行状态 </remarks>
|
||||
[HttpPost]
|
||||
public Response Start(StartFlowInstanceReq obj)
|
||||
public Response Start([FromBody] StartFlowInstanceReq obj)
|
||||
{
|
||||
var result = new Response();
|
||||
try
|
||||
@@ -128,7 +128,7 @@ namespace OpenAuth.WebApi.Controllers
|
||||
/// <para>更新时可以修改表单内容,可以修改流程基本信息,但不能更换表单模版</para>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
public Response Update(UpdateFlowInstanceReq obj)
|
||||
public Response Update([FromBody] UpdateFlowInstanceReq obj)
|
||||
{
|
||||
var result = new Response();
|
||||
try
|
||||
@@ -150,7 +150,7 @@ namespace OpenAuth.WebApi.Controllers
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
public Response Verification(VerificationReq request)
|
||||
public Response Verification([FromBody] VerificationReq request)
|
||||
{
|
||||
var response = new Response();
|
||||
try
|
||||
|
||||
@@ -38,7 +38,7 @@ namespace OpenAuth.WebApi.Controllers
|
||||
|
||||
//添加或修改
|
||||
[HttpPost]
|
||||
public Response Add(FlowScheme obj)
|
||||
public Response Add([FromBody] FlowScheme obj)
|
||||
{
|
||||
var result = new Response();
|
||||
try
|
||||
@@ -57,7 +57,7 @@ namespace OpenAuth.WebApi.Controllers
|
||||
|
||||
//添加或修改
|
||||
[HttpPost]
|
||||
public Response Update(FlowScheme obj)
|
||||
public Response Update([FromBody] FlowScheme obj)
|
||||
{
|
||||
var result = new Response();
|
||||
try
|
||||
|
||||
@@ -49,7 +49,7 @@ namespace OpenAuth.WebApi.Controllers
|
||||
|
||||
//添加或修改
|
||||
[HttpPost]
|
||||
public Response Add(Form obj)
|
||||
public Response Add([FromBody] Form obj)
|
||||
{
|
||||
var result = new Response();
|
||||
try
|
||||
@@ -68,7 +68,7 @@ namespace OpenAuth.WebApi.Controllers
|
||||
|
||||
//添加或修改
|
||||
[HttpPost]
|
||||
public Response Update(Form obj)
|
||||
public Response Update([FromBody] Form obj)
|
||||
{
|
||||
var result = new Response();
|
||||
try
|
||||
|
||||
@@ -132,7 +132,7 @@ namespace OpenAuth.WebApi.Controllers
|
||||
|
||||
//添加或修改
|
||||
[HttpPost]
|
||||
public Response<Module> Add(Module obj)
|
||||
public Response<Module> Add([FromBody] Module obj)
|
||||
{
|
||||
var result = new Response<Module>();
|
||||
try
|
||||
@@ -151,7 +151,7 @@ namespace OpenAuth.WebApi.Controllers
|
||||
|
||||
//添加或修改
|
||||
[HttpPost]
|
||||
public Response Update(Module obj)
|
||||
public Response Update([FromBody] Module obj)
|
||||
{
|
||||
var result = new Response();
|
||||
try
|
||||
@@ -192,7 +192,7 @@ namespace OpenAuth.WebApi.Controllers
|
||||
/// <para>当前登录用户的所有角色会自动分配菜单</para>
|
||||
/// </summary>
|
||||
[HttpPost]
|
||||
public Response<ModuleElement> AddMenu(ModuleElement obj)
|
||||
public Response<ModuleElement> AddMenu([FromBody] ModuleElement obj)
|
||||
{
|
||||
var result = new Response<ModuleElement>();
|
||||
try
|
||||
@@ -213,7 +213,7 @@ namespace OpenAuth.WebApi.Controllers
|
||||
/// 修改菜单属性
|
||||
/// </summary>
|
||||
[HttpPost]
|
||||
public Response UpdateMenu(ModuleElement obj)
|
||||
public Response UpdateMenu([FromBody] ModuleElement obj)
|
||||
{
|
||||
var result = new Response();
|
||||
try
|
||||
|
||||
@@ -45,7 +45,7 @@ namespace OpenAuth.WebApi.Controllers
|
||||
/// <param name="obj"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
public Response Add(AddOrUpdateOpenJobReq obj)
|
||||
public Response Add([FromBody] AddOrUpdateOpenJobReq obj)
|
||||
{
|
||||
var result = new Response();
|
||||
try
|
||||
@@ -139,7 +139,7 @@ namespace OpenAuth.WebApi.Controllers
|
||||
/// 改变任务状态,启动/停止
|
||||
/// </summary>
|
||||
[HttpPost]
|
||||
public Response ChangeStatus(ChangeJobStatusReq req)
|
||||
public Response ChangeStatus([FromBody] ChangeJobStatusReq req)
|
||||
{
|
||||
var result = new Response();
|
||||
try
|
||||
|
||||
@@ -43,7 +43,7 @@ namespace OpenAuth.WebApi.Controllers
|
||||
/// <param name="obj"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
public Response<SysOrg> Add(SysOrg obj)
|
||||
public Response<SysOrg> Add([FromBody] SysOrg obj)
|
||||
{
|
||||
var result = new Response<SysOrg>();
|
||||
try
|
||||
@@ -62,7 +62,7 @@ namespace OpenAuth.WebApi.Controllers
|
||||
|
||||
//添加或修改
|
||||
[HttpPost]
|
||||
public Response Update(SysOrg obj)
|
||||
public Response Update([FromBody] SysOrg obj)
|
||||
{
|
||||
var result = new Response();
|
||||
try
|
||||
|
||||
@@ -49,7 +49,7 @@ namespace OpenAuth.WebApi.Controllers
|
||||
}
|
||||
|
||||
[HttpPost]
|
||||
public Response<string> Add(AddOrUpdateResReq obj)
|
||||
public Response<string> Add([FromBody] AddOrUpdateResReq obj)
|
||||
{
|
||||
var resp = new Response<string>();
|
||||
try
|
||||
@@ -66,7 +66,7 @@ namespace OpenAuth.WebApi.Controllers
|
||||
}
|
||||
|
||||
[HttpPost]
|
||||
public Response Update(AddOrUpdateResReq obj)
|
||||
public Response Update([FromBody] AddOrUpdateResReq obj)
|
||||
{
|
||||
Response resp = new Response();
|
||||
try
|
||||
|
||||
@@ -47,7 +47,7 @@ namespace OpenAuth.WebApi.Controllers
|
||||
/// 添加角色,如果当前登录用户不是System,则直接把新角色分配给当前登录用户
|
||||
/// </summary>
|
||||
[HttpPost]
|
||||
public Response<RoleView> Add(RoleView obj)
|
||||
public Response<RoleView> Add([FromBody] RoleView obj)
|
||||
{
|
||||
var result = new Response<RoleView>();
|
||||
try
|
||||
@@ -71,7 +71,7 @@ namespace OpenAuth.WebApi.Controllers
|
||||
/// <param name="obj"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
public Response Update(RoleView obj)
|
||||
public Response Update([FromBody] RoleView obj)
|
||||
{
|
||||
var result = new Response();
|
||||
try
|
||||
|
||||
@@ -41,7 +41,7 @@ namespace OpenAuth.WebApi.Controllers
|
||||
/// 添加
|
||||
/// </summary>
|
||||
[HttpPost]
|
||||
public Response Add(SysLog obj)
|
||||
public Response Add([FromBody] SysLog obj)
|
||||
{
|
||||
var result = new Response();
|
||||
try
|
||||
@@ -62,7 +62,7 @@ namespace OpenAuth.WebApi.Controllers
|
||||
/// 修改日志(建议废弃)
|
||||
/// </summary>
|
||||
[HttpPost]
|
||||
public Response Update(SysLog obj)
|
||||
public Response Update([FromBody] SysLog obj)
|
||||
{
|
||||
var result = new Response();
|
||||
try
|
||||
|
||||
@@ -47,7 +47,7 @@ namespace OpenAuth.WebApi.Controllers
|
||||
/// <param name="obj"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
public Response Read(ReadMsgReq obj)
|
||||
public Response Read([FromBody] ReadMsgReq obj)
|
||||
{
|
||||
var result = new Response();
|
||||
try
|
||||
|
||||
@@ -41,7 +41,7 @@ namespace OpenAuth.WebApi.Controllers
|
||||
|
||||
//添加
|
||||
[HttpPost]
|
||||
public Response<string> Add(AddOrUpdateSysPrinterPlanReq obj)
|
||||
public Response<string> Add([FromBody] AddOrUpdateSysPrinterPlanReq obj)
|
||||
{
|
||||
var result = new Response<string>();
|
||||
try
|
||||
@@ -103,7 +103,7 @@ namespace OpenAuth.WebApi.Controllers
|
||||
|
||||
//修改
|
||||
[HttpPost]
|
||||
public Response Update(AddOrUpdateSysPrinterPlanReq obj)
|
||||
public Response Update([FromBody] AddOrUpdateSysPrinterPlanReq obj)
|
||||
{
|
||||
var result = new Response();
|
||||
try
|
||||
@@ -133,7 +133,7 @@ namespace OpenAuth.WebApi.Controllers
|
||||
/// 打印方案根据数据源获取打印数据
|
||||
/// </summary>
|
||||
[HttpPost]
|
||||
public async Task<TableData> Query(QueryReq request)
|
||||
public async Task<TableData> Query([FromBody] QueryReq request)
|
||||
{
|
||||
return await _app.Query(request);
|
||||
}
|
||||
|
||||
@@ -41,7 +41,7 @@ namespace OpenAuth.WebApi.Controllers
|
||||
/// <param name="request"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
public Response ChangeProfile(ChangeProfileReq request)
|
||||
public Response ChangeProfile([FromBody] ChangeProfileReq request)
|
||||
{
|
||||
var result = new Response();
|
||||
|
||||
@@ -65,7 +65,7 @@ namespace OpenAuth.WebApi.Controllers
|
||||
/// <param name="request"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
public Response ChangePassword(ChangePasswordReq request)
|
||||
public Response ChangePassword([FromBody] ChangePasswordReq request)
|
||||
{
|
||||
var result = new Response();
|
||||
try
|
||||
@@ -83,7 +83,7 @@ namespace OpenAuth.WebApi.Controllers
|
||||
|
||||
//添加或修改
|
||||
[HttpPost]
|
||||
public Response<string> AddOrUpdate(UpdateUserReq obj)
|
||||
public Response<string> AddOrUpdate([FromBody] UpdateUserReq obj)
|
||||
{
|
||||
var result = new Response<string>();
|
||||
try
|
||||
|
||||
@@ -40,7 +40,7 @@ namespace OpenAuth.WebApi.Controllers
|
||||
|
||||
//添加
|
||||
[HttpPost]
|
||||
public Response<string> Add(AddOrUpdateWmsInboundOrderDtblReq obj)
|
||||
public Response<string> Add([FromBody] AddOrUpdateWmsInboundOrderDtblReq obj)
|
||||
{
|
||||
var result = new Response<string>();
|
||||
try
|
||||
@@ -63,7 +63,7 @@ namespace OpenAuth.WebApi.Controllers
|
||||
/// <param name="obj"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
public Response Update(AddOrUpdateWmsInboundOrderDtblReq obj)
|
||||
public Response Update([FromBody] AddOrUpdateWmsInboundOrderDtblReq obj)
|
||||
{
|
||||
var result = new Response();
|
||||
try
|
||||
|
||||
@@ -43,7 +43,7 @@ namespace OpenAuth.WebApi.Controllers
|
||||
/// <param name="obj"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
public Response Add(AddOrUpdateWmsInboundOrderTblReq obj)
|
||||
public Response Add([FromBody] AddOrUpdateWmsInboundOrderTblReq obj)
|
||||
{
|
||||
var result = new Response();
|
||||
try
|
||||
@@ -69,7 +69,7 @@ namespace OpenAuth.WebApi.Controllers
|
||||
/// <param name="obj"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
public Response Update(AddOrUpdateWmsInboundOrderTblReq obj)
|
||||
public Response Update([FromBody] AddOrUpdateWmsInboundOrderTblReq obj)
|
||||
{
|
||||
var result = new Response();
|
||||
try
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk.Web">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<TargetFramework>net9.0</TargetFramework>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
||||
|
||||
@@ -130,7 +130,7 @@ namespace OpenAuth.WebApi
|
||||
// options.SuppressModelStateInvalidFilter = true;
|
||||
|
||||
//启动WebAPI自动模态验证,处理返回值
|
||||
options.InvalidModelStateResponseFactory = context =>
|
||||
options.InvalidModelStateResponseFactory = (ActionContext context) =>
|
||||
{
|
||||
var problems = new CustomBadRequest(context);
|
||||
|
||||
|
||||
@@ -39,7 +39,7 @@ namespace OpenAuth.WebApi.Controllers
|
||||
|
||||
//添加
|
||||
[HttpPost]
|
||||
public Response Add(AddOrUpdate{ClassName}Req obj)
|
||||
public Response Add([FromBody]AddOrUpdate{ClassName}Req obj)
|
||||
{
|
||||
var result = new Response();
|
||||
try
|
||||
@@ -58,7 +58,7 @@ namespace OpenAuth.WebApi.Controllers
|
||||
|
||||
//修改
|
||||
[HttpPost]
|
||||
public Response Update(AddOrUpdate{ClassName}Req obj)
|
||||
public Response Update([FromBody]AddOrUpdate{ClassName}Req obj)
|
||||
{
|
||||
var result = new Response();
|
||||
try
|
||||
|
||||
@@ -2,142 +2,87 @@
|
||||
* @Author: yubaolee <yubaolee@163.com> | ahfu~ <954478625@qq.com>
|
||||
* @Description: 代码生成界面,采用的是固定头部结构
|
||||
* @
|
||||
* @Copyright (c) 2022 by yubaolee | ahfu~ , All Rights Reserved.
|
||||
* @Copyright (c) 2024 by yubaolee | ahfu~ , All Rights Reserved.
|
||||
-->
|
||||
<template>
|
||||
<div class="flex-column">
|
||||
<div class="flex-column flex">
|
||||
<sticky>
|
||||
<el-input
|
||||
style="width: 200px"
|
||||
class="filter-item"
|
||||
:placeholder="'名称'"
|
||||
v-model="firstQuery.key"></el-input>
|
||||
<el-button
|
||||
class="filter-item"
|
||||
icon="el-icon-search"
|
||||
@click="handleFilter">
|
||||
搜索
|
||||
</el-button>
|
||||
<div class="search-box">
|
||||
<el-input @keyup.enter="handleFilter" size="small" class="w-200 custom-input" :placeholder="'名称'"
|
||||
v-model="firstQuery.key"></el-input>
|
||||
<el-button class="filter-item custom-button" icon="el-icon-search" size="small" @click="handleFilter">
|
||||
搜索
|
||||
</el-button>
|
||||
</div>
|
||||
<permission-btn v-on:btn-event="onBtnClicked"></permission-btn>
|
||||
</sticky>
|
||||
<el-card shadow="nerver" class="flex-item">
|
||||
<auth-table
|
||||
style="height: calc(100% - 52px)"
|
||||
ref="mainTable"
|
||||
:table-fields="firstHeaderList"
|
||||
:data="mainList"
|
||||
:v-loading="listLoading"
|
||||
@row-click="rowClickFirstTable"
|
||||
@selection-change="handleSelChangeFirstTable"></auth-table>
|
||||
<el-pagination
|
||||
v-show="firstTotal > 0"
|
||||
:total="firstTotal"
|
||||
v-model:currentPage="firstQuery.page"
|
||||
v-model:page-size="firstQuery.limit"
|
||||
@current-change="handleCurrentChange" />
|
||||
</el-card>
|
||||
<el-row class="flex-item">
|
||||
<el-col :span="showTitleDialog ? 8 : 0" class="fh form-card">
|
||||
<el-card shadow="nerver" class="demo-card fh">
|
||||
<template #header>
|
||||
<div>
|
||||
<span v-if="radio == ''">详情</span>
|
||||
<span v-else>{{ tableName }}详情</span>
|
||||
</div>
|
||||
</template>
|
||||
<auth-form
|
||||
ref="dataForm"
|
||||
:rules="mainRules"
|
||||
:edit-model="editModel"
|
||||
:form-fields="firstHeaderList"
|
||||
v-model="firstTemp"
|
||||
:data="firstTemp"
|
||||
:col-num="2"></auth-form>
|
||||
</el-card>
|
||||
</el-col>
|
||||
<!-- 第二部分多选 -->
|
||||
<el-col :span="!showTitleDialog ? 24 : 16" class="fh detail-card">
|
||||
<el-card shadow="nerver" class="demo-card fh" id="secondCard">
|
||||
<template #header>
|
||||
<el-row>
|
||||
<el-col :span="2">
|
||||
<el-icon
|
||||
v-if="showTitleDialog"
|
||||
@click="showTitleDialog = !showTitleDialog"
|
||||
:size="20">
|
||||
<div class="flex-item flex flex-column main-context">
|
||||
<el-card shadow="never" class="custom-card flex-item flex flex-column">
|
||||
<auth-table size="small" ref="mainTable" :select-type="'radio'" :table-fields="firstHeaderList" :data="mainList"
|
||||
:v-loading="listLoading" @row-click="rowClickFirstTable"></auth-table>
|
||||
</el-card>
|
||||
<div class="flex flex-direction-r b-w p-r-10 p-t-10 p-b-10">
|
||||
<el-pagination v-show="firstTotal > 0" :total="firstTotal" v-model:currentPage="firstQuery.page"
|
||||
v-model:page-size="firstQuery.limit" @current-change="handleCurrentChange" />
|
||||
</div>
|
||||
<div class="flex-item flex">
|
||||
<div v-if="showTitleDialog" class="flex flex-column" style="width: 500px;">
|
||||
<el-card shadow="never" class="demo-card custom-card fh">
|
||||
<template #header>
|
||||
<div>
|
||||
<span v-if="radio == ''" class="f-12 f-b">表信息</span>
|
||||
<span v-else class="f-12 f-b">{{ tableName }}表信息</span>
|
||||
</div>
|
||||
</template>
|
||||
<auth-form ref="dataForm" :rules="mainRules" :edit-model="editModel" :form-fields="firstHeaderList"
|
||||
v-model="firstTemp" :data="firstTemp" :col-num="2"></auth-form>
|
||||
</el-card>
|
||||
</div>
|
||||
<div class="flex-item flex flex-column">
|
||||
<el-card shadow="never" class="custom-card flex-item flex flex-column" id="secondCard">
|
||||
<template #header>
|
||||
<div class="flex flex-center">
|
||||
<el-icon v-if="showTitleDialog" @click="showTitleDialog = !showTitleDialog" :size="14">
|
||||
<ArrowLeftBold />
|
||||
</el-icon>
|
||||
<el-icon
|
||||
v-else
|
||||
@click="showTitleDialog = !showTitleDialog"
|
||||
:size="20">
|
||||
<el-icon v-else @click="showTitleDialog = !showTitleDialog" :size="14">
|
||||
<ArrowRightBold />
|
||||
</el-icon>
|
||||
</el-col>
|
||||
<el-col :span="18">
|
||||
<span v-if="radio == ''" class="flex-item">
|
||||
明细列表(修改后,编辑框内回车生效)
|
||||
<span v-if="radio == ''" class="flex-item f-12 f-b">
|
||||
表字段信息(修改后,编辑框内回车生效)
|
||||
</span>
|
||||
<span v-else class="flex-item">
|
||||
{{ tableName }}明细列表(修改后,编辑框内回车生效)
|
||||
<span v-else class="flex-item f-12 f-b">
|
||||
{{ tableName }}表字段信息(修改后,编辑框内回车生效)
|
||||
</span>
|
||||
</el-col>
|
||||
<el-col :span="2">
|
||||
<el-button
|
||||
v-if="editModel"
|
||||
:icon="Plus"
|
||||
@click="onBtnClicked('btnAddDetail')">
|
||||
添加
|
||||
</el-button>
|
||||
</el-col>
|
||||
<el-col :span="2">
|
||||
<el-button
|
||||
v-if="editModel"
|
||||
:icon="Delete"
|
||||
@click="onBtnClicked('btnDelDetail')">
|
||||
<el-button size="small" v-if="editModel" :icon="Delete" @click="onBtnClicked('btnDelDetail')">
|
||||
删除
|
||||
</el-button>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</template>
|
||||
<auth-table
|
||||
style="height: calc(100% - 52px - 34px)"
|
||||
ref="secondTable"
|
||||
:editModel="editModel"
|
||||
:table-fields="secondHeaderList"
|
||||
:data="secondList"
|
||||
@row-click="rowClickSecondTable"
|
||||
@selection-change="selChangeSecondTable"
|
||||
@item-change="handleUpdateDetail"></auth-table>
|
||||
<el-pagination
|
||||
v-show="secondTotal > 0"
|
||||
:total="secondTotal"
|
||||
v-model:page="secondQuery.page"
|
||||
v-model:limit="secondQuery.limit"
|
||||
@current-change="handleSecondPage" />
|
||||
</el-card>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-affix position="bottom" v-if="editModel" style="text-align: end">
|
||||
<el-row style="background-color: white">
|
||||
<el-col :span="24">
|
||||
<el-button @click="editModel = false">取消</el-button>
|
||||
<el-button
|
||||
v-if="dialogStatus == 'create'"
|
||||
type="primary"
|
||||
@click="createData">
|
||||
确认
|
||||
</el-button>
|
||||
<el-button v-else type="primary" @click="updateData">确认</el-button>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-affix>
|
||||
</div>
|
||||
</template>
|
||||
<auth-table size="small" ref="secondTable" :editModel="editModel" :table-fields="secondHeaderList"
|
||||
:data="secondList" @row-click="rowClickSecondTable" @selection-change="selChangeSecondTable"
|
||||
@item-change="handleUpdateDetail"></auth-table>
|
||||
</el-card>
|
||||
<div class="flex flex-direction-r p-r-10 b-w p-b-5 p-t-5">
|
||||
<el-pagination v-show="secondTotal > 0" :total="secondTotal" v-model:page="secondQuery.page"
|
||||
v-model:limit="secondQuery.limit" @current-change="handleSecondPage" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div v-if="editModel" class="p-t-5 p-b-5 t-r b-w p-r-10 border-t-2">
|
||||
<el-button @click="editModel = false">取消</el-button>
|
||||
<el-button v-if="dialogStatus == 'create'" type="primary" @click="createData">
|
||||
确认
|
||||
</el-button>
|
||||
<el-button v-else type="primary" @click="updateData">确认</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<script setup>
|
||||
//引入核心框架
|
||||
import { ElMessage, ElNotification } from 'element-plus'
|
||||
import { Plus, Delete } from '@element-plus/icons-vue'
|
||||
import { Refresh, Delete } from '@element-plus/icons-vue'
|
||||
import { onMounted, ref, reactive, nextTick, computed } from 'vue'
|
||||
import { mapGetters, useStore } from 'vuex'
|
||||
//引入API,共用方法
|
||||
@@ -152,7 +97,6 @@
|
||||
import permissionBtn from '@/components/PermissionBtn/index.vue'
|
||||
import AuthForm from '../../components/Base/AuthForm.vue'
|
||||
import AuthTable from '../../components/Base/AuthTable.vue'
|
||||
|
||||
const firstHeaderList = ref([]) //列表头
|
||||
const secondHeaderList = ref([]) //明细列表头
|
||||
const multipleSelection = ref([]) //明细中checkbox选中的值
|
||||
@@ -181,27 +125,24 @@
|
||||
customerKey: undefined,
|
||||
})
|
||||
const showTitleDialog = ref(true) //是否显示左下主列表详情值
|
||||
const mainRules = reactive({ //添加自己的表单验证规则
|
||||
const mainRules = reactive({
|
||||
Id: [
|
||||
{
|
||||
required: true,
|
||||
message: 'id不能为空'
|
||||
},
|
||||
],
|
||||
|
||||
})
|
||||
//组件refs
|
||||
const mainTable = ref(null)
|
||||
const dataForm = ref(null)
|
||||
const secondTable = ref(null)
|
||||
|
||||
const store = useStore()
|
||||
const defaultorgid = computed(() => store.getters.defaultorgid)
|
||||
onMounted(() => {
|
||||
initCfg()
|
||||
getList()
|
||||
})
|
||||
|
||||
const initCfg = function () {
|
||||
firstHeaderList.value = [
|
||||
{FirstHeaderList}
|
||||
@@ -211,9 +152,9 @@
|
||||
]
|
||||
}
|
||||
// ------------------------通用处理函数-------------------------------------
|
||||
const onBtnClicked = (domId, callback) => {
|
||||
const onBtnClicked = function (domId, callback) {
|
||||
switch (domId) {
|
||||
case 'btnAdd': // 添加
|
||||
case 'btnAdd': // 添加新记录
|
||||
resetFirstTemp()
|
||||
secondList.value = []
|
||||
dialogStatus.value = 'create'
|
||||
@@ -224,7 +165,7 @@
|
||||
dataForm.value.clearValidate()
|
||||
})
|
||||
break
|
||||
case 'btnEdit': // 编辑
|
||||
case 'btnEdit': // 编辑头
|
||||
Object.assign(firstTemp, selectRow)
|
||||
if (firstTemp.id === '') {
|
||||
editModel.value = false
|
||||
@@ -241,7 +182,7 @@
|
||||
dataForm.value.clearValidate()
|
||||
})
|
||||
break
|
||||
case 'btnDel': // 删除
|
||||
case 'btnDel': // 删除主表
|
||||
if (firstTemp.id === '') {
|
||||
ElMessage({
|
||||
message: '请选择要删除的项',
|
||||
@@ -264,7 +205,7 @@
|
||||
}
|
||||
handleSecondDel(multipleSelection.value)
|
||||
break
|
||||
case 'btnExport': //导出
|
||||
case 'btnExport':
|
||||
mainTable.value.exportExcel(`表结构${parseTime(new Date())}`, callback)
|
||||
break
|
||||
default:
|
||||
@@ -273,7 +214,7 @@
|
||||
}
|
||||
|
||||
// ------------------------主数据列表处理------------------------------------
|
||||
const getList = () => {
|
||||
const getList = function () {
|
||||
listLoading.value = true
|
||||
{FirstTableName}s.getList(firstQuery).then(response => {
|
||||
mainList.value = response.data
|
||||
@@ -284,72 +225,34 @@
|
||||
listLoading.value = false
|
||||
})
|
||||
}
|
||||
const rowClickFirstTable = row => {
|
||||
const rowClickFirstTable = function (row) {
|
||||
// 点击行
|
||||
mainTable.value.clearSelection()
|
||||
mainTable.value.toggleRowSelection(row)
|
||||
|
||||
radio.value = row.id
|
||||
tableName.value = row.id
|
||||
tableName.value = row.tableName
|
||||
secondQuery.page = 1
|
||||
secondQuery.limit = 10
|
||||
querySecondList(radio.value)
|
||||
showTitleDetail(row)
|
||||
}
|
||||
|
||||
const handleSelChangeFirstTable = function (val) {
|
||||
// multipleSelection.value = val
|
||||
}
|
||||
|
||||
const handleFilter = () => {
|
||||
const handleFilter = function () {
|
||||
firstQuery.page = 1
|
||||
getList()
|
||||
}
|
||||
const handleSizeChange = val => {
|
||||
const handleSizeChange = function (val) {
|
||||
firstQuery.limit = val
|
||||
getList()
|
||||
}
|
||||
const handleCurrentChange = val => {
|
||||
const handleCurrentChange = function (val) {
|
||||
firstQuery.page = val
|
||||
getList()
|
||||
}
|
||||
const resetFirstTemp = () => {
|
||||
const resetFirstTemp = function () {
|
||||
firstHeaderList.value.forEach(item => {
|
||||
firstTemp[item.columnName] = defaultVal(item.entityType)
|
||||
})
|
||||
firstTemp.namespace = 'OpenAuth.Repository.Domain'
|
||||
}
|
||||
const createData = () => {
|
||||
// 保存提交
|
||||
dataForm.value.validate(() => {
|
||||
let tempData = Object.assign({}, firstTemp)
|
||||
tempData = setDetails(tempData)
|
||||
tempData.OrgId = defaultorgid.value
|
||||
{FirstTableName}s.add(tempData).then(resp => {
|
||||
if (resp.result != undefined) {
|
||||
//如果服务器返回生成的ID
|
||||
tempData.id = resp.result
|
||||
}
|
||||
mainList.value.unshift(tempData)
|
||||
editModel.value = false
|
||||
rowClickFirstTable(tempData)
|
||||
ElNotification({
|
||||
title: '成功',
|
||||
message: '创建成功',
|
||||
type: 'success',
|
||||
duration: 2000,
|
||||
})
|
||||
})
|
||||
})
|
||||
}
|
||||
const showTitleDetail = row => {
|
||||
// 弹出编辑框
|
||||
Object.assign(selectRow, row) // 新增订单时保存当前选中行
|
||||
Object.assign(firstTemp, row) // copy obj
|
||||
nextTick(() => {
|
||||
dataForm.value.clearValidate()
|
||||
})
|
||||
}
|
||||
|
||||
const setDetails = tempData => {
|
||||
// 处理明细
|
||||
tempData.{SecondTableName}Reqs = []
|
||||
@@ -366,7 +269,36 @@
|
||||
})
|
||||
return tempData
|
||||
}
|
||||
const updateData = () => {
|
||||
|
||||
const createData = function () {
|
||||
// 保存提交
|
||||
dataForm.value.validate(() => {
|
||||
let tempData = Object.assign({}, firstTemp)
|
||||
tempData = setDetails(tempData)
|
||||
tempData.OrgId = defaultorgid.value
|
||||
{FirstTableName}s.add(tempData).then(resp => {
|
||||
tempData.id = resp.result
|
||||
mainList.value.unshift(tempData)
|
||||
editModel.value = false
|
||||
rowClickFirstTable(tempData)
|
||||
ElNotification({
|
||||
title: '成功',
|
||||
message: '创建成功',
|
||||
type: 'success',
|
||||
duration: 2000,
|
||||
})
|
||||
})
|
||||
})
|
||||
}
|
||||
const showTitleDetail = function (row) {
|
||||
// 弹出编辑框
|
||||
Object.assign(selectRow, row) // 新增订单时保存当前选中行
|
||||
Object.assign(firstTemp, row) // copy obj
|
||||
nextTick(() => {
|
||||
dataForm.value.clearValidate()
|
||||
})
|
||||
}
|
||||
const updateData = function () {
|
||||
// 更新提交
|
||||
dataForm.value.validate(() => {
|
||||
let tempData = Object.assign({}, firstTemp)
|
||||
@@ -389,8 +321,8 @@
|
||||
})
|
||||
})
|
||||
}
|
||||
const handleFirstDel = row => {
|
||||
// 主表删除处理
|
||||
const handleFirstDel = function (row) {
|
||||
// 删除头
|
||||
{FirstTableName}s.del([row.id]).then(() => {
|
||||
ElNotification({
|
||||
title: '成功',
|
||||
@@ -410,7 +342,7 @@
|
||||
})
|
||||
}
|
||||
// ------------------------明细列表处理-------------------------------------
|
||||
const handleSecondPage = e => {
|
||||
const handleSecondPage = function (e) {
|
||||
secondQuery.page = e
|
||||
querySecondList(radio.value)
|
||||
}
|
||||
@@ -427,7 +359,7 @@
|
||||
secondList.value = res.data
|
||||
})
|
||||
}
|
||||
const rowClickSecondTable = row => {
|
||||
const rowClickSecondTable = function (row) {
|
||||
// 行点击事件
|
||||
secondTable.value.clearSelection()
|
||||
secondTable.value.toggleRowSelection(row)
|
||||
@@ -445,22 +377,12 @@
|
||||
})
|
||||
})
|
||||
}
|
||||
const selChangeSecondTable = val => {
|
||||
const selChangeSecondTable = function (val) {
|
||||
// 明细选中事件
|
||||
multipleSelection.value = val
|
||||
}
|
||||
const handleAddOrderDetail = () => {
|
||||
// 添加明细
|
||||
const obj = {}
|
||||
secondHeaderList.value.forEach(header => {
|
||||
obj[header.columnName] = defaultVal(header.entityType)
|
||||
})
|
||||
obj.{ParentTableId} = firstTemp.id
|
||||
|
||||
secondList.value.push(Object.assign({}, obj))
|
||||
}
|
||||
const handleUpdateDetail = item => {
|
||||
// 回车保存明细
|
||||
const handleUpdateDetail = function (item) {
|
||||
// 同步表数据结构
|
||||
{SecondTableName}s.update(item).then(() => {
|
||||
ElNotification({
|
||||
title: '成功',
|
||||
@@ -470,4 +392,4 @@
|
||||
})
|
||||
})
|
||||
}
|
||||
</script>
|
||||
</script>
|
||||
@@ -1,143 +1,88 @@
|
||||
<!--
|
||||
* @Author: yubaolee <yubaolee@163.com> | ahfu~ <954478625@qq.com>
|
||||
* @Description: 代码生成界面,采用的是固定头部结构
|
||||
* @Description: 代码生成界面,动态头部
|
||||
* @
|
||||
* @Copyright (c) 2022 by yubaolee | ahfu~ , All Rights Reserved.
|
||||
* @Copyright (c) 2024 by yubaolee | ahfu~ , All Rights Reserved.
|
||||
-->
|
||||
<template>
|
||||
<div class="flex-column">
|
||||
<div class="flex-column flex">
|
||||
<sticky>
|
||||
<el-input
|
||||
style="width: 200px"
|
||||
class="filter-item"
|
||||
:placeholder="'名称'"
|
||||
v-model="firstQuery.key"></el-input>
|
||||
<el-button
|
||||
class="filter-item"
|
||||
icon="el-icon-search"
|
||||
@click="handleFilter">
|
||||
搜索
|
||||
</el-button>
|
||||
<div class="search-box">
|
||||
<el-input @keyup.enter="handleFilter" size="small" class="w-200 custom-input" :placeholder="'名称'"
|
||||
v-model="firstQuery.key"></el-input>
|
||||
<el-button class="filter-item custom-button" icon="el-icon-search" size="small" @click="handleFilter">
|
||||
搜索
|
||||
</el-button>
|
||||
</div>
|
||||
<permission-btn v-on:btn-event="onBtnClicked"></permission-btn>
|
||||
</sticky>
|
||||
<el-card shadow="nerver" class="flex-item">
|
||||
<auth-table
|
||||
style="height: calc(100% - 52px)"
|
||||
ref="mainTable"
|
||||
:table-fields="firstHeaderList"
|
||||
:data="mainList"
|
||||
:v-loading="listLoading"
|
||||
@row-click="rowClickFirstTable"
|
||||
@selection-change="handleSelChangeFirstTable"></auth-table>
|
||||
<el-pagination
|
||||
v-show="firstTotal > 0"
|
||||
:total="firstTotal"
|
||||
v-model:currentPage="firstQuery.page"
|
||||
v-model:page-size="firstQuery.limit"
|
||||
@current-change="handleCurrentChange" />
|
||||
</el-card>
|
||||
<el-row class="flex-item">
|
||||
<el-col :span="showTitleDialog ? 8 : 0" class="fh form-card">
|
||||
<el-card shadow="nerver" class="demo-card fh">
|
||||
<template #header>
|
||||
<div>
|
||||
<span v-if="radio == ''">详情</span>
|
||||
<span v-else>{{ tableName }}详情</span>
|
||||
</div>
|
||||
</template>
|
||||
<auth-form
|
||||
ref="dataForm"
|
||||
:rules="mainRules"
|
||||
:edit-model="editModel"
|
||||
:form-fields="firstHeaderList"
|
||||
v-model="firstTemp"
|
||||
:data="firstTemp"
|
||||
:col-num="2"></auth-form>
|
||||
</el-card>
|
||||
</el-col>
|
||||
<!-- 第二部分多选 -->
|
||||
<el-col :span="!showTitleDialog ? 24 : 16" class="fh detail-card">
|
||||
<el-card shadow="nerver" class="demo-card fh" id="secondCard">
|
||||
<template #header>
|
||||
<el-row>
|
||||
<el-col :span="2">
|
||||
<el-icon
|
||||
v-if="showTitleDialog"
|
||||
@click="showTitleDialog = !showTitleDialog"
|
||||
:size="20">
|
||||
<div class="flex-item flex flex-column main-context">
|
||||
<el-card shadow="never" class="custom-card flex-item flex flex-column">
|
||||
<auth-table size="small" ref="mainTable" :select-type="'radio'" :table-fields="firstHeaderList" :data="mainList"
|
||||
:v-loading="listLoading" @row-click="rowClickFirstTable"></auth-table>
|
||||
</el-card>
|
||||
<div class="flex flex-direction-r b-w p-r-10 p-t-10 p-b-10">
|
||||
<el-pagination v-show="firstTotal > 0" :total="firstTotal" v-model:currentPage="firstQuery.page"
|
||||
v-model:page-size="firstQuery.limit" @current-change="handleCurrentChange" />
|
||||
</div>
|
||||
<div class="flex-item flex">
|
||||
<div v-if="showTitleDialog" class="flex flex-column" style="width: 500px;">
|
||||
<el-card shadow="never" class="demo-card custom-card fh">
|
||||
<template #header>
|
||||
<div>
|
||||
<span v-if="radio == ''" class="f-12 f-b">表信息</span>
|
||||
<span v-else class="f-12 f-b">{{ tableName }}表信息</span>
|
||||
</div>
|
||||
</template>
|
||||
<auth-form ref="dataForm" :rules="mainRules" :edit-model="editModel" :form-fields="firstHeaderList"
|
||||
v-model="firstTemp" :data="firstTemp" :col-num="2"></auth-form>
|
||||
</el-card>
|
||||
</div>
|
||||
<div class="flex-item flex flex-column">
|
||||
<el-card shadow="never" class="custom-card flex-item flex flex-column" id="secondCard">
|
||||
<template #header>
|
||||
<div class="flex flex-center">
|
||||
<el-icon v-if="showTitleDialog" @click="showTitleDialog = !showTitleDialog" :size="14">
|
||||
<ArrowLeftBold />
|
||||
</el-icon>
|
||||
<el-icon
|
||||
v-else
|
||||
@click="showTitleDialog = !showTitleDialog"
|
||||
:size="20">
|
||||
<el-icon v-else @click="showTitleDialog = !showTitleDialog" :size="14">
|
||||
<ArrowRightBold />
|
||||
</el-icon>
|
||||
</el-col>
|
||||
<el-col :span="18">
|
||||
<span v-if="radio == ''" class="flex-item">
|
||||
明细列表(修改后,编辑框内回车生效)
|
||||
<span v-if="radio == ''" class="flex-item f-12 f-b">
|
||||
表字段信息(修改后,编辑框内回车生效)
|
||||
</span>
|
||||
<span v-else class="flex-item">
|
||||
{{ tableName }}明细列表(修改后,编辑框内回车生效)
|
||||
<span v-else class="flex-item f-12 f-b">
|
||||
{{ tableName }}表字段信息(修改后,编辑框内回车生效)
|
||||
</span>
|
||||
</el-col>
|
||||
<el-col :span="2">
|
||||
<el-button
|
||||
v-if="editModel"
|
||||
:icon="Plus"
|
||||
@click="onBtnClicked('btnAddDetail')">
|
||||
添加
|
||||
</el-button>
|
||||
</el-col>
|
||||
<el-col :span="2">
|
||||
<el-button
|
||||
v-if="editModel"
|
||||
:icon="Delete"
|
||||
@click="onBtnClicked('btnDelDetail')">
|
||||
<el-button size="small" v-if="editModel" :icon="Delete" @click="onBtnClicked('btnDelDetail')">
|
||||
删除
|
||||
</el-button>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</template>
|
||||
<auth-table
|
||||
style="height: calc(100% - 52px - 34px)"
|
||||
ref="secondTable"
|
||||
:editModel="editModel"
|
||||
:table-fields="secondHeaderList"
|
||||
:data="secondList"
|
||||
@row-click="rowClickSecondTable"
|
||||
@selection-change="selChangeSecondTable"
|
||||
@item-change="handleUpdateDetail"></auth-table>
|
||||
<el-pagination
|
||||
v-show="secondTotal > 0"
|
||||
:total="secondTotal"
|
||||
v-model:page="secondQuery.page"
|
||||
v-model:limit="secondQuery.limit"
|
||||
@current-change="handleSecondPage" />
|
||||
</el-card>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-affix position="bottom" v-if="editModel" style="text-align: end">
|
||||
<el-row style="background-color: white">
|
||||
<el-col :span="24">
|
||||
<el-button @click="editModel = false">取消</el-button>
|
||||
<el-button
|
||||
v-if="dialogStatus == 'create'"
|
||||
type="primary"
|
||||
@click="createData">
|
||||
确认
|
||||
</el-button>
|
||||
<el-button v-else type="primary" @click="updateData">确认</el-button>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-affix>
|
||||
</div>
|
||||
</template>
|
||||
<auth-table size="small" ref="secondTable" :editModel="editModel" :table-fields="secondHeaderList"
|
||||
:data="secondList" @row-click="rowClickSecondTable" @selection-change="selChangeSecondTable"
|
||||
@item-change="handleUpdateDetail"></auth-table>
|
||||
</el-card>
|
||||
<div class="flex flex-direction-r p-r-10 b-w p-b-5 p-t-5">
|
||||
<el-pagination v-show="secondTotal > 0" :total="secondTotal" v-model:page="secondQuery.page"
|
||||
v-model:limit="secondQuery.limit" @current-change="handleSecondPage" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div v-if="editModel" class="p-t-5 p-b-5 t-r b-w p-r-10 border-t-2">
|
||||
<el-button @click="editModel = false">取消</el-button>
|
||||
<el-button v-if="dialogStatus == 'create'" type="primary" @click="createData">
|
||||
确认
|
||||
</el-button>
|
||||
<el-button v-else type="primary" @click="updateData">确认</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<script setup>
|
||||
//引入核心框架
|
||||
import { ElMessage, ElNotification } from 'element-plus'
|
||||
import { Plus, Delete } from '@element-plus/icons-vue'
|
||||
import { Refresh, Delete } from '@element-plus/icons-vue'
|
||||
import { onMounted, ref, reactive, nextTick, computed } from 'vue'
|
||||
import { mapGetters, useStore } from 'vuex'
|
||||
//引入API,共用方法
|
||||
@@ -152,7 +97,6 @@
|
||||
import permissionBtn from '@/components/PermissionBtn/index.vue'
|
||||
import AuthForm from '../../components/Base/AuthForm.vue'
|
||||
import AuthTable from '../../components/Base/AuthTable.vue'
|
||||
|
||||
const firstHeaderList = ref([]) //列表头
|
||||
const secondHeaderList = ref([]) //明细列表头
|
||||
const multipleSelection = ref([]) //明细中checkbox选中的值
|
||||
@@ -181,30 +125,36 @@
|
||||
customerKey: undefined,
|
||||
})
|
||||
const showTitleDialog = ref(true) //是否显示左下主列表详情值
|
||||
const mainRules = reactive({ //添加自己的表单验证规则
|
||||
const mainRules = reactive({
|
||||
Id: [
|
||||
{
|
||||
required: true,
|
||||
message: 'id不能为空'
|
||||
},
|
||||
],
|
||||
|
||||
})
|
||||
//组件refs
|
||||
const mainTable = ref(null)
|
||||
const dataForm = ref(null)
|
||||
const secondTable = ref(null)
|
||||
|
||||
const store = useStore()
|
||||
const defaultorgid = computed(() => store.getters.defaultorgid)
|
||||
onMounted(() => {
|
||||
initCfg()
|
||||
getList()
|
||||
})
|
||||
|
||||
const initCfg = function () {
|
||||
firstHeaderList.value = [
|
||||
{FirstHeaderList}
|
||||
]
|
||||
secondHeaderList.value = [
|
||||
{SecondHeaderList}
|
||||
]
|
||||
}
|
||||
// ------------------------通用处理函数-------------------------------------
|
||||
const onBtnClicked = (domId, callback) => {
|
||||
const onBtnClicked = function (domId, callback) {
|
||||
switch (domId) {
|
||||
case 'btnAdd': // 添加
|
||||
case 'btnAdd': // 添加新记录
|
||||
resetFirstTemp()
|
||||
secondList.value = []
|
||||
dialogStatus.value = 'create'
|
||||
@@ -215,7 +165,7 @@
|
||||
dataForm.value.clearValidate()
|
||||
})
|
||||
break
|
||||
case 'btnEdit': // 编辑
|
||||
case 'btnEdit': // 编辑头
|
||||
Object.assign(firstTemp, selectRow)
|
||||
if (firstTemp.id === '') {
|
||||
editModel.value = false
|
||||
@@ -232,7 +182,7 @@
|
||||
dataForm.value.clearValidate()
|
||||
})
|
||||
break
|
||||
case 'btnDel': // 删除
|
||||
case 'btnDel': // 删除主表
|
||||
if (firstTemp.id === '') {
|
||||
ElMessage({
|
||||
message: '请选择要删除的项',
|
||||
@@ -255,7 +205,7 @@
|
||||
}
|
||||
handleSecondDel(multipleSelection.value)
|
||||
break
|
||||
case 'btnExport': //导出
|
||||
case 'btnExport':
|
||||
mainTable.value.exportExcel(`表结构${parseTime(new Date())}`, callback)
|
||||
break
|
||||
default:
|
||||
@@ -282,72 +232,34 @@
|
||||
listLoading.value = false
|
||||
})
|
||||
}
|
||||
const rowClickFirstTable = row => {
|
||||
const rowClickFirstTable = function (row) {
|
||||
// 点击行
|
||||
mainTable.value.clearSelection()
|
||||
mainTable.value.toggleRowSelection(row)
|
||||
|
||||
radio.value = row.id
|
||||
tableName.value = row.id
|
||||
tableName.value = row.tableName
|
||||
secondQuery.page = 1
|
||||
secondQuery.limit = 10
|
||||
querySecondList(radio.value)
|
||||
showTitleDetail(row)
|
||||
}
|
||||
|
||||
const handleSelChangeFirstTable = function (val) {
|
||||
// multipleSelection.value = val
|
||||
}
|
||||
|
||||
const handleFilter = () => {
|
||||
const handleFilter = function () {
|
||||
firstQuery.page = 1
|
||||
getList()
|
||||
}
|
||||
const handleSizeChange = val => {
|
||||
const handleSizeChange = function (val) {
|
||||
firstQuery.limit = val
|
||||
getList()
|
||||
}
|
||||
const handleCurrentChange = val => {
|
||||
const handleCurrentChange = function (val) {
|
||||
firstQuery.page = val
|
||||
getList()
|
||||
}
|
||||
const resetFirstTemp = () => {
|
||||
const resetFirstTemp = function () {
|
||||
firstHeaderList.value.forEach(item => {
|
||||
firstTemp[item.columnName] = defaultVal(item.entityType)
|
||||
})
|
||||
firstTemp.namespace = 'OpenAuth.Repository.Domain'
|
||||
}
|
||||
const createData = () => {
|
||||
// 保存提交
|
||||
dataForm.value.validate(() => {
|
||||
let tempData = Object.assign({}, firstTemp)
|
||||
tempData = setDetails(tempData)
|
||||
tempData.OrgId = defaultorgid.value
|
||||
{FirstTableName}s.add(tempData).then(resp => {
|
||||
if (resp.result != undefined) {
|
||||
//如果服务器返回生成的ID
|
||||
tempData.id = resp.result
|
||||
}
|
||||
mainList.value.unshift(tempData)
|
||||
editModel.value = false
|
||||
rowClickFirstTable(tempData)
|
||||
ElNotification({
|
||||
title: '成功',
|
||||
message: '创建成功',
|
||||
type: 'success',
|
||||
duration: 2000,
|
||||
})
|
||||
})
|
||||
})
|
||||
}
|
||||
const showTitleDetail = row => {
|
||||
// 弹出编辑框
|
||||
Object.assign(selectRow, row) // 新增订单时保存当前选中行
|
||||
Object.assign(firstTemp, row) // copy obj
|
||||
nextTick(() => {
|
||||
dataForm.value.clearValidate()
|
||||
})
|
||||
}
|
||||
|
||||
const setDetails = tempData => {
|
||||
// 处理明细
|
||||
tempData.{SecondTableName}Reqs = []
|
||||
@@ -364,7 +276,36 @@
|
||||
})
|
||||
return tempData
|
||||
}
|
||||
const updateData = () => {
|
||||
|
||||
const createData = function () {
|
||||
// 保存提交
|
||||
dataForm.value.validate(() => {
|
||||
let tempData = Object.assign({}, firstTemp)
|
||||
tempData = setDetails(tempData)
|
||||
tempData.OrgId = defaultorgid.value
|
||||
{FirstTableName}s.add(tempData).then(resp => {
|
||||
tempData.id = resp.result
|
||||
mainList.value.unshift(tempData)
|
||||
editModel.value = false
|
||||
rowClickFirstTable(tempData)
|
||||
ElNotification({
|
||||
title: '成功',
|
||||
message: '创建成功',
|
||||
type: 'success',
|
||||
duration: 2000,
|
||||
})
|
||||
})
|
||||
})
|
||||
}
|
||||
const showTitleDetail = function (row) {
|
||||
// 弹出编辑框
|
||||
Object.assign(selectRow, row) // 新增订单时保存当前选中行
|
||||
Object.assign(firstTemp, row) // copy obj
|
||||
nextTick(() => {
|
||||
dataForm.value.clearValidate()
|
||||
})
|
||||
}
|
||||
const updateData = function () {
|
||||
// 更新提交
|
||||
dataForm.value.validate(() => {
|
||||
let tempData = Object.assign({}, firstTemp)
|
||||
@@ -387,8 +328,8 @@
|
||||
})
|
||||
})
|
||||
}
|
||||
const handleFirstDel = row => {
|
||||
// 主表删除处理
|
||||
const handleFirstDel = function (row) {
|
||||
// 删除头
|
||||
{FirstTableName}s.del([row.id]).then(() => {
|
||||
ElNotification({
|
||||
title: '成功',
|
||||
@@ -408,31 +349,31 @@
|
||||
})
|
||||
}
|
||||
// ------------------------明细列表处理-------------------------------------
|
||||
const handleSecondPage = e => {
|
||||
const handleSecondPage = function (e) {
|
||||
secondQuery.page = e
|
||||
querySecondList(radio.value)
|
||||
}
|
||||
const querySecondList = id => {
|
||||
{SecondTableName}s
|
||||
.getList({
|
||||
{ParentTableId}: id,
|
||||
page: secondQuery.page,
|
||||
limit: secondQuery.limit,
|
||||
key: secondQuery.customerKey,
|
||||
})
|
||||
.then(res => {
|
||||
res.columnFields.forEach(item => {
|
||||
// 首字母小写
|
||||
item.columnName =
|
||||
item.columnName.substring(0, 1).toLowerCase() +
|
||||
item.columnName.substring(1)
|
||||
})
|
||||
secondHeaderList.value = res.columnFields
|
||||
secondTotal.value = res.count
|
||||
secondList.value = res.data
|
||||
})
|
||||
{ParentTableId}: id,
|
||||
page: secondQuery.page,
|
||||
limit: secondQuery.limit,
|
||||
key: secondQuery.customerKey,
|
||||
})
|
||||
.then(res => {
|
||||
res.columnFields.forEach(item => {
|
||||
// 首字母小写
|
||||
item.columnName =
|
||||
item.columnName.substring(0, 1).toLowerCase() +
|
||||
item.columnName.substring(1)
|
||||
})
|
||||
secondHeaderList.value = res.columnFields
|
||||
secondTotal.value = res.count
|
||||
secondList.value = res.data
|
||||
})
|
||||
}
|
||||
const rowClickSecondTable = row => {
|
||||
const rowClickSecondTable = function (row) {
|
||||
// 行点击事件
|
||||
secondTable.value.clearSelection()
|
||||
secondTable.value.toggleRowSelection(row)
|
||||
@@ -450,22 +391,12 @@
|
||||
})
|
||||
})
|
||||
}
|
||||
const selChangeSecondTable = val => {
|
||||
const selChangeSecondTable = function (val) {
|
||||
// 明细选中事件
|
||||
multipleSelection.value = val
|
||||
}
|
||||
const handleAddOrderDetail = () => {
|
||||
// 添加明细
|
||||
const obj = {}
|
||||
secondHeaderList.value.forEach(header => {
|
||||
obj[header.columnName] = defaultVal(header.entityType)
|
||||
})
|
||||
obj.{ParentTableId} = firstTemp.id
|
||||
|
||||
secondList.value.push(Object.assign({}, obj))
|
||||
}
|
||||
const handleUpdateDetail = item => {
|
||||
// 回车保存明细
|
||||
const handleUpdateDetail = function (item) {
|
||||
// 同步表数据结构
|
||||
{SecondTableName}s.update(item).then(() => {
|
||||
ElNotification({
|
||||
title: '成功',
|
||||
@@ -475,4 +406,4 @@
|
||||
})
|
||||
})
|
||||
}
|
||||
</script>
|
||||
</script>
|
||||
@@ -153,7 +153,7 @@ const onBtnClicked = function (domId, callback) {
|
||||
})
|
||||
return
|
||||
}
|
||||
handleDelete(multipleSelection)
|
||||
handleDelete(multipleSelection.value)
|
||||
break
|
||||
case 'btnExport':
|
||||
mainTable.value.exportExcel('资源文件', callback)
|
||||
|
||||
@@ -149,7 +149,7 @@ const onBtnClicked = function (domId, callback) {
|
||||
})
|
||||
return
|
||||
}
|
||||
handleDelete(multipleSelection)
|
||||
handleDelete(multipleSelection.value)
|
||||
break
|
||||
case 'btnExport':
|
||||
mainTable.value.exportExcel('资源文件', callback)
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
"AllowedHosts": "*",
|
||||
"DataProtection": "temp-keys/",
|
||||
"ConnectionStrings": {
|
||||
"OpenAuthDBContext": "Data Source=.;Initial Catalog=OpenAuthDB;User=sa;Password=000000"
|
||||
"OpenAuthDBContext": "Data Source=.;Encrypt=false;Initial Catalog=OpenAuthDB;User=sa;Password=000000"
|
||||
//"OpenAuthDBContext": "server=127.0.0.1;user id=root;database=openauthdb;password=000000" //my sql
|
||||
//"OpenAuthDBContext": "Host=localhost;Port=5432;Database=OpenAuth;Username=postgres;Password=123;" //PostgreSQL
|
||||
//"OpenAuthDBContext2": "DATA SOURCE=192.168.0.118:1521/YUBAO;PASSWORD=000000;Validate Connection=true;PERSIST SECURITY INFO=True;USER ID=yubaolee;" //Oracle
|
||||
|
||||
22
README.md
22
README.md
@@ -29,9 +29,7 @@
|
||||
|
||||
## ❤❤❤郑重声明❤❤❤
|
||||
|
||||
主分支main运行环境默认为.Net SDK 6.0,支持.NET未来版本,需要.Net SDK 4.0/4.5开发环境的同学请查看本项目4.0分支,已停止维护
|
||||
|
||||
使用.Net Core 2.1-3.1的请进:https://gitee.com/yubaolee/OpenAuth.Core ,已停止维护
|
||||
主分支main运行环境默认为.Net SDK 9.0.100,如果需要降低sdk版本,请参考[切换sdk版本](http://doc.openauth.net.cn/core/changesdk.html)。使用.Net Core 2.1-3.1的请进:https://gitee.com/yubaolee/OpenAuth.Core ,已停止维护
|
||||
|
||||
## OpenAuth.Net系列视频火热更新中
|
||||
|
||||
@@ -46,11 +44,15 @@
|
||||
[OpenAuth.Net视频合集--表单设计](https://www.bilibili.com/video/BV1dagEeFEVA/)
|
||||
|
||||
|
||||
## 关于OpenAuth.Net企业版/高级版的说明:
|
||||
## 关于OpenAuth.Net vue2/vue3版本的说明:
|
||||
|
||||
目前OpenAuth.Net以全部开源的方式向大众开放,对于有经验的开发者,官方文档足以满足日常开发。为了能让项目走的更远,特推出基于vue2 + element-ui /vue3 + element-plus的单页面应用程序,即企业版/高级版OpenAuth.Pro
|
||||
目前OpenAuth.Net以全部开源的方式向大众开放,对于有经验的开发者,官方文档足以满足日常开发。为了能让项目走的更远,特推出基于vue2 + element-ui /vue3 + element-plus的单页面应用程序,即高级版/企业版
|
||||
|
||||
**该版本是一套后端基于OpenAuth.WebAPI接口,前端基于vue-element-admin,采用VUE全家桶(VUE+VUEX+VUE-ROUTER)单页面SPA开发的管理后台 [点击这里查看效果](http://demo.openauth.net.cn:1803)**
|
||||
**该版本是一套后端基于OpenAuth.WebAPI接口,前端基于elementUI/elementPlus,采用VUE全家桶(VUE+VUEX+VUE-ROUTER)单页面SPA开发的管理后台:
|
||||
|
||||
* Vue2演示地址: http://demo.openauth.net.cn:1803
|
||||
|
||||
* Vue3演示地址: http://demo.openauth.net.cn:1805
|
||||
|
||||
**另外** 企业版包含一套基于有赞Vant+Vue3的移动端界面,[请使用浏览器移动模式查看效果](http://demo.openauth.net.cn:1804)
|
||||
|
||||
@@ -76,9 +78,11 @@
|
||||
|
||||
## 演示直达
|
||||
|
||||
* 企业版Vue2演示地址: http://demo.openauth.net.cn:1803
|
||||
* Vue2演示地址: http://demo.openauth.net.cn:1803
|
||||
|
||||
* 企业版H5演示地址(请使用浏览器移动模式或直接用手机打开): http://demo.openauth.net.cn:1804
|
||||
* Vue3演示地址: http://demo.openauth.net.cn:1805
|
||||
|
||||
* 移动H5演示地址(请使用浏览器移动模式或直接用手机打开): http://demo.openauth.net.cn:1804
|
||||
|
||||
* 开源版演示地址: http://demo.openauth.net.cn:1802
|
||||
|
||||
@@ -108,7 +112,7 @@
|
||||
|
||||
* 前端采用 vue + layui + element-ui + ztree + gooflow + leipiformdesign
|
||||
|
||||
* 后端采用 .net core +EF core+ autofac + quartz +IdentityServer4 + nunit + swagger
|
||||
* 后端采用 .net +EF + sqlsugar + autofac + quartz +IdentityServer4 + nunit + swagger
|
||||
|
||||
* 设计工具 PowerDesigner + Enterprise Architect
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* @Author: yubaolee <yubaolee@163.com> | ahfu~ <954478625@qq.com>
|
||||
* @Date: 2023-08-12 10:48:24
|
||||
* @LastEditTime: 2024-06-19 20:48:12
|
||||
* @LastEditTime: 2024-11-29 09:36:05
|
||||
* @Description:
|
||||
* @
|
||||
* @Copyright (c) 2023 by yubaolee | ahfu~ , All Rights Reserved.
|
||||
@@ -91,7 +91,7 @@ module.exports = {
|
||||
path: 'start', // 可选的, 标题的跳转链接,应为绝对路径且必须存在
|
||||
sidebarDepth: 1, // 可选的, 默认值是 1
|
||||
collapsable: false,
|
||||
children: ['start', 'specialist', 'deploy', 'deployapi', 'devnew', 'multidbs', 'multitenant', 'unitwork','sqlsugar', 'entity', 'datavalidation', 'log', 'identity', 'job', 'cache', 'unittest'],
|
||||
children: ['start', 'specialist', 'deploy', 'deployapi', 'devnew', 'multidbs', 'multitenant', 'unitwork','sqlsugar', 'entity', 'datavalidation', 'log', 'identity', 'job', 'cache', 'unittest','changesdk'],
|
||||
},
|
||||
{
|
||||
title: '权限控制', // 必要的
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
|
||||

|
||||
|
||||
OpenAuth.Net是基于 **.Net Core/.Net 5/6/7..** 的开源权限工作流快速开发框架。源于Martin Fowler企业级应用开发思想及最新技术组合(SqlSugar、EF、Quartz、AutoFac、WebAPI、Swagger、Mock、NUnit、Vue2/3、Element-ui/plus、IdentityServer等)。核心模块包括:组织机构、角色用户、权限授权、表单设计、工作流等。
|
||||
OpenAuth.Net是基于最新版.Net的开源权限工作流快速开发框架。源于Martin Fowler企业级应用开发思想及最新技术组合(SqlSugar、EF、Quartz、AutoFac、WebAPI、Swagger、Mock、NUnit、Vue2/3、Element-ui/plus、IdentityServer等)。核心模块包括:组织机构、角色用户、权限授权、表单设计、工作流等。
|
||||
|
||||
开源版本演示:[http://demo.openauth.net.cn:1802/](http://demo.openauth.net.cn:1802/)
|
||||
|
||||
@@ -8,13 +9,13 @@ OpenAuth.Net是基于 **.Net Core/.Net 5/6/7..** 的开源权限工作流快速
|
||||
|
||||
::: tip 提示
|
||||
|
||||
gitee上面两个版本,仅SDK的版本不同,代码完全相同。其中:
|
||||
gitee上面两个版本。其中:
|
||||
|
||||
* [OpenAuth.Net](https://gitee.com/dotnetchina/OpenAuth.Net) 默认SDK版本为.Net 6,推荐使用该版本
|
||||
* [OpenAuth.Net](https://gitee.com/dotnetchina/OpenAuth.Net) 默认SDK版本为.Net 9.0.100,如果需要切换到.Net其他版本请参考:[切换sdk版本](http://doc.openauth.net.cn/core/changesdk.html)
|
||||
|
||||
* [OpenAuth.Core](https://gitee.com/yubaolee/OpenAuth.Core) 的SDK版本为.Net Core 3.1.100,历史原因暂且保留,未来的某天会关闭它
|
||||
* [OpenAuth.Core](https://gitee.com/yubaolee/OpenAuth.Core) 的SDK版本为.Net Core 3.1.100,已停止维护,不推荐使用。
|
||||
|
||||
.Net目前SDK升级特别方便,只需花费3分钟时间既可升级到.Net 6/7/8...等。请参考:[3分钟的时间把.net core 3.1的升级到.NET 5](https://www.cnblogs.com/yubaolee/p/Net3ToNet5.html),所以不要纠结SDK版本问题。
|
||||
.Net目前SDK升级特别方便。请参考:[3分钟的时间把.net core 3.1的升级到.NET 5](https://www.cnblogs.com/yubaolee/p/Net3ToNet5.html),所以不要纠结SDK版本问题。
|
||||
:::
|
||||
|
||||
|
||||
@@ -26,7 +27,7 @@ gitee上面两个版本,仅SDK的版本不同,代码完全相同。其中:
|
||||
|
||||
## 核心看点
|
||||
|
||||
* 支持.net core sdk 3.1.100 及.Net 5/6/7..([一分钟从.net core 3.1切换至.Net 5](https://www.cnblogs.com/yubaolee/p/Net3ToNet5.html))
|
||||
* 支持最新版.Net 9.0.100
|
||||
|
||||
* 同时支持EntityFramework、SqlSugar两款最流行的ORM框架
|
||||
|
||||
@@ -34,9 +35,9 @@ gitee上面两个版本,仅SDK的版本不同,代码完全相同。其中:
|
||||
|
||||
* 完整的字段权限控制,可以控制字段可见及API是否返回字段值
|
||||
|
||||
* 可拖拽的表单设计
|
||||
* 可拖拽的表单设计:[可拖拽表单](http://doc.openauth.net.cn/pro/dragform.html)
|
||||
|
||||
* 可视化流程设计
|
||||
* 可视化流程设计:[可视化流程设计](http://doc.openauth.net.cn/pro/startflow.html)
|
||||
|
||||
* 基于Quartz.Net的定时任务控制,可随时启/停,可视化配置Cron表达式功能
|
||||
|
||||
@@ -54,9 +55,9 @@ gitee上面两个版本,仅SDK的版本不同,代码完全相同。其中:
|
||||
|
||||
* 前端采用 vue + layui + elementUI + ztree + gooflow + leipiformdesign
|
||||
|
||||
* 后端采用 .net core/.Net 5/6/7.. +EF core+ autofac + quartz +IdentityServer4 + nunit + swagger
|
||||
* 后端采用 .net +EF +SqlSugar + Autofac + quartz +IdentityServer4 + nunit + swagger
|
||||
|
||||
* 设计工具 PowerDesigner + Enterprise Architect
|
||||
* 设计工具 PowerDesigner +PDManer + Enterprise Architect
|
||||
|
||||
|
||||
|
||||
|
||||
27
docs/core/changesdk.md
Normal file
27
docs/core/changesdk.md
Normal file
@@ -0,0 +1,27 @@
|
||||
# 切换sdk版本
|
||||
|
||||
OpenAuth.Net最新版默认使用.Net SDK 9.0.100。如果你使用的是其他版本的sdk(如.net 6.0/7.0等)打开项目,需要调整csproj项目文件的TargetFramework。用记事本等工具,打开 `Infrastructure.csproj` `OpenAuth.Repository.csproj` `OpenAuth.App.csproj` `OpenAuth.Mvc.csproj` `OpenAuth.WebApi.csproj` `OpenAuth.IdentityServer.csproj`,将
|
||||
```csharp
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net9.0</TargetFramework>
|
||||
</PropertyGroup>
|
||||
```
|
||||
修改为
|
||||
```csharp
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
</PropertyGroup>
|
||||
```
|
||||
保存,然后依次编译,如果报错,按照提示修改,直到成功。
|
||||
|
||||
|
||||
## VS2019打开6.0及以后版本
|
||||
|
||||
VS2019不支持.net 6.0及以后的版本。如果打开项目需要调整csproj项目文件。调整为
|
||||
```csharp
|
||||
<PropertyGroup>
|
||||
<TargetFrameworks>net5.0</TargetFrameworks>
|
||||
<TargetFrameworks Condition=" '$(MSBuildVersion)' >= '17.0' ">$(TargetFrameworks);net6.0</TargetFrameworks>
|
||||
</PropertyGroup>
|
||||
```
|
||||
当然建议使用最新版visual studio
|
||||
@@ -106,20 +106,3 @@ lower_case_table_names=1
|
||||
执行添加后,把Id返回给前端界面。详情请参考网友博客:[OpenAuth.net入门【5】——解决添加完数据,在未刷新列表时执行删除,数据未被真正删除的问题](https://www.cnblogs.com/wjx-blog/p/15892811.html)
|
||||
|
||||
|
||||
## VS2019打开6.0及以后版本
|
||||
|
||||
OpenAuth.Net 6.0默认使用.Net 6.0 SDK,VS2019不支持。如果打开项目需要调整csproj项目文件。如下:
|
||||
用记事本等工具,打开 `Infrastructure.csproj` `OpenAuth.Repository.csproj` `OpenAuth.App.csproj` `OpenAuth.Mvc.csproj` `OpenAuth.WebApi.csproj` `OpenAuth.IdentityServer.csproj`,将
|
||||
```csharp
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
</PropertyGroup>
|
||||
```
|
||||
调整为
|
||||
```csharp
|
||||
<PropertyGroup>
|
||||
<TargetFrameworks>net5.0</TargetFrameworks>
|
||||
<TargetFrameworks Condition=" '$(MSBuildVersion)' >= '17.0' ">$(TargetFrameworks);net6.0</TargetFrameworks>
|
||||
</PropertyGroup>
|
||||
```
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
|
||||
至少一个通过:会签中任何一个人通过,节点即审批通过。
|
||||
|
||||
具体的会签人员或角色,需要在【会签开始】和【会签结束】之间的连线配置,如上图中的admin、test。
|
||||
具体的会签人员或角色,需要在【会签开始】和【会签结束】之间的节点配置,如上图中的admin、test。
|
||||
|
||||
::: warning 特别注意
|
||||
|
||||
@@ -18,12 +18,44 @@
|
||||
会签不能在分支上加判断条件
|
||||
:::
|
||||
|
||||
## 加签
|
||||
|
||||
有时需要在原有审批流程中**临时**增加一个或多个审批节点,这时就需要用到加签的功能。它通常有以下特性:
|
||||
|
||||
* 临时性:加签是在流程执行过程中临时增加的,并非流程设计时就已经固定的审批节点。
|
||||
|
||||
* 发起主体:加签通常由当前审批人发起,他们认为需要额外的人员进行审核或批准。
|
||||
|
||||
* 新增审批节点:加签会在当前审批节点之后,插入一个或多个新的审批节点,这些节点需要审批通过后,原流程才能继续执行。
|
||||
|
||||
* 不改变流程结构:加签不会改变原有流程的整体逻辑或终点,只是插入临时节点,完成后流程继续按原定路径执行。
|
||||
|
||||
|
||||
#### 与会签的区别:
|
||||
|
||||
* 加签:在已有审批流程上临时添加审批人,原审批人仍有审批权。
|
||||
|
||||
* 会签:多个审批人同时审批,所有会签人均需审批,才能通过节点。
|
||||
|
||||
加签功能常用在遇到不明确的情况时,需要其他人协助处理。
|
||||
|
||||
|
||||

|
||||
|
||||
## 条件分支
|
||||
|
||||
有时需要根据提交数据不同(如报销金额、请假天数等)流程转向不同的审批者。这时需要在连线上面配置分支条件,如下图:
|
||||
|
||||

|
||||
|
||||
|
||||
## 知会
|
||||
|
||||
知会指的是在流程执行过程中,将审批结果通知给指定人员,但这些人员不参与实际审批或决策过程。知会的目的是确保相关人员知晓流程的进展或结果,但他们不会影响流程的走向。如下图:
|
||||
|
||||

|
||||
|
||||
|
||||
# 基本操作
|
||||
|
||||
一个完整的工作流包括流程设计及流程实例处理。分别对应系统中【基础配置/流程设计】及【流程中心】两个板块。具体包含以下几个步骤:
|
||||
|
||||
@@ -1,6 +1,34 @@
|
||||
# 日常提交(针对dev分支)
|
||||
|
||||
* 2024.02.26 fix #I940O7 vue3 前端是否缓存,配置界面未更新
|
||||
* 2024.11.28 升级到.Net 9
|
||||
|
||||
* 2024.11.16 添加dockerfile,为.net 9做准备
|
||||
|
||||
* 2024.10.10 增加知会功能。详情:[知会](http://doc.openauth.net.cn/core/flowinstance.html#%E7%9F%A5%E4%BC%9A);
|
||||
|
||||
* 2024.09.29 新增增加签逻辑。详情:[加签](http://doc.openauth.net.cn/core/flowinstance.html#%E5%8A%A0%E7%AD%BE);
|
||||
|
||||
* 2024.07.20 mvc项目去掉vue,采用原生layui;
|
||||
|
||||
* 2024.07.11 fix #IABKQN;
|
||||
|
||||
* 2024.06.27 删除CodeSmith生成WebApi;
|
||||
|
||||
* 2024.06.20 fix IABKQN 输入框输入收清除其他下拉框或选择框的内容;
|
||||
|
||||
* 2024.06.10 update layui to 2.9.13
|
||||
|
||||
* 2024.05.31 fix #I9STI2 项目菜单新增和保存报错
|
||||
|
||||
* 2024.04.24 fix #I9HQWU 已审核过的用户,后面不需要再次审核;
|
||||
|
||||
* 2024.04.18 fix #I9G05U 流程设计时,选择角色时,没有显示角色名称
|
||||
|
||||
* 2024.04.05 fix #I9E72C 不能获取pgSql数据库结构
|
||||
|
||||
* 2024.03.08 修复Oracle脚本使用驼峰命名异常的问题
|
||||
|
||||
* 2024.02.26 全面调整流程添加逻辑;
|
||||
|
||||
* 2024.02.24 角色分配模块时,可以级联
|
||||
|
||||
@@ -252,23 +280,7 @@
|
||||
|
||||
* 2020.11.03 修复layui icon选择BUG;
|
||||
|
||||
* 2020.10.20 修复代码生成器mysql创建主键字段;
|
||||
|
||||
* 2020.10.13 调整代码生成器生成vue views的路径调整为小写;
|
||||
|
||||
* 2020.09.23 发布企业版代码生成器功能;
|
||||
|
||||
* 2020.09.10 完成所有后端生成实体、生成业务功能、生成API;
|
||||
|
||||
* 2020.08.12 完成代码生成器--自动创建WebApi Controller功能的开发;
|
||||
|
||||
* 2020.08.10 完成代码生成器--自动创建实体功能的开发;
|
||||
|
||||
* 2020.08.06 增加代码生成器创建接口,为在线代码生成器做准备;
|
||||
|
||||
* 2020.08.04 修复企业版字典分类页面样式异常;增加获取数据库结构接口;
|
||||
|
||||
* 2020.08.01 获取实体属性时,按小写判断实体是否存在。修复:[I1PN8N](https://gitee.com/yubaolee/OpenAuth.Core/issues/I1PN8N) [I1PN5O](https://gitee.com/yubaolee/OpenAuth.Core/issues/I1PN5O) [I1PMYX](https://gitee.com/yubaolee/OpenAuth.Core/issues/I1PMYX)
|
||||
* 很久很久以前的需求,麻烦看提交记录了😊😊😊
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# SqlSugar访问数据库
|
||||
|
||||
OpenAuth.Net 6.0及以后版本默认支持使用SqlSugar方式访问数据库。目前`资源管理`模块使用即使用SqlSugar完成。
|
||||
SqlSugar 是一款老牌.NET开源ORM框架,相对于EntityFramework复杂的Linq表达式,它拥有灵活的动态查询,如果你喜欢直接码Sql,那么它是你的不二之选。OpenAuth.Net 6.0及以后版本默认支持使用SqlSugar方式访问数据库。目前大多数模块都已使用SqlSugar的方式,这里以资源管理为例:
|
||||
|
||||
```csharp
|
||||
public class ResourceApp:SqlSugarBaseApp<Resource>
|
||||
|
||||
@@ -4,11 +4,11 @@
|
||||
|
||||
gitee上面两个版本。其中:
|
||||
|
||||
* [OpenAuth.Net](https://gitee.com/dotnetchina/OpenAuth.Net) 默认SDK版本为.Net 6,推荐使用该版本。如果你使用vs2019作为开发工具,请注意查看:[VS2019打开6.0及以后版本](http://doc.openauth.net.cn/core/faq.html#vs2019%E6%89%93%E5%BC%806-0%E5%8F%8A%E4%BB%A5%E5%90%8E%E7%89%88%E6%9C%AC)
|
||||
* [OpenAuth.Net](https://gitee.com/dotnetchina/OpenAuth.Net) 默认SDK版本为.Net 9.0.100,如果需要切换到.Net其他版本请参考:[切换sdk版本](http://doc.openauth.net.cn/core/changesdk.html)
|
||||
|
||||
* [OpenAuth.Core](https://gitee.com/yubaolee/OpenAuth.Core) 的SDK版本为.Net Core 3.1.100,历史原因暂且保留,未来的某天会关闭它
|
||||
* [OpenAuth.Core](https://gitee.com/yubaolee/OpenAuth.Core) 的SDK版本为.Net Core 3.1.100,已停止维护,不推荐使用。
|
||||
|
||||
.Net目前SDK升级特别方便,只需花费3分钟时间既可升级到.Net 6/7/8...等。请参考:[3分钟的时间把.net core 3.1的升级到.NET 5](https://www.cnblogs.com/yubaolee/p/Net3ToNet5.html),所以不要纠结SDK版本问题。
|
||||
.Net目前SDK升级特别方便。请参考:[3分钟的时间把.net core 3.1的升级到.NET 5](https://www.cnblogs.com/yubaolee/p/Net3ToNet5.html),所以不要纠结SDK版本问题。
|
||||
|
||||
::: tip 提示
|
||||
如果你使用的是.Net 4.0/4.5,请点击[这里](https://gitee.com/dotnetchina/OpenAuth.Net/tree/4.0) 下载后端代码,该分支已停止维护。参考文档:[http://doc.openauth.net.cn/net/](http://doc.openauth.net.cn/net/)
|
||||
@@ -89,12 +89,12 @@ OpenAuth.Repository -> OpenAuthDB : 仓储层进行数据库操作
|
||||
|
||||
使用Visual Studio 2022或Rider打开 `OpenAuth.Net.sln`
|
||||
::: tip 提示
|
||||
如果开发使用的电脑安装有多个版本的SDK(如同时有.net core 3.1 和.Net 5/6/7..),可以在根目录新建一个`global.json`文件来指定.net版本,文件内容如下:
|
||||
如果开发使用的电脑安装有多个版本的SDK,可以在根目录新建一个`global.json`文件来指定.net版本,文件内容如下:
|
||||
|
||||
```
|
||||
{
|
||||
"sdk": {
|
||||
"version": "3.1.100"
|
||||
"version": "9.0.100"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
:::
|
||||
|
||||
OpenAuth.Net 4.0分支是基于 **.Net Framework 4.5** 的开源权限工作流快速开发框架(主分支已经更新为.Net 5/6/7..跨平台开发环境)。框架基于Martin Fowler企业级应用开发思想及全新技术组合(Asp.Net MVC、EF、AutoFac、WebAPI、Swagger、Json.Net等),核心模块包括:组织机构、角色用户、权限授权、表单设计、工作流等。它的架构精良易于扩展,是中小企业的首选。
|
||||
OpenAuth.Net 4.0分支是基于 **.Net Framework 4.5** 的开源权限工作流快速开发框架(主分支已经更新为.Net最新跨平台开发环境)。框架基于Martin Fowler企业级应用开发思想及全新技术组合(Asp.Net MVC、EF、AutoFac、WebAPI、Swagger、Json.Net等),核心模块包括:组织机构、角色用户、权限授权、表单设计、工作流等。它的架构精良易于扩展,是中小企业的首选。
|
||||
|
||||
## 特性
|
||||
|
||||
|
||||
@@ -1,12 +1,14 @@
|
||||
OpenAuth.Pro是一套全新的前端界面,基于vue-element-admin,采用VUE全家桶(VUE+VUEX+VUE-ROUTER)单页面SPA开发。它使用开源版OpenAuth.Net的API接口(即:OpenAuth.WebApi)提供数据服务。二者的关系如下:
|
||||
OpenAuth.Pro是一套全新的前端界面,基于vue2 + element-ui /vue3 + element-plus,采用VUE全家桶(VUE+VUEX+VUE-ROUTER)单页面SPA开发。它使用开源版OpenAuth.Net的API接口(即:OpenAuth.WebApi)提供数据服务。二者的关系如下:
|
||||
|
||||

|
||||
|
||||
企业版代码获取方式:[http://www.openauth.net.cn/question/detail.html?id=a2be2d61-7fcb-4df8-8be2-9f296c22a89c](http://www.openauth.net.cn/question/detail.html?id=a2be2d61-7fcb-4df8-8be2-9f296c22a89c)
|
||||
|
||||
企业Vue2版本演示:[http://demo.openauth.net.cn:1803/](http://demo.openauth.net.cn:1803/)
|
||||
Vue2演示地址: [http://demo.openauth.net.cn:1803/](http://demo.openauth.net.cn:1803/)
|
||||
|
||||
企业H5版本演示(请使用浏览器移动模式或直接用手机打开):[http://demo.openauth.net.cn:1804/](http://demo.openauth.net.cn:1804/)
|
||||
Vue3演示地址: [http://demo.openauth.net.cn:1805/](http://demo.openauth.net.cn:1805/)
|
||||
|
||||
移动H5版本演示(请使用浏览器移动模式或直接用手机打开):[http://demo.openauth.net.cn:1804/](http://demo.openauth.net.cn:1804/)
|
||||
|
||||
## OpenAuth.Net系列教学视频
|
||||
|
||||
|
||||
Reference in New Issue
Block a user