@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.
@@ -1,7 +1,7 @@
1
1
  /******/ (function() { // webpackBootstrap
2
2
  /******/ var __webpack_modules__ = ({
3
3
 
4
- /***/ 8451:
4
+ /***/ 4922:
5
5
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
6
6
 
7
7
  "use strict";
@@ -15,7 +15,7 @@ __webpack_require__.r(__webpack_exports__);
15
15
 
16
16
  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()));
17
17
  // Module
18
- ___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}", ""]);
18
+ ___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}", ""]);
19
19
  // Exports
20
20
  /* harmony default export */ __webpack_exports__["default"] = (___CSS_LOADER_EXPORT___);
21
21
 
@@ -148,19 +148,19 @@ exports.A = (sfc, props) => {
148
148
 
149
149
  /***/ }),
150
150
 
151
- /***/ 4986:
151
+ /***/ 7871:
152
152
  /***/ (function(module, __unused_webpack_exports, __webpack_require__) {
153
153
 
154
154
  // style-loader: Adds some css to the DOM by adding a <style> tag
155
155
 
156
156
  // load the styles
157
- var content = __webpack_require__(8451);
157
+ var content = __webpack_require__(4922);
158
158
  if(content.__esModule) content = content.default;
159
159
  if(typeof content === 'string') content = [[module.id, content, '']];
160
160
  if(content.locals) module.exports = content.locals;
161
161
  // add the styles to the DOM
162
162
  var add = (__webpack_require__(8459)/* ["default"] */ .A)
163
- var update = add("b7267380", content, true, {"sourceMap":false,"shadowMode":false});
163
+ var update = add("753519da", content, true, {"sourceMap":false,"shadowMode":false});
164
164
 
165
165
  /***/ }),
166
166
 
@@ -3541,7 +3541,7 @@ if (typeof window !== 'undefined') {
3541
3541
 
3542
3542
  ;// external {"commonjs":"vue","commonjs2":"vue","root":"Vue"}
3543
3543
  var external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject = require("vue");
3544
- ;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.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
3544
+ ;// ./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.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
3545
3545
 
3546
3546
  const _hoisted_1 = {
3547
3547
  class: "module-page-select"
@@ -3635,31 +3635,31 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
3635
3635
  }, {
3636
3636
  default: (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.withCtx)(() => [field.type === 'text' ? ((0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.openBlock)(), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createBlock)(_component_a_input, {
3637
3637
  key: 0,
3638
- modelValue: $data.formData[key],
3639
- "onUpdate:modelValue": $event => $data.formData[key] = $event,
3640
- placeholder: field.placeholder || ''
3641
- }, null, 8, ["modelValue", "onUpdate:modelValue", "placeholder"])) : field.type === 'number' ? ((0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.openBlock)(), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createBlock)(_component_a_input_number, {
3638
+ "model-value": $options.getNestedValue(key, field),
3639
+ placeholder: field.placeholder || '',
3640
+ "onUpdate:modelValue": val => $options.setNestedValue(key, field, val)
3641
+ }, null, 8, ["model-value", "placeholder", "onUpdate:modelValue"])) : field.type === 'number' ? ((0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.openBlock)(), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createBlock)(_component_a_input_number, {
3642
3642
  key: 1,
3643
- modelValue: $data.formData[key],
3644
- "onUpdate:modelValue": $event => $data.formData[key] = $event,
3643
+ "model-value": $options.getNestedValue(key, field),
3645
3644
  placeholder: field.placeholder || '',
3646
3645
  style: {
3647
3646
  "width": "100%"
3648
- }
3649
- }, null, 8, ["modelValue", "onUpdate:modelValue", "placeholder"])) : field.type === 'textarea' ? ((0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.openBlock)(), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createBlock)(_component_a_textarea, {
3647
+ },
3648
+ "onUpdate:modelValue": val => $options.setNestedValue(key, field, val)
3649
+ }, null, 8, ["model-value", "placeholder", "onUpdate:modelValue"])) : field.type === 'textarea' ? ((0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.openBlock)(), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createBlock)(_component_a_textarea, {
3650
3650
  key: 2,
3651
- modelValue: $data.formData[key],
3652
- "onUpdate:modelValue": $event => $data.formData[key] = $event,
3651
+ "model-value": $options.getNestedValue(key, field),
3653
3652
  placeholder: field.placeholder || '',
3654
3653
  "auto-size": {
3655
3654
  minRows: 3,
3656
3655
  maxRows: 6
3657
- }
3658
- }, null, 8, ["modelValue", "onUpdate:modelValue", "placeholder"])) : field.type === 'select' ? ((0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.openBlock)(), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createBlock)(_component_a_select, {
3656
+ },
3657
+ "onUpdate:modelValue": val => $options.setNestedValue(key, field, val)
3658
+ }, null, 8, ["model-value", "placeholder", "onUpdate:modelValue"])) : field.type === 'select' ? ((0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.openBlock)(), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createBlock)(_component_a_select, {
3659
3659
  key: 3,
3660
- modelValue: $data.formData[key],
3661
- "onUpdate:modelValue": $event => $data.formData[key] = $event,
3662
- placeholder: "请选择"
3660
+ "model-value": $options.getNestedValue(key, field),
3661
+ placeholder: "请选择",
3662
+ "onUpdate:modelValue": val => $options.setNestedValue(key, field, val)
3663
3663
  }, {
3664
3664
  default: (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.withCtx)(() => [((0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.openBlock)(true), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createElementBlock)(external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.Fragment, null, (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.renderList)(field.options, option => {
3665
3665
  return (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.openBlock)(), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createBlock)(_component_a_option, {
@@ -3672,7 +3672,7 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
3672
3672
  }, 1032, ["value", "label"]);
3673
3673
  }), 128))]),
3674
3674
  _: 2
3675
- }, 1032, ["modelValue", "onUpdate:modelValue"])) : (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createCommentVNode)("", true)]),
3675
+ }, 1032, ["model-value", "onUpdate:modelValue"])) : (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createCommentVNode)("", true)]),
3676
3676
  _: 2
3677
3677
  }, 1032, ["label", "field"]);
3678
3678
  }), 128))], 64)) : (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createCommentVNode)("", true), $data.showConfirmButton ? ((0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.openBlock)(), (0,external_commonjs_vue_commonjs2_vue_root_Vue_namespaceObject.createBlock)(_component_a_button, {
@@ -3692,7 +3692,7 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
3692
3692
  _: 1
3693
3693
  })]);
3694
3694
  }
3695
- ;// ./src/components/ModulePageSelect.vue?vue&type=template&id=0b2fc41a&scoped=true
3695
+ ;// ./src/components/ModulePageSelect.vue?vue&type=template&id=cfb98662&scoped=true
3696
3696
 
3697
3697
  // EXTERNAL MODULE: ./node_modules/core-js/modules/es.iterator.constructor.js
3698
3698
  var es_iterator_constructor = __webpack_require__(8111);
@@ -4067,11 +4067,9 @@ var gateway_request_lib_root_GatewayRequestLib_namespaceObject = require("@tuoyu
4067
4067
  if (page.options && typeof page.options === 'object' && Object.keys(page.options).length > 0) {
4068
4068
  this.configFields = this.parseConfigSchema(page.options);
4069
4069
  this.showConfigForm = true;
4070
- // 如果有已有的配置数据,加载它
4070
+ // 如果有已有的配置数据,加载它(支持嵌套结构)
4071
4071
  if (this.modelValue?.config) {
4072
- this.formData = {
4073
- ...this.modelValue.config
4074
- };
4072
+ this.formData = this.deepClone(this.modelValue.config);
4075
4073
  } else {
4076
4074
  // 初始化表单数据为默认值
4077
4075
  this.initFormData();
@@ -4082,22 +4080,74 @@ var gateway_request_lib_root_GatewayRequestLib_namespaceObject = require("@tuoyu
4082
4080
  this.formData = {};
4083
4081
  }
4084
4082
  },
4085
- // 解析配置 schema(基于 JSON Schema)
4083
+ // 深拷贝对象
4084
+ deepClone(obj) {
4085
+ if (obj === null || typeof obj !== 'object') return obj;
4086
+ if (Array.isArray(obj)) return obj.map(item => this.deepClone(item));
4087
+ const cloned = {};
4088
+ Object.keys(obj).forEach(key => {
4089
+ cloned[key] = this.deepClone(obj[key]);
4090
+ });
4091
+ return cloned;
4092
+ },
4093
+ // 获取嵌套字段的值
4094
+ getNestedValue(key, field) {
4095
+ if (field.parentKey && field.subKey) {
4096
+ return this.formData[field.parentKey]?.[field.subKey] ?? '';
4097
+ }
4098
+ return this.formData[key] ?? '';
4099
+ },
4100
+ // 设置嵌套字段的值(Vue 3 直接赋值即可响应)
4101
+ setNestedValue(key, field, value) {
4102
+ if (field.parentKey && field.subKey) {
4103
+ if (!this.formData[field.parentKey]) {
4104
+ this.formData[field.parentKey] = {};
4105
+ }
4106
+ this.formData[field.parentKey][field.subKey] = value;
4107
+ } else {
4108
+ this.formData[key] = value;
4109
+ }
4110
+ },
4111
+ // 解析配置 schema(基于 JSON Schema)- 支持嵌套的 object 类型
4086
4112
  parseConfigSchema(schema) {
4087
4113
  const fields = {};
4088
4114
  if (schema.properties) {
4089
4115
  Object.keys(schema.properties).forEach(key => {
4090
4116
  const prop = schema.properties[key];
4091
- fields[key] = {
4092
- label: prop.title || key,
4093
- type: this.mapSchemaType(prop.type),
4094
- placeholder: prop.description || '',
4095
- options: prop.enum ? prop.enum.map((v, i) => ({
4096
- label: prop.enumDescriptions?.[i] || v,
4097
- value: v
4098
- })) : null,
4099
- default: prop.default
4100
- };
4117
+
4118
+ // 如果是嵌套的 object 类型,递归解析其子字段
4119
+ if (prop.type === 'object' && prop.properties) {
4120
+ Object.keys(prop.properties).forEach(subKey => {
4121
+ const subProp = prop.properties[subKey];
4122
+ // 使用 "parentKey.subKey" 作为表单字段的 key
4123
+ const fieldKey = `${key}.${subKey}`;
4124
+ fields[fieldKey] = {
4125
+ label: subProp.title || subKey,
4126
+ type: this.mapSchemaType(subProp.type),
4127
+ placeholder: subProp.description || '',
4128
+ options: subProp.enum ? subProp.enum.map((v, i) => ({
4129
+ label: subProp.enumDescriptions?.[i] || v,
4130
+ value: v
4131
+ })) : null,
4132
+ default: subProp.default,
4133
+ parentKey: key,
4134
+ // 记录父字段名,用于保存数据时重建嵌套结构
4135
+ subKey: subKey
4136
+ };
4137
+ });
4138
+ } else {
4139
+ // 非 object 类型,直接解析
4140
+ fields[key] = {
4141
+ label: prop.title || key,
4142
+ type: this.mapSchemaType(prop.type),
4143
+ placeholder: prop.description || '',
4144
+ options: prop.enum ? prop.enum.map((v, i) => ({
4145
+ label: prop.enumDescriptions?.[i] || v,
4146
+ value: v
4147
+ })) : null,
4148
+ default: prop.default
4149
+ };
4150
+ }
4101
4151
  });
4102
4152
  }
4103
4153
  return fields;
@@ -4116,7 +4166,18 @@ var gateway_request_lib_root_GatewayRequestLib_namespaceObject = require("@tuoyu
4116
4166
  initFormData() {
4117
4167
  const data = {};
4118
4168
  Object.keys(this.configFields).forEach(key => {
4119
- data[key] = this.configFields[key].default !== undefined ? this.configFields[key].default : '';
4169
+ const field = this.configFields[key];
4170
+ const defaultValue = field.default !== undefined ? field.default : '';
4171
+
4172
+ // 如果是嵌套字段(有 parentKey),需要构建嵌套结构
4173
+ if (field.parentKey && field.subKey) {
4174
+ if (!data[field.parentKey]) {
4175
+ data[field.parentKey] = {};
4176
+ }
4177
+ data[field.parentKey][field.subKey] = defaultValue;
4178
+ } else {
4179
+ data[key] = defaultValue;
4180
+ }
4120
4181
  });
4121
4182
  this.formData = data;
4122
4183
  },
@@ -4160,9 +4221,9 @@ var gateway_request_lib_root_GatewayRequestLib_namespaceObject = require("@tuoyu
4160
4221
  });
4161
4222
  ;// ./src/components/ModulePageSelect.vue?vue&type=script&lang=js
4162
4223
 
4163
- // EXTERNAL MODULE: ./node_modules/vue-style-loader/index.js??clonedRuleSet-12.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.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
4164
- var ModulePageSelectvue_type_style_index_0_id_0b2fc41a_scoped_true_lang_css = __webpack_require__(4986);
4165
- ;// ./src/components/ModulePageSelect.vue?vue&type=style&index=0&id=0b2fc41a&scoped=true&lang=css
4224
+ // EXTERNAL MODULE: ./node_modules/vue-style-loader/index.js??clonedRuleSet-12.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.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
4225
+ var ModulePageSelectvue_type_style_index_0_id_cfb98662_scoped_true_lang_css = __webpack_require__(7871);
4226
+ ;// ./src/components/ModulePageSelect.vue?vue&type=style&index=0&id=cfb98662&scoped=true&lang=css
4166
4227
 
4167
4228
  // EXTERNAL MODULE: ./node_modules/vue-loader/dist/exportHelper.js
4168
4229
  var exportHelper = __webpack_require__(1241);
@@ -4174,7 +4235,7 @@ var exportHelper = __webpack_require__(1241);
4174
4235
  ;
4175
4236
 
4176
4237
 
4177
- const __exports__ = /*#__PURE__*/(0,exportHelper/* default */.A)(ModulePageSelectvue_type_script_lang_js, [['render',render],['__scopeId',"data-v-0b2fc41a"]])
4238
+ const __exports__ = /*#__PURE__*/(0,exportHelper/* default */.A)(ModulePageSelectvue_type_script_lang_js, [['render',render],['__scopeId',"data-v-cfb98662"]])
4178
4239
 
4179
4240
  /* harmony default export */ var ModulePageSelect = (__exports__);
4180
4241
  ;// ./src/index.js