Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
D
device-platform
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
赵啸非
device-platform
Commits
6da4d277
Commit
6da4d277
authored
Apr 08, 2022
by
赵啸非
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
修改pom文件
parent
97780abe
Changes
13
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
2356 additions
and
0 deletions
+2356
-0
device-manager-ui/admin/.env.stage
device-manager-ui/admin/.env.stage
+9
-0
device-manager-ui/admin/src/assets/utils/export2vmFunction.js
...ce-manager-ui/admin/src/assets/utils/export2vmFunction.js
+39
-0
device-manager-ui/admin/src/views/system/menu/dialogshow.vue
device-manager-ui/admin/src/views/system/menu/dialogshow.vue
+228
-0
device-manager-ui/admin/src/views/system/param/dialogshow.vue
...ce-manager-ui/admin/src/views/system/param/dialogshow.vue
+141
-0
device-manager-ui/admin/src/views/system/resource/dialogshow.vue
...manager-ui/admin/src/views/system/resource/dialogshow.vue
+201
-0
device-manager-ui/admin/src/views/system/role/dialogshow.vue
device-manager-ui/admin/src/views/system/role/dialogshow.vue
+126
-0
device-manager-ui/admin/src/views/system/site/dialogshow.vue
device-manager-ui/admin/src/views/system/site/dialogshow.vue
+218
-0
device-manager-ui/admin/src/views/system/site/dialogshowbak.vue
...-manager-ui/admin/src/views/system/site/dialogshowbak.vue
+196
-0
device-manager-ui/admin/src/views/system/site/indexbak.vue
device-manager-ui/admin/src/views/system/site/indexbak.vue
+482
-0
device-manager-ui/admin/src/views/system/site/indexbak1.vue
device-manager-ui/admin/src/views/system/site/indexbak1.vue
+139
-0
device-manager-ui/admin/src/views/system/site/list.vue
device-manager-ui/admin/src/views/system/site/list.vue
+205
-0
device-manager-ui/admin/src/views/system/task/dialogshow.vue
device-manager-ui/admin/src/views/system/task/dialogshow.vue
+178
-0
device-manager-ui/admin/src/views/system/user/dialogshow.vue
device-manager-ui/admin/src/views/system/user/dialogshow.vue
+194
-0
No files found.
device-manager-ui/admin/.env.stage
0 → 100644
View file @
6da4d277
# 测试环境配置
NODE_ENV = 'production'
# 地址
VUE_APP_BASE_API = http://192.168.0.98:11021/m
# websocket地址
VUE_APP_WEBSOCKET_API =192.168.0.98:18211/m
device-manager-ui/admin/src/assets/utils/export2vmFunction.js
0 → 100644
View file @
6da4d277
exports
.
install
=
function
(
Vue
)
{
// 把需要暴露出去的方法挂载到Vue原型上,避免了全局变量过多的问题
Vue
.
prototype
.
refreshData
=
function
()
{
console
.
log
(
"
刷新设备列表
"
)
const
component
=
findComponentDownward
(
this
,
'
Device
'
)
console
.
log
(
"
component
"
,
component
)
if
(
component
){
component
.
getData
()
}
}
}
/**
* 由一个组件,向下找到最近的指定组件
* @param {*} context 当前上下文,比如你要基于哪个组件来向上寻找,一般都是基于当前的组件,也就是传入 this
* @param {*} componentName 要找的组件的 name
*/
function
findComponentDownward
(
context
,
componentName
)
{
const
childrens
=
context
.
$children
let
children
=
null
if
(
childrens
.
length
)
{
for
(
const
child
of
childrens
)
{
const
name
=
child
.
$options
.
name
if
(
name
===
componentName
)
{
children
=
child
break
}
else
{
children
=
findComponentDownward
(
child
,
componentName
)
if
(
children
)
break
}
}
}
return
children
}
\ No newline at end of file
device-manager-ui/admin/src/views/system/menu/dialogshow.vue
0 → 100644
View file @
6da4d277
// 添加,编辑设备
<
template
>
<!-- 弹出框表单 -->
<el-dialog
:title=
"title"
:visible.sync=
"open"
width=
"35%"
append-to-body
>
<el-form
ref=
"form"
:model=
"form"
:rules=
"rules"
label-width=
"110px"
label-position=
"right"
>
<el-row>
<Field
:span=
"22"
label=
"ID"
prop=
"id"
v-model=
"form.id"
v-if=
"pageInfo.type !== 'add'"
disabled
/>
<Field
:span=
"22"
label=
"名称"
prop=
"name"
v-model=
"form.name"
/>
<Field
:span=
"22"
label=
"权限类型"
prop=
"authType"
v-model=
"form.authType"
:enumData=
"dict.authType"
type=
"select"
/>
<Field
:span=
"22"
label=
"父级菜单"
prop=
"parentId"
v-model=
"form.parentId"
:enumData=
"menu"
type=
"select"
/>
<Field
:span=
"22"
label=
"访问地址"
prop=
"url"
v-model=
"form.url"
/>
<Field
:span=
"22"
label=
"状态"
prop=
"status"
v-model=
"form.status"
:enumData=
"dict.status"
type=
"radio"
/>
<Field
:span=
"22"
label=
"图标"
placeholder=
"请输入图标名称"
prop=
"imgPath"
v-model=
"form.imgPath"
/>
<!--
<Field
v-else
:span=
"22"
label=
"图标"
prop=
"imgPath"
>
<el-radio-group
v-model=
"form.imgPath"
class=
"form-el-radio-group"
>
<el-radio-button
label=
""
>
不需要图标
</el-radio-button>
<el-radio-button
v-for=
"(icon, index) in icons"
:key=
"index"
:label=
"icon"
>
<i
:class=
"'el-icon-' + icon"
></i>
{{
icon
}}
</el-radio-button>
</el-radio-group>
</Field>
-->
</el-row>
</el-form>
<div
slot=
"footer"
class=
"dialog-footer"
>
<el-button
type=
"primary"
v-if=
"pageInfo.type !== 'view'"
@
click=
"submitForm"
>
确 定
</el-button
>
<el-button
@
click=
"cancel"
>
取 消
</el-button>
</div>
</el-dialog>
</
template
>
<
script
>
import
form
from
"
@/assets/mixins/formdialog
"
;
import
dialogShow
from
"
./dialogshow
"
;
export
default
{
mixins
:
[
form
],
components
:
{
dialogShow
,
},
computed
:
{
menu
()
{
let
menu
=
{
0
:
"
无
"
};
this
.
$store
.
state
.
userData
.
barList
.
forEach
((
item
)
=>
{
menu
[
item
.
id
+
""
]
=
item
.
name
;
});
return
menu
;
},
},
methods
:
{
afterSubmit
()
{
this
.
$store
.
dispatch
(
"
login
"
);
this
.
$router
.
go
(
-
1
);
},
/** 编辑 */
edit
(
row
)
{
this
.
reset
();
this
.
query
=
{
id
:
row
.
id
};
this
.
urls
.
currUrl
=
this
.
pageInfo
.
editUrl
;
this
.
getData
();
this
.
pageInfo
.
type
=
"
edit
"
;
this
.
title
=
"
修改菜单
"
;
},
/** 新增 */
add
(
row
)
{
this
.
reset
();
this
.
query
=
{
id
:
row
.
id
};
this
.
urls
.
currUrl
=
this
.
pageInfo
.
addUrl
;
this
.
getData
();
this
.
pageInfo
.
type
=
"
add
"
;
this
.
open
=
true
;
this
.
title
=
"
新增菜单
"
;
},
/** 查看*/
view
(
row
)
{
this
.
reset
();
this
.
query
=
{
id
:
row
.
id
};
this
.
urls
.
currUrl
=
this
.
pageInfo
.
viewUrl
;
this
.
getData
();
this
.
pageInfo
.
type
=
"
view
"
;
this
.
open
=
true
;
this
.
title
=
"
菜单详细
"
;
},
/**取消按钮 */
cancel
()
{
this
.
open
=
false
;
},
/**获取数据后弹框 */
afterRender
(
data
)
{
this
.
open
=
true
;
},
afterSubmit
(
data
)
{
this
.
open
=
false
;
this
.
$emit
(
"
ok
"
);
},
// 表单重置
reset
()
{
// this.form={}
this
.
resetForm
(
"
form
"
);
},
resetForm
(
refName
)
{
if
(
this
.
$refs
[
refName
])
{
this
.
$refs
[
refName
].
resetFields
();
}
},
},
data
()
{
return
{
// 遮罩层
loading
:
true
,
// 弹出层标题
title
:
"
菜单
"
,
// 是否显示弹出层
open
:
false
,
toString
:
[
"
parentId
"
,
"
authType
"
,
"
status
"
],
icons
:
[
"
info
"
,
"
error
"
,
"
success
"
,
"
warning
"
,
"
question
"
,
"
tickets
"
,
"
document
"
,
"
goods
"
,
"
sold-out
"
,
"
news
"
,
"
message
"
,
"
date
"
,
"
printer
"
,
"
time
"
,
"
bell
"
,
"
mobile-phone
"
,
"
service
"
,
"
view
"
,
"
menu
"
,
"
star-on
"
,
"
location
"
,
"
phone
"
,
"
picture
"
,
"
delete
"
,
"
search
"
,
"
edit
"
,
"
rank
"
,
"
refresh
"
,
"
share
"
,
"
setting
"
,
"
upload
"
,
"
upload2
"
,
"
download
"
,
"
loading
"
,
"
reading
"
,
],
rules
:
{
name
:
[{
required
:
true
,
message
:
"
请输入名称
"
,
trigger
:
"
blur
"
}],
},
};
},
};
</
script
>
<
style
lang=
"less"
>
.el-select {
width: 100%;
}
.el-date-editor.el-input {
width: 100%;
}
.form-el-radio-group.label {
width: 160px;
}
.el-radio-button__inner {
border: 0;
}
</
style
>
device-manager-ui/admin/src/views/system/param/dialogshow.vue
0 → 100644
View file @
6da4d277
<
template
>
<!-- 弹出框表单 -->
<el-dialog
:title=
"title"
:visible.sync=
"open"
width=
"70%"
append-to-body
>
<el-form
:model=
"form"
:rules=
"rules"
size=
"small"
label-width=
"100px"
ref=
"form"
>
<el-row>
<Field
label=
"参数名称"
prop=
"name"
v-model=
"form.name"
/>
<Field
label=
"一级组织"
prop=
"firstOrganize"
v-model=
"form.firstOrganize"
/>
<Field
label=
"二级组织"
prop=
"secondOrganize"
v-model=
"form.secondOrganize"
/>
<Field
label=
"参数有效状态"
prop=
"validStatus"
v-model=
"form.validStatus"
:enumData=
"dict.validStatus"
type=
"select"
/>
<Field
label=
"参数修改状态"
prop=
"modStatus"
v-model=
"form.modStatus"
:enumData=
"dict.modStatus"
type=
"select"
/>
<Field
label=
"展现类型"
prop=
"displayType"
v-model=
"form.displayType"
:enumData=
"dict.displayType"
type=
"select"
/>
<Field
label=
"参数键"
prop=
"paramKey"
v-model=
"form.paramKey"
:span=
"24"
/>
<Field
label=
"参数值"
prop=
"paramValue"
v-model=
"form.paramValue"
:span=
"24"
type=
"textarea"
/>
<Field
label=
"备注"
prop=
"remark"
v-model=
"form.remark"
:span=
"24"
/>
</el-row>
</el-form>
<div
slot=
"footer"
class=
"dialog-footer"
>
<el-button
type=
"primary"
@
click=
"submitForm"
>
确 定
</el-button>
<el-button
@
click=
"cancel"
>
取 消
</el-button>
</div>
</el-dialog>
</
template
>
<
script
>
import
form
from
"
@/assets/mixins/form
"
;
export
default
{
mixins
:
[
form
],
data
()
{
return
{
// 遮罩层
loading
:
true
,
// 弹出层标题
title
:
"
站点信息
"
,
// 是否显示弹出层
open
:
false
,
toString
:
[
"
validStatus
"
,
"
modStatus
"
,
"
displayType
"
],
rules
:
{
name
:
[{
required
:
true
,
message
:
"
请输入参数名称
"
,
trigger
:
"
blur
"
}],
paramKey
:
[{
required
:
true
,
message
:
"
请输入参数键
"
,
trigger
:
"
blur
"
}],
paramValue
:
[{
required
:
true
,
message
:
"
请输入参数值
"
,
trigger
:
"
blur
"
}],
},
};
},
methods
:
{
/** 编辑 */
edit
(
row
)
{
this
.
reset
();
this
.
query
=
{
id
:
row
.
id
};
this
.
urls
.
currUrl
=
this
.
pageInfo
.
editUrl
;
this
.
getData
();
this
.
open
=
true
;
this
.
title
=
"
修改站点信息
"
;
},
/** 新增 */
add
(
row
)
{
this
.
reset
();
this
.
query
=
{
id
:
row
.
id
};
this
.
urls
.
currUrl
=
this
.
pageInfo
.
addUrl
;
this
.
getData
();
this
.
open
=
true
;
this
.
title
=
"
新增站点信息
"
;
},
/** 查看*/
view
(
row
)
{
this
.
reset
();
this
.
query
=
{
id
:
row
.
id
};
this
.
urls
.
currUrl
=
this
.
pageInfo
.
viewUrl
;
this
.
getData
();
this
.
open
=
true
;
this
.
title
=
"
站点信息详细
"
;
},
/**取消按钮 */
cancel
()
{
this
.
reset
();
this
.
open
=
false
;
},
afterSubmit
(
data
)
{
this
.
open
=
false
;
this
.
$emit
(
"
ok
"
);
},
// 表单重置
reset
()
{
this
.
form
=
{
};
this
.
resetForm
(
"
form
"
);
},
resetForm
(
refName
)
{
if
(
this
.
$refs
[
refName
])
{
this
.
$refs
[
refName
].
resetFields
();
}
},
},
};
</
script
>
device-manager-ui/admin/src/views/system/resource/dialogshow.vue
0 → 100644
View file @
6da4d277
<
template
>
<!-- 弹出框表单 -->
<el-dialog
:title=
"title"
:visible.sync=
"open"
width=
"40%"
append-to-body
>
<el-form
ref=
"form"
:model=
"form"
:rules=
"rules"
label-width=
"110px"
label-position=
"right"
>
<el-row>
<Field
:span=
"20"
label=
"名称"
prop=
"name"
v-model=
"form.name"
/>
<Field
:span=
"20"
label=
"权限类型"
prop=
"authType"
v-model=
"form.authType"
:enumData=
"dict.authType"
type=
"select"
/>
<!--
<Field
label=
"用户类型"
prop=
"userType"
v-model=
"form.userType"
:enumData=
'dict.userType'
type=
'select'
/>
-->
<Field
label=
"链接地址"
prop=
"url"
:span=
"20"
>
<el-button
icon=
"el-icon-plus"
circle
size=
"mini"
@
click=
"addResource"
v-if=
"!form.urls.length"
></el-button>
<el-row
v-for=
"(url, index) in form.urls"
:key=
"index"
style=
"width: 400px"
>
<el-col
:span=
"16"
>
<el-form-item
label-width=
"0"
:prop=
"'urls.' + index + '.value'"
:rules=
"[
{ required: true, message: '地址不能为空', trigger: 'blur' },
{ validator: validatorUrl, trigger: 'blur' },
]"
>
<el-input
size=
"mini"
v-model=
"url.value"
></el-input>
</el-form-item>
</el-col>
<el-col
:span=
"8"
>
<el-button
icon=
"el-icon-minus"
circle
size=
"mini"
@
click=
"del(index)"
></el-button>
<el-button
icon=
"el-icon-plus"
circle
size=
"mini"
@
click=
"addResource"
v-if=
"index === form.urls.length - 1"
></el-button>
</el-col>
</el-row>
</Field>
</el-row>
</el-form>
<div
slot=
"footer"
class=
"dialog-footer"
>
<el-button
type=
"primary"
v-if=
"pageInfo.type !== 'view'"
@
click=
"submitForm"
>
确 定
</el-button
>
<el-button
@
click=
"cancel"
>
取 消
</el-button>
</div>
</el-dialog>
</
template
>
<
script
>
import
form
from
"
@/assets/mixins/formdialog
"
;
import
dialogShow
from
"
./dialogshow
"
;
import
FormButtons
from
"
@/components/tools/FormButtons
"
;
export
default
{
mixins
:
[
form
],
components
:
{
dialogShow
,
FormButtons
,
},
methods
:
{
beforeRender
(
data
)
{
data
.
entity
.
urls
=
(
data
.
entity
.
url
||
""
).
split
(
"
,
"
).
map
((
i
)
=>
{
return
{
value
:
i
};
});
return
data
;
},
beforeSubmit
(
form
)
{
form
.
url
=
this
.
form
.
urls
.
map
((
item
)
=>
item
.
value
).
join
(
"
,
"
);
return
form
;
},
del
(
index
)
{
this
.
form
.
urls
.
splice
(
index
,
1
);
},
addResource
(
index
)
{
const
urls
=
this
.
form
.
urls
;
const
values
=
urls
.
map
((
i
)
=>
i
.
value
);
// 新增前检查前方是否有空行
if
(
urls
.
some
((
i
)
=>
!
i
.
value
))
{
return
this
.
$message
.
warning
(
"
请先完成上一个地址的填写
"
);
}
urls
.
push
({
value
:
""
});
console
.
log
(
"
urls
"
,
urls
);
},
isRepeat
(
value
)
{
return
this
.
form
.
urls
.
filter
((
i
)
=>
value
==
i
.
value
).
length
>
1
;
},
validatorUrl
(
rule
,
value
,
cb
)
{
if
(
this
.
isRepeat
(
value
))
{
return
cb
(
new
Error
(
`重复的url地址`
));
}
cb
();
},
/** 编辑 */
edit
(
row
)
{
this
.
reset
();
this
.
query
=
{
id
:
row
.
id
};
this
.
urls
.
currUrl
=
this
.
pageInfo
.
editUrl
;
this
.
getData
();
this
.
pageInfo
.
type
=
"
edit
"
;
this
.
title
=
"
修改资源
"
;
},
/** 新增 */
add
(
row
)
{
this
.
reset
();
this
.
query
=
{
id
:
row
.
id
};
this
.
urls
.
currUrl
=
this
.
pageInfo
.
addUrl
;
this
.
getData
();
this
.
pageInfo
.
type
=
"
add
"
;
this
.
title
=
"
新增资源
"
;
},
/** 查看*/
view
(
row
)
{
this
.
reset
();
this
.
query
=
{
id
:
row
.
id
};
this
.
urls
.
currUrl
=
this
.
pageInfo
.
viewUrl
;
this
.
getData
();
this
.
pageInfo
.
type
=
"
view
"
;
this
.
title
=
"
资源详细
"
;
},
/**取消按钮 */
cancel
()
{
this
.
open
=
false
;
},
/**获取数据后弹框 */
afterRender
(
data
)
{
// this.form.urls = (data.entity.url || "").split(",").map((i) => {
// return { value: i };
// });
this
.
open
=
true
;
},
afterSubmit
(
data
)
{
this
.
open
=
false
;
this
.
$emit
(
"
ok
"
);
},
// 表单重置
reset
()
{
this
.
form
=
{
urls
:
[],
};
//this.resetForm("form");
},
resetForm
(
refName
)
{
if
(
this
.
$refs
[
refName
])
{
this
.
$refs
[
refName
].
resetFields
();
}
},
},
data
()
{
return
{
// 遮罩层
loading
:
true
,
// 弹出层标题
title
:
"
资源
"
,
// 是否显示弹出层
open
:
false
,
toString
:
[
"
userType
"
,
"
authType
"
],
form
:
{
urls
:
[],
},
rules
:
{
name
:
[{
required
:
true
,
message
:
"
请输入名称
"
,
trigger
:
"
blur
"
}],
},
};
},
};
</
script
>
device-manager-ui/admin/src/views/system/role/dialogshow.vue
0 → 100644
View file @
6da4d277
<
template
>
<!-- 弹出框表单 -->
<el-dialog
:title=
"title"
:visible.sync=
"open"
width=
"40%"
append-to-body
>
<el-form
ref=
"form"
:model=
"form"
:rules=
"rules"
label-width=
"110px"
label-position=
"right"
>
<el-row>
<Field
:span=
"20"
label=
"角色名"
prop=
"name"
v-model=
"form.name"
/>
<!--
<Field
:span=
"20"
label=
"角色类型"
prop=
"roleType"
v-model=
"form.roleType"
:enumData=
"dict.roleType"
type=
"select"
/>
-->
<Field
label=
"备注"
prop=
"remark"
v-model=
"form.remark"
type=
"textarea"
:span=
"20"
/>
</el-row>
</el-form>
<div
slot=
"footer"
class=
"dialog-footer"
>
<el-button
type=
"primary"
v-if=
"pageInfo.type !== 'view'"
@
click=
"submitForm"
>
确 定
</el-button
>
<el-button
@
click=
"cancel"
>
取 消
</el-button>
</div>
</el-dialog>
</
template
>
<
script
>
import
form
from
"
@/assets/mixins/formdialog
"
;
import
dialogShow
from
"
./dialogshow
"
;
export
default
{
mixins
:
[
form
],
components
:
{
dialogShow
,
},
data
()
{
return
{
// 遮罩层
loading
:
true
,
// 弹出层标题
title
:
"
用户
"
,
// 是否显示弹出层
open
:
false
,
toString
:
[
"
roleType
"
],
rules
:
{
name
:
[{
required
:
true
,
message
:
"
请输入名称
"
,
trigger
:
"
blur
"
}],
roleType
:
[
{
required
:
true
,
message
:
"
请选择用户类型
"
,
trigger
:
"
blur
"
},
],
},
};
},
methods
:
{
/** 编辑 */
edit
(
row
)
{
this
.
reset
();
this
.
query
=
{
id
:
row
.
id
};
this
.
urls
.
currUrl
=
this
.
pageInfo
.
editUrl
;
this
.
getData
();
this
.
pageInfo
.
type
=
"
edit
"
;
this
.
open
=
true
;
this
.
title
=
"
修改角色
"
;
},
/** 新增 */
add
(
row
)
{
this
.
reset
();
this
.
query
=
{
id
:
row
.
id
};
this
.
urls
.
currUrl
=
this
.
pageInfo
.
addUrl
;
this
.
getData
();
this
.
pageInfo
.
type
=
"
add
"
;
this
.
open
=
true
;
this
.
title
=
"
新增角色
"
;
},
/** 查看*/
view
(
row
)
{
this
.
reset
();
this
.
query
=
{
id
:
row
.
id
};
this
.
urls
.
currUrl
=
this
.
pageInfo
.
viewUrl
;
this
.
getData
();
this
.
pageInfo
.
type
=
"
view
"
;
this
.
open
=
true
;
this
.
title
=
"
角色详细
"
;
},
/**取消按钮 */
cancel
()
{
this
.
open
=
false
;
},
/**获取数据后弹框 */
afterRender
(
data
)
{
this
.
open
=
true
;
},
afterSubmit
(
data
)
{
this
.
open
=
false
;
this
.
$emit
(
"
ok
"
);
},
// 表单重置
reset
()
{
this
.
form
=
{};
this
.
resetForm
(
"
form
"
);
},
resetForm
(
refName
)
{
if
(
this
.
$refs
[
refName
])
{
this
.
$refs
[
refName
].
resetFields
();
}
},
},
};
</
script
>
device-manager-ui/admin/src/views/system/site/dialogshow.vue
0 → 100644
View file @
6da4d277
<
template
>
<!-- 弹出框表单 -->
<el-dialog
:title=
"title"
:visible.sync=
"open"
width=
"70%"
append-to-body
>
<el-form
ref=
"form"
:model=
"form"
:rules=
"rules"
label-width=
"80px"
>
<el-row>
<el-col
:span=
"24"
v-if=
"form.parentId !== 0"
>
<el-form-item
label=
"上级站点"
prop=
"parentId"
>
<treeselect
v-model=
"form.parentId"
:options=
"siteOptions"
:normalizer=
"normalizer"
placeholder=
"选择上级站点信息"
/>
</el-form-item>
</el-col>
<Field
label=
"站点名"
prop=
"siteName"
v-model=
"form.siteName"
placeholder=
"请输入站点名"
/>
<Field
label=
"父级id"
prop=
"parentId"
v-model=
"form.parentId"
placeholder=
"请输入父级id"
/>
<Field
label=
"祖级列表,逗号分隔"
prop=
"ancestors"
v-model=
"form.ancestors"
placeholder=
"请输入祖级列表,逗号分隔"
/>
<Field
label=
"地址"
prop=
"address"
v-model=
"form.address"
placeholder=
"请输入地址"
/>
<Field
label=
"电话"
prop=
"mobile"
v-model=
"form.mobile"
placeholder=
"请输入电话"
/>
<Field
label=
"单位介绍"
prop=
"introduce"
v-model=
"form.introduce"
type=
"textarea"
placeholder=
"请输入单位介绍"
/>
<Field
label=
"周一 1上班 0不上"
prop=
"workday1"
v-model=
"form.workday1"
type=
"select"
:enumData=
"dict.workday1"
placeholder=
"请选择周一 1上班 0不上"
/>
<Field
label=
"周二 1上班 0不上"
prop=
"workday2"
v-model=
"form.workday2"
type=
"select"
:enumData=
"dict.workday2"
placeholder=
"请选择周二 1上班 0不上"
/>
<Field
label=
"周三 1上班 0不上"
prop=
"workday3"
v-model=
"form.workday3"
type=
"select"
:enumData=
"dict.workday3"
placeholder=
"请选择周三 1上班 0不上"
/>
<Field
label=
"周四 1上班 0不上"
prop=
"workday4"
v-model=
"form.workday4"
type=
"select"
:enumData=
"dict.workday4"
placeholder=
"请选择周四 1上班 0不上"
/>
<Field
label=
"周五 1上班 0不上"
prop=
"workday5"
v-model=
"form.workday5"
type=
"select"
:enumData=
"dict.workday5"
placeholder=
"请选择周五 1上班 0不上"
/>
<Field
label=
"周六 1上班 0不上"
prop=
"workday6"
v-model=
"form.workday6"
type=
"select"
:enumData=
"dict.workday6"
placeholder=
"请选择周六 1上班 0不上"
/>
<Field
label=
"周日 1上班 0不上"
prop=
"workday7"
v-model=
"form.workday7"
type=
"select"
:enumData=
"dict.workday7"
placeholder=
"请选择周日 1上班 0不上"
/>
<Field
label=
"站点编号"
prop=
"number"
v-model=
"form.number"
placeholder=
"请输入站点编号"
/>
<Field
label=
"中心介绍"
prop=
"summary"
v-model=
"form.summary"
type=
"textarea"
placeholder=
"请输入中心介绍"
/>
<Field
label=
"排序字段"
prop=
"orderNum"
v-model=
"form.orderNum"
placeholder=
"请输入排序字段"
/>
<Field
label=
"站点状态 ,0,停用,1,正常 默认1"
prop=
"status"
v-model=
"form.status"
type=
"select"
:enumData=
"dict.status"
placeholder=
"请选择站点状态 ,0,停用,1,正常 默认1"
/>
</el-row>
</el-form>
<div
slot=
"footer"
class=
"dialog-footer"
>
<el-button
type=
"primary"
@
click=
"submitForm"
>
确 定
</el-button>
<el-button
@
click=
"cancel"
>
取 消
</el-button>
</div>
</el-dialog>
</
template
>
<
script
>
import
form
from
"
@/assets/mixins/form
"
;
import
Treeselect
from
"
@riophae/vue-treeselect
"
;
import
"
@riophae/vue-treeselect/dist/vue-treeselect.css
"
;
export
default
{
mixins
:
[
form
],
components
:
{
Treeselect
,
},
data
()
{
return
{
siteOptions
:
[],
// 遮罩层
loading
:
true
,
// 弹出层标题
title
:
"
站点信息
"
,
// 是否显示弹出层
open
:
false
,
toString
:[
"
workday1
"
,
"
workday2
"
,
"
workday3
"
,
"
workday4
"
,
"
workday5
"
,
"
workday6
"
,
"
workday7
"
,
"
status
"
,
],
// 表单校验
rules
:
{
siteName
:
[
{
required
:
true
,
trigger
:
"
blur
"
},
],
ancestors
:
[
{
trigger
:
"
blur
"
},
],
address
:
[
{
required
:
true
,
trigger
:
"
blur
"
},
],
mobile
:
[
{
required
:
true
,
trigger
:
"
blur
"
},
],
introduce
:
[
{
required
:
true
,
trigger
:
"
blur
"
},
],
workday1
:
[
{
type
:
'
integer
'
,
trigger
:
"
blur
"
},
],
workday2
:
[
{
type
:
'
integer
'
,
trigger
:
"
blur
"
},
],
workday3
:
[
{
type
:
'
integer
'
,
trigger
:
"
blur
"
},
],
workday4
:
[
{
type
:
'
integer
'
,
trigger
:
"
blur
"
},
],
workday5
:
[
{
type
:
'
integer
'
,
trigger
:
"
blur
"
},
],
workday6
:
[
{
type
:
'
integer
'
,
trigger
:
"
blur
"
},
],
workday7
:
[
{
type
:
'
integer
'
,
trigger
:
"
blur
"
},
],
number
:
[
{
required
:
true
,
trigger
:
"
blur
"
},
],
summary
:
[
{
required
:
true
,
trigger
:
"
blur
"
},
],
orderNum
:
[
{
type
:
'
integer
'
,
trigger
:
"
blur
"
},
],
status
:
[
{
type
:
'
integer
'
,
trigger
:
"
blur
"
},
],
}
};
},
methods
:
{
/** 编辑 */
edit
(
row
,
siteOptions
)
{
this
.
reset
()
this
.
query
=
{
id
:
row
.
id
};
this
.
urls
.
currUrl
=
this
.
pageInfo
.
editUrl
;;
this
.
getData
();
this
.
siteOptions
=
siteOptions
;
this
.
open
=
true
;
this
.
title
=
"
修改站点信息
"
;
},
/** 新增 */
add
(
row
,
siteOptions
)
{
this
.
reset
()
this
.
query
=
{
id
:
row
.
id
};
this
.
urls
.
currUrl
=
this
.
pageInfo
.
addUrl
;
this
.
getData
();
this
.
siteOptions
=
siteOptions
;
this
.
open
=
true
;
this
.
title
=
"
新增站点信息
"
;
},
/** 查看*/
view
(
row
,
siteOptions
)
{
this
.
reset
()
this
.
query
=
{
id
:
row
.
id
};
this
.
urls
.
currUrl
=
this
.
pageInfo
.
viewUrl
;;
this
.
getData
();
this
.
siteOptions
=
siteOptions
;
this
.
open
=
true
;
this
.
title
=
"
站点信息详细
"
;
},
/**取消按钮 */
cancel
()
{
this
.
open
=
false
;
},
afterSubmit
(
data
)
{
this
.
open
=
false
;
this
.
$emit
(
"
ok
"
);
},
/** 转换站点信息数据结构 */
normalizer
(
node
)
{
if
(
node
.
children
&&
!
node
.
children
.
length
)
{
delete
node
.
children
;
}
return
{
id
:
node
.
id
,
label
:
node
.
siteName
,
children
:
node
.
children
,
};
},
// 表单重置
reset
()
{
this
.
form
=
{
siteName
:
null
,
parentId
:
null
,
ancestors
:
""
,
address
:
null
,
mobile
:
null
,
introduce
:
null
,
number
:
null
,
summary
:
null
,
orderNum
:
0
,
status
:
1
,
};
this
.
resetForm
(
"
form
"
);
},
resetForm
(
refName
)
{
if
(
this
.
$refs
[
refName
])
{
this
.
$refs
[
refName
].
resetFields
();
}
},
},
};
</
script
>
device-manager-ui/admin/src/views/system/site/dialogshowbak.vue
0 → 100644
View file @
6da4d277
<
template
>
<!-- 弹出框表单 -->
<el-dialog
:title=
"title"
:visible.sync=
"open"
width=
"70%"
append-to-body
>
<el-form
ref=
"form"
:model=
"form"
:rules=
"rules"
label-width=
"80px"
>
<el-row>
<el-col
:span=
"24"
v-if=
"form.parentId !== 0"
>
<el-form-item
label=
"上级站点"
prop=
"parentId"
>
<treeselect
v-model=
"form.parentId"
:options=
"siteOptions"
:normalizer=
"normalizer"
placeholder=
"选择上级站点"
/>
</el-form-item>
</el-col>
<el-form-item
label=
"站点名称"
prop=
"siteName"
>
<el-input
v-model=
"form.siteName"
placeholder=
"请输入站点名称"
/>
</el-form-item>
<el-form-item
label=
"显示排序"
prop=
"orderNum"
>
<el-input-number
v-model=
"form.orderNum"
controls-position=
"right"
:min=
"0"
/>
</el-form-item>
<el-form-item
label=
"地址"
prop=
"address"
>
<el-input
v-model=
"form.address"
placeholder=
"请输入地址"
maxlength=
"20"
/>
</el-form-item>
<el-form-item
label=
"联系电话"
prop=
"mobile"
>
<el-input
v-model=
"form.mobile"
placeholder=
"请输入联系电话"
maxlength=
"11"
/>
</el-form-item>
<el-form-item
label=
"站点编号"
prop=
"number"
>
<el-input
v-model=
"form.number"
placeholder=
"请输入站点编号"
maxlength=
"50"
/>
</el-form-item>
<el-form-item
label=
"站点状态"
>
<el-radio-group
v-model=
"form.status"
>
<el-radio
v-for=
"(label, value) in dict.status"
:key=
"value"
:label=
"value"
>
{{
label
}}
</el-radio
>
</el-radio-group>
</el-form-item>
<el-col
:span=
"24"
>
<el-form-item
label=
"单位介绍"
prop=
"introduce"
>
<el-input
v-model=
"form.introduce"
placeholder=
"请输入单位介绍"
type=
"textarea"
:rows=
"2"
/>
</el-form-item>
</el-col>
<el-col
:span=
"24"
>
<el-form-item
label=
"中心介绍"
prop=
"summary"
>
<el-input
v-model=
"form.summary"
placeholder=
"请输入中心介绍"
type=
"textarea"
:rows=
"2"
/>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div
slot=
"footer"
class=
"dialog-footer"
>
<el-button
type=
"primary"
@
click=
"submitForm"
>
确 定
</el-button>
<el-button
@
click=
"cancel"
>
取 消
</el-button>
</div>
</el-dialog>
</
template
>
<
script
>
import
form
from
"
@/assets/mixins/form
"
;
import
Treeselect
from
"
@riophae/vue-treeselect
"
;
import
"
@riophae/vue-treeselect/dist/vue-treeselect.css
"
;
export
default
{
mixins
:
[
form
],
components
:
{
Treeselect
},
data
()
{
return
{
siteOptions
:
[],
// 遮罩层
loading
:
true
,
// 站点树选项
// 弹出层标题
title
:
""
,
// 是否显示弹出层
open
:
false
,
toString
:
[
"
status
"
],
// 表单校验
rules
:
{
parentId
:
[
{
required
:
true
,
message
:
"
上级站点不能为空
"
,
trigger
:
"
blur
"
},
],
siteName
:
[
{
required
:
true
,
message
:
"
站点名称不能为空
"
,
trigger
:
"
blur
"
},
],
orderNum
:
[
{
required
:
true
,
message
:
"
显示排序不能为空
"
,
trigger
:
"
blur
"
},
],
},
};
},
methods
:
{
//编辑
edit
(
row
,
siteOptions
)
{
this
.
reset
()
this
.
query
=
{
id
:
row
.
id
};
this
.
urls
.
currUrl
=
this
.
pageInfo
.
editUrl
;;
this
.
getData
();
this
.
siteOptions
=
siteOptions
;
this
.
open
=
true
;
this
.
title
=
"
修改站点
"
;
},
//新增
add
(
row
,
siteOptions
)
{
this
.
reset
()
this
.
query
=
{
id
:
row
.
id
};
this
.
urls
.
currUrl
=
this
.
pageInfo
.
addUrl
;
this
.
getData
();
this
.
siteOptions
=
siteOptions
;
this
.
open
=
true
;
this
.
title
=
"
新增站点
"
;
},
//查看
view
(
row
,
siteOptions
)
{
this
.
reset
()
this
.
query
=
{
id
:
row
.
id
};
this
.
urls
.
currUrl
=
this
.
pageInfo
.
viewUrl
;;
this
.
getData
();
this
.
siteOptions
=
siteOptions
;
this
.
open
=
true
;
this
.
title
=
"
站点详细
"
;
},
// 取消按钮
cancel
()
{
this
.
open
=
false
;
},
afterSubmit
(
data
)
{
this
.
open
=
false
;
this
.
$emit
(
"
ok
"
);
},
/** 转换站点数据结构 */
normalizer
(
node
)
{
if
(
node
.
children
&&
!
node
.
children
.
length
)
{
delete
node
.
children
;
}
return
{
id
:
node
.
id
,
label
:
node
.
siteName
,
children
:
node
.
children
,
};
},
// 表单重置
reset
()
{
this
.
form
=
{
id
:
null
,
parentId
:
0
,
siteName
:
""
,
orderNum
:
0
,
address
:
""
,
mobile
:
""
,
introduce
:
""
,
summary
:
""
,
ancestors
:
""
,
status
:
"
1
"
,
};
this
.
resetForm
(
"
form
"
);
},
resetForm
(
refName
)
{
if
(
this
.
$refs
[
refName
])
{
this
.
$refs
[
refName
].
resetFields
();
}
},
},
};
</
script
>
device-manager-ui/admin/src/views/system/site/indexbak.vue
0 → 100644
View file @
6da4d277
<
template
>
<div
class=
"page"
>
<el-form
:model=
"queryParams"
ref=
"queryForm"
:inline=
"true"
v-show=
"showSearch"
>
<el-form-item
label=
"站点名称"
prop=
"siteName"
>
<el-input
v-model=
"queryParams['query.siteName']"
placeholder=
"请输入站点名称"
clearable
size=
"small"
@
keyup.enter.native=
"handleQuery"
/>
</el-form-item>
<el-form-item>
<el-button
type=
"primary"
icon=
"el-icon-search"
size=
"mini"
@
click=
"handleQuery"
>
搜索
</el-button
>
<el-button
icon=
"el-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=
"el-icon-plus"
size=
"mini"
@
click=
"handleAdd"
>
新增
</el-button
>
</el-col>
<right-toolbar
:showSearch.sync=
"showSearch"
@
queryTable=
"getList"
></right-toolbar>
</el-row>
<el-table
v-loading=
"loading"
:data=
"siteList"
row-key=
"id"
border
default-expand-all
:tree-props=
"
{ children: 'children', hasChildren: 'hasChildren' }"
>
<el-table-column
prop=
"siteName"
label=
"站点名称"
width=
"400"
></el-table-column>
<el-table-column
prop=
"number"
label=
"站点编号"
width=
"200"
></el-table-column>
<el-table-column
prop=
"address"
label=
"站点地址"
width=
"200"
></el-table-column>
<el-table-column
prop=
"status"
label=
"状态"
:formatter=
"statusFormat"
width=
"100"
></el-table-column>
<el-table-column
label=
"创建时间"
align=
"center"
prop=
"createTime"
width=
"200"
>
<template
slot-scope=
"scope"
>
<span>
{{
formatterDate
(
scope
.
row
.
createTime
)
}}
</span>
</
template
>
</el-table-column>
<el-table-column
label=
"操作"
>
<
template
slot-scope=
"scope"
>
<el-button
size=
"mini"
type=
"text"
icon=
"el-icon-edit"
@
click=
"handleUpdate(scope.row)"
>
修改
</el-button
>
<el-button
size=
"mini"
type=
"text"
icon=
"el-icon-plus"
@
click=
"handleAdd(scope.row)"
>
新增
</el-button
>
<el-button
v-if=
"scope.row.parentId != 0"
size=
"mini"
type=
"text"
icon=
"el-icon-delete"
@
click=
"handleDelete(scope.row)"
>
删除
</el-button
>
</
template
>
</el-table-column>
</el-table>
<!-- 添加或修改站点对话框 -->
<el-dialog
:title=
"title"
:visible.sync=
"open"
width=
"70%"
append-to-body
>
<el-form
ref=
"form"
:model=
"form"
:rules=
"rules"
label-width=
"80px"
>
<el-row>
<el-col
:span=
"24"
v-if=
"form.parentId !== 0"
>
<el-form-item
label=
"上级站点"
prop=
"parentId"
>
<treeselect
v-model=
"form.parentId"
:options=
"siteOptions"
:normalizer=
"normalizer"
placeholder=
"选择上级站点"
/>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"站点名称"
prop=
"siteName"
>
<el-input
v-model=
"form.siteName"
placeholder=
"请输入站点名称"
/>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"显示排序"
prop=
"orderNum"
>
<el-input-number
v-model=
"form.orderNum"
controls-position=
"right"
:min=
"0"
/>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"地址"
prop=
"address"
>
<el-input
v-model=
"form.address"
placeholder=
"请输入地址"
maxlength=
"20"
/>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"联系电话"
prop=
"mobile"
>
<el-input
v-model=
"form.mobile"
placeholder=
"请输入联系电话"
maxlength=
"11"
/>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"站点编号"
prop=
"number"
>
<el-input
v-model=
"form.number"
placeholder=
"请输入站点编号"
maxlength=
"50"
/>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"站点状态"
>
<el-radio-group
v-model=
"form.status"
>
<el-radio
v-for=
"(label, value) in dict.status"
:key=
"value"
:label=
"value"
>
{{ label }}
</el-radio
>
</el-radio-group>
</el-form-item>
</el-col>
<el-col
:span=
"24"
>
<el-form-item
label=
"单位介绍"
prop=
"introduce"
>
<el-input
v-model=
"form.introduce"
placeholder=
"请输入单位介绍"
type=
"textarea"
:rows=
"2"
/>
</el-form-item>
</el-col>
<el-col
:span=
"24"
>
<el-form-item
label=
"中心介绍"
prop=
"summary"
>
<el-input
v-model=
"form.summary"
placeholder=
"请输入中心介绍"
type=
"textarea"
:rows=
"2"
/>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div
slot=
"footer"
class=
"dialog-footer"
>
<el-button
type=
"primary"
@
click=
"submitForm"
>
确 定
</el-button>
<el-button
@
click=
"cancel"
>
取 消
</el-button>
</div>
</el-dialog>
</div>
</template>
<
script
>
import
{
handleTree
,
formatterDate
}
from
"
@/assets/utils
"
;
import
Treeselect
from
"
@riophae/vue-treeselect
"
;
import
"
@riophae/vue-treeselect/dist/vue-treeselect.css
"
;
export
default
{
name
:
"
Dept
"
,
components
:
{
Treeselect
},
data
()
{
return
{
// 遮罩层
loading
:
true
,
// 显示搜索条件
showSearch
:
true
,
// 表格树数据
siteList
:
[],
// 站点树选项
siteOptions
:
[],
// 弹出层标题
title
:
""
,
// 是否显示弹出层
open
:
false
,
// 状态数据字典
statusOptions
:
[],
// 查询参数
queryParams
:
{
"
query.siteName
"
:
null
,
},
// 表单参数
form
:
{},
dict
:
{},
toString
:
[
"
status
"
],
// 表单校验
rules
:
{
parentId
:
[
{
required
:
true
,
message
:
"
上级站点不能为空
"
,
trigger
:
"
blur
"
},
],
siteName
:
[
{
required
:
true
,
message
:
"
站点名称不能为空
"
,
trigger
:
"
blur
"
},
],
orderNum
:
[
{
required
:
true
,
message
:
"
显示排序不能为空
"
,
trigger
:
"
blur
"
},
],
email
:
[
{
type
:
"
email
"
,
message
:
"
'请输入正确的邮箱地址
"
,
trigger
:
[
"
blur
"
,
"
change
"
],
},
],
mobile
:
[
{
pattern
:
/^1
[
3|4|5|6|7|8|9
][
0-9
]\d{8}
$/
,
message
:
"
请输入正确的手机号码
"
,
trigger
:
"
blur
"
,
},
],
},
};
},
created
()
{
this
.
getList
();
},
methods
:
{
formatterDate
(
time
)
{
return
formatterDate
(
time
);
},
/** 查询站点列表 */
getList
()
{
this
.
loading
=
true
;
let
query
=
{};
//判断追加百分号
Object
.
assign
(
query
,
this
.
queryParams
);
if
(
query
[
"
query.siteName
"
]
!=
null
)
{
query
[
"
query.siteName
"
]
=
"
%
"
+
query
[
"
query.siteName
"
]
+
"
%
"
;
}
this
.
$post
(
"
/site/list
"
,
query
)
.
then
((
res
)
=>
{
if
(
res
&&
res
.
code
&&
res
.
code
==
1
)
{
this
.
siteList
=
handleTree
(
res
.
data
.
result
,
"
id
"
);
this
.
dict
=
Object
.
assign
({},
this
.
dict
,
res
.
data
.
dict
);
this
.
loading
=
false
;
}
})
.
catch
((
error
)
=>
{
this
.
$message
.
error
(
error
.
message
);
});
},
/** 转换站点数据结构 */
normalizer
(
node
)
{
console
.
log
(
"
normalizer
"
,
node
);
if
(
node
.
children
&&
!
node
.
children
.
length
)
{
delete
node
.
children
;
}
return
{
id
:
node
.
id
,
label
:
node
.
siteName
,
children
:
node
.
children
,
};
},
// 字典状态字典翻译
statusFormat
(
row
,
column
)
{
try
{
return
this
.
dict
[
"
status
"
][
row
.
status
];
}
catch
(
error
)
{
return
row
.
status
;
}
},
// 取消按钮
cancel
()
{
this
.
open
=
false
;
this
.
reset
();
},
resetForm
(
refName
)
{
if
(
this
.
$refs
[
refName
])
{
this
.
$refs
[
refName
].
resetFields
();
}
},
// 表单重置
reset
()
{
this
.
form
=
{
id
:
null
,
parentId
:
0
,
siteName
:
""
,
orderNum
:
0
,
address
:
""
,
mobile
:
""
,
introduce
:
""
,
summary
:
""
,
ancestors
:
""
,
status
:
"
1
"
,
};
this
.
resetForm
(
"
form
"
);
},
/** 搜索按钮操作 */
handleQuery
()
{
this
.
getList
();
},
/** 重置按钮操作 */
resetQuery
()
{
this
.
resetForm
(
"
queryForm
"
);
this
.
handleQuery
();
},
/** 新增按钮操作 */
handleAdd
(
row
)
{
this
.
reset
();
if
(
row
.
id
!=
undefined
)
{
this
.
form
.
parentId
=
row
.
id
;
}
this
.
open
=
true
;
this
.
title
=
"
添加站点
"
;
this
.
loading
=
true
;
this
.
$post
(
"
/site/list
"
,
{})
.
then
((
res
)
=>
{
if
(
res
&&
res
.
code
&&
res
.
code
==
1
)
{
this
.
siteOptions
=
handleTree
(
res
.
data
.
result
);
this
.
loading
=
false
;
}
})
.
catch
((
error
)
=>
{
this
.
$message
.
error
(
error
.
message
);
});
},
/** 修改按钮操作 */
handleUpdate
(
row
)
{
this
.
reset
();
this
.
loading
=
true
;
this
.
$post
(
"
/site/edit
"
,
{
id
:
[
row
.
id
]
})
.
then
((
res
)
=>
{
if
(
res
&&
res
.
code
&&
res
.
code
==
1
)
{
res
.
data
.
entity
=
this
.
util_toString
(
res
.
data
.
entity
,
this
.
toString
);
Object
.
assign
(
this
.
form
,
res
.
data
.
entity
);
this
.
open
=
true
;
this
.
title
=
"
修改站点
"
;
this
.
loading
=
false
;
}
})
.
catch
((
error
)
=>
{
this
.
$message
.
error
(
error
.
message
);
});
this
.
$post
(
"
/site/list/exclude
"
,
{
id
:
[
row
.
id
]
})
.
then
((
res
)
=>
{
if
(
res
&&
res
.
code
&&
res
.
code
==
1
)
{
this
.
siteOptions
=
handleTree
(
res
.
data
.
result
);
}
})
.
catch
((
error
)
=>
{
this
.
$message
.
error
(
error
.
message
);
});
},
/** 提交按钮 */
submitForm
:
function
()
{
this
.
loading
=
true
;
const
el
=
this
.
$refs
.
form
;
el
.
validate
((
valid
)
=>
{
if
(
!
valid
)
return
;
this
.
$post
(
"
/site/save
"
,
{
entity
:
this
.
form
,
})
.
then
((
res
)
=>
{
if
(
res
&&
res
.
code
&&
res
.
code
==
1
)
{
this
.
loading
=
false
;
this
.
reset
();
this
.
open
=
false
;
this
.
getList
();
}
})
.
catch
((
error
)
=>
{
this
.
loading
=
false
;
this
.
$message
.
error
(
error
.
message
);
});
});
},
/** 删除按钮操作 */
handleDelete
(
row
)
{
let
_this
=
this
this
.
$confirm
(
'
是否确认删除名称为"
'
+
row
.
siteName
+
'
"的数据项?
'
,
"
警告
"
,
{
confirmButtonText
:
"
确定
"
,
cancelButtonText
:
"
取消
"
,
type
:
"
warning
"
,
}
).
then
(
function
()
{
_this
.
$post
(
"
/site/delete
"
,
{
id
:
[
row
.
id
]
})
.
then
((
res
)
=>
{
if
(
res
&&
res
.
code
&&
res
.
code
==
1
)
{
_this
.
getList
();
_this
.
$message
.
success
(
"
删除成功
"
);
}
})
.
catch
((
error
)
=>
{
_this
.
$message
.
error
(
error
.
message
);
});
});
},
// 工具方法,把数字转化为字符串
util_toString
(
data
,
array
)
{
const
dataCopy
=
Object
.
assign
({},
data
);
array
.
forEach
((
item
)
=>
{
dataCopy
[
item
]
=
dataCopy
[
item
]
===
undefined
?
""
:
dataCopy
[
item
]
+
""
;
});
return
dataCopy
;
},
},
};
</
script
>
\ No newline at end of file
device-manager-ui/admin/src/views/system/site/indexbak1.vue
0 → 100644
View file @
6da4d277
<
template
>
<div
class=
"page"
>
<LayoutTable
ref=
"layoutTable"
:data=
"tableData"
:config=
"tableConfig"
/>
<dialog-show
ref=
"dialogform"
@
ok=
"getData"
/>
</div>
</
template
>
<
script
>
import
dialogShow
from
"
./dialogshow
"
;
import
{
handleTree
}
from
"
@/assets/utils/table
"
;
import
Treeselect
from
"
@riophae/vue-treeselect
"
;
import
"
@riophae/vue-treeselect/dist/vue-treeselect.css
"
;
import
table
from
"
@/assets/mixins/table
"
;
export
default
{
name
:
"
Site
"
,
mixins
:
[
table
],
components
:
{
Treeselect
,
dialogShow
},
data
()
{
return
{
config
:
{
expand
:
true
,
search
:
[
{
name
:
"
name
"
,
type
:
"
text
"
,
label
:
"
参数名称
"
,
},
],
columns
:
[
{
prop
:
"
siteName
"
,
label
:
"
siteName
"
,
},
{
prop
:
"
number
"
,
label
:
"
站点编号
"
,
width
:
200
,
},
{
prop
:
"
address
"
,
label
:
"
站点地址
"
,
width
:
200
,
},
{
prop
:
"
status
"
,
label
:
"
状态
"
,
width
:
100
,
formatter
:
this
.
formatter
,
},
{
label
:
"
创建时间
"
,
prop
:
"
createTime
"
,
formatter
:
this
.
formatterDate
,
},
{
label
:
"
操作
"
,
width
:
280
,
formatter
:
(
row
)
=>
{
return
(
<
div
>
<
el
-
button
size
=
"
mini
"
type
=
"
text
"
icon
=
"
el-icon-edit
"
onClick
=
{()
=>
{
this
.
toEdit
(
row
);
}}
>
修改
<
/el-button
>
<
el
-
button
size
=
"
mini
"
type
=
"
text
"
icon
=
"
el-icon-plus
"
onClick
=
{()
=>
{
this
.
toAdd
(
row
);
}}
>
新增
<
/el-button
>
<
el
-
button
size
=
"
mini
"
type
=
"
text
"
icon
=
"
el-icon-delete
"
onClick
=
{()
=>
{
this
.
handleDelete
(
row
);
}}
>
删除
<
/el-button
>
<
/div
>
);
},
},
],
},
};
},
created
()
{
},
methods
:
{
afterRender
(
data
)
{
data
.
result
=
handleTree
(
data
.
result
,
"
id
"
,
"
parentId
"
);
this
.
siteOptions
=
data
.
result
;
this
.
$refs
.
layoutTable
.
showType
=
"
treetable
"
console
.
log
(
this
.
$refs
.
layoutTable
)
},
// 新增
toAdd
(
row
)
{
this
.
$refs
.
dialogform
.
add
(
row
,
this
.
siteOptions
);
},
// 编辑
toEdit
(
row
,
query
)
{
this
.
loading
=
true
;
this
.
$post
(
this
.
pageInfo
.
exclude
,
{
id
:
[
row
.
id
]
})
.
then
((
res
)
=>
{
if
(
res
&&
res
.
code
&&
res
.
code
==
1
)
{
this
.
siteOptions
=
handleTree
(
res
.
data
.
result
);
this
.
$refs
.
dialogform
.
edit
(
row
,
this
.
siteOptions
);
this
.
loading
=
false
;
}
})
.
catch
((
error
)
=>
{
this
.
$message
.
error
(
error
.
message
);
});
},
// 查看
toView
(
row
,)
{
this
.
$refs
.
dialogform
.
view
(
row
,
this
.
siteOptions
);
},
},
};
</
script
>
\ No newline at end of file
device-manager-ui/admin/src/views/system/site/list.vue
0 → 100644
View file @
6da4d277
<
template
>
<div
class=
"page"
>
<LayoutTable
ref=
"layoutTable"
:data=
"tableData"
:config=
"tableConfig"
/>
<dialog-show
ref=
"dialogform"
@
ok=
"getData"
/>
</LayoutTable>
</div>
</
template
>
<
script
>
import
dialogShow
from
"
./dialogshow
"
;
import
{
handleTree
}
from
"
@/assets/utils/table
"
;
import
Treeselect
from
"
@riophae/vue-treeselect
"
;
import
"
@riophae/vue-treeselect/dist/vue-treeselect.css
"
;
import
table
from
"
@/assets/mixins/table
"
;
export
default
{
name
:
"
Site
"
,
mixins
:
[
table
],
components
:
{
Treeselect
,
dialogShow
},
created
()
{},
methods
:
{
afterRender
(
data
)
{
data
.
result
=
handleTree
(
data
.
result
,
"
id
"
,
"
parentId
"
);
this
.
siteOptions
=
data
.
result
;
this
.
$refs
.
layoutTable
.
showType
=
"
treetable
"
;
},
// 新增
toAdd
(
row
)
{
this
.
$refs
.
dialogform
.
add
(
row
,
this
.
siteOptions
);
},
// 编辑
toEdit
(
row
)
{
this
.
loading
=
true
;
this
.
$post
(
this
.
pageInfo
.
exclude
,
{
id
:
[
row
.
id
]
})
.
then
((
res
)
=>
{
if
(
res
&&
res
.
code
&&
res
.
code
==
1
)
{
this
.
siteOptions
=
handleTree
(
res
.
data
.
result
);
this
.
$refs
.
dialogform
.
edit
(
row
,
this
.
siteOptions
);
this
.
loading
=
false
;
}
})
.
catch
((
error
)
=>
{
this
.
$message
.
error
(
error
.
message
);
});
},
// 查看
toView
(
row
)
{
this
.
$refs
.
dialogform
.
view
(
row
,
this
.
siteOptions
);
},
},
data
()
{
return
{
/** 树表是否默认展开 */
expand
:
true
,
config
:
{
search
:
[
{
name
:
"
siteName
"
,
type
:
"
text
"
,
label
:
"
站点名
"
,
fuzzy
:
true
,
},
{
name
:
"
parentId
"
,
type
:
"
text
"
,
label
:
"
父级id
"
,
fuzzy
:
true
,
},
{
name
:
"
ancestors
"
,
type
:
"
text
"
,
label
:
"
祖级列表,逗号分隔
"
,
fuzzy
:
true
,
},
{
name
:
"
address
"
,
type
:
"
text
"
,
label
:
"
地址
"
,
fuzzy
:
true
,
},
{
name
:
"
mobile
"
,
type
:
"
text
"
,
label
:
"
电话
"
,
fuzzy
:
true
,
},
{
name
:
"
workday1
"
,
type
:
"
text
"
,
label
:
"
周一 1上班 0不上
"
,
fuzzy
:
true
,
},
{
name
:
"
workday2
"
,
type
:
"
text
"
,
label
:
"
周二 1上班 0不上
"
,
fuzzy
:
true
,
},
{
name
:
"
workday3
"
,
type
:
"
text
"
,
label
:
"
周三 1上班 0不上
"
,
fuzzy
:
true
,
},
{
name
:
"
workday4
"
,
type
:
"
text
"
,
label
:
"
周四 1上班 0不上
"
,
fuzzy
:
true
,
},
{
name
:
"
workday5
"
,
type
:
"
text
"
,
label
:
"
周五 1上班 0不上
"
,
fuzzy
:
true
,
},
{
name
:
"
workday6
"
,
type
:
"
text
"
,
label
:
"
周六 1上班 0不上
"
,
fuzzy
:
true
,
},
{
name
:
"
workday7
"
,
type
:
"
text
"
,
label
:
"
周日 1上班 0不上
"
,
fuzzy
:
true
,
},
{
name
:
"
number
"
,
type
:
"
text
"
,
label
:
"
站点编号
"
,
fuzzy
:
true
,
},
{
name
:
"
orderNum
"
,
type
:
"
text
"
,
label
:
"
排序字段
"
,
fuzzy
:
true
,
},
{
name
:
"
status
"
,
type
:
"
checkbox
"
,
label
:
"
站点状态 ,0,停用,1,正常 默认1
"
,
fuzzy
:
true
,
},
],
columns
:
[
{
label
:
"
站点名
"
,
prop
:
"
siteName
"
},
{
label
:
"
父级id
"
,
prop
:
"
parentId
"
,
formatter
:
this
.
formatterString
,
},
{
label
:
"
祖级列表,逗号分隔
"
,
prop
:
"
ancestors
"
},
{
label
:
"
地址
"
,
prop
:
"
address
"
},
{
label
:
"
电话
"
,
prop
:
"
mobile
"
},
{
label
:
"
单位介绍
"
,
prop
:
"
introduce
"
},
{
label
:
"
周一 1上班 0不上
"
,
prop
:
"
workday1
"
},
{
label
:
"
周二 1上班 0不上
"
,
prop
:
"
workday2
"
},
{
label
:
"
周三 1上班 0不上
"
,
prop
:
"
workday3
"
},
{
label
:
"
周四 1上班 0不上
"
,
prop
:
"
workday4
"
},
{
label
:
"
周五 1上班 0不上
"
,
prop
:
"
workday5
"
},
{
label
:
"
周六 1上班 0不上
"
,
prop
:
"
workday6
"
},
{
label
:
"
周日 1上班 0不上
"
,
prop
:
"
workday7
"
},
{
label
:
"
站点编号
"
,
prop
:
"
number
"
},
{
label
:
"
中心介绍
"
,
prop
:
"
summary
"
},
{
label
:
"
排序字段
"
,
prop
:
"
orderNum
"
},
{
label
:
"
站点状态 ,0,停用,1,正常 默认1
"
,
prop
:
"
status
"
},
{
label
:
"
操作
"
,
width
:
280
,
formatter
:
(
row
)
=>
{
return
(
<
div
>
<
el
-
button
size
=
"
mini
"
type
=
"
text
"
icon
=
"
el-icon-edit-outline
"
onClick
=
{()
=>
{
this
.
handleAdd
(
row
);
}}
>
新增
<
/el-button
>
<
table
-
buttons
noAdd
row
=
{
row
}
onEdit
=
{
this
.
toEdit
}
onView
=
{
this
.
toView
}
onDel
=
{
this
.
toDel
}
/
>
<
/div
>
);
},
},
],
},
};
},
};
</
script
>
\ No newline at end of file
device-manager-ui/admin/src/views/system/task/dialogshow.vue
0 → 100644
View file @
6da4d277
// 添加,编辑设备
<
template
>
<!-- 弹出框表单 -->
<el-dialog
:title=
"title"
:visible.sync=
"open"
width=
"80%"
append-to-body
>
<el-form
ref=
"form"
:model=
"form"
:rules=
"rules"
label-width=
"110px"
label-position=
"right"
>
<el-row>
<Field
label=
"任务名称"
prop=
"name"
v-model=
"form.name"
/>
<Field
label=
"关键字"
prop=
"taskKey"
v-model=
"form.taskKey"
/>
<Field
label=
"执行服务"
prop=
"excuteService"
v-model=
"form.excuteService"
:enumData=
'dict.excuteService'
type=
'select'
/>
<Field
label=
"执行策略"
prop=
"excuteStrategy"
@
change=
'excuteStrategyChange'
v-model=
"form.excuteStrategy"
:enumData=
'dict.excuteStrategy'
type=
'select'
/>
<Field
:label=
"form.excuteStrategy == 4 ? '执行间隔时间' : '执行日期'"
prop=
"excuteDate"
>
<el-input
disabled
value=
'每天'
v-if=
'form.excuteStrategy == 1'
></el-input>
<el-select
v-model=
"form.excuteDate"
v-if=
'form.excuteStrategy == 2'
>
<el-option
v-for=
'($label, $value) in dict.week'
:key=
'$value'
:label=
"$label"
:value=
"$value"
></el-option>
</el-select>
<el-select
v-model=
"form.excuteDate"
v-if=
'form.excuteStrategy == 3'
>
<el-option
v-for=
'($label, $value) in dict.days'
:key=
'$value'
:label=
"$label"
:value=
"$value"
></el-option>
</el-select>
<el-input
v-model=
"form.excuteDate"
v-if=
'form.excuteStrategy == 4'
>
<template
slot=
"append"
>
秒
</
template
>
</el-input>
</Field>
<Field
label=
"执行时间"
prop=
"excuteTime"
v-if=
'form.excuteStrategy != 4'
>
<el-time-select
v-model=
"form.excuteTime"
:picker-options=
"{
start: '00:00',
step: '00:5',
end: '23:45'
}"
placeholder=
"选择时间"
>
</el-time-select>
</Field>
<Field
:span=
"24"
label=
"执行主机"
prop=
"excuteHost"
v-model=
"form.excuteHost"
/>
<Field
:span=
"24"
label=
"执行参数"
prop=
"excuteParam"
v-model=
"form.excuteParam"
type=
'textarea'
textareaSize
/>
<Field
:span=
"24"
label=
"备注"
prop=
"remark"
v-model=
"form.remark"
type=
'textarea'
textareaSize
/>
</el-row>
</el-form>
<div
slot=
"footer"
class=
"dialog-footer"
>
<el-button
type=
"primary"
v-if=
"pageInfo.type !== 'view'"
@
click=
"submitForm"
>
确 定
</el-button
>
<el-button
@
click=
"cancel"
>
取 消
</el-button>
</div>
</el-dialog>
</template>
<
script
>
import
form
from
"
@/assets/mixins/formdialog
"
;
import
dialogShow
from
"
./dialogshow
"
;
export
default
{
mixins
:
[
form
],
components
:
{
dialogShow
,
},
methods
:
{
beforeRender
(
data
)
{
data
.
dict
=
data
.
dict
||
{};
const
days
=
{};
[...
new
Array
(
31
)].
forEach
((
i
,
index
)
=>
{
let
key
=
index
+
1
;
days
[
key
]
=
`
${
key
}
号`
;
})
data
.
dict
.
days
=
days
;
data
.
dict
.
week
=
{
1
:
'
星期一
'
,
2
:
'
星期二
'
,
3
:
'
星期三
'
,
4
:
'
星期四
'
,
5
:
'
星期五
'
,
6
:
'
星期六
'
,
7
:
'
星期天
'
,
};
data
.
dict
.
excuteService
=
data
.
excuteService
;
return
data
;
},
excuteStrategyChange
(
val
)
{
this
.
form
.
excuteDate
=
val
==
1
?
'
0
'
:
'
1
'
;
},
/** 编辑 */
edit
(
row
)
{
this
.
reset
();
this
.
query
=
{
id
:
row
.
id
};
this
.
urls
.
currUrl
=
this
.
pageInfo
.
editUrl
;
this
.
getData
();
this
.
pageInfo
.
type
=
"
edit
"
;
this
.
title
=
"
修改任务
"
;
},
/** 新增 */
add
(
row
)
{
this
.
reset
();
this
.
query
=
{
id
:
row
.
id
};
this
.
urls
.
currUrl
=
this
.
pageInfo
.
addUrl
;
this
.
getData
();
this
.
pageInfo
.
type
=
"
add
"
;
this
.
title
=
"
新增任务
"
;
},
/** 查看*/
view
(
row
)
{
this
.
reset
();
this
.
query
=
{
id
:
row
.
id
};
this
.
urls
.
currUrl
=
this
.
pageInfo
.
viewUrl
;
this
.
getData
();
this
.
pageInfo
.
type
=
"
view
"
;
this
.
title
=
"
任务详细
"
;
},
/**取消按钮 */
cancel
()
{
this
.
open
=
false
;
},
/**获取数据后弹框 */
afterRender
(
data
)
{
console
.
log
(
this
.
form
)
this
.
open
=
true
;
},
afterSubmit
(
data
)
{
this
.
open
=
false
;
this
.
$emit
(
"
ok
"
);
},
// 表单重置
reset
()
{
this
.
form
=
{};
this
.
resetForm
(
"
form
"
);
},
resetForm
(
refName
)
{
if
(
this
.
$refs
[
refName
])
{
this
.
$refs
[
refName
].
resetFields
();
}
},
},
data
()
{
return
{
// 遮罩层
loading
:
true
,
// 弹出层标题
title
:
"
用户
"
,
// 是否显示弹出层
open
:
false
,
toString
:
[
'
excuteService
'
,
'
excuteStrategy
'
,
'
excuteDate
'
],
rules
:
{
name
:
[{
required
:
true
,
message
:
'
请输入任务名称
'
,
trigger
:
'
blur
'
},],
taskKey
:
[{
required
:
true
,
message
:
'
请输入任务关键字
'
,
trigger
:
'
blur
'
},],
excuteService
:
[{
required
:
true
,
message
:
'
请选择任务执行服务
'
,
trigger
:
'
blur
'
},],
},
};
},
};
</
script
>
device-manager-ui/admin/src/views/system/user/dialogshow.vue
0 → 100644
View file @
6da4d277
// 添加,编辑设备
<
template
>
<!-- 弹出框表单 -->
<el-dialog
:title=
"title"
:visible.sync=
"open"
width=
"40%"
append-to-body
>
<el-form
ref=
"form"
:model=
"form"
:rules=
"rules"
label-width=
"110px"
label-position=
"right"
>
<el-row>
<Field
:span=
"20"
label=
"登录名称"
prop=
"loginName"
v-model=
"form.loginName"
/>
<Field
:span=
"20"
label=
"密码"
prop=
"loginPwd"
>
<el-input
v-model.trim=
"form.loginPwd"
placeholder=
"请输入密码"
:type=
"passw"
clearable
@
blur=
"onBlur"
>
<!-- input中加图标必须要有slot="suffix"属性,不然无法显示图标 -->
<i
slot=
"suffix"
:class=
"icon"
@
click=
"showPass"
></i>
</el-input>
</Field>
<!--
<Field
:span=
"20"
label=
"登录密码"
prop=
"loginPwd"
v-model=
"form.loginPwd"
/>
-->
<Field
:span=
"20"
label=
"用户名称"
prop=
"realName"
v-model=
"form.realName"
/>
<Field
:span=
"20"
label=
"手机号码"
prop=
"mobile"
v-model=
"form.mobile"
/>
<!--
<Field
label=
"用户类型"
prop=
"userType"
v-model=
"form.userType"
:enumData=
'dict.userType'
type=
'select'
/>
<Field
label=
"用户状态"
prop=
"status"
v-model=
"form.status"
:enumData=
'dict.status'
type=
'select'
/>
-->
<Field
label=
"角色分配"
:span=
"24"
v-model=
"form.roleIds"
type=
"checkbox"
:enumData=
"dict.roleIds"
/>
</el-row>
</el-form>
<div
slot=
"footer"
class=
"dialog-footer"
>
<el-button
type=
"primary"
v-if=
"pageInfo.type !== 'view'"
@
click=
"submitForm"
>
确 定
</el-button
>
<el-button
@
click=
"cancel"
>
取 消
</el-button>
</div>
</el-dialog>
</
template
>
<
script
>
import
form
from
"
@/assets/mixins/formdialog
"
;
import
dialogShow
from
"
./dialogshow
"
;
export
default
{
mixins
:
[
form
],
components
:
{
dialogShow
,
},
data
()
{
return
{
// 遮罩层
loading
:
true
,
// 弹出层标题
title
:
"
用户
"
,
// 是否显示弹出层
open
:
false
,
toString
:
[
"
status
"
,
"
userType
"
],
toArrays
:
[
"
roleIds
"
],
// 表单校验
rules
:
{
loginName
:
[
{
required
:
true
,
message
:
"
请输入英文的用户名
"
,
trigger
:
"
blur
"
},
{
validator
:
function
(
rule
,
value
,
callback
)
{
// 校验英文的正则
if
(
/
[
A-Za-z0-9
]
$/
.
test
(
value
)
==
false
)
{
callback
(
new
Error
(
"
请输入英文
"
));
}
else
{
//校验通过
callback
();
}
},
trigger
:
"
blur
"
,
},
],
},
icon
:
"
el-input__icon el-icon-view
"
,
passw
:
"
password
"
,
SPAN
:
"
24
"
,
};
},
methods
:
{
/** 编辑 */
edit
(
row
)
{
this
.
reset
();
this
.
query
=
{
id
:
row
.
id
};
this
.
urls
.
currUrl
=
this
.
pageInfo
.
editUrl
;
this
.
getData
();
this
.
pageInfo
.
type
=
"
edit
"
;
this
.
title
=
"
修改用户
"
;
},
/** 新增 */
add
(
row
)
{
this
.
reset
();
this
.
query
=
{
id
:
row
.
id
};
this
.
urls
.
currUrl
=
this
.
pageInfo
.
addUrl
;
this
.
getData
();
this
.
pageInfo
.
type
=
"
add
"
;
this
.
title
=
"
新增用户
"
;
},
/** 查看*/
view
(
row
)
{
this
.
reset
();
this
.
query
=
{
id
:
row
.
id
};
this
.
urls
.
currUrl
=
this
.
pageInfo
.
viewUrl
;
this
.
getData
();
this
.
pageInfo
.
type
=
"
view
"
;
this
.
title
=
"
用户详细
"
;
},
/**取消按钮 */
cancel
()
{
this
.
open
=
false
;
},
/**获取数据后弹框 */
afterRender
(
data
)
{
this
.
open
=
true
;
},
beforeSubmit
(
data
)
{
data
.
roleIds
=
data
.
roleIds
.
filter
((
item
)
=>
{
return
item
!==
""
;
})
.
join
(
"
,
"
);
return
data
;
},
afterSubmit
(
data
)
{
this
.
open
=
false
;
this
.
$emit
(
"
ok
"
);
},
// 表单重置
reset
()
{
this
.
form
=
{
roleIds
:
""
};
this
.
resetForm
(
"
form
"
);
},
resetForm
(
refName
)
{
if
(
this
.
$refs
[
refName
])
{
this
.
$refs
[
refName
].
resetFields
();
}
},
showPass
()
{
//点击图标是密码隐藏或显示
if
(
this
.
passw
==
"
text
"
)
{
this
.
passw
=
"
password
"
;
//更换图标
this
.
icon
=
"
el-input__icon el-icon-view
"
;
}
else
{
this
.
passw
=
"
text
"
;
this
.
icon
=
"
el-input__icon el-icon-loading
"
;
setTimeout
(()
=>
{
this
.
icon
=
""
;
},
100
);
}
},
//密码失焦事件
onBlur
()
{
this
.
passw
=
"
password
"
;
this
.
icon
=
"
el-input__icon el-icon-view
"
;
},
},
};
</
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