You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Gateway/Proxy/SiteMarketActivity.cs

369 lines
15 KiB
C#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using System.Net.Http;
using System.Collections;
using System.Resources;
using System.Security.Cryptography;
using System;
using UMC.Web;
using UMC.Data;
using System.Linq;
using UMC.Web.UI;
using System.Collections.Generic;
using UMC.Net;
namespace UMC.ITME.Activities
{
[Apiumc("ITME", "Market", Desc = "我的出售", Auth = WebAuthType.Admin)]
class SiteMarketActivity : UMC.Web.WebActivity
{
public override void ProcessActivity(UMC.Web.WebRequest request, UMC.Web.WebResponse response)
{
var secret = UMC.Data.WebResource.Instance().Provider["appSecret"];
if (String.IsNullOrEmpty(secret))
{
this.Prompt("当前版本未登记注册", false);
this.Context.Response.Redirect("System", "License");
}
var root = this.AsyncDialog("Root", "oa");
var webr = UMC.ITME.Utility.Sign(new Uri(APIProxy.Uri, "Transfer").WebRequest(), secret).Put(new WebMeta().Put("type", "AppGoods").Put("root", root));
var str = webr.ReadAsString();
var appGood = JSON.Deserialize<WebMeta>(str);
var Model = this.AsyncDialog("Model", gKey =>
{
var webr = UMC.Web.WebResource.Instance();
UITitle uITItle = UITitle.Create();
uITItle.Title = "发布市场";
var sestion = UISection.Create(uITItle);
var imageTextView = new UMC.Web.UI.UIImageTextValue(appGood["IconSrc"], "", "图标");
imageTextView.Style.Name("image-width", "100");
imageTextView.Click(new UIClick(request, gKey, "IconSrc"));
// imageTextView.Tag("推荐");
sestion.Add(imageTextView);
// imageTextView.t
sestion.AddCell("发布编码", $"{appGood["Key"]}_{root}");
sestion.AddCell("发布名称", appGood["Caption"], new UIClick(request, gKey, "Caption"));
var sT = appGood["Description"] ?? appGood["Caption"];
if (sT.Length > 48)
{
sT = sT.Substring(0, 48) + "...";
}
var desc = new UIDesc(sT);
desc.Style.Height(40).Color(0x999).Size(13);
desc.Click(new UIClick(request, gKey, "Description"));
sestion.Add(desc);
var Tel = appGood["Tel"];
sestion.NewSection().AddCell("出售价格", $"{appGood["Price"]}元"
, new UIClick(request, gKey, "Price")).AddCell("售后电话", String.IsNullOrEmpty(Tel) ? "未设置" : Tel, new UIClick(request, gKey, "Tel"));
switch (Utility.IntParse(appGood["Type"], 0))
{
case 0:
sestion.NewSection().AddCell("发布方式", "反向代理", new UIClick(request, gKey, "Type"))
.AddCell("营销网址", appGood["HelpUrl"] ?? "未设置", new UIClick(request, gKey, "HelpUrl"));
break;
case 1:
sestion.NewSection().AddCell("发布方式", "身份互联", new UIClick(request, gKey, "Type"))
.AddCell("营销网址", appGood["HelpUrl"] ?? "未设置", new UIClick(request, gKey, "HelpUrl"));
break;
case 2:
var Domain = appGood["Domain"];
sestion.NewSection().AddCell("发布方式", "Saas互联", new UIClick(request, gKey, "Type"))
.AddCell("Saas网址", String.IsNullOrEmpty(Domain) ? "未设置" : Domain, new UIClick(request, gKey, "Domain"))
.AddCell("营销网址", appGood["HelpUrl"] ?? "未设置", new UIClick(request, gKey, "HelpUrl"));
break;
}
sestion.NewSection().AddCell("支持系统", appGood["OperatingSystem"]
, new UIClick(request, gKey, "OperatingSystem")).AddCell("硬件配置", appGood["Hardware"], new UIClick(request, gKey, "Hardware"))
.AddCell("演示网址", appGood["DemoUrl"] ?? "未设置", new UIClick(request, gKey, "DemoUrl"));
var ness = sestion
.NewSection().AddCell("出售状态", appGood["State"]);
ness.AddCell("应用类别", appGood["Category"] ?? "未设置", new UIClick(request, gKey, "Category"));
if (appGood.ContainsKey("Hot"))
{
ness.AddCell("热卖推荐", "是");
}
var ls = sestion.NewSection();
var cell = UICell.UI("介绍说明", "", new UIClick(request, gKey, "Content"));
cell.Style.BorderAll();
ls.Add(cell);
var Content = appGood["Content"];
if (String.IsNullOrEmpty(Content) == false)
{
ls.DisableSeparatorLine();
ls.AddCells(Markdown.Transform(Content));
}
else
{
ls.Add("Desc", new UMC.Web.WebMeta().Put("desc", "未有介绍").Put("icon", "\uF016"), new UMC.Web.WebMeta().Put("desc", "{icon}\n{desc}"),
new UIStyle().Align(1).Color(0xaaa).Padding(20, 20).BgColor(0xfff).Size(12).Name("icon", new UIStyle().Font("wdk").Size(60)));
}
sestion.UIFootBar = new UIFootBar() { IsFixed = true };
sestion.UIFootBar.AddText(new UIEventText(appGood["Status"] == "1" ? "应用下架" : "应用上架").Click(new UIClick(request, gKey, "Status")),
new UIEventText("更新配置").Click(new UIClick(request, gKey, "PUT")).Style(new UIStyle().BgColor()));
sestion.SendTo($"{request.Model}.{request.Command}.Del", this.Context, $"{request.Model}.{request.Command}", "System.Image");
});
String Value = "";
switch (Model)
{
case "IconSrc":
var media_id = this.AsyncDialog("IconSrc", g =>
{
if (request.IsApp)
{
return Web.UIDialog.Create("File");
}
else
{
var from = new Web.UIFormDialog() { Title = "图片上传" };
from.AddFile("选择图片", "IconSrc", String.Empty);
from.Submit("确认上传", $"{request.Model}.{request.Command}");
return from;
}
});
var iconsrc = new Uri(request.Url, media_id);
using (System.IO.MemoryStream ms = new System.IO.MemoryStream())
{
var postUrl = new Uri(APIProxy.Uri, "/TEMP" + iconsrc.AbsolutePath);
iconsrc.WebRequest().Get().ReadAsStream(ms);
ms.Position = 0;
postUrl.WebRequest().Put(ms);
Value = postUrl.AbsoluteUri;
}
break;
case "Category":
{
Value = Web.UIDialog.AsyncDialog(this.Context, "Category", g =>
{
var AppCategory = JSON.Deserialize<Hashtable>(UMC.ITME.Utility.Sign(new Uri(APIProxy.Uri, "Transfer").WebRequest(), secret).Put(new WebMeta().Put("type", "AppGoods")).ReadAsString())["Category"] as Array;
var dl = new UISheetDialog() { Title = "应用分类" };
dl.Cells(3);// = 3;
for (var i = 0; i < AppCategory.Length; i++)
{
dl.Put(AppCategory.GetValue(i) as string, i.ToString());
}
return dl;
});
}
break;
case "Caption":
Value = Web.UIDialog.AsyncDialog(this.Context, "Caption", g =>
{
var dl = new Web.UIFormDialog() { Title = "应用标题" };
dl.AddText("应用标题", "Caption", appGood["Caption"]);
dl.Submit("确认更改", $"{request.Model}.{request.Command}");
return dl;
});
break;
case "Period":
var Period = Utility.IntParse(this.AsyncDialog("Period", g => new Web.UINumberDialog(appGood["Period"]) { Title = "售后占比" }), 0);
if (Period >= 0 && Period <= 100)
{
Value = Period.ToString();
}
else
{
this.Prompt("售后占比不能超过100小于零");
}
break;
case "TrialDays":
var TrialDays = Utility.IntParse(this.AsyncDialog("TrialDays", g => new Web.UINumberDialog(appGood["TrialDays"]) { Title = "试用天数" }), 0);
if (TrialDays >= 0)
{
Value = TrialDays.ToString();
}
else
{
this.Prompt("试用天数不能小于零");
}
break;
case "PeriodType":
Value = this.AsyncDialog("PeriodType", g =>
{
return new Web.UISheetDialog() { Title = "计价单位" }.Put("按周", "0").Put("按月", "1").Put("按季", "2").Put("年", "3");
});
break;
case "Description":
Value = Web.UIDialog.AsyncDialog(this.Context, "Description", g =>
{
var dl = new Web.UIFormDialog() { Title = "应用简介" };
dl.AddTextarea("简介", "Description", appGood["Description"]).Put("Rows", 10);
dl.Submit("确认更改", $"{request.Model}.{request.Command}");
return dl;
});
break;
case "Price":
Value = this.AsyncDialog("Price", g => new Web.UINumberDialog(appGood["Price"]) { Title = "出售价格" });
break;
case "Type":
Value = this.AsyncDialog("Type", g =>
{
return new Web.UISheetDialog() { Title = "发布方式" }.Put("反向代理", "0").Put("身份互联", "1")
.Put("Saas互联", "2");
});
break;
case "HelpUrl":
var HelpUrl = this.AsyncDialog("HelpUrl", g =>
{
return new Web.UITextDialog(appGood["HelpUrl"]) { Title = "营销网址" };
});
try
{
Value = new Uri(HelpUrl).AbsoluteUri;
}
catch
{
this.Prompt("网址格式不正确");
}
break;
case "Domain":
var Domain = this.AsyncDialog("Domain", g =>
{
return new Web.UITextDialog(appGood["Domain"]) { Title = "Saas网址" };
});
try
{
Value = new Uri(new Uri(Domain), "/").AbsoluteUri;
}
catch
{
this.Prompt("网址格式不正确");
}
break;
case "Tel":
Value = this.AsyncDialog("Tel", g =>
{
return new Web.UITextDialog(appGood["Tel"]) { Title = "售后电话" };
});
break;
case "Status":
Value = "Change";
break;
case "OperatingSystem":
var OperatingSystem = appGood["OperatingSystem"];
// var l=
Value = this.AsyncDialog("OperatingSystem", g =>
{
var check = new Web.UICheckboxDialog() { Title = "支持系统" };
check.Options.Put("Linux", "Linux", OperatingSystem?.Contains("Linux") == true)
.Put("Winfows", "Winfows", OperatingSystem?.Contains("Winfows") == true)
.Put("MacOS", "MacOS", OperatingSystem?.Contains("MacOS") == true);
return check;
});
break;
case "Hardware":
Value = this.AsyncDialog("Hardware", g =>
{
var check = new Web.UISheetDialog() { Title = "硬件配置" };
check.Put("2核4G").Put("4核8G").Put("4核16G").Put("8核32G");
return check;
});
break;
case "DemoUrl":
var DemoUrl = this.AsyncDialog("DemoUrl", g =>
{
return new Web.UITextDialog(appGood["DemoUrl"]) { Title = "演示网址" };
});
try
{
Value = new Uri(new Uri(DemoUrl), "/").AbsoluteUri;
}
catch
{
this.Prompt("网址格式不正确");
}
break;
case "PUT":
var site = DataFactory.Instance().Site(root);
if (site == null)
{
this.Prompt("当前应用配置不存在,不可更新配置");
}
var data = SiteActivity.PutMarket(site, secret);
this.Prompt(data?["msg"] ?? "提交异常");
break;
case "Content":
{
Value = Web.UIDialog.AsyncDialog(this.Context, "Content", r =>
{
var from5 = new UIFormDialog() { Title = "介绍说明" };
from5.AddTextarea("应用介绍支持MD格式", "Content", appGood["Content"]).Put("Rows", 20).NotRequired();
from5.Submit("确认更改", $"{request.Model}.{request.Command}");
return from5;
});
}
break;
}
if (String.IsNullOrEmpty(Value) == false)
{
var AppCategory = JSON.Deserialize<WebMeta>(UMC.ITME.Utility.Sign(new Uri(APIProxy.Uri, "Transfer").WebRequest(), secret)
.Put(new WebMeta().Put("type", "AppGoods", "root", root, "key", Model, "value", Value)).ReadAsString());
if (AppCategory.ContainsKey("msg"))
{
this.Prompt("提示", AppCategory["msg"]);
}
}
this.Context.Send(true);
}
}
}