Commit cedde1f3 by 周田

feat:删除协议的某个版本

parent 93ed262e
......@@ -4,7 +4,6 @@
<div class="left">
<div class="mr-4">协议版本</div>
<el-select v-model="currentVersion" @change="changeProtocolVersion">
<!-- TODO: 选择协议版本 -->
<el-option
v-for="option in options"
:key="option.value"
......@@ -30,6 +29,7 @@
</el-upload>
<el-button v-else @click="downloadFile"> 下载原始文件 </el-button>
<el-button @click="addCmd = true">新增指令</el-button>
<el-button @click="deleteProtocol">删除该版本协议</el-button>
</div>
</div>
......@@ -274,6 +274,29 @@ const 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('删除失败')
})
}
</script>
<style>
......
......@@ -12,7 +12,7 @@
<el-dialog title="新增协议" v-model="isShow">
<el-form>
<el-form-item label="协议名称" :label-width="formLabelWidth">
<el-input autocomplete="off" />
<el-input v-model="protocolName" autocomplete="off" />
</el-form-item>
</el-form>
<template #footer>
......@@ -48,10 +48,10 @@ onMounted(() => {
})
})
// TODO:添加协议
const protocolName = ref<string>('')
const addProtocol = () => {
isShow.value = false
console.log('addProtocol')
console.log(protocolName.value)
}
</script>
......
......@@ -22,6 +22,9 @@ class AllDevCmdDefineAndVersion(models.Model):
lua_script_out = models.TextField() # Field name made lowercase.
version = models.TextField()
def __hash__(self) -> int:
return super().__hash__()
def __eq__(self, __value: object) -> bool:
if not isinstance(__value, AllDevCmdDefineAndVersion):
return False
......@@ -66,6 +69,9 @@ class AllProtocolDefinAndVersion(models.Model):
cmd_explain = models.TextField() # Field name made lowercase.
version = models.TextField()
def __hash__(self) -> int:
return super().__hash__()
def __eq__(self, __value: object) -> bool:
if not isinstance(__value, AllProtocolDefinAndVersion):
return False
......@@ -87,6 +93,10 @@ class AllProtocolDefinAndVersion(models.Model):
class CurrentDevVersion(models.Model):
protocol_name = models.TextField(primary_key=True) # Field name made lowercase.
version = models.TextField()
def __hash__(self) -> int:
return super().__hash__()
class Meta:
db_table = 'CurrentDevVersion'
......
......@@ -15,6 +15,7 @@ urlpatterns = [
re_path(r'^protocol_version_manage/file_download/(?P<protocol_name>.+)/(?P<version>.+)/$',
views.raw_file_download),
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),
]
urlpatterns += router.urls
......@@ -197,5 +197,68 @@ def raw_file_download(request, protocol_name, version):
class CurrentDevVersionViewSet(GenericViewSet, ListModelMixin):
"""
获取所有协议当前的版本
"""
queryset = CurrentDevVersion.objects.all()
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)
No preview for this file type
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment