diff --git a/bin/cli/worker/template/main_thread.helper.t b/bin/cli/worker/template/main_thread.helper.t index af02e5192..19ac36016 100644 --- a/bin/cli/worker/template/main_thread.helper.t +++ b/bin/cli/worker/template/main_thread.helper.t @@ -1,5 +1,7 @@ import { ${WorkerName}MainThreadWorker } from './main_thread/${workerName}_main_thread'; // 不需要一起打包的话则不需要引入这行 +// FuiWorkerPlugin中的属性会同步到fui-worker中,同时支持loader行内传入属性 +// 根据实际需求传入inline,返回格式 true -> blob url,false -> servicePath import { workerUrl } from 'fui-worker!./worker_thread/${workerName}_worker_thread'; export class ${WorkerName}WorkerHelper { @@ -23,6 +25,7 @@ export class ${WorkerName}WorkerHelper { /** * 格式化worker url,比如补充一些环境信息到参数里 + * 可通过 #hash 将参数传入blob url * @param url worker url */ private urlFormatter(url: string) { diff --git a/package.json b/package.json index 1a0afdd97..d01b7bf78 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "fineui", - "version": "2.0.20220802151352", + "version": "2.0.20220805101538", "description": "fineui", "main": "dist/fineui_without_conflict.min.js", "types": "dist/lib/index.d.ts", diff --git a/plugins/webpack-fui-worker-plugin/index.js b/plugins/webpack-fui-worker-plugin/index.js index 19f660299..2fa9b3ed0 100644 --- a/plugins/webpack-fui-worker-plugin/index.js +++ b/plugins/webpack-fui-worker-plugin/index.js @@ -5,6 +5,7 @@ const path = require('path'); const webpack = require('webpack'); const { WorkerPluginName } = require('./constants'); +const ModuleFilenameHelpers = require('webpack/lib/ModuleFilenameHelpers'); class FuiWorkerPlugin { constructor(options = {}) { @@ -39,6 +40,39 @@ class FuiWorkerPlugin { // 动态添加 worker 的 worker-loader, 命名为 "fui-worker" compiler.options.resolveLoader.alias['fui-worker'] = path.resolve(__dirname, './worker-loader.js'); }); + + // 将FuiWorkerPlugin的参数传递给fui-worker loader + compiler.hooks.compilation.tap(WorkerPluginName, compilation => { + compilation.hooks.normalModuleLoader.tap(WorkerPluginName, (context, module) => { + // 仅提供给fui-worker + const fuiLoader = module.loaders.find(loader => loader.loader.indexOf('fui-worker') !== -1); + + if (fuiLoader) { + const resource = module.resource; + + if (!resource) return; + + // fui-worker通过options读取 + context.options = context.options || {}; + + const index = resource.indexOf('?'); + + if (ModuleFilenameHelpers.matchObject( + this.options, + index < 0 ? resource : resource.substr(0, index) + )) { + for (const key of Object.keys(this.options)) { + // 忽略关键属性 + if (key === "include" || key === "exclude" || key === "test") { + continue; + } + + context.options[key] = this.options[key]; + } + } + } + }) + }) } } diff --git a/plugins/webpack-fui-worker-plugin/worker-loader.js b/plugins/webpack-fui-worker-plugin/worker-loader.js index 9affe81f4..dd47d0b70 100644 --- a/plugins/webpack-fui-worker-plugin/worker-loader.js +++ b/plugins/webpack-fui-worker-plugin/worker-loader.js @@ -43,7 +43,7 @@ function loader() { const entryFileName = `${FileNamePrefix}index`; // 获取传递给 loader 的 options - loaderUtils.getOptions(this) || {}; + const options = Object.assign(loaderUtils.getOptions(this) || {}, this.options); // 创建 childCompiler, 用于实现 worker 构建为独立 js 资源 const childCompiler = this._compilation.createChildCompiler(WorkerLoaderName, { @@ -92,15 +92,24 @@ function loader() { return callback(error); } - return callback( - null, - // 插入代码的转译和压缩由主构建配置的 babel/ts loader 处理, 不需要 worker-worker 来处理 - // 添加 @ts-nocheck 避免 ts-check 报错 - `// @ts-nocheck - const servicePath = __webpack_public_path__ + ${JSON.stringify(entry)}; - export const workerUrl = servicePath; - ` - ); + // 支持blob url形式 + return options.inline + ? callback( + null, + // 插入代码的转译和压缩由主构建配置的 babel/ts loader 处理, 不需要 worker-worker 来处理 + // 添加 @ts-nocheck 避免 ts-check 报错 + `// @ts-nocheck + const blob = new Blob([${JSON.stringify(compilation.assets[entry].source())}]); + export const workerUrl = window.URL.createObjectURL(blob); + ` + ) + : callback( + null, + `// @ts-nocheck + const servicePath = __webpack_public_path__ + ${JSON.stringify(entry)}; + export const workerUrl = servicePath; + ` + ) }); return; diff --git a/src/case/combo/iconcombo/combo.icon.js b/src/case/combo/iconcombo/combo.icon.js index 81050859a..8cb821a1e 100644 --- a/src/case/combo/iconcombo/combo.icon.js +++ b/src/case/combo/iconcombo/combo.icon.js @@ -20,7 +20,8 @@ BI.IconCombo = BI.inherit(BI.Widget, { adjustXOffset: 0, adjustYOffset: 0, offsetStyle: "left", - chooseType: BI.ButtonGroup.CHOOSE_TYPE_SINGLE + chooseType: BI.ButtonGroup.CHOOSE_TYPE_SINGLE, + isShowDown: true }); }, @@ -42,7 +43,8 @@ BI.IconCombo = BI.inherit(BI.Widget, { height: o.height, iconWidth: o.iconWidth, iconHeight: o.iconHeight, - value: o.value + value: o.value, + isShowDown: o.isShowDown }); this.popup = BI.createWidget(o.popup, { type: "bi.icon_combo_popup", diff --git a/src/widget/time/time.combo.js b/src/widget/time/time.combo.js index 30c40e0ab..e3aa83713 100644 --- a/src/widget/time/time.combo.js +++ b/src/widget/time/time.combo.js @@ -60,143 +60,136 @@ } }; return { - type: "bi.htape", + type: "bi.horizontal_fill", + cls: "bi-border bi-border-radius", + columnSize: ["fill", this.constants.iconWidth], + height: opts.height - 2, + width: opts.width - 2, items: [{ - type: "bi.absolute", - items: [{ + el: { + type: "bi.combo", + container: opts.container, + toggle: false, + isNeedAdjustHeight: opts.isNeedAdjustHeight, + isNeedAdjustWidth: opts.isNeedAdjustWidth, el: { - type: "bi.combo", - cls: "bi-border bi-border-radius", - container: opts.container, - toggle: false, - isNeedAdjustHeight: opts.isNeedAdjustHeight, - isNeedAdjustWidth: opts.isNeedAdjustWidth, - el: { - type: "bi.time_trigger", - height: opts.height - 2, - allowEdit: opts.allowEdit, - watermark: opts.watermark, - format: opts.format, - value: opts.value, - ref: function (_ref) { - self.trigger = _ref; - }, - listeners: [{ - eventName: "EVENT_KEY_DOWN", - action: function () { - if (self.combo.isViewVisible()) { - self.combo.hideView(); - } - self.fireEvent(BI.TimeCombo.EVENT_KEY_DOWN, arguments); - } - }, { - eventName: "EVENT_STOP", - action: function () { - if (!self.combo.isViewVisible()) { - self.combo.showView(); - } - } - }, { - eventName: "EVENT_FOCUS", - action: function () { - self.storeTriggerValue = self.trigger.getKey(); - if (!self.combo.isViewVisible()) { - self.combo.showView(); - } - self.fireEvent("EVENT_FOCUS"); - } - }, { - eventName: "EVENT_BLUR", - action: function () { - self.fireEvent("EVENT_BLUR"); - } - }, { - eventName: "EVENT_ERROR", - action: function () { - var date = BI.getDate(); - self.storeValue = { - hour: date.getHours(), - minute: date.getMinutes(), - second: date.getSeconds() - }; - self.fireEvent("EVENT_ERROR"); - } - }, { - eventName: "EVENT_VALID", - action: function () { - self.fireEvent("EVENT_VALID"); + type: "bi.time_trigger", + height: opts.height - 2, + allowEdit: opts.allowEdit, + watermark: opts.watermark, + format: opts.format, + value: opts.value, + ref: function (_ref) { + self.trigger = _ref; + }, + listeners: [{ + eventName: "EVENT_KEY_DOWN", + action: function () { + if (self.combo.isViewVisible()) { + self.combo.hideView(); } - }, { - eventName: "EVENT_CHANGE", - action: function () { - self.fireEvent("EVENT_CHANGE"); + self.fireEvent(BI.TimeCombo.EVENT_KEY_DOWN, arguments); + } + }, { + eventName: "EVENT_STOP", + action: function () { + if (!self.combo.isViewVisible()) { + self.combo.showView(); } - }, { - eventName: "EVENT_CONFIRM", - action: function () { - if (self.combo.isViewVisible()) { - return; - } - var dateStore = self.storeTriggerValue; - var dateObj = self.trigger.getKey(); - if (BI.isNotEmptyString(dateObj) && !BI.isEqual(dateObj, dateStore)) { - self.storeValue = self.trigger.getValue(); - self.setValue(self.trigger.getValue()); - } else if (BI.isEmptyString(dateObj)) { - self.storeValue = null; - self.trigger.setValue(); - } - self.fireEvent("EVENT_CONFIRM"); + } + }, { + eventName: "EVENT_FOCUS", + action: function () { + self.storeTriggerValue = self.trigger.getKey(); + if (!self.combo.isViewVisible()) { + self.combo.showView(); } - }] - }, - adjustLength: this.constants.comboAdjustHeight, - popup: { - el: popup, - width: opts.isNeedAdjustWidth ? opts.width : this.constants.popupWidth, - stopPropagation: false - }, - hideChecker: function (e) { - return self.triggerBtn.element.find(e.target).length === 0; - }, - listeners: [{ - eventName: BI.Combo.EVENT_BEFORE_POPUPVIEW, + self.fireEvent("EVENT_FOCUS"); + } + }, { + eventName: "EVENT_BLUR", action: function () { - self.popup.setValue(self.storeValue); - self.fireEvent(BI.TimeCombo.EVENT_BEFORE_POPUPVIEW); + self.fireEvent("EVENT_BLUR"); } - }], - ref: function (_ref) { - self.combo = _ref; - } - }, - top: 0, - left: 0, - right: 0, - bottom: 0 - }, { - el: { - type: "bi.icon_button", - cls: "bi-trigger-icon-button time-font icon-size-16", - width: this.constants.iconWidth, - height: opts.height, - listeners: [{ - eventName: BI.IconButton.EVENT_CHANGE, + }, { + eventName: "EVENT_ERROR", + action: function () { + var date = BI.getDate(); + self.storeValue = { + hour: date.getHours(), + minute: date.getMinutes(), + second: date.getSeconds() + }; + self.fireEvent("EVENT_ERROR"); + } + }, { + eventName: "EVENT_VALID", + action: function () { + self.fireEvent("EVENT_VALID"); + } + }, { + eventName: "EVENT_CHANGE", + action: function () { + self.fireEvent("EVENT_CHANGE"); + } + }, { + eventName: "EVENT_CONFIRM", action: function () { if (self.combo.isViewVisible()) { - // self.combo.hideView(); - } else { - self.combo.showView(); + return; } + var dateStore = self.storeTriggerValue; + var dateObj = self.trigger.getKey(); + if (BI.isNotEmptyString(dateObj) && !BI.isEqual(dateObj, dateStore)) { + self.storeValue = self.trigger.getValue(); + self.setValue(self.trigger.getValue()); + } else if (BI.isEmptyString(dateObj)) { + self.storeValue = null; + self.trigger.setValue(); + } + self.fireEvent("EVENT_CONFIRM"); } - }], - ref: function (_ref) { - self.triggerBtn = _ref; - } + }] + }, + adjustLength: this.constants.comboAdjustHeight, + popup: { + el: popup, + width: opts.isNeedAdjustWidth ? opts.width : this.constants.popupWidth, + stopPropagation: false + }, + hideChecker: function (e) { + return self.triggerBtn.element.find(e.target).length === 0; }, - top: 0, - right: 0 - }] + listeners: [{ + eventName: BI.Combo.EVENT_BEFORE_POPUPVIEW, + action: function () { + self.popup.setValue(self.storeValue); + self.fireEvent(BI.TimeCombo.EVENT_BEFORE_POPUPVIEW); + } + }], + ref: function (_ref) { + self.combo = _ref; + } + }, + }, { + el: { + type: "bi.icon_button", + cls: "bi-trigger-icon-button time-font", + width: this.constants.iconWidth, + listeners: [{ + eventName: BI.IconButton.EVENT_CHANGE, + action: function () { + if (self.combo.isViewVisible()) { + // self.combo.hideView(); + } else { + self.combo.showView(); + } + } + }], + ref: function (_ref) { + self.triggerBtn = _ref; + } + }, }] }; }, @@ -228,7 +221,7 @@ focus: function () { this.trigger.focus(); }, - + blur: function () { this.trigger.blur(); },