Commit ab4625f5 authored by wanli's avatar wanli

feat: 前端增加代码显示

parent d3e4a593
......@@ -55,6 +55,7 @@ backend/backupData.json
config.ini
*.epk
*.bc
*.lock
tools/build_out/application/config.py
tools/build_out/logs
......
......@@ -39,13 +39,28 @@ def get_encoding(file):
data = f.read()
return chardet.detect(data)['encoding']
def stopApp():
fpath = os.sep.join([os.getcwd(), "restart.json"])
with open(fpath, "w+") as f:
ret = json.loads(f.read())
ret["count"] = ret["count"] + 1
f.write(json.dumps(ret, indent=4))
return ret
@api.route("/system/getFileContent", methods=["POST"])
def get_file_content():
params = request.json
if not params or not params.get("file", None):
return response_result(ResponseCode.REQUEST_ERROR, msg="parameter file is null")
# 获取文件路径
fpath = Path(config.get("UPLOAD_PATH")).joinpath(params["file"])
# 判断文件是否存在
if not fpath.exists():
return response_result(ResponseCode.REQUEST_ERROR, msg="file not found")
# 存在则读取文件内容
encode_type = get_encoding(fpath.resolve().as_posix())
result = ""
with open(fpath.resolve().as_posix(), "r", encoding=encode_type) as f:
result = f.read()
# 判断文件类型
# 将内容以字符串形式返回给前端
return response_result(ResponseCode.OK, data=result)
@api.route("/evm", methods=['GET','POST'])
def hello_evm():
......@@ -123,7 +138,6 @@ def get_app_info(uuid):
res = item
break
print(res)
return response_result(ResponseCode.OK, data=res)
@api.route("/store/downloadEpk/<uuid>", methods=['GET', 'POST'])
......@@ -142,14 +156,12 @@ def download_epk(uuid):
'status': 0,
'time': int(time.time())
})
print(res)
return response_result(ResponseCode.OK, data=res)
@api.route("/opqcp", methods=['POST'])
def action_opqcp():
params = request.json
result, message = signalManager.actionOpqcp.emit(params)
print(result)
return response_result(ResponseCode.OK, msg=message)
......@@ -210,7 +222,6 @@ def action_build():
fd.write(text)
result = subprocess.call("./utils/executable -c {file}".format(file=file), shell=True)
print(result)
# new_name = "{}.{}".format(Path(file).name, "bc")
# os.rename(os.sep.join([os.getcwd(), "executable.bc"]), os.sep.join([os.getcwd(), new_name]))
# dst_files.append(Path(os.getcwd()).joinpath(new_name))
......@@ -378,10 +389,17 @@ def parse_header_files():
# 如果有错误,则向前端提示错误
# 如果没有错误,则向前端返回下载地址。最终需要打包成压缩文件,放到nginx负载的公网目录下
params = request.form
if not params:
params = {}
if params.get("type", None) and params.get("type") not in ["evm", "cffi"]:
return response_result(ResponseCode.REQUEST_ERROR, msg="type value is invaild")
if len(request.files.getlist('binfile')) < 0:
return response_result(ResponseCode.REQUEST_ERROR, msg="nothing upload")
target_path = Path(config.get("UPLOAD_PATH")).joinpath(config.get("UPLOAD_DIR"))
target_path = Path(config.get("UPLOAD_PATH")).joinpath(config.get("TEMP_DIR"))
if not target_path.exists():
target_path.mkdir()
......@@ -394,13 +412,15 @@ def parse_header_files():
return response_result(ResponseCode.REQUEST_ERROR, msg="nothing upload...")
files = []
source_file_list = []
for f in request.files.getlist('binfile'):
target = target_path.joinpath(f.filename)
if target.suffix not in [".h"]:
if target.suffix not in [".h", ".hpp", ".c", ".cpp"]:
continue
with open(target.resolve().as_posix(), "wb+") as fd:
fd.write(f.stream.read())
files.append(target)
source_file_list.append(target.relative_to(Path(config.get("UPLOAD_PATH"))).as_posix())
# 加载系统内置类型映射文件
config_file = "typeconfig.json"
......@@ -418,23 +438,41 @@ def parse_header_files():
error_tips = []
result_list = []
for file in files:
result = parse_header_file(file.resolve().as_posix(), undefined_type, error_tips)
result = parse_header_file(file.resolve().as_posix(), undefined_type, error_tips, target_path.resolve().as_posix())
if result != None:
target = target_path.joinpath("analyze.{}.json".format(file.name))
source_file_list.append(target.relative_to(Path(config.get("UPLOAD_PATH"))).as_posix())
target = target_path.joinpath("generate.{}.json".format(file.name))
with open(target.resolve().as_posix(), "w+", encoding="utf-8") as f:
f.write(json.dumps(result, indent=2))
source_file_list.append(target.relative_to(Path(config.get("UPLOAD_PATH"))).as_posix())
target = target_path.joinpath("{}.json".format(file.name))
with open(target.resolve().as_posix(), "w+", encoding="utf-8") as f:
f.write(json.dumps(result))
if params.get("name", None) != None and len(files) <= 1:
result["name"] = params.get("name")
result_list.append(result)
source_file_list.append(target.relative_to(Path(config.get("UPLOAD_PATH"))).as_posix())
target_dir = Path(config.get("UPLOAD_PATH")).joinpath(config.get("TEMP_DIR")).resolve().as_posix()
target_dir = target_path.parent
if len(result_list) > 0:
path_list = generate_from_list(result_list)
target_file = compress_files(path_list, target_dir)
path_list = generate_from_list(result_list, params["type"], target_path.resolve().as_posix())
target_file = compress_files(path_list, target_dir.resolve().as_posix())
for file in path_list:
source_file_list.append(Path(file["c"]).relative_to(Path(config.get("UPLOAD_PATH"))).as_posix())
source_file_list.append(Path(file["h"]).relative_to(Path(config.get("UPLOAD_PATH"))).as_posix())
source_file_list.append(Path(file["j"]).relative_to(Path(config.get("UPLOAD_PATH"))).as_posix())
if len(undefined_type) > 0: # 说明有用户自定义的类型,需要用户标注这些类型
return response_result(ResponseCode.REQUEST_ERROR, data={ 'undefined_type': undefined_type, 'dir': target_path.name }, msg=error_tips)
else: # 没啥问题,返回下载地址给前端
target_file = Path(target_file).relative_to(Path(config.get("UPLOAD_PATH"))).as_posix()
return response_result(ResponseCode.OK, data={ "filename": os.path.basename(target_file), "url": target_file })
target_file = Path(target_file).relative_to(Path(config.get("UPLOAD_PATH")))
data = { "file": target_file.name, "url": target_file.as_posix(), "parent": target_path.relative_to(target_dir.parent).as_posix(), "sources": source_file_list }
return response_result(ResponseCode.OK, data=data)
except Exception as e:
traceback.print_exc()
logger.error(str(e))
......@@ -453,6 +491,9 @@ def process_parse():
if len(params) <= 0:
return response_result(ResponseCode.PARAMETER_NULL)
if params.get("module", None) and params.get("module") not in ["evm", "cffi"]:
return response_result(ResponseCode.REQUEST_ERROR, msg="module value is invaild")
target_dir = Path(config.get("UPLOAD_PATH")).joinpath(config.get("TEMP_DIR")).joinpath(params["dir"])
if not target_dir.exists():
return response_result(ResponseCode.INVAILD_REQUEST, msg="target directory not exists")
......@@ -480,26 +521,45 @@ def process_parse():
undefined_type = []
error_tips = []
result_list = []
source_file_list = []
for root, dirs, files in os.walk(target_dir.resolve().as_posix()):
target_file = Path(root)
target_path = Path(root)
for file in files:
target_file = target_file.joinpath(file)
target_file = target_path.joinpath(file)
if target_file.exists():
result = parse_header_file(target_file.resolve().as_posix(), undefined_type, error_tips)
result = parse_header_file(target_file.resolve().as_posix(), undefined_type, error_tips, root)
if result != None:
target = target_path.joinpath("analyze.{}.json".format(file.name))
source_file_list.append(target.relative_to(Path(config.get("UPLOAD_PATH"))).as_posix())
target = target_path.joinpath("generate.{}.json".format(file.name))
with open(target.resolve().as_posix(), "w+", encoding="utf-8") as f:
f.write(json.dumps(result, indent=2))
source_file_list.append(target.relative_to(Path(config.get("UPLOAD_PATH"))).as_posix())
target = target_file.parent.joinpath("{}.json".format(target_file.name))
with open(target.resolve().as_posix(), "w+", encoding="utf-8") as f:
f.write(json.dumps(result))
result_list.append(result)
target_dir = Path(config.get("UPLOAD_PATH")).joinpath(config.get("UPLOAD_DIR")).resolve().as_posix()
if params.get("name", None) and len(files) <= 1:
result["name"] = params.get("name")
result_list.append(result)
source_file_list.append(target.relative_to(Path(config.get("UPLOAD_PATH"))).as_posix())
source_file_list.append(file)
if len(result_list) > 0:
path_list = generate_from_list(result_list)
path_list = generate_from_list(result_list, params["module"], target_dir.resolve().as_posix())
target_dir = Path(config.get("UPLOAD_PATH")).joinpath(config.get("UPLOAD_DIR")).resolve().as_posix()
target_file = compress_files(path_list, target_dir)
for file in path_list:
source_file_list.append(Path(file["c"]).relative_to(Path(config.get("UPLOAD_PATH"))).as_posix())
source_file_list.append(Path(file["h"]).relative_to(Path(config.get("UPLOAD_PATH"))).as_posix())
source_file_list.append(Path(file["j"]).relative_to(Path(config.get("UPLOAD_PATH"))).as_posix())
if len(undefined_type) <= 0:
target_file = Path(target_file).relative_to(Path(config.get("UPLOAD_PATH"))).as_posix()
return response_result(ResponseCode.OK, data={ "filename": os.path.basename(target_file), "url": target_file })
target_file = Path(target_file).relative_to(Path(config.get("UPLOAD_PATH")))
return response_result(ResponseCode.OK, data={ "file": target_file.name, "url": target_file.as_posix(), "parent": target_file.resolve().as_posix(), "sources": source_file_list })
else:
return response_result(ResponseCode.REQUEST_ERROR, data={ 'undefined_type': undefined_type, 'dir': params["dir"] }, msg=error_tips)
except Exception as e:
......
Subproject commit 0ec1baa3d93da20ef57c3dd937c19ac80bf9abad
Subproject commit 55b1249c57b4912e8fe706d87620889b3f97bdc2
......@@ -2113,11 +2113,6 @@
"@hapi/hoek": "^8.3.0"
}
},
"@interactjs/types": {
"version": "1.9.22",
"resolved": "https://registry.npm.taobao.org/@interactjs/types/download/@interactjs/types-1.9.22.tgz",
"integrity": "sha512-GMMMCYE+FPrKCOOOqQ/ImpqLyinb6e8psw9MR9ymTJxnkmJMKrY/GDC/187PVxpWdtSqW+GibkeRfUCOv6vFjg=="
},
"@intervolga/optimize-cssnano-plugin": {
"version": "1.0.6",
"resolved": "https://mirrors.huaweicloud.com/repository/npm/@intervolga/optimize-cssnano-plugin/-/optimize-cssnano-plugin-1.0.6.tgz",
......@@ -2738,16 +2733,6 @@
"integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
"dev": true
},
"ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"optional": true,
"requires": {
"color-convert": "^2.0.1"
}
},
"cacache": {
"version": "13.0.1",
"resolved": "https://mirrors.huaweicloud.com/repository/npm/cacache/-/cacache-13.0.1.tgz",
......@@ -2785,23 +2770,6 @@
"wrap-ansi": "^6.2.0"
}
},
"color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"optional": true,
"requires": {
"color-name": "~1.1.4"
}
},
"color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true,
"optional": true
},
"css-loader": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/css-loader/-/css-loader-3.6.0.tgz",
......@@ -2823,13 +2791,6 @@
"semver": "^6.3.0"
}
},
"emojis-list": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
"integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==",
"dev": true,
"optional": true
},
"fast-deep-equal": {
"version": "3.1.3",
"resolved": "https://mirrors.huaweicloud.com/repository/npm/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
......@@ -2931,60 +2892,6 @@
"terser": "^4.6.12",
"webpack-sources": "^1.4.3"
}
},
"vue-loader-v16": {
"version": "npm:vue-loader@16.1.2",
"resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-16.1.2.tgz",
"integrity": "sha512-8QTxh+Fd+HB6fiL52iEVLKqE9N1JSlMXLR92Ijm6g8PZrwIxckgpqjPDWRP5TWxdiPaHR+alUWsnu1ShQOwt+Q==",
"dev": true,
"optional": true,
"requires": {
"chalk": "^4.1.0",
"hash-sum": "^2.0.0",
"loader-utils": "^2.0.0"
},
"dependencies": {
"chalk": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
"integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
"dev": true,
"optional": true,
"requires": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
}
},
"has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true,
"optional": true
},
"loader-utils": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz",
"integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==",
"dev": true,
"optional": true,
"requires": {
"big.js": "^5.2.2",
"emojis-list": "^3.0.0",
"json5": "^2.1.2"
}
},
"supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"optional": true,
"requires": {
"has-flag": "^4.0.0"
}
}
}
}
}
},
......@@ -3939,11 +3846,6 @@
"integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=",
"dev": true
},
"batch-processor": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/batch-processor/-/batch-processor-1.0.0.tgz",
"integrity": "sha1-dclcMrdI4IUNEMKxaPa9vpiRrOg="
},
"bcrypt-pbkdf": {
"version": "1.0.2",
"resolved": "http://registry.npm.taobao.org/bcrypt-pbkdf/download/bcrypt-pbkdf-1.0.2.tgz",
......@@ -4852,7 +4754,6 @@
"component-emitter": {
"version": "1.3.0",
"resolved": "https://registry.npm.taobao.org/component-emitter/download/component-emitter-1.3.0.tgz",
"integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==",
"dev": true
},
"compressible": {
......@@ -6128,14 +6029,6 @@
"safer-buffer": "^2.1.0"
}
},
"echarts": {
"version": "4.8.0",
"resolved": "https://registry.npm.taobao.org/echarts/download/echarts-4.8.0.tgz",
"integrity": "sha1-ssHPuSKbE9No7hBPyO6mALV01MQ=",
"requires": {
"zrender": "4.3.1"
}
},
"ee-first": {
"version": "1.1.1",
"resolved": "https://mirrors.huaweicloud.com/repository/npm/ee-first/-/ee-first-1.1.1.tgz",
......@@ -6171,14 +6064,6 @@
"integrity": "sha512-bsVCsONiVX1abkWdH7KtpuDAhsQ3N3bjPYhROSAXE78roJKet0Y5wznA14JE9pzbwSZmSMAW6KiKYf1RvbTJkA==",
"dev": true
},
"element-resize-detector": {
"version": "1.2.1",
"resolved": "https://registry.npm.taobao.org/element-resize-detector/download/element-resize-detector-1.2.1.tgz",
"integrity": "sha512-BdFsPepnQr9fznNPF9nF4vQ457U/ZJXQDSNF1zBe7yaga8v9AdZf3/NElYxFdUh7SitSGt040QygiTo6dtatIw==",
"requires": {
"batch-processor": "1.0.0"
}
},
"element-ui": {
"version": "2.13.0",
"resolved": "https://registry.npm.taobao.org/element-ui/download/element-ui-2.13.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Felement-ui%2Fdownload%2Felement-ui-2.13.0.tgz",
......@@ -7131,11 +7016,6 @@
"schema-utils": "^2.5.0"
}
},
"file-saver": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.5.tgz",
"integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA=="
},
"file-uri-to-path": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz",
......@@ -8030,11 +7910,6 @@
"integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=",
"dev": true
},
"immediate": {
"version": "3.0.6",
"resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz",
"integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps="
},
"import-cwd": {
"version": "2.1.0",
"resolved": "https://mirrors.huaweicloud.com/repository/npm/import-cwd/-/import-cwd-2.1.0.tgz",
......@@ -8250,14 +8125,6 @@
}
}
},
"interactjs": {
"version": "1.9.22",
"resolved": "https://registry.npm.taobao.org/interactjs/download/interactjs-1.9.22.tgz",
"integrity": "sha512-zUQefYtYJTazWKqDCSYV0vMJPFWp/PKXwpA3v75fD3+4+4J3/ItjlO7K3L1CpNWYU6s8uoEmwwOD6uDy6OoI/w==",
"requires": {
"@interactjs/types": "1.9.22"
}
},
"internal-ip": {
"version": "4.3.0",
"resolved": "https://mirrors.huaweicloud.com/repository/npm/internal-ip/-/internal-ip-4.3.0.tgz",
......@@ -8605,8 +8472,7 @@
},
"isobject": {
"version": "3.0.1",
"resolved": "https://registry.npm.taobao.org/isobject/download/isobject-3.0.1.tgz",
"integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg=="
"resolved": "https://registry.npm.taobao.org/isobject/download/isobject-3.0.1.tgz"
},
"isstream": {
"version": "0.1.2",
......@@ -8656,11 +8522,6 @@
"resolved": "https://registry.npm.taobao.org/js-cookie/download/js-cookie-2.2.1.tgz?cache=0&sync_timestamp=1576061496440&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjs-cookie%2Fdownload%2Fjs-cookie-2.2.1.tgz",
"integrity": "sha1-aeEG3F1YBolFYpAqpbrsN0Tpsrg="
},
"js-md5": {
"version": "0.7.3",
"resolved": "https://registry.npmjs.org/js-md5/-/js-md5-0.7.3.tgz",
"integrity": "sha512-ZC41vPSTLKGwIRjqDh8DfXoCrdQIyBgspJVPXHBGu4nZlAEvG3nf+jO9avM9RmLiGakg7vz974ms99nEV0tmTQ=="
},
"js-message": {
"version": "1.0.7",
"resolved": "https://mirrors.huaweicloud.com/repository/npm/js-message/-/js-message-1.0.7.tgz",
......@@ -8771,17 +8632,6 @@
"verror": "1.10.0"
}
},
"jszip": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/jszip/-/jszip-3.6.0.tgz",
"integrity": "sha512-jgnQoG9LKnWO3mnVNBnfhkh0QknICd1FGSrXcgrl67zioyJ4wgx25o9ZqwNtrROSflGBCGYnJfjrIyRIby1OoQ==",
"requires": {
"lie": "~3.3.0",
"pako": "~1.0.2",
"readable-stream": "~2.3.6",
"set-immediate-shim": "~1.0.1"
}
},
"killable": {
"version": "1.0.1",
"resolved": "https://mirrors.huaweicloud.com/repository/npm/killable/-/killable-1.0.1.tgz",
......@@ -8937,14 +8787,6 @@
"type-check": "~0.4.0"
}
},
"lie": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz",
"integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==",
"requires": {
"immediate": "~3.0.5"
}
},
"lines-and-columns": {
"version": "1.1.6",
"resolved": "https://mirrors.huaweicloud.com/repository/npm/lines-and-columns/-/lines-and-columns-1.1.6.tgz",
......@@ -9461,7 +9303,6 @@
"mixin-deep": {
"version": "1.3.2",
"resolved": "https://registry.npm.taobao.org/mixin-deep/download/mixin-deep-1.3.2.tgz",
"integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==",
"dev": true,
"requires": {
"for-in": "^1.0.2",
......@@ -9500,6 +9341,11 @@
"resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz",
"integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ=="
},
"monaco-editor": {
"version": "0.30.1",
"resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.30.1.tgz",
"integrity": "sha512-B/y4+b2O5G2gjuxIFtCE2EkM17R2NM7/3F8x0qcPsqy4V83bitJTIO4TIeZpYlzu/xy6INiY/+84BEm6+7Cmzg=="
},
"move-concurrently": {
"version": "1.0.1",
"resolved": "https://mirrors.huaweicloud.com/repository/npm/move-concurrently/-/move-concurrently-1.0.1.tgz",
......@@ -10226,7 +10072,8 @@
"pako": {
"version": "1.0.11",
"resolved": "https://mirrors.huaweicloud.com/repository/npm/pako/-/pako-1.0.11.tgz",
"integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw=="
"integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==",
"dev": true
},
"parallel-transform": {
"version": "1.2.0",
......@@ -10322,7 +10169,6 @@
"pascalcase": {
"version": "0.1.1",
"resolved": "https://registry.npm.taobao.org/pascalcase/download/pascalcase-0.1.1.tgz",
"integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==",
"dev": true
},
"path-browserify": {
......@@ -10405,11 +10251,6 @@
"resolved": "http://registry.npm.taobao.org/performance-now/download/performance-now-2.1.0.tgz",
"integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
},
"photoswipe": {
"version": "4.1.3",
"resolved": "https://registry.npmjs.org/photoswipe/-/photoswipe-4.1.3.tgz",
"integrity": "sha512-89Z43IRUyw7ycTolo+AaiDn3W1EEIfox54hERmm9bI12IB9cvRfHSHez3XhAyU8XW2EAFrC+2sKMhh7SJwn0bA=="
},
"picomatch": {
"version": "2.2.2",
"resolved": "https://mirrors.huaweicloud.com/repository/npm/picomatch/-/picomatch-2.2.2.tgz",
......@@ -10485,7 +10326,7 @@
"version": "github:sampotts/plyr#028be22dec323b23727315ef0c34682192991488",
"from": "github:sampotts/plyr#develop",
"requires": {
"core-js": "^3.8.1",
"core-js": "^3.10.1",
"custom-event-polyfill": "^1.0.7",
"loadjs": "^4.2.0",
"rangetouch": "^2.0.1",
......@@ -12471,11 +12312,6 @@
"resolved": "http://registry.npm.taobao.org/set-blocking/download/set-blocking-2.0.0.tgz",
"integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc="
},
"set-immediate-shim": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz",
"integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E="
},
"set-value": {
"version": "2.0.1",
"resolved": "https://registry.npm.taobao.org/set-value/download/set-value-2.0.1.tgz",
......@@ -13592,7 +13428,6 @@
"tapable": {
"version": "1.1.3",
"resolved": "https://registry.npm.taobao.org/tapable/download/tapable-1.1.3.tgz",
"integrity": "sha1-ofzMBrWNth/XpF2i2kT186Pme6I=",
"dev": true
},
"tar": {
......@@ -13790,7 +13625,6 @@
"to-fast-properties": {
"version": "2.0.0",
"resolved": "https://registry.npm.taobao.org/to-fast-properties/download/to-fast-properties-2.0.0.tgz",
"integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==",
"dev": true
},
"to-object-path": {
......@@ -14323,15 +14157,6 @@
}
}
},
"vue-grid-layout": {
"version": "2.3.8",
"resolved": "https://registry.npm.taobao.org/vue-grid-layout/download/vue-grid-layout-2.3.8.tgz",
"integrity": "sha1-R+SowW3548kX+MFC+G+3BZToazw=",
"requires": {
"element-resize-detector": "^1.1.15",
"interactjs": "^1.6.3"
}
},
"vue-hot-reload-api": {
"version": "2.3.4",
"resolved": "https://mirrors.huaweicloud.com/repository/npm/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz",
......@@ -14359,6 +14184,94 @@
}
}
},
"vue-loader-v16": {
"version": "npm:vue-loader@16.8.3",
"resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-16.8.3.tgz",
"integrity": "sha512-7vKN45IxsKxe5GcVCbc2qFU5aWzyiLrYJyUuMz4BQLKctCj/fmCa0w6fGiiQ2cLFetNcek1ppGJQDCup0c1hpA==",
"dev": true,
"optional": true,
"requires": {
"chalk": "^4.1.0",
"hash-sum": "^2.0.0",
"loader-utils": "^2.0.0"
},
"dependencies": {
"ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"optional": true,
"requires": {
"color-convert": "^2.0.1"
}
},
"chalk": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
"integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
"dev": true,
"optional": true,
"requires": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
}
},
"color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"optional": true,
"requires": {
"color-name": "~1.1.4"
}
},
"color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true,
"optional": true
},
"emojis-list": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
"integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==",
"dev": true,
"optional": true
},
"has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true,
"optional": true
},
"loader-utils": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz",
"integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==",
"dev": true,
"optional": true,
"requires": {
"big.js": "^5.2.2",
"emojis-list": "^3.0.0",
"json5": "^2.1.2"
}
},
"supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"optional": true,
"requires": {
"has-flag": "^4.0.0"
}
}
}
},
"vue-plyr": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/vue-plyr/-/vue-plyr-7.0.0.tgz",
......@@ -15241,11 +15154,6 @@
"dev": true
}
}
},
"zrender": {
"version": "4.3.1",
"resolved": "https://registry.npm.taobao.org/zrender/download/zrender-4.3.1.tgz",
"integrity": "sha1-uviqbcgYei+BlpLX1fm+36K5D6M="
}
}
}
......@@ -20,6 +20,7 @@
"local-storage": "^2.0.0",
"mockjs": "^1.1.0",
"moment": "^2.29.1",
"monaco-editor": "^0.30.1",
"node-sass": "^4.14.1",
"normalize.css": "^8.0.1",
"nprogress": "^0.2.0",
......@@ -30,6 +31,7 @@
"vue-count-to": "^1.0.13",
"vue-grid-layout": "^2.3.12",
"vue-loading-spinner": "^1.0.11",
"vue-monaco-editor": "^0.0.19",
"vue-plyr": "^7.0.0",
"vue-router": "^3.1.3",
"vue-star-rating": "^1.7.0",
......
......@@ -32,6 +32,14 @@ export function postByteCodeFile(data) {
});
}
export function getFileContent(data) {
return request({
url: "/api/v1/evm_store/system/getFileContent",
method: "post",
data
});
}
export function postCHeaderFile(data) {
return request({
url: "/api/v1/evm_store/system/parseCHeader",
......
......@@ -8,31 +8,82 @@
</div>
<el-tabs v-model="activeName" type="border-card">
<el-tab-pane label="解析文件" name="first">
<div style="margin: 10px 0px">
<el-form>
<el-form-item>
<el-upload
name="binfile"
drag
multiple
ref="upload"
action="null"
:auto-upload="false"
:http-request="handleUploadFile"
:on-remove="handleUploadRemove"
<el-row :gutter="20">
<el-col :span="8">
<div style="margin: 10px 0px">
<el-form>
<el-form-item>
<el-upload
name="binfile"
drag
multiple
ref="upload"
action="null"
:auto-upload="false"
:http-request="handleUploadFile"
:on-remove="handleUploadRemove"
>
<i class="el-icon-upload"></i>
<div class="el-upload__text">
将文件拖到此处,或<em>点击上传</em>
</div>
<div class="el-upload__tip" slot="tip">请选择C头文件</div>
</el-upload>
</el-form-item>
<el-form-item label="模块名称">
<el-input
v-model="form.name"
placeholder="请输入模块名称,不填则以文件名为准"
></el-input>
</el-form-item>
<el-form-item label="注册类型">
<el-select v-model="form.type" placeholder="请选择">
<el-option
v-for="item in optionList"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-button @click="uploadFile">开始上传</el-button>
<el-button @click="handleDownloadFile">下载文件</el-button>
</el-form-item>
</el-form>
</div>
</el-col>
<el-col :span="16">
<div style="margin: 10px">
<el-select
v-model="form.file"
placeholder="请选择文件"
@change="onFileChange"
>
<i class="el-icon-upload"></i>
<div class="el-upload__text">
将文件拖到此处,或<em>点击上传</em>
</div>
<div class="el-upload__tip" slot="tip">请选择C头文件</div>
</el-upload>
</el-form-item>
<el-form-item>
<el-button @click="uploadFile">开始上传</el-button>
</el-form-item>
</el-form>
</div>
<el-option
v-for="(item, index) in newFileList"
:key="index"
:label="item"
:value="item"
></el-option>
</el-select>
</div>
<MonacoEditor
height="600"
width="100%"
class="vs"
style="text-align: left; background-color: #fff"
:language="lang"
:key="randomkey"
:code="code"
:editorOptions="options"
@mounted="onMounted"
@codeChange="onCodeChange"
>
</MonacoEditor>
</el-col>
</el-row>
</el-tab-pane>
<el-tab-pane label="类型管理" name="second">
<el-table :data="markType" size="medium" style="width: 50%">
......@@ -120,14 +171,32 @@ import {
processCHeaderFile,
getMarkType,
updateMarkType,
getFileContent,
} from "@/api/store";
import MonacoEditor from "vue-monaco-editor";
export default {
name: "EvmModule",
data() {
return {
code: 'function evm() {\t\n\tconsole.log("Hello world!");\n}',
editor: null,
randomkey: 1231231,
lang: "javascript",
options: {
theme: "vs",
selectOnLineNumbers: true,
roundedSelection: false,
readOnly: false,
automaticLayout: true,
glyphMargin: true,
showFoldingControls: "always",
formatOnPaste: true,
formatOnType: true,
folding: true,
},
activeName: "first",
fileList: [],
page: "evm-module-tool.vue",
dir: null,
baseType: [
......@@ -138,13 +207,43 @@ export default {
{ label: "指针", value: "void *" },
{ label: "void", value: "void" },
],
optionList: [
{ label: "EVM注册", value: "evm" },
{ label: "CFFI注册", value: "cffi" },
],
form: {
type: "evm",
name: null,
file: null,
},
fileList: [],
newFileList: [],
typeList: ["evm", "cffi"],
undefined_type: [],
error_tips: [],
dialogVisible: false,
markType: [],
result: null,
};
},
components: {
MonacoEditor,
},
methods: {
createRamdomKey() {
return Math.floor(Math.random() * (10, 1000000012313));
},
onMounted(editor) {
this.editor = editor;
},
onCodeChange(editor) {
console.log(editor);
},
onFileChange(file) {
console.log(file, this.form.file);
if (!this.result) return;
this.getFileContent(file);
},
createFile(content, filename) {
const a = document.createElement("a");
const blob = new Blob([content]);
......@@ -156,7 +255,7 @@ export default {
},
handleUploaded(response) {
if (response.code === 200) {
this.downloadFile(response);
this.downloadFile(response.data);
} else {
this.$message.warning(response.message);
}
......@@ -164,6 +263,9 @@ export default {
handleUploadFile(file) {
this.fileList.push(file);
},
handleDownloadFile() {
this.downloadFile(this.result);
},
handleUploadRemove(file, fileList) {
console.log(fileList);
for (let i = 0; i < this.fileList.length; i++) {
......@@ -173,10 +275,25 @@ export default {
}
}
},
getFileContent(file) {
getFileContent({ file: file })
.then((res) => {
this.code = res.data;
this.lang = "c";
this.randomkey = this.createRamdomKey();
this.$message.success(res.message);
})
.catch((err) => {
console.log(err);
this.$message.error(err.message);
});
},
downloadFile(result) {
if (!this.result) return;
const a = document.createElement("a");
a.download = result.data.filename;
a.href = result.data.url;
a.download = result.file;
a.href = result.url;
a.target = "";
a.click();
},
......@@ -203,12 +320,16 @@ export default {
uploadFile() {
this.$refs.upload.submit();
let formData = new FormData();
formData.append("type", this.form.type);
formData.append("name", this.form.name);
this.fileList.forEach((item) => {
formData.append("binfile", item.file);
});
postCHeaderFile(formData)
.then((res) => {
this.downloadFile(res);
this.result = res.data;
this.newFileList = res.data.sources;
if (res.data.sources.length) this.getFileContent(res.data.sources[0]);
})
.catch((err) => {
if (err.code == 400) {
......@@ -230,10 +351,11 @@ export default {
this.error_tips.forEach((item) => {
types[item.type] = item.mark;
});
processCHeaderFile({ dir: this.dir, type: types })
processCHeaderFile({ dir: this.dir, type: types, module: this.form.type })
.then((res) => {
this.downloadFile(res);
this.result = res.data;
this.newFileList = res.data.sources;
if (res.data.sources.length) this.getFileContent(res.data.sources[0]);
})
.catch((err) => {
if (err.code == 400) {
......@@ -251,7 +373,12 @@ export default {
});
},
},
mounted() {},
mounted() {
setTimeout(() => {
this.code = "console.log(123456)";
console.log(this.code);
}, 2000);
},
created() {
this.getMarkType();
},
......
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