diff --git a/src/components/composer/MultiParams.vue b/src/components/composer/MultiParams.vue index 554203a..bb42589 100644 --- a/src/components/composer/MultiParams.vue +++ b/src/components/composer/MultiParams.vue @@ -5,13 +5,14 @@ :model-value="funcName" @update:model-value="funcName = $event" :options="localCommand.functionSelector?.options" + class="width-12" />
diff --git a/src/components/quickcommandUI/QuickCommand.vue b/src/components/quickcommandUI/QuickCommand.vue index f7a30d5..b323271 100644 --- a/src/components/quickcommandUI/QuickCommand.vue +++ b/src/components/quickcommandUI/QuickCommand.vue @@ -57,6 +57,18 @@ export default { }, mounted() { const quickcommandUI = { + /** + * 显示一个输入框组对话框,并返回用户输入的所有值 + * + * @param options 数组,如果元素为字符串,则作为输入框的标签名;如果元素为对象,则作为输入框的属性,(旧),可为对象,包含label、value、hint三个属性 + * + * @example options = ["请输入", "请输入2"] + * @example options = [{label: "请输入", value: "", hint: ""}, {label: "请输入2", value: "", hint: ""}] + * @example options = {labels: ["请输入", "请输入2"], values: ["", ""], hints: ["", ""]} + * + * @param title 窗口标题,默认为空 + * + */ showInputBox: (options = ["请输入"], title = "") => new Promise((reslove, reject) => { let props = { @@ -67,11 +79,31 @@ export default { }; if (!window.lodashM.isObject(options)) return reject(new TypeError(`应为 Object, 而非 ${typeof options}`)); - if (window.lodashM.isArray(options)) props.labels = options; - else Object.assign(props, options); + if (window.lodashM.isArray(options)) { + options.forEach((item) => { + if (typeof item === "string") { + props.labels.push(item); + props.values.push(""); + props.hints.push(""); + } else { + props.labels.push(item.label); + props.values.push(item.value); + props.hints.push(item.hint); + } + }); + } else { + // 兼容旧版本 + Object.assign(props, options); + } this.showUI(InputBox, props, false, reslove); }), + /** + * 显示一个按钮组对话框,并返回用户点击的按钮的标签 + * + * @param labels 按钮标签数组,默认为["确定"] + * @param title 窗口标题,默认为空 + */ showButtonBox: (labels = ["确定"], title = "") => new Promise((reslove, reject) => { if (!window.lodashM.isArray(labels)) @@ -79,6 +111,14 @@ export default { this.showUI(ButtonBox, { labels, title }, false, reslove); }), + /** + * 显示一个确认对话框,并返回用户点击的按钮的标签 + * + * @param message 确认消息,默认为空 + * @param title 窗口标题,默认为空 + * @param isHtml 是否为html消息,默认为false + * @param width 窗口宽度,默认为300 + */ showConfirmBox: (message = "", title = "提示", isHtml = false, width) => new Promise((reslove, reject) => { this.showUI( @@ -89,6 +129,14 @@ export default { ); }), + /** + * 显示一个消息框,并返回用户点击的按钮的标签 + * + * @param message 消息内容,默认为空 + * @param icon 消息图标,默认为"success" + * @param time 消息显示时间,默认为消息内容长度乘以120毫秒 + * @param position 消息显示位置,默认为"top" + */ showMessageBox: (message, icon = "success", time, position = "top") => { message = window.lodashM.truncate(message, { length: 1200 }); if (icon === "success") icon = "positive"; @@ -112,11 +160,23 @@ export default { }); }, + /** + * 显示一个文本区域对话框,并返回用户输入的文本 + * + * @param placeholder 文本区域提示,默认为空 + * @param value 文本区域默认值,默认为空 + */ showTextArea: (placeholder = "", value = "") => new Promise((reslove, reject) => { this.showUI(TextArea, { placeholder, value }, true, reslove); }), + /** + * 显示一个支持搜索的且可以动态更新的选项列表,选项类型为文本或html + * + * @param initItems 初始选项数组,默认为空 + * @param options 选项列表配置,默认为空 + */ showSelectList: (initItems, options = {}) => new Promise((reslove, reject) => { if (!window.lodashM.isArray(initItems)) @@ -134,27 +194,50 @@ export default { this.showUI(SelectList, { initItems, options }, true, reslove); }), + /** + * 显示一个等待按钮,并返回用户点击的按钮的标签 + * + * @param callback 等待回调函数 + * @param label 按钮标签,默认为"确定" + */ showWaitButton: (callback, label = "确定") => { this.wbLabel = label; this.showWb = true; this.wbEvent = callback; }, + /** + * 关闭等待按钮 + */ closeWaitButton: () => { this.showWb = false; }, + /** + * 更新选项列表 + * + * @param opt 新选项 + * @param id 选项索引,默认为undefined + */ updateSelectList: (opt, id) => { if (this.currentUI !== SelectList) throw "请先创建 selectList"; if (typeof id === "undefined") this.$refs.ui.items.push(opt); else this.$refs.ui.items[id] = opt; }, + /** + * 监听全局快捷键 + * + * @param callback 快捷键回调函数 + */ listenKeydown: (callback) => { this.listeners.push(callback); document.addEventListener("keydown", callback); }, + /** + * 移除全局快捷键 + */ removeListener: () => { this.listeners.forEach((listener) => { document.removeEventListener("keydown", listener); diff --git a/src/js/composer/commands/dataCommands.js b/src/js/composer/commands/dataCommands.js index b9288fa..021460f 100644 --- a/src/js/composer/commands/dataCommands.js +++ b/src/js/composer/commands/dataCommands.js @@ -220,19 +220,19 @@ export const dataCommands = { label: "整数", type: "switch", defaultValue: false, - width: 1, + width: 2, }, { label: "起始值", icon: "last_page", type: "numInput", - width: 10, + width: 5, }, { label: "结束值", icon: "first_page", type: "numInput", - width: 10, + width: 5, }, ], outputVariable: "randomNumber", diff --git a/src/js/composer/commands/simulateCommands.js b/src/js/composer/commands/simulateCommands.js index efe757d..f657044 100644 --- a/src/js/composer/commands/simulateCommands.js +++ b/src/js/composer/commands/simulateCommands.js @@ -18,13 +18,13 @@ export const simulateCommands = { label: "X坐标(留空则原地点击)", icon: "drag_handle", type: "numInput", - width: 8, + width: 6, }, { label: "Y坐标(留空则原地点击)", icon: "drag_handle", type: "numInput", - width: 8, + width: 6, }, ], functionSelector: { @@ -33,17 +33,19 @@ export const simulateCommands = { { label: "单击", value: "utools.simulateMouseClick", + icon: "mouse", }, { label: "右击", value: "utools.simulateMouseRightClick", + icon: "mouse", }, { label: "双击", value: "utools.simulateMouseDoubleClick", + icon: "mouse", }, ], - width: 2, allowEmptyArgv: true, }, }, @@ -56,14 +58,14 @@ export const simulateCommands = { icon: "drag_handle", defaultValue: 0, type: "numInput", - width: 8, + width: 6, }, { label: "Y坐标", icon: "drag_handle", defaultValue: 0, type: "numInput", - width: 8, + width: 6, }, ], }, diff --git a/src/js/composer/commands/uiCommand.js b/src/js/composer/commands/uiCommand.js index 56a88a5..fd3535a 100644 --- a/src/js/composer/commands/uiCommand.js +++ b/src/js/composer/commands/uiCommand.js @@ -5,7 +5,7 @@ export const uiCommands = { commands: [ { value: "quickcommand.showButtonBox", - label: "按钮组弹窗", + label: "按钮组", isAsync: true, outputVariable: "{id,text}", saveOutput: true, @@ -15,12 +15,12 @@ export const uiCommands = { type: "arrayEditor", defaultValue: [ { - value: "按钮1", + value: "是", isString: true, __varInputVal__: true, }, { - value: "按钮2", + value: "否", isString: true, __varInputVal__: true, }, @@ -28,5 +28,45 @@ export const uiCommands = { }, ], }, + { + value: "quickcommand.showInputBox", + label: "输入框", + isAsync: true, + outputVariable: "[inputValue1]", + saveOutput: true, + config: [ + { + label: "输入框", + type: "arrayEditor", + width: 12, + options: { + keys: [ + { + label: "标签", + value: "label", + }, + { + label: "默认值", + value: "value", + }, + ], + }, + defaultValue: [ + { + label: { + value: "请输入", + isString: true, + __varInputVal__: true, + }, + value: { + value: "", + isString: true, + __varInputVal__: true, + }, + }, + ], + }, + ], + }, ], }; diff --git a/src/js/composer/variableManager.js b/src/js/composer/variableManager.js index 600f47d..332e478 100644 --- a/src/js/composer/variableManager.js +++ b/src/js/composer/variableManager.js @@ -114,7 +114,7 @@ export function processVariable({ value, existingVars }) { key, processedName, needsRename: processedName !== varName, - hasRename: parts.length > 1 + hasRename: parts.length > 1, }; }); @@ -135,9 +135,9 @@ export function processVariable({ value, existingVars }) { const format = destructured.format === "array" ? `[${processedVars.map((v) => v.key).join(", ")}]` - : `{${processedVars.map((v) => - v.hasRename ? `${v.key}:${v.processedName}` : v.key - ).join(", ")}}`; + : `{${processedVars + .map((v) => (v.hasRename ? `${v.key}:${v.processedName}` : v.key)) + .join(", ")}}`; return { isValid: true, diff --git a/src/plugins/monaco/types/quickcommand.api.d.ts b/src/plugins/monaco/types/quickcommand.api.d.ts index 90a340f..bf02d33 100644 --- a/src/plugins/monaco/types/quickcommand.api.d.ts +++ b/src/plugins/monaco/types/quickcommand.api.d.ts @@ -25,18 +25,16 @@ interface quickcommandApi { * console.log(`输入的内容分别为${values}`) * }) * - * quickcommand.showInputBox({labels:["输入框标签"],values:["默认值"],hints:["输入框提示"]}).then(values => { + * quickcommand.showInputBox([{label:"输入框标签",value:"默认值",hint:"输入框提示"},{label:"输入框标签2",value:"默认值2",hint:"输入框提示2"}]).then(values => { * console.log(`输入的内容分别为${values}`) * }) * ``` * - * - * - * @param options 数组时,为每一个输入框的标签名;对象时,为每一个输入框的属性 + * @param options 数组,如果元素为字符串,则作为输入框的标签名;如果元素为对象,则作为输入框的属性,包含label、value、hint三个属性 * @param title 窗口标题,默认为空 */ showInputBox( - options: string[] | { labels: string[]; values: string[]; hints: string[] }, + options: string[] | { labels: string; values: string; hints: string }[], title?: string ): Promise;