@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.
@@ -11,7 +11,7 @@
11
11
  return /******/ (function() { // webpackBootstrap
12
12
  /******/ var __webpack_modules__ = ({
13
13
 
14
- /***/ 3081:
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-0b2fc41a]{width:100%}.selection-preview[data-v-0b2fc41a]{margin-top:8px;padding:8px 12px;background:#f0f9ff;border:1px solid #91d5ff;border-radius:4px;font-size:13px}.preview-label[data-v-0b2fc41a]{color:#666;font-size:12px;margin-bottom:4px}.preview-value[data-v-0b2fc41a]{color:#1890ff;font-weight:500}.config-form[data-v-0b2fc41a]{margin-top:16px}", ""]);
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
- /***/ 7650:
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__(3081);
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("43b2dec2", content, true, {"sourceMap":false,"shadowMode":false});
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=0b2fc41a&scoped=true
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
- modelValue: $data.formData[key],
3665
- "onUpdate:modelValue": $event => $data.formData[key] = $event,
3666
- placeholder: field.placeholder || ''
3667
- }, null, 8, ["modelValue", "onUpdate:modelValue", "placeholder"])) : 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, {
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
- modelValue: $data.formData[key],
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
- }, null, 8, ["modelValue", "onUpdate:modelValue", "placeholder"])) : field.type === 'textarea' ? ((0,external_commonjs_vue_commonjs2_vue_root_Vue_.openBlock)(), (0,external_commonjs_vue_commonjs2_vue_root_Vue_.createBlock)(_component_a_textarea, {
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
- modelValue: $data.formData[key],
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
- }, null, 8, ["modelValue", "onUpdate:modelValue", "placeholder"])) : field.type === 'select' ? ((0,external_commonjs_vue_commonjs2_vue_root_Vue_.openBlock)(), (0,external_commonjs_vue_commonjs2_vue_root_Vue_.createBlock)(_component_a_select, {
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
- modelValue: $data.formData[key],
3687
- "onUpdate:modelValue": $event => $data.formData[key] = $event,
3688
- placeholder: "请选择"
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, ["modelValue", "onUpdate:modelValue"])) : (0,external_commonjs_vue_commonjs2_vue_root_Vue_.createCommentVNode)("", true)]),
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=0b2fc41a&scoped=true
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
- // 解析配置 schema(基于 JSON Schema)
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
- fields[key] = {
4118
- label: prop.title || key,
4119
- type: this.mapSchemaType(prop.type),
4120
- placeholder: prop.description || '',
4121
- options: prop.enum ? prop.enum.map((v, i) => ({
4122
- label: prop.enumDescriptions?.[i] || v,
4123
- value: v
4124
- })) : null,
4125
- default: prop.default
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
- data[key] = this.configFields[key].default !== undefined ? this.configFields[key].default : '';
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=0b2fc41a&scoped=true&lang=css
4190
- var ModulePageSelectvue_type_style_index_0_id_0b2fc41a_scoped_true_lang_css = __webpack_require__(7650);
4191
- ;// ./src/components/ModulePageSelect.vue?vue&type=style&index=0&id=0b2fc41a&scoped=true&lang=css
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-0b2fc41a"]])
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