Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
jinli gu
RuoYi Vue
Commits
fef7ead0
Commit
fef7ead0
authored
Dec 16, 2021
by
RuoYi
Browse files
新增Vue3前端代码生成模板
parent
06aef058
Changes
3
Hide whitespace changes
Inline
Side-by-side
ruoyi-generator/src/main/resources/vm/vue/v3/index-tree.vue.vm
0 → 100644
View file @
fef7ead0
<template>
<div
class=
"app-container"
>
<el-form
:model=
"queryParams"
ref=
"queryRef"
:inline=
"true"
v-show=
"showSearch"
label-width=
"68px"
>
#
foreach
($
column
in
$
columns
)
#
if
($
column
.
query
)
#
set
($
dictType
=
$
column
.
dictType
)
#
set
($
AttrName
=
$
column
.
javaField
.
substring
(
0
,
1
).
toUpperCase
()
+
${
column
.
javaField
.
substring
(
1
)})
#
set
($
parentheseIndex
=
$
column
.
columnComment
.
indexOf
(
"("
))
#
if
($
parentheseIndex
!=
-
1
)
#
set
($
comment
=
$
column
.
columnComment
.
substring
(
0
,
$
parentheseIndex
))
#
else
#
set
($
comment
=
$
column
.
columnComment
)
#
end
#
if
($
column
.
htmlType
==
"input"
)
<el-form-item
label=
"
${
comment
}
"
prop=
"
${
column
.
javaField
}
"
>
<el-input
v-model=
"queryParams.
${
column
.
javaField
}
"
placeholder=
"请输入
${
comment
}
"
clearable
size=
"small"
@
keyup.enter=
"handleQuery"
/>
</el-form-item>
#
elseif
(($
column
.
htmlType
==
"select"
||
$
column
.
htmlType
==
"radio"
)
&&
""
!=
$
dictType
)
<el-form-item
label=
"
${
comment
}
"
prop=
"
${
column
.
javaField
}
"
>
<el-select
v-model=
"queryParams.
${
column
.
javaField
}
"
placeholder=
"请选择
${
comment
}
"
clearable
size=
"small"
>
<el-option
v-for=
"dict in
${
dictType
}
"
:key=
"dict.value"
:label=
"dict.label"
:value=
"dict.value"
/>
</el-select>
</el-form-item>
#
elseif
(($
column
.
htmlType
==
"select"
||
$
column
.
htmlType
==
"radio"
)
&&
$
dictType
)
<el-form-item
label=
"
${
comment
}
"
prop=
"
${
column
.
javaField
}
"
>
<el-select
v-model=
"queryParams.
${
column
.
javaField
}
"
placeholder=
"请选择
${
comment
}
"
clearable
size=
"small"
>
<el-option
label=
"请选择字典生成"
value=
""
/>
</el-select>
</el-form-item>
#
elseif
($
column
.
htmlType
==
"datetime"
&&
$
column
.
queryType
!=
"BETWEEN"
)
<el-form-item
label=
"
${
comment
}
"
prop=
"
${
column
.
javaField
}
"
>
<el-date-picker
clearable
size=
"small"
v-model=
"queryParams.
${
column
.
javaField
}
"
type=
"date"
value-format=
"YYYY-MM-DD"
placeholder=
"选择
${
comment
}
"
>
</el-date-picker>
</el-form-item>
#
elseif
($
column
.
htmlType
==
"datetime"
&&
$
column
.
queryType
==
"BETWEEN"
)
<el-form-item
label=
"
${
comment
}
"
>
<el-date-picker
v-model=
"daterange
${
AttrName
}
"
size=
"small"
style=
"width: 240px"
value-format=
"YYYY-MM-DD"
type=
"daterange"
range-separator=
"-"
start-placeholder=
"开始日期"
end-placeholder=
"结束日期"
></el-date-picker>
</el-form-item>
#
end
#
end
#
end
<el-form-item>
<el-button
type=
"primary"
icon=
"Search"
size=
"mini"
@
click=
"handleQuery"
>
搜索
</el-button>
<el-button
icon=
"Refresh"
size=
"mini"
@
click=
"resetQuery"
>
重置
</el-button>
</el-form-item>
</el-form>
<el-row
:gutter=
"10"
class=
"mb8"
>
<el-col
:span=
"1.5"
>
<el-button
type=
"primary"
plain
icon=
"Plus"
size=
"mini"
@
click=
"handleAdd"
v-hasPermi=
"['
${
moduleName
}
:
${
businessName
}
:add']"
>
新增
</el-button>
</el-col>
<right-toolbar
v-model:showSearch=
"showSearch"
@
queryTable=
"getList"
></right-toolbar>
</el-row>
<el-table
v-loading=
"loading"
:data=
"
${
businessName
}
List"
row-key=
"
${
treeCode
}
"
default-expand-all
:tree-props=
"
{
children: 'children', hasChildren: 'hasChildren'}"
>
#
foreach
($
column
in
$
columns
)
#
set
($
javaField
=
$
column
.
javaField
)
#
set
($
parentheseIndex
=
$
column
.
columnComment
.
indexOf
(
"("
))
#
if
($
parentheseIndex
!=
-
1
)
#
set
($
comment
=
$
column
.
columnComment
.
substring
(
0
,
$
parentheseIndex
))
#
else
#
set
($
comment
=
$
column
.
columnComment
)
#
end
#
if
($
column
.
pk
)
#
elseif
($
column
.
list
&&
$
column
.
htmlType
==
"datetime"
)
<el-table-column
label=
"
${
comment
}
"
align=
"center"
prop=
"
${
javaField
}
"
width=
"180"
>
<template
#
default
="
scope
"
>
<span>
{{
parseTime(scope.row.
${
javaField
}
, '
{
y}-
{
m}-
{
d}') }}
</span>
</template>
</el-table-column>
#
elseif
($
column
.
list
&&
""
!=
$
column
.
dictType
)
<el-table-column
label=
"
${
comment
}
"
align=
"center"
prop=
"
${
javaField
}
"
>
<template
#
default
="
scope
"
>
#
if
($
column
.
htmlType
==
"checkbox"
)
<dict-tag
:options=
"
${
column
.
dictType
}
"
:value=
"scope.row.
${
javaField
}
? scope.row.
${
javaField
}
.split(',') : []"
/>
#
else
<dict-tag
:options=
"
${
column
.
dictType
}
"
:value=
"scope.row.
${
javaField
}
"
/>
#
end
</template>
</el-table-column>
#
elseif
($
column
.
list
&&
""
!=
$
javaField
)
#
if
(${
foreach
.
index
}
==
1
)
<el-table-column
label=
"
${
comment
}
"
prop=
"
${
javaField
}
"
/>
#
else
<el-table-column
label=
"
${
comment
}
"
align=
"center"
prop=
"
${
javaField
}
"
/>
#
end
#
end
#
end
<el-table-column
label=
"操作"
align=
"center"
class-name=
"small-padding fixed-width"
>
<template
#
default
="
scope
"
>
<el-button
size=
"mini"
type=
"text"
icon=
"Edit"
@
click=
"handleUpdate(scope.row)"
v-hasPermi=
"['
${
moduleName
}
:
${
businessName
}
:edit']"
>
修改
</el-button>
<el-button
size=
"mini"
type=
"text"
icon=
"Plus"
@
click=
"handleAdd(scope.row)"
v-hasPermi=
"['
${
moduleName
}
:
${
businessName
}
:add']"
>
新增
</el-button>
<el-button
size=
"mini"
type=
"text"
icon=
"Delete"
@
click=
"handleDelete(scope.row)"
v-hasPermi=
"['
${
moduleName
}
:
${
businessName
}
:remove']"
>
删除
</el-button>
</template>
</el-table-column>
</el-table>
<!-- 添加或修改
${
functionName
}
对话框 -->
<el-dialog
:title=
"title"
v-model=
"open"
width=
"500px"
append-to-body
>
<el-form
ref=
"
${
businessName
}
Ref"
:model=
"form"
:rules=
"rules"
label-width=
"80px"
>
#
foreach
($
column
in
$
columns
)
#
set
($
field
=
$
column
.
javaField
)
#
if
($
column
.
insert
&&
!
$
column
.
pk
)
#
if
(($
column
.
usableColumn
)
||
(
!
$
column
.
superColumn
))
#
set
($
parentheseIndex
=
$
column
.
columnComment
.
indexOf
(
"("
))
#
if
($
parentheseIndex
!=
-
1
)
#
set
($
comment
=
$
column
.
columnComment
.
substring
(
0
,
$
parentheseIndex
))
#
else
#
set
($
comment
=
$
column
.
columnComment
)
#
end
#
set
($
dictType
=
$
column
.
dictType
)
#
if
(
""
!=
$
treeParentCode
&&
$
column
.
javaField
==
$
treeParentCode
)
<el-form-item
label=
"
${
comment
}
"
prop=
"
${
treeParentCode
}
"
>
<tree-select
v-model:value=
"form.
${
treeParentCode
}
"
:options=
"
${
businessName
}
Options"
:objMap=
"
{
value: '
${
treeCode
}
', label: '
${
treeName
}
', children: 'children' }"
placeholder=
"请选择
${
comment
}
"
/>
</el-form-item>
#
elseif
($
column
.
htmlType
==
"input"
)
<el-form-item
label=
"
${
comment
}
"
prop=
"
${
field
}
"
>
<el-input
v-model=
"form.
${
field
}
"
placeholder=
"请输入
${
comment
}
"
/>
</el-form-item>
#
elseif
($
column
.
htmlType
==
"imageUpload"
)
<el-form-item
label=
"
${
comment
}
"
>
<imageUpload
v-model=
"form.
${
field
}
"
/>
</el-form-item>
#
elseif
($
column
.
htmlType
==
"fileUpload"
)
<el-form-item
label=
"
${
comment
}
"
>
<fileUpload
v-model=
"form.
${
field
}
"
/>
</el-form-item>
#
elseif
($
column
.
htmlType
==
"editor"
)
<el-form-item
label=
"
${
comment
}
"
>
<editor
v-model=
"form.
${
field
}
"
:min-height=
"192"
/>
</el-form-item>
#
elseif
($
column
.
htmlType
==
"select"
&&
""
!=
$
dictType
)
<el-form-item
label=
"
${
comment
}
"
prop=
"
${
field
}
"
>
<el-select
v-model=
"form.
${
field
}
"
placeholder=
"请选择
${
comment
}
"
>
<el-option
v-for=
"dict in
${
dictType
}
"
:key=
"dict.value"
:label=
"dict.label"
#
if
($
column
.
javaType
==
"Integer"
||
$
column
.
javaType
==
"Long"
)
:value=
"parseInt(dict.value)"
#
else
:value=
"dict.value"
#
end
></el-option>
</el-select>
</el-form-item>
#
elseif
($
column
.
htmlType
==
"select"
&&
$
dictType
)
<el-form-item
label=
"
${
comment
}
"
prop=
"
${
field
}
"
>
<el-select
v-model=
"form.
${
field
}
"
placeholder=
"请选择
${
comment
}
"
>
<el-option
label=
"请选择字典生成"
value=
""
/>
</el-select>
</el-form-item>
#
elseif
($
column
.
htmlType
==
"checkbox"
&&
""
!=
$
dictType
)
<el-form-item
label=
"
${
comment
}
"
>
<el-checkbox-group
v-model=
"form.
${
field
}
"
>
<el-checkbox
v-for=
"dict in
${
dictType
}
"
:key=
"dict.value"
:label=
"dict.value"
>
{{
dict.label}}
</el-checkbox>
</el-checkbox-group>
</el-form-item>
#
elseif
($
column
.
htmlType
==
"checkbox"
&&
$
dictType
)
<el-form-item
label=
"
${
comment
}
"
>
<el-checkbox-group
v-model=
"form.
${
field
}
"
>
<el-checkbox>
请选择字典生成
</el-checkbox>
</el-checkbox-group>
</el-form-item>
#
elseif
($
column
.
htmlType
==
"radio"
&&
""
!=
$
dictType
)
<el-form-item
label=
"
${
comment
}
"
>
<el-radio-group
v-model=
"form.
${
field
}
"
>
<el-radio
v-for=
"dict in
${
dictType
}
"
:key=
"dict.value"
#
if
($
column
.
javaType
==
"Integer"
||
$
column
.
javaType
==
"Long"
)
:label=
"parseInt(dict.value)"
#
else
:label=
"dict.value"
#
end
>
{{
dict.label}}
</el-radio>
</el-radio-group>
</el-form-item>
#
elseif
($
column
.
htmlType
==
"radio"
&&
$
dictType
)
<el-form-item
label=
"
${
comment
}
"
>
<el-radio-group
v-model=
"form.
${
field
}
"
>
<el-radio
label=
"1"
>
请选择字典生成
</el-radio>
</el-radio-group>
</el-form-item>
#
elseif
($
column
.
htmlType
==
"datetime"
)
<el-form-item
label=
"
${
comment
}
"
prop=
"
${
field
}
"
>
<el-date-picker
clearable
size=
"small"
v-model=
"form.
${
field
}
"
type=
"date"
value-format=
"YYYY-MM-DD"
placeholder=
"选择
${
comment
}
"
>
</el-date-picker>
</el-form-item>
#
elseif
($
column
.
htmlType
==
"textarea"
)
<el-form-item
label=
"
${
comment
}
"
prop=
"
${
field
}
"
>
<el-input
v-model=
"form.
${
field
}
"
type=
"textarea"
placeholder=
"请输入内容"
/>
</el-form-item>
#
end
#
end
#
end
#
end
</el-form>
<template
#
footer
>
<div
class=
"dialog-footer"
>
<el-button
type=
"primary"
@
click=
"submitForm"
>
确 定
</el-button>
<el-button
@
click=
"cancel"
>
取 消
</el-button>
</div>
</template>
</el-dialog>
</div>
</template>
<script
setup
name=
"
${
BusinessName
}
"
>
import
{
list
${
BusinessName
},
get
${
BusinessName
},
del
${
BusinessName
},
add
${
BusinessName
},
update
${
BusinessName
}
}
from
"
@/api/
${
moduleName
}
/
${
businessName
}
"
;
const
{
proxy
}
=
getCurrentInstance
();
#
if
(${
dicts
}
!=
''
)
#
set
($
dictsNoSymbol
=
$
dicts
.
replace
(
"'"
,
""
))
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
(
""
);
#
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
([]);
#
end
#
end
const
data
=
reactive
(
{
form
:
{
},
queryParams
:
{
#
foreach
($
column
in
$
columns
)
#
if
($
column
.
query
)
$
column
.
javaField
:
null
#
if
($
foreach
.
count
!=
$
columns
.
size
()),#
end
#
end
#
end
},
rules
:
{
#
foreach
($
column
in
$
columns
)
#
if
($
column
.
required
)
#
set
($
parentheseIndex
=
$
column
.
columnComment
.
indexOf
(
"("
))
#
if
($
parentheseIndex
!=
-
1
)
#
set
($
comment
=
$
column
.
columnComment
.
substring
(
0
,
$
parentheseIndex
))
#
else
#
set
($
comment
=
$
column
.
columnComment
)
#
end
$
column
.
javaField
:
[
{
required
:
true
,
message
:
"
$
comment
不能为空
"
,
trigger
:
#
if
($
column
.
htmlType
==
"select"
)
"
change
"
#
else
"
blur
"
#
end
}
]#
if
($
foreach
.
count
!=
$
columns
.
size
()),#
end
#
end
#
end
}
});
const
{
queryParams
,
form
,
rules
}
=
toRefs
(
data
);
/** 查询
${
functionName
}
列表 */
function
getList
()
{
loading
.
value
=
true
;
#
foreach
($
column
in
$
columns
)
#
if
($
column
.
htmlType
==
"datetime"
&&
$
column
.
queryType
==
"BETWEEN"
)
queryParams
.
value
.
params
=
{
};
#
break
#
end
#
end
#
foreach
($
column
in
$
columns
)
#
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
];
}
#
end
#
end
list
${
BusinessName
}(
queryParams
.
value
).
then
(
response
=>
{
${
businessName
}
List
.
value
=
proxy
.
handleTree
(
response
.
data
,
"
${
treeCode
}
"
,
"
${
treeParentCode
}
"
);
loading
.
value
=
false
;
});
}
/** 查询
${
functionName
}
下拉树结构 */
async
function
getTreeselect
()
{
await
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
);
});
}
// 取消按钮
function
cancel
()
{
open
.
value
=
false
;
reset
();
}
// 表单重置
function
reset
()
{
form
.
value
=
{
#
foreach
($
column
in
$
columns
)
#
if
($
column
.
htmlType
==
"radio"
)
$
column
.
javaField
:
#
if
($
column
.
javaType
==
"Integer"
||
$
column
.
javaType
==
"Long"
)
0
#
else
"
0
"
#
end
#
if
($
foreach
.
count
!=
$
columns
.
size
()),#
end
#
elseif
($
column
.
htmlType
==
"checkbox"
)
$
column
.
javaField
:
[]#
if
($
foreach
.
count
!=
$
columns
.
size
()),#
end
#
else
$
column
.
javaField
:
null
#
if
($
foreach
.
count
!=
$
columns
.
size
()),#
end
#
end
#
end
};
proxy
.
resetForm
(
"
${
businessName
}
Ref
"
);
}
/** 搜索按钮操作 */
function
handleQuery
()
{
getList
();
}
/** 重置按钮操作 */
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
=
[];
#
end
#
end
proxy
.
resetForm
(
"
queryRef
"
);
handleQuery
();
}
/** 新增按钮操作 */
async
function
handleAdd
(
row
)
{
reset
();
await
getTreeselect
();
if
(
row
!=
null
&&
row
.${
treeCode
})
{
form
.
value
.${
treeParentCode
}
=
row
.${
treeCode
};
}
else
{
form
.
value
.${
treeParentCode
}
=
0
;
}
open
.
value
=
true
;
title
.
value
=
"
添加
${
functionName
}
"
;
}
/** 修改按钮操作 */
async
function
handleUpdate
(
row
)
{
reset
();
await
getTreeselect
();
if
(
row
!=
null
)
{
form
.
value
.${
treeParentCode
}
=
row
.${
treeCode
};
}
get
${
BusinessName
}(
row
.${
pkColumn
.
javaField
}).
then
(
response
=>
{
form
.
value
=
response
.
data
;
#
foreach
($
column
in
$
columns
)
#
if
($
column
.
htmlType
==
"checkbox"
)
form
.
value
.$
column
.
javaField
=
form
.
value
.${
column
.
javaField
}.
split
(
"
,
"
);
#
end
#
end
open
.
value
=
true
;
title
.
value
=
"
修改
${
functionName
}
"
;
});
}
/** 提交按钮 */
function
submitForm
()
{
proxy
.
#
[[$]]#
refs
[
"
${
businessName
}
Ref
"
].
validate
(
valid
=>
{
if
(
valid
)
{
#
foreach
($
column
in
$
columns
)
#
if
($
column
.
htmlType
==
"checkbox"
)
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
();
});
}
else
{
add
${
BusinessName
}(
form
.
value
).
then
(
response
=>
{
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
});
}).
then
(()
=>
{
getList
();
proxy
.
#
[[$
modal
]]
#
.
msgSuccess
(
"
删除成功
"
);
}).
catch
(()
=>
{
});
}
getList
();
</script>
ruoyi-generator/src/main/resources/vm/vue/v3/index.vue.vm
0 → 100644
View file @
fef7ead0
<template>
<div
class=
"app-container"
>
<el-form
:model=
"queryParams"
ref=
"queryRef"
:inline=
"true"
v-show=
"showSearch"
label-width=
"68px"
>
#
foreach
($
column
in
$
columns
)
#
if
($
column
.
query
)
#
set
($
dictType
=
$
column
.
dictType
)
#
set
($
AttrName
=
$
column
.
javaField
.
substring
(
0
,
1
).
toUpperCase
()
+
${
column
.
javaField
.
substring
(
1
)})
#
set
($
parentheseIndex
=
$
column
.
columnComment
.
indexOf
(
"("
))
#
if
($
parentheseIndex
!=
-
1
)
#
set
($
comment
=
$
column
.
columnComment
.
substring
(
0
,
$
parentheseIndex
))
#
else
#
set
($
comment
=
$
column
.
columnComment
)
#
end
#
if
($
column
.
htmlType
==
"input"
)
<el-form-item
label=
"
${
comment
}
"
prop=
"
${
column
.
javaField
}
"
>
<el-input
v-model=
"queryParams.
${
column
.
javaField
}
"
placeholder=
"请输入
${
comment
}
"
clearable
size=
"small"
@
keyup.enter=
"handleQuery"
/>
</el-form-item>
#
elseif
(($
column
.
htmlType
==
"select"
||
$
column
.
htmlType
==
"radio"
)
&&
""
!=
$
dictType
)
<el-form-item
label=
"
${
comment
}
"
prop=
"
${
column
.
javaField
}
"
>
<el-select
v-model=
"queryParams.
${
column
.
javaField
}
"
placeholder=
"请选择
${
comment
}
"
clearable
size=
"small"
>
<el-option
v-for=
"dict in
${
dictType
}
"
:key=
"dict.value"
:label=
"dict.label"
:value=
"dict.value"
/>
</el-select>
</el-form-item>
#
elseif
(($
column
.
htmlType
==
"select"
||
$
column
.
htmlType
==
"radio"
)
&&
$
dictType
)
<el-form-item
label=
"
${
comment
}
"
prop=
"
${
column
.
javaField
}
"
>
<el-select
v-model=
"queryParams.
${
column
.
javaField
}
"
placeholder=
"请选择
${
comment
}
"
clearable
size=
"small"
>
<el-option
label=
"请选择字典生成"
value=
""
/>
</el-select>
</el-form-item>
#
elseif
($
column
.
htmlType
==
"datetime"
&&
$
column
.
queryType
!=
"BETWEEN"
)
<el-form-item
label=
"
${
comment
}
"
prop=
"
${
column
.
javaField
}
"
>
<el-date-picker
clearable
size=
"small"
v-model=
"queryParams.
${
column
.
javaField
}
"
type=
"date"
value-format=
"YYYY-MM-DD"
placeholder=
"选择
${
comment
}
"
>
</el-date-picker>
</el-form-item>
#
elseif
($
column
.
htmlType
==
"datetime"
&&
$
column
.
queryType
==
"BETWEEN"
)
<el-form-item
label=
"
${
comment
}
"
>
<el-date-picker
v-model=
"daterange
${
AttrName
}
"
size=
"small"
style=
"width: 240px"
value-format=
"YYYY-MM-DD"
type=
"daterange"
range-separator=
"-"
start-placeholder=
"开始日期"
end-placeholder=
"结束日期"
></el-date-picker>
</el-form-item>
#
end
#
end
#
end
<el-form-item>
<el-button
type=
"primary"
icon=
"Search"
size=
"mini"
@
click=
"handleQuery"
>
搜索
</el-button>
<el-button
icon=
"Refresh"
size=
"mini"
@
click=
"resetQuery"
>
重置
</el-button>
</el-form-item>
</el-form>
<el-row
:gutter=
"10"
class=
"mb8"
>
<el-col
:span=
"1.5"
>
<el-button
type=
"primary"
plain
icon=
"Plus"
size=
"mini"
@
click=
"handleAdd"
v-hasPermi=
"['
${
moduleName
}
:
${
businessName
}
:add']"
>
新增
</el-button>
</el-col>
<el-col
:span=
"1.5"
>
<el-button
type=
"success"
plain
icon=
"Edit"
size=
"mini"
:disabled=
"single"
@
click=
"handleUpdate"
v-hasPermi=
"['
${
moduleName
}
:
${
businessName
}
:edit']"
>
修改
</el-button>
</el-col>
<el-col
:span=
"1.5"
>
<el-button
type=
"danger"
plain
icon=
"Delete"
size=
"mini"
:disabled=
"multiple"
@
click=
"handleDelete"
v-hasPermi=
"['
${
moduleName
}
:
${
businessName
}
:remove']"
>
删除
</el-button>
</el-col>
<el-col
:span=
"1.5"
>
<el-button
type=
"warning"
plain
icon=
"Download"
size=
"mini"
@
click=
"handleExport"
v-hasPermi=
"['
${
moduleName
}
:
${
businessName
}
:export']"
>
导出
</el-button>
</el-col>
<right-toolbar
v-model:showSearch=
"showSearch"
@
queryTable=
"getList"
></right-toolbar>
</el-row>
<el-table
v-loading=
"loading"
:data=
"
${
businessName
}
List"
@
selection-change=
"handleSelectionChange"
>
<el-table-column
type=
"selection"
width=
"55"
align=
"center"
/>
#
foreach
($
column
in
$
columns
)
#
set
($
javaField
=
$
column
.
javaField
)
#
set
($
parentheseIndex
=
$
column
.
columnComment
.
indexOf
(
"("
))
#
if
($
parentheseIndex
!=
-
1
)
#
set
($
comment
=
$
column
.
columnComment
.
substring
(
0
,
$
parentheseIndex
))
#
else
#
set
($
comment
=
$
column
.
columnComment
)
#
end
#
if
($
column
.
pk
)
<el-table-column
label=
"
${
comment
}
"
align=
"center"
prop=
"
${
javaField
}
"
/>
#
elseif
($
column
.
list
&&
$
column
.
htmlType
==
"datetime"
)
<el-table-column
label=
"
${
comment
}
"
align=
"center"
prop=
"
${
javaField
}
"
width=
"180"
>
<template
#
default
="
scope
"
>
<span>
{{
parseTime(scope.row.
${
javaField
}
, '
{
y}-
{
m}-
{
d}') }}
</span>
</template>
</el-table-column>
#
elseif
($
column
.
list
&&
""
!=
$
column
.
dictType
)
<el-table-column
label=
"
${
comment
}
"
align=
"center"
prop=
"
${
javaField
}
"
>
<template
#
default
="
scope
"
>
#
if
($
column
.
htmlType
==
"checkbox"
)
<dict-tag
:options=
"
${
column
.
dictType
}
"
:value=
"scope.row.
${
javaField
}
? scope.row.
${
javaField
}
.split(',') : []"
/>
#
else
<dict-tag
:options=
"
${
column
.
dictType
}
"
:value=
"scope.row.
${
javaField
}
"
/>
#
end
</template>
</el-table-column>
#
elseif
($
column
.
list
&&
""
!=
$
javaField
)
<el-table-column
label=
"
${
comment
}
"
align=
"center"
prop=
"
${
javaField
}
"
/>
#
end
#
end
<el-table-column
label=
"操作"
align=
"center"
class-name=
"small-padding fixed-width"
>
<template
#
default
="
scope
"
>
<el-button
size=
"mini"
type=
"text"
icon=
"Edit"
@
click=
"handleUpdate(scope.row)"
v-hasPermi=
"['
${
moduleName
}
:
${
businessName
}
:edit']"
>
修改
</el-button>
<el-button
size=
"mini"
type=
"text"
icon=
"Delete"
@
click=
"handleDelete(scope.row)"
v-hasPermi=
"['
${
moduleName
}
:
${
businessName
}
:remove']"
>
删除
</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show=
"total>0"
:total=
"total"
v-model:p:page=
"queryParams.pageNum"
v-model:p:limit=
"queryParams.pageSize"
@
pagination=
"getList"
/>
<!-- 添加或修改
${
functionName
}
对话框 -->
<el-dialog
:title=
"title"
v-model=
"open"
width=
"500px"
append-to-body
>
<el-form
ref=
"
${
businessName
}
Ref"
:model=
"form"
:rules=
"rules"
label-width=
"80px"
>
#
foreach
($
column
in
$
columns
)
#
set
($
field
=
$
column
.
javaField
)
#
if
($
column
.
insert
&&
!
$
column
.
pk
)
#
if
(($
column
.
usableColumn
)
||
(
!
$
column
.
superColumn
))
#
set
($
parentheseIndex
=
$
column
.
columnComment
.
indexOf
(
"("
))
#
if
($
parentheseIndex
!=
-
1
)
#
set
($
comment
=
$
column
.
columnComment
.
substring
(
0
,
$
parentheseIndex
))
#
else
#
set
($
comment
=
$
column
.
columnComment
)
#
end
#
set
($
dictType
=
$
column
.
dictType
)
#
if
($
column
.
htmlType
==
"input"
)
<el-form-item
label=
"
${
comment
}
"
prop=
"
${
field
}
"
>
<el-input
v-model=
"form.
${
field
}
"
placeholder=
"请输入
${
comment
}
"
/>
</el-form-item>
#
elseif
($
column
.
htmlType
==
"imageUpload"
)
<el-form-item
label=
"
${
comment
}
"
>
<imageUpload
v-model=
"form.
${
field
}
"
/>
</el-form-item>
#
elseif
($
column
.
htmlType
==
"fileUpload"
)
<el-form-item
label=
"
${
comment
}
"
>
<fileUpload
v-model=
"form.
${
field
}
"
/>
</el-form-item>
#
elseif
($
column
.
htmlType
==
"editor"
)
<el-form-item
label=
"
${
comment
}
"
>
<editor
v-model=
"form.
${
field
}
"
:min-height=
"192"
/>
</el-form-item>
#
elseif
($
column
.
htmlType
==
"select"
&&
""
!=
$
dictType
)
<el-form-item
label=
"
${
comment
}
"
prop=
"
${
field
}
"
>
<el-select
v-model=
"form.
${
field
}
"
placeholder=
"请选择
${
comment
}
"
>
<el-option
v-for=
"dict in
${
dictType
}
"
:key=
"dict.value"
:label=
"dict.label"
#
if
($
column
.
javaType
==
"Integer"
||
$
column
.
javaType
==
"Long"
)
:value=
"parseInt(dict.value)"
#
else
:value=
"dict.value"
#
end
></el-option>
</el-select>
</el-form-item>
#
elseif
($
column
.
htmlType
==
"select"
&&
$
dictType
)
<el-form-item
label=
"
${
comment
}
"
prop=
"
${
field
}
"
>
<el-select
v-model=
"form.
${
field
}
"
placeholder=
"请选择
${
comment
}
"
>
<el-option
label=
"请选择字典生成"
value=
""
/>
</el-select>
</el-form-item>
#
elseif
($
column
.
htmlType
==
"checkbox"
&&
""
!=
$
dictType
)
<el-form-item
label=
"
${
comment
}
"
>
<el-checkbox-group
v-model=
"form.
${
field
}
"
>
<el-checkbox
v-for=
"dict in
${
dictType
}
"
:key=
"dict.value"
:label=
"dict.value"
>
{{
dict.label}}
</el-checkbox>
</el-checkbox-group>
</el-form-item>
#
elseif
($
column
.
htmlType
==
"checkbox"
&&
$
dictType
)
<el-form-item
label=
"
${
comment
}
"
>
<el-checkbox-group
v-model=
"form.
${
field
}
"
>
<el-checkbox>
请选择字典生成
</el-checkbox>
</el-checkbox-group>
</el-form-item>
#
elseif
($
column
.
htmlType
==
"radio"
&&
""
!=
$
dictType
)
<el-form-item
label=
"
${
comment
}
"
>
<el-radio-group
v-model=
"form.
${
field
}
"
>
<el-radio
v-for=
"dict in
${
dictType
}
"
:key=
"dict.value"
#
if
($
column
.
javaType
==
"Integer"
||
$
column
.
javaType
==
"Long"
)
:label=
"parseInt(dict.value)"
#
else
:label=
"dict.value"
#
end
>
{{
dict.label}}
</el-radio>
</el-radio-group>
</el-form-item>
#
elseif
($
column
.
htmlType
==
"radio"
&&
$
dictType
)
<el-form-item
label=
"
${
comment
}
"
>
<el-radio-group
v-model=
"form.
${
field
}
"
>
<el-radio
label=
"1"
>
请选择字典生成
</el-radio>
</el-radio-group>
</el-form-item>
#
elseif
($
column
.
htmlType
==
"datetime"
)
<el-form-item
label=
"
${
comment
}
"
prop=
"
${
field
}
"
>
<el-date-picker
clearable
size=
"small"
v-model=
"form.
${
field
}
"
type=
"date"
value-format=
"YYYY-MM-DD"
placeholder=
"选择
${
comment
}
"
>
</el-date-picker>
</el-form-item>
#
elseif
($
column
.
htmlType
==
"textarea"
)
<el-form-item
label=
"
${
comment
}
"
prop=
"
${
field
}
"
>
<el-input
v-model=
"form.
${
field
}
"
type=
"textarea"
placeholder=
"请输入内容"
/>
</el-form-item>
#
end
#
end
#
end
#
end
#
if
($
table
.
sub
)
<el-divider
content-position=
"center"
>
${
subTable
.
functionName
}
信息
</el-divider>
<el-row
:gutter=
"10"
class=
"mb8"
>
<el-col
:span=
"1.5"
>
<el-button
type=
"primary"
icon=
"Plus"
size=
"mini"
@
click=
"handleAdd
${
subClassName
}
"
>
添加
</el-button>
</el-col>
<el-col
:span=
"1.5"
>
<el-button
type=
"danger"
icon=
"Delete"
size=
"mini"
@
click=
"handleDelete
${
subClassName
}
"
>
删除
</el-button>
</el-col>
</el-row>
<el-table
:data=
"
${
subclassName
}
List"
:row-class-name=
"row
${
subClassName
}
Index"
@
selection-change=
"handle
${
subClassName
}
SelectionChange"
ref=
"
${
subclassName
}
"
>
<el-table-column
type=
"selection"
width=
"50"
align=
"center"
/>
<el-table-column
label=
"序号"
align=
"center"
prop=
"index"
width=
"50"
/>
#
foreach
($
column
in
$
subTable
.
columns
)
#
set
($
javaField
=
$
column
.
javaField
)
#
set
($
parentheseIndex
=
$
column
.
columnComment
.
indexOf
(
"("
))
#
if
($
parentheseIndex
!=
-
1
)
#
set
($
comment
=
$
column
.
columnComment
.
substring
(
0
,
$
parentheseIndex
))
#
else
#
set
($
comment
=
$
column
.
columnComment
)
#
end
#
if
($
column
.
pk
||
$
javaField
==
${
subTableFkclassName
})
#
elseif
($
column
.
list
&&
""
!=
$
javaField
)
<el-table-column
label=
"
$
comment
"
prop=
"
${
javaField
}
"
>
<template
#
default
="
scope
"
>
<el-input
v-model=
"scope.row.
$
javaField
"
placeholder=
"请输入
$
comment
"
/>
</template>
</el-table-column>
#
end
#
end
</el-table>
#
end
</el-form>
<template
#
footer
>
<div
class=
"dialog-footer"
>
<el-button
type=
"primary"
@
click=
"submitForm"
>
确 定
</el-button>
<el-button
@
click=
"cancel"
>
取 消
</el-button>
</div>
</template>
</el-dialog>
</div>
</template>
<script
setup
name=
"
${
BusinessName
}
"
>
import
{
list
${
BusinessName
},
get
${
BusinessName
},
del
${
BusinessName
},
add
${
BusinessName
},
update
${
BusinessName
}
}
from
"
@/api/
${
moduleName
}
/
${
businessName
}
"
;
const
{
proxy
}
=
getCurrentInstance
();
#
if
(${
dicts
}
!=
''
)
#
set
($
dictsNoSymbol
=
$
dicts
.
replace
(
"'"
,
""
))
const
{
${
dictsNoSymbol
}
}
=
proxy
.
useDict
(${
dicts
});
#
end
const
${
businessName
}
List
=
ref
([]);
#
if
($
table
.
sub
)
const
${
subclassName
}
List
=
ref
([]);
#
end
const
open
=
ref
(
false
);
const
loading
=
ref
(
true
);
const
showSearch
=
ref
(
true
);
const
ids
=
ref
([]);
#
if
($
table
.
sub
)
const
checked
${
subClassName
}
=
ref
([]);
#
end
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
([]);
#
end
#
end
const
data
=
reactive
(
{
form
:
{
},
queryParams
:
{
pageNum
:
1
,
pageSize
:
10
,
#
foreach
($
column
in
$
columns
)
#
if
($
column
.
query
)
$
column
.
javaField
:
null
#
if
($
foreach
.
count
!=
$
columns
.
size
()),#
end
#
end
#
end
},
rules
:
{
#
foreach
($
column
in
$
columns
)
#
if
($
column
.
required
)
#
set
($
parentheseIndex
=
$
column
.
columnComment
.
indexOf
(
"("
))
#
if
($
parentheseIndex
!=
-
1
)
#
set
($
comment
=
$
column
.
columnComment
.
substring
(
0
,
$
parentheseIndex
))
#
else
#
set
($
comment
=
$
column
.
columnComment
)
#
end
$
column
.
javaField
:
[
{
required
:
true
,
message
:
"
$
comment
不能为空
"
,
trigger
:
#
if
($
column
.
htmlType
==
"select"
)
"
change
"
#
else
"
blur
"
#
end
}
]#
if
($
foreach
.
count
!=
$
columns
.
size
()),#
end
#
end
#
end
}
});
const
{
queryParams
,
form
,
rules
}
=
toRefs
(
data
);
/** 查询
${
functionName
}
列表 */
function
getList
()
{
loading
.
value
=
true
;
#
foreach
($
column
in
$
columns
)
#
if
($
column
.
htmlType
==
"datetime"
&&
$
column
.
queryType
==
"BETWEEN"
)
queryParams
.
value
.
params
=
{
};
#
break
#
end
#
end
#
foreach
($
column
in
$
columns
)
#
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
];
}
#
end
#
end
list
${
BusinessName
}(
queryParams
.
value
).
then
(
response
=>
{
${
businessName
}
List
.
value
=
response
.
rows
;
total
.
value
=
response
.
total
;
loading
.
value
=
false
;
});
}
// 取消按钮
function
cancel
()
{
open
.
value
=
false
;
reset
();
}
// 表单重置
function
reset
()
{
form
.
value
=
{
#
foreach
($
column
in
$
columns
)
#
if
($
column
.
htmlType
==
"radio"
)
$
column
.
javaField
:
#
if
($
column
.
javaType
==
"Integer"
||
$
column
.
javaType
==
"Long"
)
0
#
else
"
0
"
#
end
#
if
($
foreach
.
count
!=
$
columns
.
size
()),#
end
#
elseif
($
column
.
htmlType
==
"checkbox"
)
$
column
.
javaField
:
[]#
if
($
foreach
.
count
!=
$
columns
.
size
()),#
end
#
else
$
column
.
javaField
:
null
#
if
($
foreach
.
count
!=
$
columns
.
size
()),#
end
#
end
#
end
};
#
if
($
table
.
sub
)
${
subclassName
}
List
.
value
=
[];
#
end
proxy
.
resetForm
(
"
${
businessName
}
Ref
"
);
}
/** 搜索按钮操作 */
function
handleQuery
()
{
queryParams
.
value
.
pageNum
=
1
;
getList
();
}
/** 重置按钮操作 */
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
=
[];
#
end
#
end
proxy
.
resetForm
(
"
queryRef
"
);
handleQuery
();
}
// 多选框选中数据
function
handleSelectionChange
(
selection
)
{
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
}
"
;
}
/** 修改按钮操作 */
function
handleUpdate
(
row
)
{
reset
();
const
${
pkColumn
.
javaField
}
=
row
.${
pkColumn
.
javaField
}
||
ids
.
value
get
${
BusinessName
}(${
pkColumn
.
javaField
}).
then
(
response
=>
{
form
.
value
=
response
.
data
;
#
foreach
($
column
in
$
columns
)
#
if
($
column
.
htmlType
==
"checkbox"
)
form
.
value
.$
column
.
javaField
=
form
.
value
.${
column
.
javaField
}.
split
(
"
,
"
);
#
end
#
end
#
if
($
table
.
sub
)
${
subclassName
}
List
.
value
=
response
.
data
.${
subclassName
}
List
;
#
end
open
.
value
=
true
;
title
.
value
=
"
修改
${
functionName
}
"
;
});
}
/** 提交按钮 */
function
submitForm
()
{
proxy
.
#
[[$]]#
refs
[
"
${
businessName
}
Ref
"
].
validate
(
valid
=>
{
if
(
valid
)
{
#
foreach
($
column
in
$
columns
)
#
if
($
column
.
htmlType
==
"checkbox"
)
form
.
value
.$
column
.
javaField
=
form
.
value
.${
column
.
javaField
}.
join
(
"
,
"
);
#
end
#
end
#
if
($
table
.
sub
)
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
();
});
}
else
{
add
${
BusinessName
}(
form
.
value
).
then
(
response
=>
{
proxy
.
#
[[$
modal
]]
#
.
msgSuccess
(
"
新增成功
"
);
open
.
value
=
false
;
getList
();
});
}
}
});
}
/** 删除按钮操作 */
function
handleDelete
(
row
)
{
const
${
pkColumn
.
javaField
}
s
=
row
.${
pkColumn
.
javaField
}
||
ids
.
value
;
proxy
.
#
[[$
modal
]]
#
.
confirm
(
'
是否确认删除
${
functionName
}
编号为"
'
+
${
pkColumn
.
javaField
}
s
+
'
"的数据项?
'
).
then
(
function
()
{
return
del
${
BusinessName
}(${
pkColumn
.
javaField
}
s
);
}).
then
(()
=>
{
getList
();
proxy
.
#
[[$
modal
]]
#
.
msgSuccess
(
"
删除成功
"
);
}).
catch
(()
=>
{
});
}
#
if
($
table
.
sub
)
/**
${
subTable
.
functionName
}
序号 */
function
row
${
subClassName
}
Index
(
{
row
,
rowIndex
})
{
row
.
index
=
rowIndex
+
1
;
}
/**
${
subTable
.
functionName
}
添加按钮操作 */
function
handleAdd
${
subClassName
}()
{
let
obj
=
{
};
#
foreach
($
column
in
$
subTable
.
columns
)
#
if
($
column
.
pk
||
$
column
.
javaField
==
${
subTableFkclassName
})
#
elseif
($
column
.
list
&&
""
!=
$
javaField
)
obj
.$
column
.
javaField
=
""
;
#
end
#
end
${
subclassName
}
List
.
value
.
push
(
obj
);
}
/**
${
subTable
.
functionName
}
删除按钮操作 */
function
handleDelete
${
subClassName
}()
{
if
(
checked
${
subClassName
}.
value
.
length
==
0
)
{
proxy
.
#
[[$
modal
]]
#
.
msgError
(
"
请先选择要删除的
${
subTable
.
functionName
}
数据
"
);
}
else
{
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
});
}
}
/** 复选框选中数据 */
function
handle
${
subClassName
}
SelectionChange
(
selection
)
{
checked
${
subClassName
}.
value
=
selection
.
map
(
item
=>
item
.
index
)
}
#
end
/** 导出按钮操作 */
function
handleExport
()
{
proxy
.
download
(
'
${
moduleName
}
/
${
businessName
}
/export
'
,
{
...
queryParams
.
value
},
`
${
businessName
}
_
#
[[
${
new
Date().getTime()}]]
#
.xlsx`
)
}
getList
();
</script>
ruoyi-generator/src/main/resources/vm/vue/v3/readme.txt
0 → 100644
View file @
fef7ead0
如果使用的是RuoYi-Vue3前端,那么需要覆盖一下此目录的模板index.vue.vm、index-tree.vue.vm文件到上级vue目录。
\ No newline at end of file
Write
Preview
Supports
Markdown
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