Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
C
cocktail-party-server
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
cocktail-party
cocktail-party-server
Commits
d00dc3b0
Unverified
提交
d00dc3b0
authored
2月 12, 2022
作者:
若依
提交者:
Gitee
2月 12, 2022
浏览文件
操作
浏览文件
下载
差异文件
!426 修正单词拼写错误
Merge pull request !426 from 稚屿/master
上级
f5c69bae
c99eb980
隐藏空白字符变更
内嵌
并排
正在显示
22 个修改的文件
包含
1700 行增加
和
1719 行删除
+1700
-1719
DictUtils.java
...ommon/src/main/java/com/ruoyi/common/utils/DictUtils.java
+1
-2
ExceptionUtil.java
...n/src/main/java/com/ruoyi/common/utils/ExceptionUtil.java
+1
-2
ServletUtils.java
...on/src/main/java/com/ruoyi/common/utils/ServletUtils.java
+4
-10
VerifyCodeUtils.java
...src/main/java/com/ruoyi/common/utils/VerifyCodeUtils.java
+4
-8
FileUploadUtils.java
...ain/java/com/ruoyi/common/utils/file/FileUploadUtils.java
+7
-7
ImageUtils.java
...src/main/java/com/ruoyi/common/utils/file/ImageUtils.java
+1
-1
HttpHelper.java
...src/main/java/com/ruoyi/common/utils/http/HttpHelper.java
+2
-1
HttpUtils.java
.../src/main/java/com/ruoyi/common/utils/http/HttpUtils.java
+5
-5
AddressUtils.java
...src/main/java/com/ruoyi/common/utils/ip/AddressUtils.java
+1
-2
ExcelUtil.java
...n/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java
+2
-2
Md5Utils.java
...n/src/main/java/com/ruoyi/common/utils/sign/Md5Utils.java
+2
-1
SqlUtil.java
...mon/src/main/java/com/ruoyi/common/utils/sql/SqlUtil.java
+2
-4
GenUtils.java
...ator/src/main/java/com/ruoyi/generator/util/GenUtils.java
+2
-4
VelocityUtils.java
...src/main/java/com/ruoyi/generator/util/VelocityUtils.java
+1
-2
SysDeptServiceImpl.java
...ava/com/ruoyi/system/service/impl/SysDeptServiceImpl.java
+2
-5
SysMenuServiceImpl.java
...ava/com/ruoyi/system/service/impl/SysMenuServiceImpl.java
+1
-1
drawingDefault.js
ruoyi-ui/src/utils/generator/drawingDefault.js
+29
-29
html.js
ruoyi-ui/src/utils/generator/html.js
+359
-359
js.js
ruoyi-ui/src/utils/generator/js.js
+236
-236
CodeTypeDialog.vue
ruoyi-ui/src/views/tool/build/CodeTypeDialog.vue
+106
-106
TreeNodeDialog.vue
ruoyi-ui/src/views/tool/build/TreeNodeDialog.vue
+149
-149
index.vue
ruoyi-ui/src/views/tool/build/index.vue
+783
-783
没有找到文件。
ruoyi-common/src/main/java/com/ruoyi/common/utils/DictUtils.java
浏览文件 @
d00dc3b0
...
@@ -41,8 +41,7 @@ public class DictUtils
...
@@ -41,8 +41,7 @@ public class DictUtils
Object
cacheObj
=
SpringUtils
.
getBean
(
RedisCache
.
class
).
getCacheObject
(
getCacheKey
(
key
));
Object
cacheObj
=
SpringUtils
.
getBean
(
RedisCache
.
class
).
getCacheObject
(
getCacheKey
(
key
));
if
(
StringUtils
.
isNotNull
(
cacheObj
))
if
(
StringUtils
.
isNotNull
(
cacheObj
))
{
{
List
<
SysDictData
>
dictDatas
=
StringUtils
.
cast
(
cacheObj
);
return
StringUtils
.
cast
(
cacheObj
);
return
dictDatas
;
}
}
return
null
;
return
null
;
}
}
...
...
ruoyi-common/src/main/java/com/ruoyi/common/utils/ExceptionUtil.java
浏览文件 @
d00dc3b0
...
@@ -18,8 +18,7 @@ public class ExceptionUtil
...
@@ -18,8 +18,7 @@ public class ExceptionUtil
{
{
StringWriter
sw
=
new
StringWriter
();
StringWriter
sw
=
new
StringWriter
();
e
.
printStackTrace
(
new
PrintWriter
(
sw
,
true
));
e
.
printStackTrace
(
new
PrintWriter
(
sw
,
true
));
String
str
=
sw
.
toString
();
return
sw
.
toString
();
return
str
;
}
}
public
static
String
getRootErrorMessage
(
Exception
e
)
public
static
String
getRootErrorMessage
(
Exception
e
)
...
...
ruoyi-common/src/main/java/com/ruoyi/common/utils/ServletUtils.java
浏览文件 @
d00dc3b0
...
@@ -99,9 +99,8 @@ public class ServletUtils
...
@@ -99,9 +99,8 @@ public class ServletUtils
*
*
* @param response 渲染对象
* @param response 渲染对象
* @param string 待渲染的字符串
* @param string 待渲染的字符串
* @return null
*/
*/
public
static
String
renderString
(
HttpServletResponse
response
,
String
string
)
public
static
void
renderString
(
HttpServletResponse
response
,
String
string
)
{
{
try
try
{
{
...
@@ -114,7 +113,6 @@ public class ServletUtils
...
@@ -114,7 +113,6 @@ public class ServletUtils
{
{
e
.
printStackTrace
();
e
.
printStackTrace
();
}
}
return
null
;
}
}
/**
/**
...
@@ -125,13 +123,13 @@ public class ServletUtils
...
@@ -125,13 +123,13 @@ public class ServletUtils
public
static
boolean
isAjaxRequest
(
HttpServletRequest
request
)
public
static
boolean
isAjaxRequest
(
HttpServletRequest
request
)
{
{
String
accept
=
request
.
getHeader
(
"accept"
);
String
accept
=
request
.
getHeader
(
"accept"
);
if
(
accept
!=
null
&&
accept
.
indexOf
(
"application/json"
)
!=
-
1
)
if
(
accept
!=
null
&&
accept
.
contains
(
"application/json"
)
)
{
{
return
true
;
return
true
;
}
}
String
xRequestedWith
=
request
.
getHeader
(
"X-Requested-With"
);
String
xRequestedWith
=
request
.
getHeader
(
"X-Requested-With"
);
if
(
xRequestedWith
!=
null
&&
xRequestedWith
.
indexOf
(
"XMLHttpRequest"
)
!=
-
1
)
if
(
xRequestedWith
!=
null
&&
xRequestedWith
.
contains
(
"XMLHttpRequest"
)
)
{
{
return
true
;
return
true
;
}
}
...
@@ -143,10 +141,6 @@ public class ServletUtils
...
@@ -143,10 +141,6 @@ public class ServletUtils
}
}
String
ajax
=
request
.
getParameter
(
"__ajax"
);
String
ajax
=
request
.
getParameter
(
"__ajax"
);
if
(
StringUtils
.
inStringIgnoreCase
(
ajax
,
"json"
,
"xml"
))
return
StringUtils
.
inStringIgnoreCase
(
ajax
,
"json"
,
"xml"
);
{
return
true
;
}
return
false
;
}
}
}
}
ruoyi-common/src/main/java/com/ruoyi/common/utils/VerifyCodeUtils.java
浏览文件 @
d00dc3b0
...
@@ -208,7 +208,6 @@ public class VerifyCodeUtils
...
@@ -208,7 +208,6 @@ public class VerifyCodeUtils
int
period
=
random
.
nextInt
(
40
)
+
10
;
// 50;
int
period
=
random
.
nextInt
(
40
)
+
10
;
// 50;
boolean
borderGap
=
true
;
int
frames
=
20
;
int
frames
=
20
;
int
phase
=
7
;
int
phase
=
7
;
for
(
int
i
=
0
;
i
<
w1
;
i
++)
for
(
int
i
=
0
;
i
<
w1
;
i
++)
...
@@ -216,13 +215,9 @@ public class VerifyCodeUtils
...
@@ -216,13 +215,9 @@ public class VerifyCodeUtils
double
d
=
(
double
)
(
period
>>
1
)
double
d
=
(
double
)
(
period
>>
1
)
*
Math
.
sin
((
double
)
i
/
(
double
)
period
+
(
6.2831853071795862
D
*
(
double
)
phase
)
/
(
double
)
frames
);
*
Math
.
sin
((
double
)
i
/
(
double
)
period
+
(
6.2831853071795862
D
*
(
double
)
phase
)
/
(
double
)
frames
);
g
.
copyArea
(
i
,
0
,
1
,
h1
,
0
,
(
int
)
d
);
g
.
copyArea
(
i
,
0
,
1
,
h1
,
0
,
(
int
)
d
);
if
(
borderGap
)
g
.
setColor
(
color
);
{
g
.
drawLine
(
i
,
(
int
)
d
,
i
,
0
);
g
.
setColor
(
color
);
g
.
drawLine
(
i
,
(
int
)
d
+
h1
,
i
,
h1
);
g
.
drawLine
(
i
,
(
int
)
d
,
i
,
0
);
g
.
drawLine
(
i
,
(
int
)
d
+
h1
,
i
,
h1
);
}
}
}
}
}
}
}
\ No newline at end of file
ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUploadUtils.java
浏览文件 @
d00dc3b0
...
@@ -2,6 +2,8 @@ package com.ruoyi.common.utils.file;
...
@@ -2,6 +2,8 @@ package com.ruoyi.common.utils.file;
import
java.io.File
;
import
java.io.File
;
import
java.io.IOException
;
import
java.io.IOException
;
import
java.util.Objects
;
import
org.apache.commons.io.FilenameUtils
;
import
org.apache.commons.io.FilenameUtils
;
import
org.springframework.web.multipart.MultipartFile
;
import
org.springframework.web.multipart.MultipartFile
;
import
com.ruoyi.common.config.RuoYiConfig
;
import
com.ruoyi.common.config.RuoYiConfig
;
...
@@ -100,7 +102,7 @@ public class FileUploadUtils
...
@@ -100,7 +102,7 @@ public class FileUploadUtils
throws
FileSizeLimitExceededException
,
IOException
,
FileNameLengthLimitExceededException
,
throws
FileSizeLimitExceededException
,
IOException
,
FileNameLengthLimitExceededException
,
InvalidExtensionException
InvalidExtensionException
{
{
int
fileNamelength
=
file
.
getOriginalFilename
(
).
length
();
int
fileNamelength
=
Objects
.
requireNonNull
(
file
.
getOriginalFilename
()
).
length
();
if
(
fileNamelength
>
FileUploadUtils
.
DEFAULT_FILE_NAME_LENGTH
)
if
(
fileNamelength
>
FileUploadUtils
.
DEFAULT_FILE_NAME_LENGTH
)
{
{
throw
new
FileNameLengthLimitExceededException
(
FileUploadUtils
.
DEFAULT_FILE_NAME_LENGTH
);
throw
new
FileNameLengthLimitExceededException
(
FileUploadUtils
.
DEFAULT_FILE_NAME_LENGTH
);
...
@@ -112,8 +114,7 @@ public class FileUploadUtils
...
@@ -112,8 +114,7 @@ public class FileUploadUtils
File
desc
=
getAbsoluteFile
(
baseDir
,
fileName
);
File
desc
=
getAbsoluteFile
(
baseDir
,
fileName
);
file
.
transferTo
(
desc
);
file
.
transferTo
(
desc
);
String
pathFileName
=
getPathFileName
(
baseDir
,
fileName
);
return
getPathFileName
(
baseDir
,
fileName
);
return
pathFileName
;
}
}
/**
/**
...
@@ -145,8 +146,7 @@ public class FileUploadUtils
...
@@ -145,8 +146,7 @@ public class FileUploadUtils
{
{
int
dirLastIndex
=
RuoYiConfig
.
getProfile
().
length
()
+
1
;
int
dirLastIndex
=
RuoYiConfig
.
getProfile
().
length
()
+
1
;
String
currentDir
=
StringUtils
.
substring
(
uploadDir
,
dirLastIndex
);
String
currentDir
=
StringUtils
.
substring
(
uploadDir
,
dirLastIndex
);
String
pathFileName
=
Constants
.
RESOURCE_PREFIX
+
"/"
+
currentDir
+
"/"
+
fileName
;
return
Constants
.
RESOURCE_PREFIX
+
"/"
+
currentDir
+
"/"
+
fileName
;
return
pathFileName
;
}
}
/**
/**
...
@@ -161,7 +161,7 @@ public class FileUploadUtils
...
@@ -161,7 +161,7 @@ public class FileUploadUtils
throws
FileSizeLimitExceededException
,
InvalidExtensionException
throws
FileSizeLimitExceededException
,
InvalidExtensionException
{
{
long
size
=
file
.
getSize
();
long
size
=
file
.
getSize
();
if
(
DEFAULT_MAX_SIZE
!=
-
1
&&
size
>
DEFAULT_MAX_SIZE
)
if
(
size
>
DEFAULT_MAX_SIZE
)
{
{
throw
new
FileSizeLimitExceededException
(
DEFAULT_MAX_SIZE
/
1024
/
1024
);
throw
new
FileSizeLimitExceededException
(
DEFAULT_MAX_SIZE
/
1024
/
1024
);
}
}
...
@@ -228,7 +228,7 @@ public class FileUploadUtils
...
@@ -228,7 +228,7 @@ public class FileUploadUtils
String
extension
=
FilenameUtils
.
getExtension
(
file
.
getOriginalFilename
());
String
extension
=
FilenameUtils
.
getExtension
(
file
.
getOriginalFilename
());
if
(
StringUtils
.
isEmpty
(
extension
))
if
(
StringUtils
.
isEmpty
(
extension
))
{
{
extension
=
MimeTypeUtils
.
getExtension
(
file
.
getContentType
(
));
extension
=
MimeTypeUtils
.
getExtension
(
Objects
.
requireNonNull
(
file
.
getContentType
()
));
}
}
return
extension
;
return
extension
;
}
}
...
...
ruoyi-common/src/main/java/com/ruoyi/common/utils/file/ImageUtils.java
浏览文件 @
d00dc3b0
...
@@ -59,7 +59,7 @@ public class ImageUtils
...
@@ -59,7 +59,7 @@ public class ImageUtils
/**
/**
* 读取文件为字节数据
* 读取文件为字节数据
*
*
* @param
key
地址
* @param
url
地址
* @return 字节数据
* @return 字节数据
*/
*/
public
static
byte
[]
readFile
(
String
url
)
public
static
byte
[]
readFile
(
String
url
)
...
...
ruoyi-common/src/main/java/com/ruoyi/common/utils/http/HttpHelper.java
浏览文件 @
d00dc3b0
...
@@ -5,6 +5,7 @@ import java.io.IOException;
...
@@ -5,6 +5,7 @@ import java.io.IOException;
import
java.io.InputStream
;
import
java.io.InputStream
;
import
java.io.InputStreamReader
;
import
java.io.InputStreamReader
;
import
java.nio.charset.Charset
;
import
java.nio.charset.Charset
;
import
java.nio.charset.StandardCharsets
;
import
javax.servlet.ServletRequest
;
import
javax.servlet.ServletRequest
;
import
org.apache.commons.lang3.exception.ExceptionUtils
;
import
org.apache.commons.lang3.exception.ExceptionUtils
;
import
org.slf4j.Logger
;
import
org.slf4j.Logger
;
...
@@ -25,7 +26,7 @@ public class HttpHelper
...
@@ -25,7 +26,7 @@ public class HttpHelper
BufferedReader
reader
=
null
;
BufferedReader
reader
=
null
;
try
(
InputStream
inputStream
=
request
.
getInputStream
())
try
(
InputStream
inputStream
=
request
.
getInputStream
())
{
{
reader
=
new
BufferedReader
(
new
InputStreamReader
(
inputStream
,
Charset
.
forName
(
"UTF-8"
)
));
reader
=
new
BufferedReader
(
new
InputStreamReader
(
inputStream
,
StandardCharsets
.
UTF_8
));
String
line
=
""
;
String
line
=
""
;
while
((
line
=
reader
.
readLine
())
!=
null
)
while
((
line
=
reader
.
readLine
())
!=
null
)
{
{
...
...
ruoyi-common/src/main/java/com/ruoyi/common/utils/http/HttpUtils.java
浏览文件 @
d00dc3b0
...
@@ -9,6 +9,7 @@ import java.net.ConnectException;
...
@@ -9,6 +9,7 @@ import java.net.ConnectException;
import
java.net.SocketTimeoutException
;
import
java.net.SocketTimeoutException
;
import
java.net.URL
;
import
java.net.URL
;
import
java.net.URLConnection
;
import
java.net.URLConnection
;
import
java.nio.charset.StandardCharsets
;
import
java.security.cert.X509Certificate
;
import
java.security.cert.X509Certificate
;
import
javax.net.ssl.HostnameVerifier
;
import
javax.net.ssl.HostnameVerifier
;
import
javax.net.ssl.HttpsURLConnection
;
import
javax.net.ssl.HttpsURLConnection
;
...
@@ -130,9 +131,8 @@ public class HttpUtils
...
@@ -130,9 +131,8 @@ public class HttpUtils
StringBuilder
result
=
new
StringBuilder
();
StringBuilder
result
=
new
StringBuilder
();
try
try
{
{
String
urlNameString
=
url
;
log
.
info
(
"sendPost - {}"
,
url
);
log
.
info
(
"sendPost - {}"
,
urlNameString
);
URL
realUrl
=
new
URL
(
url
);
URL
realUrl
=
new
URL
(
urlNameString
);
URLConnection
conn
=
realUrl
.
openConnection
();
URLConnection
conn
=
realUrl
.
openConnection
();
conn
.
setRequestProperty
(
"accept"
,
"*/*"
);
conn
.
setRequestProperty
(
"accept"
,
"*/*"
);
conn
.
setRequestProperty
(
"connection"
,
"Keep-Alive"
);
conn
.
setRequestProperty
(
"connection"
,
"Keep-Alive"
);
...
@@ -144,7 +144,7 @@ public class HttpUtils
...
@@ -144,7 +144,7 @@ public class HttpUtils
out
=
new
PrintWriter
(
conn
.
getOutputStream
());
out
=
new
PrintWriter
(
conn
.
getOutputStream
());
out
.
print
(
param
);
out
.
print
(
param
);
out
.
flush
();
out
.
flush
();
in
=
new
BufferedReader
(
new
InputStreamReader
(
conn
.
getInputStream
(),
"utf-8"
));
in
=
new
BufferedReader
(
new
InputStreamReader
(
conn
.
getInputStream
(),
StandardCharsets
.
UTF_8
));
String
line
;
String
line
;
while
((
line
=
in
.
readLine
())
!=
null
)
while
((
line
=
in
.
readLine
())
!=
null
)
{
{
...
@@ -218,7 +218,7 @@ public class HttpUtils
...
@@ -218,7 +218,7 @@ public class HttpUtils
{
{
if
(
ret
!=
null
&&
!
""
.
equals
(
ret
.
trim
()))
if
(
ret
!=
null
&&
!
""
.
equals
(
ret
.
trim
()))
{
{
result
.
append
(
new
String
(
ret
.
getBytes
(
"ISO-8859-1"
),
"utf-8"
));
result
.
append
(
new
String
(
ret
.
getBytes
(
StandardCharsets
.
ISO_8859_1
),
StandardCharsets
.
UTF_8
));
}
}
}
}
log
.
info
(
"recv - {}"
,
result
);
log
.
info
(
"recv - {}"
,
result
);
...
...
ruoyi-common/src/main/java/com/ruoyi/common/utils/ip/AddressUtils.java
浏览文件 @
d00dc3b0
...
@@ -25,7 +25,6 @@ public class AddressUtils
...
@@ -25,7 +25,6 @@ public class AddressUtils
public
static
String
getRealAddressByIP
(
String
ip
)
public
static
String
getRealAddressByIP
(
String
ip
)
{
{
String
address
=
UNKNOWN
;
// 内网不查询
// 内网不查询
if
(
IpUtils
.
internalIp
(
ip
))
if
(
IpUtils
.
internalIp
(
ip
))
{
{
...
@@ -51,6 +50,6 @@ public class AddressUtils
...
@@ -51,6 +50,6 @@ public class AddressUtils
log
.
error
(
"获取地理位置异常 {}"
,
ip
);
log
.
error
(
"获取地理位置异常 {}"
,
ip
);
}
}
}
}
return
address
;
return
UNKNOWN
;
}
}
}
}
ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java
浏览文件 @
d00dc3b0
...
@@ -1121,7 +1121,7 @@ public class ExcelUtil<T>
...
@@ -1121,7 +1121,7 @@ public class ExcelUtil<T>
if
(
StringUtils
.
isNotEmpty
(
excel
.
targetAttr
()))
if
(
StringUtils
.
isNotEmpty
(
excel
.
targetAttr
()))
{
{
String
target
=
excel
.
targetAttr
();
String
target
=
excel
.
targetAttr
();
if
(
target
.
indexOf
(
"."
)
>
-
1
)
if
(
target
.
contains
(
"."
)
)
{
{
String
[]
targets
=
target
.
split
(
"[.]"
);
String
[]
targets
=
target
.
split
(
"[.]"
);
for
(
String
name
:
targets
)
for
(
String
name
:
targets
)
...
@@ -1216,7 +1216,7 @@ public class ExcelUtil<T>
...
@@ -1216,7 +1216,7 @@ public class ExcelUtil<T>
for
(
Object
[]
os
:
this
.
fields
)
for
(
Object
[]
os
:
this
.
fields
)
{
{
Excel
excel
=
(
Excel
)
os
[
1
];
Excel
excel
=
(
Excel
)
os
[
1
];
maxHeight
=
maxHeight
>
excel
.
height
()
?
maxHeight
:
excel
.
height
(
);
maxHeight
=
Math
.
max
(
maxHeight
,
excel
.
height
()
);
}
}
return
(
short
)
(
maxHeight
*
20
);
return
(
short
)
(
maxHeight
*
20
);
}
}
...
...
ruoyi-common/src/main/java/com/ruoyi/common/utils/sign/Md5Utils.java
浏览文件 @
d00dc3b0
package
com
.
ruoyi
.
common
.
utils
.
sign
;
package
com
.
ruoyi
.
common
.
utils
.
sign
;
import
java.nio.charset.StandardCharsets
;
import
java.security.MessageDigest
;
import
java.security.MessageDigest
;
import
org.slf4j.Logger
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.slf4j.LoggerFactory
;
...
@@ -55,7 +56,7 @@ public class Md5Utils
...
@@ -55,7 +56,7 @@ public class Md5Utils
{
{
try
try
{
{
return
new
String
(
toHex
(
md5
(
s
)).
getBytes
(
"UTF-8"
),
"UTF-8"
);
return
new
String
(
toHex
(
md5
(
s
)).
getBytes
(
StandardCharsets
.
UTF_8
),
StandardCharsets
.
UTF_8
);
}
}
catch
(
Exception
e
)
catch
(
Exception
e
)
{
{
...
...
ruoyi-common/src/main/java/com/ruoyi/common/utils/sql/SqlUtil.java
浏览文件 @
d00dc3b0
...
@@ -50,10 +50,8 @@ public class SqlUtil
...
@@ -50,10 +50,8 @@ public class SqlUtil
return
;
return
;
}
}
String
[]
sqlKeywords
=
StringUtils
.
split
(
SQL_REGEX
,
"\\|"
);
String
[]
sqlKeywords
=
StringUtils
.
split
(
SQL_REGEX
,
"\\|"
);
for
(
int
i
=
0
;
i
<
sqlKeywords
.
length
;
i
++)
for
(
String
sqlKeyword
:
sqlKeywords
)
{
{
if
(
StringUtils
.
indexOfIgnoreCase
(
value
,
sqlKeyword
)
>
-
1
)
{
if
(
StringUtils
.
indexOfIgnoreCase
(
value
,
sqlKeywords
[
i
])
>
-
1
)
{
throw
new
UtilException
(
"参数存在SQL注入风险"
);
throw
new
UtilException
(
"参数存在SQL注入风险"
);
}
}
}
}
...
...
ruoyi-generator/src/main/java/com/ruoyi/generator/util/GenUtils.java
浏览文件 @
d00dc3b0
...
@@ -151,8 +151,7 @@ public class GenUtils
...
@@ -151,8 +151,7 @@ public class GenUtils
{
{
int
lastIndex
=
packageName
.
lastIndexOf
(
"."
);
int
lastIndex
=
packageName
.
lastIndexOf
(
"."
);
int
nameLength
=
packageName
.
length
();
int
nameLength
=
packageName
.
length
();
String
moduleName
=
StringUtils
.
substring
(
packageName
,
lastIndex
+
1
,
nameLength
);
return
StringUtils
.
substring
(
packageName
,
lastIndex
+
1
,
nameLength
);
return
moduleName
;
}
}
/**
/**
...
@@ -165,8 +164,7 @@ public class GenUtils
...
@@ -165,8 +164,7 @@ public class GenUtils
{
{
int
lastIndex
=
tableName
.
lastIndexOf
(
"_"
);
int
lastIndex
=
tableName
.
lastIndexOf
(
"_"
);
int
nameLength
=
tableName
.
length
();
int
nameLength
=
tableName
.
length
();
String
businessName
=
StringUtils
.
substring
(
tableName
,
lastIndex
+
1
,
nameLength
);
return
StringUtils
.
substring
(
tableName
,
lastIndex
+
1
,
nameLength
);
return
businessName
;
}
}
/**
/**
...
...
ruoyi-generator/src/main/java/com/ruoyi/generator/util/VelocityUtils.java
浏览文件 @
d00dc3b0
...
@@ -228,8 +228,7 @@ public class VelocityUtils
...
@@ -228,8 +228,7 @@ public class VelocityUtils
public
static
String
getPackagePrefix
(
String
packageName
)
public
static
String
getPackagePrefix
(
String
packageName
)
{
{
int
lastIndex
=
packageName
.
lastIndexOf
(
"."
);
int
lastIndex
=
packageName
.
lastIndexOf
(
"."
);
String
basePackage
=
StringUtils
.
substring
(
packageName
,
0
,
lastIndex
);
return
StringUtils
.
substring
(
packageName
,
0
,
lastIndex
);
return
basePackage
;
}
}
/**
/**
...
...
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java
浏览文件 @
d00dc3b0
...
@@ -63,12 +63,9 @@ public class SysDeptServiceImpl implements ISysDeptService
...
@@ -63,12 +63,9 @@ public class SysDeptServiceImpl implements ISysDeptService
{
{
tempList
.
add
(
dept
.
getDeptId
());
tempList
.
add
(
dept
.
getDeptId
());
}
}
for
(
Iterator
<
SysDept
>
iterator
=
depts
.
iterator
();
iterator
.
hasNext
();)
for
(
SysDept
dept
:
depts
)
{
{
SysDept
dept
=
(
SysDept
)
iterator
.
next
();
// 如果是顶级节点, 遍历该父节点的所有子节点
// 如果是顶级节点, 遍历该父节点的所有子节点
if
(!
tempList
.
contains
(
dept
.
getParentId
()))
if
(!
tempList
.
contains
(
dept
.
getParentId
()))
{
{
recursionFn
(
depts
,
dept
);
recursionFn
(
depts
,
dept
);
returnList
.
add
(
dept
);
returnList
.
add
(
dept
);
}
}
...
...
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java
浏览文件 @
d00dc3b0
...
@@ -498,7 +498,7 @@ public class SysMenuServiceImpl implements ISysMenuService
...
@@ -498,7 +498,7 @@ public class SysMenuServiceImpl implements ISysMenuService
*/
*/
private
boolean
hasChild
(
List
<
SysMenu
>
list
,
SysMenu
t
)
private
boolean
hasChild
(
List
<
SysMenu
>
list
,
SysMenu
t
)
{
{
return
getChildList
(
list
,
t
).
size
()
>
0
?
true
:
false
;
return
getChildList
(
list
,
t
).
size
()
>
0
;
}
}
/**
/**
...
...
ruoyi-ui/src/utils/generator/drawingDefa
lu
t.js
→
ruoyi-ui/src/utils/generator/drawingDefa
ul
t.js
浏览文件 @
d00dc3b0
export
default
[
export
default
[
{
{
layout
:
'colFormItem'
,
layout
:
'colFormItem'
,
tagIcon
:
'input'
,
tagIcon
:
'input'
,
label
:
'手机号'
,
label
:
'手机号'
,
vModel
:
'mobile'
,
vModel
:
'mobile'
,
formId
:
6
,
formId
:
6
,
tag
:
'el-input'
,
tag
:
'el-input'
,
placeholder
:
'请输入手机号'
,
placeholder
:
'请输入手机号'
,
defaultValue
:
''
,
defaultValue
:
''
,
span
:
24
,
span
:
24
,
style
:
{
width
:
'100%'
},
style
:
{
width
:
'100%'
},
clearable
:
true
,
clearable
:
true
,
prepend
:
''
,
prepend
:
''
,
append
:
''
,
append
:
''
,
'prefix-icon'
:
'el-icon-mobile'
,
'prefix-icon'
:
'el-icon-mobile'
,
'suffix-icon'
:
''
,
'suffix-icon'
:
''
,
maxlength
:
11
,
maxlength
:
11
,
'show-word-limit'
:
true
,
'show-word-limit'
:
true
,
readonly
:
false
,
readonly
:
false
,
disabled
:
false
,
disabled
:
false
,
required
:
true
,
required
:
true
,
changeTag
:
true
,
changeTag
:
true
,
regList
:
[{
regList
:
[{
pattern
:
'/^1(3|4|5|7|8|9)
\\
d{9}$/'
,
pattern
:
'/^1(3|4|5|7|8|9)
\\
d{9}$/'
,
message
:
'手机号格式错误'
message
:
'手机号格式错误'
}]
}]
}
}
]
]
ruoyi-ui/src/utils/generator/html.js
浏览文件 @
d00dc3b0
/* eslint-disable max-len */
/* eslint-disable max-len */
import
{
trigger
}
from
'./config'
import
{
trigger
}
from
'./config'
let
confGlobal
let
confGlobal
let
someSpanIsNot24
let
someSpanIsNot24
export
function
dialogWrapper
(
str
)
{
export
function
dialogWrapper
(
str
)
{
return
`<el-dialog v-bind="$attrs" v-on="$listeners" @open="onOpen" @close="onClose" title="Dialog Tit
ile">
return
`<el-dialog v-bind="$attrs" v-on="$listeners" @open="onOpen" @close="onClose" title="Dialog Tit
le">
${
str
}
${
str
}
<div slot="footer">
<div slot="footer">
<el-button @click="close">取消</el-button>
<el-button @click="close">取消</el-button>
<el-button type="primary" @click="hand
elConfirm">确定</el-button>
<el-button type="primary" @click="hand
leConfirm">确定</el-button>
</div>
</div>
</el-dialog>`
</el-dialog>`
}
}
export
function
vueTemplate
(
str
)
{
export
function
vueTemplate
(
str
)
{
return
`<template>
return
`<template>
<div>
<div>
${
str
}
${
str
}
</div>
</div>
</template>`
</template>`
}
}
export
function
vueScript
(
str
)
{
export
function
vueScript
(
str
)
{
return
`<script>
return
`<script>
${
str
}
${
str
}
</script>`
</script>`
}
}
export
function
cssStyle
(
cssStr
)
{
export
function
cssStyle
(
cssStr
)
{
return
`<style>
return
`<style>
${
cssStr
}
${
cssStr
}
</style>`
</style>`
}
}
function
buildFormTemplate
(
conf
,
child
,
type
)
{
function
buildFormTemplate
(
conf
,
child
,
type
)
{
let
labelPosition
=
''
let
labelPosition
=
''
if
(
conf
.
labelPosition
!==
'right'
)
{
if
(
conf
.
labelPosition
!==
'right'
)
{
labelPosition
=
`label-position="
${
conf
.
labelPosition
}
"`
labelPosition
=
`label-position="
${
conf
.
labelPosition
}
"`
}
}
const
disabled
=
conf
.
disabled
?
`:disabled="
${
conf
.
disabled
}
"`
:
''
const
disabled
=
conf
.
disabled
?
`:disabled="
${
conf
.
disabled
}
"`
:
''
let
str
=
`<el-form ref="
${
conf
.
formRef
}
" :model="
${
conf
.
formModel
}
" :rules="
${
conf
.
formRules
}
" size="
${
conf
.
size
}
"
${
disabled
}
label-width="
${
conf
.
labelWidth
}
px"
${
labelPosition
}
>
let
str
=
`<el-form ref="
${
conf
.
formRef
}
" :model="
${
conf
.
formModel
}
" :rules="
${
conf
.
formRules
}
" size="
${
conf
.
size
}
"
${
disabled
}
label-width="
${
conf
.
labelWidth
}
px"
${
labelPosition
}
>
${
child
}
${
child
}
${
buildFromBtns
(
conf
,
type
)}
${
buildFromBtns
(
conf
,
type
)}
</el-form>`
</el-form>`
if
(
someSpanIsNot24
)
{
if
(
someSpanIsNot24
)
{
str
=
`<el-row :gutter="
${
conf
.
gutter
}
">
str
=
`<el-row :gutter="
${
conf
.
gutter
}
">
${
str
}
${
str
}
</el-row>`
</el-row>`
}
}
return
str
return
str
}
}
function
buildFromBtns
(
conf
,
type
)
{
function
buildFromBtns
(
conf
,
type
)
{
let
str
=
''
let
str
=
''
if
(
conf
.
formBtns
&&
type
===
'file'
)
{
if
(
conf
.
formBtns
&&
type
===
'file'
)
{
str
=
`<el-form-item size="large">
str
=
`<el-form-item size="large">
<el-button type="primary" @click="submitForm">提交</el-button>
<el-button type="primary" @click="submitForm">提交</el-button>
<el-button @click="resetForm">重置</el-button>
<el-button @click="resetForm">重置</el-button>
</el-form-item>`
</el-form-item>`
if
(
someSpanIsNot24
)
{
if
(
someSpanIsNot24
)
{
str
=
`<el-col :span="24">
str
=
`<el-col :span="24">
${
str
}
${
str
}
</el-col>`
</el-col>`
}
}
}
}
return
str
return
str
}
}
// span不为24的用el-col包裹
// span不为24的用el-col包裹
function
colWrapper
(
element
,
str
)
{
function
colWrapper
(
element
,
str
)
{
if
(
someSpanIsNot24
||
element
.
span
!==
24
)
{
if
(
someSpanIsNot24
||
element
.
span
!==
24
)
{
return
`<el-col :span="
${
element
.
span
}
">
return
`<el-col :span="
${
element
.
span
}
">
${
str
}
${
str
}
</el-col>`
</el-col>`
}
}
return
str
return
str
}
}
const
layouts
=
{
const
layouts
=
{
colFormItem
(
element
)
{
colFormItem
(
element
)
{
let
labelWidth
=
''
let
labelWidth
=
''
if
(
element
.
labelWidth
&&
element
.
labelWidth
!==
confGlobal
.
labelWidth
)
{
if
(
element
.
labelWidth
&&
element
.
labelWidth
!==
confGlobal
.
labelWidth
)
{
labelWidth
=
`label-width="
${
element
.
labelWidth
}
px"`
labelWidth
=
`label-width="
${
element
.
labelWidth
}
px"`
}
}
const
required
=
!
trigger
[
element
.
tag
]
&&
element
.
required
?
'required'
:
''
const
required
=
!
trigger
[
element
.
tag
]
&&
element
.
required
?
'required'
:
''
const
tagDom
=
tags
[
element
.
tag
]
?
tags
[
element
.
tag
](
element
)
:
null
const
tagDom
=
tags
[
element
.
tag
]
?
tags
[
element
.
tag
](
element
)
:
null
let
str
=
`<el-form-item
${
labelWidth
}
label="
${
element
.
label
}
" prop="
${
element
.
vModel
}
"
${
required
}
>
let
str
=
`<el-form-item
${
labelWidth
}
label="
${
element
.
label
}
" prop="
${
element
.
vModel
}
"
${
required
}
>
${
tagDom
}
${
tagDom
}
</el-form-item>`
</el-form-item>`
str
=
colWrapper
(
element
,
str
)
str
=
colWrapper
(
element
,
str
)
return
str
return
str
},
},
rowFormItem
(
element
)
{
rowFormItem
(
element
)
{
const
type
=
element
.
type
===
'default'
?
''
:
`type="
${
element
.
type
}
"`
const
type
=
element
.
type
===
'default'
?
''
:
`type="
${
element
.
type
}
"`
const
justify
=
element
.
type
===
'default'
?
''
:
`justify="
${
element
.
justify
}
"`
const
justify
=
element
.
type
===
'default'
?
''
:
`justify="
${
element
.
justify
}
"`
const
align
=
element
.
type
===
'default'
?
''
:
`align="
${
element
.
align
}
"`
const
align
=
element
.
type
===
'default'
?
''
:
`align="
${
element
.
align
}
"`
const
gutter
=
element
.
gutter
?
`gutter="
${
element
.
gutter
}
"`
:
''
const
gutter
=
element
.
gutter
?
`gutter="
${
element
.
gutter
}
"`
:
''
const
children
=
element
.
children
.
map
(
el
=>
layouts
[
el
.
layout
](
el
))
const
children
=
element
.
children
.
map
(
el
=>
layouts
[
el
.
layout
](
el
))
let
str
=
`<el-row
${
type
}
${
justify
}
${
align
}
${
gutter
}
>
let
str
=
`<el-row
${
type
}
${
justify
}
${
align
}
${
gutter
}
>
${
children
.
join
(
'
\
n'
)}
${
children
.
join
(
'
\
n'
)}
</el-row>`
</el-row>`
str
=
colWrapper
(
element
,
str
)
str
=
colWrapper
(
element
,
str
)
return
str
return
str
}
}
}
}
const
tags
=
{
const
tags
=
{
'el-button'
:
el
=>
{
'el-button'
:
el
=>
{
const
{
const
{
tag
,
disabled
tag
,
disabled
}
=
attrBuilder
(
el
)
}
=
attrBuilder
(
el
)
const
type
=
el
.
type
?
`type="
${
el
.
type
}
"`
:
''
const
type
=
el
.
type
?
`type="
${
el
.
type
}
"`
:
''
const
icon
=
el
.
icon
?
`icon="
${
el
.
icon
}
"`
:
''
const
icon
=
el
.
icon
?
`icon="
${
el
.
icon
}
"`
:
''
const
size
=
el
.
size
?
`size="
${
el
.
size
}
"`
:
''
const
size
=
el
.
size
?
`size="
${
el
.
size
}
"`
:
''
let
child
=
buildElButtonChild
(
el
)
let
child
=
buildElButtonChild
(
el
)
if
(
child
)
child
=
`\n
${
child
}
\n`
// 换行
if
(
child
)
child
=
`\n
${
child
}
\n`
// 换行
return
`<
${
el
.
tag
}
${
type
}
${
icon
}
${
size
}
${
disabled
}
>
${
child
}
</
${
el
.
tag
}
>`
return
`<
${
el
.
tag
}
${
type
}
${
icon
}
${
size
}
${
disabled
}
>
${
child
}
</
${
el
.
tag
}
>`
},
},
'el-input'
:
el
=>
{
'el-input'
:
el
=>
{
const
{
const
{
disabled
,
vModel
,
clearable
,
placeholder
,
width
disabled
,
vModel
,
clearable
,
placeholder
,
width
}
=
attrBuilder
(
el
)
}
=
attrBuilder
(
el
)
const
maxlength
=
el
.
maxlength
?
`:maxlength="
${
el
.
maxlength
}
"`
:
''
const
maxlength
=
el
.
maxlength
?
`:maxlength="
${
el
.
maxlength
}
"`
:
''
const
showWordLimit
=
el
[
'show-word-limit'
]
?
'show-word-limit'
:
''
const
showWordLimit
=
el
[
'show-word-limit'
]
?
'show-word-limit'
:
''
const
readonly
=
el
.
readonly
?
'readonly'
:
''
const
readonly
=
el
.
readonly
?
'readonly'
:
''
const
prefixIcon
=
el
[
'prefix-icon'
]
?
`prefix-icon='
${
el
[
'prefix-icon'
]}
'`
:
''
const
prefixIcon
=
el
[
'prefix-icon'
]
?
`prefix-icon='
${
el
[
'prefix-icon'
]}
'`
:
''
const
suffixIcon
=
el
[
'suffix-icon'
]
?
`suffix-icon='
${
el
[
'suffix-icon'
]}
'`
:
''
const
suffixIcon
=
el
[
'suffix-icon'
]
?
`suffix-icon='
${
el
[
'suffix-icon'
]}
'`
:
''
const
showPassword
=
el
[
'show-password'
]
?
'show-password'
:
''
const
showPassword
=
el
[
'show-password'
]
?
'show-password'
:
''
const
type
=
el
.
type
?
`type="
${
el
.
type
}
"`
:
''
const
type
=
el
.
type
?
`type="
${
el
.
type
}
"`
:
''
const
autosize
=
el
.
autosize
&&
el
.
autosize
.
minRows
const
autosize
=
el
.
autosize
&&
el
.
autosize
.
minRows
?
`:autosize="{minRows:
${
el
.
autosize
.
minRows
}
, maxRows:
${
el
.
autosize
.
maxRows
}
}"`
?
`:autosize="{minRows:
${
el
.
autosize
.
minRows
}
, maxRows:
${
el
.
autosize
.
maxRows
}
}"`
:
''
:
''
let
child
=
buildElInputChild
(
el
)
let
child
=
buildElInputChild
(
el
)
if
(
child
)
child
=
`\n
${
child
}
\n`
// 换行
if
(
child
)
child
=
`\n
${
child
}
\n`
// 换行
return
`<
${
el
.
tag
}
${
vModel
}
${
type
}
${
placeholder
}
${
maxlength
}
${
showWordLimit
}
${
readonly
}
${
disabled
}
${
clearable
}
${
prefixIcon
}
${
suffixIcon
}
${
showPassword
}
${
autosize
}
${
width
}
>
${
child
}
</
${
el
.
tag
}
>`
return
`<
${
el
.
tag
}
${
vModel
}
${
type
}
${
placeholder
}
${
maxlength
}
${
showWordLimit
}
${
readonly
}
${
disabled
}
${
clearable
}
${
prefixIcon
}
${
suffixIcon
}
${
showPassword
}
${
autosize
}
${
width
}
>
${
child
}
</
${
el
.
tag
}
>`
},
},
'el-input-number'
:
el
=>
{
'el-input-number'
:
el
=>
{
const
{
disabled
,
vModel
,
placeholder
}
=
attrBuilder
(
el
)
const
{
disabled
,
vModel
,
placeholder
}
=
attrBuilder
(
el
)
const
controlsPosition
=
el
[
'controls-position'
]
?
`controls-position=
${
el
[
'controls-position'
]}
`
:
''
const
controlsPosition
=
el
[
'controls-position'
]
?
`controls-position=
${
el
[
'controls-position'
]}
`
:
''
const
min
=
el
.
min
?
`:min='
${
el
.
min
}
'`
:
''
const
min
=
el
.
min
?
`:min='
${
el
.
min
}
'`
:
''
const
max
=
el
.
max
?
`:max='
${
el
.
max
}
'`
:
''
const
max
=
el
.
max
?
`:max='
${
el
.
max
}
'`
:
''
const
step
=
el
.
step
?
`:step='
${
el
.
step
}
'`
:
''
const
step
=
el
.
step
?
`:step='
${
el
.
step
}
'`
:
''
const
stepStrictly
=
el
[
'step-strictly'
]
?
'step-strictly'
:
''
const
stepStrictly
=
el
[
'step-strictly'
]
?
'step-strictly'
:
''
const
precision
=
el
.
precision
?
`:precision='
${
el
.
precision
}
'`
:
''
const
precision
=
el
.
precision
?
`:precision='
${
el
.
precision
}
'`
:
''
return
`<
${
el
.
tag
}
${
vModel
}
${
placeholder
}
${
step
}
${
stepStrictly
}
${
precision
}
${
controlsPosition
}
${
min
}
${
max
}
${
disabled
}
></
${
el
.
tag
}
>`
return
`<
${
el
.
tag
}
${
vModel
}
${
placeholder
}
${
step
}
${
stepStrictly
}
${
precision
}
${
controlsPosition
}
${
min
}
${
max
}
${
disabled
}
></
${
el
.
tag
}
>`
},
},
'el-select'
:
el
=>
{
'el-select'
:
el
=>
{
const
{
const
{
disabled
,
vModel
,
clearable
,
placeholder
,
width
disabled
,
vModel
,
clearable
,
placeholder
,
width
}
=
attrBuilder
(
el
)
}
=
attrBuilder
(
el
)
const
filterable
=
el
.
filterable
?
'filterable'
:
''
const
filterable
=
el
.
filterable
?
'filterable'
:
''
const
multiple
=
el
.
multiple
?
'multiple'
:
''
const
multiple
=
el
.
multiple
?
'multiple'
:
''
let
child
=
buildElSelectChild
(
el
)
let
child
=
buildElSelectChild
(
el
)
if
(
child
)
child
=
`\n
${
child
}
\n`
// 换行
if
(
child
)
child
=
`\n
${
child
}
\n`
// 换行
return
`<
${
el
.
tag
}
${
vModel
}
${
placeholder
}
${
disabled
}
${
multiple
}
${
filterable
}
${
clearable
}
${
width
}
>
${
child
}
</
${
el
.
tag
}
>`
return
`<
${
el
.
tag
}
${
vModel
}
${
placeholder
}
${
disabled
}
${
multiple
}
${
filterable
}
${
clearable
}
${
width
}
>
${
child
}
</
${
el
.
tag
}
>`
},
},
'el-radio-group'
:
el
=>
{
'el-radio-group'
:
el
=>
{
const
{
disabled
,
vModel
}
=
attrBuilder
(
el
)
const
{
disabled
,
vModel
}
=
attrBuilder
(
el
)
const
size
=
`size="
${
el
.
size
}
"`
const
size
=
`size="
${
el
.
size
}
"`
let
child
=
buildElRadioGroupChild
(
el
)
let
child
=
buildElRadioGroupChild
(
el
)
if
(
child
)
child
=
`\n
${
child
}
\n`
// 换行
if
(
child
)
child
=
`\n
${
child
}
\n`
// 换行
return
`<
${
el
.
tag
}
${
vModel
}
${
size
}
${
disabled
}
>
${
child
}
</
${
el
.
tag
}
>`
return
`<
${
el
.
tag
}
${
vModel
}
${
size
}
${
disabled
}
>
${
child
}
</
${
el
.
tag
}
>`
},
},
'el-checkbox-group'
:
el
=>
{
'el-checkbox-group'
:
el
=>
{
const
{
disabled
,
vModel
}
=
attrBuilder
(
el
)
const
{
disabled
,
vModel
}
=
attrBuilder
(
el
)
const
size
=
`size="
${
el
.
size
}
"`
const
size
=
`size="
${
el
.
size
}
"`
const
min
=
el
.
min
?
`:min="
${
el
.
min
}
"`
:
''
const
min
=
el
.
min
?
`:min="
${
el
.
min
}
"`
:
''
const
max
=
el
.
max
?
`:max="
${
el
.
max
}
"`
:
''
const
max
=
el
.
max
?
`:max="
${
el
.
max
}
"`
:
''
let
child
=
buildElCheckboxGroupChild
(
el
)
let
child
=
buildElCheckboxGroupChild
(
el
)
if
(
child
)
child
=
`\n
${
child
}
\n`
// 换行
if
(
child
)
child
=
`\n
${
child
}
\n`
// 换行
return
`<
${
el
.
tag
}
${
vModel
}
${
min
}
${
max
}
${
size
}
${
disabled
}
>
${
child
}
</
${
el
.
tag
}
>`
return
`<
${
el
.
tag
}
${
vModel
}
${
min
}
${
max
}
${
size
}
${
disabled
}
>
${
child
}
</
${
el
.
tag
}
>`
},
},
'el-switch'
:
el
=>
{
'el-switch'
:
el
=>
{
const
{
disabled
,
vModel
}
=
attrBuilder
(
el
)
const
{
disabled
,
vModel
}
=
attrBuilder
(
el
)
const
activeText
=
el
[
'active-text'
]
?
`active-text="
${
el
[
'active-text'
]}
"`
:
''
const
activeText
=
el
[
'active-text'
]
?
`active-text="
${
el
[
'active-text'
]}
"`
:
''
const
inactiveText
=
el
[
'inactive-text'
]
?
`inactive-text="
${
el
[
'inactive-text'
]}
"`
:
''
const
inactiveText
=
el
[
'inactive-text'
]
?
`inactive-text="
${
el
[
'inactive-text'
]}
"`
:
''
const
activeColor
=
el
[
'active-color'
]
?
`active-color="
${
el
[
'active-color'
]}
"`
:
''
const
activeColor
=
el
[
'active-color'
]
?
`active-color="
${
el
[
'active-color'
]}
"`
:
''
const
inactiveColor
=
el
[
'inactive-color'
]
?
`inactive-color="
${
el
[
'inactive-color'
]}
"`
:
''
const
inactiveColor
=
el
[
'inactive-color'
]
?
`inactive-color="
${
el
[
'inactive-color'
]}
"`
:
''
const
activeValue
=
el
[
'active-value'
]
!==
true
?
`:active-value='
${
JSON
.
stringify
(
el
[
'active-value'
])}
'`
:
''
const
activeValue
=
el
[
'active-value'
]
!==
true
?
`:active-value='
${
JSON
.
stringify
(
el
[
'active-value'
])}
'`
:
''
const
inactiveValue
=
el
[
'inactive-value'
]
!==
false
?
`:inactive-value='
${
JSON
.
stringify
(
el
[
'inactive-value'
])}
'`
:
''
const
inactiveValue
=
el
[
'inactive-value'
]
!==
false
?
`:inactive-value='
${
JSON
.
stringify
(
el
[
'inactive-value'
])}
'`
:
''
return
`<
${
el
.
tag
}
${
vModel
}
${
activeText
}
${
inactiveText
}
${
activeColor
}
${
inactiveColor
}
${
activeValue
}
${
inactiveValue
}
${
disabled
}
></
${
el
.
tag
}
>`
return
`<
${
el
.
tag
}
${
vModel
}
${
activeText
}
${
inactiveText
}
${
activeColor
}
${
inactiveColor
}
${
activeValue
}
${
inactiveValue
}
${
disabled
}
></
${
el
.
tag
}
>`
},
},
'el-cascader'
:
el
=>
{
'el-cascader'
:
el
=>
{
const
{
const
{
disabled
,
vModel
,
clearable
,
placeholder
,
width
disabled
,
vModel
,
clearable
,
placeholder
,
width
}
=
attrBuilder
(
el
)
}
=
attrBuilder
(
el
)
const
options
=
el
.
options
?
`:options="
${
el
.
vModel
}
Options"`
:
''
const
options
=
el
.
options
?
`:options="
${
el
.
vModel
}
Options"`
:
''
const
props
=
el
.
props
?
`:props="
${
el
.
vModel
}
Props"`
:
''
const
props
=
el
.
props
?
`:props="
${
el
.
vModel
}
Props"`
:
''
const
showAllLevels
=
el
[
'show-all-levels'
]
?
''
:
':show-all-levels="false"'
const
showAllLevels
=
el
[
'show-all-levels'
]
?
''
:
':show-all-levels="false"'
const
filterable
=
el
.
filterable
?
'filterable'
:
''
const
filterable
=
el
.
filterable
?
'filterable'
:
''
const
separator
=
el
.
separator
===
'/'
?
''
:
`separator="
${
el
.
separator
}
"`
const
separator
=
el
.
separator
===
'/'
?
''
:
`separator="
${
el
.
separator
}
"`
return
`<
${
el
.
tag
}
${
vModel
}
${
options
}
${
props
}
${
width
}
${
showAllLevels
}
${
placeholder
}
${
separator
}
${
filterable
}
${
clearable
}
${
disabled
}
></
${
el
.
tag
}
>`
return
`<
${
el
.
tag
}
${
vModel
}
${
options
}
${
props
}
${
width
}
${
showAllLevels
}
${
placeholder
}
${
separator
}
${
filterable
}
${
clearable
}
${
disabled
}
></
${
el
.
tag
}
>`
},
},
'el-slider'
:
el
=>
{
'el-slider'
:
el
=>
{
const
{
disabled
,
vModel
}
=
attrBuilder
(
el
)
const
{
disabled
,
vModel
}
=
attrBuilder
(
el
)
const
min
=
el
.
min
?
`:min='
${
el
.
min
}
'`
:
''
const
min
=
el
.
min
?
`:min='
${
el
.
min
}
'`
:
''
const
max
=
el
.
max
?
`:max='
${
el
.
max
}
'`
:
''
const
max
=
el
.
max
?
`:max='
${
el
.
max
}
'`
:
''
const
step
=
el
.
step
?
`:step='
${
el
.
step
}
'`
:
''
const
step
=
el
.
step
?
`:step='
${
el
.
step
}
'`
:
''
const
range
=
el
.
range
?
'range'
:
''
const
range
=
el
.
range
?
'range'
:
''
const
showStops
=
el
[
'show-stops'
]
?
`:show-stops="
${
el
[
'show-stops'
]}
"`
:
''
const
showStops
=
el
[
'show-stops'
]
?
`:show-stops="
${
el
[
'show-stops'
]}
"`
:
''
return
`<
${
el
.
tag
}
${
min
}
${
max
}
${
step
}
${
vModel
}
${
range
}
${
showStops
}
${
disabled
}
></
${
el
.
tag
}
>`
return
`<
${
el
.
tag
}
${
min
}
${
max
}
${
step
}
${
vModel
}
${
range
}
${
showStops
}
${
disabled
}
></
${
el
.
tag
}
>`
},
},
'el-time-picker'
:
el
=>
{
'el-time-picker'
:
el
=>
{
const
{
const
{
disabled
,
vModel
,
clearable
,
placeholder
,
width
disabled
,
vModel
,
clearable
,
placeholder
,
width
}
=
attrBuilder
(
el
)
}
=
attrBuilder
(
el
)
const
startPlaceholder
=
el
[
'start-placeholder'
]
?
`start-placeholder="
${
el
[
'start-placeholder'
]}
"`
:
''
const
startPlaceholder
=
el
[
'start-placeholder'
]
?
`start-placeholder="
${
el
[
'start-placeholder'
]}
"`
:
''
const
endPlaceholder
=
el
[
'end-placeholder'
]
?
`end-placeholder="
${
el
[
'end-placeholder'
]}
"`
:
''
const
endPlaceholder
=
el
[
'end-placeholder'
]
?
`end-placeholder="
${
el
[
'end-placeholder'
]}
"`
:
''
const
rangeSeparator
=
el
[
'range-separator'
]
?
`range-separator="
${
el
[
'range-separator'
]}
"`
:
''
const
rangeSeparator
=
el
[
'range-separator'
]
?
`range-separator="
${
el
[
'range-separator'
]}
"`
:
''
const
isRange
=
el
[
'is-range'
]
?
'is-range'
:
''
const
isRange
=
el
[
'is-range'
]
?
'is-range'
:
''
const
format
=
el
.
format
?
`format="
${
el
.
format
}
"`
:
''
const
format
=
el
.
format
?
`format="
${
el
.
format
}
"`
:
''
const
valueFormat
=
el
[
'value-format'
]
?
`value-format="
${
el
[
'value-format'
]}
"`
:
''
const
valueFormat
=
el
[
'value-format'
]
?
`value-format="
${
el
[
'value-format'
]}
"`
:
''
const
pickerOptions
=
el
[
'picker-options'
]
?
`:picker-options='
${
JSON
.
stringify
(
el
[
'picker-options'
])}
'`
:
''
const
pickerOptions
=
el
[
'picker-options'
]
?
`:picker-options='
${
JSON
.
stringify
(
el
[
'picker-options'
])}
'`
:
''
return
`<
${
el
.
tag
}
${
vModel
}
${
isRange
}
${
format
}
${
valueFormat
}
${
pickerOptions
}
${
width
}
${
placeholder
}
${
startPlaceholder
}
${
endPlaceholder
}
${
rangeSeparator
}
${
clearable
}
${
disabled
}
></
${
el
.
tag
}
>`
return
`<
${
el
.
tag
}
${
vModel
}
${
isRange
}
${
format
}
${
valueFormat
}
${
pickerOptions
}
${
width
}
${
placeholder
}
${
startPlaceholder
}
${
endPlaceholder
}
${
rangeSeparator
}
${
clearable
}
${
disabled
}
></
${
el
.
tag
}
>`
},
},
'el-date-picker'
:
el
=>
{
'el-date-picker'
:
el
=>
{
const
{
const
{
disabled
,
vModel
,
clearable
,
placeholder
,
width
disabled
,
vModel
,
clearable
,
placeholder
,
width
}
=
attrBuilder
(
el
)
}
=
attrBuilder
(
el
)
const
startPlaceholder
=
el
[
'start-placeholder'
]
?
`start-placeholder="
${
el
[
'start-placeholder'
]}
"`
:
''
const
startPlaceholder
=
el
[
'start-placeholder'
]
?
`start-placeholder="
${
el
[
'start-placeholder'
]}
"`
:
''
const
endPlaceholder
=
el
[
'end-placeholder'
]
?
`end-placeholder="
${
el
[
'end-placeholder'
]}
"`
:
''
const
endPlaceholder
=
el
[
'end-placeholder'
]
?
`end-placeholder="
${
el
[
'end-placeholder'
]}
"`
:
''
const
rangeSeparator
=
el
[
'range-separator'
]
?
`range-separator="
${
el
[
'range-separator'
]}
"`
:
''
const
rangeSeparator
=
el
[
'range-separator'
]
?
`range-separator="
${
el
[
'range-separator'
]}
"`
:
''
const
format
=
el
.
format
?
`format="
${
el
.
format
}
"`
:
''
const
format
=
el
.
format
?
`format="
${
el
.
format
}
"`
:
''
const
valueFormat
=
el
[
'value-format'
]
?
`value-format="
${
el
[
'value-format'
]}
"`
:
''
const
valueFormat
=
el
[
'value-format'
]
?
`value-format="
${
el
[
'value-format'
]}
"`
:
''
const
type
=
el
.
type
===
'date'
?
''
:
`type="
${
el
.
type
}
"`
const
type
=
el
.
type
===
'date'
?
''
:
`type="
${
el
.
type
}
"`
const
readonly
=
el
.
readonly
?
'readonly'
:
''
const
readonly
=
el
.
readonly
?
'readonly'
:
''
return
`<
${
el
.
tag
}
${
type
}
${
vModel
}
${
format
}
${
valueFormat
}
${
width
}
${
placeholder
}
${
startPlaceholder
}
${
endPlaceholder
}
${
rangeSeparator
}
${
clearable
}
${
readonly
}
${
disabled
}
></
${
el
.
tag
}
>`
return
`<
${
el
.
tag
}
${
type
}
${
vModel
}
${
format
}
${
valueFormat
}
${
width
}
${
placeholder
}
${
startPlaceholder
}
${
endPlaceholder
}
${
rangeSeparator
}
${
clearable
}
${
readonly
}
${
disabled
}
></
${
el
.
tag
}
>`
},
},
'el-rate'
:
el
=>
{
'el-rate'
:
el
=>
{
const
{
disabled
,
vModel
}
=
attrBuilder
(
el
)
const
{
disabled
,
vModel
}
=
attrBuilder
(
el
)
const
max
=
el
.
max
?
`:max='
${
el
.
max
}
'`
:
''
const
max
=
el
.
max
?
`:max='
${
el
.
max
}
'`
:
''
const
allowHalf
=
el
[
'allow-half'
]
?
'allow-half'
:
''
const
allowHalf
=
el
[
'allow-half'
]
?
'allow-half'
:
''
const
showText
=
el
[
'show-text'
]
?
'show-text'
:
''
const
showText
=
el
[
'show-text'
]
?
'show-text'
:
''
const
showScore
=
el
[
'show-score'
]
?
'show-score'
:
''
const
showScore
=
el
[
'show-score'
]
?
'show-score'
:
''
return
`<
${
el
.
tag
}
${
vModel
}
${
allowHalf
}
${
showText
}
${
showScore
}
${
disabled
}
></
${
el
.
tag
}
>`
return
`<
${
el
.
tag
}
${
vModel
}
${
allowHalf
}
${
showText
}
${
showScore
}
${
disabled
}
></
${
el
.
tag
}
>`
},
},
'el-color-picker'
:
el
=>
{
'el-color-picker'
:
el
=>
{
const
{
disabled
,
vModel
}
=
attrBuilder
(
el
)
const
{
disabled
,
vModel
}
=
attrBuilder
(
el
)
const
size
=
`size="
${
el
.
size
}
"`
const
size
=
`size="
${
el
.
size
}
"`
const
showAlpha
=
el
[
'show-alpha'
]
?
'show-alpha'
:
''
const
showAlpha
=
el
[
'show-alpha'
]
?
'show-alpha'
:
''
const
colorFormat
=
el
[
'color-format'
]
?
`color-format="
${
el
[
'color-format'
]}
"`
:
''
const
colorFormat
=
el
[
'color-format'
]
?
`color-format="
${
el
[
'color-format'
]}
"`
:
''
return
`<
${
el
.
tag
}
${
vModel
}
${
size
}
${
showAlpha
}
${
colorFormat
}
${
disabled
}
></
${
el
.
tag
}
>`
return
`<
${
el
.
tag
}
${
vModel
}
${
size
}
${
showAlpha
}
${
colorFormat
}
${
disabled
}
></
${
el
.
tag
}
>`
},
},
'el-upload'
:
el
=>
{
'el-upload'
:
el
=>
{
const
disabled
=
el
.
disabled
?
':disabled=
\'
true
\'
'
:
''
const
disabled
=
el
.
disabled
?
':disabled=
\'
true
\'
'
:
''
const
action
=
el
.
action
?
`:action="
${
el
.
vModel
}
Action"`
:
''
const
action
=
el
.
action
?
`:action="
${
el
.
vModel
}
Action"`
:
''
const
multiple
=
el
.
multiple
?
'multiple'
:
''
const
multiple
=
el
.
multiple
?
'multiple'
:
''
const
listType
=
el
[
'list-type'
]
!==
'text'
?
`list-type="
${
el
[
'list-type'
]}
"`
:
''
const
listType
=
el
[
'list-type'
]
!==
'text'
?
`list-type="
${
el
[
'list-type'
]}
"`
:
''
const
accept
=
el
.
accept
?
`accept="
${
el
.
accept
}
"`
:
''
const
accept
=
el
.
accept
?
`accept="
${
el
.
accept
}
"`
:
''
const
name
=
el
.
name
!==
'file'
?
`name="
${
el
.
name
}
"`
:
''
const
name
=
el
.
name
!==
'file'
?
`name="
${
el
.
name
}
"`
:
''
const
autoUpload
=
el
[
'auto-upload'
]
===
false
?
':auto-upload="false"'
:
''
const
autoUpload
=
el
[
'auto-upload'
]
===
false
?
':auto-upload="false"'
:
''
const
beforeUpload
=
`:before-upload="
${
el
.
vModel
}
BeforeUpload"`
const
beforeUpload
=
`:before-upload="
${
el
.
vModel
}
BeforeUpload"`
const
fileList
=
`:file-list="
${
el
.
vModel
}
fileList"`
const
fileList
=
`:file-list="
${
el
.
vModel
}
fileList"`
const
ref
=
`ref="
${
el
.
vModel
}
"`
const
ref
=
`ref="
${
el
.
vModel
}
"`
let
child
=
buildElUploadChild
(
el
)
let
child
=
buildElUploadChild
(
el
)
if
(
child
)
child
=
`\n
${
child
}
\n`
// 换行
if
(
child
)
child
=
`\n
${
child
}
\n`
// 换行
return
`<
${
el
.
tag
}
${
ref
}
${
fileList
}
${
action
}
${
autoUpload
}
${
multiple
}
${
beforeUpload
}
${
listType
}
${
accept
}
${
name
}
${
disabled
}
>
${
child
}
</
${
el
.
tag
}
>`
return
`<
${
el
.
tag
}
${
ref
}
${
fileList
}
${
action
}
${
autoUpload
}
${
multiple
}
${
beforeUpload
}
${
listType
}
${
accept
}
${
name
}
${
disabled
}
>
${
child
}
</
${
el
.
tag
}
>`
}
}
}
}
function
attrBuilder
(
el
)
{
function
attrBuilder
(
el
)
{
return
{
return
{
vModel
:
`v-model="
${
confGlobal
.
formModel
}
.
${
el
.
vModel
}
"`
,
vModel
:
`v-model="
${
confGlobal
.
formModel
}
.
${
el
.
vModel
}
"`
,
clearable
:
el
.
clearable
?
'clearable'
:
''
,
clearable
:
el
.
clearable
?
'clearable'
:
''
,
placeholder
:
el
.
placeholder
?
`placeholder="
${
el
.
placeholder
}
"`
:
''
,
placeholder
:
el
.
placeholder
?
`placeholder="
${
el
.
placeholder
}
"`
:
''
,
width
:
el
.
style
&&
el
.
style
.
width
?
':style="{width:
\'
100%
\'
}"'
:
''
,
width
:
el
.
style
&&
el
.
style
.
width
?
':style="{width:
\'
100%
\'
}"'
:
''
,
disabled
:
el
.
disabled
?
':disabled=
\'
true
\'
'
:
''
disabled
:
el
.
disabled
?
':disabled=
\'
true
\'
'
:
''
}
}
}
}
// el-buttin 子级
// el-buttin 子级
function
buildElButtonChild
(
conf
)
{
function
buildElButtonChild
(
conf
)
{
const
children
=
[]
const
children
=
[]
if
(
conf
.
default
)
{
if
(
conf
.
default
)
{
children
.
push
(
conf
.
default
)
children
.
push
(
conf
.
default
)
}
}
return
children
.
join
(
'
\
n'
)
return
children
.
join
(
'
\
n'
)
}
}
// el-input innerHTML
// el-input innerHTML
function
buildElInputChild
(
conf
)
{
function
buildElInputChild
(
conf
)
{
const
children
=
[]
const
children
=
[]
if
(
conf
.
prepend
)
{
if
(
conf
.
prepend
)
{
children
.
push
(
`<template slot="prepend">
${
conf
.
prepend
}
</template>`
)
children
.
push
(
`<template slot="prepend">
${
conf
.
prepend
}
</template>`
)
}
}
if
(
conf
.
append
)
{
if
(
conf
.
append
)
{
children
.
push
(
`<template slot="append">
${
conf
.
append
}
</template>`
)
children
.
push
(
`<template slot="append">
${
conf
.
append
}
</template>`
)
}
}
return
children
.
join
(
'
\
n'
)
return
children
.
join
(
'
\
n'
)
}
}
function
buildElSelectChild
(
conf
)
{
function
buildElSelectChild
(
conf
)
{
const
children
=
[]
const
children
=
[]
if
(
conf
.
options
&&
conf
.
options
.
length
)
{
if
(
conf
.
options
&&
conf
.
options
.
length
)
{
children
.
push
(
`<el-option v-for="(item, index) in
${
conf
.
vModel
}
Options" :key="index" :label="item.label" :value="item.value" :disabled="item.disabled"></el-option>`
)
children
.
push
(
`<el-option v-for="(item, index) in
${
conf
.
vModel
}
Options" :key="index" :label="item.label" :value="item.value" :disabled="item.disabled"></el-option>`
)
}
}
return
children
.
join
(
'
\
n'
)
return
children
.
join
(
'
\
n'
)
}
}
function
buildElRadioGroupChild
(
conf
)
{
function
buildElRadioGroupChild
(
conf
)
{
const
children
=
[]
const
children
=
[]
if
(
conf
.
options
&&
conf
.
options
.
length
)
{
if
(
conf
.
options
&&
conf
.
options
.
length
)
{
const
tag
=
conf
.
optionType
===
'button'
?
'el-radio-button'
:
'el-radio'
const
tag
=
conf
.
optionType
===
'button'
?
'el-radio-button'
:
'el-radio'
const
border
=
conf
.
border
?
'border'
:
''
const
border
=
conf
.
border
?
'border'
:
''
children
.
push
(
`<
${
tag
}
v-for="(item, index) in
${
conf
.
vModel
}
Options" :key="index" :label="item.value" :disabled="item.disabled"
${
border
}
>{{item.label}}</
${
tag
}
>`
)
children
.
push
(
`<
${
tag
}
v-for="(item, index) in
${
conf
.
vModel
}
Options" :key="index" :label="item.value" :disabled="item.disabled"
${
border
}
>{{item.label}}</
${
tag
}
>`
)
}
}
return
children
.
join
(
'
\
n'
)
return
children
.
join
(
'
\
n'
)
}
}
function
buildElCheckboxGroupChild
(
conf
)
{
function
buildElCheckboxGroupChild
(
conf
)
{
const
children
=
[]
const
children
=
[]
if
(
conf
.
options
&&
conf
.
options
.
length
)
{
if
(
conf
.
options
&&
conf
.
options
.
length
)
{
const
tag
=
conf
.
optionType
===
'button'
?
'el-checkbox-button'
:
'el-checkbox'
const
tag
=
conf
.
optionType
===
'button'
?
'el-checkbox-button'
:
'el-checkbox'
const
border
=
conf
.
border
?
'border'
:
''
const
border
=
conf
.
border
?
'border'
:
''
children
.
push
(
`<
${
tag
}
v-for="(item, index) in
${
conf
.
vModel
}
Options" :key="index" :label="item.value" :disabled="item.disabled"
${
border
}
>{{item.label}}</
${
tag
}
>`
)
children
.
push
(
`<
${
tag
}
v-for="(item, index) in
${
conf
.
vModel
}
Options" :key="index" :label="item.value" :disabled="item.disabled"
${
border
}
>{{item.label}}</
${
tag
}
>`
)
}
}
return
children
.
join
(
'
\
n'
)
return
children
.
join
(
'
\
n'
)
}
}
function
buildElUploadChild
(
conf
)
{
function
buildElUploadChild
(
conf
)
{
const
list
=
[]
const
list
=
[]
if
(
conf
[
'list-type'
]
===
'picture-card'
)
list
.
push
(
'<i class="el-icon-plus"></i>'
)
if
(
conf
[
'list-type'
]
===
'picture-card'
)
list
.
push
(
'<i class="el-icon-plus"></i>'
)
else
list
.
push
(
`<el-button size="small" type="primary" icon="el-icon-upload">
${
conf
.
buttonText
}
</el-button>`
)
else
list
.
push
(
`<el-button size="small" type="primary" icon="el-icon-upload">
${
conf
.
buttonText
}
</el-button>`
)
if
(
conf
.
showTip
)
list
.
push
(
`<div slot="tip" class="el-upload__tip">只能上传不超过
${
conf
.
fileSize
}${
conf
.
sizeUnit
}
的
${
conf
.
accept
}
文件</div>`
)
if
(
conf
.
showTip
)
list
.
push
(
`<div slot="tip" class="el-upload__tip">只能上传不超过
${
conf
.
fileSize
}${
conf
.
sizeUnit
}
的
${
conf
.
accept
}
文件</div>`
)
return
list
.
join
(
'
\
n'
)
return
list
.
join
(
'
\
n'
)
}
}
export
function
makeUpHtml
(
conf
,
type
)
{
export
function
makeUpHtml
(
conf
,
type
)
{
const
htmlList
=
[]
const
htmlList
=
[]
confGlobal
=
conf
confGlobal
=
conf
someSpanIsNot24
=
conf
.
fields
.
some
(
item
=>
item
.
span
!==
24
)
someSpanIsNot24
=
conf
.
fields
.
some
(
item
=>
item
.
span
!==
24
)
conf
.
fields
.
forEach
(
el
=>
{
conf
.
fields
.
forEach
(
el
=>
{
htmlList
.
push
(
layouts
[
el
.
layout
](
el
))
htmlList
.
push
(
layouts
[
el
.
layout
](
el
))
})
})
const
htmlStr
=
htmlList
.
join
(
'
\
n'
)
const
htmlStr
=
htmlList
.
join
(
'
\
n'
)
let
temp
=
buildFormTemplate
(
conf
,
htmlStr
,
type
)
let
temp
=
buildFormTemplate
(
conf
,
htmlStr
,
type
)
if
(
type
===
'dialog'
)
{
if
(
type
===
'dialog'
)
{
temp
=
dialogWrapper
(
temp
)
temp
=
dialogWrapper
(
temp
)
}
}
confGlobal
=
null
confGlobal
=
null
return
temp
return
temp
}
}
ruoyi-ui/src/utils/generator/js.js
浏览文件 @
d00dc3b0
import
{
isArray
}
from
'util'
import
{
isArray
}
from
'util'
import
{
exportDefault
,
titleCase
}
from
'@/utils/index'
import
{
exportDefault
,
titleCase
}
from
'@/utils/index'
import
{
trigger
}
from
'./config'
import
{
trigger
}
from
'./config'
const
units
=
{
const
units
=
{
KB
:
'1024'
,
KB
:
'1024'
,
MB
:
'1024 / 1024'
,
MB
:
'1024 / 1024'
,
GB
:
'1024 / 1024 / 1024'
GB
:
'1024 / 1024 / 1024'
}
}
let
confGlobal
let
confGlobal
const
inheritAttrs
=
{
const
inheritAttrs
=
{
file
:
''
,
file
:
''
,
dialog
:
'inheritAttrs: false,'
dialog
:
'inheritAttrs: false,'
}
}
export
function
makeUpJs
(
conf
,
type
)
{
export
function
makeUpJs
(
conf
,
type
)
{
confGlobal
=
conf
=
JSON
.
parse
(
JSON
.
stringify
(
conf
))
confGlobal
=
conf
=
JSON
.
parse
(
JSON
.
stringify
(
conf
))
const
dataList
=
[]
const
dataList
=
[]
const
ruleList
=
[]
const
ruleList
=
[]
const
optionsList
=
[]
const
optionsList
=
[]
const
propsList
=
[]
const
propsList
=
[]
const
methodList
=
mixinMethod
(
type
)
const
methodList
=
mixinMethod
(
type
)
const
uploadVarList
=
[]
const
uploadVarList
=
[]
conf
.
fields
.
forEach
(
el
=>
{
conf
.
fields
.
forEach
(
el
=>
{
buildAttributes
(
el
,
dataList
,
ruleList
,
optionsList
,
methodList
,
propsList
,
uploadVarList
)
buildAttributes
(
el
,
dataList
,
ruleList
,
optionsList
,
methodList
,
propsList
,
uploadVarList
)
})
})
const
script
=
buildexport
(
const
script
=
buildexport
(
conf
,
conf
,
type
,
type
,
dataList
.
join
(
'
\
n'
),
dataList
.
join
(
'
\
n'
),
ruleList
.
join
(
'
\
n'
),
ruleList
.
join
(
'
\
n'
),
optionsList
.
join
(
'
\
n'
),
optionsList
.
join
(
'
\
n'
),
uploadVarList
.
join
(
'
\
n'
),
uploadVarList
.
join
(
'
\
n'
),
propsList
.
join
(
'
\
n'
),
propsList
.
join
(
'
\
n'
),
methodList
.
join
(
'
\
n'
)
methodList
.
join
(
'
\
n'
)
)
)
confGlobal
=
null
confGlobal
=
null
return
script
return
script
}
}
function
buildAttributes
(
el
,
dataList
,
ruleList
,
optionsList
,
methodList
,
propsList
,
uploadVarList
)
{
function
buildAttributes
(
el
,
dataList
,
ruleList
,
optionsList
,
methodList
,
propsList
,
uploadVarList
)
{
buildData
(
el
,
dataList
)
buildData
(
el
,
dataList
)
buildRules
(
el
,
ruleList
)
buildRules
(
el
,
ruleList
)
if
(
el
.
options
&&
el
.
options
.
length
)
{
if
(
el
.
options
&&
el
.
options
.
length
)
{
buildOptions
(
el
,
optionsList
)
buildOptions
(
el
,
optionsList
)
if
(
el
.
dataType
===
'dynamic'
)
{
if
(
el
.
dataType
===
'dynamic'
)
{
const
model
=
`
${
el
.
vModel
}
Options`
const
model
=
`
${
el
.
vModel
}
Options`
const
options
=
titleCase
(
model
)
const
options
=
titleCase
(
model
)
buildOptionMethod
(
`get
${
options
}
`
,
model
,
methodList
)
buildOptionMethod
(
`get
${
options
}
`
,
model
,
methodList
)
}
}
}
}
if
(
el
.
props
&&
el
.
props
.
props
)
{
if
(
el
.
props
&&
el
.
props
.
props
)
{
buildProps
(
el
,
propsList
)
buildProps
(
el
,
propsList
)
}
}
if
(
el
.
action
&&
el
.
tag
===
'el-upload'
)
{
if
(
el
.
action
&&
el
.
tag
===
'el-upload'
)
{
uploadVarList
.
push
(
uploadVarList
.
push
(
`
${
el
.
vModel
}
Action: '
${
el
.
action
}
',
`
${
el
.
vModel
}
Action: '
${
el
.
action
}
',
${
el
.
vModel
}
fileList: [],`
${
el
.
vModel
}
fileList: [],`
)
)
methodList
.
push
(
buildBeforeUpload
(
el
))
methodList
.
push
(
buildBeforeUpload
(
el
))
if
(
!
el
[
'auto-upload'
])
{
if
(
!
el
[
'auto-upload'
])
{
methodList
.
push
(
buildSubmitUpload
(
el
))
methodList
.
push
(
buildSubmitUpload
(
el
))
}
}
}
}
if
(
el
.
children
)
{
if
(
el
.
children
)
{
el
.
children
.
forEach
(
el2
=>
{
el
.
children
.
forEach
(
el2
=>
{
buildAttributes
(
el2
,
dataList
,
ruleList
,
optionsList
,
methodList
,
propsList
,
uploadVarList
)
buildAttributes
(
el2
,
dataList
,
ruleList
,
optionsList
,
methodList
,
propsList
,
uploadVarList
)
})
})
}
}
}
}
function
mixinMethod
(
type
)
{
function
mixinMethod
(
type
)
{
const
list
=
[];
const
const
list
=
[];
const
minxins
=
{
minxins
=
{
file
:
confGlobal
.
formBtns
?
{
file
:
confGlobal
.
formBtns
?
{
submitForm
:
`submitForm() {
submitForm
:
`submitForm() {
this.$refs['
${
confGlobal
.
formRef
}
'].validate(valid => {
this.$refs['
${
confGlobal
.
formRef
}
'].validate(valid => {
if(!valid) return
if(!valid) return
// TODO 提交表单
// TODO 提交表单
})
})
},`
,
},`
,
resetForm
:
`resetForm() {
resetForm
:
`resetForm() {
this.$refs['
${
confGlobal
.
formRef
}
'].resetFields()
this.$refs['
${
confGlobal
.
formRef
}
'].resetFields()
},`
},`
}
:
null
,
}
:
null
,
dialog
:
{
dialog
:
{
onOpen
:
'onOpen() {},'
,
onOpen
:
'onOpen() {},'
,
onClose
:
`onClose() {
onClose
:
`onClose() {
this.$refs['
${
confGlobal
.
formRef
}
'].resetFields()
this.$refs['
${
confGlobal
.
formRef
}
'].resetFields()
},`
,
},`
,
close
:
`close() {
close
:
`close() {
this.$emit('update:visible', false)
this.$emit('update:visible', false)
},`
,
},`
,
hand
elConfirm
:
`handelConfirm() {
hand
leConfirm
:
`handleConfirm() {
this.$refs['
${
confGlobal
.
formRef
}
'].validate(valid => {
this.$refs['
${
confGlobal
.
formRef
}
'].validate(valid => {
if(!valid) return
if(!valid) return
this.close()
this.close()
})
})
},`
},`
}
}
}
}
const
methods
=
minxins
[
type
]
const
methods
=
minxins
[
type
]
if
(
methods
)
{
if
(
methods
)
{
Object
.
keys
(
methods
).
forEach
(
key
=>
{
Object
.
keys
(
methods
).
forEach
(
key
=>
{
list
.
push
(
methods
[
key
])
list
.
push
(
methods
[
key
])
})
})
}
}
return
list
return
list
}
}
function
buildData
(
conf
,
dataList
)
{
function
buildData
(
conf
,
dataList
)
{
if
(
conf
.
vModel
===
undefined
)
return
if
(
conf
.
vModel
===
undefined
)
return
let
defaultValue
let
defaultValue
if
(
typeof
(
conf
.
defaultValue
)
===
'string'
&&
!
conf
.
multiple
)
{
if
(
typeof
(
conf
.
defaultValue
)
===
'string'
&&
!
conf
.
multiple
)
{
defaultValue
=
`'
${
conf
.
defaultValue
}
'`
defaultValue
=
`'
${
conf
.
defaultValue
}
'`
}
else
{
}
else
{
defaultValue
=
`
${
JSON
.
stringify
(
conf
.
defaultValue
)}
`
defaultValue
=
`
${
JSON
.
stringify
(
conf
.
defaultValue
)}
`
}
}
dataList
.
push
(
`
${
conf
.
vModel
}
:
${
defaultValue
}
,`
)
dataList
.
push
(
`
${
conf
.
vModel
}
:
${
defaultValue
}
,`
)
}
}
function
buildRules
(
conf
,
ruleList
)
{
function
buildRules
(
conf
,
ruleList
)
{
if
(
conf
.
vModel
===
undefined
)
return
if
(
conf
.
vModel
===
undefined
)
return
const
rules
=
[]
const
rules
=
[]
if
(
trigger
[
conf
.
tag
])
{
if
(
trigger
[
conf
.
tag
])
{
if
(
conf
.
required
)
{
if
(
conf
.
required
)
{
const
type
=
isArray
(
conf
.
defaultValue
)
?
'type:
\'
array
\'
,'
:
''
const
type
=
isArray
(
conf
.
defaultValue
)
?
'type:
\'
array
\'
,'
:
''
let
message
=
isArray
(
conf
.
defaultValue
)
?
`请至少选择一个
${
conf
.
vModel
}
`
:
conf
.
placeholder
let
message
=
isArray
(
conf
.
defaultValue
)
?
`请至少选择一个
${
conf
.
vModel
}
`
:
conf
.
placeholder
if
(
message
===
undefined
)
message
=
`
${
conf
.
label
}
不能为空`
if
(
message
===
undefined
)
message
=
`
${
conf
.
label
}
不能为空`
rules
.
push
(
`{ required: true,
${
type
}
message: '
${
message
}
', trigger: '
${
trigger
[
conf
.
tag
]}
' }`
)
rules
.
push
(
`{ required: true,
${
type
}
message: '
${
message
}
', trigger: '
${
trigger
[
conf
.
tag
]}
' }`
)
}
}
if
(
conf
.
regList
&&
isArray
(
conf
.
regList
))
{
if
(
conf
.
regList
&&
isArray
(
conf
.
regList
))
{
conf
.
regList
.
forEach
(
item
=>
{
conf
.
regList
.
forEach
(
item
=>
{
if
(
item
.
pattern
)
{
if
(
item
.
pattern
)
{
rules
.
push
(
`{ pattern:
${
eval
(
item
.
pattern
)}
, message: '
${
item
.
message
}
', trigger: '
${
trigger
[
conf
.
tag
]}
' }`
)
rules
.
push
(
`{ pattern:
${
eval
(
item
.
pattern
)}
, message: '
${
item
.
message
}
', trigger: '
${
trigger
[
conf
.
tag
]}
' }`
)
}
}
})
})
}
}
ruleList
.
push
(
`
${
conf
.
vModel
}
: [
${
rules
.
join
(
','
)}
],`
)
ruleList
.
push
(
`
${
conf
.
vModel
}
: [
${
rules
.
join
(
','
)}
],`
)
}
}
}
}
function
buildOptions
(
conf
,
optionsList
)
{
function
buildOptions
(
conf
,
optionsList
)
{
if
(
conf
.
vModel
===
undefined
)
return
if
(
conf
.
vModel
===
undefined
)
return
if
(
conf
.
dataType
===
'dynamic'
)
{
conf
.
options
=
[]
}
if
(
conf
.
dataType
===
'dynamic'
)
{
conf
.
options
=
[]
}
const
str
=
`
${
conf
.
vModel
}
Options:
${
JSON
.
stringify
(
conf
.
options
)}
,`
const
str
=
`
${
conf
.
vModel
}
Options:
${
JSON
.
stringify
(
conf
.
options
)}
,`
optionsList
.
push
(
str
)
optionsList
.
push
(
str
)
}
}
function
buildProps
(
conf
,
propsList
)
{
function
buildProps
(
conf
,
propsList
)
{
if
(
conf
.
dataType
===
'dynamic'
)
{
if
(
conf
.
dataType
===
'dynamic'
)
{
conf
.
valueKey
!==
'value'
&&
(
conf
.
props
.
props
.
value
=
conf
.
valueKey
)
conf
.
valueKey
!==
'value'
&&
(
conf
.
props
.
props
.
value
=
conf
.
valueKey
)
conf
.
labelKey
!==
'label'
&&
(
conf
.
props
.
props
.
label
=
conf
.
labelKey
)
conf
.
labelKey
!==
'label'
&&
(
conf
.
props
.
props
.
label
=
conf
.
labelKey
)
conf
.
childrenKey
!==
'children'
&&
(
conf
.
props
.
props
.
children
=
conf
.
childrenKey
)
conf
.
childrenKey
!==
'children'
&&
(
conf
.
props
.
props
.
children
=
conf
.
childrenKey
)
}
}
const
str
=
`
${
conf
.
vModel
}
Props:
${
JSON
.
stringify
(
conf
.
props
.
props
)}
,`
const
str
=
`
${
conf
.
vModel
}
Props:
${
JSON
.
stringify
(
conf
.
props
.
props
)}
,`
propsList
.
push
(
str
)
propsList
.
push
(
str
)
}
}
function
buildBeforeUpload
(
conf
)
{
function
buildBeforeUpload
(
conf
)
{
const
unitNum
=
units
[
conf
.
sizeUnit
];
let
rightSizeCode
=
''
;
let
acceptCode
=
''
;
const
const
unitNum
=
units
[
conf
.
sizeUnit
];
let
rightSizeCode
=
''
;
let
acceptCode
=
''
;
const
returnList
=
[]
returnList
=
[]
if
(
conf
.
fileSize
)
{
if
(
conf
.
fileSize
)
{
rightSizeCode
=
`let isRightSize = file.size /
${
unitNum
}
<
${
conf
.
fileSize
}
rightSizeCode
=
`let isRightSize = file.size /
${
unitNum
}
<
${
conf
.
fileSize
}
if(!isRightSize){
if(!isRightSize){
this.$message.error('文件大小超过
${
conf
.
fileSize
}${
conf
.
sizeUnit
}
')
this.$message.error('文件大小超过
${
conf
.
fileSize
}${
conf
.
sizeUnit
}
')
}`
}`
returnList
.
push
(
'isRightSize'
)
returnList
.
push
(
'isRightSize'
)
}
}
if
(
conf
.
accept
)
{
if
(
conf
.
accept
)
{
acceptCode
=
`let isAccept = new RegExp('
${
conf
.
accept
}
').test(file.type)
acceptCode
=
`let isAccept = new RegExp('
${
conf
.
accept
}
').test(file.type)
if(!isAccept){
if(!isAccept){
this.$message.error('应该选择
${
conf
.
accept
}
类型的文件')
this.$message.error('应该选择
${
conf
.
accept
}
类型的文件')
}`
}`
returnList
.
push
(
'isAccept'
)
returnList
.
push
(
'isAccept'
)
}
}
const
str
=
`
${
conf
.
vModel
}
BeforeUpload(file) {
const
str
=
`
${
conf
.
vModel
}
BeforeUpload(file) {
${
rightSizeCode
}
${
rightSizeCode
}
${
acceptCode
}
${
acceptCode
}
return
${
returnList
.
join
(
'&&'
)}
return
${
returnList
.
join
(
'&&'
)}
},`
},`
return
returnList
.
length
?
str
:
''
return
returnList
.
length
?
str
:
''
}
}
function
buildSubmitUpload
(
conf
)
{
function
buildSubmitUpload
(
conf
)
{
const
str
=
`submitUpload() {
const
str
=
`submitUpload() {
this.$refs['
${
conf
.
vModel
}
'].submit()
this.$refs['
${
conf
.
vModel
}
'].submit()
},`
},`
return
str
return
str
}
}
function
buildOptionMethod
(
methodName
,
model
,
methodList
)
{
function
buildOptionMethod
(
methodName
,
model
,
methodList
)
{
const
str
=
`
${
methodName
}
() {
const
str
=
`
${
methodName
}
() {
// TODO 发起请求获取数据
// TODO 发起请求获取数据
this.
${
model
}
this.
${
model
}
},`
},`
methodList
.
push
(
str
)
methodList
.
push
(
str
)
}
}
function
buildexport
(
conf
,
type
,
data
,
rules
,
selectOptions
,
uploadVar
,
props
,
methods
)
{
function
buildexport
(
conf
,
type
,
data
,
rules
,
selectOptions
,
uploadVar
,
props
,
methods
)
{
const
str
=
`
${
exportDefault
}
{
const
str
=
`
${
exportDefault
}
{
${
inheritAttrs
[
type
]}
${
inheritAttrs
[
type
]}
components: {},
components: {},
props: [],
props: [],
data () {
data () {
return {
return {
${
conf
.
formModel
}
: {
${
conf
.
formModel
}
: {
${
data
}
${
data
}
},
},
${
conf
.
formRules
}
: {
${
conf
.
formRules
}
: {
${
rules
}
${
rules
}
},
},
${
uploadVar
}
${
uploadVar
}
${
selectOptions
}
${
selectOptions
}
${
props
}
${
props
}
}
}
},
},
computed: {},
computed: {},
watch: {},
watch: {},
created () {},
created () {},
mounted () {},
mounted () {},
methods: {
methods: {
${
methods
}
${
methods
}
}
}
}`
}`
return
str
return
str
}
}
ruoyi-ui/src/views/tool/build/CodeTypeDialog.vue
浏览文件 @
d00dc3b0
<
template
>
<
template
>
<div>
<div>
<el-dialog
<el-dialog
v-bind=
"$attrs"
v-bind=
"$attrs"
width=
"500px"
width=
"500px"
:close-on-click-modal=
"false"
:close-on-click-modal=
"false"
:modal-append-to-body=
"false"
:modal-append-to-body=
"false"
v-on=
"$listeners"
v-on=
"$listeners"
@
open=
"onOpen"
@
open=
"onOpen"
@
close=
"onClose"
@
close=
"onClose"
>
>
<el-row
:gutter=
"15"
>
<el-row
:gutter=
"15"
>
<el-form
<el-form
ref=
"elForm"
ref=
"elForm"
:model=
"formData"
:model=
"formData"
:rules=
"rules"
:rules=
"rules"
size=
"medium"
size=
"medium"
label-width=
"100px"
label-width=
"100px"
>
>
<el-col
:span=
"24"
>
<el-col
:span=
"24"
>
<el-form-item
label=
"生成类型"
prop=
"type"
>
<el-form-item
label=
"生成类型"
prop=
"type"
>
<el-radio-group
v-model=
"formData.type"
>
<el-radio-group
v-model=
"formData.type"
>
<el-radio-button
<el-radio-button
v-for=
"(item, index) in typeOptions"
v-for=
"(item, index) in typeOptions"
:key=
"index"
:key=
"index"
:label=
"item.value"
:label=
"item.value"
:disabled=
"item.disabled"
:disabled=
"item.disabled"
>
>
{{
item
.
label
}}
{{
item
.
label
}}
</el-radio-button>
</el-radio-button>
</el-radio-group>
</el-radio-group>
</el-form-item>
</el-form-item>
<el-form-item
v-if=
"showFileName"
label=
"文件名"
prop=
"fileName"
>
<el-form-item
v-if=
"showFileName"
label=
"文件名"
prop=
"fileName"
>
<el-input
v-model=
"formData.fileName"
placeholder=
"请输入文件名"
clearable
/>
<el-input
v-model=
"formData.fileName"
placeholder=
"请输入文件名"
clearable
/>
</el-form-item>
</el-form-item>
</el-col>
</el-col>
</el-form>
</el-form>
</el-row>
</el-row>
<div
slot=
"footer"
>
<div
slot=
"footer"
>
<el-button
@
click=
"close"
>
<el-button
@
click=
"close"
>
取消
取消
</el-button>
</el-button>
<el-button
type=
"primary"
@
click=
"hand
elConfirm"
>
<el-button
type=
"primary"
@
click=
"hand
leConfirm"
>
确定
确定
</el-button>
</el-button>
</div>
</div>
</el-dialog>
</el-dialog>
</div>
</div>
</
template
>
</
template
>
<
script
>
<
script
>
export
default
{
export
default
{
inheritAttrs
:
false
,
inheritAttrs
:
false
,
props
:
[
'showFileName'
],
props
:
[
'showFileName'
],
data
()
{
data
()
{
return
{
return
{
formData
:
{
formData
:
{
fileName
:
undefined
,
fileName
:
undefined
,
type
:
'file'
type
:
'file'
},
},
rules
:
{
rules
:
{
fileName
:
[{
fileName
:
[{
required
:
true
,
required
:
true
,
message
:
'请输入文件名'
,
message
:
'请输入文件名'
,
trigger
:
'blur'
trigger
:
'blur'
}],
}],
type
:
[{
type
:
[{
required
:
true
,
required
:
true
,
message
:
'生成类型不能为空'
,
message
:
'生成类型不能为空'
,
trigger
:
'change'
trigger
:
'change'
}]
}]
},
},
typeOptions
:
[{
typeOptions
:
[{
label
:
'页面'
,
label
:
'页面'
,
value
:
'file'
value
:
'file'
},
{
},
{
label
:
'弹窗'
,
label
:
'弹窗'
,
value
:
'dialog'
value
:
'dialog'
}]
}]
}
}
},
},
computed
:
{
computed
:
{
},
},
watch
:
{},
watch
:
{},
mounted
()
{},
mounted
()
{},
methods
:
{
methods
:
{
onOpen
()
{
onOpen
()
{
if
(
this
.
showFileName
)
{
if
(
this
.
showFileName
)
{
this
.
formData
.
fileName
=
`
${
+
new
Date
()}
.vue`
this
.
formData
.
fileName
=
`
${
+
new
Date
()}
.vue`
}
}
},
},
onClose
()
{
onClose
()
{
},
},
close
(
e
)
{
close
(
e
)
{
this
.
$emit
(
'update:visible'
,
false
)
this
.
$emit
(
'update:visible'
,
false
)
},
},
hand
elConfirm
()
{
hand
leConfirm
()
{
this
.
$refs
.
elForm
.
validate
(
valid
=>
{
this
.
$refs
.
elForm
.
validate
(
valid
=>
{
if
(
!
valid
)
return
if
(
!
valid
)
return
this
.
$emit
(
'confirm'
,
{
...
this
.
formData
})
this
.
$emit
(
'confirm'
,
{
...
this
.
formData
})
this
.
close
()
this
.
close
()
})
})
}
}
}
}
}
}
</
script
>
</
script
>
ruoyi-ui/src/views/tool/build/TreeNodeDialog.vue
浏览文件 @
d00dc3b0
<
template
>
<
template
>
<div>
<div>
<el-dialog
<el-dialog
v-bind=
"$attrs"
v-bind=
"$attrs"
:close-on-click-modal=
"false"
:close-on-click-modal=
"false"
:modal-append-to-body=
"false"
:modal-append-to-body=
"false"
v-on=
"$listeners"
v-on=
"$listeners"
@
open=
"onOpen"
@
open=
"onOpen"
@
close=
"onClose"
@
close=
"onClose"
>
>
<el-row
:gutter=
"0"
>
<el-row
:gutter=
"0"
>
<el-form
<el-form
ref=
"elForm"
ref=
"elForm"
:model=
"formData"
:model=
"formData"
:rules=
"rules"
:rules=
"rules"
size=
"small"
size=
"small"
label-width=
"100px"
label-width=
"100px"
>
>
<el-col
:span=
"24"
>
<el-col
:span=
"24"
>
<el-form-item
<el-form-item
label=
"选项名"
label=
"选项名"
prop=
"label"
prop=
"label"
>
>
<el-input
<el-input
v-model=
"formData.label"
v-model=
"formData.label"
placeholder=
"请输入选项名"
placeholder=
"请输入选项名"
clearable
clearable
/>
/>
</el-form-item>
</el-form-item>
</el-col>
</el-col>
<el-col
:span=
"24"
>
<el-col
:span=
"24"
>
<el-form-item
<el-form-item
label=
"选项值"
label=
"选项值"
prop=
"value"
prop=
"value"
>
>
<el-input
<el-input
v-model=
"formData.value"
v-model=
"formData.value"
placeholder=
"请输入选项值"
placeholder=
"请输入选项值"
clearable
clearable
>
>
<el-select
<el-select
slot=
"append"
slot=
"append"
v-model=
"dataType"
v-model=
"dataType"
:style=
"
{width: '100px'}"
:style=
"
{width: '100px'}"
>
>
<el-option
<el-option
v-for=
"(item, index) in dataTypeOptions"
v-for=
"(item, index) in dataTypeOptions"
:key=
"index"
:key=
"index"
:label=
"item.label"
:label=
"item.label"
:value=
"item.value"
:value=
"item.value"
:disabled=
"item.disabled"
:disabled=
"item.disabled"
/>
/>
</el-select>
</el-select>
</el-input>
</el-input>
</el-form-item>
</el-form-item>
</el-col>
</el-col>
</el-form>
</el-form>
</el-row>
</el-row>
<div
slot=
"footer"
>
<div
slot=
"footer"
>
<el-button
<el-button
type=
"primary"
type=
"primary"
@
click=
"hand
elConfirm"
@
click=
"hand
leConfirm"
>
>
确定
确定
</el-button>
</el-button>
<el-button
@
click=
"close"
>
<el-button
@
click=
"close"
>
取消
取消
</el-button>
</el-button>
</div>
</div>
</el-dialog>
</el-dialog>
</div>
</div>
</
template
>
</
template
>
<
script
>
<
script
>
import
{
isNumberStr
}
from
'@/utils/index'
import
{
isNumberStr
}
from
'@/utils/index'
export
default
{
export
default
{
components
:
{},
components
:
{},
inheritAttrs
:
false
,
inheritAttrs
:
false
,
props
:
[],
props
:
[],
data
()
{
data
()
{
return
{
return
{
id
:
100
,
id
:
100
,
formData
:
{
formData
:
{
label
:
undefined
,
label
:
undefined
,
value
:
undefined
value
:
undefined
},
},
rules
:
{
rules
:
{
label
:
[
label
:
[
{
{
required
:
true
,
required
:
true
,
message
:
'请输入选项名'
,
message
:
'请输入选项名'
,
trigger
:
'blur'
trigger
:
'blur'
}
}
],
],
value
:
[
value
:
[
{
{
required
:
true
,
required
:
true
,
message
:
'请输入选项值'
,
message
:
'请输入选项值'
,
trigger
:
'blur'
trigger
:
'blur'
}
}
]
]
},
},
dataType
:
'string'
,
dataType
:
'string'
,
dataTypeOptions
:
[
dataTypeOptions
:
[
{
{
label
:
'字符串'
,
label
:
'字符串'
,
value
:
'string'
value
:
'string'
},
},
{
{
label
:
'数字'
,
label
:
'数字'
,
value
:
'number'
value
:
'number'
}
}
]
]
}
}
},
},
computed
:
{},
computed
:
{},
watch
:
{
watch
:
{
// eslint-disable-next-line func-names
// eslint-disable-next-line func-names
'formData.value'
:
function
(
val
)
{
'formData.value'
:
function
(
val
)
{
this
.
dataType
=
isNumberStr
(
val
)
?
'number'
:
'string'
this
.
dataType
=
isNumberStr
(
val
)
?
'number'
:
'string'
}
}
},
},
created
()
{},
created
()
{},
mounted
()
{},
mounted
()
{},
methods
:
{
methods
:
{
onOpen
()
{
onOpen
()
{
this
.
formData
=
{
this
.
formData
=
{
label
:
undefined
,
label
:
undefined
,
value
:
undefined
value
:
undefined
}
}
},
},
onClose
()
{},
onClose
()
{},
close
()
{
close
()
{
this
.
$emit
(
'update:visible'
,
false
)
this
.
$emit
(
'update:visible'
,
false
)
},
},
hand
elConfirm
()
{
hand
leConfirm
()
{
this
.
$refs
.
elForm
.
validate
(
valid
=>
{
this
.
$refs
.
elForm
.
validate
(
valid
=>
{
if
(
!
valid
)
return
if
(
!
valid
)
return
if
(
this
.
dataType
===
'number'
)
{
if
(
this
.
dataType
===
'number'
)
{
this
.
formData
.
value
=
parseFloat
(
this
.
formData
.
value
)
this
.
formData
.
value
=
parseFloat
(
this
.
formData
.
value
)
}
}
this
.
formData
.
id
=
this
.
id
++
this
.
formData
.
id
=
this
.
id
++
this
.
$emit
(
'commit'
,
this
.
formData
)
this
.
$emit
(
'commit'
,
this
.
formData
)
this
.
close
()
this
.
close
()
})
})
}
}
}
}
}
}
</
script
>
</
script
>
ruoyi-ui/src/views/tool/build/index.vue
浏览文件 @
d00dc3b0
<
template
>
<
template
>
<div
class=
"container"
>
<div
class=
"container"
>
<div
class=
"left-board"
>
<div
class=
"left-board"
>
<div
class=
"logo-wrapper"
>
<div
class=
"logo-wrapper"
>
<div
class=
"logo"
>
<div
class=
"logo"
>
<img
:src=
"logo"
alt=
"logo"
>
Form Generator
<img
:src=
"logo"
alt=
"logo"
>
Form Generator
</div>
</div>
</div>
</div>
<el-scrollbar
class=
"left-scrollbar"
>
<el-scrollbar
class=
"left-scrollbar"
>
<div
class=
"components-list"
>
<div
class=
"components-list"
>
<div
class=
"components-title"
>
<div
class=
"components-title"
>
<svg-icon
icon-class=
"component"
/>
输入型组件
<svg-icon
icon-class=
"component"
/>
输入型组件
</div>
</div>
<draggable
<draggable
class=
"components-draggable"
class=
"components-draggable"
:list=
"inputComponents"
:list=
"inputComponents"
:group=
"
{ name: 'componentsGroup', pull: 'clone', put: false }"
:group=
"
{ name: 'componentsGroup', pull: 'clone', put: false }"
:clone="cloneComponent"
:clone="cloneComponent"
draggable=".components-item"
draggable=".components-item"
:sort="false"
:sort="false"
@end="onEnd"
@end="onEnd"
>
>
<div
<div
v-for=
"(element, index) in inputComponents"
:key=
"index"
class=
"components-item"
v-for=
"(element, index) in inputComponents"
:key=
"index"
class=
"components-item"
@
click=
"addComponent(element)"
@
click=
"addComponent(element)"
>
>
<div
class=
"components-body"
>
<div
class=
"components-body"
>
<svg-icon
:icon-class=
"element.tagIcon"
/>
<svg-icon
:icon-class=
"element.tagIcon"
/>
{{
element
.
label
}}
{{
element
.
label
}}
</div>
</div>
</div>
</div>
</draggable>
</draggable>
<div
class=
"components-title"
>
<div
class=
"components-title"
>
<svg-icon
icon-class=
"component"
/>
选择型组件
<svg-icon
icon-class=
"component"
/>
选择型组件
</div>
</div>
<draggable
<draggable
class=
"components-draggable"
class=
"components-draggable"
:list=
"selectComponents"
:list=
"selectComponents"
:group=
"
{ name: 'componentsGroup', pull: 'clone', put: false }"
:group=
"
{ name: 'componentsGroup', pull: 'clone', put: false }"
:clone="cloneComponent"
:clone="cloneComponent"
draggable=".components-item"
draggable=".components-item"
:sort="false"
:sort="false"
@end="onEnd"
@end="onEnd"
>
>
<div
<div
v-for=
"(element, index) in selectComponents"
v-for=
"(element, index) in selectComponents"
:key=
"index"
:key=
"index"
class=
"components-item"
class=
"components-item"
@
click=
"addComponent(element)"
@
click=
"addComponent(element)"
>
>
<div
class=
"components-body"
>
<div
class=
"components-body"
>
<svg-icon
:icon-class=
"element.tagIcon"
/>
<svg-icon
:icon-class=
"element.tagIcon"
/>
{{
element
.
label
}}
{{
element
.
label
}}
</div>
</div>
</div>
</div>
</draggable>
</draggable>
<div
class=
"components-title"
>
<div
class=
"components-title"
>
<svg-icon
icon-class=
"component"
/>
布局型组件
<svg-icon
icon-class=
"component"
/>
布局型组件
</div>
</div>
<draggable
<draggable
class=
"components-draggable"
:list=
"layoutComponents"
class=
"components-draggable"
:list=
"layoutComponents"
:group=
"
{ name: 'componentsGroup', pull: 'clone', put: false }" :clone="cloneComponent"
:group=
"
{ name: 'componentsGroup', pull: 'clone', put: false }" :clone="cloneComponent"
draggable=".components-item" :sort="false" @end="onEnd"
draggable=".components-item" :sort="false" @end="onEnd"
>
>
<div
<div
v-for=
"(element, index) in layoutComponents"
:key=
"index"
class=
"components-item"
v-for=
"(element, index) in layoutComponents"
:key=
"index"
class=
"components-item"
@
click=
"addComponent(element)"
@
click=
"addComponent(element)"
>
>
<div
class=
"components-body"
>
<div
class=
"components-body"
>
<svg-icon
:icon-class=
"element.tagIcon"
/>
<svg-icon
:icon-class=
"element.tagIcon"
/>
{{
element
.
label
}}
{{
element
.
label
}}
</div>
</div>
</div>
</div>
</draggable>
</draggable>
</div>
</div>
</el-scrollbar>
</el-scrollbar>
</div>
</div>
<div
class=
"center-board"
>
<div
class=
"center-board"
>
<div
class=
"action-bar"
>
<div
class=
"action-bar"
>
<el-button
icon=
"el-icon-download"
type=
"text"
@
click=
"download"
>
<el-button
icon=
"el-icon-download"
type=
"text"
@
click=
"download"
>
导出vue文件
导出vue文件
</el-button>
</el-button>
<el-button
class=
"copy-btn-main"
icon=
"el-icon-document-copy"
type=
"text"
@
click=
"copy"
>
<el-button
class=
"copy-btn-main"
icon=
"el-icon-document-copy"
type=
"text"
@
click=
"copy"
>
复制代码
复制代码
</el-button>
</el-button>
<el-button
class=
"delete-btn"
icon=
"el-icon-delete"
type=
"text"
@
click=
"empty"
>
<el-button
class=
"delete-btn"
icon=
"el-icon-delete"
type=
"text"
@
click=
"empty"
>
清空
清空
</el-button>
</el-button>
</div>
</div>
<el-scrollbar
class=
"center-scrollbar"
>
<el-scrollbar
class=
"center-scrollbar"
>
<el-row
class=
"center-board-row"
:gutter=
"formConf.gutter"
>
<el-row
class=
"center-board-row"
:gutter=
"formConf.gutter"
>
<el-form
<el-form
:size=
"formConf.size"
:size=
"formConf.size"
:label-position=
"formConf.labelPosition"
:label-position=
"formConf.labelPosition"
:disabled=
"formConf.disabled"
:disabled=
"formConf.disabled"
:label-width=
"formConf.labelWidth + 'px'"
:label-width=
"formConf.labelWidth + 'px'"
>
>
<draggable
class=
"drawing-board"
:list=
"drawingList"
:animation=
"340"
group=
"componentsGroup"
>
<draggable
class=
"drawing-board"
:list=
"drawingList"
:animation=
"340"
group=
"componentsGroup"
>
<draggable-item
<draggable-item
v-for=
"(element, index) in drawingList"
v-for=
"(element, index) in drawingList"
:key=
"element.renderKey"
:key=
"element.renderKey"
:drawing-list=
"drawingList"
:drawing-list=
"drawingList"
:element=
"element"
:element=
"element"
:index=
"index"
:index=
"index"
:active-id=
"activeId"
:active-id=
"activeId"
:form-conf=
"formConf"
:form-conf=
"formConf"
@
activeItem=
"activeFormItem"
@
activeItem=
"activeFormItem"
@
copyItem=
"drawingItemCopy"
@
copyItem=
"drawingItemCopy"
@
deleteItem=
"drawingItemDelete"
@
deleteItem=
"drawingItemDelete"
/>
/>
</draggable>
</draggable>
<div
v-show=
"!drawingList.length"
class=
"empty-info"
>
<div
v-show=
"!drawingList.length"
class=
"empty-info"
>
从左侧拖入或点选组件进行表单设计
从左侧拖入或点选组件进行表单设计
</div>
</div>
</el-form>
</el-form>
</el-row>
</el-row>
</el-scrollbar>
</el-scrollbar>
</div>
</div>
<right-panel
<right-panel
:active-data=
"activeData"
:active-data=
"activeData"
:form-conf=
"formConf"
:form-conf=
"formConf"
:show-field=
"!!drawingList.length"
:show-field=
"!!drawingList.length"
@
tag-change=
"tagChange"
@
tag-change=
"tagChange"
/>
/>
<code-type-dialog
<code-type-dialog
:visible
.
sync=
"dialogVisible"
:visible
.
sync=
"dialogVisible"
title=
"选择生成类型"
title=
"选择生成类型"
:show-file-name=
"showFileName"
:show-file-name=
"showFileName"
@
confirm=
"generate"
@
confirm=
"generate"
/>
/>
<input
id=
"copyNode"
type=
"hidden"
>
<input
id=
"copyNode"
type=
"hidden"
>
</div>
</div>
</
template
>
</
template
>
<
script
>
<
script
>
import
draggable
from
'vuedraggable'
import
draggable
from
'vuedraggable'
import
beautifier
from
'js-beautify'
import
beautifier
from
'js-beautify'
import
ClipboardJS
from
'clipboard'
import
ClipboardJS
from
'clipboard'
import
render
from
'@/utils/generator/render'
import
render
from
'@/utils/generator/render'
import
RightPanel
from
'./RightPanel'
import
RightPanel
from
'./RightPanel'
import
{
inputComponents
,
selectComponents
,
layoutComponents
,
formConf
}
from
'@/utils/generator/config'
import
{
inputComponents
,
selectComponents
,
layoutComponents
,
formConf
}
from
'@/utils/generator/config'
import
{
beautifierConf
,
titleCase
}
from
'@/utils/index'
import
{
beautifierConf
,
titleCase
}
from
'@/utils/index'
import
{
makeUpHtml
,
vueTemplate
,
vueScript
,
cssStyle
}
from
'@/utils/generator/html'
import
{
makeUpHtml
,
vueTemplate
,
vueScript
,
cssStyle
}
from
'@/utils/generator/html'
import
{
makeUpJs
}
from
'@/utils/generator/js'
import
{
makeUpJs
}
from
'@/utils/generator/js'
import
{
makeUpCss
}
from
'@/utils/generator/css'
import
{
makeUpCss
}
from
'@/utils/generator/css'
import
drawingDefa
lut
from
'@/utils/generator/drawingDefalut'
import
drawingDefa
ult
from
'@/utils/generator/drawingDefault'
import
logo
from
'@/assets/logo/logo.png'
import
logo
from
'@/assets/logo/logo.png'
import
CodeTypeDialog
from
'./CodeTypeDialog'
import
CodeTypeDialog
from
'./CodeTypeDialog'
import
DraggableItem
from
'./DraggableItem'
import
DraggableItem
from
'./DraggableItem'
let
oldActiveId
let
oldActiveId
let
tempActiveData
let
tempActiveData
export
default
{
export
default
{
components
:
{
components
:
{
draggable
,
draggable
,
render
,
render
,
RightPanel
,
RightPanel
,
CodeTypeDialog
,
CodeTypeDialog
,
DraggableItem
DraggableItem
},
},
data
()
{
data
()
{
return
{
return
{
logo
,
logo
,
idGlobal
:
100
,
idGlobal
:
100
,
formConf
,
formConf
,
inputComponents
,
inputComponents
,
selectComponents
,
selectComponents
,
layoutComponents
,
layoutComponents
,
labelWidth
:
100
,
labelWidth
:
100
,
drawingList
:
drawingDefa
lut
,
drawingList
:
drawingDefa
ult
,
drawingData
:
{},
drawingData
:
{},
activeId
:
drawingDefa
lut
[
0
].
formId
,
activeId
:
drawingDefa
ult
[
0
].
formId
,
drawerVisible
:
false
,
drawerVisible
:
false
,
formData
:
{},
formData
:
{},
dialogVisible
:
false
,
dialogVisible
:
false
,
generateConf
:
null
,
generateConf
:
null
,
showFileName
:
false
,
showFileName
:
false
,
activeData
:
drawingDefa
lut
[
0
]
activeData
:
drawingDefa
ult
[
0
]
}
}
},
},
created
()
{
created
()
{
// 防止 firefox 下 拖拽 会新打卡一个选项卡
// 防止 firefox 下 拖拽 会新打卡一个选项卡
document
.
body
.
ondrop
=
event
=>
{
document
.
body
.
ondrop
=
event
=>
{
event
.
preventDefault
()
event
.
preventDefault
()
event
.
stopPropagation
()
event
.
stopPropagation
()
}
}
},
},
watch
:
{
watch
:
{
// eslint-disable-next-line func-names
// eslint-disable-next-line func-names
'activeData.label'
:
function
(
val
,
oldVal
)
{
'activeData.label'
:
function
(
val
,
oldVal
)
{
if
(
if
(
this
.
activeData
.
placeholder
===
undefined
this
.
activeData
.
placeholder
===
undefined
||
!
this
.
activeData
.
tag
||
!
this
.
activeData
.
tag
||
oldActiveId
!==
this
.
activeId
||
oldActiveId
!==
this
.
activeId
)
{
)
{
return
return
}
}
this
.
activeData
.
placeholder
=
this
.
activeData
.
placeholder
.
replace
(
oldVal
,
''
)
+
val
this
.
activeData
.
placeholder
=
this
.
activeData
.
placeholder
.
replace
(
oldVal
,
''
)
+
val
},
},
activeId
:
{
activeId
:
{
handler
(
val
)
{
handler
(
val
)
{
oldActiveId
=
val
oldActiveId
=
val
},
},
immediate
:
true
immediate
:
true
}
}
},
},
mounted
()
{
mounted
()
{
const
clipboard
=
new
ClipboardJS
(
'#copyNode'
,
{
const
clipboard
=
new
ClipboardJS
(
'#copyNode'
,
{
text
:
trigger
=>
{
text
:
trigger
=>
{
const
codeStr
=
this
.
generateCode
()
const
codeStr
=
this
.
generateCode
()
this
.
$notify
({
this
.
$notify
({
title
:
'成功'
,
title
:
'成功'
,
message
:
'代码已复制到剪切板,可粘贴。'
,
message
:
'代码已复制到剪切板,可粘贴。'
,
type
:
'success'
type
:
'success'
})
})
return
codeStr
return
codeStr
}
}
})
})
clipboard
.
on
(
'error'
,
e
=>
{
clipboard
.
on
(
'error'
,
e
=>
{
this
.
$message
.
error
(
'代码复制失败'
)
this
.
$message
.
error
(
'代码复制失败'
)
})
})
},
},
methods
:
{
methods
:
{
activeFormItem
(
element
)
{
activeFormItem
(
element
)
{
this
.
activeData
=
element
this
.
activeData
=
element
this
.
activeId
=
element
.
formId
this
.
activeId
=
element
.
formId
},
},
onEnd
(
obj
,
a
)
{
onEnd
(
obj
,
a
)
{
if
(
obj
.
from
!==
obj
.
to
)
{
if
(
obj
.
from
!==
obj
.
to
)
{
this
.
activeData
=
tempActiveData
this
.
activeData
=
tempActiveData
this
.
activeId
=
this
.
idGlobal
this
.
activeId
=
this
.
idGlobal
}
}
},
},
addComponent
(
item
)
{
addComponent
(
item
)
{
const
clone
=
this
.
cloneComponent
(
item
)
const
clone
=
this
.
cloneComponent
(
item
)
this
.
drawingList
.
push
(
clone
)
this
.
drawingList
.
push
(
clone
)
this
.
activeFormItem
(
clone
)
this
.
activeFormItem
(
clone
)
},
},
cloneComponent
(
origin
)
{
cloneComponent
(
origin
)
{
const
clone
=
JSON
.
parse
(
JSON
.
stringify
(
origin
))
const
clone
=
JSON
.
parse
(
JSON
.
stringify
(
origin
))
clone
.
formId
=
++
this
.
idGlobal
clone
.
formId
=
++
this
.
idGlobal
clone
.
span
=
formConf
.
span
clone
.
span
=
formConf
.
span
clone
.
renderKey
=
+
new
Date
()
// 改变renderKey后可以实现强制更新组件
clone
.
renderKey
=
+
new
Date
()
// 改变renderKey后可以实现强制更新组件
if
(
!
clone
.
layout
)
clone
.
layout
=
'colFormItem'
if
(
!
clone
.
layout
)
clone
.
layout
=
'colFormItem'
if
(
clone
.
layout
===
'colFormItem'
)
{
if
(
clone
.
layout
===
'colFormItem'
)
{
clone
.
vModel
=
`field
${
this
.
idGlobal
}
`
clone
.
vModel
=
`field
${
this
.
idGlobal
}
`
clone
.
placeholder
!==
undefined
&&
(
clone
.
placeholder
+=
clone
.
label
)
clone
.
placeholder
!==
undefined
&&
(
clone
.
placeholder
+=
clone
.
label
)
tempActiveData
=
clone
tempActiveData
=
clone
}
else
if
(
clone
.
layout
===
'rowFormItem'
)
{
}
else
if
(
clone
.
layout
===
'rowFormItem'
)
{
delete
clone
.
label
delete
clone
.
label
clone
.
componentName
=
`row
${
this
.
idGlobal
}
`
clone
.
componentName
=
`row
${
this
.
idGlobal
}
`
clone
.
gutter
=
this
.
formConf
.
gutter
clone
.
gutter
=
this
.
formConf
.
gutter
tempActiveData
=
clone
tempActiveData
=
clone
}
}
return
tempActiveData
return
tempActiveData
},
},
AssembleFormData
()
{
AssembleFormData
()
{
this
.
formData
=
{
this
.
formData
=
{
fields
:
JSON
.
parse
(
JSON
.
stringify
(
this
.
drawingList
)),
fields
:
JSON
.
parse
(
JSON
.
stringify
(
this
.
drawingList
)),
...
this
.
formConf
...
this
.
formConf
}
}
},
},
generate
(
data
)
{
generate
(
data
)
{
const
func
=
this
[
`exec
${
titleCase
(
this
.
operationType
)}
`
]
const
func
=
this
[
`exec
${
titleCase
(
this
.
operationType
)}
`
]
this
.
generateConf
=
data
this
.
generateConf
=
data
func
&&
func
(
data
)
func
&&
func
(
data
)
},
},
execRun
(
data
)
{
execRun
(
data
)
{
this
.
AssembleFormData
()
this
.
AssembleFormData
()
this
.
drawerVisible
=
true
this
.
drawerVisible
=
true
},
},
execDownload
(
data
)
{
execDownload
(
data
)
{
const
codeStr
=
this
.
generateCode
()
const
codeStr
=
this
.
generateCode
()
const
blob
=
new
Blob
([
codeStr
],
{
type
:
'text/plain;charset=utf-8'
})
const
blob
=
new
Blob
([
codeStr
],
{
type
:
'text/plain;charset=utf-8'
})
this
.
$download
.
saveAs
(
blob
,
data
.
fileName
)
this
.
$download
.
saveAs
(
blob
,
data
.
fileName
)
},
},
execCopy
(
data
)
{
execCopy
(
data
)
{
document
.
getElementById
(
'copyNode'
).
click
()
document
.
getElementById
(
'copyNode'
).
click
()
},
},
empty
()
{
empty
()
{
this
.
$confirm
(
'确定要清空所有组件吗?'
,
'提示'
,
{
type
:
'warning'
}).
then
(
this
.
$confirm
(
'确定要清空所有组件吗?'
,
'提示'
,
{
type
:
'warning'
}).
then
(
()
=>
{
()
=>
{
this
.
drawingList
=
[]
this
.
drawingList
=
[]
}
}
)
)
},
},
drawingItemCopy
(
item
,
parent
)
{
drawingItemCopy
(
item
,
parent
)
{
let
clone
=
JSON
.
parse
(
JSON
.
stringify
(
item
))
let
clone
=
JSON
.
parse
(
JSON
.
stringify
(
item
))
clone
=
this
.
createIdAndKey
(
clone
)
clone
=
this
.
createIdAndKey
(
clone
)
parent
.
push
(
clone
)
parent
.
push
(
clone
)
this
.
activeFormItem
(
clone
)
this
.
activeFormItem
(
clone
)
},
},
createIdAndKey
(
item
)
{
createIdAndKey
(
item
)
{
item
.
formId
=
++
this
.
idGlobal
item
.
formId
=
++
this
.
idGlobal
item
.
renderKey
=
+
new
Date
()
item
.
renderKey
=
+
new
Date
()
if
(
item
.
layout
===
'colFormItem'
)
{
if
(
item
.
layout
===
'colFormItem'
)
{
item
.
vModel
=
`field
${
this
.
idGlobal
}
`
item
.
vModel
=
`field
${
this
.
idGlobal
}
`
}
else
if
(
item
.
layout
===
'rowFormItem'
)
{
}
else
if
(
item
.
layout
===
'rowFormItem'
)
{
item
.
componentName
=
`row
${
this
.
idGlobal
}
`
item
.
componentName
=
`row
${
this
.
idGlobal
}
`
}
}
if
(
Array
.
isArray
(
item
.
children
))
{
if
(
Array
.
isArray
(
item
.
children
))
{
item
.
children
=
item
.
children
.
map
(
childItem
=>
this
.
createIdAndKey
(
childItem
))
item
.
children
=
item
.
children
.
map
(
childItem
=>
this
.
createIdAndKey
(
childItem
))
}
}
return
item
return
item
},
},
drawingItemDelete
(
index
,
parent
)
{
drawingItemDelete
(
index
,
parent
)
{
parent
.
splice
(
index
,
1
)
parent
.
splice
(
index
,
1
)
this
.
$nextTick
(()
=>
{
this
.
$nextTick
(()
=>
{
const
len
=
this
.
drawingList
.
length
const
len
=
this
.
drawingList
.
length
if
(
len
)
{
if
(
len
)
{
this
.
activeFormItem
(
this
.
drawingList
[
len
-
1
])
this
.
activeFormItem
(
this
.
drawingList
[
len
-
1
])
}
}
})
})
},
},
generateCode
()
{
generateCode
()
{
const
{
type
}
=
this
.
generateConf
const
{
type
}
=
this
.
generateConf
this
.
AssembleFormData
()
this
.
AssembleFormData
()
const
script
=
vueScript
(
makeUpJs
(
this
.
formData
,
type
))
const
script
=
vueScript
(
makeUpJs
(
this
.
formData
,
type
))
const
html
=
vueTemplate
(
makeUpHtml
(
this
.
formData
,
type
))
const
html
=
vueTemplate
(
makeUpHtml
(
this
.
formData
,
type
))
const
css
=
cssStyle
(
makeUpCss
(
this
.
formData
))
const
css
=
cssStyle
(
makeUpCss
(
this
.
formData
))
return
beautifier
.
html
(
html
+
script
+
css
,
beautifierConf
.
html
)
return
beautifier
.
html
(
html
+
script
+
css
,
beautifierConf
.
html
)
},
},
download
()
{
download
()
{
this
.
dialogVisible
=
true
this
.
dialogVisible
=
true
this
.
showFileName
=
true
this
.
showFileName
=
true
this
.
operationType
=
'download'
this
.
operationType
=
'download'
},
},
run
()
{
run
()
{
this
.
dialogVisible
=
true
this
.
dialogVisible
=
true
this
.
showFileName
=
false
this
.
showFileName
=
false
this
.
operationType
=
'run'
this
.
operationType
=
'run'
},
},
copy
()
{
copy
()
{
this
.
dialogVisible
=
true
this
.
dialogVisible
=
true
this
.
showFileName
=
false
this
.
showFileName
=
false
this
.
operationType
=
'copy'
this
.
operationType
=
'copy'
},
},
tagChange
(
newTag
)
{
tagChange
(
newTag
)
{
newTag
=
this
.
cloneComponent
(
newTag
)
newTag
=
this
.
cloneComponent
(
newTag
)
newTag
.
vModel
=
this
.
activeData
.
vModel
newTag
.
vModel
=
this
.
activeData
.
vModel
newTag
.
formId
=
this
.
activeId
newTag
.
formId
=
this
.
activeId
newTag
.
span
=
this
.
activeData
.
span
newTag
.
span
=
this
.
activeData
.
span
delete
this
.
activeData
.
tag
delete
this
.
activeData
.
tag
delete
this
.
activeData
.
tagIcon
delete
this
.
activeData
.
tagIcon
delete
this
.
activeData
.
document
delete
this
.
activeData
.
document
Object
.
keys
(
newTag
).
forEach
(
key
=>
{
Object
.
keys
(
newTag
).
forEach
(
key
=>
{
if
(
this
.
activeData
[
key
]
!==
undefined
if
(
this
.
activeData
[
key
]
!==
undefined
&&
typeof
this
.
activeData
[
key
]
===
typeof
newTag
[
key
])
{
&&
typeof
this
.
activeData
[
key
]
===
typeof
newTag
[
key
])
{
newTag
[
key
]
=
this
.
activeData
[
key
]
newTag
[
key
]
=
this
.
activeData
[
key
]
}
}
})
})
this
.
activeData
=
newTag
this
.
activeData
=
newTag
this
.
updateDrawingList
(
newTag
,
this
.
drawingList
)
this
.
updateDrawingList
(
newTag
,
this
.
drawingList
)
},
},
updateDrawingList
(
newTag
,
list
)
{
updateDrawingList
(
newTag
,
list
)
{
const
index
=
list
.
findIndex
(
item
=>
item
.
formId
===
this
.
activeId
)
const
index
=
list
.
findIndex
(
item
=>
item
.
formId
===
this
.
activeId
)
if
(
index
>
-
1
)
{
if
(
index
>
-
1
)
{
list
.
splice
(
index
,
1
,
newTag
)
list
.
splice
(
index
,
1
,
newTag
)
}
else
{
}
else
{
list
.
forEach
(
item
=>
{
list
.
forEach
(
item
=>
{
if
(
Array
.
isArray
(
item
.
children
))
this
.
updateDrawingList
(
newTag
,
item
.
children
)
if
(
Array
.
isArray
(
item
.
children
))
this
.
updateDrawingList
(
newTag
,
item
.
children
)
})
})
}
}
}
}
}
}
}
}
</
script
>
</
script
>
<
style
lang=
'scss'
>
<
style
lang=
'scss'
>
body
,
html
{
body
,
html
{
margin
:
0
;
margin
:
0
;
padding
:
0
;
padding
:
0
;
background
:
#fff
;
background
:
#fff
;
-moz-osx-font-smoothing
:
grayscale
;
-moz-osx-font-smoothing
:
grayscale
;
-webkit-font-smoothing
:
antialiased
;
-webkit-font-smoothing
:
antialiased
;
text-rendering
:
optimizeLegibility
;
text-rendering
:
optimizeLegibility
;
font-family
:
-
apple-system
,
BlinkMacSystemFont
,
Segoe
UI
,
Helvetica
,
Arial
,
sans-serif
,
Apple
Color
Emoji
,
Segoe
UI
Emoji
;
font-family
:
-
apple-system
,
BlinkMacSystemFont
,
Segoe
UI
,
Helvetica
,
Arial
,
sans-serif
,
Apple
Color
Emoji
,
Segoe
UI
Emoji
;
}
}
input
,
textarea
{
input
,
textarea
{
font-family
:
-
apple-system
,
BlinkMacSystemFont
,
Segoe
UI
,
Helvetica
,
Arial
,
sans-serif
,
Apple
Color
Emoji
,
Segoe
UI
Emoji
;
font-family
:
-
apple-system
,
BlinkMacSystemFont
,
Segoe
UI
,
Helvetica
,
Arial
,
sans-serif
,
Apple
Color
Emoji
,
Segoe
UI
Emoji
;
}
}
.editor-tabs
{
.editor-tabs
{
background
:
#121315
;
background
:
#121315
;
.el-tabs__header
{
.el-tabs__header
{
margin
:
0
;
margin
:
0
;
border-bottom-color
:
#121315
;
border-bottom-color
:
#121315
;
.el-tabs__nav
{
.el-tabs__nav
{
border-color
:
#121315
;
border-color
:
#121315
;
}
}
}
}
.el-tabs__item
{
.el-tabs__item
{
height
:
32px
;
height
:
32px
;
line-height
:
32px
;
line-height
:
32px
;
color
:
#888a8e
;
color
:
#888a8e
;
border-left
:
1px
solid
#121315
!
important
;
border-left
:
1px
solid
#121315
!
important
;
background
:
#363636
;
background
:
#363636
;
margin-right
:
5px
;
margin-right
:
5px
;
user-select
:
none
;
user-select
:
none
;
}
}
.el-tabs__item.is-active
{
.el-tabs__item.is-active
{
background
:
#1e1e1e
;
background
:
#1e1e1e
;
border-bottom-color
:
#1e1e1e
!
important
;
border-bottom-color
:
#1e1e1e
!
important
;
color
:
#fff
;
color
:
#fff
;
}
}
.el-icon-edit
{
.el-icon-edit
{
color
:
#f1fa8c
;
color
:
#f1fa8c
;
}
}
.el-icon-document
{
.el-icon-document
{
color
:
#a95812
;
color
:
#a95812
;
}
}
}
}
// home
// home
.right-scrollbar
{
.right-scrollbar
{
.el-scrollbar__view
{
.el-scrollbar__view
{
padding
:
12px
18px
15px
15px
;
padding
:
12px
18px
15px
15px
;
}
}
}
}
.left-scrollbar
.el-scrollbar__wrap
{
.left-scrollbar
.el-scrollbar__wrap
{
box-sizing
:
border-box
;
box-sizing
:
border-box
;
overflow-x
:
hidden
!
important
;
overflow-x
:
hidden
!
important
;
margin-bottom
:
0
!
important
;
margin-bottom
:
0
!
important
;
}
}
.center-tabs
{
.center-tabs
{
.el-tabs__header
{
.el-tabs__header
{
margin-bottom
:
0
!
important
;
margin-bottom
:
0
!
important
;
}
}
.el-tabs__item
{
.el-tabs__item
{
width
:
50%
;
width
:
50%
;
text-align
:
center
;
text-align
:
center
;
}
}
.el-tabs__nav
{
.el-tabs__nav
{
width
:
100%
;
width
:
100%
;
}
}
}
}
.reg-item
{
.reg-item
{
padding
:
12px
6px
;
padding
:
12px
6px
;
background
:
#f8f8f8
;
background
:
#f8f8f8
;
position
:
relative
;
position
:
relative
;
border-radius
:
4px
;
border-radius
:
4px
;
.close-btn
{
.close-btn
{
position
:
absolute
;
position
:
absolute
;
right
:
-6px
;
right
:
-6px
;
top
:
-6px
;
top
:
-6px
;
display
:
block
;
display
:
block
;
width
:
16px
;
width
:
16px
;
height
:
16px
;
height
:
16px
;
line-height
:
16px
;
line-height
:
16px
;
background
:
rgba
(
0
,
0
,
0
,
0
.2
);
background
:
rgba
(
0
,
0
,
0
,
0
.2
);
border-radius
:
50%
;
border-radius
:
50%
;
color
:
#fff
;
color
:
#fff
;
text-align
:
center
;
text-align
:
center
;
z-index
:
1
;
z-index
:
1
;
cursor
:
pointer
;
cursor
:
pointer
;
font-size
:
12px
;
font-size
:
12px
;
&
:hover
{
&
:hover
{
background
:
rgba
(
210
,
23
,
23
,
0
.5
)
background
:
rgba
(
210
,
23
,
23
,
0
.5
)
}
}
}
}
&
+
.reg-item
{
&
+
.reg-item
{
margin-top
:
18px
;
margin-top
:
18px
;
}
}
}
}
.action-bar
{
.action-bar
{
&
.el-button
+
.el-button
{
&
.el-button
+
.el-button
{
margin-left
:
15px
;
margin-left
:
15px
;
}
}
&
i
{
&
i
{
font-size
:
20px
;
font-size
:
20px
;
vertical-align
:
middle
;
vertical-align
:
middle
;
position
:
relative
;
position
:
relative
;
top
:
-1px
;
top
:
-1px
;
}
}
}
}
.custom-tree-node
{
.custom-tree-node
{
width
:
100%
;
width
:
100%
;
font-size
:
14px
;
font-size
:
14px
;
.node-operation
{
.node-operation
{
float
:
right
;
float
:
right
;
}
}
i
[
class
*=
"el-icon"
]
+
i
[
class
*=
"el-icon"
]
{
i
[
class
*=
"el-icon"
]
+
i
[
class
*=
"el-icon"
]
{
margin-left
:
6px
;
margin-left
:
6px
;
}
}
.el-icon-plus
{
.el-icon-plus
{
color
:
#409EFF
;
color
:
#409EFF
;
}
}
.el-icon-delete
{
.el-icon-delete
{
color
:
#157a0c
;
color
:
#157a0c
;
}
}
}
}
.left-scrollbar
.el-scrollbar__view
{
.left-scrollbar
.el-scrollbar__view
{
overflow-x
:
hidden
;
overflow-x
:
hidden
;
}
}
.el-rate
{
.el-rate
{
display
:
inline-block
;
display
:
inline-block
;
vertical-align
:
text-top
;
vertical-align
:
text-top
;
}
}
.el-upload__tip
{
.el-upload__tip
{
line-height
:
1
.2
;
line-height
:
1
.2
;
}
}
$selectedColor
:
#f6f7ff
;
$selectedColor
:
#f6f7ff
;
$lighterBlue
:
#409EFF
;
$lighterBlue
:
#409EFF
;
.container
{
.container
{
position
:
relative
;
position
:
relative
;
width
:
100%
;
width
:
100%
;
height
:
100%
;
height
:
100%
;
}
}
.components-list
{
.components-list
{
padding
:
8px
;
padding
:
8px
;
box-sizing
:
border-box
;
box-sizing
:
border-box
;
height
:
100%
;
height
:
100%
;
.components-item
{
.components-item
{
display
:
inline-block
;
display
:
inline-block
;
width
:
48%
;
width
:
48%
;
margin
:
1%
;
margin
:
1%
;
transition
:
transform
0ms
!
important
;
transition
:
transform
0ms
!
important
;
}
}
}
}
.components-draggable
{
.components-draggable
{
padding-bottom
:
20px
;
padding-bottom
:
20px
;
}
}
.components-title
{
.components-title
{
font-size
:
14px
;
font-size
:
14px
;
color
:
#222
;
color
:
#222
;
margin
:
6px
2px
;
margin
:
6px
2px
;
.svg-icon
{
.svg-icon
{
color
:
#666
;
color
:
#666
;
font-size
:
18px
;
font-size
:
18px
;
}
}
}
}
.components-body
{
.components-body
{
padding
:
8px
10px
;
padding
:
8px
10px
;
background
:
$selectedColor
;
background
:
$selectedColor
;
font-size
:
12px
;
font-size
:
12px
;
cursor
:
move
;
cursor
:
move
;
border
:
1px
dashed
$selectedColor
;
border
:
1px
dashed
$selectedColor
;
border-radius
:
3px
;
border-radius
:
3px
;
.svg-icon
{
.svg-icon
{
color
:
#777
;
color
:
#777
;
font-size
:
15px
;
font-size
:
15px
;
}
}
&
:hover
{
&
:hover
{
border
:
1px
dashed
#787be8
;
border
:
1px
dashed
#787be8
;
color
:
#787be8
;
color
:
#787be8
;
.svg-icon
{
.svg-icon
{
color
:
#787be8
;
color
:
#787be8
;
}
}
}
}
}
}
.left-board
{
.left-board
{
width
:
260px
;
width
:
260px
;
position
:
absolute
;
position
:
absolute
;
left
:
0
;
left
:
0
;
top
:
0
;
top
:
0
;
height
:
100vh
;
height
:
100vh
;
}
}
.left-scrollbar
{
.left-scrollbar
{
height
:
calc
(
100vh
-
42px
);
height
:
calc
(
100vh
-
42px
);
overflow
:
hidden
;
overflow
:
hidden
;
}
}
.center-scrollbar
{
.center-scrollbar
{
height
:
calc
(
100vh
-
42px
);
height
:
calc
(
100vh
-
42px
);
overflow
:
hidden
;
overflow
:
hidden
;
border-left
:
1px
solid
#f1e8e8
;
border-left
:
1px
solid
#f1e8e8
;
border-right
:
1px
solid
#f1e8e8
;
border-right
:
1px
solid
#f1e8e8
;
box-sizing
:
border-box
;
box-sizing
:
border-box
;
}
}
.center-board
{
.center-board
{
height
:
100vh
;
height
:
100vh
;
width
:
auto
;
width
:
auto
;
margin
:
0
350px
0
260px
;
margin
:
0
350px
0
260px
;
box-sizing
:
border-box
;
box-sizing
:
border-box
;
}
}
.empty-info
{
.empty-info
{
position
:
absolute
;
position
:
absolute
;
top
:
46%
;
top
:
46%
;
left
:
0
;
left
:
0
;
right
:
0
;
right
:
0
;
text-align
:
center
;
text-align
:
center
;
font-size
:
18px
;
font-size
:
18px
;
color
:
#ccb1ea
;
color
:
#ccb1ea
;
letter-spacing
:
4px
;
letter-spacing
:
4px
;
}
}
.action-bar
{
.action-bar
{
position
:
relative
;
position
:
relative
;
height
:
42px
;
height
:
42px
;
text-align
:
right
;
text-align
:
right
;
padding
:
0
15px
;
padding
:
0
15px
;
box-sizing
:
border-box
;;
box-sizing
:
border-box
;;
border
:
1px
solid
#f1e8e8
;
border
:
1px
solid
#f1e8e8
;
border-top
:
none
;
border-top
:
none
;
border-left
:
none
;
border-left
:
none
;
.delete-btn
{
.delete-btn
{
color
:
#F56C6C
;
color
:
#F56C6C
;
}
}
}
}
.logo-wrapper
{
.logo-wrapper
{
position
:
relative
;
position
:
relative
;
height
:
42px
;
height
:
42px
;
background
:
#fff
;
background
:
#fff
;
border-bottom
:
1px
solid
#f1e8e8
;
border-bottom
:
1px
solid
#f1e8e8
;
box-sizing
:
border-box
;
box-sizing
:
border-box
;
}
}
.logo
{
.logo
{
position
:
absolute
;
position
:
absolute
;
left
:
12px
;
left
:
12px
;
top
:
6px
;
top
:
6px
;
line-height
:
30px
;
line-height
:
30px
;
color
:
#00afff
;
color
:
#00afff
;
font-weight
:
600
;
font-weight
:
600
;
font-size
:
17px
;
font-size
:
17px
;
white-space
:
nowrap
;
white-space
:
nowrap
;
>
img
{
>
img
{
width
:
30px
;
width
:
30px
;
height
:
30px
;
height
:
30px
;
vertical-align
:
top
;
vertical-align
:
top
;
}
}
.github
{
.github
{
display
:
inline-block
;
display
:
inline-block
;
vertical-align
:
sub
;
vertical-align
:
sub
;
margin-left
:
15px
;
margin-left
:
15px
;
>
img
{
>
img
{
height
:
22px
;
height
:
22px
;
}
}
}
}
}
}
.center-board-row
{
.center-board-row
{
padding
:
12px
12px
15px
12px
;
padding
:
12px
12px
15px
12px
;
box-sizing
:
border-box
;
box-sizing
:
border-box
;
&
>
.el-form
{
&
>
.el-form
{
// 69 = 12+15+42
// 69 = 12+15+42
height
:
calc
(
100vh
-
69px
);
height
:
calc
(
100vh
-
69px
);
}
}
}
}
.drawing-board
{
.drawing-board
{
height
:
100%
;
height
:
100%
;
position
:
relative
;
position
:
relative
;
.components-body
{
.components-body
{
padding
:
0
;
padding
:
0
;
margin
:
0
;
margin
:
0
;
font-size
:
0
;
font-size
:
0
;
}
}
.sortable-ghost
{
.sortable-ghost
{
position
:
relative
;
position
:
relative
;
display
:
block
;
display
:
block
;
overflow
:
hidden
;
overflow
:
hidden
;
&
:
:
before
{
&
:
:
before
{
content
:
" "
;
content
:
" "
;
position
:
absolute
;
position
:
absolute
;
left
:
0
;
left
:
0
;
right
:
0
;
right
:
0
;
top
:
0
;
top
:
0
;
height
:
3px
;
height
:
3px
;
background
:
rgb
(
89
,
89
,
223
);
background
:
rgb
(
89
,
89
,
223
);
z-index
:
2
;
z-index
:
2
;
}
}
}
}
.components-item.sortable-ghost
{
.components-item.sortable-ghost
{
width
:
100%
;
width
:
100%
;
height
:
60px
;
height
:
60px
;
background-color
:
$selectedColor
;
background-color
:
$selectedColor
;
}
}
.active-from-item
{
.active-from-item
{
&
>
.el-form-item
{
&
>
.el-form-item
{
background
:
$selectedColor
;
background
:
$selectedColor
;
border-radius
:
6px
;
border-radius
:
6px
;
}
}
&
>
.drawing-item-copy
,
&
>
.drawing-item-delete
{
&
>
.drawing-item-copy
,
&
>
.drawing-item-delete
{
display
:
initial
;
display
:
initial
;
}
}
&
>
.component-name
{
&
>
.component-name
{
color
:
$lighterBlue
;
color
:
$lighterBlue
;
}
}
}
}
.el-form-item
{
.el-form-item
{
margin-bottom
:
15px
;
margin-bottom
:
15px
;
}
}
}
}
.drawing-item
{
.drawing-item
{
position
:
relative
;
position
:
relative
;
cursor
:
move
;
cursor
:
move
;
&
.unfocus-bordered
:not
(
.activeFromItem
)
>
div
:first-child
{
&
.unfocus-bordered
:not
(
.activeFromItem
)
>
div
:first-child
{
border
:
1px
dashed
#ccc
;
border
:
1px
dashed
#ccc
;
}
}
.el-form-item
{
.el-form-item
{
padding
:
12px
10px
;
padding
:
12px
10px
;
}
}
}
}
.drawing-row-item
{
.drawing-row-item
{
position
:
relative
;
position
:
relative
;
cursor
:
move
;
cursor
:
move
;
box-sizing
:
border-box
;
box-sizing
:
border-box
;
border
:
1px
dashed
#ccc
;
border
:
1px
dashed
#ccc
;
border-radius
:
3px
;
border-radius
:
3px
;
padding
:
0
2px
;
padding
:
0
2px
;
margin-bottom
:
15px
;
margin-bottom
:
15px
;
.drawing-row-item
{
.drawing-row-item
{
margin-bottom
:
2px
;
margin-bottom
:
2px
;
}
}
.el-col
{
.el-col
{
margin-top
:
22px
;
margin-top
:
22px
;
}
}
.el-form-item
{
.el-form-item
{
margin-bottom
:
0
;
margin-bottom
:
0
;
}
}
.drag-wrapper
{
.drag-wrapper
{
min-height
:
80px
;
min-height
:
80px
;
}
}
&
.active-from-item
{
&
.active-from-item
{
border
:
1px
dashed
$lighterBlue
;
border
:
1px
dashed
$lighterBlue
;
}
}
.component-name
{
.component-name
{
position
:
absolute
;
position
:
absolute
;
top
:
0
;
top
:
0
;
left
:
0
;
left
:
0
;
font-size
:
12px
;
font-size
:
12px
;
color
:
#bbb
;
color
:
#bbb
;
display
:
inline-block
;
display
:
inline-block
;
padding
:
0
6px
;
padding
:
0
6px
;
}
}
}
}
.drawing-item
,
.drawing-row-item
{
.drawing-item
,
.drawing-row-item
{
&
:hover
{
&
:hover
{
&
>
.el-form-item
{
&
>
.el-form-item
{
background
:
$selectedColor
;
background
:
$selectedColor
;
border-radius
:
6px
;
border-radius
:
6px
;
}
}
&
>
.drawing-item-copy
,
&
>
.drawing-item-delete
{
&
>
.drawing-item-copy
,
&
>
.drawing-item-delete
{
display
:
initial
;
display
:
initial
;
}
}
}
}
&
>
.drawing-item-copy
,
&
>
.drawing-item-delete
{
&
>
.drawing-item-copy
,
&
>
.drawing-item-delete
{
display
:
none
;
display
:
none
;
position
:
absolute
;
position
:
absolute
;
top
:
-10px
;
top
:
-10px
;
width
:
22px
;
width
:
22px
;
height
:
22px
;
height
:
22px
;
line-height
:
22px
;
line-height
:
22px
;
text-align
:
center
;
text-align
:
center
;
border-radius
:
50%
;
border-radius
:
50%
;
font-size
:
12px
;
font-size
:
12px
;
border
:
1px
solid
;
border
:
1px
solid
;
cursor
:
pointer
;
cursor
:
pointer
;
z-index
:
1
;
z-index
:
1
;
}
}
&
>
.drawing-item-copy
{
&
>
.drawing-item-copy
{
right
:
56px
;
right
:
56px
;
border-color
:
$lighterBlue
;
border-color
:
$lighterBlue
;
color
:
$lighterBlue
;
color
:
$lighterBlue
;
background
:
#fff
;
background
:
#fff
;
&
:hover
{
&
:hover
{
background
:
$lighterBlue
;
background
:
$lighterBlue
;
color
:
#fff
;
color
:
#fff
;
}
}
}
}
&
>
.drawing-item-delete
{
&
>
.drawing-item-delete
{
right
:
24px
;
right
:
24px
;
border-color
:
#F56C6C
;
border-color
:
#F56C6C
;
color
:
#F56C6C
;
color
:
#F56C6C
;
background
:
#fff
;
background
:
#fff
;
&
:hover
{
&
:hover
{
background
:
#F56C6C
;
background
:
#F56C6C
;
color
:
#fff
;
color
:
#fff
;
}
}
}
}
}
}
</
style
>
</
style
>
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论