diff --git a/JD.js b/JD.js index eda3768cd5a019a761fb572f91dc8306bc96c0d1..ed4e919a24119b8dde4a4f28dfb986c58be59722 100644 --- a/JD.js +++ b/JD.js @@ -96,6 +96,10 @@ class Widget extends BaseWidget { fruitNightColor: '#84B264', baiTiaoDayColor: '#F62910', baiTiaoNightColor: '#F62910', + packageFlowTitleDayColor: '#283149', + packageFlowTitleNightColor: '#283149', + packageFlowDescDayColor: '#494949', + packageFlowDescNightColor: '#494949', }; userInfo = { @@ -171,6 +175,12 @@ class Widget extends BaseWidget { baiTiaoDayColor = () => this.getValueByKey('baiTiaoDayColor'); baiTiaoNightColor = () => this.getValueByKey('baiTiaoNightColor'); + packageFlowTitleDayColor = () => this.getValueByKey('packageFlowTitleDayColor'); + packageFlowTitleNightColor = () => this.getValueByKey('packageFlowTitleNightColor'); + + packageFlowDescDayColor = () => this.getValueByKey('packageFlowDescDayColor'); + packageFlowDescNightColor = () => this.getValueByKey('packageFlowDescNightColor'); + constructor(scriptName) { super(scriptName); this.defaultConfig.refreshInterval = '60'; @@ -416,6 +426,46 @@ class Widget extends BaseWidget { } ] }, + { + items: [ + { + name: 'packageFlowTitleDayColor', + label: '物流标题白天颜色', + type: 'color', + icon: { name: 'pencil.and.outline', color: '#3a86ff', }, + needLoading: false, + default: this.packageFlowTitleDayColor(), + }, + { + name: 'packageFlowTitleNightColor', + label: '物流标题深色颜色', + type: 'color', + icon: { name: 'square.and.pencil', color: '#3a0ca3', }, + needLoading: false, + default: this.packageFlowTitleNightColor(), + } + ] + }, + { + items: [ + { + name: 'packageFlowDescDayColor', + label: '物流明细白天颜色', + type: 'color', + icon: { name: 'pencil.and.outline', color: '#3a86ff', }, + needLoading: false, + default: this.packageFlowDescDayColor(), + }, + { + name: 'packageFlowDescNightColor', + label: '物流明细深色颜色', + type: 'color', + icon: { name: 'square.and.pencil', color: '#3a0ca3', }, + needLoading: false, + default: this.packageFlowDescNightColor(), + } + ] + }, ] }, ], @@ -756,7 +806,7 @@ class Widget extends BaseWidget { let image; //================================ const baiTiaoSize = new Size(25, 25); - const baiTiaoColor = new Color('#F62910'); + const baiTiaoColor = Color.dynamic(new Color(this.baiTiaoDayColor()), new Color(this.baiTiaoNightColor()));; //================================ detailInfoStack.addSpacer(2); let baiTiaoStack = detailInfoStack.addStack(); @@ -802,8 +852,8 @@ class Widget extends BaseWidget { let image; //================================ const coverSize = new Size(23, 23); - const titleColor = new Color('#283149'); - const descColor = new Color('#494949'); + const titleColor = Color.dynamic(new Color(this.packageFlowTitleDayColor()), new Color(this.packageFlowTitleNightColor())); + const descColor = Color.dynamic(new Color(this.packageFlowDescDayColor()), new Color(this.packageFlowDescNightColor())); //================================ stack.addSpacer(4); let packageFlowStack = stack.addStack(); @@ -813,7 +863,7 @@ class Widget extends BaseWidget { // image = await this.getImageByUrl(itemFlow.cover); imgSpan = packageFlowStack.addImage(image); - imgSpan.imageOpacity = 0.6; + imgSpan.imageOpacity = 0.8; imgSpan.imageSize = coverSize; imgSpan.cornerRadius = 4; // @@ -830,7 +880,7 @@ class Widget extends BaseWidget { textSpan = infoStack.addText(` ${itemFlow.desc}`); textSpan.textColor = descColor; textSpan.font = Font.regularSystemFont(9); - textSpan.textOpacity = 0.6; + textSpan.textOpacity = 0.7; textSpan.lineLimit = 1; // packageFlowStack.addSpacer(); diff --git a/_LSP.js b/_LSP.js index b316eba46c42e9e8607d2b664cdbb1c5e71e9ba7..036f1fc035ab27c153861a36ee2646373f94fd53 100644 --- a/_LSP.js +++ b/_LSP.js @@ -41,10 +41,14 @@ class BaseWidget { dayOnlineBgName = () => `${this.scriptName}_day_online`; + dayLocalBgName = () => `${this.scriptName}_day_local`; + nightTransparentBgName = () => `${this.scriptName}_night_transparent`; nightOnlineBgName = () => `${this.scriptName}_night_online`; + nightLocalBgName = () => `${this.scriptName}_night_local`; + changeBgMode2OnLineBg = async (bgUrlArr = [], options = {}) => { this.defaultConfig.bgType = '1'; let widgetSetting = this.readWidgetSetting(); @@ -1948,7 +1952,6 @@ class BaseWidget { showWidgetSettingBg = false, // 是否显示组件背景设置的图片 showWidgetBg = true, // 是否显示背景菜单选项 isChildLevel = false, // 是否是二级菜单 - subTitle = '', // 二级菜单名称 needLocation = false, // 是否需要定位 settingItemFontSize = 16, authorNameFontSize = 20, @@ -1970,7 +1973,7 @@ class BaseWidget { const { dayBackgroundImagePath, nightBackgroundImagePath, dayBackgroundImageUrl, nightBackgroundImageUrl, picType } = widgetSetting; let dayBackgroundImage = this.useFileManager().readImgCache(dayBackgroundImagePath); let nightBackgroundImage = this.useFileManager().readImgCache(nightBackgroundImagePath); - if ((picType == 0 || picType == 1) && showWidgetSettingBg) { + if ((picType == 0 || picType == 1 || picType == 2) && showWidgetSettingBg) { if (picType == 1) { dayBackgroundImage = dayBackgroundImageUrl ? await this.getImageByUrl(dayBackgroundImageUrl) : null; nightBackgroundImage = nightBackgroundImageUrl ? await this.getImageByUrl(nightBackgroundImageUrl) : null; @@ -2511,7 +2514,7 @@ class BaseWidget { @@ -2588,7 +2591,6 @@ class BaseWidget { case 'widgetBg': try { const bgWebView = new WebView(); - let subTitle = ''; let settingItems = []; const bgTypeIndex = await this.presentSheet({ title: '组件背景设置', @@ -2602,17 +2604,16 @@ class BaseWidget { }); if (bgTypeIndex !== -1) { bgType = `${bgTypeIndex}`; - if (bgTypeIndex == 0 || bgTypeIndex == 1) { + if (bgTypeIndex == 0 || bgTypeIndex == 1 || bgTypeIndex == 2) { widgetSetting['picType'] = bgTypeIndex; - widgetSetting['dayBackgroundImagePath'] = bgTypeIndex == 0 ? this.dayTransparentBgName() : this.dayOnlineBgName(); - widgetSetting['nightBackgroundImagePath'] = bgTypeIndex == 0 ? this.nightTransparentBgName() : this.nightOnlineBgName(); + widgetSetting['dayBackgroundImagePath'] = bgTypeIndex == 0 ? this.dayTransparentBgName() : (bgTypeIndex == 1 ? this.dayOnlineBgName() : this.dayLocalBgName()); + widgetSetting['nightBackgroundImagePath'] = bgTypeIndex == 0 ? this.nightTransparentBgName() : (bgTypeIndex == 1 ? this.nightOnlineBgName() : this.nightLocalBgName()); } this.writeWidgetSetting({ ...widgetSetting, bgType }); this.insertTextByElementId(previewWebView, 'bgType', this.bgType2Text(bgType)); } switch (bgTypeIndex) { case 0: // 透明背景 - subTitle = '透明背景图设置'; settingItems = [ { items: [ @@ -2638,7 +2639,6 @@ class BaseWidget { break; case 1: // 在线图片 - subTitle = '在线背景图设置'; settingItems = [ { items: [ @@ -2671,12 +2671,17 @@ class BaseWidget { default: false }, { - name: 'darkBlurBg', - label: '深色模糊', - type: 'switch', + name: 'blurMode', + label: '模糊效果', + type: 'select', icon: { name: 'rectangle.fill.on.rectangle.fill', color: '#6A63B8', }, needLoading: false, - default: true + options: [ + { label: '浅色模糊', value: 'light' }, + { label: '深色模糊', value: 'dark' }, + { label: '完全模糊', value: 'none' }, + ], + default: "none" }, { name: 'blurRadius', @@ -2692,7 +2697,6 @@ class BaseWidget { break; case 2: // 相册图片 - subTitle = '相册背景图设置'; settingItems = [ { items: [ @@ -2702,7 +2706,7 @@ class BaseWidget { type: 'cell', icon: { name: 'photo', color: '#11c4d4', }, needLoading: false, - default: widgetSetting.dayBackgroundImageUrl ? '已设置' : '' + default: this.useFileManager().readImgCache(this.dayLocalBgName()) ? '已设置' : '' }, { name: 'bgNightImg', @@ -2710,14 +2714,14 @@ class BaseWidget { type: 'cell', icon: { name: 'photo.fill', color: '#0c81e4', }, needLoading: false, - default: widgetSetting.nightBackgroundImageUrl ? '已设置' : '' + default: this.useFileManager().readImgCache(this.nightLocalBgName()) ? '已设置' : '' }, ] }, { items: [ { - name: 'blurBg', + name: 'localBlurBg', label: '高斯模糊', type: 'switch', icon: { name: 'rectangle.on.rectangle', color: '#938BF0', }, @@ -2725,15 +2729,20 @@ class BaseWidget { default: false }, { - name: 'darkBlurBg', - label: '深色模糊', - type: 'switch', + name: 'localBlurMode', + label: '模糊效果', + type: 'select', icon: { name: 'rectangle.fill.on.rectangle.fill', color: '#6A63B8', }, needLoading: false, - default: true + options: [ + { label: '浅色模糊', value: 'light' }, + { label: '深色模糊', value: 'dark' }, + { label: '完全模糊', value: 'none' }, + ], + default: 'none' }, { - name: 'blurRadius', + name: 'localBlurRadius', label: '模糊强度', type: 'number', icon: { name: 'plus.rectangle.on.rectangle', color: '#FF59A1', }, @@ -2746,7 +2755,6 @@ class BaseWidget { break; case 3: // 纯色背景 - subTitle = '纯色背景设置'; settingItems = [ { items: [ @@ -2772,7 +2780,6 @@ class BaseWidget { break; case 4: // 渐变背景 - subTitle = '渐变背景设置'; settingItems = [ { items: [ @@ -2811,8 +2818,7 @@ class BaseWidget { await this.renderAppView({ isChildLevel: true, showWidgetBg: false, - showWidgetSettingBg: bgTypeIndex == 0 || bgTypeIndex == 1, - subTitle, + showWidgetSettingBg: bgTypeIndex == 0 || bgTypeIndex == 1 || bgTypeIndex == 2, settingItems, onItemClick: async (item) => { switch (item.name) { @@ -2839,7 +2845,7 @@ class BaseWidget { ); } } - } else { + } else if (bgTypeIndex == 1) { await this.generateInputAlert({ title: '在线白天图片背景', message: '填入图片链接设置为组件背景图\n系统自动裁剪中间部分图片使用', @@ -2862,6 +2868,25 @@ class BaseWidget { false ); }); + } else if (bgTypeIndex == 2) { + let backgroundImage = await Photos.fromLibrary(); + if (backgroundImage) { + this.useFileManager().writeImgCache(this.dayLocalBgName(), backgroundImage); + // 保存配置 + widgetSetting['picType'] = 2; + widgetSetting['dayBackgroundImagePath'] = this.dayLocalBgName(); + this.writeWidgetSetting({ ...widgetSetting }); + this.insertTextByElementId(bgWebView, item.name, '已设置'); + bgWebView.evaluateJavaScript( + ` + document.getElementById("previewBg").style.display = ""; + document.getElementById("previewDayBg").style.display = ""; + document.getElementById("dayBg").height = ${this.getWidgetSize('中号').height / 2}; + document.getElementById("dayBg").src="data:image/png;base64,${Data.fromPNG(backgroundImage).toBase64String()}"; + `, + false + ); + } } break; @@ -2888,7 +2913,7 @@ class BaseWidget { ); } } - } else { + } else if (bgTypeIndex == 1) { await this.generateInputAlert({ title: '在线深色图片背景', message: '填入图片链接设置为组件背景图\n系统自动裁剪中间部分图片使用', @@ -2911,6 +2936,25 @@ class BaseWidget { false ); }); + } else if (bgTypeIndex == 2) { + let backgroundImage = await Photos.fromLibrary(); + if (backgroundImage) { + this.useFileManager().writeImgCache(this.nightLocalBgName(), backgroundImage); + // 保存配置 + widgetSetting['picType'] = 2; + widgetSetting['nightBackgroundImagePath'] = this.nightLocalBgName(); + this.writeWidgetSetting({ ...widgetSetting }); + this.insertTextByElementId(bgWebView, item.name, '已设置'); + bgWebView.evaluateJavaScript( + ` + document.getElementById("previewBg").style.display = ""; + document.getElementById("previewDarkBg").style.display = ""; + document.getElementById("darkBg").height = ${this.getWidgetSize('中号').height / 2}; + document.getElementById("darkBg").src="data:image/png;base64,${Data.fromPNG(backgroundImage).toBase64String()}"; + `, + false + ); + } } break; } @@ -2952,10 +2996,10 @@ class BaseWidget { break case 'cleanData': - let res = await this.generateAlert('清理缓存', '', ['重置组件', '清理文件'], '取消'); + let res = await this.generateAlert('组件清理', '', ['重置组件', '清理缓存'], '取消'); if (res != -1) { this.removeWidgetSetting(res != 0); - await this.generateAlert('清理缓存', '清理缓存成功\n请重新运行小组件', ['确定']); + await this.generateAlert('组件清理', '清理成功\n请重新运行小组件', ['确定']); this.rerunWidget(); } break @@ -3001,7 +3045,6 @@ class BaseWidget { await this.renderAppView({ isChildLevel: true, showWidgetBg: false, - subTitle: label, settingItems: childItems }); } else { @@ -3119,7 +3162,8 @@ class BaseWidget { const { refreshInterval, picType = 0, - blurBg, darkBlurBg, blurRadius, + blurBg, blurMode, blurRadius, + localBlurBg, localBlurMode, localBlurRadius, dayBackgroundImageUrl, nightBackgroundImageUrl, dayBackgroundImagePath, @@ -3131,32 +3175,54 @@ class BaseWidget { endColor, } = widgetSetting; let bgImg; + let dayBackgroundImagePathTmp = ''; + let nightBackgroundImagePathTmp = ''; switch (bgType) { case '0': case '1': + case '2': if (picType == 1) { if (dayBackgroundImageUrl) { let dayBgImg = await this.getImageByUrl(dayBackgroundImageUrl); if (blurBg) { - dayBgImg = await this.blurImage(dayBgImg, { w: dayBgImg.size.width, h: dayBgImg.size.height, x: 0, y: 0 }, darkBlurBg ? 'dark' : 'light', blurRadius); + dayBgImg = await this.blurImage(dayBgImg, { w: dayBgImg.size.width, h: dayBgImg.size.height, x: 0, y: 0 }, blurMode, blurRadius); } this.useFileManager().writeImgCache(this.dayOnlineBgName(), dayBgImg); } if (nightBackgroundImageUrl) { let nightBgImg = await this.getImageByUrl(nightBackgroundImageUrl); if (blurBg) { - nightBgImg = await this.blurImage(nightBgImg, { w: nightBgImg.size.width, h: nightBgImg.size.height, x: 0, y: 0 }, darkBlurBg ? 'dark' : 'light', blurRadius); + nightBgImg = await this.blurImage(nightBgImg, { w: nightBgImg.size.width, h: nightBgImg.size.height, x: 0, y: 0 }, blurMode, blurRadius); } this.useFileManager().writeImgCache(this.nightOnlineBgName(), nightBgImg); } + } else if (picType == 2) { + if (dayBackgroundImagePath && !Device.isUsingDarkAppearance()) { + let dayBgImg = this.useFileManager().readImgCache(dayBackgroundImagePath); + if (localBlurBg) { + dayBgImg = await this.blurImage(dayBgImg, { w: dayBgImg.size.width, h: dayBgImg.size.height, x: 0, y: 0 }, localBlurMode, localBlurRadius); + } + dayBackgroundImagePathTmp = this.dayLocalBgName() + "_blur"; + this.useFileManager().writeImgCache(dayBackgroundImagePathTmp, dayBgImg); + } + if (nightBackgroundImagePath && Device.isUsingDarkAppearance()) { + let nightBgImg = this.useFileManager().readImgCache(nightBackgroundImagePath); + if (localBlurBg) { + nightBgImg = await this.blurImage(nightBgImg, { w: nightBgImg.size.width, h: nightBgImg.size.height, x: 0, y: 0 }, localBlurMode, localBlurRadius); + } + nightBackgroundImagePathTmp = this.nightLocalBgName() + "_blur"; + this.useFileManager().writeImgCache(nightBackgroundImagePathTmp, nightBgImg); + } } - bgImg = this.useFileManager().readImgCache(Device.isUsingDarkAppearance() ? nightBackgroundImagePath || dayBackgroundImagePath : dayBackgroundImagePath || nightBackgroundImagePath); + const dayBackgroundImage = this.useFileManager().readImgCache(dayBackgroundImagePathTmp || dayBackgroundImagePath); + const nightBackgroundImage = this.useFileManager().readImgCache(nightBackgroundImagePathTmp || nightBackgroundImagePath); + bgImg = Device.isUsingDarkAppearance() ? nightBackgroundImage || dayBackgroundImage : dayBackgroundImage || nightBackgroundImage; if (bgImg) { widget.backgroundImage = bgImg; } break; - case '2': + case '3': let pureColors = this.splitColors(this.backgroundColor); if (bgDayColor && bgNightColor) { widget.backgroundColor = Color.dynamic(new Color(bgDayColor), new Color(bgNightColor)); @@ -3165,7 +3231,7 @@ class BaseWidget { } break; - case '3': + case '4': let gradientColors = this.splitColors(this.backgroundGradientColor); if (startColor && endColor) { gradientColors = [startColor, endColor];