Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
V
vue_django_test
Overview
Overview
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
周田
vue_django_test
Commits
5cb42289
Commit
5cb42289
authored
Sep 08, 2023
by
周田
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat:添加指令
parent
93ed262e
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
202 additions
and
49 deletions
+202
-49
CollapseTable.vue
frontend/src/components/protocol/CollapseTable.vue
+93
-46
protocol.vue
frontend/src/views/protocol/protocol.vue
+3
-3
models.py
protocol_version_manage/models.py
+10
-0
urls.py
protocol_version_manage/urls.py
+2
-0
views.py
protocol_version_manage/views.py
+94
-0
xdc.sqlite
xdc.sqlite
+0
-0
No files found.
frontend/src/components/protocol/CollapseTable.vue
View file @
5cb42289
...
@@ -4,7 +4,6 @@
...
@@ -4,7 +4,6 @@
<div
class=
"left"
>
<div
class=
"left"
>
<div
class=
"mr-4"
>
协议版本
</div>
<div
class=
"mr-4"
>
协议版本
</div>
<el-select
v-model=
"currentVersion"
@
change=
"changeProtocolVersion"
>
<el-select
v-model=
"currentVersion"
@
change=
"changeProtocolVersion"
>
<!-- TODO: 选择协议版本 -->
<el-option
<el-option
v-for=
"option in options"
v-for=
"option in options"
:key=
"option.value"
:key=
"option.value"
...
@@ -29,7 +28,8 @@
...
@@ -29,7 +28,8 @@
<el-button>
上传原始文件
</el-button>
<el-button>
上传原始文件
</el-button>
</el-upload>
</el-upload>
<el-button
v-else
@
click=
"downloadFile"
>
下载原始文件
</el-button>
<el-button
v-else
@
click=
"downloadFile"
>
下载原始文件
</el-button>
<el-button
@
click=
"addCmd = true"
>
新增指令
</el-button>
<el-button
@
click=
"addCmdDialog = true"
>
新增指令
</el-button>
<el-button
@
click=
"deleteProtocol"
>
删除该版本协议
</el-button>
</div>
</div>
</div>
</div>
...
@@ -47,37 +47,34 @@
...
@@ -47,37 +47,34 @@
</el-collapse-item>
</el-collapse-item>
</el-collapse>
</el-collapse>
<el-dialog
v-model=
"addCmd"
title=
"新增指令"
>
<el-dialog
v-model=
"addCmd
Dialog
"
title=
"新增指令"
>
<el-form>
<el-form
v-model=
"addCmdData"
>
<el-form-item
label=
"协议
名称"
:label-width=
"formLabelWidth"
>
<el-form-item
prop=
"cmd_name"
label=
"指令
名称"
:label-width=
"formLabelWidth"
>
<el-input
autocomplete=
"off"
/>
<el-input
v-model=
"addCmdData.cmd_name"
autocomplete=
"off"
/>
</el-form-item>
</el-form-item>
<el-form-item
label=
"指令名称"
:label-width=
"formLabelWidth"
>
<el-form-item
prop=
"cmd_type"
label=
"指令类型"
:label-width=
"formLabelWidth"
>
<el-input
autocomplete=
"off"
/>
<el-select
v-model=
"addCmdData.cmd_type"
>
</el-form-item>
<el-form-item
label=
"指令类型"
:label-width=
"formLabelWidth"
>
<el-select>
<el-option
label=
"TX"
value=
"TX"
></el-option>
<el-option
label=
"TX"
value=
"TX"
></el-option>
<el-option
label=
"RX"
value=
"RX"
></el-option>
<el-option
label=
"RX"
value=
"RX"
></el-option>
</el-select>
</el-select>
</el-form-item>
</el-form-item>
<el-form-item
label=
"协议类型"
:label-width=
"formLabelWidth"
>
<el-form-item
prop=
"encode"
label=
"协议类型"
:label-width=
"formLabelWidth"
>
<el-select>
<el-select
v-model=
"addCmdData.encode"
>
<el-option
label=
"ASCII"
value=
"ASCII"
></el-option>
<el-option
label=
"ASCII"
value=
"ASCII"
></el-option>
<el-option
label=
"HEX"
value=
"HEX"
></el-option>
<el-option
label=
"HEX"
value=
"HEX"
></el-option>
</el-select>
</el-select>
</el-form-item>
</el-form-item>
<el-form-item
label=
"定时发送
"
:label-width=
"formLabelWidth"
>
<el-form-item
prop=
"timing_cmd_cycle_period"
label=
"定时发送(单位s)
"
:label-width=
"formLabelWidth"
>
<el-input
autocomplete=
"off"
/>
<el-input
v-model=
"addCmdData.timing_cmd_cycle_period"
autocomplete=
"off"
/>
</el-form-item>
</el-form-item>
<el-form-item
label=
"说明"
:label-width=
"formLabelWidth"
>
<el-form-item
prop=
"cmd_explain"
label=
"说明"
:label-width=
"formLabelWidth"
>
<el-input
autocomplete=
"off"
/>
<el-input
v-model=
"addCmdData.cmd_explain"
autocomplete=
"off"
/>
</el-form-item>
</el-form-item>
</el-form>
</el-form>
<template
#
footer
>
<template
#
footer
>
<span
class=
"dialog-footer"
>
<span
class=
"dialog-footer"
>
<el-button
@
click=
"addCmd = false"
>
取消
</el-button>
<el-button
@
click=
"addCmd
Dialog
= false"
>
取消
</el-button>
<el-button
type=
"primary"
@
click=
"
open
"
>
<el-button
type=
"primary"
@
click=
"
addCmd
"
>
确定
确定
</el-button>
</el-button>
</span>
</span>
...
@@ -87,7 +84,7 @@
...
@@ -87,7 +84,7 @@
</template>
</template>
<
script
setup
lang=
"ts"
>
<
script
setup
lang=
"ts"
>
import
{
ref
,
onMounted
}
from
'vue'
import
{
ref
,
onMounted
,
reactive
}
from
'vue'
import
{
ElMessage
,
ElMessageBox
}
from
"element-plus"
;
import
{
ElMessage
,
ElMessageBox
}
from
"element-plus"
;
import
{
ProtocolInit
}
from
"@/dao/protocol"
import
{
ProtocolInit
}
from
"@/dao/protocol"
import
ProtocolTable
from
"./ProtocolTable.vue"
;
import
ProtocolTable
from
"./ProtocolTable.vue"
;
...
@@ -95,7 +92,7 @@ import type { DeviceProtocolResponse, ProtocolCmdResponse } from './types';
...
@@ -95,7 +92,7 @@ import type { DeviceProtocolResponse, ProtocolCmdResponse } from './types';
import
{
useProtocolVersionStore
}
from
'@/stores/allProtocolVersion'
;
import
{
useProtocolVersionStore
}
from
'@/stores/allProtocolVersion'
;
import
axios
from
'axios'
;
import
axios
from
'axios'
;
const
addCmd
=
ref
<
boolean
>
(
false
)
const
addCmd
Dialog
=
ref
<
boolean
>
(
false
)
const
currentVersion
=
ref
(
''
)
const
currentVersion
=
ref
(
''
)
type
OptionType
=
{
type
OptionType
=
{
value
:
string
value
:
string
...
@@ -110,31 +107,6 @@ type propsType = {
...
@@ -110,31 +107,6 @@ type propsType = {
protocolCmd
:
ProtocolCmdResponse
protocolCmd
:
ProtocolCmdResponse
}
}
const
props
=
defineProps
<
propsType
>
()
const
props
=
defineProps
<
propsType
>
()
const
open
=
()
=>
{
ElMessageBox
.
confirm
(
'是否确认增加?'
,
'Warning'
,
{
confirmButtonText
:
'确定'
,
cancelButtonText
:
'取消'
,
type
:
'warning'
,
}
)
.
then
(()
=>
{
ElMessage
({
type
:
'success'
,
message
:
'增加成功'
,
})
addCmd
.
value
=
false
})
.
catch
(()
=>
{
ElMessage
({
type
:
'info'
,
message
:
'已取消'
,
})
})
}
function
Init
(){
function
Init
(){
ProtocolInit
({
protocol_name
:
props
.
name
})
ProtocolInit
({
protocol_name
:
props
.
name
})
...
@@ -274,6 +246,81 @@ const downloadFile = () => {
...
@@ -274,6 +246,81 @@ const downloadFile = () => {
console
.
log
(
"downloadFile"
);
console
.
log
(
"downloadFile"
);
};
};
// 删除协议的某个版本
const
deleteProtocol
=
()
=>
{
console
.
log
(
currentVersion
.
value
,
props
.
name
);
axios
.
post
(
'/api/protocol_vesrion_manage/delete_protocol_vesrion/'
,
{
version
:
currentVersion
.
value
,
protocol_name
:
props
.
name
,
})
.
then
(()
=>
{
ElMessage
({
type
:
'success'
,
message
:
'删除成功'
,
})
options
.
value
=
options
.
value
.
filter
((
item
)
=>
item
.
value
!==
currentVersion
.
value
)
currentVersion
.
value
=
options
.
value
[
0
].
value
changeProtocolVersion
()
})
.
catch
((
err
)
=>
{
console
.
log
(
err
);
ElMessage
.
error
(
'删除失败'
)
})
}
// 新增协议指令
const
addCmdData
=
reactive
({
cmd_name
:
''
,
cmd_type
:
''
,
encode
:
''
,
timing_cmd_cycle_period
:
''
,
cmd_explain
:
''
,
})
const
addCmd
=
()
=>
{
ElMessageBox
.
confirm
(
'是否确认增加?'
,
'Warning'
,
{
confirmButtonText
:
'确定'
,
cancelButtonText
:
'取消'
,
type
:
'warning'
,
}
)
.
then
(()
=>
{
axios
.
post
(
'/api/protocol_vesrion_manage/add_protocol_cmd/'
,
{
protocol_name
:
props
.
name
,
cmd_name
:
addCmdData
.
cmd_name
,
cmd_type
:
addCmdData
.
cmd_type
,
encode
:
addCmdData
.
encode
,
timing_cmd_cycle_period
:
addCmdData
.
timing_cmd_cycle_period
,
cmd_explain
:
addCmdData
.
cmd_explain
,
version
:
currentVersion
.
value
,
})
.
then
(()
=>
{
ElMessage
({
type
:
'success'
,
message
:
'操作成功'
,
})
changeProtocolVersion
()
})
.
catch
(()
=>
{
ElMessage
({
type
:
'error'
,
message
:
'操作失败'
,
})
})
addCmdDialog
.
value
=
false
})
.
catch
(()
=>
{
ElMessage
({
type
:
'info'
,
message
:
'已取消'
,
})
})
}
</
script
>
</
script
>
<
style
>
<
style
>
...
...
frontend/src/views/protocol/protocol.vue
View file @
5cb42289
...
@@ -12,7 +12,7 @@
...
@@ -12,7 +12,7 @@
<el-dialog
title=
"新增协议"
v-model=
"isShow"
>
<el-dialog
title=
"新增协议"
v-model=
"isShow"
>
<el-form>
<el-form>
<el-form-item
label=
"协议名称"
:label-width=
"formLabelWidth"
>
<el-form-item
label=
"协议名称"
:label-width=
"formLabelWidth"
>
<el-input
autocomplete=
"off"
/>
<el-input
v-model=
"protocolName"
autocomplete=
"off"
/>
</el-form-item>
</el-form-item>
</el-form>
</el-form>
<template
#
footer
>
<template
#
footer
>
...
@@ -48,10 +48,10 @@ onMounted(() => {
...
@@ -48,10 +48,10 @@ onMounted(() => {
})
})
})
})
// TODO:添加协议
const
protocolName
=
ref
<
string
>
(
''
)
const
addProtocol
=
()
=>
{
const
addProtocol
=
()
=>
{
isShow
.
value
=
false
isShow
.
value
=
false
console
.
log
(
'addProtocol'
)
console
.
log
(
protocolName
.
value
)
}
}
</
script
>
</
script
>
...
...
protocol_version_manage/models.py
View file @
5cb42289
...
@@ -22,6 +22,9 @@ class AllDevCmdDefineAndVersion(models.Model):
...
@@ -22,6 +22,9 @@ class AllDevCmdDefineAndVersion(models.Model):
lua_script_out
=
models
.
TextField
()
# Field name made lowercase.
lua_script_out
=
models
.
TextField
()
# Field name made lowercase.
version
=
models
.
TextField
()
version
=
models
.
TextField
()
def
__hash__
(
self
)
->
int
:
return
super
()
.
__hash__
()
def
__eq__
(
self
,
__value
:
object
)
->
bool
:
def
__eq__
(
self
,
__value
:
object
)
->
bool
:
if
not
isinstance
(
__value
,
AllDevCmdDefineAndVersion
):
if
not
isinstance
(
__value
,
AllDevCmdDefineAndVersion
):
return
False
return
False
...
@@ -66,6 +69,9 @@ class AllProtocolDefinAndVersion(models.Model):
...
@@ -66,6 +69,9 @@ class AllProtocolDefinAndVersion(models.Model):
cmd_explain
=
models
.
TextField
()
# Field name made lowercase.
cmd_explain
=
models
.
TextField
()
# Field name made lowercase.
version
=
models
.
TextField
()
version
=
models
.
TextField
()
def
__hash__
(
self
)
->
int
:
return
super
()
.
__hash__
()
def
__eq__
(
self
,
__value
:
object
)
->
bool
:
def
__eq__
(
self
,
__value
:
object
)
->
bool
:
if
not
isinstance
(
__value
,
AllProtocolDefinAndVersion
):
if
not
isinstance
(
__value
,
AllProtocolDefinAndVersion
):
return
False
return
False
...
@@ -87,6 +93,10 @@ class AllProtocolDefinAndVersion(models.Model):
...
@@ -87,6 +93,10 @@ class AllProtocolDefinAndVersion(models.Model):
class
CurrentDevVersion
(
models
.
Model
):
class
CurrentDevVersion
(
models
.
Model
):
protocol_name
=
models
.
TextField
(
primary_key
=
True
)
# Field name made lowercase.
protocol_name
=
models
.
TextField
(
primary_key
=
True
)
# Field name made lowercase.
version
=
models
.
TextField
()
version
=
models
.
TextField
()
def
__hash__
(
self
)
->
int
:
return
super
()
.
__hash__
()
class
Meta
:
class
Meta
:
db_table
=
'CurrentDevVersion'
db_table
=
'CurrentDevVersion'
...
...
protocol_version_manage/urls.py
View file @
5cb42289
...
@@ -15,6 +15,8 @@ urlpatterns = [
...
@@ -15,6 +15,8 @@ urlpatterns = [
re_path
(
r'^protocol_version_manage/file_download/(?P<protocol_name>.+)/(?P<version>.+)/$'
,
re_path
(
r'^protocol_version_manage/file_download/(?P<protocol_name>.+)/(?P<version>.+)/$'
,
views
.
raw_file_download
),
views
.
raw_file_download
),
re_path
(
r'^all_protocol_version/$'
,
views
.
AllProtocolVersionViewSet
.
as_view
({
'get'
:
'list'
})),
re_path
(
r'^all_protocol_version/$'
,
views
.
AllProtocolVersionViewSet
.
as_view
({
'get'
:
'list'
})),
re_path
(
r'^protocol_vesrion_manage/delete_protocol_vesrion/$'
,
views
.
delete_protocol_vesrion
),
re_path
(
r'^protocol_vesrion_manage/add_protocol_cmd/$'
,
views
.
add_protocol_cmd
),
]
]
urlpatterns
+=
router
.
urls
urlpatterns
+=
router
.
urls
protocol_version_manage/views.py
View file @
5cb42289
...
@@ -197,5 +197,99 @@ def raw_file_download(request, protocol_name, version):
...
@@ -197,5 +197,99 @@ def raw_file_download(request, protocol_name, version):
class
CurrentDevVersionViewSet
(
GenericViewSet
,
ListModelMixin
):
class
CurrentDevVersionViewSet
(
GenericViewSet
,
ListModelMixin
):
"""
获取所有协议当前的版本
"""
queryset
=
CurrentDevVersion
.
objects
.
all
()
queryset
=
CurrentDevVersion
.
objects
.
all
()
serializer_class
=
CurrentDevVersionSerializer
serializer_class
=
CurrentDevVersionSerializer
@swagger_auto_schema
(
methods
=
[
'POST'
],
request_body
=
openapi
.
Schema
(
type
=
openapi
.
TYPE_OBJECT
,
properties
=
{
'protocol_name'
:
openapi
.
Schema
(
type
=
openapi
.
TYPE_STRING
),
'version'
:
openapi
.
Schema
(
type
=
openapi
.
TYPE_STRING
),
}
))
@api_view
([
'POST'
])
def
delete_protocol_vesrion
(
request
):
"""
删除特定版本的协议
"""
protocol_name
=
request
.
data
.
get
(
'protocol_name'
)
version
=
request
.
data
.
get
(
'version'
)
print
(
version
,
protocol_name
)
if
protocol_name
is
None
or
version
is
None
:
return
Response
(
status
=
status
.
HTTP_400_BAD_REQUEST
)
all_cmds
=
AllProtocolDefinAndVersion
.
objects
.
filter
(
protocol_name
=
protocol_name
)
.
all
()
for
cmd
in
all_cmds
:
cmd_vesrions
=
json
.
loads
(
cmd
.
version
)
if
len
(
cmd_vesrions
)
==
1
and
version
in
cmd_vesrions
:
# 这个命令是这个版本独有的
cmd
.
delete
()
elif
version
in
cmd_vesrions
:
cmd_vesrions
.
remove
(
version
)
cmd
.
version
=
json
.
dumps
(
cmd_vesrions
)
cmd
.
save
()
else
:
# 这个命令不在这个版本中
continue
all_fields
=
AllDevCmdDefineAndVersion
.
objects
.
filter
(
cmd_name
=
cmd
.
cmd_name
)
.
all
()
for
field
in
all_fields
:
field_versions
=
json
.
loads
(
field
.
version
)
if
len
(
field_versions
)
==
1
and
version
in
field_versions
:
# 这个字段是这个版本独有的
field
.
delete
()
elif
version
in
field_versions
:
field_versions
.
remove
(
version
)
field
.
version
=
json
.
dumps
(
field_versions
)
field
.
save
()
else
:
# 这个字段不在这个版本中
continue
protocol_vesrions
=
AllProtocolVersion
.
objects
.
filter
(
protocol_name
=
protocol_name
)
.
first
()
protocol_vesrions_l
:
list
=
json
.
loads
(
protocol_vesrions
.
version_paths
)
vesrions_l
:
list
=
[
version_paths
[
'version'
]
for
version_paths
in
protocol_vesrions_l
]
if
len
(
vesrions_l
)
==
1
:
# 这个版本是这个协议独有的
protocol_vesrions
.
delete
()
elif
version
in
vesrions_l
:
protocol_vesrions_l
.
pop
(
vesrions_l
.
index
(
version
))
protocol_vesrions
.
version_paths
=
json
.
dumps
(
protocol_vesrions_l
)
protocol_vesrions
.
save
()
return
Response
(
status
=
status
.
HTTP_200_OK
)
@swagger_auto_schema
(
methods
=
[
'POST'
],
request_body
=
openapi
.
Schema
(
type
=
openapi
.
TYPE_OBJECT
,
properties
=
{
'protocol_name'
:
openapi
.
Schema
(
type
=
openapi
.
TYPE_STRING
),
'cmd_name'
:
openapi
.
Schema
(
type
=
openapi
.
TYPE_STRING
),
'cmd_type'
:
openapi
.
Schema
(
type
=
openapi
.
TYPE_STRING
),
'encode'
:
openapi
.
Schema
(
type
=
openapi
.
TYPE_STRING
),
'timing_cmd_cycle_period'
:
openapi
.
Schema
(
type
=
openapi
.
TYPE_INTEGER
),
'cmd_explain'
:
openapi
.
Schema
(
type
=
openapi
.
TYPE_STRING
),
'version'
:
openapi
.
Schema
(
type
=
openapi
.
TYPE_STRING
),
}
))
@api_view
([
'POST'
])
def
add_protocol_cmd
(
request
):
data
=
request
.
data
if
(
data
.
get
(
'protocol_name'
)
is
None
or
data
.
get
(
'cmd_name'
)
is
None
or
data
.
get
(
'cmd_type'
)
is
None
or
data
.
get
(
'encode'
)
is
None
or
data
.
get
(
'timing_cmd_cycle_period'
)
is
None
or
data
.
get
(
'cmd_explain'
)
is
None
or
data
.
get
(
'version'
)
is
None
):
return
Response
(
status
=
status
.
HTTP_400_BAD_REQUEST
)
data
[
'version'
]
=
json
.
dumps
([
data
[
'version'
]])
obj
=
AllProtocolDefinAndVersion
.
objects
.
create
(
**
data
)
if
obj
is
not
None
:
return
Response
(
status
=
status
.
HTTP_200_OK
)
return
Response
(
status
=
status
.
HTTP_500_INTERNAL_SERVER_ERROR
)
xdc.sqlite
View file @
5cb42289
No preview for this file type
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