2025-05-29 14:04:05 +08:00
|
|
|
|
import QtQuick 2.15
|
|
|
|
|
|
import QtQuick.Window 2.15
|
|
|
|
|
|
import QtQuick.Controls 2.15
|
|
|
|
|
|
import QtMultimedia 5.15
|
2025-09-15 09:46:04 +08:00
|
|
|
|
import HuskarUI.Basic 1.0
|
2025-05-29 14:04:05 +08:00
|
|
|
|
import QmlTool 1.0
|
|
|
|
|
|
import FileTransfer 1.0
|
|
|
|
|
|
import SSHManager 1.0
|
|
|
|
|
|
import "../MyGlobals" 1.0
|
|
|
|
|
|
import "../Component" 1.0
|
|
|
|
|
|
|
2025-09-15 09:46:04 +08:00
|
|
|
|
HusWindow {
|
2025-05-29 14:04:05 +08:00
|
|
|
|
id:plugininfo_goods
|
|
|
|
|
|
width: 890
|
|
|
|
|
|
height: 630
|
|
|
|
|
|
visible: true
|
|
|
|
|
|
title: qsTr("插件详情页")
|
|
|
|
|
|
captionBar.topButtonVisible: true
|
|
|
|
|
|
captionBar.winIconDelegate: Image {
|
|
|
|
|
|
id: name
|
|
|
|
|
|
width: 20
|
|
|
|
|
|
height: 20
|
|
|
|
|
|
source: "qrc:/image/logo.png"
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//原始数据
|
|
|
|
|
|
property var p_basedata: null
|
|
|
|
|
|
//商店原始数据
|
|
|
|
|
|
property var p_shopbasedata:null
|
|
|
|
|
|
//插件名
|
|
|
|
|
|
property string p_name : "未定名插件"
|
|
|
|
|
|
//作者名
|
|
|
|
|
|
property string p_author : "未定名作者"
|
|
|
|
|
|
//版本号
|
|
|
|
|
|
property string p_version: "0.0.1"
|
|
|
|
|
|
//描述
|
|
|
|
|
|
property string p_description: "暂无描述"
|
|
|
|
|
|
//售价
|
|
|
|
|
|
property int p_price: 0
|
|
|
|
|
|
//插件文件数组
|
|
|
|
|
|
property var p_filelist : []
|
|
|
|
|
|
//是否是凌众插件
|
|
|
|
|
|
property bool p_isrindro : false
|
|
|
|
|
|
//图像
|
|
|
|
|
|
property string p_image:"qrc:/image/logo2.png"
|
|
|
|
|
|
|
|
|
|
|
|
Component.onCompleted: {
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
Shortcut {
|
|
|
|
|
|
sequences: ["Esc"]
|
|
|
|
|
|
onActivated: close()
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function escapeString(input) {
|
|
|
|
|
|
return input
|
|
|
|
|
|
.replace(/\\/g, "\\\\") // 转义反斜杠
|
|
|
|
|
|
.replace(/"/g, "\\\"") // 转义双引号
|
|
|
|
|
|
.replace(/\n/g, "\\n") // 转义换行符
|
|
|
|
|
|
.replace(/\r/g, "\\r") // 转义回车符
|
|
|
|
|
|
.replace(/\t/g, "\\t"); // 转义制表符
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function init(index){
|
|
|
|
|
|
if(!GlobalVars.myServerPluginList)return;
|
|
|
|
|
|
var Data = GlobalVars.myServerPluginList[index]
|
|
|
|
|
|
p_basedata = Data;
|
|
|
|
|
|
p_name = Data.ProjectName
|
|
|
|
|
|
p_author = Data.ProjectAuthor
|
|
|
|
|
|
p_version = Data.ProjectVersion
|
|
|
|
|
|
p_description = Data.ProjectDescribe
|
|
|
|
|
|
//如果有插件文件数组
|
|
|
|
|
|
if(Data.ProjectFiles)p_filelist = Data.ProjectFiles
|
|
|
|
|
|
//如果有售价才设置售价
|
|
|
|
|
|
if(Data.ProjectPrice)p_price = Data.ProjectPrice
|
|
|
|
|
|
else p_price = 0
|
|
|
|
|
|
//如果是凌众的插件
|
|
|
|
|
|
if(Data.isrindro)p_isrindro = true
|
|
|
|
|
|
else p_isrindro = false
|
|
|
|
|
|
|
|
|
|
|
|
//去商店脚本辨别出自己的项目
|
|
|
|
|
|
for(var id in GlobalVars.serverPluginList){
|
|
|
|
|
|
var obj = GlobalVars.serverPluginList[id];
|
|
|
|
|
|
if(obj.ProjectName === p_name && obj.ProjectAuthor === p_author){
|
|
|
|
|
|
p_shopbasedata = obj
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//请求自己项目的配置文件
|
|
|
|
|
|
if(Data.ProjectConfig)GlobalVars.getServerPluginConfig(GlobalVars.sshConnectServer,Data.ProjectConfig,function(config){
|
|
|
|
|
|
var model = [];
|
|
|
|
|
|
if(config){
|
|
|
|
|
|
configTabView.visible = true
|
|
|
|
|
|
configTabView.initModel = [];
|
|
|
|
|
|
}
|
|
|
|
|
|
//老的解析方法和新的解析方法
|
|
|
|
|
|
if(typeof config.newcontent !== "string"){
|
|
|
|
|
|
if(config.newcontent)config.newcontent = JSON.stringify(config.newcontent,null,2);
|
|
|
|
|
|
if(config.oldcontent)config.oldcontent = JSON.stringify(config.oldcontent,null,2);
|
|
|
|
|
|
}
|
|
|
|
|
|
else {
|
|
|
|
|
|
if(config.newcontent)config.newcontent = Qt.atob(config.newcontent);
|
|
|
|
|
|
if(config.oldcontent)config.oldcontent = Qt.atob(config.oldcontent);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if(config.newcontent){
|
|
|
|
|
|
model.push({
|
|
|
|
|
|
key: "1",
|
2025-09-15 09:46:04 +08:00
|
|
|
|
icon: HusIcon.CreditCardOutlined,
|
2025-05-29 14:04:05 +08:00
|
|
|
|
title: "配置文件",
|
|
|
|
|
|
config:config.newcontent
|
|
|
|
|
|
})
|
|
|
|
|
|
}
|
|
|
|
|
|
if(config.oldcontent){
|
|
|
|
|
|
model.push({
|
|
|
|
|
|
key: "2",
|
2025-09-15 09:46:04 +08:00
|
|
|
|
icon: HusIcon.CreditCardOutlined,
|
2025-05-29 14:04:05 +08:00
|
|
|
|
title: "配置文件(旧)",
|
|
|
|
|
|
config:config.oldcontent
|
|
|
|
|
|
})
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if(model.length > 0){
|
|
|
|
|
|
configTabView.initModel = model
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//判断是否需要更新
|
|
|
|
|
|
if(p_shopbasedata.ProjectVersion > p_version){
|
|
|
|
|
|
update_button.visible = true
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function buildQuest(filename){
|
|
|
|
|
|
var downloadurl = GlobalVars.server_url + "/dps/download/" + p_name + ":";
|
|
|
|
|
|
var updir = (filename.indexOf(".json") === -1 ? ("OfficialProject/" + p_shopbasedata.ProjectName + "/") : "OfficialConfig/");
|
|
|
|
|
|
GlobalVars.downlad_quest_window.addQuest(p_shopbasedata.ProjectName + ":" + filename,[
|
|
|
|
|
|
function(quest){
|
|
|
|
|
|
//下载
|
|
|
|
|
|
quest.status = 1;
|
|
|
|
|
|
FileTransfer.postDownload(downloadurl + filename, "download/" + filename,{key:p_shopbasedata.ProjectName + ":" + filename},"quest");
|
|
|
|
|
|
},
|
|
|
|
|
|
function(quest){
|
|
|
|
|
|
if(GlobalVars.accServerList){
|
|
|
|
|
|
var server = GlobalVars.accServerList[GlobalVars.selectServer].serverIp
|
|
|
|
|
|
//上传
|
|
|
|
|
|
quest.status = 1;
|
|
|
|
|
|
FileTransfer.postUpload("http://" + server + ":65170/api/uploadfiles", "download/" + filename, "/dp_s/" + updir,"quest");
|
|
|
|
|
|
}
|
|
|
|
|
|
else{
|
|
|
|
|
|
quest.instruction = true
|
|
|
|
|
|
}
|
|
|
|
|
|
},function(quest){
|
|
|
|
|
|
GlobalVars.msg_control.success("文件 :" + p_shopbasedata.ProjectName + ":" + filename + " 已下载并上传至服务器!");
|
|
|
|
|
|
quest.instruction = true
|
|
|
|
|
|
//配置文件是最后来的
|
|
|
|
|
|
if(filename.indexOf("Proj.ifo") !== -1){
|
|
|
|
|
|
GlobalVars.getServerPlugins(GlobalVars.sshConnectServer)
|
|
|
|
|
|
close()
|
|
|
|
|
|
}
|
|
|
|
|
|
}]);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
Rectangle{
|
|
|
|
|
|
id:title
|
|
|
|
|
|
anchors.left: parent.left
|
|
|
|
|
|
anchors.leftMargin: 10
|
|
|
|
|
|
anchors.right: parent.right
|
|
|
|
|
|
anchors.rightMargin: 15
|
|
|
|
|
|
anchors.top: parent.top
|
|
|
|
|
|
anchors.topMargin: 45
|
|
|
|
|
|
height:78 + headerdiv.height + description.height
|
|
|
|
|
|
radius:8
|
2025-09-15 09:46:04 +08:00
|
|
|
|
border.color: HusTheme.isDark ? "#23272e" : "#f0f4f7"
|
2025-05-29 14:04:05 +08:00
|
|
|
|
border.width: 2
|
|
|
|
|
|
color:"transparent"
|
|
|
|
|
|
|
|
|
|
|
|
Image {
|
|
|
|
|
|
id: logo
|
|
|
|
|
|
source: "qrc:/image/logo.png"
|
|
|
|
|
|
anchors.left: parent.left
|
|
|
|
|
|
anchors.leftMargin: 10
|
|
|
|
|
|
anchors.top: parent.top
|
|
|
|
|
|
anchors.topMargin: 15
|
|
|
|
|
|
width: 48
|
|
|
|
|
|
height: 48
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-09-15 09:46:04 +08:00
|
|
|
|
HusDivider {
|
2025-05-29 14:04:05 +08:00
|
|
|
|
id:headerdiv
|
|
|
|
|
|
anchors.top: logo.bottom
|
|
|
|
|
|
anchors.left: parent.left
|
|
|
|
|
|
anchors.leftMargin: 1
|
|
|
|
|
|
width: parent.width - 1
|
|
|
|
|
|
height: 30
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
Text {
|
|
|
|
|
|
id:description
|
|
|
|
|
|
anchors.left: parent.left
|
|
|
|
|
|
anchors.leftMargin: 10
|
|
|
|
|
|
anchors.right: parent.right
|
|
|
|
|
|
anchors.rightMargin: 10
|
|
|
|
|
|
anchors.top: headerdiv.bottom
|
|
|
|
|
|
text: p_description
|
|
|
|
|
|
|
|
|
|
|
|
wrapMode: Text.WordWrap
|
|
|
|
|
|
font {
|
|
|
|
|
|
pixelSize: 14
|
2025-09-15 09:46:04 +08:00
|
|
|
|
family: HusTheme.Primary.fontPrimaryFamily
|
2025-05-29 14:04:05 +08:00
|
|
|
|
}
|
2025-09-15 09:46:04 +08:00
|
|
|
|
color: HusTheme.Primary.colorTextBase
|
2025-05-29 14:04:05 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
Text {
|
|
|
|
|
|
id:pluginname
|
|
|
|
|
|
anchors.left: logo.right
|
|
|
|
|
|
anchors.leftMargin: 10
|
|
|
|
|
|
anchors.top: parent.top
|
|
|
|
|
|
anchors.topMargin: 14
|
|
|
|
|
|
text: p_name
|
|
|
|
|
|
font {
|
|
|
|
|
|
pixelSize: 20
|
2025-09-15 09:46:04 +08:00
|
|
|
|
family: HusTheme.Primary.fontPrimaryFamily
|
2025-05-29 14:04:05 +08:00
|
|
|
|
}
|
2025-09-15 09:46:04 +08:00
|
|
|
|
color: HusTheme.Primary.colorTextBase
|
2025-05-29 14:04:05 +08:00
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
Text {
|
|
|
|
|
|
anchors.left: logo.right
|
|
|
|
|
|
anchors.leftMargin: 10
|
|
|
|
|
|
anchors.top: pluginname.bottom
|
|
|
|
|
|
anchors.topMargin: 2
|
|
|
|
|
|
text: "作者: " + p_author
|
|
|
|
|
|
font {
|
|
|
|
|
|
pixelSize: 14
|
2025-09-15 09:46:04 +08:00
|
|
|
|
family: HusTheme.Primary.fontPrimaryFamily
|
2025-05-29 14:04:05 +08:00
|
|
|
|
}
|
2025-09-15 09:46:04 +08:00
|
|
|
|
color: HusTheme.Primary.colorTextBase
|
2025-05-29 14:04:05 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2025-09-15 09:46:04 +08:00
|
|
|
|
HusTag {
|
2025-05-29 14:04:05 +08:00
|
|
|
|
id:version_tag
|
|
|
|
|
|
anchors.left: pluginname.right
|
|
|
|
|
|
anchors.leftMargin: 15
|
|
|
|
|
|
anchors.top: pluginname.top
|
|
|
|
|
|
anchors.topMargin: 2
|
|
|
|
|
|
text:"Ver:" + p_version
|
|
|
|
|
|
presetColor:"green"
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-09-15 09:46:04 +08:00
|
|
|
|
HusButton {
|
2025-05-29 14:04:05 +08:00
|
|
|
|
id:update_button
|
|
|
|
|
|
visible: false
|
|
|
|
|
|
anchors.right: parent.right
|
|
|
|
|
|
anchors.rightMargin: 10
|
|
|
|
|
|
anchors.top: parent.top
|
|
|
|
|
|
anchors.topMargin: 12
|
|
|
|
|
|
height: 26
|
|
|
|
|
|
text: "更新"
|
|
|
|
|
|
colorText: "#32cd33"
|
|
|
|
|
|
onClicked: {
|
|
|
|
|
|
GlobalVars.backupServerPluginConfig(GlobalVars.sshConnectServer,p_basedata.ProjectConfig,function(ret){
|
|
|
|
|
|
//备份完成开始更新
|
|
|
|
|
|
if(ret){
|
|
|
|
|
|
buildQuest("Proj.ifo");
|
|
|
|
|
|
|
|
|
|
|
|
//项目逻辑文件
|
|
|
|
|
|
for (var i = 0; i < p_shopbasedata.ProjectFiles.length; i++) {
|
|
|
|
|
|
buildQuest(p_shopbasedata.ProjectFiles[i]);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//项目配置文件
|
|
|
|
|
|
if(p_shopbasedata && p_shopbasedata.ProjectConfig.length > 0){
|
|
|
|
|
|
buildQuest(p_shopbasedata.ProjectConfig);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
});
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-09-15 09:46:04 +08:00
|
|
|
|
HusButton {
|
2025-05-29 14:04:05 +08:00
|
|
|
|
id:delete_button
|
|
|
|
|
|
visible: true
|
|
|
|
|
|
anchors.right: parent.right
|
|
|
|
|
|
anchors.rightMargin: 10
|
|
|
|
|
|
anchors.top: parent.top
|
|
|
|
|
|
anchors.topMargin: 42
|
|
|
|
|
|
height: 26
|
|
|
|
|
|
text: "删除"
|
|
|
|
|
|
colorText: "#ff0000"
|
|
|
|
|
|
onClicked: {
|
|
|
|
|
|
SSHManager.sendInput("rm -rf " + "/dp_s/OfficialProject/" + p_shopbasedata.ProjectName)
|
|
|
|
|
|
SSHManager.sendInput("echo '删除插件成功!'")
|
|
|
|
|
|
close()
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Rectangle{
|
|
|
|
|
|
id:content
|
|
|
|
|
|
anchors.left: parent.left
|
|
|
|
|
|
anchors.leftMargin: 10
|
|
|
|
|
|
anchors.right: parent.right
|
|
|
|
|
|
anchors.rightMargin: 15
|
|
|
|
|
|
anchors.top: title.bottom
|
|
|
|
|
|
anchors.topMargin: 10
|
|
|
|
|
|
anchors.bottom:parent.bottom
|
|
|
|
|
|
anchors.bottomMargin: 10
|
|
|
|
|
|
radius:8
|
2025-09-15 09:46:04 +08:00
|
|
|
|
border.color: HusTheme.isDark ? "#23272e" : "#f0f4f7"
|
2025-05-29 14:04:05 +08:00
|
|
|
|
border.width: 2
|
|
|
|
|
|
color:"transparent"
|
|
|
|
|
|
clip: true
|
|
|
|
|
|
|
2025-09-15 09:46:04 +08:00
|
|
|
|
HusTabView {
|
2025-05-29 14:04:05 +08:00
|
|
|
|
id: configTabView
|
|
|
|
|
|
visible: false
|
|
|
|
|
|
anchors.fill: parent
|
2025-09-15 09:46:04 +08:00
|
|
|
|
tabSize: HusTabView.Size_Auto
|
2025-05-29 14:04:05 +08:00
|
|
|
|
tabCentered: true
|
|
|
|
|
|
addButtonDelegate:Item{}
|
|
|
|
|
|
contentDelegate: Rectangle {
|
|
|
|
|
|
anchors.fill: parent
|
|
|
|
|
|
color:"transparent"
|
|
|
|
|
|
JsonEditor{
|
|
|
|
|
|
id:config_editor
|
|
|
|
|
|
anchors.fill:parent
|
|
|
|
|
|
projectConfigStr:model.config
|
|
|
|
|
|
saveFunction:function(config){
|
|
|
|
|
|
//在新配置这里点保存才有反应
|
|
|
|
|
|
if(model.key === "1"){
|
|
|
|
|
|
GlobalVars.setServerPluginConfig(GlobalVars.sshConnectServer,p_basedata.ProjectConfig,config)
|
|
|
|
|
|
close()
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|