Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
工
工位预约
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
jiatao
工位预约
Commits
38ed092d
Commit
38ed092d
authored
Apr 27, 2025
by
RuoYi
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
remove all semicolons
parent
27a037ed
Changes
92
Hide whitespace changes
Inline
Side-by-side
Showing
92 changed files
with
2285 additions
and
2287 deletions
+2285
-2287
index-tree.vue.vm
ruoyi-generator/src/main/resources/vm/vue/index-tree.vue.vm
+60
-60
index.vue.vm
ruoyi-generator/src/main/resources/vm/vue/index.vue.vm
+56
-56
index-tree.vue.vm
...-generator/src/main/resources/vm/vue/v3/index-tree.vue.vm
+67
-67
index.vue.vm
ruoyi-generator/src/main/resources/vm/vue/v3/index.vue.vm
+73
-73
App.vue
ruoyi-ui/src/App.vue
+2
-2
day.vue
ruoyi-ui/src/components/Crontab/day.vue
+25
-25
hour.vue
ruoyi-ui/src/components/Crontab/hour.vue
+16
-16
index.vue
ruoyi-ui/src/components/Crontab/index.vue
+87
-87
min.vue
ruoyi-ui/src/components/Crontab/min.vue
+15
-15
month.vue
ruoyi-ui/src/components/Crontab/month.vue
+15
-15
result.vue
ruoyi-ui/src/components/Crontab/result.vue
+188
-189
second.vue
ruoyi-ui/src/components/Crontab/second.vue
+15
-15
week.vue
ruoyi-ui/src/components/Crontab/week.vue
+22
-22
year.vue
ruoyi-ui/src/components/Crontab/year.vue
+18
-18
index.vue
ruoyi-ui/src/components/DictTag/index.vue
+3
-3
index.vue
ruoyi-ui/src/components/Editor/index.vue
+58
-58
index.vue
ruoyi-ui/src/components/FileUpload/index.vue
+48
-48
index.vue
ruoyi-ui/src/components/HeaderSearch/index.vue
+1
-1
index.vue
ruoyi-ui/src/components/ImagePreview/index.vue
+16
-16
index.vue
ruoyi-ui/src/components/ImageUpload/index.vue
+53
-53
index.vue
ruoyi-ui/src/components/Pagination/index.vue
+1
-1
index.vue
ruoyi-ui/src/components/RightToolbar/index.vue
+15
-15
index.vue
ruoyi-ui/src/components/SizeSelect/index.vue
+0
-1
index.vue
ruoyi-ui/src/components/TopNav/index.vue
+46
-46
index.vue
ruoyi-ui/src/components/iFrame/index.vue
+7
-7
drag.js
ruoyi-ui/src/directive/dialog/drag.js
+28
-28
dragHeight.js
ruoyi-ui/src/directive/dialog/dragHeight.js
+17
-17
dragWidth.js
ruoyi-ui/src/directive/dialog/dragWidth.js
+14
-14
index.js
ruoyi-ui/src/directive/index.js
+1
-1
clipboard.js
ruoyi-ui/src/directive/module/clipboard.js
+20
-20
hasPermi.js
ruoyi-ui/src/directive/permission/hasPermi.js
+1
-1
hasRole.js
ruoyi-ui/src/directive/permission/hasRole.js
+1
-1
index.vue
ruoyi-ui/src/layout/components/IframeToggle/index.vue
+5
-5
index.vue
ruoyi-ui/src/layout/components/InnerLink/index.vue
+11
-11
index.vue
ruoyi-ui/src/layout/components/Settings/index.vue
+8
-8
Logo.vue
ruoyi-ui/src/layout/components/Sidebar/Logo.vue
+1
-1
SidebarItem.vue
ruoyi-ui/src/layout/components/Sidebar/SidebarItem.vue
+2
-2
index.vue
ruoyi-ui/src/layout/components/Sidebar/index.vue
+12
-12
index.vue
ruoyi-ui/src/layout/components/TagsView/index.vue
+5
-5
index.vue
ruoyi-ui/src/layout/index.vue
+1
-1
main.js
ruoyi-ui/src/main.js
+4
-4
auth.js
ruoyi-ui/src/plugins/auth.js
+4
-4
cache.js
ruoyi-ui/src/plugins/cache.js
+2
-2
download.js
ruoyi-ui/src/plugins/download.js
+15
-15
modal.js
ruoyi-ui/src/plugins/modal.js
+3
-3
tab.js
ruoyi-ui/src/plugins/tab.js
+16
-16
index.js
ruoyi-ui/src/router/index.js
+2
-2
getters.js
ruoyi-ui/src/store/getters.js
+1
-1
app.js
ruoyi-ui/src/store/modules/app.js
+1
-1
permission.js
ruoyi-ui/src/store/modules/permission.js
+2
-2
Dict.js
ruoyi-ui/src/utils/dict/Dict.js
+1
-1
DictMeta.js
ruoyi-ui/src/utils/dict/DictMeta.js
+1
-1
DictOptions.js
ruoyi-ui/src/utils/dict/DictOptions.js
+1
-1
index.js
ruoyi-ui/src/utils/index.js
+1
-1
permission.js
ruoyi-ui/src/utils/permission.js
+4
-4
request.js
ruoyi-ui/src/utils/request.js
+31
-31
ruoyi.js
ruoyi-ui/src/utils/ruoyi.js
+55
-55
index.vue
ruoyi-ui/src/views/index.vue
+3
-3
login.vue
ruoyi-ui/src/views/login.vue
+26
-26
index.vue
ruoyi-ui/src/views/monitor/cache/index.vue
+16
-16
list.vue
ruoyi-ui/src/views/monitor/cache/list.vue
+32
-32
index.vue
ruoyi-ui/src/views/monitor/druid/index.vue
+4
-4
index.vue
ruoyi-ui/src/views/monitor/job/index.vue
+66
-66
log.vue
ruoyi-ui/src/views/monitor/job/log.vue
+35
-35
index.vue
ruoyi-ui/src/views/monitor/logininfor/index.vue
+31
-31
index.vue
ruoyi-ui/src/views/monitor/online/index.vue
+17
-17
index.vue
ruoyi-ui/src/views/monitor/operlog/index.vue
+29
-29
index.vue
ruoyi-ui/src/views/monitor/server/index.vue
+9
-9
register.vue
ruoyi-ui/src/views/register.vue
+18
-18
index.vue
ruoyi-ui/src/views/system/config/index.vue
+43
-43
index.vue
ruoyi-ui/src/views/system/dept/index.vue
+51
-51
data.vue
ruoyi-ui/src/views/system/dict/data.vue
+55
-55
index.vue
ruoyi-ui/src/views/system/dict/index.vue
+43
-43
index.vue
ruoyi-ui/src/views/system/menu/index.vue
+55
-55
index.vue
ruoyi-ui/src/views/system/notice/index.vue
+38
-38
index.vue
ruoyi-ui/src/views/system/post/index.vue
+39
-39
authUser.vue
ruoyi-ui/src/views/system/role/authUser.vue
+30
-30
index.vue
ruoyi-ui/src/views/system/role/index.vue
+102
-102
selectUser.vue
ruoyi-ui/src/views/system/role/selectUser.vue
+23
-23
authRole.vue
ruoyi-ui/src/views/system/user/authRole.vue
+26
-26
index.vue
ruoyi-ui/src/views/system/user/index.vue
+99
-99
index.vue
ruoyi-ui/src/views/system/user/profile/index.vue
+11
-11
resetPwd.vue
ruoyi-ui/src/views/system/user/profile/resetPwd.vue
+10
-10
userAvatar.vue
ruoyi-ui/src/views/system/user/profile/userAvatar.vue
+29
-29
userInfo.vue
ruoyi-ui/src/views/system/user/profile/userInfo.vue
+10
-10
basicInfoForm.vue
ruoyi-ui/src/views/tool/gen/basicInfoForm.vue
+2
-2
createTable.vue
ruoyi-ui/src/views/tool/gen/createTable.vue
+10
-10
editTable.vue
ruoyi-ui/src/views/tool/gen/editTable.vue
+37
-37
genInfoForm.vue
ruoyi-ui/src/views/tool/gen/genInfoForm.vue
+16
-16
importTable.vue
ruoyi-ui/src/views/tool/gen/importTable.vue
+21
-21
index.vue
ruoyi-ui/src/views/tool/gen/index.vue
+67
-67
index.vue
ruoyi-ui/src/views/tool/swagger/index.vue
+4
-4
No files found.
ruoyi-generator/src/main/resources/vm/vue/index-tree.vue.vm
View file @
38ed092d
...
...
@@ -283,9 +283,9 @@
</template>
<script>
import { list${BusinessName}, get${BusinessName}, del${BusinessName}, add${BusinessName}, update${BusinessName} } from "@/api/${moduleName}/${businessName}"
;
import Treeselect from "@riophae/vue-treeselect"
;
import "@riophae/vue-treeselect/dist/vue-treeselect.css"
;
import { list${BusinessName}, get${BusinessName}, del${BusinessName}, add${BusinessName}, update${BusinessName} } from "@/api/${moduleName}/${businessName}"
import Treeselect from "@riophae/vue-treeselect"
import "@riophae/vue-treeselect/dist/vue-treeselect.css"
export default {
name: "${BusinessName}",
...
...
@@ -346,18 +346,18 @@ export default {
#end
#end
}
}
;
}
},
created() {
this.getList()
;
this.getList()
},
methods: {
/** 查询${functionName}列表 */
getList() {
this.loading = true
;
this.loading = true
#foreach ($column in $columns)
#if($column.htmlType == "datetime" && $column.queryType == "BETWEEN")
this.queryParams.params = {}
;
this.queryParams.params = {}
#break
#end
#end
...
...
@@ -365,40 +365,40 @@ export default {
#if($column.htmlType == "datetime" && $column.queryType == "BETWEEN")
#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
if (null != this.daterange${AttrName} && '' != this.daterange${AttrName}) {
this.queryParams.params["begin${AttrName}"] = this.daterange${AttrName}[0]
;
this.queryParams.params["end${AttrName}"] = this.daterange${AttrName}[1]
;
this.queryParams.params["begin${AttrName}"] = this.daterange${AttrName}[0]
this.queryParams.params["end${AttrName}"] = this.daterange${AttrName}[1]
}
#end
#end
list${BusinessName}(this.queryParams).then(response => {
this.${businessName}List = this.handleTree(response.data, "${treeCode}", "${treeParentCode}")
;
this.loading = false
;
})
;
this.${businessName}List = this.handleTree(response.data, "${treeCode}", "${treeParentCode}")
this.loading = false
})
},
/** 转换${functionName}数据结构 */
normalizer(node) {
if (node.children && !node.children.length) {
delete node.children
;
delete node.children
}
return {
id: node.${treeCode},
label: node.${treeName},
children: node.children
}
;
}
},
/** 查询${functionName}下拉树结构 */
getTreeselect() {
list${BusinessName}().then(response => {
this.${businessName}Options = []
;
const data = { ${treeCode}: 0, ${treeName}: '顶级节点', children: [] }
;
data.children = this.handleTree(response.data, "${treeCode}", "${treeParentCode}")
;
this.${businessName}Options.push(data)
;
})
;
this.${businessName}Options = []
const data = { ${treeCode}: 0, ${treeName}: '顶级节点', children: [] }
data.children = this.handleTree(response.data, "${treeCode}", "${treeParentCode}")
this.${businessName}Options.push(data)
})
},
// 取消按钮
cancel() {
this.open = false
;
this.reset()
;
this.open = false
this.reset()
},
// 表单重置
reset() {
...
...
@@ -410,61 +410,61 @@ export default {
$column.javaField: null#if($foreach.count != $columns.size()),#end
#end
#end
}
;
this.resetForm("form")
;
}
this.resetForm("form")
},
/** 搜索按钮操作 */
handleQuery() {
this.getList()
;
this.getList()
},
/** 重置按钮操作 */
resetQuery() {
#foreach ($column in $columns)
#if($column.htmlType == "datetime" && $column.queryType == "BETWEEN")
#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
this.daterange${AttrName} = []
;
this.daterange${AttrName} = []
#end
#end
this.resetForm("queryForm")
;
this.handleQuery()
;
this.resetForm("queryForm")
this.handleQuery()
},
/** 新增按钮操作 */
handleAdd(row) {
this.reset()
;
this.getTreeselect()
;
this.reset()
this.getTreeselect()
if (row != null && row.${treeCode}) {
this.form.${treeParentCode} = row.${treeCode}
;
this.form.${treeParentCode} = row.${treeCode}
} else {
this.form.${treeParentCode} = 0
;
this.form.${treeParentCode} = 0
}
this.open = true
;
this.title = "添加${functionName}"
;
this.open = true
this.title = "添加${functionName}"
},
/** 展开/折叠操作 */
toggleExpandAll() {
this.refreshTable = false
;
this.isExpandAll = !this.isExpandAll
;
this.refreshTable = false
this.isExpandAll = !this.isExpandAll
this.$nextTick(() => {
this.refreshTable = true
;
})
;
this.refreshTable = true
})
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset()
;
this.getTreeselect()
;
this.reset()
this.getTreeselect()
if (row != null) {
this.form.${treeParentCode} = row.${treeParentCode}
;
this.form.${treeParentCode} = row.${treeParentCode}
}
get${BusinessName}(row.${pkColumn.javaField}).then(response => {
this.form = response.data
;
this.form = response.data
#foreach ($column in $columns)
#if($column.htmlType == "checkbox")
this.form.$column.javaField = this.form.${column.javaField}.split(",")
;
this.form.$column.javaField = this.form.${column.javaField}.split(",")
#end
#end
this.open = true
;
this.title = "修改${functionName}"
;
})
;
this.open = true
this.title = "修改${functionName}"
})
},
/** 提交按钮 */
submitForm() {
...
...
@@ -472,34 +472,34 @@ export default {
if (valid) {
#foreach ($column in $columns)
#if($column.htmlType == "checkbox")
this.form.$column.javaField = this.form.${column.javaField}.join(",")
;
this.form.$column.javaField = this.form.${column.javaField}.join(",")
#end
#end
if (this.form.${pkColumn.javaField} != null) {
update${BusinessName}(this.form).then(response => {
this.#[[$modal]]#.msgSuccess("修改成功")
;
this.open = false
;
this.getList()
;
})
;
this.#[[$modal]]#.msgSuccess("修改成功")
this.open = false
this.getList()
})
} else {
add${BusinessName}(this.form).then(response => {
this.#[[$modal]]#.msgSuccess("新增成功")
;
this.open = false
;
this.getList()
;
})
;
this.#[[$modal]]#.msgSuccess("新增成功")
this.open = false
this.getList()
})
}
}
})
;
})
},
/** 删除按钮操作 */
handleDelete(row) {
this.#[[$modal]]#.confirm('是否确认删除${functionName}编号为"' + row.${pkColumn.javaField} + '"的数据项?').then(function() {
return del${BusinessName}(row.${pkColumn.javaField})
;
return del${BusinessName}(row.${pkColumn.javaField})
}).then(() => {
this.getList()
;
this.#[[$modal]]#.msgSuccess("删除成功")
;
}).catch(() => {})
;
this.getList()
this.#[[$modal]]#.msgSuccess("删除成功")
}).catch(() => {})
}
}
}
;
}
</script>
ruoyi-generator/src/main/resources/vm/vue/index.vue.vm
View file @
38ed092d
...
...
@@ -353,7 +353,7 @@
</template>
<script>
import { list${BusinessName}, get${BusinessName}, del${BusinessName}, add${BusinessName}, update${BusinessName} } from "@/api/${moduleName}/${businessName}"
;
import { list${BusinessName}, get${BusinessName}, del${BusinessName}, add${BusinessName}, update${BusinessName} } from "@/api/${moduleName}/${businessName}"
export default {
name: "${BusinessName}",
...
...
@@ -423,18 +423,18 @@ export default {
#end
#end
}
}
;
}
},
created() {
this.getList()
;
this.getList()
},
methods: {
/** 查询${functionName}列表 */
getList() {
this.loading = true
;
this.loading = true
#foreach ($column in $columns)
#if($column.htmlType == "datetime" && $column.queryType == "BETWEEN")
this.queryParams.params = {}
;
this.queryParams.params = {}
#break
#end
#end
...
...
@@ -442,21 +442,21 @@ export default {
#if($column.htmlType == "datetime" && $column.queryType == "BETWEEN")
#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
if (null != this.daterange${AttrName} && '' != this.daterange${AttrName}) {
this.queryParams.params["begin${AttrName}"] = this.daterange${AttrName}[0]
;
this.queryParams.params["end${AttrName}"] = this.daterange${AttrName}[1]
;
this.queryParams.params["begin${AttrName}"] = this.daterange${AttrName}[0]
this.queryParams.params["end${AttrName}"] = this.daterange${AttrName}[1]
}
#end
#end
list${BusinessName}(this.queryParams).then(response => {
this.${businessName}List = response.rows
;
this.total = response.total
;
this.loading = false
;
})
;
this.${businessName}List = response.rows
this.total = response.total
this.loading = false
})
},
// 取消按钮
cancel() {
this.open = false
;
this.reset()
;
this.open = false
this.reset()
},
// 表单重置
reset() {
...
...
@@ -468,27 +468,27 @@ export default {
$column.javaField: null#if($foreach.count != $columns.size()),#end
#end
#end
}
;
}
#if($table.sub)
this.${subclassName}List = []
;
this.${subclassName}List = []
#end
this.resetForm("form")
;
this.resetForm("form")
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1
;
this.getList()
;
this.queryParams.pageNum = 1
this.getList()
},
/** 重置按钮操作 */
resetQuery() {
#foreach ($column in $columns)
#if($column.htmlType == "datetime" && $column.queryType == "BETWEEN")
#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
this.daterange${AttrName} = []
;
this.daterange${AttrName} = []
#end
#end
this.resetForm("queryForm")
;
this.handleQuery()
;
this.resetForm("queryForm")
this.handleQuery()
},
// 多选框选中数据
handleSelectionChange(selection) {
...
...
@@ -498,27 +498,27 @@ export default {
},
/** 新增按钮操作 */
handleAdd() {
this.reset()
;
this.open = true
;
this.title = "添加${functionName}"
;
this.reset()
this.open = true
this.title = "添加${functionName}"
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset()
;
this.reset()
const ${pkColumn.javaField} = row.${pkColumn.javaField} || this.ids
get${BusinessName}(${pkColumn.javaField}).then(response => {
this.form = response.data
;
this.form = response.data
#foreach ($column in $columns)
#if($column.htmlType == "checkbox")
this.form.$column.javaField = this.form.${column.javaField}.split(",")
;
this.form.$column.javaField = this.form.${column.javaField}.split(",")
#end
#end
#if($table.sub)
this.${subclassName}List = response.data.${subclassName}List
;
this.${subclassName}List = response.data.${subclassName}List
#end
this.open = true
;
this.title = "修改${functionName}"
;
})
;
this.open = true
this.title = "修改${functionName}"
})
},
/** 提交按钮 */
submitForm() {
...
...
@@ -526,64 +526,64 @@ export default {
if (valid) {
#foreach ($column in $columns)
#if($column.htmlType == "checkbox")
this.form.$column.javaField = this.form.${column.javaField}.join(",")
;
this.form.$column.javaField = this.form.${column.javaField}.join(",")
#end
#end
#if($table.sub)
this.form.${subclassName}List = this.${subclassName}List
;
this.form.${subclassName}List = this.${subclassName}List
#end
if (this.form.${pkColumn.javaField} != null) {
update${BusinessName}(this.form).then(response => {
this.#[[$modal]]#.msgSuccess("修改成功")
;
this.open = false
;
this.getList()
;
})
;
this.#[[$modal]]#.msgSuccess("修改成功")
this.open = false
this.getList()
})
} else {
add${BusinessName}(this.form).then(response => {
this.#[[$modal]]#.msgSuccess("新增成功")
;
this.open = false
;
this.getList()
;
})
;
this.#[[$modal]]#.msgSuccess("新增成功")
this.open = false
this.getList()
})
}
}
})
;
})
},
/** 删除按钮操作 */
handleDelete(row) {
const ${pkColumn.javaField}s = row.${pkColumn.javaField} || this.ids
;
const ${pkColumn.javaField}s = row.${pkColumn.javaField} || this.ids
this.#[[$modal]]#.confirm('是否确认删除${functionName}编号为"' + ${pkColumn.javaField}s + '"的数据项?').then(function() {
return del${BusinessName}(${pkColumn.javaField}s)
;
return del${BusinessName}(${pkColumn.javaField}s)
}).then(() => {
this.getList()
;
this.#[[$modal]]#.msgSuccess("删除成功")
;
}).catch(() => {})
;
this.getList()
this.#[[$modal]]#.msgSuccess("删除成功")
}).catch(() => {})
},
#if($table.sub)
/** ${subTable.functionName}序号 */
row${subClassName}Index({ row, rowIndex }) {
row.index = rowIndex + 1
;
row.index = rowIndex + 1
},
/** ${subTable.functionName}添加按钮操作 */
handleAdd${subClassName}() {
let obj = {}
;
let obj = {}
#foreach($column in $subTable.columns)
#if($column.pk || $column.javaField == ${subTableFkclassName})
#elseif($column.list && "" != $javaField)
obj.$column.javaField = ""
;
obj.$column.javaField = ""
#end
#end
this.${subclassName}List.push(obj)
;
this.${subclassName}List.push(obj)
},
/** ${subTable.functionName}删除按钮操作 */
handleDelete${subClassName}() {
if (this.checked${subClassName}.length == 0) {
this.#[[$modal]]#.msgError("请先选择要删除的${subTable.functionName}数据")
;
this.#[[$modal]]#.msgError("请先选择要删除的${subTable.functionName}数据")
} else {
const ${subclassName}List = this.${subclassName}List
;
const checked${subClassName} = this.checked${subClassName}
;
const ${subclassName}List = this.${subclassName}List
const checked${subClassName} = this.checked${subClassName}
this.${subclassName}List = ${subclassName}List.filter(function(item) {
return checked${subClassName}.indexOf(item.index) == -1
})
;
})
}
},
/** 复选框选中数据 */
...
...
@@ -598,5 +598,5 @@ export default {
}, `${businessName}_#[[${new Date().getTime()}]]#.xlsx`)
}
}
}
;
}
</script>
ruoyi-generator/src/main/resources/vm/vue/v3/index-tree.vue.vm
View file @
38ed092d
...
...
@@ -271,26 +271,26 @@
</template>
<script
setup
name=
"${BusinessName}"
>
import
{
list$
{
BusinessName
},
get
$
{
BusinessName
},
del$
{
BusinessName
},
add$
{
BusinessName
},
update$
{
BusinessName
}
}
from
"
@/api/${moduleName}/${businessName}
"
;
import
{
list$
{
BusinessName
},
get
$
{
BusinessName
},
del$
{
BusinessName
},
add$
{
BusinessName
},
update$
{
BusinessName
}
}
from
"
@/api/${moduleName}/${businessName}
"
const
{
proxy
}
=
getCurrentInstance
()
;
const
{
proxy
}
=
getCurrentInstance
()
#
if
(
$
{
dicts
}
!=
''
)
#
set
(
$dictsNoSymbol
=
$dicts
.
replace
(
"
'
"
,
""
))
const
{
$
{
dictsNoSymbol
}
}
=
proxy
.
useDict
(
$
{
dicts
})
;
const
{
$
{
dictsNoSymbol
}
}
=
proxy
.
useDict
(
$
{
dicts
})
#
end
const
$
{
businessName
}
List
=
ref
([])
;
const
$
{
businessName
}
Options
=
ref
([])
;
const
open
=
ref
(
false
)
;
const
loading
=
ref
(
true
)
;
const
showSearch
=
ref
(
true
)
;
const
title
=
ref
(
""
)
;
const
isExpandAll
=
ref
(
true
)
;
const
refreshTable
=
ref
(
true
)
;
const
$
{
businessName
}
List
=
ref
([])
const
$
{
businessName
}
Options
=
ref
([])
const
open
=
ref
(
false
)
const
loading
=
ref
(
true
)
const
showSearch
=
ref
(
true
)
const
title
=
ref
(
""
)
const
isExpandAll
=
ref
(
true
)
const
refreshTable
=
ref
(
true
)
#
foreach
(
$column
in
$columns
)
#
if
(
$column
.
htmlType
==
"
datetime
"
&&
$column
.
queryType
==
"
BETWEEN
"
)
#
set
(
$AttrName
=
$column
.
javaField
.
substring
(
0
,
1
).
toUpperCase
()
+
$
{
column
.
javaField
.
substring
(
1
)})
const
daterange$
{
AttrName
}
=
ref
([])
;
const
daterange$
{
AttrName
}
=
ref
([])
#
end
#
end
...
...
@@ -318,16 +318,16 @@ const data = reactive({
#
end
#
end
}
})
;
})
const
{
queryParams
,
form
,
rules
}
=
toRefs
(
data
)
;
const
{
queryParams
,
form
,
rules
}
=
toRefs
(
data
)
/** 查询${functionName}列表 */
function
getList
()
{
loading
.
value
=
true
;
loading
.
value
=
true
#
foreach
(
$column
in
$columns
)
#
if
(
$column
.
htmlType
==
"
datetime
"
&&
$column
.
queryType
==
"
BETWEEN
"
)
queryParams
.
value
.
params
=
{}
;
queryParams
.
value
.
params
=
{}
#
break
#
end
#
end
...
...
@@ -335,31 +335,31 @@ function getList() {
#
if
(
$column
.
htmlType
==
"
datetime
"
&&
$column
.
queryType
==
"
BETWEEN
"
)
#
set
(
$AttrName
=
$column
.
javaField
.
substring
(
0
,
1
).
toUpperCase
()
+
$
{
column
.
javaField
.
substring
(
1
)})
if
(
null
!=
daterange$
{
AttrName
}
&&
''
!=
daterange$
{
AttrName
})
{
queryParams
.
value
.
params
[
"
begin${AttrName}
"
]
=
daterange$
{
AttrName
}.
value
[
0
]
;
queryParams
.
value
.
params
[
"
end${AttrName}
"
]
=
daterange$
{
AttrName
}.
value
[
1
]
;
queryParams
.
value
.
params
[
"
begin${AttrName}
"
]
=
daterange$
{
AttrName
}.
value
[
0
]
queryParams
.
value
.
params
[
"
end${AttrName}
"
]
=
daterange$
{
AttrName
}.
value
[
1
]
}
#
end
#
end
list$
{
BusinessName
}(
queryParams
.
value
).
then
(
response
=>
{
$
{
businessName
}
List
.
value
=
proxy
.
handleTree
(
response
.
data
,
"
${treeCode}
"
,
"
${treeParentCode}
"
)
;
loading
.
value
=
false
;
})
;
$
{
businessName
}
List
.
value
=
proxy
.
handleTree
(
response
.
data
,
"
${treeCode}
"
,
"
${treeParentCode}
"
)
loading
.
value
=
false
})
}
/** 查询${functionName}下拉树结构 */
function
getTreeselect
()
{
list$
{
BusinessName
}().
then
(
response
=>
{
$
{
businessName
}
Options
.
value
=
[]
;
const
data
=
{
$
{
treeCode
}:
0
,
$
{
treeName
}:
'
顶级节点
'
,
children
:
[]
}
;
data
.
children
=
proxy
.
handleTree
(
response
.
data
,
"
${treeCode}
"
,
"
${treeParentCode}
"
)
;
$
{
businessName
}
Options
.
value
.
push
(
data
)
;
})
;
$
{
businessName
}
Options
.
value
=
[]
const
data
=
{
$
{
treeCode
}:
0
,
$
{
treeName
}:
'
顶级节点
'
,
children
:
[]
}
data
.
children
=
proxy
.
handleTree
(
response
.
data
,
"
${treeCode}
"
,
"
${treeParentCode}
"
)
$
{
businessName
}
Options
.
value
.
push
(
data
)
})
}
// 取消按钮
function
cancel
()
{
open
.
value
=
false
;
reset
()
;
open
.
value
=
false
reset
()
}
// 表单重置
...
...
@@ -372,13 +372,13 @@ function reset() {
$column
.
javaField
:
null
#
if
(
$foreach
.
count
!=
$columns
.
size
()),
#
end
#
end
#
end
}
;
proxy
.
resetForm
(
"
${businessName}Ref
"
)
;
}
proxy
.
resetForm
(
"
${businessName}Ref
"
)
}
/** 搜索按钮操作 */
function
handleQuery
()
{
getList
()
;
getList
()
}
/** 重置按钮操作 */
...
...
@@ -386,52 +386,52 @@ function resetQuery() {
#
foreach
(
$column
in
$columns
)
#
if
(
$column
.
htmlType
==
"
datetime
"
&&
$column
.
queryType
==
"
BETWEEN
"
)
#
set
(
$AttrName
=
$column
.
javaField
.
substring
(
0
,
1
).
toUpperCase
()
+
$
{
column
.
javaField
.
substring
(
1
)})
daterange$
{
AttrName
}.
value
=
[]
;
daterange$
{
AttrName
}.
value
=
[]
#
end
#
end
proxy
.
resetForm
(
"
queryRef
"
)
;
handleQuery
()
;
proxy
.
resetForm
(
"
queryRef
"
)
handleQuery
()
}
/** 新增按钮操作 */
function
handleAdd
(
row
)
{
reset
()
;
getTreeselect
()
;
reset
()
getTreeselect
()
if
(
row
!=
null
&&
row
.
$
{
treeCode
})
{
form
.
value
.
$
{
treeParentCode
}
=
row
.
$
{
treeCode
}
;
form
.
value
.
$
{
treeParentCode
}
=
row
.
$
{
treeCode
}
}
else
{
form
.
value
.
$
{
treeParentCode
}
=
0
;
form
.
value
.
$
{
treeParentCode
}
=
0
}
open
.
value
=
true
;
title
.
value
=
"
添加${functionName}
"
;
open
.
value
=
true
title
.
value
=
"
添加${functionName}
"
}
/** 展开/折叠操作 */
function
toggleExpandAll
()
{
refreshTable
.
value
=
false
;
isExpandAll
.
value
=
!
isExpandAll
.
value
;
refreshTable
.
value
=
false
isExpandAll
.
value
=
!
isExpandAll
.
value
nextTick
(()
=>
{
refreshTable
.
value
=
true
;
})
;
refreshTable
.
value
=
true
})
}
/** 修改按钮操作 */
async
function
handleUpdate
(
row
)
{
reset
()
;
await
getTreeselect
()
;
reset
()
await
getTreeselect
()
if
(
row
!=
null
)
{
form
.
value
.
$
{
treeParentCode
}
=
row
.
$
{
treeParentCode
}
;
form
.
value
.
$
{
treeParentCode
}
=
row
.
$
{
treeParentCode
}
}
get
$
{
BusinessName
}(
row
.
$
{
pkColumn
.
javaField
}).
then
(
response
=>
{
form
.
value
=
response
.
data
;
form
.
value
=
response
.
data
#
foreach
(
$column
in
$columns
)
#
if
(
$column
.
htmlType
==
"
checkbox
"
)
form
.
value
.
$column
.
javaField
=
form
.
value
.
$
{
column
.
javaField
}.
split
(
"
,
"
)
;
form
.
value
.
$column
.
javaField
=
form
.
value
.
$
{
column
.
javaField
}.
split
(
"
,
"
)
#
end
#
end
open
.
value
=
true
;
title
.
value
=
"
修改${functionName}
"
;
})
;
open
.
value
=
true
title
.
value
=
"
修改${functionName}
"
})
}
/** 提交按钮 */
...
...
@@ -440,35 +440,35 @@ function submitForm() {
if
(
valid
)
{
#
foreach
(
$column
in
$columns
)
#
if
(
$column
.
htmlType
==
"
checkbox
"
)
form
.
value
.
$column
.
javaField
=
form
.
value
.
$
{
column
.
javaField
}.
join
(
"
,
"
)
;
form
.
value
.
$column
.
javaField
=
form
.
value
.
$
{
column
.
javaField
}.
join
(
"
,
"
)
#
end
#
end
if
(
form
.
value
.
$
{
pkColumn
.
javaField
}
!=
null
)
{
update$
{
BusinessName
}(
form
.
value
).
then
(
response
=>
{
proxy
.
#
[[
$modal
]]
#
.
msgSuccess
(
"
修改成功
"
)
;
open
.
value
=
false
;
getList
()
;
})
;
proxy
.
#
[[
$modal
]]
#
.
msgSuccess
(
"
修改成功
"
)
open
.
value
=
false
getList
()
})
}
else
{
add$
{
BusinessName
}(
form
.
value
).
then
(
response
=>
{
proxy
.
#
[[
$modal
]]
#
.
msgSuccess
(
"
新增成功
"
)
;
open
.
value
=
false
;
getList
()
;
})
;
proxy
.
#
[[
$modal
]]
#
.
msgSuccess
(
"
新增成功
"
)
open
.
value
=
false
getList
()
})
}
}
})
;
})
}
/** 删除按钮操作 */
function
handleDelete
(
row
)
{
proxy
.
#
[[
$modal
]]
#
.
confirm
(
'
是否确认删除${functionName}编号为"
'
+
row
.
$
{
pkColumn
.
javaField
}
+
'
"的数据项?
'
).
then
(
function
()
{
return
del$
{
BusinessName
}(
row
.
$
{
pkColumn
.
javaField
})
;
return
del$
{
BusinessName
}(
row
.
$
{
pkColumn
.
javaField
})
}).
then
(()
=>
{
getList
()
;
proxy
.
#
[[
$modal
]]
#
.
msgSuccess
(
"
删除成功
"
)
;
}).
catch
(()
=>
{})
;
getList
()
proxy
.
#
[[
$modal
]]
#
.
msgSuccess
(
"
删除成功
"
)
}).
catch
(()
=>
{})
}
getList
()
;
getList
()
</script>
ruoyi-generator/src/main/resources/vm/vue/v3/index.vue.vm
View file @
38ed092d
...
...
@@ -343,33 +343,33 @@
</template>
<script setup name="${BusinessName}">
import { list${BusinessName}, get${BusinessName}, del${BusinessName}, add${BusinessName}, update${BusinessName} } from "@/api/${moduleName}/${businessName}"
;
import { list${BusinessName}, get${BusinessName}, del${BusinessName}, add${BusinessName}, update${BusinessName} } from "@/api/${moduleName}/${businessName}"
const { proxy } = getCurrentInstance()
;
const { proxy } = getCurrentInstance()
#if(${dicts} != '')
#set($dictsNoSymbol=$dicts.replace("'", ""))
const { ${dictsNoSymbol} } = proxy.useDict(${dicts})
;
const { ${dictsNoSymbol} } = proxy.useDict(${dicts})
#end
const ${businessName}List = ref([])
;
const ${businessName}List = ref([])
#if($table.sub)
const ${subclassName}List = ref([])
;
const ${subclassName}List = ref([])
#end
const open = ref(false)
;
const loading = ref(true)
;
const showSearch = ref(true)
;
const ids = ref([])
;
const open = ref(false)
const loading = ref(true)
const showSearch = ref(true)
const ids = ref([])
#if($table.sub)
const checked${subClassName} = ref([])
;
const checked${subClassName} = ref([])
#end
const single = ref(true)
;
const multiple = ref(true)
;
const total = ref(0)
;
const title = ref("")
;
const single = ref(true)
const multiple = ref(true)
const total = ref(0)
const title = ref("")
#foreach ($column in $columns)
#if($column.htmlType == "datetime" && $column.queryType == "BETWEEN")
#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
const daterange${AttrName} = ref([])
;
const daterange${AttrName} = ref([])
#end
#end
...
...
@@ -399,16 +399,16 @@ const data = reactive({
#end
#end
}
})
;
})
const { queryParams, form, rules } = toRefs(data)
;
const { queryParams, form, rules } = toRefs(data)
/** 查询${functionName}列表 */
function getList() {
loading.value = true
;
loading.value = true
#foreach ($column in $columns)
#if($column.htmlType == "datetime" && $column.queryType == "BETWEEN")
queryParams.value.params = {}
;
queryParams.value.params = {}
#break
#end
#end
...
...
@@ -416,22 +416,22 @@ function getList() {
#if($column.htmlType == "datetime" && $column.queryType == "BETWEEN")
#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
if (null != daterange${AttrName} && '' != daterange${AttrName}) {
queryParams.value.params["begin${AttrName}"] = daterange${AttrName}.value[0]
;
queryParams.value.params["end${AttrName}"] = daterange${AttrName}.value[1]
;
queryParams.value.params["begin${AttrName}"] = daterange${AttrName}.value[0]
queryParams.value.params["end${AttrName}"] = daterange${AttrName}.value[1]
}
#end
#end
list${BusinessName}(queryParams.value).then(response => {
${businessName}List.value = response.rows
;
total.value = response.total
;
loading.value = false
;
})
;
${businessName}List.value = response.rows
total.value = response.total
loading.value = false
})
}
// 取消按钮
function cancel() {
open.value = false
;
reset()
;
open.value = false
reset()
}
// 表单重置
...
...
@@ -444,17 +444,17 @@ function reset() {
$column.javaField: null#if($foreach.count != $columns.size()),#end
#end
#end
}
;
}
#if($table.sub)
${subclassName}List.value = []
;
${subclassName}List.value = []
#end
proxy.resetForm("${businessName}Ref")
;
proxy.resetForm("${businessName}Ref")
}
/** 搜索按钮操作 */
function handleQuery() {
queryParams.value.pageNum = 1
;
getList()
;
queryParams.value.pageNum = 1
getList()
}
/** 重置按钮操作 */
...
...
@@ -462,44 +462,44 @@ function resetQuery() {
#foreach ($column in $columns)
#if($column.htmlType == "datetime" && $column.queryType == "BETWEEN")
#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
daterange${AttrName}.value = []
;
daterange${AttrName}.value = []
#end
#end
proxy.resetForm("queryRef")
;
handleQuery()
;
proxy.resetForm("queryRef")
handleQuery()
}
// 多选框选中数据
function handleSelectionChange(selection) {
ids.value = selection.map(item => item.${pkColumn.javaField})
;
single.value = selection.length != 1
;
multiple.value = !selection.length
;
ids.value = selection.map(item => item.${pkColumn.javaField})
single.value = selection.length != 1
multiple.value = !selection.length
}
/** 新增按钮操作 */
function handleAdd() {
reset()
;
open.value = true
;
title.value = "添加${functionName}"
;
reset()
open.value = true
title.value = "添加${functionName}"
}
/** 修改按钮操作 */
function handleUpdate(row) {
reset()
;
reset()
const _${pkColumn.javaField} = row.${pkColumn.javaField} || ids.value
get${BusinessName}(_${pkColumn.javaField}).then(response => {
form.value = response.data
;
form.value = response.data
#foreach ($column in $columns)
#if($column.htmlType == "checkbox")
form.value.$column.javaField = form.value.${column.javaField}.split(",")
;
form.value.$column.javaField = form.value.${column.javaField}.split(",")
#end
#end
#if($table.sub)
${subclassName}List.value = response.data.${subclassName}List
;
${subclassName}List.value = response.data.${subclassName}List
#end
open.value = true
;
title.value = "修改${functionName}"
;
})
;
open.value = true
title.value = "修改${functionName}"
})
}
/** 提交按钮 */
...
...
@@ -508,68 +508,68 @@ function submitForm() {
if (valid) {
#foreach ($column in $columns)
#if($column.htmlType == "checkbox")
form.value.$column.javaField = form.value.${column.javaField}.join(",")
;
form.value.$column.javaField = form.value.${column.javaField}.join(",")
#end
#end
#if($table.sub)
form.value.${subclassName}List = ${subclassName}List.value
;
form.value.${subclassName}List = ${subclassName}List.value
#end
if (form.value.${pkColumn.javaField} != null) {
update${BusinessName}(form.value).then(response => {
proxy.#[[$modal]]#.msgSuccess("修改成功")
;
open.value = false
;
getList()
;
})
;
proxy.#[[$modal]]#.msgSuccess("修改成功")
open.value = false
getList()
})
} else {
add${BusinessName}(form.value).then(response => {
proxy.#[[$modal]]#.msgSuccess("新增成功")
;
open.value = false
;
getList()
;
})
;
proxy.#[[$modal]]#.msgSuccess("新增成功")
open.value = false
getList()
})
}
}
})
;
})
}
/** 删除按钮操作 */
function handleDelete(row) {
const _${pkColumn.javaField}s = row.${pkColumn.javaField} || ids.value
;
const _${pkColumn.javaField}s = row.${pkColumn.javaField} || ids.value
proxy.#[[$modal]]#.confirm('是否确认删除${functionName}编号为"' + _${pkColumn.javaField}s + '"的数据项?').then(function() {
return del${BusinessName}(_${pkColumn.javaField}s)
;
return del${BusinessName}(_${pkColumn.javaField}s)
}).then(() => {
getList()
;
proxy.#[[$modal]]#.msgSuccess("删除成功")
;
}).catch(() => {})
;
getList()
proxy.#[[$modal]]#.msgSuccess("删除成功")
}).catch(() => {})
}
#if($table.sub)
/** ${subTable.functionName}序号 */
function row${subClassName}Index({ row, rowIndex }) {
row.index = rowIndex + 1
;
row.index = rowIndex + 1
}
/** ${subTable.functionName}添加按钮操作 */
function handleAdd${subClassName}() {
let obj = {}
;
let obj = {}
#foreach($column in $subTable.columns)
#if($column.pk || $column.javaField == ${subTableFkclassName})
#elseif($column.list && "" != $javaField)
obj.$column.javaField = ""
;
obj.$column.javaField = ""
#end
#end
${subclassName}List.value.push(obj)
;
${subclassName}List.value.push(obj)
}
/** ${subTable.functionName}删除按钮操作 */
function handleDelete${subClassName}() {
if (checked${subClassName}.value.length == 0) {
proxy.#[[$modal]]#.msgError("请先选择要删除的${subTable.functionName}数据")
;
proxy.#[[$modal]]#.msgError("请先选择要删除的${subTable.functionName}数据")
} else {
const ${subclassName}s = ${subclassName}List.value
;
const checked${subClassName}s = checked${subClassName}.value
;
const ${subclassName}s = ${subclassName}List.value
const checked${subClassName}s = checked${subClassName}.value
${subclassName}List.value = ${subclassName}s.filter(function(item) {
return checked${subClassName}s.indexOf(item.index) == -1
})
;
})
}
}
...
...
@@ -586,5 +586,5 @@ function handleExport() {
}, `${businessName}_#[[${new Date().getTime()}]]#.xlsx`)
}
getList()
;
getList()
</script>
ruoyi-ui/src/App.vue
View file @
38ed092d
...
...
@@ -6,7 +6,7 @@
</
template
>
<
script
>
import
ThemePicker
from
"
@/components/ThemePicker
"
;
import
ThemePicker
from
"
@/components/ThemePicker
"
export
default
{
name
:
"
App
"
,
...
...
@@ -19,7 +19,7 @@ export default {
}
}
}
}
;
}
</
script
>
<
style
scoped
>
#app
.theme-picker
{
...
...
ruoyi-ui/src/components/Crontab/day.vue
View file @
38ed092d
...
...
@@ -71,58 +71,58 @@ export default {
methods
:
{
// 单选按钮值变化时
radioChange
()
{
(
'
day rachange
'
)
;
(
'
day rachange
'
)
if
(
this
.
radioValue
!==
2
&&
this
.
cron
.
week
!==
'
?
'
)
{
this
.
$emit
(
'
update
'
,
'
week
'
,
'
?
'
,
'
day
'
)
}
switch
(
this
.
radioValue
)
{
case
1
:
this
.
$emit
(
'
update
'
,
'
day
'
,
'
*
'
)
;
break
;
this
.
$emit
(
'
update
'
,
'
day
'
,
'
*
'
)
break
case
2
:
this
.
$emit
(
'
update
'
,
'
day
'
,
'
?
'
)
;
break
;
this
.
$emit
(
'
update
'
,
'
day
'
,
'
?
'
)
break
case
3
:
this
.
$emit
(
'
update
'
,
'
day
'
,
this
.
cycleTotal
)
;
break
;
this
.
$emit
(
'
update
'
,
'
day
'
,
this
.
cycleTotal
)
break
case
4
:
this
.
$emit
(
'
update
'
,
'
day
'
,
this
.
averageTotal
)
;
break
;
this
.
$emit
(
'
update
'
,
'
day
'
,
this
.
averageTotal
)
break
case
5
:
this
.
$emit
(
'
update
'
,
'
day
'
,
this
.
workday
+
'
W
'
)
;
break
;
this
.
$emit
(
'
update
'
,
'
day
'
,
this
.
workday
+
'
W
'
)
break
case
6
:
this
.
$emit
(
'
update
'
,
'
day
'
,
'
L
'
)
;
break
;
this
.
$emit
(
'
update
'
,
'
day
'
,
'
L
'
)
break
case
7
:
this
.
$emit
(
'
update
'
,
'
day
'
,
this
.
checkboxString
)
;
break
;
this
.
$emit
(
'
update
'
,
'
day
'
,
this
.
checkboxString
)
break
}
(
'
day rachange end
'
)
;
(
'
day rachange end
'
)
},
// 周期两个值变化时
cycleChange
()
{
if
(
this
.
radioValue
==
'
3
'
)
{
this
.
$emit
(
'
update
'
,
'
day
'
,
this
.
cycleTotal
)
;
this
.
$emit
(
'
update
'
,
'
day
'
,
this
.
cycleTotal
)
}
},
// 平均两个值变化时
averageChange
()
{
if
(
this
.
radioValue
==
'
4
'
)
{
this
.
$emit
(
'
update
'
,
'
day
'
,
this
.
averageTotal
)
;
this
.
$emit
(
'
update
'
,
'
day
'
,
this
.
averageTotal
)
}
},
// 最近工作日值变化时
workdayChange
()
{
if
(
this
.
radioValue
==
'
5
'
)
{
this
.
$emit
(
'
update
'
,
'
day
'
,
this
.
workdayCheck
+
'
W
'
)
;
this
.
$emit
(
'
update
'
,
'
day
'
,
this
.
workdayCheck
+
'
W
'
)
}
},
// checkbox值变化时
checkboxChange
()
{
if
(
this
.
radioValue
==
'
7
'
)
{
this
.
$emit
(
'
update
'
,
'
day
'
,
this
.
checkboxString
)
;
this
.
$emit
(
'
update
'
,
'
day
'
,
this
.
checkboxString
)
}
}
},
...
...
@@ -138,23 +138,23 @@ export default {
cycleTotal
:
function
()
{
const
cycle01
=
this
.
checkNum
(
this
.
cycle01
,
1
,
30
)
const
cycle02
=
this
.
checkNum
(
this
.
cycle02
,
cycle01
?
cycle01
+
1
:
2
,
31
,
31
)
return
cycle01
+
'
-
'
+
cycle02
;
return
cycle01
+
'
-
'
+
cycle02
},
// 计算平均用到的值
averageTotal
:
function
()
{
const
average01
=
this
.
checkNum
(
this
.
average01
,
1
,
30
)
const
average02
=
this
.
checkNum
(
this
.
average02
,
1
,
31
-
average01
||
0
)
return
average01
+
'
/
'
+
average02
;
return
average01
+
'
/
'
+
average02
},
// 计算工作日格式
workdayCheck
:
function
()
{
const
workday
=
this
.
checkNum
(
this
.
workday
,
1
,
31
)
return
workday
;
return
workday
},
// 计算勾选的checkbox值合集
checkboxString
:
function
()
{
let
str
=
this
.
checkboxList
.
join
()
;
return
str
==
''
?
'
*
'
:
str
;
let
str
=
this
.
checkboxList
.
join
()
return
str
==
''
?
'
*
'
:
str
}
}
}
...
...
ruoyi-ui/src/components/Crontab/hour.vue
View file @
38ed092d
...
...
@@ -52,42 +52,42 @@ export default {
// 单选按钮值变化时
radioChange
()
{
if
(
this
.
cron
.
min
===
'
*
'
)
{
this
.
$emit
(
'
update
'
,
'
min
'
,
'
0
'
,
'
hour
'
)
;
this
.
$emit
(
'
update
'
,
'
min
'
,
'
0
'
,
'
hour
'
)
}
if
(
this
.
cron
.
second
===
'
*
'
)
{
this
.
$emit
(
'
update
'
,
'
second
'
,
'
0
'
,
'
hour
'
)
;
this
.
$emit
(
'
update
'
,
'
second
'
,
'
0
'
,
'
hour
'
)
}
switch
(
this
.
radioValue
)
{
case
1
:
this
.
$emit
(
'
update
'
,
'
hour
'
,
'
*
'
)
break
;
break
case
2
:
this
.
$emit
(
'
update
'
,
'
hour
'
,
this
.
cycleTotal
)
;
break
;
this
.
$emit
(
'
update
'
,
'
hour
'
,
this
.
cycleTotal
)
break
case
3
:
this
.
$emit
(
'
update
'
,
'
hour
'
,
this
.
averageTotal
)
;
break
;
this
.
$emit
(
'
update
'
,
'
hour
'
,
this
.
averageTotal
)
break
case
4
:
this
.
$emit
(
'
update
'
,
'
hour
'
,
this
.
checkboxString
)
;
break
;
this
.
$emit
(
'
update
'
,
'
hour
'
,
this
.
checkboxString
)
break
}
},
// 周期两个值变化时
cycleChange
()
{
if
(
this
.
radioValue
==
'
2
'
)
{
this
.
$emit
(
'
update
'
,
'
hour
'
,
this
.
cycleTotal
)
;
this
.
$emit
(
'
update
'
,
'
hour
'
,
this
.
cycleTotal
)
}
},
// 平均两个值变化时
averageChange
()
{
if
(
this
.
radioValue
==
'
3
'
)
{
this
.
$emit
(
'
update
'
,
'
hour
'
,
this
.
averageTotal
)
;
this
.
$emit
(
'
update
'
,
'
hour
'
,
this
.
averageTotal
)
}
},
// checkbox值变化时
checkboxChange
()
{
if
(
this
.
radioValue
==
'
4
'
)
{
this
.
$emit
(
'
update
'
,
'
hour
'
,
this
.
checkboxString
)
;
this
.
$emit
(
'
update
'
,
'
hour
'
,
this
.
checkboxString
)
}
}
},
...
...
@@ -102,18 +102,18 @@ export default {
cycleTotal
:
function
()
{
const
cycle01
=
this
.
checkNum
(
this
.
cycle01
,
0
,
22
)
const
cycle02
=
this
.
checkNum
(
this
.
cycle02
,
cycle01
?
cycle01
+
1
:
1
,
23
)
return
cycle01
+
'
-
'
+
cycle02
;
return
cycle01
+
'
-
'
+
cycle02
},
// 计算平均用到的值
averageTotal
:
function
()
{
const
average01
=
this
.
checkNum
(
this
.
average01
,
0
,
22
)
const
average02
=
this
.
checkNum
(
this
.
average02
,
1
,
23
-
average01
||
0
)
return
average01
+
'
/
'
+
average02
;
return
average01
+
'
/
'
+
average02
},
// 计算勾选的checkbox值合集
checkboxString
:
function
()
{
let
str
=
this
.
checkboxList
.
join
()
;
return
str
==
''
?
'
*
'
:
str
;
let
str
=
this
.
checkboxList
.
join
()
return
str
==
''
?
'
*
'
:
str
}
}
}
...
...
ruoyi-ui/src/components/Crontab/index.vue
View file @
38ed092d
...
...
@@ -113,14 +113,14 @@
</
template
>
<
script
>
import
CrontabSecond
from
"
./second.vue
"
;
import
CrontabMin
from
"
./min.vue
"
;
import
CrontabHour
from
"
./hour.vue
"
;
import
CrontabDay
from
"
./day.vue
"
;
import
CrontabMonth
from
"
./month.vue
"
;
import
CrontabWeek
from
"
./week.vue
"
;
import
CrontabYear
from
"
./year.vue
"
;
import
CrontabResult
from
"
./result.vue
"
;
import
CrontabSecond
from
"
./second.vue
"
import
CrontabMin
from
"
./min.vue
"
import
CrontabHour
from
"
./hour.vue
"
import
CrontabDay
from
"
./day.vue
"
import
CrontabMonth
from
"
./month.vue
"
import
CrontabWeek
from
"
./week.vue
"
import
CrontabYear
from
"
./year.vue
"
import
CrontabResult
from
"
./result.vue
"
export
default
{
data
()
{
...
...
@@ -137,19 +137,19 @@ export default {
week
:
"
?
"
,
year
:
""
,
},
}
;
}
},
name
:
"
vcrontab
"
,
props
:
[
"
expression
"
,
"
hideComponent
"
],
methods
:
{
shouldHide
(
key
)
{
if
(
this
.
hideComponent
&&
this
.
hideComponent
.
includes
(
key
))
return
false
;
return
true
;
if
(
this
.
hideComponent
&&
this
.
hideComponent
.
includes
(
key
))
return
false
return
true
},
resolveExp
()
{
// 反解析 表达式
if
(
this
.
expression
)
{
let
arr
=
this
.
expression
.
split
(
"
"
)
;
let
arr
=
this
.
expression
.
split
(
"
"
)
if
(
arr
.
length
>=
6
)
{
//6 位以上是合法表达式
let
obj
=
{
...
...
@@ -160,160 +160,160 @@ export default {
month
:
arr
[
4
],
week
:
arr
[
5
],
year
:
arr
[
6
]
?
arr
[
6
]
:
""
,
}
;
}
this
.
crontabValueObj
=
{
...
obj
,
}
;
}
for
(
let
i
in
obj
)
{
if
(
obj
[
i
])
this
.
changeRadio
(
i
,
obj
[
i
])
;
if
(
obj
[
i
])
this
.
changeRadio
(
i
,
obj
[
i
])
}
}
}
else
{
// 没有传入的表达式 则还原
this
.
clearCron
()
;
this
.
clearCron
()
}
},
// tab切换值
tabCheck
(
index
)
{
this
.
tabActive
=
index
;
this
.
tabActive
=
index
},
// 由子组件触发,更改表达式组成的字段值
updateCrontabValue
(
name
,
value
,
from
)
{
"
updateCrontabValue
"
,
name
,
value
,
from
;
this
.
crontabValueObj
[
name
]
=
value
;
"
updateCrontabValue
"
,
name
,
value
,
from
this
.
crontabValueObj
[
name
]
=
value
if
(
from
&&
from
!==
name
)
{
console
.
log
(
`来自组件
${
from
}
改变了
${
name
}
${
value
}
`
)
;
this
.
changeRadio
(
name
,
value
)
;
console
.
log
(
`来自组件
${
from
}
改变了
${
name
}
${
value
}
`
)
this
.
changeRadio
(
name
,
value
)
}
},
// 赋值到组件
changeRadio
(
name
,
value
)
{
let
arr
=
[
"
second
"
,
"
min
"
,
"
hour
"
,
"
month
"
],
refName
=
"
cron
"
+
name
,
insValue
;
insValue
if
(
!
this
.
$refs
[
refName
])
return
;
if
(
!
this
.
$refs
[
refName
])
return
if
(
arr
.
includes
(
name
))
{
if
(
value
===
"
*
"
)
{
insValue
=
1
;
insValue
=
1
}
else
if
(
value
.
indexOf
(
"
-
"
)
>
-
1
)
{
let
indexArr
=
value
.
split
(
"
-
"
)
;
let
indexArr
=
value
.
split
(
"
-
"
)
isNaN
(
indexArr
[
0
])
?
(
this
.
$refs
[
refName
].
cycle01
=
0
)
:
(
this
.
$refs
[
refName
].
cycle01
=
indexArr
[
0
])
;
this
.
$refs
[
refName
].
cycle02
=
indexArr
[
1
]
;
insValue
=
2
;
:
(
this
.
$refs
[
refName
].
cycle01
=
indexArr
[
0
])
this
.
$refs
[
refName
].
cycle02
=
indexArr
[
1
]
insValue
=
2
}
else
if
(
value
.
indexOf
(
"
/
"
)
>
-
1
)
{
let
indexArr
=
value
.
split
(
"
/
"
)
;
let
indexArr
=
value
.
split
(
"
/
"
)
isNaN
(
indexArr
[
0
])
?
(
this
.
$refs
[
refName
].
average01
=
0
)
:
(
this
.
$refs
[
refName
].
average01
=
indexArr
[
0
])
;
this
.
$refs
[
refName
].
average02
=
indexArr
[
1
]
;
insValue
=
3
;
:
(
this
.
$refs
[
refName
].
average01
=
indexArr
[
0
])
this
.
$refs
[
refName
].
average02
=
indexArr
[
1
]
insValue
=
3
}
else
{
insValue
=
4
;
this
.
$refs
[
refName
].
checkboxList
=
value
.
split
(
"
,
"
)
;
insValue
=
4
this
.
$refs
[
refName
].
checkboxList
=
value
.
split
(
"
,
"
)
}
}
else
if
(
name
==
"
day
"
)
{
if
(
value
===
"
*
"
)
{
insValue
=
1
;
insValue
=
1
}
else
if
(
value
==
"
?
"
)
{
insValue
=
2
;
insValue
=
2
}
else
if
(
value
.
indexOf
(
"
-
"
)
>
-
1
)
{
let
indexArr
=
value
.
split
(
"
-
"
)
;
let
indexArr
=
value
.
split
(
"
-
"
)
isNaN
(
indexArr
[
0
])
?
(
this
.
$refs
[
refName
].
cycle01
=
0
)
:
(
this
.
$refs
[
refName
].
cycle01
=
indexArr
[
0
])
;
this
.
$refs
[
refName
].
cycle02
=
indexArr
[
1
]
;
insValue
=
3
;
:
(
this
.
$refs
[
refName
].
cycle01
=
indexArr
[
0
])
this
.
$refs
[
refName
].
cycle02
=
indexArr
[
1
]
insValue
=
3
}
else
if
(
value
.
indexOf
(
"
/
"
)
>
-
1
)
{
let
indexArr
=
value
.
split
(
"
/
"
)
;
let
indexArr
=
value
.
split
(
"
/
"
)
isNaN
(
indexArr
[
0
])
?
(
this
.
$refs
[
refName
].
average01
=
0
)
:
(
this
.
$refs
[
refName
].
average01
=
indexArr
[
0
])
;
this
.
$refs
[
refName
].
average02
=
indexArr
[
1
]
;
insValue
=
4
;
:
(
this
.
$refs
[
refName
].
average01
=
indexArr
[
0
])
this
.
$refs
[
refName
].
average02
=
indexArr
[
1
]
insValue
=
4
}
else
if
(
value
.
indexOf
(
"
W
"
)
>
-
1
)
{
let
indexArr
=
value
.
split
(
"
W
"
)
;
let
indexArr
=
value
.
split
(
"
W
"
)
isNaN
(
indexArr
[
0
])
?
(
this
.
$refs
[
refName
].
workday
=
0
)
:
(
this
.
$refs
[
refName
].
workday
=
indexArr
[
0
])
;
insValue
=
5
;
:
(
this
.
$refs
[
refName
].
workday
=
indexArr
[
0
])
insValue
=
5
}
else
if
(
value
===
"
L
"
)
{
insValue
=
6
;
insValue
=
6
}
else
{
this
.
$refs
[
refName
].
checkboxList
=
value
.
split
(
"
,
"
)
;
insValue
=
7
;
this
.
$refs
[
refName
].
checkboxList
=
value
.
split
(
"
,
"
)
insValue
=
7
}
}
else
if
(
name
==
"
week
"
)
{
if
(
value
===
"
*
"
)
{
insValue
=
1
;
insValue
=
1
}
else
if
(
value
==
"
?
"
)
{
insValue
=
2
;
insValue
=
2
}
else
if
(
value
.
indexOf
(
"
-
"
)
>
-
1
)
{
let
indexArr
=
value
.
split
(
"
-
"
)
;
let
indexArr
=
value
.
split
(
"
-
"
)
isNaN
(
indexArr
[
0
])
?
(
this
.
$refs
[
refName
].
cycle01
=
0
)
:
(
this
.
$refs
[
refName
].
cycle01
=
indexArr
[
0
])
;
this
.
$refs
[
refName
].
cycle02
=
indexArr
[
1
]
;
insValue
=
3
;
:
(
this
.
$refs
[
refName
].
cycle01
=
indexArr
[
0
])
this
.
$refs
[
refName
].
cycle02
=
indexArr
[
1
]
insValue
=
3
}
else
if
(
value
.
indexOf
(
"
#
"
)
>
-
1
)
{
let
indexArr
=
value
.
split
(
"
#
"
)
;
let
indexArr
=
value
.
split
(
"
#
"
)
isNaN
(
indexArr
[
0
])
?
(
this
.
$refs
[
refName
].
average01
=
1
)
:
(
this
.
$refs
[
refName
].
average01
=
indexArr
[
0
])
;
this
.
$refs
[
refName
].
average02
=
indexArr
[
1
]
;
insValue
=
4
;
:
(
this
.
$refs
[
refName
].
average01
=
indexArr
[
0
])
this
.
$refs
[
refName
].
average02
=
indexArr
[
1
]
insValue
=
4
}
else
if
(
value
.
indexOf
(
"
L
"
)
>
-
1
)
{
let
indexArr
=
value
.
split
(
"
L
"
)
;
let
indexArr
=
value
.
split
(
"
L
"
)
isNaN
(
indexArr
[
0
])
?
(
this
.
$refs
[
refName
].
weekday
=
1
)
:
(
this
.
$refs
[
refName
].
weekday
=
indexArr
[
0
])
;
insValue
=
5
;
:
(
this
.
$refs
[
refName
].
weekday
=
indexArr
[
0
])
insValue
=
5
}
else
{
this
.
$refs
[
refName
].
checkboxList
=
value
.
split
(
"
,
"
)
;
insValue
=
6
;
this
.
$refs
[
refName
].
checkboxList
=
value
.
split
(
"
,
"
)
insValue
=
6
}
}
else
if
(
name
==
"
year
"
)
{
if
(
value
==
""
)
{
insValue
=
1
;
insValue
=
1
}
else
if
(
value
==
"
*
"
)
{
insValue
=
2
;
insValue
=
2
}
else
if
(
value
.
indexOf
(
"
-
"
)
>
-
1
)
{
insValue
=
3
;
insValue
=
3
}
else
if
(
value
.
indexOf
(
"
/
"
)
>
-
1
)
{
insValue
=
4
;
insValue
=
4
}
else
{
this
.
$refs
[
refName
].
checkboxList
=
value
.
split
(
"
,
"
)
;
insValue
=
5
;
this
.
$refs
[
refName
].
checkboxList
=
value
.
split
(
"
,
"
)
insValue
=
5
}
}
this
.
$refs
[
refName
].
radioValue
=
insValue
;
this
.
$refs
[
refName
].
radioValue
=
insValue
},
// 表单选项的子组件校验数字格式(通过-props传递)
checkNumber
(
value
,
minLimit
,
maxLimit
)
{
// 检查必须为整数
value
=
Math
.
floor
(
value
)
;
value
=
Math
.
floor
(
value
)
if
(
value
<
minLimit
)
{
value
=
minLimit
;
value
=
minLimit
}
else
if
(
value
>
maxLimit
)
{
value
=
maxLimit
;
value
=
maxLimit
}
return
value
;
return
value
},
// 隐藏弹窗
hidePopup
()
{
this
.
$emit
(
"
hide
"
)
;
this
.
$emit
(
"
hide
"
)
},
// 填充表达式
submitFill
()
{
this
.
$emit
(
"
fill
"
,
this
.
crontabValueString
)
;
this
.
hidePopup
()
;
this
.
$emit
(
"
fill
"
,
this
.
crontabValueString
)
this
.
hidePopup
()
},
clearCron
()
{
// 还原选择项
(
"
准备还原
"
)
;
(
"
准备还原
"
)
this
.
crontabValueObj
=
{
second
:
"
*
"
,
min
:
"
*
"
,
...
...
@@ -322,15 +322,15 @@ export default {
month
:
"
*
"
,
week
:
"
?
"
,
year
:
""
,
}
;
}
for
(
let
j
in
this
.
crontabValueObj
)
{
this
.
changeRadio
(
j
,
this
.
crontabValueObj
[
j
])
;
this
.
changeRadio
(
j
,
this
.
crontabValueObj
[
j
])
}
},
},
computed
:
{
crontabValueString
:
function
()
{
let
obj
=
this
.
crontabValueObj
;
let
obj
=
this
.
crontabValueObj
let
str
=
obj
.
second
+
"
"
+
...
...
@@ -343,8 +343,8 @@ export default {
obj
.
month
+
"
"
+
obj
.
week
+
(
obj
.
year
==
""
?
""
:
"
"
+
obj
.
year
)
;
return
str
;
(
obj
.
year
==
""
?
""
:
"
"
+
obj
.
year
)
return
str
},
},
components
:
{
...
...
@@ -364,9 +364,9 @@ export default {
},
},
mounted
:
function
()
{
this
.
resolveExp
()
;
this
.
resolveExp
()
},
}
;
}
</
script
>
<
style
scoped
>
.pop_btn
{
...
...
ruoyi-ui/src/components/Crontab/min.vue
View file @
38ed092d
...
...
@@ -54,35 +54,35 @@ export default {
radioChange
()
{
switch
(
this
.
radioValue
)
{
case
1
:
this
.
$emit
(
'
update
'
,
'
min
'
,
'
*
'
,
'
min
'
)
;
break
;
this
.
$emit
(
'
update
'
,
'
min
'
,
'
*
'
,
'
min
'
)
break
case
2
:
this
.
$emit
(
'
update
'
,
'
min
'
,
this
.
cycleTotal
,
'
min
'
)
;
break
;
this
.
$emit
(
'
update
'
,
'
min
'
,
this
.
cycleTotal
,
'
min
'
)
break
case
3
:
this
.
$emit
(
'
update
'
,
'
min
'
,
this
.
averageTotal
,
'
min
'
)
;
break
;
this
.
$emit
(
'
update
'
,
'
min
'
,
this
.
averageTotal
,
'
min
'
)
break
case
4
:
this
.
$emit
(
'
update
'
,
'
min
'
,
this
.
checkboxString
,
'
min
'
)
;
break
;
this
.
$emit
(
'
update
'
,
'
min
'
,
this
.
checkboxString
,
'
min
'
)
break
}
},
// 周期两个值变化时
cycleChange
()
{
if
(
this
.
radioValue
==
'
2
'
)
{
this
.
$emit
(
'
update
'
,
'
min
'
,
this
.
cycleTotal
,
'
min
'
)
;
this
.
$emit
(
'
update
'
,
'
min
'
,
this
.
cycleTotal
,
'
min
'
)
}
},
// 平均两个值变化时
averageChange
()
{
if
(
this
.
radioValue
==
'
3
'
)
{
this
.
$emit
(
'
update
'
,
'
min
'
,
this
.
averageTotal
,
'
min
'
)
;
this
.
$emit
(
'
update
'
,
'
min
'
,
this
.
averageTotal
,
'
min
'
)
}
},
// checkbox值变化时
checkboxChange
()
{
if
(
this
.
radioValue
==
'
4
'
)
{
this
.
$emit
(
'
update
'
,
'
min
'
,
this
.
checkboxString
,
'
min
'
)
;
this
.
$emit
(
'
update
'
,
'
min
'
,
this
.
checkboxString
,
'
min
'
)
}
},
...
...
@@ -98,18 +98,18 @@ export default {
cycleTotal
:
function
()
{
const
cycle01
=
this
.
checkNum
(
this
.
cycle01
,
0
,
58
)
const
cycle02
=
this
.
checkNum
(
this
.
cycle02
,
cycle01
?
cycle01
+
1
:
1
,
59
)
return
cycle01
+
'
-
'
+
cycle02
;
return
cycle01
+
'
-
'
+
cycle02
},
// 计算平均用到的值
averageTotal
:
function
()
{
const
average01
=
this
.
checkNum
(
this
.
average01
,
0
,
58
)
const
average02
=
this
.
checkNum
(
this
.
average02
,
1
,
59
-
average01
||
0
)
return
average01
+
'
/
'
+
average02
;
return
average01
+
'
/
'
+
average02
},
// 计算勾选的checkbox值合集
checkboxString
:
function
()
{
let
str
=
this
.
checkboxList
.
join
()
;
return
str
==
''
?
'
*
'
:
str
;
let
str
=
this
.
checkboxList
.
join
()
return
str
==
''
?
'
*
'
:
str
}
}
}
...
...
ruoyi-ui/src/components/Crontab/month.vue
View file @
38ed092d
...
...
@@ -53,35 +53,35 @@ export default {
radioChange
()
{
switch
(
this
.
radioValue
)
{
case
1
:
this
.
$emit
(
'
update
'
,
'
month
'
,
'
*
'
)
;
break
;
this
.
$emit
(
'
update
'
,
'
month
'
,
'
*
'
)
break
case
2
:
this
.
$emit
(
'
update
'
,
'
month
'
,
this
.
cycleTotal
)
;
break
;
this
.
$emit
(
'
update
'
,
'
month
'
,
this
.
cycleTotal
)
break
case
3
:
this
.
$emit
(
'
update
'
,
'
month
'
,
this
.
averageTotal
)
;
break
;
this
.
$emit
(
'
update
'
,
'
month
'
,
this
.
averageTotal
)
break
case
4
:
this
.
$emit
(
'
update
'
,
'
month
'
,
this
.
checkboxString
)
;
break
;
this
.
$emit
(
'
update
'
,
'
month
'
,
this
.
checkboxString
)
break
}
},
// 周期两个值变化时
cycleChange
()
{
if
(
this
.
radioValue
==
'
2
'
)
{
this
.
$emit
(
'
update
'
,
'
month
'
,
this
.
cycleTotal
)
;
this
.
$emit
(
'
update
'
,
'
month
'
,
this
.
cycleTotal
)
}
},
// 平均两个值变化时
averageChange
()
{
if
(
this
.
radioValue
==
'
3
'
)
{
this
.
$emit
(
'
update
'
,
'
month
'
,
this
.
averageTotal
)
;
this
.
$emit
(
'
update
'
,
'
month
'
,
this
.
averageTotal
)
}
},
// checkbox值变化时
checkboxChange
()
{
if
(
this
.
radioValue
==
'
4
'
)
{
this
.
$emit
(
'
update
'
,
'
month
'
,
this
.
checkboxString
)
;
this
.
$emit
(
'
update
'
,
'
month
'
,
this
.
checkboxString
)
}
}
},
...
...
@@ -96,18 +96,18 @@ export default {
cycleTotal
:
function
()
{
const
cycle01
=
this
.
checkNum
(
this
.
cycle01
,
1
,
11
)
const
cycle02
=
this
.
checkNum
(
this
.
cycle02
,
cycle01
?
cycle01
+
1
:
2
,
12
)
return
cycle01
+
'
-
'
+
cycle02
;
return
cycle01
+
'
-
'
+
cycle02
},
// 计算平均用到的值
averageTotal
:
function
()
{
const
average01
=
this
.
checkNum
(
this
.
average01
,
1
,
11
)
const
average02
=
this
.
checkNum
(
this
.
average02
,
1
,
12
-
average01
||
0
)
return
average01
+
'
/
'
+
average02
;
return
average01
+
'
/
'
+
average02
},
// 计算勾选的checkbox值合集
checkboxString
:
function
()
{
let
str
=
this
.
checkboxList
.
join
()
;
return
str
==
''
?
'
*
'
:
str
;
let
str
=
this
.
checkboxList
.
join
()
return
str
==
''
?
'
*
'
:
str
}
}
}
...
...
ruoyi-ui/src/components/Crontab/result.vue
View file @
38ed092d
...
...
@@ -27,135 +27,135 @@ export default {
expressionChange
()
{
// 计算开始-隐藏结果
this
.
isShow
=
false
;
this
.
isShow
=
false
// 获取规则数组[0秒、1分、2时、3日、4月、5星期、6年]
let
ruleArr
=
this
.
$options
.
propsData
.
ex
.
split
(
'
'
)
;
let
ruleArr
=
this
.
$options
.
propsData
.
ex
.
split
(
'
'
)
// 用于记录进入循环的次数
let
nums
=
0
;
let
nums
=
0
// 用于暂时存符号时间规则结果的数组
let
resultArr
=
[]
;
let
resultArr
=
[]
// 获取当前时间精确至[年、月、日、时、分、秒]
let
nTime
=
new
Date
()
;
let
nYear
=
nTime
.
getFullYear
()
;
let
nMonth
=
nTime
.
getMonth
()
+
1
;
let
nDay
=
nTime
.
getDate
()
;
let
nHour
=
nTime
.
getHours
()
;
let
nMin
=
nTime
.
getMinutes
()
;
let
nSecond
=
nTime
.
getSeconds
()
;
let
nTime
=
new
Date
()
let
nYear
=
nTime
.
getFullYear
()
let
nMonth
=
nTime
.
getMonth
()
+
1
let
nDay
=
nTime
.
getDate
()
let
nHour
=
nTime
.
getHours
()
let
nMin
=
nTime
.
getMinutes
()
let
nSecond
=
nTime
.
getSeconds
()
// 根据规则获取到近100年可能年数组、月数组等等
this
.
getSecondArr
(
ruleArr
[
0
])
;
this
.
getMinArr
(
ruleArr
[
1
])
;
this
.
getHourArr
(
ruleArr
[
2
])
;
this
.
getDayArr
(
ruleArr
[
3
])
;
this
.
getMonthArr
(
ruleArr
[
4
])
;
this
.
getWeekArr
(
ruleArr
[
5
])
;
this
.
getYearArr
(
ruleArr
[
6
],
nYear
)
;
this
.
getSecondArr
(
ruleArr
[
0
])
this
.
getMinArr
(
ruleArr
[
1
])
this
.
getHourArr
(
ruleArr
[
2
])
this
.
getDayArr
(
ruleArr
[
3
])
this
.
getMonthArr
(
ruleArr
[
4
])
this
.
getWeekArr
(
ruleArr
[
5
])
this
.
getYearArr
(
ruleArr
[
6
],
nYear
)
// 将获取到的数组赋值-方便使用
let
sDate
=
this
.
dateArr
[
0
]
;
let
mDate
=
this
.
dateArr
[
1
]
;
let
hDate
=
this
.
dateArr
[
2
]
;
let
DDate
=
this
.
dateArr
[
3
]
;
let
MDate
=
this
.
dateArr
[
4
]
;
let
YDate
=
this
.
dateArr
[
5
]
;
let
sDate
=
this
.
dateArr
[
0
]
let
mDate
=
this
.
dateArr
[
1
]
let
hDate
=
this
.
dateArr
[
2
]
let
DDate
=
this
.
dateArr
[
3
]
let
MDate
=
this
.
dateArr
[
4
]
let
YDate
=
this
.
dateArr
[
5
]
// 获取当前时间在数组中的索引
let
sIdx
=
this
.
getIndex
(
sDate
,
nSecond
)
;
let
mIdx
=
this
.
getIndex
(
mDate
,
nMin
)
;
let
hIdx
=
this
.
getIndex
(
hDate
,
nHour
)
;
let
DIdx
=
this
.
getIndex
(
DDate
,
nDay
)
;
let
MIdx
=
this
.
getIndex
(
MDate
,
nMonth
)
;
let
YIdx
=
this
.
getIndex
(
YDate
,
nYear
)
;
let
sIdx
=
this
.
getIndex
(
sDate
,
nSecond
)
let
mIdx
=
this
.
getIndex
(
mDate
,
nMin
)
let
hIdx
=
this
.
getIndex
(
hDate
,
nHour
)
let
DIdx
=
this
.
getIndex
(
DDate
,
nDay
)
let
MIdx
=
this
.
getIndex
(
MDate
,
nMonth
)
let
YIdx
=
this
.
getIndex
(
YDate
,
nYear
)
// 重置月日时分秒的函数(后面用的比较多)
const
resetSecond
=
function
()
{
sIdx
=
0
;
sIdx
=
0
nSecond
=
sDate
[
sIdx
]
}
const
resetMin
=
function
()
{
mIdx
=
0
;
mIdx
=
0
nMin
=
mDate
[
mIdx
]
resetSecond
()
;
resetSecond
()
}
const
resetHour
=
function
()
{
hIdx
=
0
;
hIdx
=
0
nHour
=
hDate
[
hIdx
]
resetMin
()
;
resetMin
()
}
const
resetDay
=
function
()
{
DIdx
=
0
;
DIdx
=
0
nDay
=
DDate
[
DIdx
]
resetHour
()
;
resetHour
()
}
const
resetMonth
=
function
()
{
MIdx
=
0
;
MIdx
=
0
nMonth
=
MDate
[
MIdx
]
resetDay
()
;
resetDay
()
}
// 如果当前年份不为数组中当前值
if
(
nYear
!==
YDate
[
YIdx
])
{
resetMonth
()
;
resetMonth
()
}
// 如果当前月份不为数组中当前值
if
(
nMonth
!==
MDate
[
MIdx
])
{
resetDay
()
;
resetDay
()
}
// 如果当前“日”不为数组中当前值
if
(
nDay
!==
DDate
[
DIdx
])
{
resetHour
()
;
resetHour
()
}
// 如果当前“时”不为数组中当前值
if
(
nHour
!==
hDate
[
hIdx
])
{
resetMin
()
;
resetMin
()
}
// 如果当前“分”不为数组中当前值
if
(
nMin
!==
mDate
[
mIdx
])
{
resetSecond
()
;
resetSecond
()
}
// 循环年份数组
goYear
:
for
(
let
Yi
=
YIdx
;
Yi
<
YDate
.
length
;
Yi
++
)
{
let
YY
=
YDate
[
Yi
]
;
let
YY
=
YDate
[
Yi
]
// 如果到达最大值时
if
(
nMonth
>
MDate
[
MDate
.
length
-
1
])
{
resetMonth
()
;
continue
;
resetMonth
()
continue
}
// 循环月份数组
goMonth
:
for
(
let
Mi
=
MIdx
;
Mi
<
MDate
.
length
;
Mi
++
)
{
// 赋值、方便后面运算
let
MM
=
MDate
[
Mi
];
MM
=
MM
<
10
?
'
0
'
+
MM
:
MM
;
MM
=
MM
<
10
?
'
0
'
+
MM
:
MM
// 如果到达最大值时
if
(
nDay
>
DDate
[
DDate
.
length
-
1
])
{
resetDay
()
;
resetDay
()
if
(
Mi
==
MDate
.
length
-
1
)
{
resetMonth
()
;
continue
goYear
;
resetMonth
()
continue
goYear
}
continue
;
continue
}
// 循环日期数组
goDay
:
for
(
let
Di
=
DIdx
;
Di
<
DDate
.
length
;
Di
++
)
{
// 赋值、方便后面运算
let
DD
=
DDate
[
Di
]
;
let
thisDD
=
DD
<
10
?
'
0
'
+
DD
:
DD
;
let
DD
=
DDate
[
Di
]
let
thisDD
=
DD
<
10
?
'
0
'
+
DD
:
DD
// 如果到达最大值时
if
(
nHour
>
hDate
[
hDate
.
length
-
1
])
{
resetHour
()
;
resetHour
()
if
(
Di
==
DDate
.
length
-
1
)
{
resetDay
()
;
resetDay
()
if
(
Mi
==
MDate
.
length
-
1
)
{
resetMonth
()
;
continue
goYear
;
resetMonth
()
continue
goYear
}
continue
goMonth
;
continue
goMonth
}
continue
;
continue
}
// 判断日期的合法性,不合法的话也是跳出当前循环
if
(
this
.
checkDate
(
YY
+
'
-
'
+
MM
+
'
-
'
+
thisDD
+
'
00:00:00
'
)
!==
true
&&
this
.
dayRule
!==
'
workDay
'
&&
this
.
dayRule
!==
'
lastWeek
'
&&
this
.
dayRule
!==
'
lastDay
'
)
{
resetDay
()
;
continue
goMonth
;
resetDay
()
continue
goMonth
}
// 如果日期规则中有值时
if
(
this
.
dayRule
==
'
lastDay
'
)
{
...
...
@@ -163,84 +163,83 @@ export default {
if
(
this
.
checkDate
(
YY
+
'
-
'
+
MM
+
'
-
'
+
thisDD
+
'
00:00:00
'
)
!==
true
)
{
while
(
DD
>
0
&&
this
.
checkDate
(
YY
+
'
-
'
+
MM
+
'
-
'
+
thisDD
+
'
00:00:00
'
)
!==
true
)
{
DD
--
;
thisDD
=
DD
<
10
?
'
0
'
+
DD
:
DD
;
DD
--
thisDD
=
DD
<
10
?
'
0
'
+
DD
:
DD
}
}
}
else
if
(
this
.
dayRule
==
'
workDay
'
)
{
// 校验并调整如果是2月30号这种日期传进来时需调整至正常月底
if
(
this
.
checkDate
(
YY
+
'
-
'
+
MM
+
'
-
'
+
thisDD
+
'
00:00:00
'
)
!==
true
)
{
while
(
DD
>
0
&&
this
.
checkDate
(
YY
+
'
-
'
+
MM
+
'
-
'
+
thisDD
+
'
00:00:00
'
)
!==
true
)
{
DD
--
;
thisDD
=
DD
<
10
?
'
0
'
+
DD
:
DD
;
DD
--
thisDD
=
DD
<
10
?
'
0
'
+
DD
:
DD
}
}
// 获取达到条件的日期是星期X
let
thisWeek
=
this
.
formatDate
(
new
Date
(
YY
+
'
-
'
+
MM
+
'
-
'
+
thisDD
+
'
00:00:00
'
),
'
week
'
)
;
let
thisWeek
=
this
.
formatDate
(
new
Date
(
YY
+
'
-
'
+
MM
+
'
-
'
+
thisDD
+
'
00:00:00
'
),
'
week
'
)
// 当星期日时
if
(
thisWeek
==
1
)
{
// 先找下一个日,并判断是否为月底
DD
++
;
thisDD
=
DD
<
10
?
'
0
'
+
DD
:
DD
;
DD
++
thisDD
=
DD
<
10
?
'
0
'
+
DD
:
DD
// 判断下一日已经不是合法日期
if
(
this
.
checkDate
(
YY
+
'
-
'
+
MM
+
'
-
'
+
thisDD
+
'
00:00:00
'
)
!==
true
)
{
DD
-=
3
;
DD
-=
3
}
}
else
if
(
thisWeek
==
7
)
{
// 当星期6时只需判断不是1号就可进行操作
if
(
this
.
dayRuleSup
!==
1
)
{
DD
--
;
DD
--
}
else
{
DD
+=
2
;
DD
+=
2
}
}
}
else
if
(
this
.
dayRule
==
'
weekDay
'
)
{
// 如果指定了是星期几
// 获取当前日期是属于星期几
let
thisWeek
=
this
.
formatDate
(
new
Date
(
YY
+
'
-
'
+
MM
+
'
-
'
+
DD
+
'
00:00:00
'
),
'
week
'
)
;
let
thisWeek
=
this
.
formatDate
(
new
Date
(
YY
+
'
-
'
+
MM
+
'
-
'
+
DD
+
'
00:00:00
'
),
'
week
'
)
// 校验当前星期是否在星期池(dayRuleSup)中
if
(
this
.
dayRuleSup
.
indexOf
(
thisWeek
)
<
0
)
{
// 如果到达最大值时
if
(
Di
==
DDate
.
length
-
1
)
{
resetDay
()
;
resetDay
()
if
(
Mi
==
MDate
.
length
-
1
)
{
resetMonth
()
;
continue
goYear
;
resetMonth
()
continue
goYear
}
continue
goMonth
;
continue
goMonth
}
continue
;
continue
}
}
else
if
(
this
.
dayRule
==
'
assWeek
'
)
{
// 如果指定了是第几周的星期几
// 获取每月1号是属于星期几
let
thisWeek
=
this
.
formatDate
(
new
Date
(
YY
+
'
-
'
+
MM
+
'
-
'
+
DD
+
'
00:00:00
'
),
'
week
'
)
;
let
thisWeek
=
this
.
formatDate
(
new
Date
(
YY
+
'
-
'
+
MM
+
'
-
'
+
DD
+
'
00:00:00
'
),
'
week
'
)
if
(
this
.
dayRuleSup
[
1
]
>=
thisWeek
)
{
DD
=
(
this
.
dayRuleSup
[
0
]
-
1
)
*
7
+
this
.
dayRuleSup
[
1
]
-
thisWeek
+
1
;
DD
=
(
this
.
dayRuleSup
[
0
]
-
1
)
*
7
+
this
.
dayRuleSup
[
1
]
-
thisWeek
+
1
}
else
{
DD
=
this
.
dayRuleSup
[
0
]
*
7
+
this
.
dayRuleSup
[
1
]
-
thisWeek
+
1
;
DD
=
this
.
dayRuleSup
[
0
]
*
7
+
this
.
dayRuleSup
[
1
]
-
thisWeek
+
1
}
}
else
if
(
this
.
dayRule
==
'
lastWeek
'
)
{
// 如果指定了每月最后一个星期几
// 校验并调整如果是2月30号这种日期传进来时需调整至正常月底
if
(
this
.
checkDate
(
YY
+
'
-
'
+
MM
+
'
-
'
+
thisDD
+
'
00:00:00
'
)
!==
true
)
{
while
(
DD
>
0
&&
this
.
checkDate
(
YY
+
'
-
'
+
MM
+
'
-
'
+
thisDD
+
'
00:00:00
'
)
!==
true
)
{
DD
--
;
thisDD
=
DD
<
10
?
'
0
'
+
DD
:
DD
;
DD
--
thisDD
=
DD
<
10
?
'
0
'
+
DD
:
DD
}
}
// 获取月末最后一天是星期几
let
thisWeek
=
this
.
formatDate
(
new
Date
(
YY
+
'
-
'
+
MM
+
'
-
'
+
thisDD
+
'
00:00:00
'
),
'
week
'
)
;
let
thisWeek
=
this
.
formatDate
(
new
Date
(
YY
+
'
-
'
+
MM
+
'
-
'
+
thisDD
+
'
00:00:00
'
),
'
week
'
)
// 找到要求中最近的那个星期几
if
(
this
.
dayRuleSup
<
thisWeek
)
{
DD
-=
thisWeek
-
this
.
dayRuleSup
;
DD
-=
thisWeek
-
this
.
dayRuleSup
}
else
if
(
this
.
dayRuleSup
>
thisWeek
)
{
DD
-=
7
-
(
this
.
dayRuleSup
-
thisWeek
)
}
}
// 判断时间值是否小于10置换成“05”这种格式
DD
=
DD
<
10
?
'
0
'
+
DD
:
DD
;
DD
=
DD
<
10
?
'
0
'
+
DD
:
DD
// 循环“时”数组
goHour
:
for
(
let
hi
=
hIdx
;
hi
<
hDate
.
length
;
hi
++
)
{
...
...
@@ -248,76 +247,76 @@ export default {
// 如果到达最大值时
if
(
nMin
>
mDate
[
mDate
.
length
-
1
])
{
resetMin
()
;
resetMin
()
if
(
hi
==
hDate
.
length
-
1
)
{
resetHour
()
;
resetHour
()
if
(
Di
==
DDate
.
length
-
1
)
{
resetDay
()
;
resetDay
()
if
(
Mi
==
MDate
.
length
-
1
)
{
resetMonth
()
;
continue
goYear
;
resetMonth
()
continue
goYear
}
continue
goMonth
;
continue
goMonth
}
continue
goDay
;
continue
goDay
}
continue
;
continue
}
// 循环"分"数组
goMin
:
for
(
let
mi
=
mIdx
;
mi
<
mDate
.
length
;
mi
++
)
{
let
mm
=
mDate
[
mi
]
<
10
?
'
0
'
+
mDate
[
mi
]
:
mDate
[
mi
]
;
let
mm
=
mDate
[
mi
]
<
10
?
'
0
'
+
mDate
[
mi
]
:
mDate
[
mi
]
// 如果到达最大值时
if
(
nSecond
>
sDate
[
sDate
.
length
-
1
])
{
resetSecond
()
;
resetSecond
()
if
(
mi
==
mDate
.
length
-
1
)
{
resetMin
()
;
resetMin
()
if
(
hi
==
hDate
.
length
-
1
)
{
resetHour
()
;
resetHour
()
if
(
Di
==
DDate
.
length
-
1
)
{
resetDay
()
;
resetDay
()
if
(
Mi
==
MDate
.
length
-
1
)
{
resetMonth
()
;
continue
goYear
;
resetMonth
()
continue
goYear
}
continue
goMonth
;
continue
goMonth
}
continue
goDay
;
continue
goDay
}
continue
goHour
;
continue
goHour
}
continue
;
continue
}
// 循环"秒"数组
goSecond
:
for
(
let
si
=
sIdx
;
si
<=
sDate
.
length
-
1
;
si
++
)
{
let
ss
=
sDate
[
si
]
<
10
?
'
0
'
+
sDate
[
si
]
:
sDate
[
si
]
;
let
ss
=
sDate
[
si
]
<
10
?
'
0
'
+
sDate
[
si
]
:
sDate
[
si
]
// 添加当前时间(时间合法性在日期循环时已经判断)
if
(
MM
!==
'
00
'
&&
DD
!==
'
00
'
)
{
resultArr
.
push
(
YY
+
'
-
'
+
MM
+
'
-
'
+
DD
+
'
'
+
hh
+
'
:
'
+
mm
+
'
:
'
+
ss
)
nums
++
;
nums
++
}
// 如果条数满了就退出循环
if
(
nums
==
5
)
break
goYear
;
if
(
nums
==
5
)
break
goYear
// 如果到达最大值时
if
(
si
==
sDate
.
length
-
1
)
{
resetSecond
()
;
resetSecond
()
if
(
mi
==
mDate
.
length
-
1
)
{
resetMin
()
;
resetMin
()
if
(
hi
==
hDate
.
length
-
1
)
{
resetHour
()
;
resetHour
()
if
(
Di
==
DDate
.
length
-
1
)
{
resetDay
()
;
resetDay
()
if
(
Mi
==
MDate
.
length
-
1
)
{
resetMonth
()
;
continue
goYear
;
resetMonth
()
continue
goYear
}
continue
goMonth
;
continue
goMonth
}
continue
goDay
;
continue
goDay
}
continue
goHour
;
continue
goHour
}
continue
goMin
;
continue
goMin
}
}
//goSecond
}
//goMin
...
...
@@ -327,33 +326,33 @@ export default {
}
// 判断100年内的结果条数
if
(
resultArr
.
length
==
0
)
{
this
.
resultList
=
[
'
没有达到条件的结果!
'
]
;
this
.
resultList
=
[
'
没有达到条件的结果!
'
]
}
else
{
this
.
resultList
=
resultArr
;
this
.
resultList
=
resultArr
if
(
resultArr
.
length
!==
5
)
{
this
.
resultList
.
push
(
'
最近100年内只有上面
'
+
resultArr
.
length
+
'
条结果!
'
)
}
}
// 计算完成-显示结果
this
.
isShow
=
true
;
this
.
isShow
=
true
},
// 用于计算某位数字在数组中的索引
getIndex
(
arr
,
value
)
{
if
(
value
<=
arr
[
0
]
||
value
>
arr
[
arr
.
length
-
1
])
{
return
0
;
return
0
}
else
{
for
(
let
i
=
0
;
i
<
arr
.
length
-
1
;
i
++
)
{
if
(
value
>
arr
[
i
]
&&
value
<=
arr
[
i
+
1
])
{
return
i
+
1
;
return
i
+
1
}
}
}
},
// 获取"年"数组
getYearArr
(
rule
,
year
)
{
this
.
dateArr
[
5
]
=
this
.
getOrderArr
(
year
,
year
+
100
)
;
this
.
dateArr
[
5
]
=
this
.
getOrderArr
(
year
,
year
+
100
)
if
(
rule
!==
undefined
)
{
if
(
rule
.
indexOf
(
'
-
'
)
>=
0
)
{
this
.
dateArr
[
5
]
=
this
.
getCycleArr
(
rule
,
year
+
100
,
false
)
...
...
@@ -366,7 +365,7 @@ export default {
},
// 获取"月"数组
getMonthArr
(
rule
)
{
this
.
dateArr
[
4
]
=
this
.
getOrderArr
(
1
,
12
)
;
this
.
dateArr
[
4
]
=
this
.
getOrderArr
(
1
,
12
)
if
(
rule
.
indexOf
(
'
-
'
)
>=
0
)
{
this
.
dateArr
[
4
]
=
this
.
getCycleArr
(
rule
,
12
,
false
)
}
else
if
(
rule
.
indexOf
(
'
/
'
)
>=
0
)
{
...
...
@@ -380,58 +379,58 @@ export default {
// 只有当日期规则的两个值均为“”时则表达日期是有选项的
if
(
this
.
dayRule
==
''
&&
this
.
dayRuleSup
==
''
)
{
if
(
rule
.
indexOf
(
'
-
'
)
>=
0
)
{
this
.
dayRule
=
'
weekDay
'
;
this
.
dayRule
=
'
weekDay
'
this
.
dayRuleSup
=
this
.
getCycleArr
(
rule
,
7
,
false
)
}
else
if
(
rule
.
indexOf
(
'
#
'
)
>=
0
)
{
this
.
dayRule
=
'
assWeek
'
;
let
matchRule
=
rule
.
match
(
/
[
0-9
]{1}
/g
)
;
this
.
dayRuleSup
=
[
Number
(
matchRule
[
1
]),
Number
(
matchRule
[
0
])]
;
this
.
dateArr
[
3
]
=
[
1
]
;
this
.
dayRule
=
'
assWeek
'
let
matchRule
=
rule
.
match
(
/
[
0-9
]{1}
/g
)
this
.
dayRuleSup
=
[
Number
(
matchRule
[
1
]),
Number
(
matchRule
[
0
])]
this
.
dateArr
[
3
]
=
[
1
]
if
(
this
.
dayRuleSup
[
1
]
==
7
)
{
this
.
dayRuleSup
[
1
]
=
0
;
this
.
dayRuleSup
[
1
]
=
0
}
}
else
if
(
rule
.
indexOf
(
'
L
'
)
>=
0
)
{
this
.
dayRule
=
'
lastWeek
'
;
this
.
dayRuleSup
=
Number
(
rule
.
match
(
/
[
0-9
]{1,2}
/g
)[
0
])
;
this
.
dateArr
[
3
]
=
[
31
]
;
this
.
dayRule
=
'
lastWeek
'
this
.
dayRuleSup
=
Number
(
rule
.
match
(
/
[
0-9
]{1,2}
/g
)[
0
])
this
.
dateArr
[
3
]
=
[
31
]
if
(
this
.
dayRuleSup
==
7
)
{
this
.
dayRuleSup
=
0
;
this
.
dayRuleSup
=
0
}
}
else
if
(
rule
!==
'
*
'
&&
rule
!==
'
?
'
)
{
this
.
dayRule
=
'
weekDay
'
;
this
.
dayRule
=
'
weekDay
'
this
.
dayRuleSup
=
this
.
getAssignArr
(
rule
)
}
}
},
// 获取"日"数组-少量为日期规则
getDayArr
(
rule
)
{
this
.
dateArr
[
3
]
=
this
.
getOrderArr
(
1
,
31
)
;
this
.
dayRule
=
''
;
this
.
dayRuleSup
=
''
;
this
.
dateArr
[
3
]
=
this
.
getOrderArr
(
1
,
31
)
this
.
dayRule
=
''
this
.
dayRuleSup
=
''
if
(
rule
.
indexOf
(
'
-
'
)
>=
0
)
{
this
.
dateArr
[
3
]
=
this
.
getCycleArr
(
rule
,
31
,
false
)
this
.
dayRuleSup
=
'
null
'
;
this
.
dayRuleSup
=
'
null
'
}
else
if
(
rule
.
indexOf
(
'
/
'
)
>=
0
)
{
this
.
dateArr
[
3
]
=
this
.
getAverageArr
(
rule
,
31
)
this
.
dayRuleSup
=
'
null
'
;
this
.
dayRuleSup
=
'
null
'
}
else
if
(
rule
.
indexOf
(
'
W
'
)
>=
0
)
{
this
.
dayRule
=
'
workDay
'
;
this
.
dayRuleSup
=
Number
(
rule
.
match
(
/
[
0-9
]{1,2}
/g
)[
0
])
;
this
.
dateArr
[
3
]
=
[
this
.
dayRuleSup
]
;
this
.
dayRule
=
'
workDay
'
this
.
dayRuleSup
=
Number
(
rule
.
match
(
/
[
0-9
]{1,2}
/g
)[
0
])
this
.
dateArr
[
3
]
=
[
this
.
dayRuleSup
]
}
else
if
(
rule
.
indexOf
(
'
L
'
)
>=
0
)
{
this
.
dayRule
=
'
lastDay
'
;
this
.
dayRuleSup
=
'
null
'
;
this
.
dateArr
[
3
]
=
[
31
]
;
this
.
dayRule
=
'
lastDay
'
this
.
dayRuleSup
=
'
null
'
this
.
dateArr
[
3
]
=
[
31
]
}
else
if
(
rule
!==
'
*
'
&&
rule
!==
'
?
'
)
{
this
.
dateArr
[
3
]
=
this
.
getAssignArr
(
rule
)
this
.
dayRuleSup
=
'
null
'
;
this
.
dayRuleSup
=
'
null
'
}
else
if
(
rule
==
'
*
'
)
{
this
.
dayRuleSup
=
'
null
'
;
this
.
dayRuleSup
=
'
null
'
}
},
// 获取"时"数组
getHourArr
(
rule
)
{
this
.
dateArr
[
2
]
=
this
.
getOrderArr
(
0
,
23
)
;
this
.
dateArr
[
2
]
=
this
.
getOrderArr
(
0
,
23
)
if
(
rule
.
indexOf
(
'
-
'
)
>=
0
)
{
this
.
dateArr
[
2
]
=
this
.
getCycleArr
(
rule
,
24
,
true
)
}
else
if
(
rule
.
indexOf
(
'
/
'
)
>=
0
)
{
...
...
@@ -442,7 +441,7 @@ export default {
},
// 获取"分"数组
getMinArr
(
rule
)
{
this
.
dateArr
[
1
]
=
this
.
getOrderArr
(
0
,
59
)
;
this
.
dateArr
[
1
]
=
this
.
getOrderArr
(
0
,
59
)
if
(
rule
.
indexOf
(
'
-
'
)
>=
0
)
{
this
.
dateArr
[
1
]
=
this
.
getCycleArr
(
rule
,
60
,
true
)
}
else
if
(
rule
.
indexOf
(
'
/
'
)
>=
0
)
{
...
...
@@ -453,7 +452,7 @@ export default {
},
// 获取"秒"数组
getSecondArr
(
rule
)
{
this
.
dateArr
[
0
]
=
this
.
getOrderArr
(
0
,
59
)
;
this
.
dateArr
[
0
]
=
this
.
getOrderArr
(
0
,
59
)
if
(
rule
.
indexOf
(
'
-
'
)
>=
0
)
{
this
.
dateArr
[
0
]
=
this
.
getCycleArr
(
rule
,
60
,
true
)
}
else
if
(
rule
.
indexOf
(
'
/
'
)
>=
0
)
{
...
...
@@ -464,86 +463,86 @@ export default {
},
// 根据传进来的min-max返回一个顺序的数组
getOrderArr
(
min
,
max
)
{
let
arr
=
[]
;
let
arr
=
[]
for
(
let
i
=
min
;
i
<=
max
;
i
++
)
{
arr
.
push
(
i
)
;
arr
.
push
(
i
)
}
return
arr
;
return
arr
},
// 根据规则中指定的零散值返回一个数组
getAssignArr
(
rule
)
{
let
arr
=
[]
;
let
assiginArr
=
rule
.
split
(
'
,
'
)
;
let
arr
=
[]
let
assiginArr
=
rule
.
split
(
'
,
'
)
for
(
let
i
=
0
;
i
<
assiginArr
.
length
;
i
++
)
{
arr
[
i
]
=
Number
(
assiginArr
[
i
])
}
arr
.
sort
(
this
.
compare
)
return
arr
;
return
arr
},
// 根据一定算术规则计算返回一个数组
getAverageArr
(
rule
,
limit
)
{
let
arr
=
[]
;
let
agArr
=
rule
.
split
(
'
/
'
)
;
let
min
=
Number
(
agArr
[
0
])
;
let
step
=
Number
(
agArr
[
1
])
;
let
arr
=
[]
let
agArr
=
rule
.
split
(
'
/
'
)
let
min
=
Number
(
agArr
[
0
])
let
step
=
Number
(
agArr
[
1
])
while
(
min
<=
limit
)
{
arr
.
push
(
min
)
;
min
+=
step
;
arr
.
push
(
min
)
min
+=
step
}
return
arr
;
return
arr
},
// 根据规则返回一个具有周期性的数组
getCycleArr
(
rule
,
limit
,
status
)
{
// status--表示是否从0开始(则从1开始)
let
arr
=
[]
;
let
cycleArr
=
rule
.
split
(
'
-
'
)
;
let
min
=
Number
(
cycleArr
[
0
])
;
let
max
=
Number
(
cycleArr
[
1
])
;
let
arr
=
[]
let
cycleArr
=
rule
.
split
(
'
-
'
)
let
min
=
Number
(
cycleArr
[
0
])
let
max
=
Number
(
cycleArr
[
1
])
if
(
min
>
max
)
{
max
+=
limit
;
max
+=
limit
}
for
(
let
i
=
min
;
i
<=
max
;
i
++
)
{
let
add
=
0
;
let
add
=
0
if
(
status
==
false
&&
i
%
limit
==
0
)
{
add
=
limit
;
add
=
limit
}
arr
.
push
(
Math
.
round
(
i
%
limit
+
add
))
}
arr
.
sort
(
this
.
compare
)
return
arr
;
return
arr
},
// 比较数字大小(用于Array.sort)
compare
(
value1
,
value2
)
{
if
(
value2
-
value1
>
0
)
{
return
-
1
;
return
-
1
}
else
{
return
1
;
return
1
}
},
// 格式化日期格式如:2017-9-19 18:04:33
formatDate
(
value
,
type
)
{
// 计算日期相关值
let
time
=
typeof
value
==
'
number
'
?
new
Date
(
value
)
:
value
;
let
Y
=
time
.
getFullYear
()
;
let
M
=
time
.
getMonth
()
+
1
;
let
D
=
time
.
getDate
()
;
let
h
=
time
.
getHours
()
;
let
m
=
time
.
getMinutes
()
;
let
s
=
time
.
getSeconds
()
;
let
week
=
time
.
getDay
()
;
let
time
=
typeof
value
==
'
number
'
?
new
Date
(
value
)
:
value
let
Y
=
time
.
getFullYear
()
let
M
=
time
.
getMonth
()
+
1
let
D
=
time
.
getDate
()
let
h
=
time
.
getHours
()
let
m
=
time
.
getMinutes
()
let
s
=
time
.
getSeconds
()
let
week
=
time
.
getDay
()
// 如果传递了type的话
if
(
type
==
undefined
)
{
return
Y
+
'
-
'
+
(
M
<
10
?
'
0
'
+
M
:
M
)
+
'
-
'
+
(
D
<
10
?
'
0
'
+
D
:
D
)
+
'
'
+
(
h
<
10
?
'
0
'
+
h
:
h
)
+
'
:
'
+
(
m
<
10
?
'
0
'
+
m
:
m
)
+
'
:
'
+
(
s
<
10
?
'
0
'
+
s
:
s
)
;
return
Y
+
'
-
'
+
(
M
<
10
?
'
0
'
+
M
:
M
)
+
'
-
'
+
(
D
<
10
?
'
0
'
+
D
:
D
)
+
'
'
+
(
h
<
10
?
'
0
'
+
h
:
h
)
+
'
:
'
+
(
m
<
10
?
'
0
'
+
m
:
m
)
+
'
:
'
+
(
s
<
10
?
'
0
'
+
s
:
s
)
}
else
if
(
type
==
'
week
'
)
{
// 在quartz中 1为星期日
return
week
+
1
;
return
week
+
1
}
},
// 检查日期是否存在
checkDate
(
value
)
{
let
time
=
new
Date
(
value
)
;
let
time
=
new
Date
(
value
)
let
format
=
this
.
formatDate
(
time
)
return
value
===
format
;
return
value
===
format
}
},
watch
:
{
...
...
@@ -552,7 +551,7 @@ export default {
props
:
[
'
ex
'
],
mounted
:
function
()
{
// 初始化 获取一次结果
this
.
expressionChange
()
;
this
.
expressionChange
()
}
}
...
...
ruoyi-ui/src/components/Crontab/second.vue
View file @
38ed092d
...
...
@@ -53,35 +53,35 @@ export default {
radioChange
()
{
switch
(
this
.
radioValue
)
{
case
1
:
this
.
$emit
(
'
update
'
,
'
second
'
,
'
*
'
,
'
second
'
)
;
break
;
this
.
$emit
(
'
update
'
,
'
second
'
,
'
*
'
,
'
second
'
)
break
case
2
:
this
.
$emit
(
'
update
'
,
'
second
'
,
this
.
cycleTotal
)
;
break
;
this
.
$emit
(
'
update
'
,
'
second
'
,
this
.
cycleTotal
)
break
case
3
:
this
.
$emit
(
'
update
'
,
'
second
'
,
this
.
averageTotal
)
;
break
;
this
.
$emit
(
'
update
'
,
'
second
'
,
this
.
averageTotal
)
break
case
4
:
this
.
$emit
(
'
update
'
,
'
second
'
,
this
.
checkboxString
)
;
break
;
this
.
$emit
(
'
update
'
,
'
second
'
,
this
.
checkboxString
)
break
}
},
// 周期两个值变化时
cycleChange
()
{
if
(
this
.
radioValue
==
'
2
'
)
{
this
.
$emit
(
'
update
'
,
'
second
'
,
this
.
cycleTotal
)
;
this
.
$emit
(
'
update
'
,
'
second
'
,
this
.
cycleTotal
)
}
},
// 平均两个值变化时
averageChange
()
{
if
(
this
.
radioValue
==
'
3
'
)
{
this
.
$emit
(
'
update
'
,
'
second
'
,
this
.
averageTotal
)
;
this
.
$emit
(
'
update
'
,
'
second
'
,
this
.
averageTotal
)
}
},
// checkbox值变化时
checkboxChange
()
{
if
(
this
.
radioValue
==
'
4
'
)
{
this
.
$emit
(
'
update
'
,
'
second
'
,
this
.
checkboxString
)
;
this
.
$emit
(
'
update
'
,
'
second
'
,
this
.
checkboxString
)
}
}
},
...
...
@@ -99,18 +99,18 @@ export default {
cycleTotal
:
function
()
{
const
cycle01
=
this
.
checkNum
(
this
.
cycle01
,
0
,
58
)
const
cycle02
=
this
.
checkNum
(
this
.
cycle02
,
cycle01
?
cycle01
+
1
:
1
,
59
)
return
cycle01
+
'
-
'
+
cycle02
;
return
cycle01
+
'
-
'
+
cycle02
},
// 计算平均用到的值
averageTotal
:
function
()
{
const
average01
=
this
.
checkNum
(
this
.
average01
,
0
,
58
)
const
average02
=
this
.
checkNum
(
this
.
average02
,
1
,
59
-
average01
||
0
)
return
average01
+
'
/
'
+
average02
;
return
average01
+
'
/
'
+
average02
},
// 计算勾选的checkbox值合集
checkboxString
:
function
()
{
let
str
=
this
.
checkboxList
.
join
()
;
return
str
==
''
?
'
*
'
:
str
;
let
str
=
this
.
checkboxList
.
join
()
return
str
==
''
?
'
*
'
:
str
}
}
}
...
...
ruoyi-ui/src/components/Crontab/week.vue
View file @
38ed092d
...
...
@@ -118,52 +118,52 @@ export default {
// 单选按钮值变化时
radioChange
()
{
if
(
this
.
radioValue
!==
2
&&
this
.
cron
.
day
!==
'
?
'
)
{
this
.
$emit
(
'
update
'
,
'
day
'
,
'
?
'
,
'
week
'
)
;
this
.
$emit
(
'
update
'
,
'
day
'
,
'
?
'
,
'
week
'
)
}
switch
(
this
.
radioValue
)
{
case
1
:
this
.
$emit
(
'
update
'
,
'
week
'
,
'
*
'
)
;
break
;
this
.
$emit
(
'
update
'
,
'
week
'
,
'
*
'
)
break
case
2
:
this
.
$emit
(
'
update
'
,
'
week
'
,
'
?
'
)
;
break
;
this
.
$emit
(
'
update
'
,
'
week
'
,
'
?
'
)
break
case
3
:
this
.
$emit
(
'
update
'
,
'
week
'
,
this
.
cycleTotal
)
;
break
;
this
.
$emit
(
'
update
'
,
'
week
'
,
this
.
cycleTotal
)
break
case
4
:
this
.
$emit
(
'
update
'
,
'
week
'
,
this
.
averageTotal
)
;
break
;
this
.
$emit
(
'
update
'
,
'
week
'
,
this
.
averageTotal
)
break
case
5
:
this
.
$emit
(
'
update
'
,
'
week
'
,
this
.
weekdayCheck
+
'
L
'
)
;
break
;
this
.
$emit
(
'
update
'
,
'
week
'
,
this
.
weekdayCheck
+
'
L
'
)
break
case
6
:
this
.
$emit
(
'
update
'
,
'
week
'
,
this
.
checkboxString
)
;
break
;
this
.
$emit
(
'
update
'
,
'
week
'
,
this
.
checkboxString
)
break
}
},
// 周期两个值变化时
cycleChange
()
{
if
(
this
.
radioValue
==
'
3
'
)
{
this
.
$emit
(
'
update
'
,
'
week
'
,
this
.
cycleTotal
)
;
this
.
$emit
(
'
update
'
,
'
week
'
,
this
.
cycleTotal
)
}
},
// 平均两个值变化时
averageChange
()
{
if
(
this
.
radioValue
==
'
4
'
)
{
this
.
$emit
(
'
update
'
,
'
week
'
,
this
.
averageTotal
)
;
this
.
$emit
(
'
update
'
,
'
week
'
,
this
.
averageTotal
)
}
},
// 最近工作日值变化时
weekdayChange
()
{
if
(
this
.
radioValue
==
'
5
'
)
{
this
.
$emit
(
'
update
'
,
'
week
'
,
this
.
weekday
+
'
L
'
)
;
this
.
$emit
(
'
update
'
,
'
week
'
,
this
.
weekday
+
'
L
'
)
}
},
// checkbox值变化时
checkboxChange
()
{
if
(
this
.
radioValue
==
'
6
'
)
{
this
.
$emit
(
'
update
'
,
'
week
'
,
this
.
checkboxString
)
;
this
.
$emit
(
'
update
'
,
'
week
'
,
this
.
checkboxString
)
}
},
},
...
...
@@ -179,23 +179,23 @@ export default {
cycleTotal
:
function
()
{
this
.
cycle01
=
this
.
checkNum
(
this
.
cycle01
,
1
,
7
)
this
.
cycle02
=
this
.
checkNum
(
this
.
cycle02
,
1
,
7
)
return
this
.
cycle01
+
'
-
'
+
this
.
cycle02
;
return
this
.
cycle01
+
'
-
'
+
this
.
cycle02
},
// 计算平均用到的值
averageTotal
:
function
()
{
this
.
average01
=
this
.
checkNum
(
this
.
average01
,
1
,
4
)
this
.
average02
=
this
.
checkNum
(
this
.
average02
,
1
,
7
)
return
this
.
average02
+
'
#
'
+
this
.
average01
;
return
this
.
average02
+
'
#
'
+
this
.
average01
},
// 最近的工作日(格式)
weekdayCheck
:
function
()
{
this
.
weekday
=
this
.
checkNum
(
this
.
weekday
,
1
,
7
)
return
this
.
weekday
;
return
this
.
weekday
},
// 计算勾选的checkbox值合集
checkboxString
:
function
()
{
let
str
=
this
.
checkboxList
.
join
()
;
return
str
==
''
?
'
*
'
:
str
;
let
str
=
this
.
checkboxList
.
join
()
return
str
==
''
?
'
*
'
:
str
}
}
}
...
...
ruoyi-ui/src/components/Crontab/year.vue
View file @
38ed092d
...
...
@@ -61,38 +61,38 @@ export default {
radioChange
()
{
switch
(
this
.
radioValue
)
{
case
1
:
this
.
$emit
(
'
update
'
,
'
year
'
,
''
)
;
break
;
this
.
$emit
(
'
update
'
,
'
year
'
,
''
)
break
case
2
:
this
.
$emit
(
'
update
'
,
'
year
'
,
'
*
'
)
;
break
;
this
.
$emit
(
'
update
'
,
'
year
'
,
'
*
'
)
break
case
3
:
this
.
$emit
(
'
update
'
,
'
year
'
,
this
.
cycleTotal
)
;
break
;
this
.
$emit
(
'
update
'
,
'
year
'
,
this
.
cycleTotal
)
break
case
4
:
this
.
$emit
(
'
update
'
,
'
year
'
,
this
.
averageTotal
)
;
break
;
this
.
$emit
(
'
update
'
,
'
year
'
,
this
.
averageTotal
)
break
case
5
:
this
.
$emit
(
'
update
'
,
'
year
'
,
this
.
checkboxString
)
;
break
;
this
.
$emit
(
'
update
'
,
'
year
'
,
this
.
checkboxString
)
break
}
},
// 周期两个值变化时
cycleChange
()
{
if
(
this
.
radioValue
==
'
3
'
)
{
this
.
$emit
(
'
update
'
,
'
year
'
,
this
.
cycleTotal
)
;
this
.
$emit
(
'
update
'
,
'
year
'
,
this
.
cycleTotal
)
}
},
// 平均两个值变化时
averageChange
()
{
if
(
this
.
radioValue
==
'
4
'
)
{
this
.
$emit
(
'
update
'
,
'
year
'
,
this
.
averageTotal
)
;
this
.
$emit
(
'
update
'
,
'
year
'
,
this
.
averageTotal
)
}
},
// checkbox值变化时
checkboxChange
()
{
if
(
this
.
radioValue
==
'
5
'
)
{
this
.
$emit
(
'
update
'
,
'
year
'
,
this
.
checkboxString
)
;
this
.
$emit
(
'
update
'
,
'
year
'
,
this
.
checkboxString
)
}
}
},
...
...
@@ -107,23 +107,23 @@ export default {
cycleTotal
:
function
()
{
const
cycle01
=
this
.
checkNum
(
this
.
cycle01
,
this
.
fullYear
,
2098
)
const
cycle02
=
this
.
checkNum
(
this
.
cycle02
,
cycle01
?
cycle01
+
1
:
this
.
fullYear
+
1
,
2099
)
return
cycle01
+
'
-
'
+
cycle02
;
return
cycle01
+
'
-
'
+
cycle02
},
// 计算平均用到的值
averageTotal
:
function
()
{
const
average01
=
this
.
checkNum
(
this
.
average01
,
this
.
fullYear
,
2098
)
const
average02
=
this
.
checkNum
(
this
.
average02
,
1
,
2099
-
average01
||
this
.
fullYear
)
return
average01
+
'
/
'
+
average02
;
return
average01
+
'
/
'
+
average02
},
// 计算勾选的checkbox值合集
checkboxString
:
function
()
{
let
str
=
this
.
checkboxList
.
join
()
;
return
str
;
let
str
=
this
.
checkboxList
.
join
()
return
str
}
},
mounted
:
function
()
{
// 仅获取当前年份
this
.
fullYear
=
Number
(
new
Date
().
getFullYear
())
;
this
.
fullYear
=
Number
(
new
Date
().
getFullYear
())
this
.
cycle01
=
this
.
fullYear
this
.
average01
=
this
.
fullYear
}
...
...
ruoyi-ui/src/components/DictTag/index.vue
View file @
38ed092d
...
...
@@ -74,13 +74,13 @@ export default {
},
filters
:
{
handleArray
(
array
)
{
if
(
array
.
length
===
0
)
return
''
;
if
(
array
.
length
===
0
)
return
''
return
array
.
reduce
((
pre
,
cur
)
=>
{
return
pre
+
'
'
+
cur
;
return
pre
+
'
'
+
cur
})
},
}
}
;
}
</
script
>
<
style
scoped
>
.el-tag
+
.el-tag
{
...
...
ruoyi-ui/src/components/Editor/index.vue
View file @
38ed092d
...
...
@@ -18,12 +18,12 @@
</
template
>
<
script
>
import
axios
from
'
axios
'
;
import
Quill
from
"
quill
"
;
import
"
quill/dist/quill.core.css
"
;
import
"
quill/dist/quill.snow.css
"
;
import
"
quill/dist/quill.bubble.css
"
;
import
{
getToken
}
from
"
@/utils/auth
"
;
import
axios
from
'
axios
'
import
Quill
from
"
quill
"
import
"
quill/dist/quill.core.css
"
import
"
quill/dist/quill.snow.css
"
import
"
quill/dist/quill.bubble.css
"
import
{
getToken
}
from
"
@/utils/auth
"
export
default
{
name
:
"
Editor
"
,
...
...
@@ -89,27 +89,27 @@ export default {
placeholder
:
"
请输入内容
"
,
readOnly
:
this
.
readOnly
,
},
}
;
}
},
computed
:
{
styles
()
{
let
style
=
{}
;
let
style
=
{}
if
(
this
.
minHeight
)
{
style
.
minHeight
=
`
${
this
.
minHeight
}
px`
;
style
.
minHeight
=
`
${
this
.
minHeight
}
px`
}
if
(
this
.
height
)
{
style
.
height
=
`
${
this
.
height
}
px`
;
style
.
height
=
`
${
this
.
height
}
px`
}
return
style
;
return
style
},
},
watch
:
{
value
:
{
handler
(
val
)
{
if
(
val
!==
this
.
currentValue
)
{
this
.
currentValue
=
val
===
null
?
""
:
val
;
this
.
currentValue
=
val
===
null
?
""
:
val
if
(
this
.
Quill
)
{
this
.
Quill
.
clipboard
.
dangerouslyPasteHTML
(
this
.
currentValue
)
;
this
.
Quill
.
clipboard
.
dangerouslyPasteHTML
(
this
.
currentValue
)
}
}
},
...
...
@@ -117,102 +117,102 @@ export default {
},
},
mounted
()
{
this
.
init
()
;
this
.
init
()
},
beforeDestroy
()
{
this
.
Quill
=
null
;
this
.
Quill
=
null
},
methods
:
{
init
()
{
const
editor
=
this
.
$refs
.
editor
;
this
.
Quill
=
new
Quill
(
editor
,
this
.
options
)
;
const
editor
=
this
.
$refs
.
editor
this
.
Quill
=
new
Quill
(
editor
,
this
.
options
)
// 如果设置了上传地址则自定义图片上传事件
if
(
this
.
type
==
'
url
'
)
{
let
toolbar
=
this
.
Quill
.
getModule
(
"
toolbar
"
)
;
let
toolbar
=
this
.
Quill
.
getModule
(
"
toolbar
"
)
toolbar
.
addHandler
(
"
image
"
,
(
value
)
=>
{
if
(
value
)
{
this
.
$refs
.
upload
.
$children
[
0
].
$refs
.
input
.
click
()
;
this
.
$refs
.
upload
.
$children
[
0
].
$refs
.
input
.
click
()
}
else
{
this
.
quill
.
format
(
"
image
"
,
false
)
;
this
.
quill
.
format
(
"
image
"
,
false
)
}
})
;
this
.
Quill
.
root
.
addEventListener
(
'
paste
'
,
this
.
handlePasteCapture
,
true
)
;
})
this
.
Quill
.
root
.
addEventListener
(
'
paste
'
,
this
.
handlePasteCapture
,
true
)
}
this
.
Quill
.
clipboard
.
dangerouslyPasteHTML
(
this
.
currentValue
)
;
this
.
Quill
.
clipboard
.
dangerouslyPasteHTML
(
this
.
currentValue
)
this
.
Quill
.
on
(
"
text-change
"
,
(
delta
,
oldDelta
,
source
)
=>
{
const
html
=
this
.
$refs
.
editor
.
children
[
0
].
innerHTML
;
const
text
=
this
.
Quill
.
getText
()
;
const
quill
=
this
.
Quill
;
this
.
currentValue
=
html
;
this
.
$emit
(
"
input
"
,
html
)
;
this
.
$emit
(
"
on-change
"
,
{
html
,
text
,
quill
})
;
})
;
const
html
=
this
.
$refs
.
editor
.
children
[
0
].
innerHTML
const
text
=
this
.
Quill
.
getText
()
const
quill
=
this
.
Quill
this
.
currentValue
=
html
this
.
$emit
(
"
input
"
,
html
)
this
.
$emit
(
"
on-change
"
,
{
html
,
text
,
quill
})
})
this
.
Quill
.
on
(
"
text-change
"
,
(
delta
,
oldDelta
,
source
)
=>
{
this
.
$emit
(
"
on-text-change
"
,
delta
,
oldDelta
,
source
)
;
})
;
this
.
$emit
(
"
on-text-change
"
,
delta
,
oldDelta
,
source
)
})
this
.
Quill
.
on
(
"
selection-change
"
,
(
range
,
oldRange
,
source
)
=>
{
this
.
$emit
(
"
on-selection-change
"
,
range
,
oldRange
,
source
)
;
})
;
this
.
$emit
(
"
on-selection-change
"
,
range
,
oldRange
,
source
)
})
this
.
Quill
.
on
(
"
editor-change
"
,
(
eventName
,
...
args
)
=>
{
this
.
$emit
(
"
on-editor-change
"
,
eventName
,
...
args
)
;
})
;
this
.
$emit
(
"
on-editor-change
"
,
eventName
,
...
args
)
})
},
// 上传前校检格式和大小
handleBeforeUpload
(
file
)
{
const
type
=
[
"
image/jpeg
"
,
"
image/jpg
"
,
"
image/png
"
,
"
image/svg
"
]
;
const
isJPG
=
type
.
includes
(
file
.
type
)
;
const
type
=
[
"
image/jpeg
"
,
"
image/jpg
"
,
"
image/png
"
,
"
image/svg
"
]
const
isJPG
=
type
.
includes
(
file
.
type
)
// 检验文件格式
if
(
!
isJPG
)
{
this
.
$message
.
error
(
`图片格式错误!`
)
;
return
false
;
this
.
$message
.
error
(
`图片格式错误!`
)
return
false
}
// 校检文件大小
if
(
this
.
fileSize
)
{
const
isLt
=
file
.
size
/
1024
/
1024
<
this
.
fileSize
;
const
isLt
=
file
.
size
/
1024
/
1024
<
this
.
fileSize
if
(
!
isLt
)
{
this
.
$message
.
error
(
`上传文件大小不能超过
${
this
.
fileSize
}
MB!`
)
;
return
false
;
this
.
$message
.
error
(
`上传文件大小不能超过
${
this
.
fileSize
}
MB!`
)
return
false
}
}
return
true
;
return
true
},
handleUploadSuccess
(
res
,
file
)
{
// 如果上传成功
if
(
res
.
code
==
200
)
{
// 获取富文本组件实例
let
quill
=
this
.
Quill
;
let
quill
=
this
.
Quill
// 获取光标所在位置
let
length
=
quill
.
getSelection
().
index
;
let
length
=
quill
.
getSelection
().
index
// 插入图片 res.url为服务器返回的图片地址
quill
.
insertEmbed
(
length
,
"
image
"
,
process
.
env
.
VUE_APP_BASE_API
+
res
.
fileName
)
;
quill
.
insertEmbed
(
length
,
"
image
"
,
process
.
env
.
VUE_APP_BASE_API
+
res
.
fileName
)
// 调整光标到最后
quill
.
setSelection
(
length
+
1
)
;
quill
.
setSelection
(
length
+
1
)
}
else
{
this
.
$message
.
error
(
"
图片插入失败
"
)
;
this
.
$message
.
error
(
"
图片插入失败
"
)
}
},
handleUploadError
()
{
this
.
$message
.
error
(
"
图片插入失败
"
)
;
this
.
$message
.
error
(
"
图片插入失败
"
)
},
// 复制粘贴图片处理
handlePasteCapture
(
e
)
{
const
clipboard
=
e
.
clipboardData
||
window
.
clipboardData
;
const
clipboard
=
e
.
clipboardData
||
window
.
clipboardData
if
(
clipboard
&&
clipboard
.
items
)
{
for
(
let
i
=
0
;
i
<
clipboard
.
items
.
length
;
i
++
)
{
const
item
=
clipboard
.
items
[
i
]
;
const
item
=
clipboard
.
items
[
i
]
if
(
item
.
type
.
indexOf
(
'
image
'
)
!==
-
1
)
{
e
.
preventDefault
()
;
const
file
=
item
.
getAsFile
()
;
this
.
insertImage
(
file
)
;
e
.
preventDefault
()
const
file
=
item
.
getAsFile
()
this
.
insertImage
(
file
)
}
}
}
},
insertImage
(
file
)
{
const
formData
=
new
FormData
()
;
formData
.
append
(
"
file
"
,
file
)
;
const
formData
=
new
FormData
()
formData
.
append
(
"
file
"
,
file
)
axios
.
post
(
this
.
uploadUrl
,
formData
,
{
headers
:
{
"
Content-Type
"
:
"
multipart/form-data
"
,
Authorization
:
this
.
headers
.
Authorization
}
}).
then
(
res
=>
{
this
.
handleUploadSuccess
(
res
.
data
)
;
this
.
handleUploadSuccess
(
res
.
data
)
})
}
}
...
...
ruoyi-ui/src/components/FileUpload/index.vue
View file @
38ed092d
...
...
@@ -42,7 +42,7 @@
</template>
<
script
>
import
{
getToken
}
from
"
@/utils/auth
"
;
import
{
getToken
}
from
"
@/utils/auth
"
export
default
{
name
:
"
FileUpload
"
,
...
...
@@ -94,26 +94,26 @@ export default {
Authorization
:
"
Bearer
"
+
getToken
(),
},
fileList
:
[],
}
;
}
},
watch
:
{
value
:
{
handler
(
val
)
{
if
(
val
)
{
let
temp
=
1
;
let
temp
=
1
// 首先将值转为数组
const
list
=
Array
.
isArray
(
val
)
?
val
:
this
.
value
.
split
(
'
,
'
)
;
const
list
=
Array
.
isArray
(
val
)
?
val
:
this
.
value
.
split
(
'
,
'
)
// 然后将数组转为对象数组
this
.
fileList
=
list
.
map
(
item
=>
{
if
(
typeof
item
===
"
string
"
)
{
item
=
{
name
:
item
,
url
:
item
}
;
item
=
{
name
:
item
,
url
:
item
}
}
item
.
uid
=
item
.
uid
||
new
Date
().
getTime
()
+
temp
++
;
return
item
;
})
;
item
.
uid
=
item
.
uid
||
new
Date
().
getTime
()
+
temp
++
return
item
})
}
else
{
this
.
fileList
=
[]
;
return
[]
;
this
.
fileList
=
[]
return
[]
}
},
deep
:
true
,
...
...
@@ -123,7 +123,7 @@ export default {
computed
:
{
// 是否显示提示
showTip
()
{
return
this
.
isShowTip
&&
(
this
.
fileType
||
this
.
fileSize
)
;
return
this
.
isShowTip
&&
(
this
.
fileType
||
this
.
fileSize
)
},
},
methods
:
{
...
...
@@ -131,88 +131,88 @@ export default {
handleBeforeUpload
(
file
)
{
// 校检文件类型
if
(
this
.
fileType
)
{
const
fileName
=
file
.
name
.
split
(
'
.
'
)
;
const
fileExt
=
fileName
[
fileName
.
length
-
1
]
;
const
isTypeOk
=
this
.
fileType
.
indexOf
(
fileExt
)
>=
0
;
const
fileName
=
file
.
name
.
split
(
'
.
'
)
const
fileExt
=
fileName
[
fileName
.
length
-
1
]
const
isTypeOk
=
this
.
fileType
.
indexOf
(
fileExt
)
>=
0
if
(
!
isTypeOk
)
{
this
.
$modal
.
msgError
(
`文件格式不正确,请上传
${
this
.
fileType
.
join
(
"
/
"
)}
格式文件!`
)
;
return
false
;
this
.
$modal
.
msgError
(
`文件格式不正确,请上传
${
this
.
fileType
.
join
(
"
/
"
)}
格式文件!`
)
return
false
}
}
// 校检文件名是否包含特殊字符
if
(
file
.
name
.
includes
(
'
,
'
))
{
this
.
$modal
.
msgError
(
'
文件名不正确,不能包含英文逗号!
'
)
;
return
false
;
this
.
$modal
.
msgError
(
'
文件名不正确,不能包含英文逗号!
'
)
return
false
}
// 校检文件大小
if
(
this
.
fileSize
)
{
const
isLt
=
file
.
size
/
1024
/
1024
<
this
.
fileSize
;
const
isLt
=
file
.
size
/
1024
/
1024
<
this
.
fileSize
if
(
!
isLt
)
{
this
.
$modal
.
msgError
(
`上传文件大小不能超过
${
this
.
fileSize
}
MB!`
)
;
return
false
;
this
.
$modal
.
msgError
(
`上传文件大小不能超过
${
this
.
fileSize
}
MB!`
)
return
false
}
}
this
.
$modal
.
loading
(
"
正在上传文件,请稍候...
"
)
;
this
.
number
++
;
return
true
;
this
.
$modal
.
loading
(
"
正在上传文件,请稍候...
"
)
this
.
number
++
return
true
},
// 文件个数超出
handleExceed
()
{
this
.
$modal
.
msgError
(
`上传文件数量不能超过
${
this
.
limit
}
个!`
)
;
this
.
$modal
.
msgError
(
`上传文件数量不能超过
${
this
.
limit
}
个!`
)
},
// 上传失败
handleUploadError
(
err
)
{
this
.
$modal
.
msgError
(
"
上传文件失败,请重试
"
)
;
this
.
$modal
.
closeLoading
()
;
this
.
$modal
.
msgError
(
"
上传文件失败,请重试
"
)
this
.
$modal
.
closeLoading
()
},
// 上传成功回调
handleUploadSuccess
(
res
,
file
)
{
if
(
res
.
code
===
200
)
{
this
.
uploadList
.
push
({
name
:
res
.
fileName
,
url
:
res
.
fileName
})
;
this
.
uploadedSuccessfully
()
;
this
.
uploadList
.
push
({
name
:
res
.
fileName
,
url
:
res
.
fileName
})
this
.
uploadedSuccessfully
()
}
else
{
this
.
number
--
;
this
.
$modal
.
closeLoading
()
;
this
.
$modal
.
msgError
(
res
.
msg
)
;
this
.
$refs
.
fileUpload
.
handleRemove
(
file
)
;
this
.
uploadedSuccessfully
()
;
this
.
number
--
this
.
$modal
.
closeLoading
()
this
.
$modal
.
msgError
(
res
.
msg
)
this
.
$refs
.
fileUpload
.
handleRemove
(
file
)
this
.
uploadedSuccessfully
()
}
},
// 删除文件
handleDelete
(
index
)
{
this
.
fileList
.
splice
(
index
,
1
)
;
this
.
$emit
(
"
input
"
,
this
.
listToString
(
this
.
fileList
))
;
this
.
fileList
.
splice
(
index
,
1
)
this
.
$emit
(
"
input
"
,
this
.
listToString
(
this
.
fileList
))
},
// 上传结束处理
uploadedSuccessfully
()
{
if
(
this
.
number
>
0
&&
this
.
uploadList
.
length
===
this
.
number
)
{
this
.
fileList
=
this
.
fileList
.
concat
(
this
.
uploadList
)
;
this
.
uploadList
=
[]
;
this
.
number
=
0
;
this
.
$emit
(
"
input
"
,
this
.
listToString
(
this
.
fileList
))
;
this
.
$modal
.
closeLoading
()
;
this
.
fileList
=
this
.
fileList
.
concat
(
this
.
uploadList
)
this
.
uploadList
=
[]
this
.
number
=
0
this
.
$emit
(
"
input
"
,
this
.
listToString
(
this
.
fileList
))
this
.
$modal
.
closeLoading
()
}
},
// 获取文件名称
getFileName
(
name
)
{
// 如果是url那么取最后的名字 如果不是直接返回
if
(
name
.
lastIndexOf
(
"
/
"
)
>
-
1
)
{
return
name
.
slice
(
name
.
lastIndexOf
(
"
/
"
)
+
1
)
;
return
name
.
slice
(
name
.
lastIndexOf
(
"
/
"
)
+
1
)
}
else
{
return
name
;
return
name
}
},
// 对象转成指定字符串分隔
listToString
(
list
,
separator
)
{
let
strs
=
""
;
separator
=
separator
||
"
,
"
;
let
strs
=
""
separator
=
separator
||
"
,
"
for
(
let
i
in
list
)
{
strs
+=
list
[
i
].
url
+
separator
;
strs
+=
list
[
i
].
url
+
separator
}
return
strs
!=
''
?
strs
.
substr
(
0
,
strs
.
length
-
1
)
:
''
;
return
strs
!=
''
?
strs
.
substr
(
0
,
strs
.
length
-
1
)
:
''
}
}
}
;
}
</
script
>
<
style
scoped
lang=
"scss"
>
...
...
ruoyi-ui/src/components/HeaderSearch/index.vue
View file @
38ed092d
...
...
@@ -90,7 +90,7 @@ export default {
const
query
=
val
.
query
if
(
isHttp
(
val
.
path
))
{
// http(s):// 路径新窗口打开
const
pindex
=
path
.
indexOf
(
"
http
"
)
;
const
pindex
=
path
.
indexOf
(
"
http
"
)
window
.
open
(
path
.
substr
(
pindex
,
path
.
length
),
"
_blank
"
)
}
else
{
if
(
query
)
{
...
...
ruoyi-ui/src/components/ImagePreview/index.vue
View file @
38ed092d
...
...
@@ -12,7 +12,7 @@
</
template
>
<
script
>
import
{
isExternal
}
from
"
@/utils/validate
"
;
import
{
isExternal
}
from
"
@/utils/validate
"
export
default
{
name
:
"
ImagePreview
"
,
...
...
@@ -33,36 +33,36 @@ export default {
computed
:
{
realSrc
()
{
if
(
!
this
.
src
)
{
return
;
return
}
let
real_src
=
this
.
src
.
split
(
"
,
"
)[
0
]
;
let
real_src
=
this
.
src
.
split
(
"
,
"
)[
0
]
if
(
isExternal
(
real_src
))
{
return
real_src
;
return
real_src
}
return
process
.
env
.
VUE_APP_BASE_API
+
real_src
;
return
process
.
env
.
VUE_APP_BASE_API
+
real_src
},
realSrcList
()
{
if
(
!
this
.
src
)
{
return
;
return
}
let
real_src_list
=
this
.
src
.
split
(
"
,
"
)
;
let
srcList
=
[]
;
let
real_src_list
=
this
.
src
.
split
(
"
,
"
)
let
srcList
=
[]
real_src_list
.
forEach
(
item
=>
{
if
(
isExternal
(
item
))
{
return
srcList
.
push
(
item
)
;
return
srcList
.
push
(
item
)
}
return
srcList
.
push
(
process
.
env
.
VUE_APP_BASE_API
+
item
)
;
})
;
return
srcList
;
return
srcList
.
push
(
process
.
env
.
VUE_APP_BASE_API
+
item
)
})
return
srcList
},
realWidth
()
{
return
typeof
this
.
width
==
"
string
"
?
this
.
width
:
`
${
this
.
width
}
px`
;
return
typeof
this
.
width
==
"
string
"
?
this
.
width
:
`
${
this
.
width
}
px`
},
realHeight
()
{
return
typeof
this
.
height
==
"
string
"
?
this
.
height
:
`
${
this
.
height
}
px`
;
return
typeof
this
.
height
==
"
string
"
?
this
.
height
:
`
${
this
.
height
}
px`
}
}
,
}
;
}
}
</
script
>
<
style
lang=
"scss"
scoped
>
...
...
ruoyi-ui/src/components/ImageUpload/index.vue
View file @
38ed092d
...
...
@@ -44,8 +44,8 @@
</template>
<
script
>
import
{
getToken
}
from
"
@/utils/auth
"
;
import
{
isExternal
}
from
"
@/utils/validate
"
;
import
{
getToken
}
from
"
@/utils/auth
"
import
{
isExternal
}
from
"
@/utils/validate
"
export
default
{
props
:
{
...
...
@@ -93,28 +93,28 @@ export default {
Authorization
:
"
Bearer
"
+
getToken
(),
},
fileList
:
[]
}
;
}
},
watch
:
{
value
:
{
handler
(
val
)
{
if
(
val
)
{
// 首先将值转为数组
const
list
=
Array
.
isArray
(
val
)
?
val
:
this
.
value
.
split
(
'
,
'
)
;
const
list
=
Array
.
isArray
(
val
)
?
val
:
this
.
value
.
split
(
'
,
'
)
// 然后将数组转为对象数组
this
.
fileList
=
list
.
map
(
item
=>
{
if
(
typeof
item
===
"
string
"
)
{
if
(
item
.
indexOf
(
this
.
baseUrl
)
===
-
1
&&
!
isExternal
(
item
))
{
item
=
{
name
:
this
.
baseUrl
+
item
,
url
:
this
.
baseUrl
+
item
}
;
item
=
{
name
:
this
.
baseUrl
+
item
,
url
:
this
.
baseUrl
+
item
}
}
else
{
item
=
{
name
:
item
,
url
:
item
}
;
item
=
{
name
:
item
,
url
:
item
}
}
}
return
item
;
})
;
return
item
})
}
else
{
this
.
fileList
=
[]
;
return
[]
;
this
.
fileList
=
[]
return
[]
}
},
deep
:
true
,
...
...
@@ -124,103 +124,103 @@ export default {
computed
:
{
// 是否显示提示
showTip
()
{
return
this
.
isShowTip
&&
(
this
.
fileType
||
this
.
fileSize
)
;
return
this
.
isShowTip
&&
(
this
.
fileType
||
this
.
fileSize
)
},
},
methods
:
{
// 上传前loading加载
handleBeforeUpload
(
file
)
{
let
isImg
=
false
;
let
isImg
=
false
if
(
this
.
fileType
.
length
)
{
let
fileExtension
=
""
;
let
fileExtension
=
""
if
(
file
.
name
.
lastIndexOf
(
"
.
"
)
>
-
1
)
{
fileExtension
=
file
.
name
.
slice
(
file
.
name
.
lastIndexOf
(
"
.
"
)
+
1
)
;
fileExtension
=
file
.
name
.
slice
(
file
.
name
.
lastIndexOf
(
"
.
"
)
+
1
)
}
isImg
=
this
.
fileType
.
some
(
type
=>
{
if
(
file
.
type
.
indexOf
(
type
)
>
-
1
)
return
true
;
if
(
fileExtension
&&
fileExtension
.
indexOf
(
type
)
>
-
1
)
return
true
;
return
false
;
})
;
if
(
file
.
type
.
indexOf
(
type
)
>
-
1
)
return
true
if
(
fileExtension
&&
fileExtension
.
indexOf
(
type
)
>
-
1
)
return
true
return
false
})
}
else
{
isImg
=
file
.
type
.
indexOf
(
"
image
"
)
>
-
1
;
isImg
=
file
.
type
.
indexOf
(
"
image
"
)
>
-
1
}
if
(
!
isImg
)
{
this
.
$modal
.
msgError
(
`文件格式不正确,请上传
${
this
.
fileType
.
join
(
"
/
"
)}
图片格式文件!`
)
;
return
false
;
this
.
$modal
.
msgError
(
`文件格式不正确,请上传
${
this
.
fileType
.
join
(
"
/
"
)}
图片格式文件!`
)
return
false
}
if
(
file
.
name
.
includes
(
'
,
'
))
{
this
.
$modal
.
msgError
(
'
文件名不正确,不能包含英文逗号!
'
)
;
return
false
;
this
.
$modal
.
msgError
(
'
文件名不正确,不能包含英文逗号!
'
)
return
false
}
if
(
this
.
fileSize
)
{
const
isLt
=
file
.
size
/
1024
/
1024
<
this
.
fileSize
;
const
isLt
=
file
.
size
/
1024
/
1024
<
this
.
fileSize
if
(
!
isLt
)
{
this
.
$modal
.
msgError
(
`上传头像图片大小不能超过
${
this
.
fileSize
}
MB!`
)
;
return
false
;
this
.
$modal
.
msgError
(
`上传头像图片大小不能超过
${
this
.
fileSize
}
MB!`
)
return
false
}
}
this
.
$modal
.
loading
(
"
正在上传图片,请稍候...
"
)
;
this
.
number
++
;
this
.
$modal
.
loading
(
"
正在上传图片,请稍候...
"
)
this
.
number
++
},
// 文件个数超出
handleExceed
()
{
this
.
$modal
.
msgError
(
`上传文件数量不能超过
${
this
.
limit
}
个!`
)
;
this
.
$modal
.
msgError
(
`上传文件数量不能超过
${
this
.
limit
}
个!`
)
},
// 上传成功回调
handleUploadSuccess
(
res
,
file
)
{
if
(
res
.
code
===
200
)
{
this
.
uploadList
.
push
({
name
:
res
.
fileName
,
url
:
res
.
fileName
})
;
this
.
uploadedSuccessfully
()
;
this
.
uploadList
.
push
({
name
:
res
.
fileName
,
url
:
res
.
fileName
})
this
.
uploadedSuccessfully
()
}
else
{
this
.
number
--
;
this
.
$modal
.
closeLoading
()
;
this
.
$modal
.
msgError
(
res
.
msg
)
;
this
.
$refs
.
imageUpload
.
handleRemove
(
file
)
;
this
.
uploadedSuccessfully
()
;
this
.
number
--
this
.
$modal
.
closeLoading
()
this
.
$modal
.
msgError
(
res
.
msg
)
this
.
$refs
.
imageUpload
.
handleRemove
(
file
)
this
.
uploadedSuccessfully
()
}
},
// 删除图片
handleDelete
(
file
)
{
const
findex
=
this
.
fileList
.
map
(
f
=>
f
.
name
).
indexOf
(
file
.
name
)
;
const
findex
=
this
.
fileList
.
map
(
f
=>
f
.
name
).
indexOf
(
file
.
name
)
if
(
findex
>
-
1
)
{
this
.
fileList
.
splice
(
findex
,
1
)
;
this
.
$emit
(
"
input
"
,
this
.
listToString
(
this
.
fileList
))
;
this
.
fileList
.
splice
(
findex
,
1
)
this
.
$emit
(
"
input
"
,
this
.
listToString
(
this
.
fileList
))
}
},
// 上传失败
handleUploadError
()
{
this
.
$modal
.
msgError
(
"
上传图片失败,请重试
"
)
;
this
.
$modal
.
closeLoading
()
;
this
.
$modal
.
msgError
(
"
上传图片失败,请重试
"
)
this
.
$modal
.
closeLoading
()
},
// 上传结束处理
uploadedSuccessfully
()
{
if
(
this
.
number
>
0
&&
this
.
uploadList
.
length
===
this
.
number
)
{
this
.
fileList
=
this
.
fileList
.
concat
(
this
.
uploadList
)
;
this
.
uploadList
=
[]
;
this
.
number
=
0
;
this
.
$emit
(
"
input
"
,
this
.
listToString
(
this
.
fileList
))
;
this
.
$modal
.
closeLoading
()
;
this
.
fileList
=
this
.
fileList
.
concat
(
this
.
uploadList
)
this
.
uploadList
=
[]
this
.
number
=
0
this
.
$emit
(
"
input
"
,
this
.
listToString
(
this
.
fileList
))
this
.
$modal
.
closeLoading
()
}
},
// 预览
handlePictureCardPreview
(
file
)
{
this
.
dialogImageUrl
=
file
.
url
;
this
.
dialogVisible
=
true
;
this
.
dialogImageUrl
=
file
.
url
this
.
dialogVisible
=
true
},
// 对象转成指定字符串分隔
listToString
(
list
,
separator
)
{
let
strs
=
""
;
separator
=
separator
||
"
,
"
;
let
strs
=
""
separator
=
separator
||
"
,
"
for
(
let
i
in
list
)
{
if
(
list
[
i
].
url
)
{
strs
+=
list
[
i
].
url
.
replace
(
this
.
baseUrl
,
""
)
+
separator
;
strs
+=
list
[
i
].
url
.
replace
(
this
.
baseUrl
,
""
)
+
separator
}
}
return
strs
!=
''
?
strs
.
substr
(
0
,
strs
.
length
-
1
)
:
''
;
return
strs
!=
''
?
strs
.
substr
(
0
,
strs
.
length
-
1
)
:
''
}
}
}
;
}
</
script
>
<
style
scoped
lang=
"scss"
>
// .el-upload--picture-card 控制加号部分
...
...
ruoyi-ui/src/components/Pagination/index.vue
View file @
38ed092d
...
...
@@ -63,7 +63,7 @@ export default {
},
data
()
{
return
{
}
;
}
},
computed
:
{
currentPage
:
{
...
...
ruoyi-ui/src/components/RightToolbar/index.vue
View file @
38ed092d
...
...
@@ -47,7 +47,7 @@ export default {
title
:
"
显示/隐藏
"
,
// 是否显示弹出层
open
:
false
}
;
}
},
props
:
{
/* 是否显示检索条件 */
...
...
@@ -77,20 +77,20 @@ export default {
},
computed
:
{
style
()
{
const
ret
=
{}
;
const
ret
=
{}
if
(
this
.
gutter
)
{
ret
.
marginRight
=
`
${
this
.
gutter
/
2
}
px`
;
ret
.
marginRight
=
`
${
this
.
gutter
/
2
}
px`
}
return
ret
;
return
ret
},
isChecked
:
{
get
()
{
return
this
.
columns
.
every
((
col
)
=>
col
.
visible
)
;
return
this
.
columns
.
every
((
col
)
=>
col
.
visible
)
},
set
()
{}
},
isIndeterminate
()
{
return
this
.
columns
.
some
((
col
)
=>
col
.
visible
)
&&
!
this
.
isChecked
;
return
this
.
columns
.
some
((
col
)
=>
col
.
visible
)
&&
!
this
.
isChecked
}
},
created
()
{
...
...
@@ -98,7 +98,7 @@ export default {
// 显隐列初始默认隐藏列
for
(
let
item
in
this
.
columns
)
{
if
(
this
.
columns
[
item
].
visible
===
false
)
{
this
.
value
.
push
(
parseInt
(
item
))
;
this
.
value
.
push
(
parseInt
(
item
))
}
}
}
...
...
@@ -106,34 +106,34 @@ export default {
methods
:
{
// 搜索
toggleSearch
()
{
this
.
$emit
(
"
update:showSearch
"
,
!
this
.
showSearch
)
;
this
.
$emit
(
"
update:showSearch
"
,
!
this
.
showSearch
)
},
// 刷新
refresh
()
{
this
.
$emit
(
"
queryTable
"
)
;
this
.
$emit
(
"
queryTable
"
)
},
// 右侧列表元素变化
dataChange
(
data
)
{
for
(
let
item
in
this
.
columns
)
{
const
key
=
this
.
columns
[
item
].
key
;
this
.
columns
[
item
].
visible
=
!
data
.
includes
(
key
)
;
const
key
=
this
.
columns
[
item
].
key
this
.
columns
[
item
].
visible
=
!
data
.
includes
(
key
)
}
},
// 打开显隐列dialog
showColumn
()
{
this
.
open
=
true
;
this
.
open
=
true
},
// 单勾选
checkboxChange
(
event
,
label
)
{
this
.
columns
.
filter
(
item
=>
item
.
label
==
label
)[
0
].
visible
=
event
;
this
.
columns
.
filter
(
item
=>
item
.
label
==
label
)[
0
].
visible
=
event
},
// 切换全选/反选
toggleCheckAll
()
{
const
newValue
=
!
this
.
isChecked
;
const
newValue
=
!
this
.
isChecked
this
.
columns
.
forEach
((
col
)
=>
(
col
.
visible
=
newValue
))
}
},
}
;
}
</
script
>
<
style
lang=
"scss"
scoped
>
::v-deep
.el-transfer__button
{
...
...
ruoyi-ui/src/components/SizeSelect/index.vue
View file @
38ed092d
...
...
@@ -51,6 +51,5 @@ export default {
})
}
}
}
</
script
>
ruoyi-ui/src/components/TopNav/index.vue
View file @
38ed092d
...
...
@@ -32,11 +32,11 @@
</template>
<
script
>
import
{
constantRoutes
}
from
"
@/router
"
;
import
{
isHttp
}
from
"
@/utils/validate
"
;
import
{
constantRoutes
}
from
"
@/router
"
import
{
isHttp
}
from
"
@/utils/validate
"
// 隐藏侧边栏路由
const
hideList
=
[
'
/index
'
,
'
/user/profile
'
]
;
const
hideList
=
[
'
/index
'
,
'
/user/profile
'
]
export
default
{
data
()
{
...
...
@@ -45,67 +45,67 @@ export default {
visibleNumber
:
5
,
// 当前激活菜单的 index
currentIndex
:
undefined
}
;
}
},
computed
:
{
theme
()
{
return
this
.
$store
.
state
.
settings
.
theme
;
return
this
.
$store
.
state
.
settings
.
theme
},
// 顶部显示菜单
topMenus
()
{
let
topMenus
=
[]
;
let
topMenus
=
[]
this
.
routers
.
map
((
menu
)
=>
{
if
(
menu
.
hidden
!==
true
)
{
// 兼容顶部栏一级菜单内部跳转
if
(
menu
.
path
===
'
/
'
&&
menu
.
children
)
{
topMenus
.
push
(
menu
.
children
[
0
])
;
topMenus
.
push
(
menu
.
children
[
0
])
}
else
{
topMenus
.
push
(
menu
)
;
topMenus
.
push
(
menu
)
}
}
})
;
return
topMenus
;
})
return
topMenus
},
// 所有的路由信息
routers
()
{
return
this
.
$store
.
state
.
permission
.
topbarRouters
;
return
this
.
$store
.
state
.
permission
.
topbarRouters
},
// 设置子路由
childrenMenus
()
{
var
childrenMenus
=
[]
;
var
childrenMenus
=
[]
this
.
routers
.
map
((
router
)
=>
{
for
(
var
item
in
router
.
children
)
{
if
(
router
.
children
[
item
].
parentPath
===
undefined
)
{
if
(
router
.
path
===
"
/
"
)
{
router
.
children
[
item
].
path
=
"
/
"
+
router
.
children
[
item
].
path
;
router
.
children
[
item
].
path
=
"
/
"
+
router
.
children
[
item
].
path
}
else
{
if
(
!
isHttp
(
router
.
children
[
item
].
path
))
{
router
.
children
[
item
].
path
=
router
.
path
+
"
/
"
+
router
.
children
[
item
].
path
;
router
.
children
[
item
].
path
=
router
.
path
+
"
/
"
+
router
.
children
[
item
].
path
}
}
router
.
children
[
item
].
parentPath
=
router
.
path
;
router
.
children
[
item
].
parentPath
=
router
.
path
}
childrenMenus
.
push
(
router
.
children
[
item
])
;
childrenMenus
.
push
(
router
.
children
[
item
])
}
})
;
return
constantRoutes
.
concat
(
childrenMenus
)
;
})
return
constantRoutes
.
concat
(
childrenMenus
)
},
// 默认激活的菜单
activeMenu
()
{
const
path
=
this
.
$route
.
path
;
let
activePath
=
path
;
const
path
=
this
.
$route
.
path
let
activePath
=
path
if
(
path
!==
undefined
&&
path
.
lastIndexOf
(
"
/
"
)
>
0
&&
hideList
.
indexOf
(
path
)
===
-
1
)
{
const
tmpPath
=
path
.
substring
(
1
,
path
.
length
)
;
const
tmpPath
=
path
.
substring
(
1
,
path
.
length
)
if
(
!
this
.
$route
.
meta
.
link
)
{
activePath
=
"
/
"
+
tmpPath
.
substring
(
0
,
tmpPath
.
indexOf
(
"
/
"
))
;
this
.
$store
.
dispatch
(
'
app/toggleSideBarHide
'
,
false
)
;
activePath
=
"
/
"
+
tmpPath
.
substring
(
0
,
tmpPath
.
indexOf
(
"
/
"
))
this
.
$store
.
dispatch
(
'
app/toggleSideBarHide
'
,
false
)
}
}
else
if
(
!
this
.
$route
.
children
)
{
activePath
=
path
;
this
.
$store
.
dispatch
(
'
app/toggleSideBarHide
'
,
true
)
;
activePath
=
path
this
.
$store
.
dispatch
(
'
app/toggleSideBarHide
'
,
true
)
}
this
.
activeRoutes
(
activePath
)
;
return
activePath
;
this
.
activeRoutes
(
activePath
)
return
activePath
},
},
beforeMount
()
{
...
...
@@ -115,55 +115,55 @@ export default {
window
.
removeEventListener
(
'
resize
'
,
this
.
setVisibleNumber
)
},
mounted
()
{
this
.
setVisibleNumber
()
;
this
.
setVisibleNumber
()
},
methods
:
{
// 根据宽度计算设置显示栏数
setVisibleNumber
()
{
const
width
=
document
.
body
.
getBoundingClientRect
().
width
/
3
;
this
.
visibleNumber
=
parseInt
(
width
/
85
)
;
const
width
=
document
.
body
.
getBoundingClientRect
().
width
/
3
this
.
visibleNumber
=
parseInt
(
width
/
85
)
},
// 菜单选择事件
handleSelect
(
key
,
keyPath
)
{
this
.
currentIndex
=
key
;
const
route
=
this
.
routers
.
find
(
item
=>
item
.
path
===
key
)
;
this
.
currentIndex
=
key
const
route
=
this
.
routers
.
find
(
item
=>
item
.
path
===
key
)
if
(
isHttp
(
key
))
{
// http(s):// 路径新窗口打开
window
.
open
(
key
,
"
_blank
"
)
;
window
.
open
(
key
,
"
_blank
"
)
}
else
if
(
!
route
||
!
route
.
children
)
{
// 没有子路由路径内部打开
const
routeMenu
=
this
.
childrenMenus
.
find
(
item
=>
item
.
path
===
key
)
;
const
routeMenu
=
this
.
childrenMenus
.
find
(
item
=>
item
.
path
===
key
)
if
(
routeMenu
&&
routeMenu
.
query
)
{
let
query
=
JSON
.
parse
(
routeMenu
.
query
)
;
this
.
$router
.
push
({
path
:
key
,
query
:
query
})
;
let
query
=
JSON
.
parse
(
routeMenu
.
query
)
this
.
$router
.
push
({
path
:
key
,
query
:
query
})
}
else
{
this
.
$router
.
push
({
path
:
key
})
;
this
.
$router
.
push
({
path
:
key
})
}
this
.
$store
.
dispatch
(
'
app/toggleSideBarHide
'
,
true
)
;
this
.
$store
.
dispatch
(
'
app/toggleSideBarHide
'
,
true
)
}
else
{
// 显示左侧联动菜单
this
.
activeRoutes
(
key
)
;
this
.
$store
.
dispatch
(
'
app/toggleSideBarHide
'
,
false
)
;
this
.
activeRoutes
(
key
)
this
.
$store
.
dispatch
(
'
app/toggleSideBarHide
'
,
false
)
}
},
// 当前激活的路由
activeRoutes
(
key
)
{
var
routes
=
[]
;
var
routes
=
[]
if
(
this
.
childrenMenus
&&
this
.
childrenMenus
.
length
>
0
)
{
this
.
childrenMenus
.
map
((
item
)
=>
{
if
(
key
==
item
.
parentPath
||
(
key
==
"
index
"
&&
""
==
item
.
path
))
{
routes
.
push
(
item
)
;
routes
.
push
(
item
)
}
})
;
})
}
if
(
routes
.
length
>
0
)
{
this
.
$store
.
commit
(
"
SET_SIDEBAR_ROUTERS
"
,
routes
)
;
this
.
$store
.
commit
(
"
SET_SIDEBAR_ROUTERS
"
,
routes
)
}
else
{
this
.
$store
.
dispatch
(
'
app/toggleSideBarHide
'
,
true
)
;
this
.
$store
.
dispatch
(
'
app/toggleSideBarHide
'
,
true
)
}
}
},
}
;
}
</
script
>
<
style
lang=
"scss"
>
...
...
ruoyi-ui/src/components/iFrame/index.vue
View file @
38ed092d
...
...
@@ -21,16 +21,16 @@ export default {
height
:
document
.
documentElement
.
clientHeight
-
94.5
+
"
px;
"
,
loading
:
true
,
url
:
this
.
src
}
;
}
},
mounted
:
function
()
{
setTimeout
(()
=>
{
this
.
loading
=
false
;
},
300
)
;
const
that
=
this
;
this
.
loading
=
false
},
300
)
const
that
=
this
window
.
onresize
=
function
temp
()
{
that
.
height
=
document
.
documentElement
.
clientHeight
-
94.5
+
"
px;
"
;
}
;
that
.
height
=
document
.
documentElement
.
clientHeight
-
94.5
+
"
px;
"
}
}
}
;
}
</
script
>
ruoyi-ui/src/directive/dialog/drag.js
View file @
38ed092d
...
...
@@ -8,57 +8,57 @@ export default {
const
value
=
binding
.
value
if
(
value
==
false
)
return
// 获取拖拽内容头部
const
dialogHeaderEl
=
el
.
querySelector
(
'
.el-dialog__header
'
)
;
const
dragDom
=
el
.
querySelector
(
'
.el-dialog
'
)
;
dialogHeaderEl
.
style
.
cursor
=
'
move
'
;
// 获取原有属性 ie dom元素.currentStyle 火狐谷歌 window.getComputedStyle(dom元素, null)
;
const
sty
=
dragDom
.
currentStyle
||
window
.
getComputedStyle
(
dragDom
,
null
)
;
dragDom
.
style
.
position
=
'
absolute
'
;
dragDom
.
style
.
marginTop
=
0
;
let
width
=
dragDom
.
style
.
width
;
const
dialogHeaderEl
=
el
.
querySelector
(
'
.el-dialog__header
'
)
const
dragDom
=
el
.
querySelector
(
'
.el-dialog
'
)
dialogHeaderEl
.
style
.
cursor
=
'
move
'
// 获取原有属性 ie dom元素.currentStyle 火狐谷歌 window.getComputedStyle(dom元素, null)
const
sty
=
dragDom
.
currentStyle
||
window
.
getComputedStyle
(
dragDom
,
null
)
dragDom
.
style
.
position
=
'
absolute
'
dragDom
.
style
.
marginTop
=
0
let
width
=
dragDom
.
style
.
width
if
(
width
.
includes
(
'
%
'
))
{
width
=
+
document
.
body
.
clientWidth
*
(
+
width
.
replace
(
/
\%
/g
,
''
)
/
100
)
;
width
=
+
document
.
body
.
clientWidth
*
(
+
width
.
replace
(
/
\%
/g
,
''
)
/
100
)
}
else
{
width
=
+
width
.
replace
(
/
\p
x/g
,
''
)
;
width
=
+
width
.
replace
(
/
\p
x/g
,
''
)
}
dragDom
.
style
.
left
=
`
${(
document
.
body
.
clientWidth
-
width
)
/
2
}
px`
;
dragDom
.
style
.
left
=
`
${(
document
.
body
.
clientWidth
-
width
)
/
2
}
px`
// 鼠标按下事件
dialogHeaderEl
.
onmousedown
=
(
e
)
=>
{
// 鼠标按下,计算当前元素距离可视区的距离 (鼠标点击位置距离可视窗口的距离)
const
disX
=
e
.
clientX
-
dialogHeaderEl
.
offsetLeft
;
const
disY
=
e
.
clientY
-
dialogHeaderEl
.
offsetTop
;
const
disX
=
e
.
clientX
-
dialogHeaderEl
.
offsetLeft
const
disY
=
e
.
clientY
-
dialogHeaderEl
.
offsetTop
// 获取到的值带px 正则匹配替换
let
styL
,
styT
;
let
styL
,
styT
// 注意在ie中 第一次获取到的值为组件自带50% 移动之后赋值为px
if
(
sty
.
left
.
includes
(
'
%
'
))
{
styL
=
+
document
.
body
.
clientWidth
*
(
+
sty
.
left
.
replace
(
/
\%
/g
,
''
)
/
100
)
;
styT
=
+
document
.
body
.
clientHeight
*
(
+
sty
.
top
.
replace
(
/
\%
/g
,
''
)
/
100
)
;
styL
=
+
document
.
body
.
clientWidth
*
(
+
sty
.
left
.
replace
(
/
\%
/g
,
''
)
/
100
)
styT
=
+
document
.
body
.
clientHeight
*
(
+
sty
.
top
.
replace
(
/
\%
/g
,
''
)
/
100
)
}
else
{
styL
=
+
sty
.
left
.
replace
(
/
\p
x/g
,
''
)
;
styT
=
+
sty
.
top
.
replace
(
/
\p
x/g
,
''
)
;
}
;
styL
=
+
sty
.
left
.
replace
(
/
\p
x/g
,
''
)
styT
=
+
sty
.
top
.
replace
(
/
\p
x/g
,
''
)
}
// 鼠标拖拽事件
document
.
onmousemove
=
function
(
e
)
{
// 通过事件委托,计算移动的距离 (开始拖拽至结束拖拽的距离)
const
l
=
e
.
clientX
-
disX
;
const
t
=
e
.
clientY
-
disY
;
const
l
=
e
.
clientX
-
disX
const
t
=
e
.
clientY
-
disY
let
finallyL
=
l
+
styL
let
finallyT
=
t
+
styT
// 移动当前元素
dragDom
.
style
.
left
=
`
${
finallyL
}
px`
;
dragDom
.
style
.
top
=
`
${
finallyT
}
px`
;
dragDom
.
style
.
left
=
`
${
finallyL
}
px`
dragDom
.
style
.
top
=
`
${
finallyT
}
px`
}
;
}
document
.
onmouseup
=
function
(
e
)
{
document
.
onmousemove
=
null
;
document
.
onmouseup
=
null
;
}
;
document
.
onmousemove
=
null
document
.
onmouseup
=
null
}
}
}
};
\ No newline at end of file
}
\ No newline at end of file
ruoyi-ui/src/directive/dialog/dragHeight.js
View file @
38ed092d
...
...
@@ -5,30 +5,30 @@
export
default
{
bind
(
el
)
{
const
dragDom
=
el
.
querySelector
(
'
.el-dialog
'
)
;
const
lineEl
=
document
.
createElement
(
'
div
'
)
;
lineEl
.
style
=
'
width: 6px; background: inherit; height: 10px; position: absolute; right: 0; bottom: 0; margin: auto; z-index: 1; cursor: nwse-resize;
'
;
const
dragDom
=
el
.
querySelector
(
'
.el-dialog
'
)
const
lineEl
=
document
.
createElement
(
'
div
'
)
lineEl
.
style
=
'
width: 6px; background: inherit; height: 10px; position: absolute; right: 0; bottom: 0; margin: auto; z-index: 1; cursor: nwse-resize;
'
lineEl
.
addEventListener
(
'
mousedown
'
,
function
(
e
)
{
// 鼠标按下,计算当前元素距离可视区的距离
const
disX
=
e
.
clientX
-
el
.
offsetLeft
;
const
disY
=
e
.
clientY
-
el
.
offsetTop
;
const
disX
=
e
.
clientX
-
el
.
offsetLeft
const
disY
=
e
.
clientY
-
el
.
offsetTop
// 当前宽度 高度
const
curWidth
=
dragDom
.
offsetWidth
;
const
curHeight
=
dragDom
.
offsetHeight
;
const
curWidth
=
dragDom
.
offsetWidth
const
curHeight
=
dragDom
.
offsetHeight
document
.
onmousemove
=
function
(
e
)
{
e
.
preventDefault
()
;
// 移动时禁用默认事件
e
.
preventDefault
()
// 移动时禁用默认事件
// 通过事件委托,计算移动的距离
const
xl
=
e
.
clientX
-
disX
;
const
xl
=
e
.
clientX
-
disX
const
yl
=
e
.
clientY
-
disY
dragDom
.
style
.
width
=
`
${
curWidth
+
xl
}
px`
;
dragDom
.
style
.
height
=
`
${
curHeight
+
yl
}
px`
;
}
;
dragDom
.
style
.
width
=
`
${
curWidth
+
xl
}
px`
dragDom
.
style
.
height
=
`
${
curHeight
+
yl
}
px`
}
document
.
onmouseup
=
function
(
e
)
{
document
.
onmousemove
=
null
;
document
.
onmouseup
=
null
;
}
;
},
false
)
;
dragDom
.
appendChild
(
lineEl
)
;
document
.
onmousemove
=
null
document
.
onmouseup
=
null
}
},
false
)
dragDom
.
appendChild
(
lineEl
)
}
}
ruoyi-ui/src/directive/dialog/dragWidth.js
View file @
38ed092d
...
...
@@ -5,26 +5,26 @@
export
default
{
bind
(
el
)
{
const
dragDom
=
el
.
querySelector
(
'
.el-dialog
'
)
;
const
lineEl
=
document
.
createElement
(
'
div
'
)
;
lineEl
.
style
=
'
width: 5px; background: inherit; height: 80%; position: absolute; right: 0; top: 0; bottom: 0; margin: auto; z-index: 1; cursor: w-resize;
'
;
const
dragDom
=
el
.
querySelector
(
'
.el-dialog
'
)
const
lineEl
=
document
.
createElement
(
'
div
'
)
lineEl
.
style
=
'
width: 5px; background: inherit; height: 80%; position: absolute; right: 0; top: 0; bottom: 0; margin: auto; z-index: 1; cursor: w-resize;
'
lineEl
.
addEventListener
(
'
mousedown
'
,
function
(
e
)
{
// 鼠标按下,计算当前元素距离可视区的距离
const
disX
=
e
.
clientX
-
el
.
offsetLeft
;
const
disX
=
e
.
clientX
-
el
.
offsetLeft
// 当前宽度
const
curWidth
=
dragDom
.
offsetWidth
;
const
curWidth
=
dragDom
.
offsetWidth
document
.
onmousemove
=
function
(
e
)
{
e
.
preventDefault
()
;
// 移动时禁用默认事件
e
.
preventDefault
()
// 移动时禁用默认事件
// 通过事件委托,计算移动的距离
const
l
=
e
.
clientX
-
disX
;
dragDom
.
style
.
width
=
`
${
curWidth
+
l
}
px`
;
}
;
const
l
=
e
.
clientX
-
disX
dragDom
.
style
.
width
=
`
${
curWidth
+
l
}
px`
}
document
.
onmouseup
=
function
(
e
)
{
document
.
onmousemove
=
null
;
document
.
onmouseup
=
null
;
}
;
},
false
)
;
dragDom
.
appendChild
(
lineEl
)
;
document
.
onmousemove
=
null
document
.
onmouseup
=
null
}
},
false
)
dragDom
.
appendChild
(
lineEl
)
}
}
ruoyi-ui/src/directive/index.js
View file @
38ed092d
...
...
@@ -17,7 +17,7 @@ const install = function(Vue) {
if
(
window
.
Vue
)
{
window
[
'
hasRole
'
]
=
hasRole
window
[
'
hasPermi
'
]
=
hasPermi
Vue
.
use
(
install
)
;
// eslint-disable-line
Vue
.
use
(
install
)
// eslint-disable-line
}
export
default
install
ruoyi-ui/src/directive/module/clipboard.js
View file @
38ed092d
...
...
@@ -8,47 +8,47 @@ export default {
bind
(
el
,
binding
,
vnode
)
{
switch
(
binding
.
arg
)
{
case
'
success
'
:
el
.
_vClipBoard_success
=
binding
.
value
;
break
;
el
.
_vClipBoard_success
=
binding
.
value
break
case
'
error
'
:
el
.
_vClipBoard_error
=
binding
.
value
;
break
;
el
.
_vClipBoard_error
=
binding
.
value
break
default
:
{
const
clipboard
=
new
Clipboard
(
el
,
{
text
:
()
=>
binding
.
value
,
action
:
()
=>
binding
.
arg
===
'
cut
'
?
'
cut
'
:
'
copy
'
})
;
})
clipboard
.
on
(
'
success
'
,
e
=>
{
const
callback
=
el
.
_vClipBoard_success
;
callback
&&
callback
(
e
)
;
})
;
const
callback
=
el
.
_vClipBoard_success
callback
&&
callback
(
e
)
})
clipboard
.
on
(
'
error
'
,
e
=>
{
const
callback
=
el
.
_vClipBoard_error
;
callback
&&
callback
(
e
)
;
})
;
el
.
_vClipBoard
=
clipboard
;
const
callback
=
el
.
_vClipBoard_error
callback
&&
callback
(
e
)
})
el
.
_vClipBoard
=
clipboard
}
}
},
update
(
el
,
binding
)
{
if
(
binding
.
arg
===
'
success
'
)
{
el
.
_vClipBoard_success
=
binding
.
value
;
el
.
_vClipBoard_success
=
binding
.
value
}
else
if
(
binding
.
arg
===
'
error
'
)
{
el
.
_vClipBoard_error
=
binding
.
value
;
el
.
_vClipBoard_error
=
binding
.
value
}
else
{
el
.
_vClipBoard
.
text
=
function
()
{
return
binding
.
value
;
};
el
.
_vClipBoard
.
action
=
()
=>
binding
.
arg
===
'
cut
'
?
'
cut
'
:
'
copy
'
;
el
.
_vClipBoard
.
text
=
function
()
{
return
binding
.
value
}
el
.
_vClipBoard
.
action
=
()
=>
binding
.
arg
===
'
cut
'
?
'
cut
'
:
'
copy
'
}
},
unbind
(
el
,
binding
)
{
if
(
!
el
.
_vClipboard
)
return
if
(
binding
.
arg
===
'
success
'
)
{
delete
el
.
_vClipBoard_success
;
delete
el
.
_vClipBoard_success
}
else
if
(
binding
.
arg
===
'
error
'
)
{
delete
el
.
_vClipBoard_error
;
delete
el
.
_vClipBoard_error
}
else
{
el
.
_vClipBoard
.
destroy
()
;
delete
el
.
_vClipBoard
;
el
.
_vClipBoard
.
destroy
()
delete
el
.
_vClipBoard
}
}
}
ruoyi-ui/src/directive/permission/hasPermi.js
View file @
38ed092d
...
...
@@ -8,7 +8,7 @@ import store from '@/store'
export
default
{
inserted
(
el
,
binding
,
vnode
)
{
const
{
value
}
=
binding
const
all_permission
=
"
*:*:*
"
;
const
all_permission
=
"
*:*:*
"
const
permissions
=
store
.
getters
&&
store
.
getters
.
permissions
if
(
value
&&
value
instanceof
Array
&&
value
.
length
>
0
)
{
...
...
ruoyi-ui/src/directive/permission/hasRole.js
View file @
38ed092d
...
...
@@ -8,7 +8,7 @@ import store from '@/store'
export
default
{
inserted
(
el
,
binding
,
vnode
)
{
const
{
value
}
=
binding
const
super_admin
=
"
admin
"
;
const
super_admin
=
"
admin
"
const
roles
=
store
.
getters
&&
store
.
getters
.
roles
if
(
value
&&
value
instanceof
Array
&&
value
.
length
>
0
)
{
...
...
ruoyi-ui/src/layout/components/IframeToggle/index.vue
View file @
38ed092d
...
...
@@ -11,22 +11,22 @@
</
template
>
<
script
>
import
InnerLink
from
"
../InnerLink/index
"
;
import
InnerLink
from
"
../InnerLink/index
"
export
default
{
components
:
{
InnerLink
},
computed
:
{
iframeViews
()
{
return
this
.
$store
.
state
.
tagsView
.
iframeViews
;
return
this
.
$store
.
state
.
tagsView
.
iframeViews
}
},
methods
:
{
iframeUrl
(
url
,
query
)
{
if
(
Object
.
keys
(
query
).
length
>
0
)
{
let
params
=
Object
.
keys
(
query
).
map
((
key
)
=>
key
+
"
=
"
+
query
[
key
]).
join
(
"
&
"
)
;
return
url
+
"
?
"
+
params
;
let
params
=
Object
.
keys
(
query
).
map
((
key
)
=>
key
+
"
=
"
+
query
[
key
]).
join
(
"
&
"
)
return
url
+
"
?
"
+
params
}
return
url
;
return
url
}
}
}
...
...
ruoyi-ui/src/layout/components/InnerLink/index.vue
View file @
38ed092d
...
...
@@ -24,24 +24,24 @@ export default {
return
{
loading
:
false
,
height
:
document
.
documentElement
.
clientHeight
-
94.5
+
"
px;
"
}
;
}
},
mounted
()
{
var
_this
=
this
;
const
iframeId
=
(
"
#
"
+
this
.
iframeId
).
replace
(
/
\/
/g
,
"
\\
/
"
)
;
const
iframe
=
document
.
querySelector
(
iframeId
)
;
var
_this
=
this
const
iframeId
=
(
"
#
"
+
this
.
iframeId
).
replace
(
/
\/
/g
,
"
\\
/
"
)
const
iframe
=
document
.
querySelector
(
iframeId
)
// iframe页面loading控制
if
(
iframe
.
attachEvent
)
{
this
.
loading
=
true
;
this
.
loading
=
true
iframe
.
attachEvent
(
"
onload
"
,
function
()
{
_this
.
loading
=
false
;
})
;
_this
.
loading
=
false
})
}
else
{
this
.
loading
=
true
;
this
.
loading
=
true
iframe
.
onload
=
function
()
{
_this
.
loading
=
false
;
}
;
_this
.
loading
=
false
}
}
}
}
;
}
</
script
>
ruoyi-ui/src/layout/components/Settings/index.vue
View file @
38ed092d
...
...
@@ -82,7 +82,7 @@ export default {
return
{
theme
:
this
.
$store
.
state
.
settings
.
theme
,
sideTheme
:
this
.
$store
.
state
.
settings
.
sideTheme
}
;
}
},
computed
:
{
visible
:
{
...
...
@@ -111,8 +111,8 @@ export default {
value
:
val
})
if
(
!
val
)
{
this
.
$store
.
dispatch
(
'
app/toggleSideBarHide
'
,
false
)
;
this
.
$store
.
commit
(
"
SET_SIDEBAR_ROUTERS
"
,
this
.
$store
.
state
.
permission
.
defaultRoutes
)
;
this
.
$store
.
dispatch
(
'
app/toggleSideBarHide
'
,
false
)
this
.
$store
.
commit
(
"
SET_SIDEBAR_ROUTERS
"
,
this
.
$store
.
state
.
permission
.
defaultRoutes
)
}
}
},
...
...
@@ -156,17 +156,17 @@ export default {
key
:
'
theme
'
,
value
:
val
})
this
.
theme
=
val
;
this
.
theme
=
val
},
handleTheme
(
val
)
{
this
.
$store
.
dispatch
(
'
settings/changeSetting
'
,
{
key
:
'
sideTheme
'
,
value
:
val
})
this
.
sideTheme
=
val
;
this
.
sideTheme
=
val
},
saveSetting
()
{
this
.
$modal
.
loading
(
"
正在保存到本地,请稍候...
"
)
;
this
.
$modal
.
loading
(
"
正在保存到本地,请稍候...
"
)
this
.
$cache
.
local
.
set
(
"
layout-setting
"
,
`{
...
...
@@ -178,11 +178,11 @@ export default {
"sideTheme":"
${
this
.
sideTheme
}
",
"theme":"
${
this
.
theme
}
"
}`
)
;
)
setTimeout
(
this
.
$modal
.
closeLoading
(),
1000
)
},
resetSetting
()
{
this
.
$modal
.
loading
(
"
正在清除设置缓存并刷新,请稍候...
"
)
;
this
.
$modal
.
loading
(
"
正在清除设置缓存并刷新,请稍候...
"
)
this
.
$cache
.
local
.
remove
(
"
layout-setting
"
)
setTimeout
(
"
window.location.reload()
"
,
1000
)
}
...
...
ruoyi-ui/src/layout/components/Sidebar/Logo.vue
View file @
38ed092d
...
...
@@ -27,7 +27,7 @@ export default {
},
computed
:
{
variables
()
{
return
variables
;
return
variables
},
sideTheme
()
{
return
this
.
$store
.
state
.
settings
.
sideTheme
...
...
ruoyi-ui/src/layout/components/Sidebar/SidebarItem.vue
View file @
38ed092d
...
...
@@ -57,7 +57,7 @@ export default {
methods
:
{
hasOneShowingChild
(
children
=
[],
parent
)
{
if
(
!
children
)
{
children
=
[]
;
children
=
[]
}
const
showingChildren
=
children
.
filter
(
item
=>
{
if
(
item
.
hidden
)
{
...
...
@@ -89,7 +89,7 @@ export default {
return
this
.
basePath
}
if
(
routeQuery
)
{
let
query
=
JSON
.
parse
(
routeQuery
)
;
let
query
=
JSON
.
parse
(
routeQuery
)
return
{
path
:
path
.
resolve
(
this
.
basePath
,
routePath
),
query
:
query
}
}
return
path
.
resolve
(
this
.
basePath
,
routePath
)
...
...
ruoyi-ui/src/layout/components/Sidebar/index.vue
View file @
38ed092d
...
...
@@ -24,10 +24,10 @@
</
template
>
<
script
>
import
{
mapGetters
,
mapState
}
from
"
vuex
"
;
import
Logo
from
"
./Logo
"
;
import
SidebarItem
from
"
./SidebarItem
"
;
import
variables
from
"
@/assets/styles/variables.scss
"
;
import
{
mapGetters
,
mapState
}
from
"
vuex
"
import
Logo
from
"
./Logo
"
import
SidebarItem
from
"
./SidebarItem
"
import
variables
from
"
@/assets/styles/variables.scss
"
export
default
{
components
:
{
SidebarItem
,
Logo
},
...
...
@@ -35,23 +35,23 @@ export default {
...
mapState
([
"
settings
"
]),
...
mapGetters
([
"
sidebarRouters
"
,
"
sidebar
"
]),
activeMenu
()
{
const
route
=
this
.
$route
;
const
{
meta
,
path
}
=
route
;
const
route
=
this
.
$route
const
{
meta
,
path
}
=
route
// if set path, the sidebar will highlight the path you set
if
(
meta
.
activeMenu
)
{
return
meta
.
activeMenu
;
return
meta
.
activeMenu
}
return
path
;
return
path
},
showLogo
()
{
return
this
.
$store
.
state
.
settings
.
sidebarLogo
;
return
this
.
$store
.
state
.
settings
.
sidebarLogo
},
variables
()
{
return
variables
;
return
variables
},
isCollapse
()
{
return
!
this
.
sidebar
.
opened
;
return
!
this
.
sidebar
.
opened
}
}
}
;
}
</
script
>
ruoyi-ui/src/layout/components/TagsView/index.vue
View file @
38ed092d
...
...
@@ -51,7 +51,7 @@ export default {
return
this
.
$store
.
state
.
permission
.
routes
},
theme
()
{
return
this
.
$store
.
state
.
settings
.
theme
;
return
this
.
$store
.
state
.
settings
.
theme
}
},
watch
:
{
...
...
@@ -76,11 +76,11 @@ export default {
return
route
.
path
===
this
.
$route
.
path
},
activeStyle
(
tag
)
{
if
(
!
this
.
isActive
(
tag
))
return
{}
;
if
(
!
this
.
isActive
(
tag
))
return
{}
return
{
"
background-color
"
:
this
.
theme
,
"
border-color
"
:
this
.
theme
}
;
}
},
isAffix
(
tag
)
{
return
tag
.
meta
&&
tag
.
meta
.
affix
...
...
@@ -151,7 +151,7 @@ export default {
})
},
refreshSelectedTag
(
view
)
{
this
.
$tab
.
refreshPage
(
view
)
;
this
.
$tab
.
refreshPage
(
view
)
if
(
this
.
$route
.
meta
.
link
)
{
this
.
$store
.
dispatch
(
'
tagsView/delIframeView
'
,
this
.
$route
)
}
...
...
@@ -178,7 +178,7 @@ export default {
})
},
closeOthersTags
()
{
this
.
$router
.
push
(
this
.
selectedTag
.
fullPath
).
catch
(()
=>
{})
;
this
.
$router
.
push
(
this
.
selectedTag
.
fullPath
).
catch
(()
=>
{})
this
.
$tab
.
closeOtherPage
(
this
.
selectedTag
).
then
(()
=>
{
this
.
moveToCurrentTag
()
})
...
...
ruoyi-ui/src/layout/index.vue
View file @
38ed092d
...
...
@@ -51,7 +51,7 @@ export default {
}
},
variables
()
{
return
variables
;
return
variables
}
},
methods
:
{
...
...
ruoyi-ui/src/main.js
View file @
38ed092d
...
...
@@ -16,11 +16,11 @@ import { download } from '@/utils/request'
import
'
./assets/icons
'
// icon
import
'
./permission
'
// permission control
import
{
getDicts
}
from
"
@/api/system/dict/data
"
;
import
{
getConfigKey
}
from
"
@/api/system/config
"
;
import
{
parseTime
,
resetForm
,
addDateRange
,
selectDictLabel
,
selectDictLabels
,
handleTree
}
from
"
@/utils/ruoyi
"
;
import
{
getDicts
}
from
"
@/api/system/dict/data
"
import
{
getConfigKey
}
from
"
@/api/system/config
"
import
{
parseTime
,
resetForm
,
addDateRange
,
selectDictLabel
,
selectDictLabels
,
handleTree
}
from
"
@/utils/ruoyi
"
// 分页组件
import
Pagination
from
"
@/components/Pagination
"
;
import
Pagination
from
"
@/components/Pagination
"
// 自定义表格工具组件
import
RightToolbar
from
"
@/components/RightToolbar
"
// 富文本组件
...
...
ruoyi-ui/src/plugins/auth.js
View file @
38ed092d
import
store
from
'
@/store
'
function
authPermission
(
permission
)
{
const
all_permission
=
"
*:*:*
"
;
const
all_permission
=
"
*:*:*
"
const
permissions
=
store
.
getters
&&
store
.
getters
.
permissions
if
(
permission
&&
permission
.
length
>
0
)
{
return
permissions
.
some
(
v
=>
{
...
...
@@ -13,7 +13,7 @@ function authPermission(permission) {
}
function
authRole
(
role
)
{
const
super_admin
=
"
admin
"
;
const
super_admin
=
"
admin
"
const
roles
=
store
.
getters
&&
store
.
getters
.
roles
if
(
role
&&
role
.
length
>
0
)
{
return
roles
.
some
(
v
=>
{
...
...
@@ -27,7 +27,7 @@ function authRole(role) {
export
default
{
// 验证用户是否具备某权限
hasPermi
(
permission
)
{
return
authPermission
(
permission
)
;
return
authPermission
(
permission
)
},
// 验证用户是否含有指定权限,只需包含其中一个
hasPermiOr
(
permissions
)
{
...
...
@@ -43,7 +43,7 @@ export default {
},
// 验证用户是否具备某角色
hasRole
(
role
)
{
return
authRole
(
role
)
;
return
authRole
(
role
)
},
// 验证用户是否含有指定角色,只需包含其中一个
hasRoleOr
(
roles
)
{
...
...
ruoyi-ui/src/plugins/cache.js
View file @
38ed092d
...
...
@@ -29,7 +29,7 @@ const sessionCache = {
return
null
},
remove
(
key
)
{
sessionStorage
.
removeItem
(
key
)
;
sessionStorage
.
removeItem
(
key
)
}
}
const
localCache
=
{
...
...
@@ -63,7 +63,7 @@ const localCache = {
return
null
},
remove
(
key
)
{
localStorage
.
removeItem
(
key
)
;
localStorage
.
removeItem
(
key
)
}
}
...
...
ruoyi-ui/src/plugins/download.js
View file @
38ed092d
...
...
@@ -3,10 +3,10 @@ import {Loading, Message} from 'element-ui'
import
{
saveAs
}
from
'
file-saver
'
import
{
getToken
}
from
'
@/utils/auth
'
import
errorCode
from
'
@/utils/errorCode
'
import
{
blobValidate
}
from
"
@/utils/ruoyi
"
;
import
{
blobValidate
}
from
"
@/utils/ruoyi
"
const
baseURL
=
process
.
env
.
VUE_APP_BASE_API
let
downloadLoadingInstance
;
let
downloadLoadingInstance
export
default
{
name
(
name
,
isDelete
=
true
)
{
...
...
@@ -17,29 +17,29 @@ export default {
responseType
:
'
blob
'
,
headers
:
{
'
Authorization
'
:
'
Bearer
'
+
getToken
()
}
}).
then
((
res
)
=>
{
const
isBlob
=
blobValidate
(
res
.
data
)
;
const
isBlob
=
blobValidate
(
res
.
data
)
if
(
isBlob
)
{
const
blob
=
new
Blob
([
res
.
data
])
this
.
saveAs
(
blob
,
decodeURIComponent
(
res
.
headers
[
'
download-filename
'
]))
}
else
{
this
.
printErrMsg
(
res
.
data
)
;
this
.
printErrMsg
(
res
.
data
)
}
})
},
resource
(
resource
)
{
var
url
=
baseURL
+
"
/common/download/resource?resource=
"
+
encodeURIComponent
(
resource
)
;
var
url
=
baseURL
+
"
/common/download/resource?resource=
"
+
encodeURIComponent
(
resource
)
axios
({
method
:
'
get
'
,
url
:
url
,
responseType
:
'
blob
'
,
headers
:
{
'
Authorization
'
:
'
Bearer
'
+
getToken
()
}
}).
then
((
res
)
=>
{
const
isBlob
=
blobValidate
(
res
.
data
)
;
const
isBlob
=
blobValidate
(
res
.
data
)
if
(
isBlob
)
{
const
blob
=
new
Blob
([
res
.
data
])
this
.
saveAs
(
blob
,
decodeURIComponent
(
res
.
headers
[
'
download-filename
'
]))
}
else
{
this
.
printErrMsg
(
res
.
data
)
;
this
.
printErrMsg
(
res
.
data
)
}
})
},
...
...
@@ -52,28 +52,28 @@ export default {
responseType
:
'
blob
'
,
headers
:
{
'
Authorization
'
:
'
Bearer
'
+
getToken
()
}
}).
then
((
res
)
=>
{
const
isBlob
=
blobValidate
(
res
.
data
)
;
const
isBlob
=
blobValidate
(
res
.
data
)
if
(
isBlob
)
{
const
blob
=
new
Blob
([
res
.
data
],
{
type
:
'
application/zip
'
})
this
.
saveAs
(
blob
,
name
)
}
else
{
this
.
printErrMsg
(
res
.
data
)
;
this
.
printErrMsg
(
res
.
data
)
}
downloadLoadingInstance
.
close
()
;
downloadLoadingInstance
.
close
()
}).
catch
((
r
)
=>
{
console
.
error
(
r
)
Message
.
error
(
'
下载文件出现错误,请联系管理员!
'
)
downloadLoadingInstance
.
close
()
;
downloadLoadingInstance
.
close
()
})
},
saveAs
(
text
,
name
,
opts
)
{
saveAs
(
text
,
name
,
opts
)
;
saveAs
(
text
,
name
,
opts
)
},
async
printErrMsg
(
data
)
{
const
resText
=
await
data
.
text
()
;
const
rspObj
=
JSON
.
parse
(
resText
)
;
const
resText
=
await
data
.
text
()
const
rspObj
=
JSON
.
parse
(
resText
)
const
errMsg
=
errorCode
[
rspObj
.
code
]
||
rspObj
.
msg
||
errorCode
[
'
default
'
]
Message
.
error
(
errMsg
)
;
Message
.
error
(
errMsg
)
}
}
ruoyi-ui/src/plugins/modal.js
View file @
38ed092d
import
{
Message
,
MessageBox
,
Notification
,
Loading
}
from
'
element-ui
'
let
loadingInstance
;
let
loadingInstance
export
default
{
// 消息提示
...
...
@@ -41,7 +41,7 @@ export default {
},
// 错误通知
notifyError
(
content
)
{
Notification
.
error
(
content
)
;
Notification
.
error
(
content
)
},
// 成功通知
notifySuccess
(
content
)
{
...
...
@@ -78,6 +78,6 @@ export default {
},
// 关闭遮罩层
closeLoading
()
{
loadingInstance
.
close
()
;
loadingInstance
.
close
()
}
}
ruoyi-ui/src/plugins/tab.js
View file @
38ed092d
import
store
from
'
@/store
'
import
router
from
'
@/router
'
;
import
router
from
'
@/router
'
export
default
{
// 刷新当前tab页签
refreshPage
(
obj
)
{
const
{
path
,
query
,
matched
}
=
router
.
currentRoute
;
const
{
path
,
query
,
matched
}
=
router
.
currentRoute
if
(
obj
===
undefined
)
{
matched
.
forEach
((
m
)
=>
{
if
(
m
.
components
&&
m
.
components
.
default
&&
m
.
components
.
default
.
name
)
{
if
(
!
[
'
Layout
'
,
'
ParentView
'
].
includes
(
m
.
components
.
default
.
name
))
{
obj
=
{
name
:
m
.
components
.
default
.
name
,
path
:
path
,
query
:
query
}
;
obj
=
{
name
:
m
.
components
.
default
.
name
,
path
:
path
,
query
:
query
}
}
}
})
;
})
}
return
store
.
dispatch
(
'
tagsView/delCachedView
'
,
obj
).
then
(()
=>
{
const
{
path
,
query
}
=
obj
...
...
@@ -24,9 +24,9 @@ export default {
},
// 关闭当前tab页签,打开新页签
closeOpenPage
(
obj
)
{
store
.
dispatch
(
"
tagsView/delView
"
,
router
.
currentRoute
)
;
store
.
dispatch
(
"
tagsView/delView
"
,
router
.
currentRoute
)
if
(
obj
!==
undefined
)
{
return
router
.
push
(
obj
)
;
return
router
.
push
(
obj
)
}
},
// 关闭指定tab页签
...
...
@@ -37,35 +37,35 @@ export default {
if
(
latestView
)
{
return
router
.
push
(
latestView
.
fullPath
)
}
return
router
.
push
(
'
/
'
)
;
})
;
return
router
.
push
(
'
/
'
)
})
}
return
store
.
dispatch
(
'
tagsView/delView
'
,
obj
)
;
return
store
.
dispatch
(
'
tagsView/delView
'
,
obj
)
},
// 关闭所有tab页签
closeAllPage
()
{
return
store
.
dispatch
(
'
tagsView/delAllViews
'
)
;
return
store
.
dispatch
(
'
tagsView/delAllViews
'
)
},
// 关闭左侧tab页签
closeLeftPage
(
obj
)
{
return
store
.
dispatch
(
'
tagsView/delLeftTags
'
,
obj
||
router
.
currentRoute
)
;
return
store
.
dispatch
(
'
tagsView/delLeftTags
'
,
obj
||
router
.
currentRoute
)
},
// 关闭右侧tab页签
closeRightPage
(
obj
)
{
return
store
.
dispatch
(
'
tagsView/delRightTags
'
,
obj
||
router
.
currentRoute
)
;
return
store
.
dispatch
(
'
tagsView/delRightTags
'
,
obj
||
router
.
currentRoute
)
},
// 关闭其他tab页签
closeOtherPage
(
obj
)
{
return
store
.
dispatch
(
'
tagsView/delOthersViews
'
,
obj
||
router
.
currentRoute
)
;
return
store
.
dispatch
(
'
tagsView/delOthersViews
'
,
obj
||
router
.
currentRoute
)
},
// 添加tab页签
openPage
(
title
,
url
,
params
)
{
const
obj
=
{
path
:
url
,
meta
:
{
title
:
title
}
}
store
.
dispatch
(
'
tagsView/addView
'
,
obj
)
;
return
router
.
push
({
path
:
url
,
query
:
params
})
;
store
.
dispatch
(
'
tagsView/addView
'
,
obj
)
return
router
.
push
({
path
:
url
,
query
:
params
})
},
// 修改tab页签
updatePage
(
obj
)
{
return
store
.
dispatch
(
'
tagsView/updateVisitedView
'
,
obj
)
;
return
store
.
dispatch
(
'
tagsView/updateVisitedView
'
,
obj
)
}
}
ruoyi-ui/src/router/index.js
View file @
38ed092d
...
...
@@ -165,8 +165,8 @@ export const dynamicRoutes = [
]
// 防止连续点击多次路由报错
let
routerPush
=
Router
.
prototype
.
push
;
let
routerReplace
=
Router
.
prototype
.
replace
;
let
routerPush
=
Router
.
prototype
.
push
let
routerReplace
=
Router
.
prototype
.
replace
// push
Router
.
prototype
.
push
=
function
push
(
location
)
{
return
routerPush
.
call
(
this
,
location
).
catch
(
err
=>
err
)
...
...
ruoyi-ui/src/store/getters.js
View file @
38ed092d
...
...
@@ -14,6 +14,6 @@ const getters = {
permission_routes
:
state
=>
state
.
permission
.
routes
,
topbarRouters
:
state
=>
state
.
permission
.
topbarRouters
,
defaultRoutes
:
state
=>
state
.
permission
.
defaultRoutes
,
sidebarRouters
:
state
=>
state
.
permission
.
sidebarRouters
,
sidebarRouters
:
state
=>
state
.
permission
.
sidebarRouters
}
export
default
getters
ruoyi-ui/src/store/modules/app.js
View file @
38ed092d
...
...
@@ -13,7 +13,7 @@ const state = {
const
mutations
=
{
TOGGLE_SIDEBAR
:
state
=>
{
if
(
state
.
sidebar
.
hide
)
{
return
false
;
return
false
}
state
.
sidebar
.
opened
=
!
state
.
sidebar
.
opened
state
.
sidebar
.
withoutAnimation
=
false
...
...
ruoyi-ui/src/store/modules/permission.js
View file @
38ed092d
...
...
@@ -38,9 +38,9 @@ const permission = {
const
rdata
=
JSON
.
parse
(
JSON
.
stringify
(
res
.
data
))
const
sidebarRoutes
=
filterAsyncRouter
(
sdata
)
const
rewriteRoutes
=
filterAsyncRouter
(
rdata
,
false
,
true
)
const
asyncRoutes
=
filterDynamicRoutes
(
dynamicRoutes
)
;
const
asyncRoutes
=
filterDynamicRoutes
(
dynamicRoutes
)
rewriteRoutes
.
push
({
path
:
'
*
'
,
redirect
:
'
/404
'
,
hidden
:
true
})
router
.
addRoutes
(
asyncRoutes
)
;
router
.
addRoutes
(
asyncRoutes
)
commit
(
'
SET_ROUTES
'
,
rewriteRoutes
)
commit
(
'
SET_SIDEBAR_ROUTERS
'
,
constantRoutes
.
concat
(
sidebarRoutes
))
commit
(
'
SET_DEFAULT_ROUTES
'
,
sidebarRoutes
)
...
...
ruoyi-ui/src/utils/dict/Dict.js
View file @
38ed092d
import
Vue
from
'
vue
'
import
{
mergeRecursive
}
from
"
@/utils/ruoyi
"
;
import
{
mergeRecursive
}
from
"
@/utils/ruoyi
"
import
DictMeta
from
'
./DictMeta
'
import
DictData
from
'
./DictData
'
...
...
ruoyi-ui/src/utils/dict/DictMeta.js
View file @
38ed092d
import
{
mergeRecursive
}
from
"
@/utils/ruoyi
"
;
import
{
mergeRecursive
}
from
"
@/utils/ruoyi
"
import
DictOptions
from
'
./DictOptions
'
/**
...
...
ruoyi-ui/src/utils/dict/DictOptions.js
View file @
38ed092d
import
{
mergeRecursive
}
from
"
@/utils/ruoyi
"
;
import
{
mergeRecursive
}
from
"
@/utils/ruoyi
"
import
dictConverter
from
'
./DictConverter
'
export
const
options
=
{
...
...
ruoyi-ui/src/utils/index.js
View file @
38ed092d
...
...
@@ -4,7 +4,7 @@ import { parseTime } from './ruoyi'
* 表格时间格式化
*/
export
function
formatDate
(
cellValue
)
{
if
(
cellValue
==
null
||
cellValue
==
""
)
return
""
;
if
(
cellValue
==
null
||
cellValue
==
""
)
return
""
var
date
=
new
Date
(
cellValue
)
var
year
=
date
.
getFullYear
()
var
month
=
date
.
getMonth
()
+
1
<
10
?
'
0
'
+
(
date
.
getMonth
()
+
1
)
:
date
.
getMonth
()
+
1
...
...
ruoyi-ui/src/utils/permission.js
View file @
38ed092d
...
...
@@ -9,13 +9,13 @@ export function checkPermi(value) {
if
(
value
&&
value
instanceof
Array
&&
value
.
length
>
0
)
{
const
permissions
=
store
.
getters
&&
store
.
getters
.
permissions
const
permissionDatas
=
value
const
all_permission
=
"
*:*:*
"
;
const
all_permission
=
"
*:*:*
"
const
hasPermission
=
permissions
.
some
(
permission
=>
{
return
all_permission
===
permission
||
permissionDatas
.
includes
(
permission
)
})
return
hasPermission
;
return
hasPermission
}
else
{
console
.
error
(
`need roles! Like checkPermi="['system:user:add','system:user:edit']"`
)
...
...
@@ -32,13 +32,13 @@ export function checkRole(value) {
if
(
value
&&
value
instanceof
Array
&&
value
.
length
>
0
)
{
const
roles
=
store
.
getters
&&
store
.
getters
.
roles
const
permissionRoles
=
value
const
super_admin
=
"
admin
"
;
const
super_admin
=
"
admin
"
const
hasRole
=
roles
.
some
(
role
=>
{
return
super_admin
===
role
||
permissionRoles
.
includes
(
role
)
})
return
hasRole
;
return
hasRole
}
else
{
console
.
error
(
`need roles! Like checkRole="['admin','editor']"`
)
...
...
ruoyi-ui/src/utils/request.js
View file @
38ed092d
...
...
@@ -3,13 +3,13 @@ import { Notification, MessageBox, Message, Loading } from 'element-ui'
import
store
from
'
@/store
'
import
{
getToken
}
from
'
@/utils/auth
'
import
errorCode
from
'
@/utils/errorCode
'
import
{
tansParams
,
blobValidate
}
from
"
@/utils/ruoyi
"
;
import
{
tansParams
,
blobValidate
}
from
"
@/utils/ruoyi
"
import
cache
from
'
@/plugins/cache
'
import
{
saveAs
}
from
'
file-saver
'
let
downloadLoadingInstance
;
let
downloadLoadingInstance
// 是否显示重新登录
export
let
isRelogin
=
{
show
:
false
}
;
export
let
isRelogin
=
{
show
:
false
}
axios
.
defaults
.
headers
[
'
Content-Type
'
]
=
'
application/json;charset=utf-8
'
// 创建axios实例
...
...
@@ -31,10 +31,10 @@ service.interceptors.request.use(config => {
}
// get请求映射params参数
if
(
config
.
method
===
'
get
'
&&
config
.
params
)
{
let
url
=
config
.
url
+
'
?
'
+
tansParams
(
config
.
params
)
;
url
=
url
.
slice
(
0
,
-
1
)
;
config
.
params
=
{}
;
config
.
url
=
url
;
let
url
=
config
.
url
+
'
?
'
+
tansParams
(
config
.
params
)
url
=
url
.
slice
(
0
,
-
1
)
config
.
params
=
{}
config
.
url
=
url
}
if
(
!
isRepeatSubmit
&&
(
config
.
method
===
'
post
'
||
config
.
method
===
'
put
'
))
{
const
requestObj
=
{
...
...
@@ -42,22 +42,22 @@ service.interceptors.request.use(config => {
data
:
typeof
config
.
data
===
'
object
'
?
JSON
.
stringify
(
config
.
data
)
:
config
.
data
,
time
:
new
Date
().
getTime
()
}
const
requestSize
=
Object
.
keys
(
JSON
.
stringify
(
requestObj
)).
length
;
// 请求数据大小
const
limitSize
=
5
*
1024
*
1024
;
// 限制存放数据5M
const
requestSize
=
Object
.
keys
(
JSON
.
stringify
(
requestObj
)).
length
// 请求数据大小
const
limitSize
=
5
*
1024
*
1024
// 限制存放数据5M
if
(
requestSize
>=
limitSize
)
{
console
.
warn
(
`[
${
config
.
url
}
]: `
+
'
请求数据大小超出允许的5M限制,无法进行防重复提交验证。
'
)
return
config
;
return
config
}
const
sessionObj
=
cache
.
session
.
getJSON
(
'
sessionObj
'
)
if
(
sessionObj
===
undefined
||
sessionObj
===
null
||
sessionObj
===
''
)
{
cache
.
session
.
setJSON
(
'
sessionObj
'
,
requestObj
)
}
else
{
const
s_url
=
sessionObj
.
url
;
// 请求地址
const
s_data
=
sessionObj
.
data
;
// 请求数据
const
s_time
=
sessionObj
.
time
;
// 请求时间
const
interval
=
1000
;
// 间隔时间(ms),小于此时间视为重复提交
const
s_url
=
sessionObj
.
url
// 请求地址
const
s_data
=
sessionObj
.
data
// 请求数据
const
s_time
=
sessionObj
.
time
// 请求时间
const
interval
=
1000
// 间隔时间(ms),小于此时间视为重复提交
if
(
s_data
===
requestObj
.
data
&&
requestObj
.
time
-
s_time
<
interval
&&
s_url
===
requestObj
.
url
)
{
const
message
=
'
数据正在处理,请勿重复提交
'
;
const
message
=
'
数据正在处理,请勿重复提交
'
console
.
warn
(
`[
${
s_url
}
]: `
+
message
)
return
Promise
.
reject
(
new
Error
(
message
))
}
else
{
...
...
@@ -74,7 +74,7 @@ service.interceptors.request.use(config => {
// 响应拦截器
service
.
interceptors
.
response
.
use
(
res
=>
{
// 未设置状态码则默认成功状态
const
code
=
res
.
data
.
code
||
200
;
const
code
=
res
.
data
.
code
||
200
// 获取错误信息
const
msg
=
errorCode
[
code
]
||
res
.
data
.
msg
||
errorCode
[
'
default
'
]
// 二进制数据则直接返回
...
...
@@ -83,15 +83,15 @@ service.interceptors.response.use(res => {
}
if
(
code
===
401
)
{
if
(
!
isRelogin
.
show
)
{
isRelogin
.
show
=
true
;
isRelogin
.
show
=
true
MessageBox
.
confirm
(
'
登录状态已过期,您可以继续留在该页面,或者重新登录
'
,
'
系统提示
'
,
{
confirmButtonText
:
'
重新登录
'
,
cancelButtonText
:
'
取消
'
,
type
:
'
warning
'
}).
then
(()
=>
{
isRelogin
.
show
=
false
;
isRelogin
.
show
=
false
store
.
dispatch
(
'
LogOut
'
).
then
(()
=>
{
location
.
href
=
'
/index
'
;
location
.
href
=
'
/index
'
})
}).
catch
(()
=>
{
isRelogin
.
show
=
false
;
})
;
isRelogin
.
show
=
false
})
}
return
Promise
.
reject
(
'
无效的会话,或者会话已过期,请重新登录。
'
)
}
else
if
(
code
===
500
)
{
...
...
@@ -109,13 +109,13 @@ service.interceptors.response.use(res => {
},
error
=>
{
console
.
log
(
'
err
'
+
error
)
let
{
message
}
=
error
;
let
{
message
}
=
error
if
(
message
==
"
Network Error
"
)
{
message
=
"
后端接口连接异常
"
;
message
=
"
后端接口连接异常
"
}
else
if
(
message
.
includes
(
"
timeout
"
))
{
message
=
"
系统接口请求超时
"
;
message
=
"
系统接口请求超时
"
}
else
if
(
message
.
includes
(
"
Request failed with status code
"
))
{
message
=
"
系统接口
"
+
message
.
substr
(
message
.
length
-
3
)
+
"
异常
"
;
message
=
"
系统接口
"
+
message
.
substr
(
message
.
length
-
3
)
+
"
异常
"
}
Message
({
message
:
message
,
type
:
'
error
'
,
duration
:
5
*
1000
})
return
Promise
.
reject
(
error
)
...
...
@@ -131,21 +131,21 @@ export function download(url, params, filename, config) {
responseType
:
'
blob
'
,
...
config
}).
then
(
async
(
data
)
=>
{
const
isBlob
=
blobValidate
(
data
)
;
const
isBlob
=
blobValidate
(
data
)
if
(
isBlob
)
{
const
blob
=
new
Blob
([
data
])
saveAs
(
blob
,
filename
)
}
else
{
const
resText
=
await
data
.
text
()
;
const
rspObj
=
JSON
.
parse
(
resText
)
;
const
resText
=
await
data
.
text
()
const
rspObj
=
JSON
.
parse
(
resText
)
const
errMsg
=
errorCode
[
rspObj
.
code
]
||
rspObj
.
msg
||
errorCode
[
'
default
'
]
Message
.
error
(
errMsg
)
;
Message
.
error
(
errMsg
)
}
downloadLoadingInstance
.
close
()
;
downloadLoadingInstance
.
close
()
}).
catch
((
r
)
=>
{
console
.
error
(
r
)
Message
.
error
(
'
下载文件出现错误,请联系管理员!
'
)
downloadLoadingInstance
.
close
()
;
downloadLoadingInstance
.
close
()
})
}
...
...
ruoyi-ui/src/utils/ruoyi.js
View file @
38ed092d
...
...
@@ -16,7 +16,7 @@ export function parseTime(time, pattern) {
if
((
typeof
time
===
'
string
'
)
&&
(
/^
[
0-9
]
+$/
.
test
(
time
)))
{
time
=
parseInt
(
time
)
}
else
if
(
typeof
time
===
'
string
'
)
{
time
=
time
.
replace
(
new
RegExp
(
/-/gm
),
'
/
'
).
replace
(
'
T
'
,
'
'
).
replace
(
new
RegExp
(
/
\.[\d]{3}
/gm
),
''
)
;
time
=
time
.
replace
(
new
RegExp
(
/-/gm
),
'
/
'
).
replace
(
'
T
'
,
'
'
).
replace
(
new
RegExp
(
/
\.[\d]{3}
/gm
),
''
)
}
if
((
typeof
time
===
'
number
'
)
&&
(
time
.
toString
().
length
===
10
))
{
time
=
time
*
1000
...
...
@@ -47,89 +47,89 @@ export function parseTime(time, pattern) {
// 表单重置
export
function
resetForm
(
refName
)
{
if
(
this
.
$refs
[
refName
])
{
this
.
$refs
[
refName
].
resetFields
()
;
this
.
$refs
[
refName
].
resetFields
()
}
}
// 添加日期范围
export
function
addDateRange
(
params
,
dateRange
,
propName
)
{
let
search
=
params
;
search
.
params
=
typeof
(
search
.
params
)
===
'
object
'
&&
search
.
params
!==
null
&&
!
Array
.
isArray
(
search
.
params
)
?
search
.
params
:
{}
;
dateRange
=
Array
.
isArray
(
dateRange
)
?
dateRange
:
[]
;
let
search
=
params
search
.
params
=
typeof
(
search
.
params
)
===
'
object
'
&&
search
.
params
!==
null
&&
!
Array
.
isArray
(
search
.
params
)
?
search
.
params
:
{}
dateRange
=
Array
.
isArray
(
dateRange
)
?
dateRange
:
[]
if
(
typeof
(
propName
)
===
'
undefined
'
)
{
search
.
params
[
'
beginTime
'
]
=
dateRange
[
0
]
;
search
.
params
[
'
endTime
'
]
=
dateRange
[
1
]
;
search
.
params
[
'
beginTime
'
]
=
dateRange
[
0
]
search
.
params
[
'
endTime
'
]
=
dateRange
[
1
]
}
else
{
search
.
params
[
'
begin
'
+
propName
]
=
dateRange
[
0
]
;
search
.
params
[
'
end
'
+
propName
]
=
dateRange
[
1
]
;
search
.
params
[
'
begin
'
+
propName
]
=
dateRange
[
0
]
search
.
params
[
'
end
'
+
propName
]
=
dateRange
[
1
]
}
return
search
;
return
search
}
// 回显数据字典
export
function
selectDictLabel
(
datas
,
value
)
{
if
(
value
===
undefined
)
{
return
""
;
return
""
}
var
actions
=
[]
;
var
actions
=
[]
Object
.
keys
(
datas
).
some
((
key
)
=>
{
if
(
datas
[
key
].
value
==
(
''
+
value
))
{
actions
.
push
(
datas
[
key
].
label
)
;
return
true
;
actions
.
push
(
datas
[
key
].
label
)
return
true
}
})
if
(
actions
.
length
===
0
)
{
actions
.
push
(
value
)
;
actions
.
push
(
value
)
}
return
actions
.
join
(
''
)
;
return
actions
.
join
(
''
)
}
// 回显数据字典(字符串、数组)
export
function
selectDictLabels
(
datas
,
value
,
separator
)
{
if
(
value
===
undefined
||
value
.
length
===
0
)
{
return
""
;
return
""
}
if
(
Array
.
isArray
(
value
))
{
value
=
value
.
join
(
"
,
"
)
;
value
=
value
.
join
(
"
,
"
)
}
var
actions
=
[]
;
var
currentSeparator
=
undefined
===
separator
?
"
,
"
:
separator
;
var
temp
=
value
.
split
(
currentSeparator
)
;
var
actions
=
[]
var
currentSeparator
=
undefined
===
separator
?
"
,
"
:
separator
var
temp
=
value
.
split
(
currentSeparator
)
Object
.
keys
(
value
.
split
(
currentSeparator
)).
some
((
val
)
=>
{
var
match
=
false
;
var
match
=
false
Object
.
keys
(
datas
).
some
((
key
)
=>
{
if
(
datas
[
key
].
value
==
(
''
+
temp
[
val
]))
{
actions
.
push
(
datas
[
key
].
label
+
currentSeparator
)
;
match
=
true
;
actions
.
push
(
datas
[
key
].
label
+
currentSeparator
)
match
=
true
}
})
if
(
!
match
)
{
actions
.
push
(
temp
[
val
]
+
currentSeparator
)
;
actions
.
push
(
temp
[
val
]
+
currentSeparator
)
}
})
return
actions
.
join
(
''
).
substring
(
0
,
actions
.
join
(
''
).
length
-
1
)
;
return
actions
.
join
(
''
).
substring
(
0
,
actions
.
join
(
''
).
length
-
1
)
}
// 字符串格式化(%s )
export
function
sprintf
(
str
)
{
var
args
=
arguments
,
flag
=
true
,
i
=
1
;
var
args
=
arguments
,
flag
=
true
,
i
=
1
str
=
str
.
replace
(
/%s/g
,
function
()
{
var
arg
=
args
[
i
++
]
;
var
arg
=
args
[
i
++
]
if
(
typeof
arg
===
'
undefined
'
)
{
flag
=
false
;
return
''
;
flag
=
false
return
''
}
return
arg
;
})
;
return
flag
?
str
:
''
;
return
arg
})
return
flag
?
str
:
''
}
// 转换字符串,undefined,null等转化为""
export
function
parseStrEmpty
(
str
)
{
if
(
!
str
||
str
==
"
undefined
"
||
str
==
"
null
"
)
{
return
""
;
return
""
}
return
str
;
return
str
}
// 数据合并
...
...
@@ -137,16 +137,16 @@ export function mergeRecursive(source, target) {
for
(
var
p
in
target
)
{
try
{
if
(
target
[
p
].
constructor
==
Object
)
{
source
[
p
]
=
mergeRecursive
(
source
[
p
],
target
[
p
])
;
source
[
p
]
=
mergeRecursive
(
source
[
p
],
target
[
p
])
}
else
{
source
[
p
]
=
target
[
p
]
;
source
[
p
]
=
target
[
p
]
}
}
catch
(
e
)
{
source
[
p
]
=
target
[
p
]
;
source
[
p
]
=
target
[
p
]
}
}
return
source
;
}
;
return
source
}
/**
* 构造树型结构数据
...
...
@@ -160,15 +160,15 @@ export function handleTree(data, id, parentId, children) {
id
:
id
||
'
id
'
,
parentId
:
parentId
||
'
parentId
'
,
childrenList
:
children
||
'
children
'
}
;
}
var
childrenListMap
=
{}
;
var
tree
=
[]
;
var
childrenListMap
=
{}
var
tree
=
[]
for
(
let
d
of
data
)
{
let
id
=
d
[
config
.
id
]
;
childrenListMap
[
id
]
=
d
;
let
id
=
d
[
config
.
id
]
childrenListMap
[
id
]
=
d
if
(
!
d
[
config
.
childrenList
])
{
d
[
config
.
childrenList
]
=
[]
;
d
[
config
.
childrenList
]
=
[]
}
}
...
...
@@ -176,12 +176,12 @@ export function handleTree(data, id, parentId, children) {
let
parentId
=
d
[
config
.
parentId
]
let
parentObj
=
childrenListMap
[
parentId
]
if
(
!
parentObj
)
{
tree
.
push
(
d
)
;
tree
.
push
(
d
)
}
else
{
parentObj
[
config
.
childrenList
].
push
(
d
)
}
}
return
tree
;
return
tree
}
/**
...
...
@@ -191,19 +191,19 @@ export function handleTree(data, id, parentId, children) {
export
function
tansParams
(
params
)
{
let
result
=
''
for
(
const
propName
of
Object
.
keys
(
params
))
{
const
value
=
params
[
propName
]
;
var
part
=
encodeURIComponent
(
propName
)
+
"
=
"
;
const
value
=
params
[
propName
]
var
part
=
encodeURIComponent
(
propName
)
+
"
=
"
if
(
value
!==
null
&&
value
!==
""
&&
typeof
(
value
)
!==
"
undefined
"
)
{
if
(
typeof
value
===
'
object
'
)
{
for
(
const
key
of
Object
.
keys
(
value
))
{
if
(
value
[
key
]
!==
null
&&
value
[
key
]
!==
""
&&
typeof
(
value
[
key
])
!==
'
undefined
'
)
{
let
params
=
propName
+
'
[
'
+
key
+
'
]
'
;
var
subPart
=
encodeURIComponent
(
params
)
+
"
=
"
;
result
+=
subPart
+
encodeURIComponent
(
value
[
key
])
+
"
&
"
;
let
params
=
propName
+
'
[
'
+
key
+
'
]
'
var
subPart
=
encodeURIComponent
(
params
)
+
"
=
"
result
+=
subPart
+
encodeURIComponent
(
value
[
key
])
+
"
&
"
}
}
}
else
{
result
+=
part
+
encodeURIComponent
(
value
)
+
"
&
"
;
result
+=
part
+
encodeURIComponent
(
value
)
+
"
&
"
}
}
}
...
...
@@ -214,7 +214,7 @@ export function tansParams(params) {
export
function
getNormalPath
(
p
)
{
if
(
p
.
length
===
0
||
!
p
||
p
==
'
undefined
'
)
{
return
p
}
;
}
let
res
=
p
.
replace
(
'
//
'
,
'
/
'
)
if
(
res
[
res
.
length
-
1
]
===
'
/
'
)
{
return
res
.
slice
(
0
,
res
.
length
-
1
)
...
...
ruoyi-ui/src/views/index.vue
View file @
38ed092d
...
...
@@ -1024,14 +1024,14 @@ export default {
return
{
// 版本号
version
:
"
3.8.9
"
}
;
}
},
methods
:
{
goTarget
(
href
)
{
window
.
open
(
href
,
"
_blank
"
)
;
window
.
open
(
href
,
"
_blank
"
)
}
}
}
;
}
</
script
>
<
style
scoped
lang=
"scss"
>
...
...
ruoyi-ui/src/views/login.vue
View file @
38ed092d
...
...
@@ -62,8 +62,8 @@
</
template
>
<
script
>
import
{
getCodeImg
}
from
"
@/api/login
"
;
import
Cookies
from
"
js-cookie
"
;
import
{
getCodeImg
}
from
"
@/api/login
"
import
Cookies
from
"
js-cookie
"
import
{
encrypt
,
decrypt
}
from
'
@/utils/jsencrypt
'
export
default
{
...
...
@@ -94,66 +94,66 @@ export default {
// 注册开关
register
:
false
,
redirect
:
undefined
}
;
}
},
watch
:
{
$route
:
{
handler
:
function
(
route
)
{
this
.
redirect
=
route
.
query
&&
route
.
query
.
redirect
;
this
.
redirect
=
route
.
query
&&
route
.
query
.
redirect
},
immediate
:
true
}
},
created
()
{
this
.
getCode
()
;
this
.
getCookie
()
;
this
.
getCode
()
this
.
getCookie
()
},
methods
:
{
getCode
()
{
getCodeImg
().
then
(
res
=>
{
this
.
captchaEnabled
=
res
.
captchaEnabled
===
undefined
?
true
:
res
.
captchaEnabled
;
this
.
captchaEnabled
=
res
.
captchaEnabled
===
undefined
?
true
:
res
.
captchaEnabled
if
(
this
.
captchaEnabled
)
{
this
.
codeUrl
=
"
data:image/gif;base64,
"
+
res
.
img
;
this
.
loginForm
.
uuid
=
res
.
uuid
;
this
.
codeUrl
=
"
data:image/gif;base64,
"
+
res
.
img
this
.
loginForm
.
uuid
=
res
.
uuid
}
})
;
})
},
getCookie
()
{
const
username
=
Cookies
.
get
(
"
username
"
)
;
const
password
=
Cookies
.
get
(
"
password
"
)
;
const
username
=
Cookies
.
get
(
"
username
"
)
const
password
=
Cookies
.
get
(
"
password
"
)
const
rememberMe
=
Cookies
.
get
(
'
rememberMe
'
)
this
.
loginForm
=
{
username
:
username
===
undefined
?
this
.
loginForm
.
username
:
username
,
password
:
password
===
undefined
?
this
.
loginForm
.
password
:
decrypt
(
password
),
rememberMe
:
rememberMe
===
undefined
?
false
:
Boolean
(
rememberMe
)
}
;
}
},
handleLogin
()
{
this
.
$refs
.
loginForm
.
validate
(
valid
=>
{
if
(
valid
)
{
this
.
loading
=
true
;
this
.
loading
=
true
if
(
this
.
loginForm
.
rememberMe
)
{
Cookies
.
set
(
"
username
"
,
this
.
loginForm
.
username
,
{
expires
:
30
})
;
Cookies
.
set
(
"
password
"
,
encrypt
(
this
.
loginForm
.
password
),
{
expires
:
30
})
;
Cookies
.
set
(
'
rememberMe
'
,
this
.
loginForm
.
rememberMe
,
{
expires
:
30
})
;
Cookies
.
set
(
"
username
"
,
this
.
loginForm
.
username
,
{
expires
:
30
})
Cookies
.
set
(
"
password
"
,
encrypt
(
this
.
loginForm
.
password
),
{
expires
:
30
})
Cookies
.
set
(
'
rememberMe
'
,
this
.
loginForm
.
rememberMe
,
{
expires
:
30
})
}
else
{
Cookies
.
remove
(
"
username
"
)
;
Cookies
.
remove
(
"
password
"
)
;
Cookies
.
remove
(
'
rememberMe
'
)
;
Cookies
.
remove
(
"
username
"
)
Cookies
.
remove
(
"
password
"
)
Cookies
.
remove
(
'
rememberMe
'
)
}
this
.
$store
.
dispatch
(
"
Login
"
,
this
.
loginForm
).
then
(()
=>
{
this
.
$router
.
push
({
path
:
this
.
redirect
||
"
/
"
}).
catch
(()
=>
{})
;
this
.
$router
.
push
({
path
:
this
.
redirect
||
"
/
"
}).
catch
(()
=>
{})
}).
catch
(()
=>
{
this
.
loading
=
false
;
this
.
loading
=
false
if
(
this
.
captchaEnabled
)
{
this
.
getCode
()
;
this
.
getCode
()
}
})
;
})
}
})
;
})
}
}
}
;
}
</
script
>
<
style
rel=
"stylesheet/scss"
lang=
"scss"
>
...
...
ruoyi-ui/src/views/monitor/cache/index.vue
View file @
38ed092d
...
...
@@ -65,8 +65,8 @@
</
template
>
<
script
>
import
{
getCache
}
from
"
@/api/monitor/cache
"
;
import
*
as
echarts
from
"
echarts
"
;
import
{
getCache
}
from
"
@/api/monitor/cache
"
import
*
as
echarts
from
"
echarts
"
export
default
{
name
:
"
Cache
"
,
...
...
@@ -81,17 +81,17 @@ export default {
}
},
created
()
{
this
.
getList
()
;
this
.
openLoading
()
;
this
.
getList
()
this
.
openLoading
()
},
methods
:
{
/** 查缓存询信息 */
getList
()
{
getCache
().
then
((
response
)
=>
{
this
.
cache
=
response
.
data
;
this
.
$modal
.
closeLoading
()
;
this
.
cache
=
response
.
data
this
.
$modal
.
closeLoading
()
this
.
commandstats
=
echarts
.
init
(
this
.
$refs
.
commandstats
,
"
macarons
"
)
;
this
.
commandstats
=
echarts
.
init
(
this
.
$refs
.
commandstats
,
"
macarons
"
)
this
.
commandstats
.
setOption
({
tooltip
:
{
trigger
:
"
item
"
,
...
...
@@ -109,8 +109,8 @@ export default {
animationDuration
:
1000
,
}
]
})
;
this
.
usedmemory
=
echarts
.
init
(
this
.
$refs
.
usedmemory
,
"
macarons
"
)
;
})
this
.
usedmemory
=
echarts
.
init
(
this
.
$refs
.
usedmemory
,
"
macarons
"
)
this
.
usedmemory
.
setOption
({
tooltip
:
{
formatter
:
"
{b} <br/>{a} :
"
+
this
.
cache
.
info
.
used_memory_human
,
...
...
@@ -132,17 +132,17 @@ export default {
]
}
]
})
;
})
window
.
addEventListener
(
"
resize
"
,
()
=>
{
this
.
commandstats
.
resize
()
;
this
.
usedmemory
.
resize
()
;
})
;
})
;
this
.
commandstats
.
resize
()
this
.
usedmemory
.
resize
()
})
})
},
// 打开加载层
openLoading
()
{
this
.
$modal
.
loading
(
"
正在加载缓存监控数据,请稍候!
"
)
;
this
.
$modal
.
loading
(
"
正在加载缓存监控数据,请稍候!
"
)
}
}
}
;
}
</
script
>
ruoyi-ui/src/views/monitor/cache/list.vue
View file @
38ed092d
...
...
@@ -152,7 +152,7 @@
</template>
<
script
>
import
{
listCacheName
,
listCacheKey
,
getCacheValue
,
clearCacheName
,
clearCacheKey
,
clearCacheAll
}
from
"
@/api/monitor/cache
"
;
import
{
listCacheName
,
listCacheKey
,
getCacheValue
,
clearCacheName
,
clearCacheKey
,
clearCacheAll
}
from
"
@/api/monitor/cache
"
export
default
{
name
:
"
CacheList
"
,
...
...
@@ -165,77 +165,77 @@ export default {
subLoading
:
false
,
nowCacheName
:
""
,
tableHeight
:
window
.
innerHeight
-
200
}
;
}
},
created
()
{
this
.
getCacheNames
()
;
this
.
getCacheNames
()
},
methods
:
{
/** 查询缓存名称列表 */
getCacheNames
()
{
this
.
loading
=
true
;
this
.
loading
=
true
listCacheName
().
then
(
response
=>
{
this
.
cacheNames
=
response
.
data
;
this
.
loading
=
false
;
})
;
this
.
cacheNames
=
response
.
data
this
.
loading
=
false
})
},
/** 刷新缓存名称列表 */
refreshCacheNames
()
{
this
.
getCacheNames
()
;
this
.
$modal
.
msgSuccess
(
"
刷新缓存列表成功
"
)
;
this
.
getCacheNames
()
this
.
$modal
.
msgSuccess
(
"
刷新缓存列表成功
"
)
},
/** 清理指定名称缓存 */
handleClearCacheName
(
row
)
{
clearCacheName
(
row
.
cacheName
).
then
(
response
=>
{
this
.
$modal
.
msgSuccess
(
"
清理缓存名称[
"
+
row
.
cacheName
+
"
]成功
"
)
;
this
.
getCacheKeys
()
;
})
;
this
.
$modal
.
msgSuccess
(
"
清理缓存名称[
"
+
row
.
cacheName
+
"
]成功
"
)
this
.
getCacheKeys
()
})
},
/** 查询缓存键名列表 */
getCacheKeys
(
row
)
{
const
cacheName
=
row
!==
undefined
?
row
.
cacheName
:
this
.
nowCacheName
;
const
cacheName
=
row
!==
undefined
?
row
.
cacheName
:
this
.
nowCacheName
if
(
cacheName
===
""
)
{
return
;
return
}
this
.
subLoading
=
true
;
this
.
subLoading
=
true
listCacheKey
(
cacheName
).
then
(
response
=>
{
this
.
cacheKeys
=
response
.
data
;
this
.
subLoading
=
false
;
this
.
nowCacheName
=
cacheName
;
})
;
this
.
cacheKeys
=
response
.
data
this
.
subLoading
=
false
this
.
nowCacheName
=
cacheName
})
},
/** 刷新缓存键名列表 */
refreshCacheKeys
()
{
this
.
getCacheKeys
()
;
this
.
$modal
.
msgSuccess
(
"
刷新键名列表成功
"
)
;
this
.
getCacheKeys
()
this
.
$modal
.
msgSuccess
(
"
刷新键名列表成功
"
)
},
/** 清理指定键名缓存 */
handleClearCacheKey
(
cacheKey
)
{
clearCacheKey
(
cacheKey
).
then
(
response
=>
{
this
.
$modal
.
msgSuccess
(
"
清理缓存键名[
"
+
cacheKey
+
"
]成功
"
)
;
this
.
getCacheKeys
()
;
})
;
this
.
$modal
.
msgSuccess
(
"
清理缓存键名[
"
+
cacheKey
+
"
]成功
"
)
this
.
getCacheKeys
()
})
},
/** 列表前缀去除 */
nameFormatter
(
row
)
{
return
row
.
cacheName
.
replace
(
"
:
"
,
""
)
;
return
row
.
cacheName
.
replace
(
"
:
"
,
""
)
},
/** 键名前缀去除 */
keyFormatter
(
cacheKey
)
{
return
cacheKey
.
replace
(
this
.
nowCacheName
,
""
)
;
return
cacheKey
.
replace
(
this
.
nowCacheName
,
""
)
},
/** 查询缓存内容详细 */
handleCacheValue
(
cacheKey
)
{
getCacheValue
(
this
.
nowCacheName
,
cacheKey
).
then
(
response
=>
{
this
.
cacheForm
=
response
.
data
;
})
;
this
.
cacheForm
=
response
.
data
})
},
/** 清理全部缓存 */
handleClearCacheAll
()
{
clearCacheAll
().
then
(
response
=>
{
this
.
$modal
.
msgSuccess
(
"
清理全部缓存成功
"
)
;
})
;
this
.
$modal
.
msgSuccess
(
"
清理全部缓存成功
"
)
})
}
}
,
}
;
}
}
</
script
>
ruoyi-ui/src/views/monitor/druid/index.vue
View file @
38ed092d
...
...
@@ -2,14 +2,14 @@
<i-frame
:src=
"url"
/>
</
template
>
<
script
>
import
iFrame
from
"
@/components/iFrame/index
"
;
import
iFrame
from
"
@/components/iFrame/index
"
export
default
{
name
:
"
Druid
"
,
components
:
{
iFrame
},
data
()
{
return
{
url
:
process
.
env
.
VUE_APP_BASE_API
+
"
/druid/login.html
"
}
;
}
,
}
;
}
}
}
</
script
>
ruoyi-ui/src/views/monitor/job/index.vue
View file @
38ed092d
...
...
@@ -291,7 +291,7 @@
</template>
<
script
>
import
{
listJob
,
getJob
,
delJob
,
addJob
,
updateJob
,
runJob
,
changeJobStatus
}
from
"
@/api/monitor/job
"
;
import
{
listJob
,
getJob
,
delJob
,
addJob
,
updateJob
,
runJob
,
changeJobStatus
}
from
"
@/api/monitor/job
"
import
Crontab
from
'
@/components/Crontab
'
export
default
{
...
...
@@ -346,29 +346,29 @@ export default {
{
required
:
true
,
message
:
"
cron执行表达式不能为空
"
,
trigger
:
"
blur
"
}
]
}
}
;
}
},
created
()
{
this
.
getList
()
;
this
.
getList
()
},
methods
:
{
/** 查询定时任务列表 */
getList
()
{
this
.
loading
=
true
;
this
.
loading
=
true
listJob
(
this
.
queryParams
).
then
(
response
=>
{
this
.
jobList
=
response
.
rows
;
this
.
total
=
response
.
total
;
this
.
loading
=
false
;
})
;
this
.
jobList
=
response
.
rows
this
.
total
=
response
.
total
this
.
loading
=
false
})
},
// 任务组名字典翻译
jobGroupFormat
(
row
,
column
)
{
return
this
.
selectDictLabel
(
this
.
dict
.
type
.
sys_job_group
,
row
.
jobGroup
)
;
return
this
.
selectDictLabel
(
this
.
dict
.
type
.
sys_job_group
,
row
.
jobGroup
)
},
// 取消按钮
cancel
()
{
this
.
open
=
false
;
this
.
reset
()
;
this
.
open
=
false
this
.
reset
()
},
// 表单重置
reset
()
{
...
...
@@ -381,96 +381,96 @@ export default {
misfirePolicy
:
1
,
concurrent
:
1
,
status
:
"
0
"
}
;
this
.
resetForm
(
"
form
"
)
;
}
this
.
resetForm
(
"
form
"
)
},
/** 搜索按钮操作 */
handleQuery
()
{
this
.
queryParams
.
pageNum
=
1
;
this
.
getList
()
;
this
.
queryParams
.
pageNum
=
1
this
.
getList
()
},
/** 重置按钮操作 */
resetQuery
()
{
this
.
resetForm
(
"
queryForm
"
)
;
this
.
handleQuery
()
;
this
.
resetForm
(
"
queryForm
"
)
this
.
handleQuery
()
},
// 多选框选中数据
handleSelectionChange
(
selection
)
{
this
.
ids
=
selection
.
map
(
item
=>
item
.
jobId
)
;
this
.
single
=
selection
.
length
!=
1
;
this
.
multiple
=
!
selection
.
length
;
this
.
ids
=
selection
.
map
(
item
=>
item
.
jobId
)
this
.
single
=
selection
.
length
!=
1
this
.
multiple
=
!
selection
.
length
},
// 更多操作触发
handleCommand
(
command
,
row
)
{
switch
(
command
)
{
case
"
handleRun
"
:
this
.
handleRun
(
row
)
;
break
;
this
.
handleRun
(
row
)
break
case
"
handleView
"
:
this
.
handleView
(
row
)
;
break
;
this
.
handleView
(
row
)
break
case
"
handleJobLog
"
:
this
.
handleJobLog
(
row
)
;
break
;
this
.
handleJobLog
(
row
)
break
default
:
break
;
break
}
},
// 任务状态修改
handleStatusChange
(
row
)
{
let
text
=
row
.
status
===
"
0
"
?
"
启用
"
:
"
停用
"
;
let
text
=
row
.
status
===
"
0
"
?
"
启用
"
:
"
停用
"
this
.
$modal
.
confirm
(
'
确认要"
'
+
text
+
'
""
'
+
row
.
jobName
+
'
"任务吗?
'
).
then
(
function
()
{
return
changeJobStatus
(
row
.
jobId
,
row
.
status
)
;
return
changeJobStatus
(
row
.
jobId
,
row
.
status
)
}).
then
(()
=>
{
this
.
$modal
.
msgSuccess
(
text
+
"
成功
"
)
;
this
.
$modal
.
msgSuccess
(
text
+
"
成功
"
)
}).
catch
(
function
()
{
row
.
status
=
row
.
status
===
"
0
"
?
"
1
"
:
"
0
"
;
})
;
row
.
status
=
row
.
status
===
"
0
"
?
"
1
"
:
"
0
"
})
},
/* 立即执行一次 */
handleRun
(
row
)
{
this
.
$modal
.
confirm
(
'
确认要立即执行一次"
'
+
row
.
jobName
+
'
"任务吗?
'
).
then
(
function
()
{
return
runJob
(
row
.
jobId
,
row
.
jobGroup
)
;
return
runJob
(
row
.
jobId
,
row
.
jobGroup
)
}).
then
(()
=>
{
this
.
$modal
.
msgSuccess
(
"
执行成功
"
)
;
}).
catch
(()
=>
{})
;
this
.
$modal
.
msgSuccess
(
"
执行成功
"
)
}).
catch
(()
=>
{})
},
/** 任务详细信息 */
handleView
(
row
)
{
getJob
(
row
.
jobId
).
then
(
response
=>
{
this
.
form
=
response
.
data
;
this
.
openView
=
true
;
})
;
this
.
form
=
response
.
data
this
.
openView
=
true
})
},
/** cron表达式按钮操作 */
handleShowCron
()
{
this
.
expression
=
this
.
form
.
cronExpression
;
this
.
openCron
=
true
;
this
.
expression
=
this
.
form
.
cronExpression
this
.
openCron
=
true
},
/** 确定后回传值 */
crontabFill
(
value
)
{
this
.
form
.
cronExpression
=
value
;
this
.
form
.
cronExpression
=
value
},
/** 任务日志列表查询 */
handleJobLog
(
row
)
{
const
jobId
=
row
.
jobId
||
0
;
const
jobId
=
row
.
jobId
||
0
this
.
$router
.
push
(
'
/monitor/job-log/index/
'
+
jobId
)
},
/** 新增按钮操作 */
handleAdd
()
{
this
.
reset
()
;
this
.
open
=
true
;
this
.
title
=
"
添加任务
"
;
this
.
reset
()
this
.
open
=
true
this
.
title
=
"
添加任务
"
},
/** 修改按钮操作 */
handleUpdate
(
row
)
{
this
.
reset
()
;
const
jobId
=
row
.
jobId
||
this
.
ids
;
this
.
reset
()
const
jobId
=
row
.
jobId
||
this
.
ids
getJob
(
jobId
).
then
(
response
=>
{
this
.
form
=
response
.
data
;
this
.
open
=
true
;
this
.
title
=
"
修改任务
"
;
})
;
this
.
form
=
response
.
data
this
.
open
=
true
this
.
title
=
"
修改任务
"
})
},
/** 提交按钮 */
submitForm
:
function
()
{
...
...
@@ -478,29 +478,29 @@ export default {
if
(
valid
)
{
if
(
this
.
form
.
jobId
!=
undefined
)
{
updateJob
(
this
.
form
).
then
(
response
=>
{
this
.
$modal
.
msgSuccess
(
"
修改成功
"
)
;
this
.
open
=
false
;
this
.
getList
()
;
})
;
this
.
$modal
.
msgSuccess
(
"
修改成功
"
)
this
.
open
=
false
this
.
getList
()
})
}
else
{
addJob
(
this
.
form
).
then
(
response
=>
{
this
.
$modal
.
msgSuccess
(
"
新增成功
"
)
;
this
.
open
=
false
;
this
.
getList
()
;
})
;
this
.
$modal
.
msgSuccess
(
"
新增成功
"
)
this
.
open
=
false
this
.
getList
()
})
}
}
})
;
})
},
/** 删除按钮操作 */
handleDelete
(
row
)
{
const
jobIds
=
row
.
jobId
||
this
.
ids
;
const
jobIds
=
row
.
jobId
||
this
.
ids
this
.
$modal
.
confirm
(
'
是否确认删除定时任务编号为"
'
+
jobIds
+
'
"的数据项?
'
).
then
(
function
()
{
return
delJob
(
jobIds
)
;
return
delJob
(
jobIds
)
}).
then
(()
=>
{
this
.
getList
()
;
this
.
$modal
.
msgSuccess
(
"
删除成功
"
)
;
}).
catch
(()
=>
{})
;
this
.
getList
()
this
.
$modal
.
msgSuccess
(
"
删除成功
"
)
}).
catch
(()
=>
{})
},
/** 导出按钮操作 */
handleExport
()
{
...
...
@@ -509,5 +509,5 @@ export default {
},
`job_
${
new
Date
().
getTime
()}
.xlsx`
)
}
}
}
;
}
</
script
>
ruoyi-ui/src/views/monitor/job/log.vue
View file @
38ed092d
...
...
@@ -180,8 +180,8 @@
</template>
<
script
>
import
{
getJob
}
from
"
@/api/monitor/job
"
;
import
{
listJobLog
,
delJobLog
,
cleanJobLog
}
from
"
@/api/monitor/jobLog
"
;
import
{
getJob
}
from
"
@/api/monitor/job
"
import
{
listJobLog
,
delJobLog
,
cleanJobLog
}
from
"
@/api/monitor/jobLog
"
export
default
{
name
:
"
JobLog
"
,
...
...
@@ -214,75 +214,75 @@ export default {
jobGroup
:
undefined
,
status
:
undefined
}
}
;
}
},
created
()
{
const
jobId
=
this
.
$route
.
params
&&
this
.
$route
.
params
.
jobId
;
const
jobId
=
this
.
$route
.
params
&&
this
.
$route
.
params
.
jobId
if
(
jobId
!==
undefined
&&
jobId
!=
0
)
{
getJob
(
jobId
).
then
(
response
=>
{
this
.
queryParams
.
jobName
=
response
.
data
.
jobName
;
this
.
queryParams
.
jobGroup
=
response
.
data
.
jobGroup
;
this
.
getList
()
;
})
;
this
.
queryParams
.
jobName
=
response
.
data
.
jobName
this
.
queryParams
.
jobGroup
=
response
.
data
.
jobGroup
this
.
getList
()
})
}
else
{
this
.
getList
()
;
this
.
getList
()
}
},
methods
:
{
/** 查询调度日志列表 */
getList
()
{
this
.
loading
=
true
;
this
.
loading
=
true
listJobLog
(
this
.
addDateRange
(
this
.
queryParams
,
this
.
dateRange
)).
then
(
response
=>
{
this
.
jobLogList
=
response
.
rows
;
this
.
total
=
response
.
total
;
this
.
loading
=
false
;
this
.
jobLogList
=
response
.
rows
this
.
total
=
response
.
total
this
.
loading
=
false
}
)
;
)
},
// 返回按钮
handleClose
()
{
const
obj
=
{
path
:
"
/monitor/job
"
}
;
this
.
$tab
.
closeOpenPage
(
obj
)
;
const
obj
=
{
path
:
"
/monitor/job
"
}
this
.
$tab
.
closeOpenPage
(
obj
)
},
/** 搜索按钮操作 */
handleQuery
()
{
this
.
queryParams
.
pageNum
=
1
;
this
.
getList
()
;
this
.
queryParams
.
pageNum
=
1
this
.
getList
()
},
/** 重置按钮操作 */
resetQuery
()
{
this
.
dateRange
=
[]
;
this
.
resetForm
(
"
queryForm
"
)
;
this
.
handleQuery
()
;
this
.
dateRange
=
[]
this
.
resetForm
(
"
queryForm
"
)
this
.
handleQuery
()
},
// 多选框选中数据
handleSelectionChange
(
selection
)
{
this
.
ids
=
selection
.
map
(
item
=>
item
.
jobLogId
)
;
this
.
multiple
=
!
selection
.
length
;
this
.
ids
=
selection
.
map
(
item
=>
item
.
jobLogId
)
this
.
multiple
=
!
selection
.
length
},
/** 详细按钮操作 */
handleView
(
row
)
{
this
.
open
=
true
;
this
.
form
=
row
;
this
.
open
=
true
this
.
form
=
row
},
/** 删除按钮操作 */
handleDelete
(
row
)
{
const
jobLogIds
=
this
.
ids
;
const
jobLogIds
=
this
.
ids
this
.
$modal
.
confirm
(
'
是否确认删除调度日志编号为"
'
+
jobLogIds
+
'
"的数据项?
'
).
then
(
function
()
{
return
delJobLog
(
jobLogIds
)
;
return
delJobLog
(
jobLogIds
)
}).
then
(()
=>
{
this
.
getList
()
;
this
.
$modal
.
msgSuccess
(
"
删除成功
"
)
;
}).
catch
(()
=>
{})
;
this
.
getList
()
this
.
$modal
.
msgSuccess
(
"
删除成功
"
)
}).
catch
(()
=>
{})
},
/** 清空按钮操作 */
handleClean
()
{
this
.
$modal
.
confirm
(
'
是否确认清空所有调度日志数据项?
'
).
then
(
function
()
{
return
cleanJobLog
()
;
return
cleanJobLog
()
}).
then
(()
=>
{
this
.
getList
()
;
this
.
$modal
.
msgSuccess
(
"
清空成功
"
)
;
}).
catch
(()
=>
{})
;
this
.
getList
()
this
.
$modal
.
msgSuccess
(
"
清空成功
"
)
}).
catch
(()
=>
{})
},
/** 导出按钮操作 */
handleExport
()
{
...
...
@@ -291,5 +291,5 @@ export default {
},
`log_
${
new
Date
().
getTime
()}
.xlsx`
)
}
}
}
;
}
</
script
>
ruoyi-ui/src/views/monitor/logininfor/index.vue
View file @
38ed092d
...
...
@@ -130,7 +130,7 @@
</template>
<
script
>
import
{
list
,
delLogininfor
,
cleanLogininfor
,
unlockLogininfor
}
from
"
@/api/monitor/logininfor
"
;
import
{
list
,
delLogininfor
,
cleanLogininfor
,
unlockLogininfor
}
from
"
@/api/monitor/logininfor
"
export
default
{
name
:
"
Logininfor
"
,
...
...
@@ -165,32 +165,32 @@ export default {
userName
:
undefined
,
status
:
undefined
}
}
;
}
},
created
()
{
this
.
getList
()
;
this
.
getList
()
},
methods
:
{
/** 查询登录日志列表 */
getList
()
{
this
.
loading
=
true
;
this
.
loading
=
true
list
(
this
.
addDateRange
(
this
.
queryParams
,
this
.
dateRange
)).
then
(
response
=>
{
this
.
list
=
response
.
rows
;
this
.
total
=
response
.
total
;
this
.
loading
=
false
;
this
.
list
=
response
.
rows
this
.
total
=
response
.
total
this
.
loading
=
false
}
)
;
)
},
/** 搜索按钮操作 */
handleQuery
()
{
this
.
queryParams
.
pageNum
=
1
;
this
.
getList
()
;
this
.
queryParams
.
pageNum
=
1
this
.
getList
()
},
/** 重置按钮操作 */
resetQuery
()
{
this
.
dateRange
=
[]
;
this
.
resetForm
(
"
queryForm
"
)
;
this
.
queryParams
.
pageNum
=
1
;
this
.
dateRange
=
[]
this
.
resetForm
(
"
queryForm
"
)
this
.
queryParams
.
pageNum
=
1
this
.
$refs
.
tables
.
sort
(
this
.
defaultSort
.
prop
,
this
.
defaultSort
.
order
)
},
/** 多选框选中数据 */
...
...
@@ -198,41 +198,41 @@ export default {
this
.
ids
=
selection
.
map
(
item
=>
item
.
infoId
)
this
.
single
=
selection
.
length
!=
1
this
.
multiple
=
!
selection
.
length
this
.
selectName
=
selection
.
map
(
item
=>
item
.
userName
)
;
this
.
selectName
=
selection
.
map
(
item
=>
item
.
userName
)
},
/** 排序触发事件 */
handleSortChange
(
column
,
prop
,
order
)
{
this
.
queryParams
.
orderByColumn
=
column
.
prop
;
this
.
queryParams
.
isAsc
=
column
.
order
;
this
.
getList
()
;
this
.
queryParams
.
orderByColumn
=
column
.
prop
this
.
queryParams
.
isAsc
=
column
.
order
this
.
getList
()
},
/** 删除按钮操作 */
handleDelete
(
row
)
{
const
infoIds
=
row
.
infoId
||
this
.
ids
;
const
infoIds
=
row
.
infoId
||
this
.
ids
this
.
$modal
.
confirm
(
'
是否确认删除访问编号为"
'
+
infoIds
+
'
"的数据项?
'
).
then
(
function
()
{
return
delLogininfor
(
infoIds
)
;
return
delLogininfor
(
infoIds
)
}).
then
(()
=>
{
this
.
getList
()
;
this
.
$modal
.
msgSuccess
(
"
删除成功
"
)
;
}).
catch
(()
=>
{})
;
this
.
getList
()
this
.
$modal
.
msgSuccess
(
"
删除成功
"
)
}).
catch
(()
=>
{})
},
/** 清空按钮操作 */
handleClean
()
{
this
.
$modal
.
confirm
(
'
是否确认清空所有登录日志数据项?
'
).
then
(
function
()
{
return
cleanLogininfor
()
;
return
cleanLogininfor
()
}).
then
(()
=>
{
this
.
getList
()
;
this
.
$modal
.
msgSuccess
(
"
清空成功
"
)
;
}).
catch
(()
=>
{})
;
this
.
getList
()
this
.
$modal
.
msgSuccess
(
"
清空成功
"
)
}).
catch
(()
=>
{})
},
/** 解锁按钮操作 */
handleUnlock
()
{
const
username
=
this
.
selectName
;
const
username
=
this
.
selectName
this
.
$modal
.
confirm
(
'
是否确认解锁用户"
'
+
username
+
'
"数据项?
'
).
then
(
function
()
{
return
unlockLogininfor
(
username
)
;
return
unlockLogininfor
(
username
)
}).
then
(()
=>
{
this
.
$modal
.
msgSuccess
(
"
用户
"
+
username
+
"
解锁成功
"
)
;
}).
catch
(()
=>
{})
;
this
.
$modal
.
msgSuccess
(
"
用户
"
+
username
+
"
解锁成功
"
)
}).
catch
(()
=>
{})
},
/** 导出按钮操作 */
handleExport
()
{
...
...
@@ -241,6 +241,6 @@ export default {
},
`logininfor_
${
new
Date
().
getTime
()}
.xlsx`
)
}
}
}
;
}
</
script
>
ruoyi-ui/src/views/monitor/online/index.vue
View file @
38ed092d
...
...
@@ -63,7 +63,7 @@
</template>
<
script
>
import
{
list
,
forceLogout
}
from
"
@/api/monitor/online
"
;
import
{
list
,
forceLogout
}
from
"
@/api/monitor/online
"
export
default
{
name
:
"
Online
"
,
...
...
@@ -82,41 +82,41 @@ export default {
ipaddr
:
undefined
,
userName
:
undefined
}
}
;
}
},
created
()
{
this
.
getList
()
;
this
.
getList
()
},
methods
:
{
/** 查询登录日志列表 */
getList
()
{
this
.
loading
=
true
;
this
.
loading
=
true
list
(
this
.
queryParams
).
then
(
response
=>
{
this
.
list
=
response
.
rows
;
this
.
total
=
response
.
total
;
this
.
loading
=
false
;
})
;
this
.
list
=
response
.
rows
this
.
total
=
response
.
total
this
.
loading
=
false
})
},
/** 搜索按钮操作 */
handleQuery
()
{
this
.
pageNum
=
1
;
this
.
getList
()
;
this
.
pageNum
=
1
this
.
getList
()
},
/** 重置按钮操作 */
resetQuery
()
{
this
.
resetForm
(
"
queryForm
"
)
;
this
.
handleQuery
()
;
this
.
resetForm
(
"
queryForm
"
)
this
.
handleQuery
()
},
/** 强退按钮操作 */
handleForceLogout
(
row
)
{
this
.
$modal
.
confirm
(
'
是否确认强退名称为"
'
+
row
.
userName
+
'
"的用户?
'
).
then
(
function
()
{
return
forceLogout
(
row
.
tokenId
)
;
return
forceLogout
(
row
.
tokenId
)
}).
then
(()
=>
{
this
.
getList
()
;
this
.
$modal
.
msgSuccess
(
"
强退成功
"
)
;
}).
catch
(()
=>
{})
;
this
.
getList
()
this
.
$modal
.
msgSuccess
(
"
强退成功
"
)
}).
catch
(()
=>
{})
}
}
}
;
}
</
script
>
ruoyi-ui/src/views/monitor/operlog/index.vue
View file @
38ed092d
...
...
@@ -207,7 +207,7 @@
</template>
<
script
>
import
{
list
,
delOperlog
,
cleanOperlog
}
from
"
@/api/monitor/operlog
"
;
import
{
list
,
delOperlog
,
cleanOperlog
}
from
"
@/api/monitor/operlog
"
export
default
{
name
:
"
Operlog
"
,
...
...
@@ -244,36 +244,36 @@ export default {
businessType
:
undefined
,
status
:
undefined
}
}
;
}
},
created
()
{
this
.
getList
()
;
this
.
getList
()
},
methods
:
{
/** 查询登录日志 */
getList
()
{
this
.
loading
=
true
;
this
.
loading
=
true
list
(
this
.
addDateRange
(
this
.
queryParams
,
this
.
dateRange
)).
then
(
response
=>
{
this
.
list
=
response
.
rows
;
this
.
total
=
response
.
total
;
this
.
loading
=
false
;
this
.
list
=
response
.
rows
this
.
total
=
response
.
total
this
.
loading
=
false
}
)
;
)
},
// 操作日志类型字典翻译
typeFormat
(
row
,
column
)
{
return
this
.
selectDictLabel
(
this
.
dict
.
type
.
sys_oper_type
,
row
.
businessType
)
;
return
this
.
selectDictLabel
(
this
.
dict
.
type
.
sys_oper_type
,
row
.
businessType
)
},
/** 搜索按钮操作 */
handleQuery
()
{
this
.
queryParams
.
pageNum
=
1
;
this
.
getList
()
;
this
.
queryParams
.
pageNum
=
1
this
.
getList
()
},
/** 重置按钮操作 */
resetQuery
()
{
this
.
dateRange
=
[]
;
this
.
resetForm
(
"
queryForm
"
)
;
this
.
queryParams
.
pageNum
=
1
;
this
.
dateRange
=
[]
this
.
resetForm
(
"
queryForm
"
)
this
.
queryParams
.
pageNum
=
1
this
.
$refs
.
tables
.
sort
(
this
.
defaultSort
.
prop
,
this
.
defaultSort
.
order
)
},
/** 多选框选中数据 */
...
...
@@ -283,33 +283,33 @@ export default {
},
/** 排序触发事件 */
handleSortChange
(
column
,
prop
,
order
)
{
this
.
queryParams
.
orderByColumn
=
column
.
prop
;
this
.
queryParams
.
isAsc
=
column
.
order
;
this
.
getList
()
;
this
.
queryParams
.
orderByColumn
=
column
.
prop
this
.
queryParams
.
isAsc
=
column
.
order
this
.
getList
()
},
/** 详细按钮操作 */
handleView
(
row
)
{
this
.
open
=
true
;
this
.
form
=
row
;
this
.
open
=
true
this
.
form
=
row
},
/** 删除按钮操作 */
handleDelete
(
row
)
{
const
operIds
=
row
.
operId
||
this
.
ids
;
const
operIds
=
row
.
operId
||
this
.
ids
this
.
$modal
.
confirm
(
'
是否确认删除日志编号为"
'
+
operIds
+
'
"的数据项?
'
).
then
(
function
()
{
return
delOperlog
(
operIds
)
;
return
delOperlog
(
operIds
)
}).
then
(()
=>
{
this
.
getList
()
;
this
.
$modal
.
msgSuccess
(
"
删除成功
"
)
;
}).
catch
(()
=>
{})
;
this
.
getList
()
this
.
$modal
.
msgSuccess
(
"
删除成功
"
)
}).
catch
(()
=>
{})
},
/** 清空按钮操作 */
handleClean
()
{
this
.
$modal
.
confirm
(
'
是否确认清空所有操作日志数据项?
'
).
then
(
function
()
{
return
cleanOperlog
()
;
return
cleanOperlog
()
}).
then
(()
=>
{
this
.
getList
()
;
this
.
$modal
.
msgSuccess
(
"
清空成功
"
)
;
}).
catch
(()
=>
{})
;
this
.
getList
()
this
.
$modal
.
msgSuccess
(
"
清空成功
"
)
}).
catch
(()
=>
{})
},
/** 导出按钮操作 */
handleExport
()
{
...
...
@@ -318,6 +318,6 @@ export default {
},
`operlog_
${
new
Date
().
getTime
()}
.xlsx`
)
}
}
}
;
}
</
script
>
ruoyi-ui/src/views/monitor/server/index.vue
View file @
38ed092d
...
...
@@ -176,7 +176,7 @@
</
template
>
<
script
>
import
{
getServer
}
from
"
@/api/monitor/server
"
;
import
{
getServer
}
from
"
@/api/monitor/server
"
export
default
{
name
:
"
Server
"
,
...
...
@@ -184,24 +184,24 @@ export default {
return
{
// 服务器信息
server
:
[]
}
;
}
},
created
()
{
this
.
getList
()
;
this
.
openLoading
()
;
this
.
getList
()
this
.
openLoading
()
},
methods
:
{
/** 查询服务器信息 */
getList
()
{
getServer
().
then
(
response
=>
{
this
.
server
=
response
.
data
;
this
.
$modal
.
closeLoading
()
;
})
;
this
.
server
=
response
.
data
this
.
$modal
.
closeLoading
()
})
},
// 打开加载层
openLoading
()
{
this
.
$modal
.
loading
(
"
正在加载服务监控数据,请稍候!
"
)
;
this
.
$modal
.
loading
(
"
正在加载服务监控数据,请稍候!
"
)
}
}
}
;
}
</
script
>
ruoyi-ui/src/views/register.vue
View file @
38ed092d
...
...
@@ -67,18 +67,18 @@
</
template
>
<
script
>
import
{
getCodeImg
,
register
}
from
"
@/api/login
"
;
import
{
getCodeImg
,
register
}
from
"
@/api/login
"
export
default
{
name
:
"
Register
"
,
data
()
{
const
equalToPassword
=
(
rule
,
value
,
callback
)
=>
{
if
(
this
.
registerForm
.
password
!==
value
)
{
callback
(
new
Error
(
"
两次输入的密码不一致
"
))
;
callback
(
new
Error
(
"
两次输入的密码不一致
"
))
}
else
{
callback
()
;
callback
()
}
}
;
}
return
{
title
:
process
.
env
.
VUE_APP_TITLE
,
codeUrl
:
""
,
...
...
@@ -107,44 +107,44 @@ export default {
},
loading
:
false
,
captchaEnabled
:
true
}
;
}
},
created
()
{
this
.
getCode
()
;
this
.
getCode
()
},
methods
:
{
getCode
()
{
getCodeImg
().
then
(
res
=>
{
this
.
captchaEnabled
=
res
.
captchaEnabled
===
undefined
?
true
:
res
.
captchaEnabled
;
this
.
captchaEnabled
=
res
.
captchaEnabled
===
undefined
?
true
:
res
.
captchaEnabled
if
(
this
.
captchaEnabled
)
{
this
.
codeUrl
=
"
data:image/gif;base64,
"
+
res
.
img
;
this
.
registerForm
.
uuid
=
res
.
uuid
;
this
.
codeUrl
=
"
data:image/gif;base64,
"
+
res
.
img
this
.
registerForm
.
uuid
=
res
.
uuid
}
})
;
})
},
handleRegister
()
{
this
.
$refs
.
registerForm
.
validate
(
valid
=>
{
if
(
valid
)
{
this
.
loading
=
true
;
this
.
loading
=
true
register
(
this
.
registerForm
).
then
(
res
=>
{
const
username
=
this
.
registerForm
.
username
;
const
username
=
this
.
registerForm
.
username
this
.
$alert
(
"
<font color='red'>恭喜你,您的账号
"
+
username
+
"
注册成功!</font>
"
,
'
系统提示
'
,
{
dangerouslyUseHTMLString
:
true
,
type
:
'
success
'
}).
then
(()
=>
{
this
.
$router
.
push
(
"
/login
"
)
;
}).
catch
(()
=>
{})
;
this
.
$router
.
push
(
"
/login
"
)
}).
catch
(()
=>
{})
}).
catch
(()
=>
{
this
.
loading
=
false
;
this
.
loading
=
false
if
(
this
.
captchaEnabled
)
{
this
.
getCode
()
;
this
.
getCode
()
}
})
}
})
;
})
}
}
}
;
}
</
script
>
<
style
rel=
"stylesheet/scss"
lang=
"scss"
>
...
...
ruoyi-ui/src/views/system/config/index.vue
View file @
38ed092d
...
...
@@ -181,7 +181,7 @@
</template>
<
script
>
import
{
listConfig
,
getConfig
,
delConfig
,
addConfig
,
updateConfig
,
refreshCache
}
from
"
@/api/system/config
"
;
import
{
listConfig
,
getConfig
,
delConfig
,
addConfig
,
updateConfig
,
refreshCache
}
from
"
@/api/system/config
"
export
default
{
name
:
"
Config
"
,
...
...
@@ -230,26 +230,26 @@ export default {
{
required
:
true
,
message
:
"
参数键值不能为空
"
,
trigger
:
"
blur
"
}
]
}
}
;
}
},
created
()
{
this
.
getList
()
;
this
.
getList
()
},
methods
:
{
/** 查询参数列表 */
getList
()
{
this
.
loading
=
true
;
this
.
loading
=
true
listConfig
(
this
.
addDateRange
(
this
.
queryParams
,
this
.
dateRange
)).
then
(
response
=>
{
this
.
configList
=
response
.
rows
;
this
.
total
=
response
.
total
;
this
.
loading
=
false
;
this
.
configList
=
response
.
rows
this
.
total
=
response
.
total
this
.
loading
=
false
}
)
;
)
},
// 取消按钮
cancel
()
{
this
.
open
=
false
;
this
.
reset
()
;
this
.
open
=
false
this
.
reset
()
},
// 表单重置
reset
()
{
...
...
@@ -260,25 +260,25 @@ export default {
configValue
:
undefined
,
configType
:
"
Y
"
,
remark
:
undefined
}
;
this
.
resetForm
(
"
form
"
)
;
}
this
.
resetForm
(
"
form
"
)
},
/** 搜索按钮操作 */
handleQuery
()
{
this
.
queryParams
.
pageNum
=
1
;
this
.
getList
()
;
this
.
queryParams
.
pageNum
=
1
this
.
getList
()
},
/** 重置按钮操作 */
resetQuery
()
{
this
.
dateRange
=
[]
;
this
.
resetForm
(
"
queryForm
"
)
;
this
.
handleQuery
()
;
this
.
dateRange
=
[]
this
.
resetForm
(
"
queryForm
"
)
this
.
handleQuery
()
},
/** 新增按钮操作 */
handleAdd
()
{
this
.
reset
()
;
this
.
open
=
true
;
this
.
title
=
"
添加参数
"
;
this
.
reset
()
this
.
open
=
true
this
.
title
=
"
添加参数
"
},
// 多选框选中数据
handleSelectionChange
(
selection
)
{
...
...
@@ -288,13 +288,13 @@ export default {
},
/** 修改按钮操作 */
handleUpdate
(
row
)
{
this
.
reset
()
;
this
.
reset
()
const
configId
=
row
.
configId
||
this
.
ids
getConfig
(
configId
).
then
(
response
=>
{
this
.
form
=
response
.
data
;
this
.
open
=
true
;
this
.
title
=
"
修改参数
"
;
})
;
this
.
form
=
response
.
data
this
.
open
=
true
this
.
title
=
"
修改参数
"
})
},
/** 提交按钮 */
submitForm
:
function
()
{
...
...
@@ -302,29 +302,29 @@ export default {
if
(
valid
)
{
if
(
this
.
form
.
configId
!=
undefined
)
{
updateConfig
(
this
.
form
).
then
(
response
=>
{
this
.
$modal
.
msgSuccess
(
"
修改成功
"
)
;
this
.
open
=
false
;
this
.
getList
()
;
})
;
this
.
$modal
.
msgSuccess
(
"
修改成功
"
)
this
.
open
=
false
this
.
getList
()
})
}
else
{
addConfig
(
this
.
form
).
then
(
response
=>
{
this
.
$modal
.
msgSuccess
(
"
新增成功
"
)
;
this
.
open
=
false
;
this
.
getList
()
;
})
;
this
.
$modal
.
msgSuccess
(
"
新增成功
"
)
this
.
open
=
false
this
.
getList
()
})
}
}
})
;
})
},
/** 删除按钮操作 */
handleDelete
(
row
)
{
const
configIds
=
row
.
configId
||
this
.
ids
;
const
configIds
=
row
.
configId
||
this
.
ids
this
.
$modal
.
confirm
(
'
是否确认删除参数编号为"
'
+
configIds
+
'
"的数据项?
'
).
then
(
function
()
{
return
delConfig
(
configIds
);
}).
then
(()
=>
{
this
.
getList
();
this
.
$modal
.
msgSuccess
(
"
删除成功
"
);
}).
catch
(()
=>
{});
return
delConfig
(
configIds
)
}).
then
(()
=>
{
this
.
getList
()
this
.
$modal
.
msgSuccess
(
"
删除成功
"
)
}).
catch
(()
=>
{})
},
/** 导出按钮操作 */
handleExport
()
{
...
...
@@ -335,9 +335,9 @@ export default {
/** 刷新缓存按钮操作 */
handleRefreshCache
()
{
refreshCache
().
then
(()
=>
{
this
.
$modal
.
msgSuccess
(
"
刷新成功
"
)
;
})
;
this
.
$modal
.
msgSuccess
(
"
刷新成功
"
)
})
}
}
}
;
}
</
script
>
ruoyi-ui/src/views/system/dept/index.vue
View file @
38ed092d
...
...
@@ -158,9 +158,9 @@
</template>
<
script
>
import
{
listDept
,
getDept
,
delDept
,
addDept
,
updateDept
,
listDeptExcludeChild
}
from
"
@/api/system/dept
"
;
import
Treeselect
from
"
@riophae/vue-treeselect
"
;
import
"
@riophae/vue-treeselect/dist/vue-treeselect.css
"
;
import
{
listDept
,
getDept
,
delDept
,
addDept
,
updateDept
,
listDeptExcludeChild
}
from
"
@/api/system/dept
"
import
Treeselect
from
"
@riophae/vue-treeselect
"
import
"
@riophae/vue-treeselect/dist/vue-treeselect.css
"
export
default
{
name
:
"
Dept
"
,
...
...
@@ -217,35 +217,35 @@ export default {
}
]
}
}
;
}
},
created
()
{
this
.
getList
()
;
this
.
getList
()
},
methods
:
{
/** 查询部门列表 */
getList
()
{
this
.
loading
=
true
;
this
.
loading
=
true
listDept
(
this
.
queryParams
).
then
(
response
=>
{
this
.
deptList
=
this
.
handleTree
(
response
.
data
,
"
deptId
"
)
;
this
.
loading
=
false
;
})
;
this
.
deptList
=
this
.
handleTree
(
response
.
data
,
"
deptId
"
)
this
.
loading
=
false
})
},
/** 转换部门数据结构 */
normalizer
(
node
)
{
if
(
node
.
children
&&
!
node
.
children
.
length
)
{
delete
node
.
children
;
delete
node
.
children
}
return
{
id
:
node
.
deptId
,
label
:
node
.
deptName
,
children
:
node
.
children
}
;
}
},
// 取消按钮
cancel
()
{
this
.
open
=
false
;
this
.
reset
()
;
this
.
open
=
false
this
.
reset
()
},
// 表单重置
reset
()
{
...
...
@@ -258,53 +258,53 @@ export default {
phone
:
undefined
,
email
:
undefined
,
status
:
"
0
"
}
;
this
.
resetForm
(
"
form
"
)
;
}
this
.
resetForm
(
"
form
"
)
},
/** 搜索按钮操作 */
handleQuery
()
{
this
.
getList
()
;
this
.
getList
()
},
/** 重置按钮操作 */
resetQuery
()
{
this
.
resetForm
(
"
queryForm
"
)
;
this
.
handleQuery
()
;
this
.
resetForm
(
"
queryForm
"
)
this
.
handleQuery
()
},
/** 新增按钮操作 */
handleAdd
(
row
)
{
this
.
reset
()
;
this
.
reset
()
if
(
row
!=
undefined
)
{
this
.
form
.
parentId
=
row
.
deptId
;
this
.
form
.
parentId
=
row
.
deptId
}
this
.
open
=
true
;
this
.
title
=
"
添加部门
"
;
this
.
open
=
true
this
.
title
=
"
添加部门
"
listDept
().
then
(
response
=>
{
this
.
deptOptions
=
this
.
handleTree
(
response
.
data
,
"
deptId
"
)
;
})
;
this
.
deptOptions
=
this
.
handleTree
(
response
.
data
,
"
deptId
"
)
})
},
/** 展开/折叠操作 */
toggleExpandAll
()
{
this
.
refreshTable
=
false
;
this
.
isExpandAll
=
!
this
.
isExpandAll
;
this
.
refreshTable
=
false
this
.
isExpandAll
=
!
this
.
isExpandAll
this
.
$nextTick
(()
=>
{
this
.
refreshTable
=
true
;
})
;
this
.
refreshTable
=
true
})
},
/** 修改按钮操作 */
handleUpdate
(
row
)
{
this
.
reset
()
;
this
.
reset
()
getDept
(
row
.
deptId
).
then
(
response
=>
{
this
.
form
=
response
.
data
;
this
.
open
=
true
;
this
.
title
=
"
修改部门
"
;
this
.
form
=
response
.
data
this
.
open
=
true
this
.
title
=
"
修改部门
"
listDeptExcludeChild
(
row
.
deptId
).
then
(
response
=>
{
this
.
deptOptions
=
this
.
handleTree
(
response
.
data
,
"
deptId
"
)
;
this
.
deptOptions
=
this
.
handleTree
(
response
.
data
,
"
deptId
"
)
if
(
this
.
deptOptions
.
length
==
0
)
{
const
noResultsOptions
=
{
deptId
:
this
.
form
.
parentId
,
deptName
:
this
.
form
.
parentName
,
children
:
[]
}
;
this
.
deptOptions
.
push
(
noResultsOptions
)
;
const
noResultsOptions
=
{
deptId
:
this
.
form
.
parentId
,
deptName
:
this
.
form
.
parentName
,
children
:
[]
}
this
.
deptOptions
.
push
(
noResultsOptions
)
}
})
;
})
;
})
})
},
/** 提交按钮 */
submitForm
:
function
()
{
...
...
@@ -312,29 +312,29 @@ export default {
if
(
valid
)
{
if
(
this
.
form
.
deptId
!=
undefined
)
{
updateDept
(
this
.
form
).
then
(
response
=>
{
this
.
$modal
.
msgSuccess
(
"
修改成功
"
)
;
this
.
open
=
false
;
this
.
getList
()
;
})
;
this
.
$modal
.
msgSuccess
(
"
修改成功
"
)
this
.
open
=
false
this
.
getList
()
})
}
else
{
addDept
(
this
.
form
).
then
(
response
=>
{
this
.
$modal
.
msgSuccess
(
"
新增成功
"
)
;
this
.
open
=
false
;
this
.
getList
()
;
})
;
this
.
$modal
.
msgSuccess
(
"
新增成功
"
)
this
.
open
=
false
this
.
getList
()
})
}
}
})
;
})
},
/** 删除按钮操作 */
handleDelete
(
row
)
{
this
.
$modal
.
confirm
(
'
是否确认删除名称为"
'
+
row
.
deptName
+
'
"的数据项?
'
).
then
(
function
()
{
return
delDept
(
row
.
deptId
)
;
return
delDept
(
row
.
deptId
)
}).
then
(()
=>
{
this
.
getList
()
;
this
.
$modal
.
msgSuccess
(
"
删除成功
"
)
;
}).
catch
(()
=>
{})
;
this
.
getList
()
this
.
$modal
.
msgSuccess
(
"
删除成功
"
)
}).
catch
(()
=>
{})
}
}
}
;
}
</
script
>
ruoyi-ui/src/views/system/dict/data.vue
View file @
38ed092d
...
...
@@ -190,8 +190,8 @@
</template>
<
script
>
import
{
listData
,
getData
,
delData
,
addData
,
updateData
}
from
"
@/api/system/dict/data
"
;
import
{
optionselect
as
getDictOptionselect
,
getType
}
from
"
@/api/system/dict/type
"
;
import
{
listData
,
getData
,
delData
,
addData
,
updateData
}
from
"
@/api/system/dict/data
"
import
{
optionselect
as
getDictOptionselect
,
getType
}
from
"
@/api/system/dict/type
"
export
default
{
name
:
"
Data
"
,
...
...
@@ -269,41 +269,41 @@ export default {
{
required
:
true
,
message
:
"
数据顺序不能为空
"
,
trigger
:
"
blur
"
}
]
}
}
;
}
},
created
()
{
const
dictId
=
this
.
$route
.
params
&&
this
.
$route
.
params
.
dictId
;
this
.
getType
(
dictId
)
;
this
.
getTypeList
()
;
const
dictId
=
this
.
$route
.
params
&&
this
.
$route
.
params
.
dictId
this
.
getType
(
dictId
)
this
.
getTypeList
()
},
methods
:
{
/** 查询字典类型详细 */
getType
(
dictId
)
{
getType
(
dictId
).
then
(
response
=>
{
this
.
queryParams
.
dictType
=
response
.
data
.
dictType
;
this
.
defaultDictType
=
response
.
data
.
dictType
;
this
.
getList
()
;
})
;
this
.
queryParams
.
dictType
=
response
.
data
.
dictType
this
.
defaultDictType
=
response
.
data
.
dictType
this
.
getList
()
})
},
/** 查询字典类型列表 */
getTypeList
()
{
getDictOptionselect
().
then
(
response
=>
{
this
.
typeOptions
=
response
.
data
;
})
;
this
.
typeOptions
=
response
.
data
})
},
/** 查询字典数据列表 */
getList
()
{
this
.
loading
=
true
;
this
.
loading
=
true
listData
(
this
.
queryParams
).
then
(
response
=>
{
this
.
dataList
=
response
.
rows
;
this
.
total
=
response
.
total
;
this
.
loading
=
false
;
})
;
this
.
dataList
=
response
.
rows
this
.
total
=
response
.
total
this
.
loading
=
false
})
},
// 取消按钮
cancel
()
{
this
.
open
=
false
;
this
.
reset
()
;
this
.
open
=
false
this
.
reset
()
},
// 表单重置
reset
()
{
...
...
@@ -316,31 +316,31 @@ export default {
dictSort
:
0
,
status
:
"
0
"
,
remark
:
undefined
}
;
this
.
resetForm
(
"
form
"
)
;
}
this
.
resetForm
(
"
form
"
)
},
/** 搜索按钮操作 */
handleQuery
()
{
this
.
queryParams
.
pageNum
=
1
;
this
.
getList
()
;
this
.
queryParams
.
pageNum
=
1
this
.
getList
()
},
/** 返回按钮操作 */
handleClose
()
{
const
obj
=
{
path
:
"
/system/dict
"
}
;
this
.
$tab
.
closeOpenPage
(
obj
)
;
const
obj
=
{
path
:
"
/system/dict
"
}
this
.
$tab
.
closeOpenPage
(
obj
)
},
/** 重置按钮操作 */
resetQuery
()
{
this
.
resetForm
(
"
queryForm
"
)
;
this
.
queryParams
.
dictType
=
this
.
defaultDictType
;
this
.
handleQuery
()
;
this
.
resetForm
(
"
queryForm
"
)
this
.
queryParams
.
dictType
=
this
.
defaultDictType
this
.
handleQuery
()
},
/** 新增按钮操作 */
handleAdd
()
{
this
.
reset
()
;
this
.
open
=
true
;
this
.
title
=
"
添加字典数据
"
;
this
.
form
.
dictType
=
this
.
queryParams
.
dictType
;
this
.
reset
()
this
.
open
=
true
this
.
title
=
"
添加字典数据
"
this
.
form
.
dictType
=
this
.
queryParams
.
dictType
},
// 多选框选中数据
handleSelectionChange
(
selection
)
{
...
...
@@ -350,13 +350,13 @@ export default {
},
/** 修改按钮操作 */
handleUpdate
(
row
)
{
this
.
reset
()
;
this
.
reset
()
const
dictCode
=
row
.
dictCode
||
this
.
ids
getData
(
dictCode
).
then
(
response
=>
{
this
.
form
=
response
.
data
;
this
.
open
=
true
;
this
.
title
=
"
修改字典数据
"
;
})
;
this
.
form
=
response
.
data
this
.
open
=
true
this
.
title
=
"
修改字典数据
"
})
},
/** 提交按钮 */
submitForm
:
function
()
{
...
...
@@ -364,32 +364,32 @@ export default {
if
(
valid
)
{
if
(
this
.
form
.
dictCode
!=
undefined
)
{
updateData
(
this
.
form
).
then
(
response
=>
{
this
.
$store
.
dispatch
(
'
dict/removeDict
'
,
this
.
queryParams
.
dictType
)
;
this
.
$modal
.
msgSuccess
(
"
修改成功
"
)
;
this
.
open
=
false
;
this
.
getList
()
;
})
;
this
.
$store
.
dispatch
(
'
dict/removeDict
'
,
this
.
queryParams
.
dictType
)
this
.
$modal
.
msgSuccess
(
"
修改成功
"
)
this
.
open
=
false
this
.
getList
()
})
}
else
{
addData
(
this
.
form
).
then
(
response
=>
{
this
.
$store
.
dispatch
(
'
dict/removeDict
'
,
this
.
queryParams
.
dictType
)
;
this
.
$modal
.
msgSuccess
(
"
新增成功
"
)
;
this
.
open
=
false
;
this
.
getList
()
;
})
;
this
.
$store
.
dispatch
(
'
dict/removeDict
'
,
this
.
queryParams
.
dictType
)
this
.
$modal
.
msgSuccess
(
"
新增成功
"
)
this
.
open
=
false
this
.
getList
()
})
}
}
})
;
})
},
/** 删除按钮操作 */
handleDelete
(
row
)
{
const
dictCodes
=
row
.
dictCode
||
this
.
ids
;
const
dictCodes
=
row
.
dictCode
||
this
.
ids
this
.
$modal
.
confirm
(
'
是否确认删除字典编码为"
'
+
dictCodes
+
'
"的数据项?
'
).
then
(
function
()
{
return
delData
(
dictCodes
)
;
return
delData
(
dictCodes
)
}).
then
(()
=>
{
this
.
getList
()
;
this
.
$modal
.
msgSuccess
(
"
删除成功
"
)
;
this
.
$store
.
dispatch
(
'
dict/removeDict
'
,
this
.
queryParams
.
dictType
)
;
}).
catch
(()
=>
{})
;
this
.
getList
()
this
.
$modal
.
msgSuccess
(
"
删除成功
"
)
this
.
$store
.
dispatch
(
'
dict/removeDict
'
,
this
.
queryParams
.
dictType
)
}).
catch
(()
=>
{})
},
/** 导出按钮操作 */
handleExport
()
{
...
...
@@ -398,5 +398,5 @@ export default {
},
`data_
${
new
Date
().
getTime
()}
.xlsx`
)
}
}
}
;
}
</
script
>
\ No newline at end of file
ruoyi-ui/src/views/system/dict/index.vue
View file @
38ed092d
...
...
@@ -188,7 +188,7 @@
</template>
<
script
>
import
{
listType
,
getType
,
delType
,
addType
,
updateType
,
refreshCache
}
from
"
@/api/system/dict/type
"
;
import
{
listType
,
getType
,
delType
,
addType
,
updateType
,
refreshCache
}
from
"
@/api/system/dict/type
"
export
default
{
name
:
"
Dict
"
,
...
...
@@ -234,26 +234,26 @@ export default {
{
required
:
true
,
message
:
"
字典类型不能为空
"
,
trigger
:
"
blur
"
}
]
}
}
;
}
},
created
()
{
this
.
getList
()
;
this
.
getList
()
},
methods
:
{
/** 查询字典类型列表 */
getList
()
{
this
.
loading
=
true
;
this
.
loading
=
true
listType
(
this
.
addDateRange
(
this
.
queryParams
,
this
.
dateRange
)).
then
(
response
=>
{
this
.
typeList
=
response
.
rows
;
this
.
total
=
response
.
total
;
this
.
loading
=
false
;
this
.
typeList
=
response
.
rows
this
.
total
=
response
.
total
this
.
loading
=
false
}
)
;
)
},
// 取消按钮
cancel
()
{
this
.
open
=
false
;
this
.
reset
()
;
this
.
open
=
false
this
.
reset
()
},
// 表单重置
reset
()
{
...
...
@@ -263,25 +263,25 @@ export default {
dictType
:
undefined
,
status
:
"
0
"
,
remark
:
undefined
}
;
this
.
resetForm
(
"
form
"
)
;
}
this
.
resetForm
(
"
form
"
)
},
/** 搜索按钮操作 */
handleQuery
()
{
this
.
queryParams
.
pageNum
=
1
;
this
.
getList
()
;
this
.
queryParams
.
pageNum
=
1
this
.
getList
()
},
/** 重置按钮操作 */
resetQuery
()
{
this
.
dateRange
=
[]
;
this
.
resetForm
(
"
queryForm
"
)
;
this
.
handleQuery
()
;
this
.
dateRange
=
[]
this
.
resetForm
(
"
queryForm
"
)
this
.
handleQuery
()
},
/** 新增按钮操作 */
handleAdd
()
{
this
.
reset
()
;
this
.
open
=
true
;
this
.
title
=
"
添加字典类型
"
;
this
.
reset
()
this
.
open
=
true
this
.
title
=
"
添加字典类型
"
},
// 多选框选中数据
handleSelectionChange
(
selection
)
{
...
...
@@ -291,13 +291,13 @@ export default {
},
/** 修改按钮操作 */
handleUpdate
(
row
)
{
this
.
reset
()
;
this
.
reset
()
const
dictId
=
row
.
dictId
||
this
.
ids
getType
(
dictId
).
then
(
response
=>
{
this
.
form
=
response
.
data
;
this
.
open
=
true
;
this
.
title
=
"
修改字典类型
"
;
})
;
this
.
form
=
response
.
data
this
.
open
=
true
this
.
title
=
"
修改字典类型
"
})
},
/** 提交按钮 */
submitForm
:
function
()
{
...
...
@@ -305,29 +305,29 @@ export default {
if
(
valid
)
{
if
(
this
.
form
.
dictId
!=
undefined
)
{
updateType
(
this
.
form
).
then
(
response
=>
{
this
.
$modal
.
msgSuccess
(
"
修改成功
"
)
;
this
.
open
=
false
;
this
.
getList
()
;
})
;
this
.
$modal
.
msgSuccess
(
"
修改成功
"
)
this
.
open
=
false
this
.
getList
()
})
}
else
{
addType
(
this
.
form
).
then
(
response
=>
{
this
.
$modal
.
msgSuccess
(
"
新增成功
"
)
;
this
.
open
=
false
;
this
.
getList
()
;
})
;
this
.
$modal
.
msgSuccess
(
"
新增成功
"
)
this
.
open
=
false
this
.
getList
()
})
}
}
})
;
})
},
/** 删除按钮操作 */
handleDelete
(
row
)
{
const
dictIds
=
row
.
dictId
||
this
.
ids
;
const
dictIds
=
row
.
dictId
||
this
.
ids
this
.
$modal
.
confirm
(
'
是否确认删除字典编号为"
'
+
dictIds
+
'
"的数据项?
'
).
then
(
function
()
{
return
delType
(
dictIds
)
;
return
delType
(
dictIds
)
}).
then
(()
=>
{
this
.
getList
()
;
this
.
$modal
.
msgSuccess
(
"
删除成功
"
)
;
}).
catch
(()
=>
{})
;
this
.
getList
()
this
.
$modal
.
msgSuccess
(
"
删除成功
"
)
}).
catch
(()
=>
{})
},
/** 导出按钮操作 */
handleExport
()
{
...
...
@@ -338,10 +338,10 @@ export default {
/** 刷新缓存按钮操作 */
handleRefreshCache
()
{
refreshCache
().
then
(()
=>
{
this
.
$modal
.
msgSuccess
(
"
刷新成功
"
)
;
this
.
$store
.
dispatch
(
'
dict/cleanDict
'
)
;
})
;
this
.
$modal
.
msgSuccess
(
"
刷新成功
"
)
this
.
$store
.
dispatch
(
'
dict/cleanDict
'
)
})
}
}
}
;
}
</
script
>
\ No newline at end of file
ruoyi-ui/src/views/system/menu/index.vue
View file @
38ed092d
...
...
@@ -299,10 +299,10 @@
</template>
<
script
>
import
{
listMenu
,
getMenu
,
delMenu
,
addMenu
,
updateMenu
}
from
"
@/api/system/menu
"
;
import
Treeselect
from
"
@riophae/vue-treeselect
"
;
import
"
@riophae/vue-treeselect/dist/vue-treeselect.css
"
;
import
IconSelect
from
"
@/components/IconSelect
"
;
import
{
listMenu
,
getMenu
,
delMenu
,
addMenu
,
updateMenu
}
from
"
@/api/system/menu
"
import
Treeselect
from
"
@riophae/vue-treeselect
"
import
"
@riophae/vue-treeselect/dist/vue-treeselect.css
"
import
IconSelect
from
"
@/components/IconSelect
"
export
default
{
name
:
"
Menu
"
,
...
...
@@ -345,48 +345,48 @@ export default {
{
required
:
true
,
message
:
"
路由地址不能为空
"
,
trigger
:
"
blur
"
}
]
}
}
;
}
},
created
()
{
this
.
getList
()
;
this
.
getList
()
},
methods
:
{
// 选择图标
selected
(
name
)
{
this
.
form
.
icon
=
name
;
this
.
form
.
icon
=
name
},
/** 查询菜单列表 */
getList
()
{
this
.
loading
=
true
;
this
.
loading
=
true
listMenu
(
this
.
queryParams
).
then
(
response
=>
{
this
.
menuList
=
this
.
handleTree
(
response
.
data
,
"
menuId
"
)
;
this
.
loading
=
false
;
})
;
this
.
menuList
=
this
.
handleTree
(
response
.
data
,
"
menuId
"
)
this
.
loading
=
false
})
},
/** 转换菜单数据结构 */
normalizer
(
node
)
{
if
(
node
.
children
&&
!
node
.
children
.
length
)
{
delete
node
.
children
;
delete
node
.
children
}
return
{
id
:
node
.
menuId
,
label
:
node
.
menuName
,
children
:
node
.
children
}
;
}
},
/** 查询菜单下拉树结构 */
getTreeselect
()
{
listMenu
().
then
(
response
=>
{
this
.
menuOptions
=
[]
;
const
menu
=
{
menuId
:
0
,
menuName
:
'
主类目
'
,
children
:
[]
}
;
menu
.
children
=
this
.
handleTree
(
response
.
data
,
"
menuId
"
)
;
this
.
menuOptions
.
push
(
menu
)
;
})
;
this
.
menuOptions
=
[]
const
menu
=
{
menuId
:
0
,
menuName
:
'
主类目
'
,
children
:
[]
}
menu
.
children
=
this
.
handleTree
(
response
.
data
,
"
menuId
"
)
this
.
menuOptions
.
push
(
menu
)
})
},
// 取消按钮
cancel
()
{
this
.
open
=
false
;
this
.
reset
()
;
this
.
open
=
false
this
.
reset
()
},
// 表单重置
reset
()
{
...
...
@@ -401,47 +401,47 @@ export default {
isCache
:
"
0
"
,
visible
:
"
0
"
,
status
:
"
0
"
}
;
this
.
resetForm
(
"
form
"
)
;
}
this
.
resetForm
(
"
form
"
)
},
/** 搜索按钮操作 */
handleQuery
()
{
this
.
getList
()
;
this
.
getList
()
},
/** 重置按钮操作 */
resetQuery
()
{
this
.
resetForm
(
"
queryForm
"
)
;
this
.
handleQuery
()
;
this
.
resetForm
(
"
queryForm
"
)
this
.
handleQuery
()
},
/** 新增按钮操作 */
handleAdd
(
row
)
{
this
.
reset
()
;
this
.
getTreeselect
()
;
this
.
reset
()
this
.
getTreeselect
()
if
(
row
!=
null
&&
row
.
menuId
)
{
this
.
form
.
parentId
=
row
.
menuId
;
this
.
form
.
parentId
=
row
.
menuId
}
else
{
this
.
form
.
parentId
=
0
;
this
.
form
.
parentId
=
0
}
this
.
open
=
true
;
this
.
title
=
"
添加菜单
"
;
this
.
open
=
true
this
.
title
=
"
添加菜单
"
},
/** 展开/折叠操作 */
toggleExpandAll
()
{
this
.
refreshTable
=
false
;
this
.
isExpandAll
=
!
this
.
isExpandAll
;
this
.
refreshTable
=
false
this
.
isExpandAll
=
!
this
.
isExpandAll
this
.
$nextTick
(()
=>
{
this
.
refreshTable
=
true
;
})
;
this
.
refreshTable
=
true
})
},
/** 修改按钮操作 */
handleUpdate
(
row
)
{
this
.
reset
()
;
this
.
getTreeselect
()
;
this
.
reset
()
this
.
getTreeselect
()
getMenu
(
row
.
menuId
).
then
(
response
=>
{
this
.
form
=
response
.
data
;
this
.
open
=
true
;
this
.
title
=
"
修改菜单
"
;
})
;
this
.
form
=
response
.
data
this
.
open
=
true
this
.
title
=
"
修改菜单
"
})
},
/** 提交按钮 */
submitForm
:
function
()
{
...
...
@@ -449,29 +449,29 @@ export default {
if
(
valid
)
{
if
(
this
.
form
.
menuId
!=
undefined
)
{
updateMenu
(
this
.
form
).
then
(
response
=>
{
this
.
$modal
.
msgSuccess
(
"
修改成功
"
)
;
this
.
open
=
false
;
this
.
getList
()
;
})
;
this
.
$modal
.
msgSuccess
(
"
修改成功
"
)
this
.
open
=
false
this
.
getList
()
})
}
else
{
addMenu
(
this
.
form
).
then
(
response
=>
{
this
.
$modal
.
msgSuccess
(
"
新增成功
"
)
;
this
.
open
=
false
;
this
.
getList
()
;
})
;
this
.
$modal
.
msgSuccess
(
"
新增成功
"
)
this
.
open
=
false
this
.
getList
()
})
}
}
})
;
})
},
/** 删除按钮操作 */
handleDelete
(
row
)
{
this
.
$modal
.
confirm
(
'
是否确认删除名称为"
'
+
row
.
menuName
+
'
"的数据项?
'
).
then
(
function
()
{
return
delMenu
(
row
.
menuId
)
;
return
delMenu
(
row
.
menuId
)
}).
then
(()
=>
{
this
.
getList
()
;
this
.
$modal
.
msgSuccess
(
"
删除成功
"
)
;
}).
catch
(()
=>
{})
;
this
.
getList
()
this
.
$modal
.
msgSuccess
(
"
删除成功
"
)
}).
catch
(()
=>
{})
}
}
}
;
}
</
script
>
ruoyi-ui/src/views/system/notice/index.vue
View file @
38ed092d
...
...
@@ -170,7 +170,7 @@
<
/template
>
<
script
>
import
{
listNotice
,
getNotice
,
delNotice
,
addNotice
,
updateNotice
}
from
"
@/api/system/notice
"
;
import
{
listNotice
,
getNotice
,
delNotice
,
addNotice
,
updateNotice
}
from
"
@/api/system/notice
"
export
default
{
name
:
"
Notice
"
,
...
...
@@ -214,25 +214,25 @@ export default {
{
required
:
true
,
message
:
"
公告类型不能为空
"
,
trigger
:
"
change
"
}
]
}
}
;
}
}
,
created
()
{
this
.
getList
()
;
this
.
getList
()
}
,
methods
:
{
/** 查询公告列表 */
getList
()
{
this
.
loading
=
true
;
this
.
loading
=
true
listNotice
(
this
.
queryParams
).
then
(
response
=>
{
this
.
noticeList
=
response
.
rows
;
this
.
total
=
response
.
total
;
this
.
loading
=
false
;
}
)
;
this
.
noticeList
=
response
.
rows
this
.
total
=
response
.
total
this
.
loading
=
false
}
)
}
,
// 取消按钮
cancel
()
{
this
.
open
=
false
;
this
.
reset
()
;
this
.
open
=
false
this
.
reset
()
}
,
// 表单重置
reset
()
{
...
...
@@ -242,18 +242,18 @@ export default {
noticeType
:
undefined
,
noticeContent
:
undefined
,
status
:
"
0
"
}
;
this
.
resetForm
(
"
form
"
)
;
}
this
.
resetForm
(
"
form
"
)
}
,
/** 搜索按钮操作 */
handleQuery
()
{
this
.
queryParams
.
pageNum
=
1
;
this
.
getList
()
;
this
.
queryParams
.
pageNum
=
1
this
.
getList
()
}
,
/** 重置按钮操作 */
resetQuery
()
{
this
.
resetForm
(
"
queryForm
"
)
;
this
.
handleQuery
()
;
this
.
resetForm
(
"
queryForm
"
)
this
.
handleQuery
()
}
,
// 多选框选中数据
handleSelectionChange
(
selection
)
{
...
...
@@ -263,19 +263,19 @@ export default {
}
,
/** 新增按钮操作 */
handleAdd
()
{
this
.
reset
()
;
this
.
open
=
true
;
this
.
title
=
"
添加公告
"
;
this
.
reset
()
this
.
open
=
true
this
.
title
=
"
添加公告
"
}
,
/** 修改按钮操作 */
handleUpdate
(
row
)
{
this
.
reset
()
;
this
.
reset
()
const
noticeId
=
row
.
noticeId
||
this
.
ids
getNotice
(
noticeId
).
then
(
response
=>
{
this
.
form
=
response
.
data
;
this
.
open
=
true
;
this
.
title
=
"
修改公告
"
;
}
)
;
this
.
form
=
response
.
data
this
.
open
=
true
this
.
title
=
"
修改公告
"
}
)
}
,
/** 提交按钮 */
submitForm
:
function
()
{
...
...
@@ -283,30 +283,30 @@ export default {
if
(
valid
)
{
if
(
this
.
form
.
noticeId
!=
undefined
)
{
updateNotice
(
this
.
form
).
then
(
response
=>
{
this
.
$modal
.
msgSuccess
(
"
修改成功
"
)
;
this
.
open
=
false
;
this
.
getList
()
;
}
)
;
this
.
$modal
.
msgSuccess
(
"
修改成功
"
)
this
.
open
=
false
this
.
getList
()
}
)
}
else
{
addNotice
(
this
.
form
).
then
(
response
=>
{
this
.
$modal
.
msgSuccess
(
"
新增成功
"
)
;
this
.
open
=
false
;
this
.
getList
()
;
}
)
;
this
.
$modal
.
msgSuccess
(
"
新增成功
"
)
this
.
open
=
false
this
.
getList
()
}
)
}
}
}
)
;
}
)
}
,
/** 删除按钮操作 */
handleDelete
(
row
)
{
const
noticeIds
=
row
.
noticeId
||
this
.
ids
this
.
$modal
.
confirm
(
'
是否确认删除公告编号为"
'
+
noticeIds
+
'
"的数据项?
'
).
then
(
function
()
{
return
delNotice
(
noticeIds
)
;
return
delNotice
(
noticeIds
)
}
).
then
(()
=>
{
this
.
getList
()
;
this
.
$modal
.
msgSuccess
(
"
删除成功
"
)
;
}
).
catch
(()
=>
{
}
)
;
this
.
getList
()
this
.
$modal
.
msgSuccess
(
"
删除成功
"
)
}
).
catch
(()
=>
{
}
)
}
}
}
;
}
<
/script
>
ruoyi-ui/src/views/system/post/index.vue
View file @
38ed092d
...
...
@@ -157,7 +157,7 @@
</template>
<
script
>
import
{
listPost
,
getPost
,
delPost
,
addPost
,
updatePost
}
from
"
@/api/system/post
"
;
import
{
listPost
,
getPost
,
delPost
,
addPost
,
updatePost
}
from
"
@/api/system/post
"
export
default
{
name
:
"
Post
"
,
...
...
@@ -204,25 +204,25 @@ export default {
{
required
:
true
,
message
:
"
岗位顺序不能为空
"
,
trigger
:
"
blur
"
}
]
}
}
;
}
},
created
()
{
this
.
getList
()
;
this
.
getList
()
},
methods
:
{
/** 查询岗位列表 */
getList
()
{
this
.
loading
=
true
;
this
.
loading
=
true
listPost
(
this
.
queryParams
).
then
(
response
=>
{
this
.
postList
=
response
.
rows
;
this
.
total
=
response
.
total
;
this
.
loading
=
false
;
})
;
this
.
postList
=
response
.
rows
this
.
total
=
response
.
total
this
.
loading
=
false
})
},
// 取消按钮
cancel
()
{
this
.
open
=
false
;
this
.
reset
()
;
this
.
open
=
false
this
.
reset
()
},
// 表单重置
reset
()
{
...
...
@@ -233,18 +233,18 @@ export default {
postSort
:
0
,
status
:
"
0
"
,
remark
:
undefined
}
;
this
.
resetForm
(
"
form
"
)
;
}
this
.
resetForm
(
"
form
"
)
},
/** 搜索按钮操作 */
handleQuery
()
{
this
.
queryParams
.
pageNum
=
1
;
this
.
getList
()
;
this
.
queryParams
.
pageNum
=
1
this
.
getList
()
},
/** 重置按钮操作 */
resetQuery
()
{
this
.
resetForm
(
"
queryForm
"
)
;
this
.
handleQuery
()
;
this
.
resetForm
(
"
queryForm
"
)
this
.
handleQuery
()
},
// 多选框选中数据
handleSelectionChange
(
selection
)
{
...
...
@@ -254,19 +254,19 @@ export default {
},
/** 新增按钮操作 */
handleAdd
()
{
this
.
reset
()
;
this
.
open
=
true
;
this
.
title
=
"
添加岗位
"
;
this
.
reset
()
this
.
open
=
true
this
.
title
=
"
添加岗位
"
},
/** 修改按钮操作 */
handleUpdate
(
row
)
{
this
.
reset
()
;
this
.
reset
()
const
postId
=
row
.
postId
||
this
.
ids
getPost
(
postId
).
then
(
response
=>
{
this
.
form
=
response
.
data
;
this
.
open
=
true
;
this
.
title
=
"
修改岗位
"
;
})
;
this
.
form
=
response
.
data
this
.
open
=
true
this
.
title
=
"
修改岗位
"
})
},
/** 提交按钮 */
submitForm
:
function
()
{
...
...
@@ -274,29 +274,29 @@ export default {
if
(
valid
)
{
if
(
this
.
form
.
postId
!=
undefined
)
{
updatePost
(
this
.
form
).
then
(
response
=>
{
this
.
$modal
.
msgSuccess
(
"
修改成功
"
)
;
this
.
open
=
false
;
this
.
getList
()
;
})
;
this
.
$modal
.
msgSuccess
(
"
修改成功
"
)
this
.
open
=
false
this
.
getList
()
})
}
else
{
addPost
(
this
.
form
).
then
(
response
=>
{
this
.
$modal
.
msgSuccess
(
"
新增成功
"
)
;
this
.
open
=
false
;
this
.
getList
()
;
})
;
this
.
$modal
.
msgSuccess
(
"
新增成功
"
)
this
.
open
=
false
this
.
getList
()
})
}
}
})
;
})
},
/** 删除按钮操作 */
handleDelete
(
row
)
{
const
postIds
=
row
.
postId
||
this
.
ids
;
const
postIds
=
row
.
postId
||
this
.
ids
this
.
$modal
.
confirm
(
'
是否确认删除岗位编号为"
'
+
postIds
+
'
"的数据项?
'
).
then
(
function
()
{
return
delPost
(
postIds
)
;
return
delPost
(
postIds
)
}).
then
(()
=>
{
this
.
getList
()
;
this
.
$modal
.
msgSuccess
(
"
删除成功
"
)
;
}).
catch
(()
=>
{})
;
this
.
getList
()
this
.
$modal
.
msgSuccess
(
"
删除成功
"
)
}).
catch
(()
=>
{})
},
/** 导出按钮操作 */
handleExport
()
{
...
...
@@ -305,5 +305,5 @@ export default {
},
`post_
${
new
Date
().
getTime
()}
.xlsx`
)
}
}
}
;
}
</
script
>
ruoyi-ui/src/views/system/role/authUser.vue
View file @
38ed092d
...
...
@@ -100,8 +100,8 @@
</template>
<
script
>
import
{
allocatedUserList
,
authUserCancel
,
authUserCancelAll
}
from
"
@/api/system/role
"
;
import
selectUser
from
"
./selectUser
"
;
import
{
allocatedUserList
,
authUserCancel
,
authUserCancelAll
}
from
"
@/api/system/role
"
import
selectUser
from
"
./selectUser
"
export
default
{
name
:
"
AuthUser
"
,
...
...
@@ -129,40 +129,40 @@ export default {
userName
:
undefined
,
phonenumber
:
undefined
}
}
;
}
},
created
()
{
const
roleId
=
this
.
$route
.
params
&&
this
.
$route
.
params
.
roleId
;
const
roleId
=
this
.
$route
.
params
&&
this
.
$route
.
params
.
roleId
if
(
roleId
)
{
this
.
queryParams
.
roleId
=
roleId
;
this
.
getList
()
;
this
.
queryParams
.
roleId
=
roleId
this
.
getList
()
}
},
methods
:
{
/** 查询授权用户列表 */
getList
()
{
this
.
loading
=
true
;
this
.
loading
=
true
allocatedUserList
(
this
.
queryParams
).
then
(
response
=>
{
this
.
userList
=
response
.
rows
;
this
.
total
=
response
.
total
;
this
.
loading
=
false
;
this
.
userList
=
response
.
rows
this
.
total
=
response
.
total
this
.
loading
=
false
}
)
;
)
},
// 返回按钮
handleClose
()
{
const
obj
=
{
path
:
"
/system/role
"
}
;
this
.
$tab
.
closeOpenPage
(
obj
)
;
const
obj
=
{
path
:
"
/system/role
"
}
this
.
$tab
.
closeOpenPage
(
obj
)
},
/** 搜索按钮操作 */
handleQuery
()
{
this
.
queryParams
.
pageNum
=
1
;
this
.
getList
()
;
this
.
queryParams
.
pageNum
=
1
this
.
getList
()
},
/** 重置按钮操作 */
resetQuery
()
{
this
.
resetForm
(
"
queryForm
"
)
;
this
.
handleQuery
()
;
this
.
resetForm
(
"
queryForm
"
)
this
.
handleQuery
()
},
// 多选框选中数据
handleSelectionChange
(
selection
)
{
...
...
@@ -171,29 +171,29 @@ export default {
},
/** 打开授权用户表弹窗 */
openSelectUser
()
{
this
.
$refs
.
select
.
show
()
;
this
.
$refs
.
select
.
show
()
},
/** 取消授权按钮操作 */
cancelAuthUser
(
row
)
{
const
roleId
=
this
.
queryParams
.
roleId
;
const
roleId
=
this
.
queryParams
.
roleId
this
.
$modal
.
confirm
(
'
确认要取消该用户"
'
+
row
.
userName
+
'
"角色吗?
'
).
then
(
function
()
{
return
authUserCancel
({
userId
:
row
.
userId
,
roleId
:
roleId
})
;
return
authUserCancel
({
userId
:
row
.
userId
,
roleId
:
roleId
})
}).
then
(()
=>
{
this
.
getList
()
;
this
.
$modal
.
msgSuccess
(
"
取消授权成功
"
)
;
}).
catch
(()
=>
{})
;
this
.
getList
()
this
.
$modal
.
msgSuccess
(
"
取消授权成功
"
)
}).
catch
(()
=>
{})
},
/** 批量取消授权按钮操作 */
cancelAuthUserAll
(
row
)
{
const
roleId
=
this
.
queryParams
.
roleId
;
const
userIds
=
this
.
userIds
.
join
(
"
,
"
)
;
const
roleId
=
this
.
queryParams
.
roleId
const
userIds
=
this
.
userIds
.
join
(
"
,
"
)
this
.
$modal
.
confirm
(
'
是否取消选中用户授权数据项?
'
).
then
(
function
()
{
return
authUserCancelAll
({
roleId
:
roleId
,
userIds
:
userIds
})
;
return
authUserCancelAll
({
roleId
:
roleId
,
userIds
:
userIds
})
}).
then
(()
=>
{
this
.
getList
()
;
this
.
$modal
.
msgSuccess
(
"
取消授权成功
"
)
;
}).
catch
(()
=>
{})
;
this
.
getList
()
this
.
$modal
.
msgSuccess
(
"
取消授权成功
"
)
}).
catch
(()
=>
{})
}
}
}
;
}
</
script
>
\ No newline at end of file
ruoyi-ui/src/views/system/role/index.vue
View file @
38ed092d
...
...
@@ -252,8 +252,8 @@
</template>
<
script
>
import
{
listRole
,
getRole
,
delRole
,
addRole
,
updateRole
,
dataScope
,
changeRoleStatus
,
deptTreeSelect
}
from
"
@/api/system/role
"
;
import
{
treeselect
as
menuTreeselect
,
roleMenuTreeselect
}
from
"
@/api/system/menu
"
;
import
{
listRole
,
getRole
,
delRole
,
addRole
,
updateRole
,
dataScope
,
changeRoleStatus
,
deptTreeSelect
}
from
"
@/api/system/role
"
import
{
treeselect
as
menuTreeselect
,
roleMenuTreeselect
}
from
"
@/api/system/menu
"
export
default
{
name
:
"
Role
"
,
...
...
@@ -339,85 +339,85 @@ export default {
{
required
:
true
,
message
:
"
角色顺序不能为空
"
,
trigger
:
"
blur
"
}
]
}
}
;
}
},
created
()
{
this
.
getList
()
;
this
.
getList
()
},
methods
:
{
/** 查询角色列表 */
getList
()
{
this
.
loading
=
true
;
this
.
loading
=
true
listRole
(
this
.
addDateRange
(
this
.
queryParams
,
this
.
dateRange
)).
then
(
response
=>
{
this
.
roleList
=
response
.
rows
;
this
.
total
=
response
.
total
;
this
.
loading
=
false
;
this
.
roleList
=
response
.
rows
this
.
total
=
response
.
total
this
.
loading
=
false
}
)
;
)
},
/** 查询菜单树结构 */
getMenuTreeselect
()
{
menuTreeselect
().
then
(
response
=>
{
this
.
menuOptions
=
response
.
data
;
})
;
this
.
menuOptions
=
response
.
data
})
},
// 所有菜单节点数据
getMenuAllCheckedKeys
()
{
// 目前被选中的菜单节点
let
checkedKeys
=
this
.
$refs
.
menu
.
getCheckedKeys
()
;
let
checkedKeys
=
this
.
$refs
.
menu
.
getCheckedKeys
()
// 半选中的菜单节点
let
halfCheckedKeys
=
this
.
$refs
.
menu
.
getHalfCheckedKeys
()
;
checkedKeys
.
unshift
.
apply
(
checkedKeys
,
halfCheckedKeys
)
;
return
checkedKeys
;
let
halfCheckedKeys
=
this
.
$refs
.
menu
.
getHalfCheckedKeys
()
checkedKeys
.
unshift
.
apply
(
checkedKeys
,
halfCheckedKeys
)
return
checkedKeys
},
// 所有部门节点数据
getDeptAllCheckedKeys
()
{
// 目前被选中的部门节点
let
checkedKeys
=
this
.
$refs
.
dept
.
getCheckedKeys
()
;
let
checkedKeys
=
this
.
$refs
.
dept
.
getCheckedKeys
()
// 半选中的部门节点
let
halfCheckedKeys
=
this
.
$refs
.
dept
.
getHalfCheckedKeys
()
;
checkedKeys
.
unshift
.
apply
(
checkedKeys
,
halfCheckedKeys
)
;
return
checkedKeys
;
let
halfCheckedKeys
=
this
.
$refs
.
dept
.
getHalfCheckedKeys
()
checkedKeys
.
unshift
.
apply
(
checkedKeys
,
halfCheckedKeys
)
return
checkedKeys
},
/** 根据角色ID查询菜单树结构 */
getRoleMenuTreeselect
(
roleId
)
{
return
roleMenuTreeselect
(
roleId
).
then
(
response
=>
{
this
.
menuOptions
=
response
.
menus
;
return
response
;
})
;
this
.
menuOptions
=
response
.
menus
return
response
})
},
/** 根据角色ID查询部门树结构 */
getDeptTree
(
roleId
)
{
return
deptTreeSelect
(
roleId
).
then
(
response
=>
{
this
.
deptOptions
=
response
.
depts
;
return
response
;
})
;
this
.
deptOptions
=
response
.
depts
return
response
})
},
// 角色状态修改
handleStatusChange
(
row
)
{
let
text
=
row
.
status
===
"
0
"
?
"
启用
"
:
"
停用
"
;
let
text
=
row
.
status
===
"
0
"
?
"
启用
"
:
"
停用
"
this
.
$modal
.
confirm
(
'
确认要"
'
+
text
+
'
""
'
+
row
.
roleName
+
'
"角色吗?
'
).
then
(
function
()
{
return
changeRoleStatus
(
row
.
roleId
,
row
.
status
)
;
return
changeRoleStatus
(
row
.
roleId
,
row
.
status
)
}).
then
(()
=>
{
this
.
$modal
.
msgSuccess
(
text
+
"
成功
"
)
;
this
.
$modal
.
msgSuccess
(
text
+
"
成功
"
)
}).
catch
(
function
()
{
row
.
status
=
row
.
status
===
"
0
"
?
"
1
"
:
"
0
"
;
})
;
row
.
status
=
row
.
status
===
"
0
"
?
"
1
"
:
"
0
"
})
},
// 取消按钮
cancel
()
{
this
.
open
=
false
;
this
.
reset
()
;
this
.
open
=
false
this
.
reset
()
},
// 取消按钮(数据权限)
cancelDataScope
()
{
this
.
openDataScope
=
false
;
this
.
reset
()
;
this
.
openDataScope
=
false
this
.
reset
()
},
// 表单重置
reset
()
{
if
(
this
.
$refs
.
menu
!=
undefined
)
{
this
.
$refs
.
menu
.
setCheckedKeys
([])
;
this
.
$refs
.
menu
.
setCheckedKeys
([])
}
this
.
menuExpand
=
false
,
this
.
menuNodeAll
=
false
,
...
...
@@ -434,19 +434,19 @@ export default {
menuCheckStrictly
:
true
,
deptCheckStrictly
:
true
,
remark
:
undefined
}
;
this
.
resetForm
(
"
form
"
)
;
}
this
.
resetForm
(
"
form
"
)
},
/** 搜索按钮操作 */
handleQuery
()
{
this
.
queryParams
.
pageNum
=
1
;
this
.
getList
()
;
this
.
queryParams
.
pageNum
=
1
this
.
getList
()
},
/** 重置按钮操作 */
resetQuery
()
{
this
.
dateRange
=
[]
;
this
.
resetForm
(
"
queryForm
"
)
;
this
.
handleQuery
()
;
this
.
dateRange
=
[]
this
.
resetForm
(
"
queryForm
"
)
this
.
handleQuery
()
},
// 多选框选中数据
handleSelectionChange
(
selection
)
{
...
...
@@ -458,141 +458,141 @@ export default {
handleCommand
(
command
,
row
)
{
switch
(
command
)
{
case
"
handleDataScope
"
:
this
.
handleDataScope
(
row
)
;
break
;
this
.
handleDataScope
(
row
)
break
case
"
handleAuthUser
"
:
this
.
handleAuthUser
(
row
)
;
break
;
this
.
handleAuthUser
(
row
)
break
default
:
break
;
break
}
},
// 树权限(展开/折叠)
handleCheckedTreeExpand
(
value
,
type
)
{
if
(
type
==
'
menu
'
)
{
let
treeList
=
this
.
menuOptions
;
let
treeList
=
this
.
menuOptions
for
(
let
i
=
0
;
i
<
treeList
.
length
;
i
++
)
{
this
.
$refs
.
menu
.
store
.
nodesMap
[
treeList
[
i
].
id
].
expanded
=
value
;
this
.
$refs
.
menu
.
store
.
nodesMap
[
treeList
[
i
].
id
].
expanded
=
value
}
}
else
if
(
type
==
'
dept
'
)
{
let
treeList
=
this
.
deptOptions
;
let
treeList
=
this
.
deptOptions
for
(
let
i
=
0
;
i
<
treeList
.
length
;
i
++
)
{
this
.
$refs
.
dept
.
store
.
nodesMap
[
treeList
[
i
].
id
].
expanded
=
value
;
this
.
$refs
.
dept
.
store
.
nodesMap
[
treeList
[
i
].
id
].
expanded
=
value
}
}
},
// 树权限(全选/全不选)
handleCheckedTreeNodeAll
(
value
,
type
)
{
if
(
type
==
'
menu
'
)
{
this
.
$refs
.
menu
.
setCheckedNodes
(
value
?
this
.
menuOptions
:
[])
;
this
.
$refs
.
menu
.
setCheckedNodes
(
value
?
this
.
menuOptions
:
[])
}
else
if
(
type
==
'
dept
'
)
{
this
.
$refs
.
dept
.
setCheckedNodes
(
value
?
this
.
deptOptions
:
[])
;
this
.
$refs
.
dept
.
setCheckedNodes
(
value
?
this
.
deptOptions
:
[])
}
},
// 树权限(父子联动)
handleCheckedTreeConnect
(
value
,
type
)
{
if
(
type
==
'
menu
'
)
{
this
.
form
.
menuCheckStrictly
=
value
?
true
:
false
;
this
.
form
.
menuCheckStrictly
=
value
?
true
:
false
}
else
if
(
type
==
'
dept
'
)
{
this
.
form
.
deptCheckStrictly
=
value
?
true
:
false
;
this
.
form
.
deptCheckStrictly
=
value
?
true
:
false
}
},
/** 新增按钮操作 */
handleAdd
()
{
this
.
reset
()
;
this
.
getMenuTreeselect
()
;
this
.
open
=
true
;
this
.
title
=
"
添加角色
"
;
this
.
reset
()
this
.
getMenuTreeselect
()
this
.
open
=
true
this
.
title
=
"
添加角色
"
},
/** 修改按钮操作 */
handleUpdate
(
row
)
{
this
.
reset
()
;
this
.
reset
()
const
roleId
=
row
.
roleId
||
this
.
ids
const
roleMenu
=
this
.
getRoleMenuTreeselect
(
roleId
)
;
const
roleMenu
=
this
.
getRoleMenuTreeselect
(
roleId
)
getRole
(
roleId
).
then
(
response
=>
{
this
.
form
=
response
.
data
;
this
.
open
=
true
;
this
.
form
=
response
.
data
this
.
open
=
true
this
.
$nextTick
(()
=>
{
roleMenu
.
then
(
res
=>
{
let
checkedKeys
=
res
.
checkedKeys
checkedKeys
.
forEach
((
v
)
=>
{
this
.
$nextTick
(()
=>
{
this
.
$refs
.
menu
.
setChecked
(
v
,
true
,
false
)
;
this
.
$refs
.
menu
.
setChecked
(
v
,
true
,
false
)
})
})
})
;
})
;
})
;
this
.
title
=
"
修改角色
"
;
})
})
})
this
.
title
=
"
修改角色
"
},
/** 选择角色权限范围触发 */
dataScopeSelectChange
(
value
)
{
if
(
value
!==
'
2
'
)
{
this
.
$refs
.
dept
.
setCheckedKeys
([])
;
this
.
$refs
.
dept
.
setCheckedKeys
([])
}
},
/** 分配数据权限操作 */
handleDataScope
(
row
)
{
this
.
reset
()
;
const
deptTreeSelect
=
this
.
getDeptTree
(
row
.
roleId
)
;
this
.
reset
()
const
deptTreeSelect
=
this
.
getDeptTree
(
row
.
roleId
)
getRole
(
row
.
roleId
).
then
(
response
=>
{
this
.
form
=
response
.
data
;
this
.
openDataScope
=
true
;
this
.
form
=
response
.
data
this
.
openDataScope
=
true
this
.
$nextTick
(()
=>
{
deptTreeSelect
.
then
(
res
=>
{
this
.
$refs
.
dept
.
setCheckedKeys
(
res
.
checkedKeys
)
;
})
;
})
;
})
;
this
.
title
=
"
分配数据权限
"
;
this
.
$refs
.
dept
.
setCheckedKeys
(
res
.
checkedKeys
)
})
})
})
this
.
title
=
"
分配数据权限
"
},
/** 分配用户操作 */
handleAuthUser
:
function
(
row
)
{
const
roleId
=
row
.
roleId
;
this
.
$router
.
push
(
"
/system/role-auth/user/
"
+
roleId
)
;
const
roleId
=
row
.
roleId
this
.
$router
.
push
(
"
/system/role-auth/user/
"
+
roleId
)
},
/** 提交按钮 */
submitForm
:
function
()
{
this
.
$refs
[
"
form
"
].
validate
(
valid
=>
{
if
(
valid
)
{
if
(
this
.
form
.
roleId
!=
undefined
)
{
this
.
form
.
menuIds
=
this
.
getMenuAllCheckedKeys
()
;
this
.
form
.
menuIds
=
this
.
getMenuAllCheckedKeys
()
updateRole
(
this
.
form
).
then
(
response
=>
{
this
.
$modal
.
msgSuccess
(
"
修改成功
"
)
;
this
.
open
=
false
;
this
.
getList
()
;
})
;
this
.
$modal
.
msgSuccess
(
"
修改成功
"
)
this
.
open
=
false
this
.
getList
()
})
}
else
{
this
.
form
.
menuIds
=
this
.
getMenuAllCheckedKeys
()
;
this
.
form
.
menuIds
=
this
.
getMenuAllCheckedKeys
()
addRole
(
this
.
form
).
then
(
response
=>
{
this
.
$modal
.
msgSuccess
(
"
新增成功
"
)
;
this
.
open
=
false
;
this
.
getList
()
;
})
;
this
.
$modal
.
msgSuccess
(
"
新增成功
"
)
this
.
open
=
false
this
.
getList
()
})
}
}
})
;
})
},
/** 提交按钮(数据权限) */
submitDataScope
:
function
()
{
if
(
this
.
form
.
roleId
!=
undefined
)
{
this
.
form
.
deptIds
=
this
.
getDeptAllCheckedKeys
()
;
this
.
form
.
deptIds
=
this
.
getDeptAllCheckedKeys
()
dataScope
(
this
.
form
).
then
(
response
=>
{
this
.
$modal
.
msgSuccess
(
"
修改成功
"
)
;
this
.
openDataScope
=
false
;
this
.
getList
()
;
})
;
this
.
$modal
.
msgSuccess
(
"
修改成功
"
)
this
.
openDataScope
=
false
this
.
getList
()
})
}
},
/** 删除按钮操作 */
handleDelete
(
row
)
{
const
roleIds
=
row
.
roleId
||
this
.
ids
;
const
roleIds
=
row
.
roleId
||
this
.
ids
this
.
$modal
.
confirm
(
'
是否确认删除角色编号为"
'
+
roleIds
+
'
"的数据项?
'
).
then
(
function
()
{
return
delRole
(
roleIds
)
;
return
delRole
(
roleIds
)
}).
then
(()
=>
{
this
.
getList
()
;
this
.
$modal
.
msgSuccess
(
"
删除成功
"
)
;
}).
catch
(()
=>
{})
;
this
.
getList
()
this
.
$modal
.
msgSuccess
(
"
删除成功
"
)
}).
catch
(()
=>
{})
},
/** 导出按钮操作 */
handleExport
()
{
...
...
@@ -601,5 +601,5 @@ export default {
},
`role_
${
new
Date
().
getTime
()}
.xlsx`
)
}
}
}
;
}
</
script
>
\ No newline at end of file
ruoyi-ui/src/views/system/role/selectUser.vue
View file @
38ed092d
...
...
@@ -57,7 +57,7 @@
</template>
<
script
>
import
{
unallocatedUserList
,
authUserSelectAll
}
from
"
@/api/system/role
"
;
import
{
unallocatedUserList
,
authUserSelectAll
}
from
"
@/api/system/role
"
export
default
{
dicts
:
[
'
sys_normal_disable
'
],
props
:
{
...
...
@@ -84,53 +84,53 @@ export default {
userName
:
undefined
,
phonenumber
:
undefined
}
}
;
}
},
methods
:
{
// 显示弹框
show
()
{
this
.
queryParams
.
roleId
=
this
.
roleId
;
this
.
getList
()
;
this
.
visible
=
true
;
this
.
queryParams
.
roleId
=
this
.
roleId
this
.
getList
()
this
.
visible
=
true
},
clickRow
(
row
)
{
this
.
$refs
.
table
.
toggleRowSelection
(
row
)
;
this
.
$refs
.
table
.
toggleRowSelection
(
row
)
},
// 多选框选中数据
handleSelectionChange
(
selection
)
{
this
.
userIds
=
selection
.
map
(
item
=>
item
.
userId
)
;
this
.
userIds
=
selection
.
map
(
item
=>
item
.
userId
)
},
// 查询表数据
getList
()
{
unallocatedUserList
(
this
.
queryParams
).
then
(
res
=>
{
this
.
userList
=
res
.
rows
;
this
.
total
=
res
.
total
;
})
;
this
.
userList
=
res
.
rows
this
.
total
=
res
.
total
})
},
/** 搜索按钮操作 */
handleQuery
()
{
this
.
queryParams
.
pageNum
=
1
;
this
.
getList
()
;
this
.
queryParams
.
pageNum
=
1
this
.
getList
()
},
/** 重置按钮操作 */
resetQuery
()
{
this
.
resetForm
(
"
queryForm
"
)
;
this
.
handleQuery
()
;
this
.
resetForm
(
"
queryForm
"
)
this
.
handleQuery
()
},
/** 选择授权用户操作 */
handleSelectUser
()
{
const
roleId
=
this
.
queryParams
.
roleId
;
const
userIds
=
this
.
userIds
.
join
(
"
,
"
)
;
const
roleId
=
this
.
queryParams
.
roleId
const
userIds
=
this
.
userIds
.
join
(
"
,
"
)
if
(
userIds
==
""
)
{
this
.
$modal
.
msgError
(
"
请选择要分配的用户
"
)
;
return
;
this
.
$modal
.
msgError
(
"
请选择要分配的用户
"
)
return
}
authUserSelectAll
({
roleId
:
roleId
,
userIds
:
userIds
}).
then
(
res
=>
{
this
.
$modal
.
msgSuccess
(
res
.
msg
)
;
this
.
visible
=
false
;
this
.
$emit
(
"
ok
"
)
;
})
;
this
.
$modal
.
msgSuccess
(
res
.
msg
)
this
.
visible
=
false
this
.
$emit
(
"
ok
"
)
})
}
}
}
;
}
</
script
>
ruoyi-ui/src/views/system/user/authRole.vue
View file @
38ed092d
...
...
@@ -46,7 +46,7 @@
</template>
<
script
>
import
{
getAuthRole
,
updateAuthRole
}
from
"
@/api/system/user
"
;
import
{
getAuthRole
,
updateAuthRole
}
from
"
@/api/system/user
"
export
default
{
name
:
"
AuthRole
"
,
...
...
@@ -64,60 +64,60 @@ export default {
roles
:
[],
// 用户信息
form
:
{}
}
;
}
},
created
()
{
const
userId
=
this
.
$route
.
params
&&
this
.
$route
.
params
.
userId
;
const
userId
=
this
.
$route
.
params
&&
this
.
$route
.
params
.
userId
if
(
userId
)
{
this
.
loading
=
true
;
this
.
loading
=
true
getAuthRole
(
userId
).
then
((
response
)
=>
{
this
.
form
=
response
.
user
;
this
.
roles
=
response
.
roles
;
this
.
total
=
this
.
roles
.
length
;
this
.
form
=
response
.
user
this
.
roles
=
response
.
roles
this
.
total
=
this
.
roles
.
length
this
.
$nextTick
(()
=>
{
this
.
roles
.
forEach
((
row
)
=>
{
if
(
row
.
flag
)
{
this
.
$refs
.
table
.
toggleRowSelection
(
row
)
;
this
.
$refs
.
table
.
toggleRowSelection
(
row
)
}
})
;
})
;
this
.
loading
=
false
;
})
;
})
})
this
.
loading
=
false
})
}
},
methods
:
{
/** 单击选中行数据 */
clickRow
(
row
)
{
if
(
this
.
checkSelectable
(
row
))
{
this
.
$refs
.
table
.
toggleRowSelection
(
row
)
;
this
.
$refs
.
table
.
toggleRowSelection
(
row
)
}
},
// 多选框选中数据
handleSelectionChange
(
selection
)
{
this
.
roleIds
=
selection
.
map
((
item
)
=>
item
.
roleId
)
;
this
.
roleIds
=
selection
.
map
((
item
)
=>
item
.
roleId
)
},
// 保存选中的数据编号
getRowKey
(
row
)
{
return
row
.
roleId
;
return
row
.
roleId
},
// 检查角色状态
checkSelectable
(
row
)
{
return
row
.
status
===
"
0
"
?
true
:
false
;
return
row
.
status
===
"
0
"
?
true
:
false
},
/** 提交按钮 */
submitForm
()
{
const
userId
=
this
.
form
.
userId
;
const
roleIds
=
this
.
roleIds
.
join
(
"
,
"
)
;
const
userId
=
this
.
form
.
userId
const
roleIds
=
this
.
roleIds
.
join
(
"
,
"
)
updateAuthRole
({
userId
:
userId
,
roleIds
:
roleIds
}).
then
((
response
)
=>
{
this
.
$modal
.
msgSuccess
(
"
授权成功
"
)
;
this
.
close
()
;
})
;
this
.
$modal
.
msgSuccess
(
"
授权成功
"
)
this
.
close
()
})
},
/** 关闭按钮 */
close
()
{
const
obj
=
{
path
:
"
/system/user
"
}
;
this
.
$tab
.
closeOpenPage
(
obj
)
;
}
,
}
,
}
;
const
obj
=
{
path
:
"
/system/user
"
}
this
.
$tab
.
closeOpenPage
(
obj
)
}
}
}
</
script
>
\ No newline at end of file
ruoyi-ui/src/views/system/user/index.vue
View file @
38ed092d
...
...
@@ -201,12 +201,12 @@
</template>
<
script
>
import
{
listUser
,
getUser
,
delUser
,
addUser
,
updateUser
,
resetUserPwd
,
changeUserStatus
,
deptTreeSelect
}
from
"
@/api/system/user
"
;
import
{
getToken
}
from
"
@/utils/auth
"
;
import
Treeselect
from
"
@riophae/vue-treeselect
"
;
import
"
@riophae/vue-treeselect/dist/vue-treeselect.css
"
;
import
{
Splitpanes
,
Pane
}
from
"
splitpanes
"
;
import
"
splitpanes/dist/splitpanes.css
"
;
import
{
listUser
,
getUser
,
delUser
,
addUser
,
updateUser
,
resetUserPwd
,
changeUserStatus
,
deptTreeSelect
}
from
"
@/api/system/user
"
import
{
getToken
}
from
"
@/utils/auth
"
import
Treeselect
from
"
@riophae/vue-treeselect
"
import
"
@riophae/vue-treeselect/dist/vue-treeselect.css
"
import
{
Splitpanes
,
Pane
}
from
"
splitpanes
"
import
"
splitpanes/dist/splitpanes.css
"
export
default
{
name
:
"
User
"
,
...
...
@@ -315,76 +315,76 @@ export default {
}
]
}
}
;
}
},
watch
:
{
// 根据名称筛选部门树
deptName
(
val
)
{
this
.
$refs
.
tree
.
filter
(
val
)
;
this
.
$refs
.
tree
.
filter
(
val
)
}
},
created
()
{
this
.
getList
()
;
this
.
getDeptTree
()
;
this
.
getList
()
this
.
getDeptTree
()
this
.
getConfigKey
(
"
sys.user.initPassword
"
).
then
(
response
=>
{
this
.
initPassword
=
response
.
msg
;
})
;
this
.
initPassword
=
response
.
msg
})
},
methods
:
{
/** 查询用户列表 */
getList
()
{
this
.
loading
=
true
;
this
.
loading
=
true
listUser
(
this
.
addDateRange
(
this
.
queryParams
,
this
.
dateRange
)).
then
(
response
=>
{
this
.
userList
=
response
.
rows
;
this
.
total
=
response
.
total
;
this
.
loading
=
false
;
this
.
userList
=
response
.
rows
this
.
total
=
response
.
total
this
.
loading
=
false
}
)
;
)
},
/** 查询部门下拉树结构 */
getDeptTree
()
{
deptTreeSelect
().
then
(
response
=>
{
this
.
deptOptions
=
response
.
data
;
this
.
enabledDeptOptions
=
this
.
filterDisabledDept
(
JSON
.
parse
(
JSON
.
stringify
(
response
.
data
)))
;
})
;
this
.
deptOptions
=
response
.
data
this
.
enabledDeptOptions
=
this
.
filterDisabledDept
(
JSON
.
parse
(
JSON
.
stringify
(
response
.
data
)))
})
},
// 过滤禁用的部门
filterDisabledDept
(
deptList
)
{
return
deptList
.
filter
(
dept
=>
{
if
(
dept
.
disabled
)
{
return
false
;
return
false
}
if
(
dept
.
children
&&
dept
.
children
.
length
)
{
dept
.
children
=
this
.
filterDisabledDept
(
dept
.
children
)
;
dept
.
children
=
this
.
filterDisabledDept
(
dept
.
children
)
}
return
true
;
})
;
return
true
})
},
// 筛选节点
filterNode
(
value
,
data
)
{
if
(
!
value
)
return
true
;
return
data
.
label
.
indexOf
(
value
)
!==
-
1
;
if
(
!
value
)
return
true
return
data
.
label
.
indexOf
(
value
)
!==
-
1
},
// 节点单击事件
handleNodeClick
(
data
)
{
this
.
queryParams
.
deptId
=
data
.
id
;
this
.
handleQuery
()
;
this
.
queryParams
.
deptId
=
data
.
id
this
.
handleQuery
()
},
// 用户状态修改
handleStatusChange
(
row
)
{
let
text
=
row
.
status
===
"
0
"
?
"
启用
"
:
"
停用
"
;
let
text
=
row
.
status
===
"
0
"
?
"
启用
"
:
"
停用
"
this
.
$modal
.
confirm
(
'
确认要"
'
+
text
+
'
""
'
+
row
.
userName
+
'
"用户吗?
'
).
then
(
function
()
{
return
changeUserStatus
(
row
.
userId
,
row
.
status
)
;
return
changeUserStatus
(
row
.
userId
,
row
.
status
)
}).
then
(()
=>
{
this
.
$modal
.
msgSuccess
(
text
+
"
成功
"
)
;
this
.
$modal
.
msgSuccess
(
text
+
"
成功
"
)
}).
catch
(
function
()
{
row
.
status
=
row
.
status
===
"
0
"
?
"
1
"
:
"
0
"
;
})
;
row
.
status
=
row
.
status
===
"
0
"
?
"
1
"
:
"
0
"
})
},
// 取消按钮
cancel
()
{
this
.
open
=
false
;
this
.
reset
()
;
this
.
open
=
false
this
.
reset
()
},
// 表单重置
reset
()
{
...
...
@@ -401,66 +401,66 @@ export default {
remark
:
undefined
,
postIds
:
[],
roleIds
:
[]
}
;
this
.
resetForm
(
"
form
"
)
;
}
this
.
resetForm
(
"
form
"
)
},
/** 搜索按钮操作 */
handleQuery
()
{
this
.
queryParams
.
pageNum
=
1
;
this
.
getList
()
;
this
.
queryParams
.
pageNum
=
1
this
.
getList
()
},
/** 重置按钮操作 */
resetQuery
()
{
this
.
dateRange
=
[]
;
this
.
resetForm
(
"
queryForm
"
)
;
this
.
queryParams
.
deptId
=
undefined
;
this
.
$refs
.
tree
.
setCurrentKey
(
null
)
;
this
.
handleQuery
()
;
this
.
dateRange
=
[]
this
.
resetForm
(
"
queryForm
"
)
this
.
queryParams
.
deptId
=
undefined
this
.
$refs
.
tree
.
setCurrentKey
(
null
)
this
.
handleQuery
()
},
// 多选框选中数据
handleSelectionChange
(
selection
)
{
this
.
ids
=
selection
.
map
(
item
=>
item
.
userId
)
;
this
.
single
=
selection
.
length
!=
1
;
this
.
multiple
=
!
selection
.
length
;
this
.
ids
=
selection
.
map
(
item
=>
item
.
userId
)
this
.
single
=
selection
.
length
!=
1
this
.
multiple
=
!
selection
.
length
},
// 更多操作触发
handleCommand
(
command
,
row
)
{
switch
(
command
)
{
case
"
handleResetPwd
"
:
this
.
handleResetPwd
(
row
)
;
break
;
this
.
handleResetPwd
(
row
)
break
case
"
handleAuthRole
"
:
this
.
handleAuthRole
(
row
)
;
break
;
this
.
handleAuthRole
(
row
)
break
default
:
break
;
break
}
},
/** 新增按钮操作 */
handleAdd
()
{
this
.
reset
()
;
this
.
reset
()
getUser
().
then
(
response
=>
{
this
.
postOptions
=
response
.
posts
;
this
.
roleOptions
=
response
.
roles
;
this
.
open
=
true
;
this
.
title
=
"
添加用户
"
;
this
.
form
.
password
=
this
.
initPassword
;
})
;
this
.
postOptions
=
response
.
posts
this
.
roleOptions
=
response
.
roles
this
.
open
=
true
this
.
title
=
"
添加用户
"
this
.
form
.
password
=
this
.
initPassword
})
},
/** 修改按钮操作 */
handleUpdate
(
row
)
{
this
.
reset
()
;
const
userId
=
row
.
userId
||
this
.
ids
;
this
.
reset
()
const
userId
=
row
.
userId
||
this
.
ids
getUser
(
userId
).
then
(
response
=>
{
this
.
form
=
response
.
data
;
this
.
postOptions
=
response
.
posts
;
this
.
roleOptions
=
response
.
roles
;
this
.
$set
(
this
.
form
,
"
postIds
"
,
response
.
postIds
)
;
this
.
$set
(
this
.
form
,
"
roleIds
"
,
response
.
roleIds
)
;
this
.
open
=
true
;
this
.
title
=
"
修改用户
"
;
this
.
form
.
password
=
""
;
})
;
this
.
form
=
response
.
data
this
.
postOptions
=
response
.
posts
this
.
roleOptions
=
response
.
roles
this
.
$set
(
this
.
form
,
"
postIds
"
,
response
.
postIds
)
this
.
$set
(
this
.
form
,
"
roleIds
"
,
response
.
roleIds
)
this
.
open
=
true
this
.
title
=
"
修改用户
"
this
.
form
.
password
=
""
})
},
/** 重置密码按钮操作 */
handleResetPwd
(
row
)
{
...
...
@@ -477,14 +477,14 @@ export default {
},
}).
then
(({
value
})
=>
{
resetUserPwd
(
row
.
userId
,
value
).
then
(
response
=>
{
this
.
$modal
.
msgSuccess
(
"
修改成功,新密码是:
"
+
value
)
;
})
;
}).
catch
(()
=>
{})
;
this
.
$modal
.
msgSuccess
(
"
修改成功,新密码是:
"
+
value
)
})
}).
catch
(()
=>
{})
},
/** 分配角色操作 */
handleAuthRole
:
function
(
row
)
{
const
userId
=
row
.
userId
;
this
.
$router
.
push
(
"
/system/user-auth/role/
"
+
userId
)
;
const
userId
=
row
.
userId
this
.
$router
.
push
(
"
/system/user-auth/role/
"
+
userId
)
},
/** 提交按钮 */
submitForm
:
function
()
{
...
...
@@ -492,29 +492,29 @@ export default {
if
(
valid
)
{
if
(
this
.
form
.
userId
!=
undefined
)
{
updateUser
(
this
.
form
).
then
(
response
=>
{
this
.
$modal
.
msgSuccess
(
"
修改成功
"
)
;
this
.
open
=
false
;
this
.
getList
()
;
})
;
this
.
$modal
.
msgSuccess
(
"
修改成功
"
)
this
.
open
=
false
this
.
getList
()
})
}
else
{
addUser
(
this
.
form
).
then
(
response
=>
{
this
.
$modal
.
msgSuccess
(
"
新增成功
"
)
;
this
.
open
=
false
;
this
.
getList
()
;
})
;
this
.
$modal
.
msgSuccess
(
"
新增成功
"
)
this
.
open
=
false
this
.
getList
()
})
}
}
})
;
})
},
/** 删除按钮操作 */
handleDelete
(
row
)
{
const
userIds
=
row
.
userId
||
this
.
ids
;
const
userIds
=
row
.
userId
||
this
.
ids
this
.
$modal
.
confirm
(
'
是否确认删除用户编号为"
'
+
userIds
+
'
"的数据项?
'
).
then
(
function
()
{
return
delUser
(
userIds
)
;
return
delUser
(
userIds
)
}).
then
(()
=>
{
this
.
getList
()
;
this
.
$modal
.
msgSuccess
(
"
删除成功
"
)
;
}).
catch
(()
=>
{})
;
this
.
getList
()
this
.
$modal
.
msgSuccess
(
"
删除成功
"
)
}).
catch
(()
=>
{})
},
/** 导出按钮操作 */
handleExport
()
{
...
...
@@ -524,8 +524,8 @@ export default {
},
/** 导入按钮操作 */
handleImport
()
{
this
.
upload
.
title
=
"
用户导入
"
;
this
.
upload
.
open
=
true
;
this
.
upload
.
title
=
"
用户导入
"
this
.
upload
.
open
=
true
},
/** 下载模板操作 */
importTemplate
()
{
...
...
@@ -534,20 +534,20 @@ export default {
},
// 文件上传中处理
handleFileUploadProgress
(
event
,
file
,
fileList
)
{
this
.
upload
.
isUploading
=
true
;
this
.
upload
.
isUploading
=
true
},
// 文件上传成功处理
handleFileSuccess
(
response
,
file
,
fileList
)
{
this
.
upload
.
open
=
false
;
this
.
upload
.
isUploading
=
false
;
this
.
$refs
.
upload
.
clearFiles
()
;
this
.
$alert
(
"
<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>
"
+
response
.
msg
+
"
</div>
"
,
"
导入结果
"
,
{
dangerouslyUseHTMLString
:
true
})
;
this
.
getList
()
;
this
.
upload
.
open
=
false
this
.
upload
.
isUploading
=
false
this
.
$refs
.
upload
.
clearFiles
()
this
.
$alert
(
"
<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>
"
+
response
.
msg
+
"
</div>
"
,
"
导入结果
"
,
{
dangerouslyUseHTMLString
:
true
})
this
.
getList
()
},
// 提交上传文件
submitFileForm
()
{
this
.
$refs
.
upload
.
submit
()
;
this
.
$refs
.
upload
.
submit
()
}
}
}
;
}
</
script
>
\ No newline at end of file
ruoyi-ui/src/views/system/user/profile/index.vue
View file @
38ed092d
...
...
@@ -59,10 +59,10 @@
</
template
>
<
script
>
import
userAvatar
from
"
./userAvatar
"
;
import
userInfo
from
"
./userInfo
"
;
import
resetPwd
from
"
./resetPwd
"
;
import
{
getUserProfile
}
from
"
@/api/system/user
"
;
import
userAvatar
from
"
./userAvatar
"
import
userInfo
from
"
./userInfo
"
import
resetPwd
from
"
./resetPwd
"
import
{
getUserProfile
}
from
"
@/api/system/user
"
export
default
{
name
:
"
Profile
"
,
...
...
@@ -73,19 +73,19 @@ export default {
roleGroup
:
{},
postGroup
:
{},
activeTab
:
"
userinfo
"
}
;
}
},
created
()
{
this
.
getUser
()
;
this
.
getUser
()
},
methods
:
{
getUser
()
{
getUserProfile
().
then
(
response
=>
{
this
.
user
=
response
.
data
;
this
.
roleGroup
=
response
.
roleGroup
;
this
.
postGroup
=
response
.
postGroup
;
})
;
this
.
user
=
response
.
data
this
.
roleGroup
=
response
.
roleGroup
this
.
postGroup
=
response
.
postGroup
})
}
}
}
;
}
</
script
>
ruoyi-ui/src/views/system/user/profile/resetPwd.vue
View file @
38ed092d
...
...
@@ -17,17 +17,17 @@
</
template
>
<
script
>
import
{
updateUserPwd
}
from
"
@/api/system/user
"
;
import
{
updateUserPwd
}
from
"
@/api/system/user
"
export
default
{
data
()
{
const
equalToPassword
=
(
rule
,
value
,
callback
)
=>
{
if
(
this
.
user
.
newPassword
!==
value
)
{
callback
(
new
Error
(
"
两次输入的密码不一致
"
))
;
callback
(
new
Error
(
"
两次输入的密码不一致
"
))
}
else
{
callback
()
;
callback
()
}
}
;
}
return
{
user
:
{
oldPassword
:
undefined
,
...
...
@@ -49,21 +49,21 @@ export default {
{
required
:
true
,
validator
:
equalToPassword
,
trigger
:
"
blur
"
}
]
}
}
;
}
},
methods
:
{
submit
()
{
this
.
$refs
[
"
form
"
].
validate
(
valid
=>
{
if
(
valid
)
{
updateUserPwd
(
this
.
user
.
oldPassword
,
this
.
user
.
newPassword
).
then
(
response
=>
{
this
.
$modal
.
msgSuccess
(
"
修改成功
"
)
;
})
;
this
.
$modal
.
msgSuccess
(
"
修改成功
"
)
})
}
})
;
})
},
close
()
{
this
.
$tab
.
closePage
()
;
this
.
$tab
.
closePage
()
}
}
}
;
}
</
script
>
ruoyi-ui/src/views/system/user/profile/userAvatar.vue
View file @
38ed092d
...
...
@@ -54,9 +54,9 @@
</
template
>
<
script
>
import
store
from
"
@/store
"
;
import
{
VueCropper
}
from
"
vue-cropper
"
;
import
{
uploadAvatar
}
from
"
@/api/system/user
"
;
import
store
from
"
@/store
"
import
{
VueCropper
}
from
"
vue-cropper
"
import
{
uploadAvatar
}
from
"
@/api/system/user
"
import
{
debounce
}
from
'
@/utils
'
export
default
{
...
...
@@ -80,16 +80,16 @@ export default {
},
previews
:
{},
resizeHandler
:
null
}
;
}
},
methods
:
{
// 编辑头像
editCropper
()
{
this
.
open
=
true
;
this
.
open
=
true
},
// 打开弹出层结束时的回调
modalOpened
()
{
this
.
visible
=
true
;
this
.
visible
=
true
if
(
!
this
.
resizeHandler
)
{
this
.
resizeHandler
=
debounce
(()
=>
{
this
.
refresh
()
...
...
@@ -99,63 +99,63 @@ export default {
},
// 刷新组件
refresh
()
{
this
.
$refs
.
cropper
.
refresh
()
;
this
.
$refs
.
cropper
.
refresh
()
},
// 覆盖默认的上传行为
requestUpload
()
{
},
// 向左旋转
rotateLeft
()
{
this
.
$refs
.
cropper
.
rotateLeft
()
;
this
.
$refs
.
cropper
.
rotateLeft
()
},
// 向右旋转
rotateRight
()
{
this
.
$refs
.
cropper
.
rotateRight
()
;
this
.
$refs
.
cropper
.
rotateRight
()
},
// 图片缩放
changeScale
(
num
)
{
num
=
num
||
1
;
this
.
$refs
.
cropper
.
changeScale
(
num
)
;
num
=
num
||
1
this
.
$refs
.
cropper
.
changeScale
(
num
)
},
// 上传预处理
beforeUpload
(
file
)
{
if
(
file
.
type
.
indexOf
(
"
image/
"
)
==
-
1
)
{
this
.
$modal
.
msgError
(
"
文件格式错误,请上传图片类型,如:JPG,PNG后缀的文件。
"
)
;
this
.
$modal
.
msgError
(
"
文件格式错误,请上传图片类型,如:JPG,PNG后缀的文件。
"
)
}
else
{
const
reader
=
new
FileReader
()
;
reader
.
readAsDataURL
(
file
)
;
const
reader
=
new
FileReader
()
reader
.
readAsDataURL
(
file
)
reader
.
onload
=
()
=>
{
this
.
options
.
img
=
reader
.
result
;
this
.
options
.
filename
=
file
.
name
;
}
;
this
.
options
.
img
=
reader
.
result
this
.
options
.
filename
=
file
.
name
}
}
},
// 上传图片
uploadImg
()
{
this
.
$refs
.
cropper
.
getCropBlob
(
data
=>
{
let
formData
=
new
FormData
()
;
formData
.
append
(
"
avatarfile
"
,
data
,
this
.
options
.
filename
)
;
let
formData
=
new
FormData
()
formData
.
append
(
"
avatarfile
"
,
data
,
this
.
options
.
filename
)
uploadAvatar
(
formData
).
then
(
response
=>
{
this
.
open
=
false
;
this
.
options
.
img
=
process
.
env
.
VUE_APP_BASE_API
+
response
.
imgUrl
;
store
.
commit
(
'
SET_AVATAR
'
,
this
.
options
.
img
)
;
this
.
$modal
.
msgSuccess
(
"
修改成功
"
)
;
this
.
visible
=
false
;
})
;
})
;
this
.
open
=
false
this
.
options
.
img
=
process
.
env
.
VUE_APP_BASE_API
+
response
.
imgUrl
store
.
commit
(
'
SET_AVATAR
'
,
this
.
options
.
img
)
this
.
$modal
.
msgSuccess
(
"
修改成功
"
)
this
.
visible
=
false
})
})
},
// 实时预览
realTime
(
data
)
{
this
.
previews
=
data
;
this
.
previews
=
data
},
// 关闭窗口
closeDialog
()
{
this
.
options
.
img
=
store
.
getters
.
avatar
this
.
visible
=
false
;
this
.
visible
=
false
window
.
removeEventListener
(
"
resize
"
,
this
.
resizeHandler
)
}
}
}
;
}
</
script
>
<
style
scoped
lang=
"scss"
>
.user-info-head
{
...
...
ruoyi-ui/src/views/system/user/profile/userInfo.vue
View file @
38ed092d
...
...
@@ -23,7 +23,7 @@
</
template
>
<
script
>
import
{
updateUserProfile
}
from
"
@/api/system/user
"
;
import
{
updateUserProfile
}
from
"
@/api/system/user
"
export
default
{
props
:
{
...
...
@@ -56,13 +56,13 @@ export default {
}
]
}
}
;
}
},
watch
:
{
user
:
{
handler
(
user
)
{
if
(
user
)
{
this
.
form
=
{
nickName
:
user
.
nickName
,
phonenumber
:
user
.
phonenumber
,
email
:
user
.
email
,
sex
:
user
.
sex
}
;
this
.
form
=
{
nickName
:
user
.
nickName
,
phonenumber
:
user
.
phonenumber
,
email
:
user
.
email
,
sex
:
user
.
sex
}
}
},
immediate
:
true
...
...
@@ -73,16 +73,16 @@ export default {
this
.
$refs
[
"
form
"
].
validate
(
valid
=>
{
if
(
valid
)
{
updateUserProfile
(
this
.
form
).
then
(
response
=>
{
this
.
$modal
.
msgSuccess
(
"
修改成功
"
)
;
this
.
user
.
phonenumber
=
this
.
form
.
phonenumber
;
this
.
user
.
email
=
this
.
form
.
email
;
})
;
this
.
$modal
.
msgSuccess
(
"
修改成功
"
)
this
.
user
.
phonenumber
=
this
.
form
.
phonenumber
this
.
user
.
email
=
this
.
form
.
email
})
}
})
;
})
},
close
()
{
this
.
$tab
.
closePage
()
;
this
.
$tab
.
closePage
()
}
}
}
;
}
</
script
>
ruoyi-ui/src/views/tool/gen/basicInfoForm.vue
View file @
38ed092d
...
...
@@ -54,7 +54,7 @@ export default {
{
required
:
true
,
message
:
"
请输入作者
"
,
trigger
:
"
blur
"
}
]
}
}
;
}
}
}
;
}
</
script
>
ruoyi-ui/src/views/tool/gen/createTable.vue
View file @
38ed092d
...
...
@@ -11,7 +11,7 @@
</
template
>
<
script
>
import
{
createTable
}
from
"
@/api/tool/gen
"
;
import
{
createTable
}
from
"
@/api/tool/gen
"
export
default
{
data
()
{
return
{
...
...
@@ -19,27 +19,27 @@ export default {
visible
:
false
,
// 文本内容
content
:
""
}
;
}
},
methods
:
{
// 显示弹框
show
()
{
this
.
visible
=
true
;
this
.
visible
=
true
},
/** 创建按钮操作 */
handleCreateTable
()
{
if
(
this
.
content
===
""
)
{
this
.
$modal
.
msgError
(
"
请输入建表语句
"
)
;
return
;
this
.
$modal
.
msgError
(
"
请输入建表语句
"
)
return
}
createTable
({
sql
:
this
.
content
}).
then
(
res
=>
{
this
.
$modal
.
msgSuccess
(
res
.
msg
)
;
this
.
$modal
.
msgSuccess
(
res
.
msg
)
if
(
res
.
code
===
200
)
{
this
.
visible
=
false
;
this
.
$emit
(
"
ok
"
)
;
this
.
visible
=
false
this
.
$emit
(
"
ok
"
)
}
})
;
})
}
}
}
;
}
</
script
>
ruoyi-ui/src/views/tool/gen/editTable.vue
View file @
38ed092d
...
...
@@ -127,11 +127,11 @@
</template>
<
script
>
import
{
getGenTable
,
updateGenTable
}
from
"
@/api/tool/gen
"
;
import
{
optionselect
as
getDictOptionselect
}
from
"
@/api/system/dict/type
"
;
import
{
listMenu
as
getMenuTreeselect
}
from
"
@/api/system/menu
"
;
import
basicInfoForm
from
"
./basicInfoForm
"
;
import
genInfoForm
from
"
./genInfoForm
"
;
import
{
getGenTable
,
updateGenTable
}
from
"
@/api/tool/gen
"
import
{
optionselect
as
getDictOptionselect
}
from
"
@/api/system/dict/type
"
import
{
listMenu
as
getMenuTreeselect
}
from
"
@/api/system/menu
"
import
basicInfoForm
from
"
./basicInfoForm
"
import
genInfoForm
from
"
./genInfoForm
"
import
Sortable
from
'
sortablejs
'
export
default
{
...
...
@@ -156,79 +156,79 @@ export default {
menus
:
[],
// 表详细信息
info
:
{}
}
;
}
},
created
()
{
const
tableId
=
this
.
$route
.
params
&&
this
.
$route
.
params
.
tableId
;
const
tableId
=
this
.
$route
.
params
&&
this
.
$route
.
params
.
tableId
if
(
tableId
)
{
// 获取表详细信息
getGenTable
(
tableId
).
then
(
res
=>
{
this
.
columns
=
res
.
data
.
rows
;
this
.
info
=
res
.
data
.
info
;
this
.
tables
=
res
.
data
.
tables
;
})
;
this
.
columns
=
res
.
data
.
rows
this
.
info
=
res
.
data
.
info
this
.
tables
=
res
.
data
.
tables
})
/** 查询字典下拉列表 */
getDictOptionselect
().
then
(
response
=>
{
this
.
dictOptions
=
response
.
data
;
})
;
this
.
dictOptions
=
response
.
data
})
/** 查询菜单下拉列表 */
getMenuTreeselect
().
then
(
response
=>
{
this
.
menus
=
this
.
handleTree
(
response
.
data
,
"
menuId
"
)
;
})
;
this
.
menus
=
this
.
handleTree
(
response
.
data
,
"
menuId
"
)
})
}
},
methods
:
{
/** 提交按钮 */
submitForm
()
{
const
basicForm
=
this
.
$refs
.
basicInfo
.
$refs
.
basicInfoForm
;
const
genForm
=
this
.
$refs
.
genInfo
.
$refs
.
genInfoForm
;
const
basicForm
=
this
.
$refs
.
basicInfo
.
$refs
.
basicInfoForm
const
genForm
=
this
.
$refs
.
genInfo
.
$refs
.
genInfoForm
Promise
.
all
([
basicForm
,
genForm
].
map
(
this
.
getFormPromise
)).
then
(
res
=>
{
const
validateResult
=
res
.
every
(
item
=>
!!
item
)
;
const
validateResult
=
res
.
every
(
item
=>
!!
item
)
if
(
validateResult
)
{
const
genTable
=
Object
.
assign
({},
basicForm
.
model
,
genForm
.
model
)
;
genTable
.
columns
=
this
.
columns
;
const
genTable
=
Object
.
assign
({},
basicForm
.
model
,
genForm
.
model
)
genTable
.
columns
=
this
.
columns
genTable
.
params
=
{
treeCode
:
genTable
.
treeCode
,
treeName
:
genTable
.
treeName
,
treeParentCode
:
genTable
.
treeParentCode
,
parentMenuId
:
genTable
.
parentMenuId
}
;
}
updateGenTable
(
genTable
).
then
(
res
=>
{
this
.
$modal
.
msgSuccess
(
res
.
msg
)
;
this
.
$modal
.
msgSuccess
(
res
.
msg
)
if
(
res
.
code
===
200
)
{
this
.
close
()
;
this
.
close
()
}
})
;
})
}
else
{
this
.
$modal
.
msgError
(
"
表单校验未通过,请重新检查提交内容
"
)
;
this
.
$modal
.
msgError
(
"
表单校验未通过,请重新检查提交内容
"
)
}
})
;
})
},
getFormPromise
(
form
)
{
return
new
Promise
(
resolve
=>
{
form
.
validate
(
res
=>
{
resolve
(
res
)
;
})
;
})
;
resolve
(
res
)
})
})
},
/** 关闭按钮 */
close
()
{
const
obj
=
{
path
:
"
/tool/gen
"
,
query
:
{
t
:
Date
.
now
(),
pageNum
:
this
.
$route
.
query
.
pageNum
}
}
;
this
.
$tab
.
closeOpenPage
(
obj
)
;
const
obj
=
{
path
:
"
/tool/gen
"
,
query
:
{
t
:
Date
.
now
(),
pageNum
:
this
.
$route
.
query
.
pageNum
}
}
this
.
$tab
.
closeOpenPage
(
obj
)
}
},
mounted
()
{
const
el
=
this
.
$refs
.
dragTable
.
$el
.
querySelectorAll
(
"
.el-table__body-wrapper > table > tbody
"
)[
0
]
;
const
el
=
this
.
$refs
.
dragTable
.
$el
.
querySelectorAll
(
"
.el-table__body-wrapper > table > tbody
"
)[
0
]
const
sortable
=
Sortable
.
create
(
el
,
{
handle
:
"
.allowDrag
"
,
onEnd
:
evt
=>
{
const
targetRow
=
this
.
columns
.
splice
(
evt
.
oldIndex
,
1
)[
0
]
;
this
.
columns
.
splice
(
evt
.
newIndex
,
0
,
targetRow
)
;
const
targetRow
=
this
.
columns
.
splice
(
evt
.
oldIndex
,
1
)[
0
]
this
.
columns
.
splice
(
evt
.
newIndex
,
0
,
targetRow
)
for
(
let
index
in
this
.
columns
)
{
this
.
columns
[
index
].
sort
=
parseInt
(
index
)
+
1
;
this
.
columns
[
index
].
sort
=
parseInt
(
index
)
+
1
}
}
})
;
})
}
}
;
}
</
script
>
ruoyi-ui/src/views/tool/gen/genInfoForm.vue
View file @
38ed092d
...
...
@@ -223,8 +223,8 @@
</
template
>
<
script
>
import
Treeselect
from
"
@riophae/vue-treeselect
"
;
import
"
@riophae/vue-treeselect/dist/vue-treeselect.css
"
;
import
Treeselect
from
"
@riophae/vue-treeselect
"
import
"
@riophae/vue-treeselect/dist/vue-treeselect.css
"
export
default
{
components
:
{
Treeselect
},
...
...
@@ -240,7 +240,7 @@ export default {
menus
:
{
type
:
Array
,
default
:
[]
}
,
}
},
data
()
{
return
{
...
...
@@ -260,17 +260,17 @@ export default {
],
functionName
:
[
{
required
:
true
,
message
:
"
请输入生成功能名
"
,
trigger
:
"
blur
"
}
]
,
]
}
}
;
}
},
watch
:
{
'
info.subTableName
'
:
function
(
val
)
{
this
.
setSubTableColumns
(
val
)
;
this
.
setSubTableColumns
(
val
)
},
'
info.tplWebType
'
:
function
(
val
)
{
if
(
val
===
''
)
{
this
.
info
.
tplWebType
=
"
element-ui
"
;
this
.
info
.
tplWebType
=
"
element-ui
"
}
}
},
...
...
@@ -278,35 +278,35 @@ export default {
/** 转换菜单数据结构 */
normalizer
(
node
)
{
if
(
node
.
children
&&
!
node
.
children
.
length
)
{
delete
node
.
children
;
delete
node
.
children
}
return
{
id
:
node
.
menuId
,
label
:
node
.
menuName
,
children
:
node
.
children
}
;
}
},
/** 选择子表名触发 */
subSelectChange
(
value
)
{
this
.
info
.
subTableFkName
=
''
;
this
.
info
.
subTableFkName
=
''
},
/** 选择生成模板触发 */
tplSelectChange
(
value
)
{
if
(
value
!==
'
sub
'
)
{
this
.
info
.
subTableName
=
''
;
this
.
info
.
subTableFkName
=
''
;
this
.
info
.
subTableName
=
''
this
.
info
.
subTableFkName
=
''
}
},
/** 设置关联外键 */
setSubTableColumns
(
value
)
{
for
(
var
item
in
this
.
tables
)
{
const
name
=
this
.
tables
[
item
].
tableName
;
const
name
=
this
.
tables
[
item
].
tableName
if
(
value
===
name
)
{
this
.
subColumns
=
this
.
tables
[
item
].
columns
;
break
;
this
.
subColumns
=
this
.
tables
[
item
].
columns
break
}
}
}
}
}
;
}
</
script
>
ruoyi-ui/src/views/tool/gen/importTable.vue
View file @
38ed092d
...
...
@@ -47,7 +47,7 @@
</
template
>
<
script
>
import
{
listDbTable
,
importTable
}
from
"
@/api/tool/gen
"
;
import
{
listDbTable
,
importTable
}
from
"
@/api/tool/gen
"
export
default
{
data
()
{
return
{
...
...
@@ -66,55 +66,55 @@ export default {
tableName
:
undefined
,
tableComment
:
undefined
}
}
;
}
},
methods
:
{
// 显示弹框
show
()
{
this
.
getList
()
;
this
.
visible
=
true
;
this
.
getList
()
this
.
visible
=
true
},
clickRow
(
row
)
{
this
.
$refs
.
table
.
toggleRowSelection
(
row
)
;
this
.
$refs
.
table
.
toggleRowSelection
(
row
)
},
// 多选框选中数据
handleSelectionChange
(
selection
)
{
this
.
tables
=
selection
.
map
(
item
=>
item
.
tableName
)
;
this
.
tables
=
selection
.
map
(
item
=>
item
.
tableName
)
},
// 查询表数据
getList
()
{
listDbTable
(
this
.
queryParams
).
then
(
res
=>
{
if
(
res
.
code
===
200
)
{
this
.
dbTableList
=
res
.
rows
;
this
.
total
=
res
.
total
;
this
.
dbTableList
=
res
.
rows
this
.
total
=
res
.
total
}
})
;
})
},
/** 搜索按钮操作 */
handleQuery
()
{
this
.
queryParams
.
pageNum
=
1
;
this
.
getList
()
;
this
.
queryParams
.
pageNum
=
1
this
.
getList
()
},
/** 重置按钮操作 */
resetQuery
()
{
this
.
resetForm
(
"
queryForm
"
)
;
this
.
handleQuery
()
;
this
.
resetForm
(
"
queryForm
"
)
this
.
handleQuery
()
},
/** 导入按钮操作 */
handleImportTable
()
{
const
tableNames
=
this
.
tables
.
join
(
"
,
"
)
;
const
tableNames
=
this
.
tables
.
join
(
"
,
"
)
if
(
tableNames
==
""
)
{
this
.
$modal
.
msgError
(
"
请选择要导入的表
"
)
;
return
;
this
.
$modal
.
msgError
(
"
请选择要导入的表
"
)
return
}
importTable
({
tables
:
tableNames
}).
then
(
res
=>
{
this
.
$modal
.
msgSuccess
(
res
.
msg
)
;
this
.
$modal
.
msgSuccess
(
res
.
msg
)
if
(
res
.
code
===
200
)
{
this
.
visible
=
false
;
this
.
$emit
(
"
ok
"
)
;
this
.
visible
=
false
this
.
$emit
(
"
ok
"
)
}
})
;
})
}
}
}
;
}
</
script
>
ruoyi-ui/src/views/tool/gen/index.vue
View file @
38ed092d
...
...
@@ -170,17 +170,17 @@
</template>
<
script
>
import
{
listTable
,
previewTable
,
delTable
,
genCode
,
synchDb
}
from
"
@/api/tool/gen
"
;
import
importTable
from
"
./importTable
"
;
import
createTable
from
"
./createTable
"
;
import
hljs
from
"
highlight.js/lib/highlight
"
;
import
"
highlight.js/styles/github-gist.css
"
;
hljs
.
registerLanguage
(
"
java
"
,
require
(
"
highlight.js/lib/languages/java
"
))
;
hljs
.
registerLanguage
(
"
xml
"
,
require
(
"
highlight.js/lib/languages/xml
"
))
;
hljs
.
registerLanguage
(
"
html
"
,
require
(
"
highlight.js/lib/languages/xml
"
))
;
hljs
.
registerLanguage
(
"
vue
"
,
require
(
"
highlight.js/lib/languages/xml
"
))
;
hljs
.
registerLanguage
(
"
javascript
"
,
require
(
"
highlight.js/lib/languages/javascript
"
))
;
hljs
.
registerLanguage
(
"
sql
"
,
require
(
"
highlight.js/lib/languages/sql
"
))
;
import
{
listTable
,
previewTable
,
delTable
,
genCode
,
synchDb
}
from
"
@/api/tool/gen
"
import
importTable
from
"
./importTable
"
import
createTable
from
"
./createTable
"
import
hljs
from
"
highlight.js/lib/highlight
"
import
"
highlight.js/styles/github-gist.css
"
hljs
.
registerLanguage
(
"
java
"
,
require
(
"
highlight.js/lib/languages/java
"
))
hljs
.
registerLanguage
(
"
xml
"
,
require
(
"
highlight.js/lib/languages/xml
"
))
hljs
.
registerLanguage
(
"
html
"
,
require
(
"
highlight.js/lib/languages/xml
"
))
hljs
.
registerLanguage
(
"
vue
"
,
require
(
"
highlight.js/lib/languages/xml
"
))
hljs
.
registerLanguage
(
"
javascript
"
,
require
(
"
highlight.js/lib/languages/javascript
"
))
hljs
.
registerLanguage
(
"
sql
"
,
require
(
"
highlight.js/lib/languages/sql
"
))
export
default
{
name
:
"
Gen
"
,
...
...
@@ -223,125 +223,125 @@ export default {
data
:
{},
activeName
:
"
domain.java
"
}
}
;
}
},
created
()
{
this
.
queryParams
.
orderByColumn
=
this
.
defaultSort
.
prop
;
this
.
queryParams
.
isAsc
=
this
.
defaultSort
.
order
;
this
.
getList
()
;
this
.
queryParams
.
orderByColumn
=
this
.
defaultSort
.
prop
this
.
queryParams
.
isAsc
=
this
.
defaultSort
.
order
this
.
getList
()
},
activated
()
{
const
time
=
this
.
$route
.
query
.
t
;
const
time
=
this
.
$route
.
query
.
t
if
(
time
!=
null
&&
time
!=
this
.
uniqueId
)
{
this
.
uniqueId
=
time
;
this
.
queryParams
.
pageNum
=
Number
(
this
.
$route
.
query
.
pageNum
)
;
this
.
getList
()
;
this
.
uniqueId
=
time
this
.
queryParams
.
pageNum
=
Number
(
this
.
$route
.
query
.
pageNum
)
this
.
getList
()
}
},
methods
:
{
/** 查询表集合 */
getList
()
{
this
.
loading
=
true
;
this
.
loading
=
true
listTable
(
this
.
addDateRange
(
this
.
queryParams
,
this
.
dateRange
)).
then
(
response
=>
{
this
.
tableList
=
response
.
rows
;
this
.
total
=
response
.
total
;
this
.
loading
=
false
;
this
.
tableList
=
response
.
rows
this
.
total
=
response
.
total
this
.
loading
=
false
}
)
;
)
},
/** 搜索按钮操作 */
handleQuery
()
{
this
.
queryParams
.
pageNum
=
1
;
this
.
getList
()
;
this
.
queryParams
.
pageNum
=
1
this
.
getList
()
},
/** 生成代码操作 */
handleGenTable
(
row
)
{
const
tableNames
=
row
.
tableName
||
this
.
tableNames
;
const
tableNames
=
row
.
tableName
||
this
.
tableNames
if
(
tableNames
==
""
)
{
this
.
$modal
.
msgError
(
"
请选择要生成的数据
"
)
;
return
;
this
.
$modal
.
msgError
(
"
请选择要生成的数据
"
)
return
}
if
(
row
.
genType
===
"
1
"
)
{
genCode
(
row
.
tableName
).
then
(
response
=>
{
this
.
$modal
.
msgSuccess
(
"
成功生成到自定义路径:
"
+
row
.
genPath
)
;
})
;
this
.
$modal
.
msgSuccess
(
"
成功生成到自定义路径:
"
+
row
.
genPath
)
})
}
else
{
this
.
$download
.
zip
(
"
/tool/gen/batchGenCode?tables=
"
+
tableNames
,
"
ruoyi.zip
"
)
;
this
.
$download
.
zip
(
"
/tool/gen/batchGenCode?tables=
"
+
tableNames
,
"
ruoyi.zip
"
)
}
},
/** 同步数据库操作 */
handleSynchDb
(
row
)
{
const
tableName
=
row
.
tableName
;
const
tableName
=
row
.
tableName
this
.
$modal
.
confirm
(
'
确认要强制同步"
'
+
tableName
+
'
"表结构吗?
'
).
then
(
function
()
{
return
synchDb
(
tableName
)
;
return
synchDb
(
tableName
)
}).
then
(()
=>
{
this
.
$modal
.
msgSuccess
(
"
同步成功
"
)
;
}).
catch
(()
=>
{})
;
this
.
$modal
.
msgSuccess
(
"
同步成功
"
)
}).
catch
(()
=>
{})
},
/** 打开导入表弹窗 */
openImportTable
()
{
this
.
$refs
.
import
.
show
()
;
this
.
$refs
.
import
.
show
()
},
/** 打开创建表弹窗 */
openCreateTable
()
{
this
.
$refs
.
create
.
show
()
;
this
.
$refs
.
create
.
show
()
},
/** 重置按钮操作 */
resetQuery
()
{
this
.
dateRange
=
[]
;
this
.
resetForm
(
"
queryForm
"
)
;
this
.
queryParams
.
pageNum
=
1
;
this
.
dateRange
=
[]
this
.
resetForm
(
"
queryForm
"
)
this
.
queryParams
.
pageNum
=
1
this
.
$refs
.
tables
.
sort
(
this
.
defaultSort
.
prop
,
this
.
defaultSort
.
order
)
},
/** 预览按钮 */
handlePreview
(
row
)
{
previewTable
(
row
.
tableId
).
then
(
response
=>
{
this
.
preview
.
data
=
response
.
data
;
this
.
preview
.
open
=
true
;
this
.
preview
.
activeName
=
"
domain.java
"
;
})
;
this
.
preview
.
data
=
response
.
data
this
.
preview
.
open
=
true
this
.
preview
.
activeName
=
"
domain.java
"
})
},
/** 高亮显示 */
highlightedCode
(
code
,
key
)
{
const
vmName
=
key
.
substring
(
key
.
lastIndexOf
(
"
/
"
)
+
1
,
key
.
indexOf
(
"
.vm
"
))
;
var
language
=
vmName
.
substring
(
vmName
.
indexOf
(
"
.
"
)
+
1
,
vmName
.
length
)
;
const
result
=
hljs
.
highlight
(
language
,
code
||
""
,
true
)
;
return
result
.
value
||
'
'
;
const
vmName
=
key
.
substring
(
key
.
lastIndexOf
(
"
/
"
)
+
1
,
key
.
indexOf
(
"
.vm
"
))
var
language
=
vmName
.
substring
(
vmName
.
indexOf
(
"
.
"
)
+
1
,
vmName
.
length
)
const
result
=
hljs
.
highlight
(
language
,
code
||
""
,
true
)
return
result
.
value
||
'
'
},
/** 复制代码成功 */
clipboardSuccess
()
{
this
.
$modal
.
msgSuccess
(
"
复制成功
"
)
;
this
.
$modal
.
msgSuccess
(
"
复制成功
"
)
},
// 多选框选中数据
handleSelectionChange
(
selection
)
{
this
.
ids
=
selection
.
map
(
item
=>
item
.
tableId
)
;
this
.
tableNames
=
selection
.
map
(
item
=>
item
.
tableName
)
;
this
.
single
=
selection
.
length
!=
1
;
this
.
multiple
=
!
selection
.
length
;
this
.
ids
=
selection
.
map
(
item
=>
item
.
tableId
)
this
.
tableNames
=
selection
.
map
(
item
=>
item
.
tableName
)
this
.
single
=
selection
.
length
!=
1
this
.
multiple
=
!
selection
.
length
},
/** 排序触发事件 */
handleSortChange
(
column
,
prop
,
order
)
{
this
.
queryParams
.
orderByColumn
=
column
.
prop
;
this
.
queryParams
.
isAsc
=
column
.
order
;
this
.
getList
()
;
this
.
queryParams
.
orderByColumn
=
column
.
prop
this
.
queryParams
.
isAsc
=
column
.
order
this
.
getList
()
},
/** 修改按钮操作 */
handleEditTable
(
row
)
{
const
tableId
=
row
.
tableId
||
this
.
ids
[
0
]
;
const
tableName
=
row
.
tableName
||
this
.
tableNames
[
0
]
;
const
params
=
{
pageNum
:
this
.
queryParams
.
pageNum
}
;
this
.
$tab
.
openPage
(
"
修改[
"
+
tableName
+
"
]生成配置
"
,
'
/tool/gen-edit/index/
'
+
tableId
,
params
)
;
const
tableId
=
row
.
tableId
||
this
.
ids
[
0
]
const
tableName
=
row
.
tableName
||
this
.
tableNames
[
0
]
const
params
=
{
pageNum
:
this
.
queryParams
.
pageNum
}
this
.
$tab
.
openPage
(
"
修改[
"
+
tableName
+
"
]生成配置
"
,
'
/tool/gen-edit/index/
'
+
tableId
,
params
)
},
/** 删除按钮操作 */
handleDelete
(
row
)
{
const
tableIds
=
row
.
tableId
||
this
.
ids
;
const
tableIds
=
row
.
tableId
||
this
.
ids
this
.
$modal
.
confirm
(
'
是否确认删除表编号为"
'
+
tableIds
+
'
"的数据项?
'
).
then
(
function
()
{
return
delTable
(
tableIds
)
;
return
delTable
(
tableIds
)
}).
then
(()
=>
{
this
.
getList
()
;
this
.
$modal
.
msgSuccess
(
"
删除成功
"
)
;
}).
catch
(()
=>
{})
;
this
.
getList
()
this
.
$modal
.
msgSuccess
(
"
删除成功
"
)
}).
catch
(()
=>
{})
}
}
}
;
}
</
script
>
ruoyi-ui/src/views/tool/swagger/index.vue
View file @
38ed092d
...
...
@@ -2,14 +2,14 @@
<i-frame
:src=
"url"
/>
</
template
>
<
script
>
import
iFrame
from
"
@/components/iFrame/index
"
;
import
iFrame
from
"
@/components/iFrame/index
"
export
default
{
name
:
"
Swagger
"
,
components
:
{
iFrame
},
data
()
{
return
{
url
:
process
.
env
.
VUE_APP_BASE_API
+
"
/swagger-ui/index.html
"
}
;
}
,
}
;
}
}
}
</
script
>
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment