@leevan/jtui 2.0.54 → 2.0.55

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@leevan/jtui",
3
- "version": "2.0.54",
3
+ "version": "2.0.55",
4
4
  "scripts": {
5
5
  "serve": "vue-cli-service serve",
6
6
  "build": "vue-cli-service build",
@@ -59,9 +59,9 @@
59
59
  </div>
60
60
  <EditInput
61
61
  v-else-if="item && item.edit && item.edit.name == '$input'"
62
- :value="row[subSubItem.prop]"
63
- @input="(val) => handleInputChange(val, row, subSubItem.prop)"
62
+ v-model="row[subSubItem.prop]"
64
63
  :type="(item.edit.props && item.edit.props.type) || 'text'"
64
+ @input="(val) => handleInputChange(val, row, subSubItem.prop)"
65
65
  />
66
66
  </template>
67
67
  </vxe-table-column>
@@ -111,9 +111,9 @@
111
111
  </div>
112
112
  <EditInput
113
113
  v-else-if="item && item.edit && item.edit.name == '$input'"
114
- :value="row[subItem.prop]"
115
- @input="(val) => handleInputChange(val, row, subItem.prop)"
114
+ v-model="row[subItem.prop]"
116
115
  :type="(item.edit.props && item.edit.props.type) || 'text'"
116
+ @input="(val) => handleInputChange(val, row, subItem.prop)"
117
117
  />
118
118
  </template>
119
119
  </vxe-table-column>
@@ -164,9 +164,9 @@
164
164
  </div>
165
165
  <EditInput
166
166
  v-else-if="item && item.edit && item.edit.name == '$input'"
167
- :value="row[item.prop]"
168
- @input="(val) => handleInputChange(val, row, item.prop)"
167
+ v-model="row[item.prop]"
169
168
  :type="(item.edit.props && item.edit.props.type) || 'text'"
169
+ @input="(val) => handleInputChange(val, row, item.prop)"
170
170
  />
171
171
  </template>
172
172
  </vxe-table-column>
@@ -181,7 +181,7 @@ export default {
181
181
  components: {
182
182
  EditInput
183
183
  },
184
-
184
+
185
185
  data() {
186
186
  return {
187
187
  isOpen: false,
@@ -226,7 +226,7 @@ export default {
226
226
  default: 0
227
227
  }
228
228
  },
229
-
229
+
230
230
  methods: {
231
231
  findVxeTable() {
232
232
  // 向上查找vxe-table实例
@@ -262,11 +262,8 @@ export default {
262
262
  return findItem ? findItem.label : (value || '请选择');
263
263
  },
264
264
  handleInputChange(val, row, prop) {
265
- if (!(prop in row)) {
266
- this.$set(row, prop, val);
267
- } else {
268
- row[prop] = val;
269
- }
265
+ // 这个方法现在主要是为了保持接口兼容性
266
+ // 实际的值更新由 v-model 处理
270
267
  },
271
268
  toggleDropdown() {
272
269
  this.isOpen = !this.isOpen;
@@ -417,4 +414,4 @@ export default {
417
414
  width: 100%;
418
415
  }
419
416
  }
420
- </style>
417
+ </style>
@@ -975,6 +975,7 @@ export default {
975
975
  setTimeout(() => {
976
976
  const temp = this.$refs[this.id].getTableData()
977
977
  if(temp.fullData.length > 0){
978
+ this.initRowFields(temp.fullData);
978
979
  this.isShowEmpty = false
979
980
  }else{
980
981
  if(n){
@@ -1651,6 +1652,42 @@ export default {
1651
1652
  syncData() {
1652
1653
  this.$refs[this.id].syncData();
1653
1654
  },
1655
+ // 收集所有表头字段(包括嵌套表头)
1656
+ getAllHeaderFields(headers) {
1657
+ const fields = [];
1658
+ const collect = (items) => {
1659
+ items.forEach(item => {
1660
+ if (item.children && item.children.length) {
1661
+ collect(item.children);
1662
+ } else if (item.prop) {
1663
+ fields.push(item.prop);
1664
+ }
1665
+ });
1666
+ };
1667
+ collect(headers);
1668
+ return fields;
1669
+ },
1670
+ // 初始化所有行的字段,确保每个行对象都有所有表头字段
1671
+ initRowFields(dataArray) {
1672
+ const rows = dataArray || this.data?.DataArray;
1673
+ if (!rows || !rows.length || !this.data?.retjson?.header) {
1674
+ return;
1675
+ }
1676
+ const fields = this.getAllHeaderFields(this.data.retjson.header);
1677
+ // 递归处理行(包括树形结构的子节点)
1678
+ const processRow = (row) => {
1679
+ fields.forEach(field => {
1680
+ if (!(field in row)) {
1681
+ this.$set(row, field, '');
1682
+ }
1683
+ });
1684
+ // 处理子节点
1685
+ if (row.children && row.children.length) {
1686
+ row.children.forEach(child => processRow(child));
1687
+ }
1688
+ };
1689
+ rows.forEach(row => processRow(row));
1690
+ },
1654
1691
  },
1655
1692
  };
1656
1693
  </script>