@tuoyuan/module-page-select 1.0.7 → 1.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/module-page-select.common.js +104 -43
- package/dist/module-page-select.common.js.map +1 -1
- package/dist/module-page-select.umd.js +104 -43
- package/dist/module-page-select.umd.js.map +1 -1
- package/dist/module-page-select.umd.min.js +1 -1
- package/dist/module-page-select.umd.min.js.map +1 -1
- package/package.json +1 -1
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
return /******/ (function() { // webpackBootstrap
|
|
12
12
|
/******/ var __webpack_modules__ = ({
|
|
13
13
|
|
|
14
|
-
/***/
|
|
14
|
+
/***/ 1584:
|
|
15
15
|
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
|
16
16
|
|
|
17
17
|
"use strict";
|
|
@@ -25,7 +25,7 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
25
25
|
|
|
26
26
|
var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));
|
|
27
27
|
// Module
|
|
28
|
-
___CSS_LOADER_EXPORT___.push([module.id, ".module-page-select[data-v-
|
|
28
|
+
___CSS_LOADER_EXPORT___.push([module.id, ".module-page-select[data-v-cfb98662]{width:100%}.selection-preview[data-v-cfb98662]{margin-top:8px;padding:8px 12px;background:#f0f9ff;border:1px solid #91d5ff;border-radius:4px;font-size:13px}.preview-label[data-v-cfb98662]{color:#666;font-size:12px;margin-bottom:4px}.preview-value[data-v-cfb98662]{color:#1890ff;font-weight:500}.config-form[data-v-cfb98662]{margin-top:16px}", ""]);
|
|
29
29
|
// Exports
|
|
30
30
|
/* harmony default export */ __webpack_exports__["default"] = (___CSS_LOADER_EXPORT___);
|
|
31
31
|
|
|
@@ -158,19 +158,19 @@ exports.A = (sfc, props) => {
|
|
|
158
158
|
|
|
159
159
|
/***/ }),
|
|
160
160
|
|
|
161
|
-
/***/
|
|
161
|
+
/***/ 9415:
|
|
162
162
|
/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
|
|
163
163
|
|
|
164
164
|
// style-loader: Adds some css to the DOM by adding a <style> tag
|
|
165
165
|
|
|
166
166
|
// load the styles
|
|
167
|
-
var content = __webpack_require__(
|
|
167
|
+
var content = __webpack_require__(1584);
|
|
168
168
|
if(content.__esModule) content = content.default;
|
|
169
169
|
if(typeof content === 'string') content = [[module.id, content, '']];
|
|
170
170
|
if(content.locals) module.exports = content.locals;
|
|
171
171
|
// add the styles to the DOM
|
|
172
172
|
var add = (__webpack_require__(258)/* ["default"] */ .A)
|
|
173
|
-
var update = add("
|
|
173
|
+
var update = add("64ab8b95", content, true, {"sourceMap":false,"shadowMode":false});
|
|
174
174
|
|
|
175
175
|
/***/ }),
|
|
176
176
|
|
|
@@ -3567,7 +3567,7 @@ if (typeof window !== 'undefined') {
|
|
|
3567
3567
|
|
|
3568
3568
|
// EXTERNAL MODULE: external {"commonjs":"vue","commonjs2":"vue","root":"Vue"}
|
|
3569
3569
|
var external_commonjs_vue_commonjs2_vue_root_Vue_ = __webpack_require__(9274);
|
|
3570
|
-
;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-82.use[1]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/ModulePageSelect.vue?vue&type=template&id=
|
|
3570
|
+
;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-82.use[1]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/ModulePageSelect.vue?vue&type=template&id=cfb98662&scoped=true
|
|
3571
3571
|
|
|
3572
3572
|
const _hoisted_1 = {
|
|
3573
3573
|
class: "module-page-select"
|
|
@@ -3661,31 +3661,31 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
3661
3661
|
}, {
|
|
3662
3662
|
default: (0,external_commonjs_vue_commonjs2_vue_root_Vue_.withCtx)(() => [field.type === 'text' ? ((0,external_commonjs_vue_commonjs2_vue_root_Vue_.openBlock)(), (0,external_commonjs_vue_commonjs2_vue_root_Vue_.createBlock)(_component_a_input, {
|
|
3663
3663
|
key: 0,
|
|
3664
|
-
|
|
3665
|
-
|
|
3666
|
-
|
|
3667
|
-
}, null, 8, ["
|
|
3664
|
+
"model-value": $options.getNestedValue(key, field),
|
|
3665
|
+
placeholder: field.placeholder || '',
|
|
3666
|
+
"onUpdate:modelValue": val => $options.setNestedValue(key, field, val)
|
|
3667
|
+
}, null, 8, ["model-value", "placeholder", "onUpdate:modelValue"])) : field.type === 'number' ? ((0,external_commonjs_vue_commonjs2_vue_root_Vue_.openBlock)(), (0,external_commonjs_vue_commonjs2_vue_root_Vue_.createBlock)(_component_a_input_number, {
|
|
3668
3668
|
key: 1,
|
|
3669
|
-
|
|
3670
|
-
"onUpdate:modelValue": $event => $data.formData[key] = $event,
|
|
3669
|
+
"model-value": $options.getNestedValue(key, field),
|
|
3671
3670
|
placeholder: field.placeholder || '',
|
|
3672
3671
|
style: {
|
|
3673
3672
|
"width": "100%"
|
|
3674
|
-
}
|
|
3675
|
-
|
|
3673
|
+
},
|
|
3674
|
+
"onUpdate:modelValue": val => $options.setNestedValue(key, field, val)
|
|
3675
|
+
}, null, 8, ["model-value", "placeholder", "onUpdate:modelValue"])) : field.type === 'textarea' ? ((0,external_commonjs_vue_commonjs2_vue_root_Vue_.openBlock)(), (0,external_commonjs_vue_commonjs2_vue_root_Vue_.createBlock)(_component_a_textarea, {
|
|
3676
3676
|
key: 2,
|
|
3677
|
-
|
|
3678
|
-
"onUpdate:modelValue": $event => $data.formData[key] = $event,
|
|
3677
|
+
"model-value": $options.getNestedValue(key, field),
|
|
3679
3678
|
placeholder: field.placeholder || '',
|
|
3680
3679
|
"auto-size": {
|
|
3681
3680
|
minRows: 3,
|
|
3682
3681
|
maxRows: 6
|
|
3683
|
-
}
|
|
3684
|
-
|
|
3682
|
+
},
|
|
3683
|
+
"onUpdate:modelValue": val => $options.setNestedValue(key, field, val)
|
|
3684
|
+
}, null, 8, ["model-value", "placeholder", "onUpdate:modelValue"])) : field.type === 'select' ? ((0,external_commonjs_vue_commonjs2_vue_root_Vue_.openBlock)(), (0,external_commonjs_vue_commonjs2_vue_root_Vue_.createBlock)(_component_a_select, {
|
|
3685
3685
|
key: 3,
|
|
3686
|
-
|
|
3687
|
-
|
|
3688
|
-
|
|
3686
|
+
"model-value": $options.getNestedValue(key, field),
|
|
3687
|
+
placeholder: "请选择",
|
|
3688
|
+
"onUpdate:modelValue": val => $options.setNestedValue(key, field, val)
|
|
3689
3689
|
}, {
|
|
3690
3690
|
default: (0,external_commonjs_vue_commonjs2_vue_root_Vue_.withCtx)(() => [((0,external_commonjs_vue_commonjs2_vue_root_Vue_.openBlock)(true), (0,external_commonjs_vue_commonjs2_vue_root_Vue_.createElementBlock)(external_commonjs_vue_commonjs2_vue_root_Vue_.Fragment, null, (0,external_commonjs_vue_commonjs2_vue_root_Vue_.renderList)(field.options, option => {
|
|
3691
3691
|
return (0,external_commonjs_vue_commonjs2_vue_root_Vue_.openBlock)(), (0,external_commonjs_vue_commonjs2_vue_root_Vue_.createBlock)(_component_a_option, {
|
|
@@ -3698,7 +3698,7 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
3698
3698
|
}, 1032, ["value", "label"]);
|
|
3699
3699
|
}), 128))]),
|
|
3700
3700
|
_: 2
|
|
3701
|
-
}, 1032, ["
|
|
3701
|
+
}, 1032, ["model-value", "onUpdate:modelValue"])) : (0,external_commonjs_vue_commonjs2_vue_root_Vue_.createCommentVNode)("", true)]),
|
|
3702
3702
|
_: 2
|
|
3703
3703
|
}, 1032, ["label", "field"]);
|
|
3704
3704
|
}), 128))], 64)) : (0,external_commonjs_vue_commonjs2_vue_root_Vue_.createCommentVNode)("", true), $data.showConfirmButton ? ((0,external_commonjs_vue_commonjs2_vue_root_Vue_.openBlock)(), (0,external_commonjs_vue_commonjs2_vue_root_Vue_.createBlock)(_component_a_button, {
|
|
@@ -3718,7 +3718,7 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
3718
3718
|
_: 1
|
|
3719
3719
|
})]);
|
|
3720
3720
|
}
|
|
3721
|
-
;// ./src/components/ModulePageSelect.vue?vue&type=template&id=
|
|
3721
|
+
;// ./src/components/ModulePageSelect.vue?vue&type=template&id=cfb98662&scoped=true
|
|
3722
3722
|
|
|
3723
3723
|
// EXTERNAL MODULE: ./node_modules/core-js/modules/es.iterator.constructor.js
|
|
3724
3724
|
var es_iterator_constructor = __webpack_require__(8111);
|
|
@@ -4093,11 +4093,9 @@ var gateway_request_lib_root_GatewayRequestLib_ = __webpack_require__(3092);
|
|
|
4093
4093
|
if (page.options && typeof page.options === 'object' && Object.keys(page.options).length > 0) {
|
|
4094
4094
|
this.configFields = this.parseConfigSchema(page.options);
|
|
4095
4095
|
this.showConfigForm = true;
|
|
4096
|
-
//
|
|
4096
|
+
// 如果有已有的配置数据,加载它(支持嵌套结构)
|
|
4097
4097
|
if (this.modelValue?.config) {
|
|
4098
|
-
this.formData =
|
|
4099
|
-
...this.modelValue.config
|
|
4100
|
-
};
|
|
4098
|
+
this.formData = this.deepClone(this.modelValue.config);
|
|
4101
4099
|
} else {
|
|
4102
4100
|
// 初始化表单数据为默认值
|
|
4103
4101
|
this.initFormData();
|
|
@@ -4108,22 +4106,74 @@ var gateway_request_lib_root_GatewayRequestLib_ = __webpack_require__(3092);
|
|
|
4108
4106
|
this.formData = {};
|
|
4109
4107
|
}
|
|
4110
4108
|
},
|
|
4111
|
-
//
|
|
4109
|
+
// 深拷贝对象
|
|
4110
|
+
deepClone(obj) {
|
|
4111
|
+
if (obj === null || typeof obj !== 'object') return obj;
|
|
4112
|
+
if (Array.isArray(obj)) return obj.map(item => this.deepClone(item));
|
|
4113
|
+
const cloned = {};
|
|
4114
|
+
Object.keys(obj).forEach(key => {
|
|
4115
|
+
cloned[key] = this.deepClone(obj[key]);
|
|
4116
|
+
});
|
|
4117
|
+
return cloned;
|
|
4118
|
+
},
|
|
4119
|
+
// 获取嵌套字段的值
|
|
4120
|
+
getNestedValue(key, field) {
|
|
4121
|
+
if (field.parentKey && field.subKey) {
|
|
4122
|
+
return this.formData[field.parentKey]?.[field.subKey] ?? '';
|
|
4123
|
+
}
|
|
4124
|
+
return this.formData[key] ?? '';
|
|
4125
|
+
},
|
|
4126
|
+
// 设置嵌套字段的值(Vue 3 直接赋值即可响应)
|
|
4127
|
+
setNestedValue(key, field, value) {
|
|
4128
|
+
if (field.parentKey && field.subKey) {
|
|
4129
|
+
if (!this.formData[field.parentKey]) {
|
|
4130
|
+
this.formData[field.parentKey] = {};
|
|
4131
|
+
}
|
|
4132
|
+
this.formData[field.parentKey][field.subKey] = value;
|
|
4133
|
+
} else {
|
|
4134
|
+
this.formData[key] = value;
|
|
4135
|
+
}
|
|
4136
|
+
},
|
|
4137
|
+
// 解析配置 schema(基于 JSON Schema)- 支持嵌套的 object 类型
|
|
4112
4138
|
parseConfigSchema(schema) {
|
|
4113
4139
|
const fields = {};
|
|
4114
4140
|
if (schema.properties) {
|
|
4115
4141
|
Object.keys(schema.properties).forEach(key => {
|
|
4116
4142
|
const prop = schema.properties[key];
|
|
4117
|
-
|
|
4118
|
-
|
|
4119
|
-
|
|
4120
|
-
|
|
4121
|
-
|
|
4122
|
-
|
|
4123
|
-
|
|
4124
|
-
|
|
4125
|
-
|
|
4126
|
-
|
|
4143
|
+
|
|
4144
|
+
// 如果是嵌套的 object 类型,递归解析其子字段
|
|
4145
|
+
if (prop.type === 'object' && prop.properties) {
|
|
4146
|
+
Object.keys(prop.properties).forEach(subKey => {
|
|
4147
|
+
const subProp = prop.properties[subKey];
|
|
4148
|
+
// 使用 "parentKey.subKey" 作为表单字段的 key
|
|
4149
|
+
const fieldKey = `${key}.${subKey}`;
|
|
4150
|
+
fields[fieldKey] = {
|
|
4151
|
+
label: subProp.title || subKey,
|
|
4152
|
+
type: this.mapSchemaType(subProp.type),
|
|
4153
|
+
placeholder: subProp.description || '',
|
|
4154
|
+
options: subProp.enum ? subProp.enum.map((v, i) => ({
|
|
4155
|
+
label: subProp.enumDescriptions?.[i] || v,
|
|
4156
|
+
value: v
|
|
4157
|
+
})) : null,
|
|
4158
|
+
default: subProp.default,
|
|
4159
|
+
parentKey: key,
|
|
4160
|
+
// 记录父字段名,用于保存数据时重建嵌套结构
|
|
4161
|
+
subKey: subKey
|
|
4162
|
+
};
|
|
4163
|
+
});
|
|
4164
|
+
} else {
|
|
4165
|
+
// 非 object 类型,直接解析
|
|
4166
|
+
fields[key] = {
|
|
4167
|
+
label: prop.title || key,
|
|
4168
|
+
type: this.mapSchemaType(prop.type),
|
|
4169
|
+
placeholder: prop.description || '',
|
|
4170
|
+
options: prop.enum ? prop.enum.map((v, i) => ({
|
|
4171
|
+
label: prop.enumDescriptions?.[i] || v,
|
|
4172
|
+
value: v
|
|
4173
|
+
})) : null,
|
|
4174
|
+
default: prop.default
|
|
4175
|
+
};
|
|
4176
|
+
}
|
|
4127
4177
|
});
|
|
4128
4178
|
}
|
|
4129
4179
|
return fields;
|
|
@@ -4142,7 +4192,18 @@ var gateway_request_lib_root_GatewayRequestLib_ = __webpack_require__(3092);
|
|
|
4142
4192
|
initFormData() {
|
|
4143
4193
|
const data = {};
|
|
4144
4194
|
Object.keys(this.configFields).forEach(key => {
|
|
4145
|
-
|
|
4195
|
+
const field = this.configFields[key];
|
|
4196
|
+
const defaultValue = field.default !== undefined ? field.default : '';
|
|
4197
|
+
|
|
4198
|
+
// 如果是嵌套字段(有 parentKey),需要构建嵌套结构
|
|
4199
|
+
if (field.parentKey && field.subKey) {
|
|
4200
|
+
if (!data[field.parentKey]) {
|
|
4201
|
+
data[field.parentKey] = {};
|
|
4202
|
+
}
|
|
4203
|
+
data[field.parentKey][field.subKey] = defaultValue;
|
|
4204
|
+
} else {
|
|
4205
|
+
data[key] = defaultValue;
|
|
4206
|
+
}
|
|
4146
4207
|
});
|
|
4147
4208
|
this.formData = data;
|
|
4148
4209
|
},
|
|
@@ -4186,9 +4247,9 @@ var gateway_request_lib_root_GatewayRequestLib_ = __webpack_require__(3092);
|
|
|
4186
4247
|
});
|
|
4187
4248
|
;// ./src/components/ModulePageSelect.vue?vue&type=script&lang=js
|
|
4188
4249
|
|
|
4189
|
-
// EXTERNAL MODULE: ./node_modules/vue-style-loader/index.js??clonedRuleSet-54.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-54.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-54.use[2]!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-54.use[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/ModulePageSelect.vue?vue&type=style&index=0&id=
|
|
4190
|
-
var
|
|
4191
|
-
;// ./src/components/ModulePageSelect.vue?vue&type=style&index=0&id=
|
|
4250
|
+
// EXTERNAL MODULE: ./node_modules/vue-style-loader/index.js??clonedRuleSet-54.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-54.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-54.use[2]!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-54.use[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/ModulePageSelect.vue?vue&type=style&index=0&id=cfb98662&scoped=true&lang=css
|
|
4251
|
+
var ModulePageSelectvue_type_style_index_0_id_cfb98662_scoped_true_lang_css = __webpack_require__(9415);
|
|
4252
|
+
;// ./src/components/ModulePageSelect.vue?vue&type=style&index=0&id=cfb98662&scoped=true&lang=css
|
|
4192
4253
|
|
|
4193
4254
|
// EXTERNAL MODULE: ./node_modules/vue-loader/dist/exportHelper.js
|
|
4194
4255
|
var exportHelper = __webpack_require__(5907);
|
|
@@ -4200,7 +4261,7 @@ var exportHelper = __webpack_require__(5907);
|
|
|
4200
4261
|
;
|
|
4201
4262
|
|
|
4202
4263
|
|
|
4203
|
-
const __exports__ = /*#__PURE__*/(0,exportHelper/* default */.A)(ModulePageSelectvue_type_script_lang_js, [['render',render],['__scopeId',"data-v-
|
|
4264
|
+
const __exports__ = /*#__PURE__*/(0,exportHelper/* default */.A)(ModulePageSelectvue_type_script_lang_js, [['render',render],['__scopeId',"data-v-cfb98662"]])
|
|
4204
4265
|
|
|
4205
4266
|
/* harmony default export */ var ModulePageSelect = (__exports__);
|
|
4206
4267
|
;// ./src/index.js
|