Files
29WxOrder/Main.Test/DemoData.cs
T
2026-10-22 13:42:04 +08:00

79 lines
3.8 KiB
C#

using System.Globalization;
using System.Windows;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using Prism.Mvvm;
namespace Main.Test;
public class ItemInfo : BindableBase
{
public int Code { get; init; }
public string Name { get; init; } = "";
public string Value => Price.ToString("N2", CultureInfo.CurrentCulture);
public decimal Price { get; init; }
public int Qty { get; init; }
public string Sku { get; init; } = "";
public string Shop { get; init; } = "";
public string Buyer { get; init; } = "";
public string Address { get; init; } = "";
public string Remark { get; init; } = "";
public DateTime CreatedAt { get; init; }
public ImageSource Thumbnail { get; init; } = null!;
public string? ThumbnailUrl { get; init; }
private string status = "待处理";
public string Status { get => status; set => SetProperty(ref status, value); }
}
internal static class DemoData
{
// 冻结并共享小尺寸位图,滚动不触发网络请求或重复解码。
private static readonly ImageSource[] Thumbnails = CreateThumbnails();
public static List<ItemInfo> Create(int count, int networkImageSize = 0)
{
string[] names = ["轻量通勤双肩包", "纯棉宽松短袖", "旅行收纳组合", "便携保温水杯", "无线办公鼠标", "桌面收纳置物盒", "运动休闲鞋", "折叠防晒遮阳伞"];
string[] shops = ["城市生活旗舰店", "优选数码专营店", "日常好物集合店", "远行户外用品店"];
var random = new Random(20261022);
var session = Guid.NewGuid().ToString("N");
var result = new List<ItemInfo>(count);
for (var i = 0; i < count; i++)
result.Add(new ItemInfo
{
Code = 100000 + i, Name = names[i % names.Length] + " · 秋季新品 / 品质款",
Price = random.Next(1900, 69900) / 100m, Qty = random.Next(1, 100),
Sku = $"SKU-{i:000000} / {(i % 2 == 0 ? "雾蓝" : "米白")} / 标准款",
Shop = shops[i % shops.Length], Buyer = $"买家{i:00000}",
Address = $"浙江省杭州市西湖区 文一路 {i % 300 + 1} 号 · 联系尾号 {i % 10000:0000}",
Remark = i % 3 == 0 ? "请核对规格,周末可收货;外包装请加固。" : "常规发货 / 已核对收货信息",
CreatedAt = new DateTime(2026, 10, 22, 12, 0, 0).AddMinutes(-i),
Status = new[] { "待处理", "已确认", "待发货", "已完成" }[i % 4],
Thumbnail = Thumbnails[i % Thumbnails.Length],
ThumbnailUrl = networkImageSize == 0 ? null : $"https://picsum.photos/seed/{session}-{i}/{networkImageSize}/{networkImageSize}"
});
return result;
}
private static ImageSource[] CreateThumbnails()
{
var images = new ImageSource[16];
for (var i = 0; i < images.Length; i++)
{
var visual = new DrawingVisual();
using (var dc = visual.RenderOpen())
{
var color = Color.FromRgb((byte)(55 + i * 11), (byte)(100 + i * 6), (byte)(165 - i * 4));
dc.DrawRoundedRectangle(new SolidColorBrush(Color.FromRgb(241, 245, 249)), null, new Rect(0, 0, 72, 72), 8, 8);
var brush = new SolidColorBrush(color);
var pen = new Pen(brush, 4);
dc.DrawRoundedRectangle(null, pen, new Rect(25, 12, 22, 24), 10, 10);
dc.DrawRoundedRectangle(brush, null, new Rect(14, 26, 44, 36), 6, 6);
dc.DrawLine(new Pen(Brushes.White, 2), new Point(24, 44), new Point(48, 44));
}
var bitmap = new RenderTargetBitmap(72, 72, 96, 96, PixelFormats.Pbgra32);
bitmap.Render(visual); bitmap.Freeze(); images[i] = bitmap;
}
return images;
}
}