Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
J
jumpserver
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
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
ops
jumpserver
Commits
b7c3cc55
Commit
b7c3cc55
authored
Nov 12, 2015
by
halcyon
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
add idc
parent
e77ec102
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
407 additions
and
7 deletions
+407
-7
forms.py
jasset/forms.py
+8
-0
models.py
jasset/models.py
+1
-1
urls.py
jasset/urls.py
+8
-3
views.py
jasset/views.py
+75
-2
asset_list.html
templates/jasset/asset_list.html
+1
-1
idc_add.html
templates/jasset/idc_add.html
+96
-0
idc_detail.html
templates/jasset/idc_detail.html
+0
-0
idc_edit.html
templates/jasset/idc_edit.html
+100
-0
idc_list.html
templates/jasset/idc_list.html
+116
-0
nav.html
templates/nav.html
+2
-0
No files found.
jasset/forms.py
View file @
b7c3cc55
...
@@ -22,3 +22,11 @@ class AssetGroupForm(forms.ModelForm):
...
@@ -22,3 +22,11 @@ class AssetGroupForm(forms.ModelForm):
fields
=
[
fields
=
[
"name"
,
"comment"
"name"
,
"comment"
]
]
class
IdcForm
(
forms
.
ModelForm
):
class
Meta
:
model
=
IDC
fields
=
[
'name'
,
"bandwidth"
,
"operator"
,
'linkman'
,
'phone'
,
'address'
,
'network'
,
'comment'
]
jasset/models.py
View file @
b7c3cc55
...
@@ -43,7 +43,7 @@ class IDC(models.Model):
...
@@ -43,7 +43,7 @@ class IDC(models.Model):
network
=
models
.
TextField
(
blank
=
True
,
null
=
True
,
verbose_name
=
u"IP地址段"
)
network
=
models
.
TextField
(
blank
=
True
,
null
=
True
,
verbose_name
=
u"IP地址段"
)
date_added
=
models
.
DateField
(
auto_now
=
True
,
default
=
datetime
.
datetime
.
now
(),
null
=
True
)
date_added
=
models
.
DateField
(
auto_now
=
True
,
default
=
datetime
.
datetime
.
now
(),
null
=
True
)
operator
=
models
.
IntegerField
(
max_length
=
32
,
blank
=
True
,
null
=
True
,
verbose_name
=
u"运营商"
)
operator
=
models
.
IntegerField
(
max_length
=
32
,
blank
=
True
,
null
=
True
,
verbose_name
=
u"运营商"
)
comment
=
models
.
TextField
(
blank
=
True
,
null
=
True
,
verbose_name
=
u"备注"
)
comment
=
models
.
CharField
(
max_length
=
128
,
blank
=
True
,
null
=
True
,
verbose_name
=
u"备注"
)
def
__unicode__
(
self
):
def
__unicode__
(
self
):
return
self
.
name
return
self
.
name
...
...
jasset/urls.py
View file @
b7c3cc55
...
@@ -5,8 +5,6 @@ from jasset.views import *
...
@@ -5,8 +5,6 @@ from jasset.views import *
urlpatterns
=
patterns
(
''
,
urlpatterns
=
patterns
(
''
,
url
(
r'^asset_add/$'
,
asset_add
),
url
(
r'^asset_add/$'
,
asset_add
),
# url(r"^host_add_multi/$", host_add_batch),
# url(r"^host_add_multi/$", host_add_batch),
url
(
r'^group_add/$'
,
group_add
),
url
(
r'^group_list/$'
,
group_list
),
url
(
r'^group_del/$'
,
group_del
),
url
(
r'^group_del/$'
,
group_del
),
url
(
r'^asset_list/$'
,
asset_list
),
url
(
r'^asset_list/$'
,
asset_list
),
url
(
r'^asset_del/$'
,
asset_del
),
url
(
r'^asset_del/$'
,
asset_del
),
...
@@ -16,11 +14,17 @@ urlpatterns = patterns('',
...
@@ -16,11 +14,17 @@ urlpatterns = patterns('',
# url(r"^host_detail/$", host_detail),
# url(r"^host_detail/$", host_detail),
# url(r"^dept_host_ajax/$", dept_host_ajax),
# url(r"^dept_host_ajax/$", dept_host_ajax),
# url(r"^show_all_ajax/$", show_all_ajax),
# url(r"^show_all_ajax/$", show_all_ajax),
url
(
r'^group_add/$'
,
group_add
),
url
(
r'^group_list/$'
,
group_list
),
url
(
r'^group_edit/$'
,
group_edit
),
url
(
r'^group_edit/$'
,
group_edit
),
url
(
r'^group_list/$'
,
group_list
),
url
(
r'^group_list/$'
,
group_list
),
url
(
r'^group_detail/$'
,
group_detail
),
url
(
r'^group_detail/$'
,
group_detail
),
# url(r'^group_del_host/$', group_del_host),
# url(r'^group_del_host/$', group_del_host),
url
(
r'^asset_edit_batch/$'
,
asset_edit_batch
),
url
(
r'^asset_edit_batch/$'
,
asset_edit_batch
),
# url(r'^host_edit_common/batch/$', host_edit_common_batch),
# url(r'^host_edit_common/batch/$', host_edit_common_batch),
url
(
r'^idc_add/$'
,
idc_add
),
url
(
r'^idc_list/$'
,
idc_list
),
url
(
r'^idc_detail/$'
,
idc_detail
),
url
(
r'^idc_edit/$'
,
idc_edit
),
url
(
r'^idc_del/$'
,
idc_del
),
)
)
\ No newline at end of file
jasset/views.py
View file @
b7c3cc55
...
@@ -3,12 +3,11 @@
...
@@ -3,12 +3,11 @@
import
ast
import
ast
from
django.db.models
import
Q
from
django.db.models
import
Q
from
django.template
import
RequestContext
from
django.shortcuts
import
get_object_or_404
from
django.shortcuts
import
get_object_or_404
from
jasset.asset_api
import
*
from
jasset.asset_api
import
*
from
jumpserver.api
import
*
from
jumpserver.api
import
*
from
jasset.forms
import
AssetForm
from
jasset.forms
import
AssetForm
,
IdcForm
from
jasset.models
import
Asset
,
IDC
,
AssetGroup
,
ASSET_TYPE
,
ASSET_STATUS
from
jasset.models
import
Asset
,
IDC
,
AssetGroup
,
ASSET_TYPE
,
ASSET_STATUS
...
@@ -328,3 +327,77 @@ def asset_detail(request):
...
@@ -328,3 +327,77 @@ def asset_detail(request):
asset_record
=
AssetRecord
.
objects
.
filter
(
asset
=
asset
)
.
order_by
(
'-alert_time'
)
asset_record
=
AssetRecord
.
objects
.
filter
(
asset
=
asset
)
.
order_by
(
'-alert_time'
)
return
my_render
(
'jasset/asset_detail.html'
,
locals
(),
request
)
return
my_render
(
'jasset/asset_detail.html'
,
locals
(),
request
)
@require_role
(
'admin'
)
def
idc_add
(
request
):
"""
IDC add view
"""
header_title
,
path1
,
path2
=
u'添加IDC'
,
u'资产管理'
,
u'添加IDC'
if
request
.
method
==
'POST'
:
idc_form
=
IdcForm
(
request
.
POST
)
if
idc_form
.
is_valid
():
idc_name
=
idc_form
.
cleaned_data
[
'name'
]
if
IDC
.
objects
.
filter
(
name
=
idc_name
):
emg
=
u'添加失败, 此IDC
%
s 已存在!'
%
idc_name
return
my_render
(
'jasset/idc_add.html'
,
locals
(),
request
)
else
:
idc_form
.
save
()
smg
=
u'IDC:
%
s添加成功'
%
idc_name
return
HttpResponseRedirect
(
"/jasset/idc_list/"
)
else
:
idc_form
=
IdcForm
()
return
render_to_response
(
'jasset/idc_add.html'
,
locals
(),
context_instance
=
RequestContext
(
request
))
@require_role
(
'admin'
)
def
idc_list
(
request
):
header_title
,
path1
,
path2
=
u'查看IDC'
,
u'资产管理'
,
u'查看IDC'
posts
=
IDC
.
objects
.
all
()
keyword
=
request
.
GET
.
get
(
'keyword'
,
''
)
if
keyword
:
posts
=
IDC
.
objects
.
filter
(
Q
(
name__contains
=
keyword
)
|
Q
(
comment__contains
=
keyword
))
else
:
posts
=
IDC
.
objects
.
exclude
(
name
=
'ALL'
)
.
order_by
(
'id'
)
contact_list
,
p
,
contacts
,
page_range
,
current_page
,
show_first
,
show_end
=
pages
(
posts
,
request
)
return
render_to_response
(
'jasset/idc_list.html'
,
locals
(),
context_instance
=
RequestContext
(
request
))
@require_role
(
'admin'
)
def
idc_edit
(
request
):
idc_id
=
request
.
GET
.
get
(
'id'
,
''
)
idc
=
get_object
(
IDC
,
id
=
idc_id
)
if
request
.
method
==
'POST'
:
idc_form
=
IdcForm
(
request
.
POST
,
instance
=
idc
)
if
idc_form
.
is_valid
():
idc_form
.
save
()
return
HttpResponseRedirect
(
"/jasset/idc_list/"
)
else
:
idc_form
=
IdcForm
(
instance
=
idc
)
return
my_render
(
'jasset/idc_edit.html'
,
locals
(),
request
)
@require_role
(
'admin'
)
def
idc_detail
(
request
):
""" IDC详情 """
header_title
,
path1
,
path2
=
u'IDC详情'
,
u'资产管理'
,
u'IDC详情'
idc_id
=
request
.
GET
.
get
(
'id'
,
''
)
idc
=
get_object
(
IDC
,
id
=
idc_id
)
posts
=
Asset
.
objects
.
filter
(
idc
=
idc
)
.
order_by
(
'ip'
)
contact_list
,
p
,
contacts
,
page_range
,
current_page
,
show_first
,
show_end
=
pages
(
posts
,
request
)
return
my_render
(
'jasset/idc_detail.html'
,
locals
(),
request
)
@require_role
(
'admin'
)
def
idc_del
(
request
):
uuid
=
request
.
GET
.
get
(
'uuid'
,
''
)
idc
=
get_object_or_404
(
IDC
,
uuid
=
uuid
)
idc
.
delete
()
return
HttpResponseRedirect
(
'/jasset/idc_list/'
)
templates/jasset/asset_list.html
View file @
b7c3cc55
...
@@ -229,7 +229,7 @@
...
@@ -229,7 +229,7 @@
data
:
{
asset_id_all
:
asset_id_all
},
data
:
{
asset_id_all
:
asset_id_all
},
url
:
"/jasset/asset_del/?arg=batch"
,
url
:
"/jasset/asset_del/?arg=batch"
,
success
:
function
()
{
success
:
function
()
{
window
.
open
(
"/jasset/asset_list/"
,
"_self"
);
parent
.
location
.
reload
(
);
}
}
});
});
}
}
...
...
templates/jasset/idc_add.html
0 → 100644
View file @
b7c3cc55
{% extends 'base.html' %}
{% block content %}
{% load bootstrap %}
{% include 'nav_cat_bar.html' %}
<div
class=
"wrapper wrapper-content animated fadeInRight"
>
<div
class=
"row"
>
<div
class=
"col-lg-10"
>
<div
class=
"ibox float-e-margins"
>
<div
id=
"ibox-content"
class=
"ibox-title"
>
<h5>
填写IDC基本信息
</h5>
<div
class=
"ibox-tools"
>
<a
class=
"collapse-link"
>
<i
class=
"fa fa-chevron-up"
></i>
</a>
<a
class=
"dropdown-toggle"
data-toggle=
"dropdown"
href=
"#"
>
<i
class=
"fa fa-wrench"
></i>
</a>
<ul
class=
"dropdown-menu dropdown-user"
>
</ul>
<a
class=
"close-link"
>
<i
class=
"fa fa-times"
></i>
</a>
</div>
</div>
<div
class=
"ibox-content"
>
{% if emg %}
<div
class=
"alert alert-warning text-center"
>
{{ emg }}
</div>
{% endif %}
{% if smg %}
<div
class=
"alert alert-success text-center"
>
{{ smg }}
</div>
{% endif %}
<form
id=
"assetForm"
method=
"post"
class=
"form-horizontal"
>
{{ idc_form.name|bootstrap_horizontal }}
<div
class=
"hr-line-dashed"
></div>
{{ idc_form.bandwidth|bootstrap_horizontal }}
<div
class=
"hr-line-dashed"
></div>
{{ idc_form.operator|bootstrap_horizontal }}
<div
class=
"hr-line-dashed"
></div>
{{ idc_form.linkman|bootstrap_horizontal }}
<div
class=
"hr-line-dashed"
></div>
{{ idc_form.phone|bootstrap_horizontal }}
<div
class=
"hr-line-dashed"
></div>
{{ idc_form.address|bootstrap_horizontal }}
<div
class=
"hr-line-dashed"
></div>
{{ idc_form.network|bootstrap_horizontal }}
<div
class=
"hr-line-dashed"
></div>
{{ idc_form.comment|bootstrap_horizontal }}
<div
class=
"hr-line-dashed"
></div>
<div
class=
"form-group"
>
<div
class=
"col-sm-4 col-sm-offset-5"
>
<button
class=
"btn btn-white"
type=
"submit"
>
重置
</button>
<button
class=
"btn btn-primary"
type=
"sumbit"
>
提交
</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
<script>
var
required_fields
=
[
"id_name"
];
required_fields
.
forEach
(
function
(
field
)
{
$
(
'label[for="'
+
field
+
'"]'
).
parent
().
addClass
(
"required"
);
});
$
(
'#assetForm'
).
validator
({
timely
:
2
,
theme
:
"yellow_right_effect"
,
fields
:
{
"j_idc"
:
{
rule
:
"required"
,
tip
:
"输入IDC名"
,
ok
:
""
,
msg
:
{
required
:
"IDC名必须填写!"
},
data
:
{
'data-ok'
:
"主机名可以使用"
,
'data-msg-required'
:
'主机名已正确'
}
}
},
valid
:
function
(
form
)
{
form
.
submit
();
}
});
</script>
{% endblock %}
\ No newline at end of file
templates/jasset/idc_detail.html
0 → 100644
View file @
b7c3cc55
This diff is collapsed.
Click to expand it.
templates/jasset/idc_edit.html
0 → 100644
View file @
b7c3cc55
{% extends 'base.html' %}
{% block content %}
{% load bootstrap %}
{% include 'nav_cat_bar.html' %}
<div
class=
"wrapper wrapper-content animated fadeInRight"
>
<div
class=
"row"
>
<div
class=
"col-lg-10"
>
<div
class=
"ibox float-e-margins"
>
<div
id=
"ibox-content"
class=
"ibox-title"
>
<h5>
填写IDC基本信息
</h5>
<div
class=
"ibox-tools"
>
<a
class=
"collapse-link"
>
<i
class=
"fa fa-chevron-up"
></i>
</a>
<a
class=
"dropdown-toggle"
data-toggle=
"dropdown"
href=
"#"
>
<i
class=
"fa fa-wrench"
></i>
</a>
<ul
class=
"dropdown-menu dropdown-user"
>
<li><a
href=
"#"
>
未启用 1
</a>
</li>
<li><a
href=
"#"
>
未启用 2
</a>
</li>
</ul>
<a
class=
"close-link"
>
<i
class=
"fa fa-times"
></i>
</a>
</div>
</div>
<div
class=
"ibox-content"
>
{% if emg %}
<div
class=
"alert alert-warning text-center"
>
{{ emg }}
</div>
{% endif %}
{% if smg %}
<div
class=
"alert alert-success text-center"
>
{{ smg }}
</div>
{% endif %}
<form
id=
"assetForm"
method=
"post"
class=
"form-horizontal"
>
{{ idc_form.name|bootstrap_horizontal }}
<div
class=
"hr-line-dashed"
></div>
{{ idc_form.bandwidth|bootstrap_horizontal }}
<div
class=
"hr-line-dashed"
></div>
{{ idc_form.operator|bootstrap_horizontal }}
<div
class=
"hr-line-dashed"
></div>
{{ idc_form.linkman|bootstrap_horizontal }}
<div
class=
"hr-line-dashed"
></div>
{{ idc_form.phone|bootstrap_horizontal }}
<div
class=
"hr-line-dashed"
></div>
{{ idc_form.address|bootstrap_horizontal }}
<div
class=
"hr-line-dashed"
></div>
{{ idc_form.network|bootstrap_horizontal }}
<div
class=
"hr-line-dashed"
></div>
{{ idc_form.comment|bootstrap_horizontal }}
<div
class=
"hr-line-dashed"
></div>
<div
class=
"form-group"
>
<div
class=
"col-sm-4 col-sm-offset-5"
>
<button
class=
"btn btn-white"
type=
"submit"
>
重置
</button>
<button
class=
"btn btn-primary"
type=
"sumbit"
>
提交
</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
<script>
var
required_fields
=
[
"id_name"
];
required_fields
.
forEach
(
function
(
field
)
{
$
(
'label[for="'
+
field
+
'"]'
).
parent
().
addClass
(
"required"
);
});
$
(
'#assetForm'
).
validator
({
timely
:
2
,
theme
:
"yellow_right_effect"
,
fields
:
{
"j_idc"
:
{
rule
:
"required"
,
tip
:
"输入IDC名"
,
ok
:
""
,
msg
:
{
required
:
"IDC名必须填写!"
},
data
:
{
'data-ok'
:
"主机名可以使用"
,
'data-msg-required'
:
'主机名已正确'
}
}
},
valid
:
function
(
form
)
{
form
.
submit
();
}
});
</script>
{% endblock %}
\ No newline at end of file
templates/jasset/idc_list.html
0 → 100644
View file @
b7c3cc55
{% extends 'base.html' %}
{% load mytags %}
{% block content %}
{% include 'nav_cat_bar.html' %}
<div
class=
"wrapper wrapper-content animated fadeInRight"
>
<div
class=
"row"
>
<div
class=
"col-lg-10"
>
<div
class=
"ibox float-e-margins"
>
<div
class=
"ibox-title"
>
<h5>
IDC详细信息列表
</h5>
<div
class=
"ibox-tools"
>
<a
class=
"collapse-link"
>
<i
class=
"fa fa-chevron-up"
></i>
</a>
<a
class=
"dropdown-toggle"
data-toggle=
"dropdown"
href=
"#"
>
<i
class=
"fa fa-wrench"
></i>
</a>
<ul
class=
"dropdown-menu dropdown-user"
>
<li><a
href=
"#"
>
未启用 1
</a>
</li>
<li><a
href=
"#"
>
未启用 2
</a>
</li>
</ul>
<a
class=
"close-link"
>
<i
class=
"fa fa-times"
></i>
</a>
</div>
</div>
<div
class=
"ibox-content"
>
<div
class=
""
>
<a
target=
"_blank"
href=
"/jasset/idc_add"
class=
"btn btn-sm btn-primary "
>
添加IDC
</a>
<form
id=
"search_form"
method=
"get"
action=
""
class=
"pull-right mail-search"
>
<div
class=
"input-group"
>
<input
type=
"text"
class=
"form-control input-sm"
id=
"search_input"
name=
"keyword"
placeholder=
"Search"
>
<input
type=
"text"
style=
"display: none"
>
<div
class=
"input-group-btn"
>
<button
id=
'search_btn'
type=
"submit"
class=
"btn btn-sm btn-primary"
>
Search
</button>
</div>
</div>
</form>
</div>
<form
id=
"contents_form"
name=
"contents_form"
>
<table
class=
"table table-striped table-bordered table-hover "
id=
"editable"
>
<thead>
<tr>
{% ifequal session_role_id 2 %}
<th
class=
"text-center"
><input
id=
"checkall"
type=
"checkbox"
class=
"i-checks"
name=
"checkall"
value=
"checkall"
data-editable=
'false'
onclick=
"check_all('contents_form')"
></th>
{% endifequal %}
<th
class=
"text-center"
>
机房名
</th>
<th
class=
"text-center"
>
主机数量
</th>
<th
class=
"text-center"
>
备注
</th>
<th
class=
"text-center"
>
操作
</th>
</tr>
</thead>
<tbody>
{% for post in contacts.object_list %}
<tr
class=
"gradeX"
>
<td
class=
"text-center"
name=
"j_id"
value=
"{{ post.id }}"
data-editable=
'false'
><input
name=
"id"
value=
"{{ post.id }}"
type=
"checkbox"
class=
"i-checks"
></td>
<td
class=
"text-center"
>
{{ post.name }}
</td>
<td
class=
"text-center"
>
<a
href=
"/jasset/idc_detail/?id={{ post.id }}"
>
{{ post.asset_set.count }}
</a>
</td>
<td
class=
"text-center"
>
{{ post.comment }}
</td>
<td
class=
"text-center"
>
<a
href=
"/jasset/idc_detail/?id={{ post.id }}"
class=
"iframe btn btn-xs btn-primary"
>
详情
</a>
<a
href=
"/jasset/idc_edit/?id={{ post.id }}"
class=
"btn btn-xs btn-info"
>
编辑
</a>
<a
href=
"/jasset/idc_del/?id={{ post.id }}"
class=
"btn btn-xs btn-danger"
>
删除
</a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
<div
class=
"row"
>
<div
class=
"col-sm-6"
>
{% ifequal session_role_id 2 %}
<input
type=
"button"
id=
"del_button"
class=
"btn btn-danger btn-sm"
name=
"del_button"
value=
"删除"
onclick=
"del('contents_form')"
/>
<!--<input type="button" id="alter_button" class="btn btn-warning btn-sm" name="alter_button" value="修改" onclick="alter('contents_form')" />-->
{% endifequal %}
</div>
{% include 'paginator.html' %}
</div>
</form>
</div>
</div>
</div>
</div>
</div>
<script>
function
del
(
form
)
{
var
checkboxes
=
document
.
getElementById
(
form
);
var
id_list
=
{};
var
j
=
0
;
for
(
var
i
=
0
;
i
<
checkboxes
.
elements
.
length
;
i
++
)
{
if
(
checkboxes
.
elements
[
i
].
type
==
"checkbox"
&&
checkboxes
.
elements
[
i
].
checked
==
true
&&
checkboxes
.
elements
[
i
].
value
!=
"checkall"
)
{
id_list
[
j
]
=
checkboxes
.
elements
[
i
].
value
;
j
++
;
}
}
if
(
confirm
(
"确定删除"
))
{
$
.
ajax
({
type
:
"POST"
,
url
:
"/jasset/idc_del/?id=multi"
,
data
:
{
"id_list"
:
id_list
,
"len_list"
:
j
},
success
:
function
(
data
)
{
window
.
open
(
"/jasset/idc_list/"
,
"_self"
);
}
});
}
}
</script>
{% endblock %}
\ No newline at end of file
templates/nav.html
View file @
b7c3cc55
...
@@ -22,6 +22,8 @@
...
@@ -22,6 +22,8 @@
<li
class=
"group_list group_detail group_edit"
><a
href=
"/jasset/group_list/"
>
查看资产组
</a></li>
<li
class=
"group_list group_detail group_edit"
><a
href=
"/jasset/group_list/"
>
查看资产组
</a></li>
<li
class=
"asset_add asset_add_multi"
><a
href=
"/jasset/asset_add/"
>
添加资产
</a></li>
<li
class=
"asset_add asset_add_multi"
><a
href=
"/jasset/asset_add/"
>
添加资产
</a></li>
<li
class=
"asset_list asset_detail asset_edit"
><a
href=
"/jasset/asset_list/"
>
查看资产
<span
class=
"label label-info pull-right"
>
{{ host_active_num }}/{{ host_total_num}}
</span></a></li>
<li
class=
"asset_list asset_detail asset_edit"
><a
href=
"/jasset/asset_list/"
>
查看资产
<span
class=
"label label-info pull-right"
>
{{ host_active_num }}/{{ host_total_num}}
</span></a></li>
<li
class=
"idc_add"
><a
href=
"/jasset/idc_add/"
>
添加机房
</a></li>
<li
class=
"idc_list idc_detail idc_edit"
><a
href=
"/jasset/idc_list/"
>
查看机房
</a></li>
</ul>
</ul>
</li>
</li>
<li
id=
"jperm"
>
<li
id=
"jperm"
>
...
...
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