|
|
@@ -1372,108 +1372,6 @@ Page({
|
|
1372
|
1372
|
}
|
|
1373
|
1373
|
}
|
|
1374
|
1374
|
},
|
|
1375
|
|
- selectThisFunc:function(e){
|
|
1376
|
|
- let upOrDown = e.currentTarget.dataset.selecttype;
|
|
1377
|
|
- //debugger;
|
|
1378
|
|
- var that = this;
|
|
1379
|
|
- var list = that.data.List;
|
|
1380
|
|
- var firstSelectedIndex = -1;
|
|
1381
|
|
- var lastSelectedIndex = -1;
|
|
1382
|
|
-
|
|
1383
|
|
- // 找出第一个和最后一个已选中的项目索引
|
|
1384
|
|
- for(var i = 0; i < list.length; i++) {
|
|
1385
|
|
- if(list[i].Selected) {
|
|
1386
|
|
- if(firstSelectedIndex === -1) firstSelectedIndex = i;
|
|
1387
|
|
- lastSelectedIndex = i;
|
|
1388
|
|
- }
|
|
1389
|
|
- }
|
|
1390
|
|
-
|
|
1391
|
|
- if(firstSelectedIndex === -1) return; // 没有选中项,不执行操作
|
|
1392
|
|
-
|
|
1393
|
|
- // 创建选择器查询
|
|
1394
|
|
- var query = wx.createSelectorQuery();
|
|
1395
|
|
-
|
|
1396
|
|
- // 获取所有列表项的位置信息
|
|
1397
|
|
- for(var i = 0; i < list.length; i++) {
|
|
1398
|
|
- query.select('#scroll-' + i).boundingClientRect();
|
|
1399
|
|
- }
|
|
1400
|
|
-
|
|
1401
|
|
- // 获取视口信息
|
|
1402
|
|
- query.selectViewport().boundingClientRect();
|
|
1403
|
|
-
|
|
1404
|
|
- query.exec(function(res) {
|
|
1405
|
|
- if(!res || res.length <= list.length) return;
|
|
1406
|
|
-
|
|
1407
|
|
- var screenHeight = res[res.length - 1].height;
|
|
1408
|
|
- var visibleItems = [];
|
|
1409
|
|
-
|
|
1410
|
|
- // 找出当前在视口中可见的项
|
|
1411
|
|
- for(var i = 0; i < list.length; i++) {
|
|
1412
|
|
- var item = res[i];
|
|
1413
|
|
- if(item && item.top < screenHeight && item.bottom > 0) {
|
|
1414
|
|
- visibleItems.push({
|
|
1415
|
|
- index: i,
|
|
1416
|
|
- top: item.top,
|
|
1417
|
|
- bottom: item.bottom
|
|
1418
|
|
- });
|
|
1419
|
|
- }
|
|
1420
|
|
- }
|
|
1421
|
|
-
|
|
1422
|
|
- if(visibleItems.length === 0) return;
|
|
1423
|
|
-
|
|
1424
|
|
- // 根据按钮类型决定选择范围
|
|
1425
|
|
- if(upOrDown === "up") {
|
|
1426
|
|
- // 上按钮 - 选择从视口中最上面的项到第一个已选项之间的所有项
|
|
1427
|
|
- var topVisibleIndex = visibleItems[0].index;
|
|
1428
|
|
-
|
|
1429
|
|
- // 如果顶部可见项在第一个已选项之前,选择这个范围内的所有项
|
|
1430
|
|
- if(topVisibleIndex < firstSelectedIndex) {
|
|
1431
|
|
- for(var i = topVisibleIndex; i <= firstSelectedIndex; i++) {
|
|
1432
|
|
- list[i].Selected = true;
|
|
1433
|
|
- }
|
|
1434
|
|
- }
|
|
1435
|
|
- // 否则选择从第一个已选项到顶部可见项之间的所有项
|
|
1436
|
|
- else {
|
|
1437
|
|
- for(var i = firstSelectedIndex; i <= topVisibleIndex; i++) {
|
|
1438
|
|
- list[i].Selected = true;
|
|
1439
|
|
- }
|
|
1440
|
|
- }
|
|
1441
|
|
- } else if(upOrDown === "down") {
|
|
1442
|
|
- // 下按钮 - 选择从最后一个已选项到视口中最下面的项之间的所有项
|
|
1443
|
|
- var bottomVisibleIndex = visibleItems[visibleItems.length - 1].index;
|
|
1444
|
|
-
|
|
1445
|
|
- // 如果底部可见项在最后一个已选项之后,选择这个范围内的所有项
|
|
1446
|
|
- if(bottomVisibleIndex > lastSelectedIndex) {
|
|
1447
|
|
- for(var i = lastSelectedIndex; i <= bottomVisibleIndex; i++) {
|
|
1448
|
|
- list[i].Selected = true;
|
|
1449
|
|
- }
|
|
1450
|
|
- }
|
|
1451
|
|
- // 否则选择从底部可见项到最后一个已选项之间的所有项
|
|
1452
|
|
- else {
|
|
1453
|
|
- for(var i = bottomVisibleIndex; i <= lastSelectedIndex; i++) {
|
|
1454
|
|
- list[i].Selected = true;
|
|
1455
|
|
- }
|
|
1456
|
|
- }
|
|
1457
|
|
- }
|
|
1458
|
|
-
|
|
1459
|
|
- // 计算选中的总数
|
|
1460
|
|
- var selectedCount = 0;
|
|
1461
|
|
- for(var i = 0; i < list.length; i++) {
|
|
1462
|
|
- if(list[i].Selected) {
|
|
1463
|
|
- selectedCount++;
|
|
1464
|
|
- }
|
|
1465
|
|
- }
|
|
1466
|
|
-
|
|
1467
|
|
- // 更新数据
|
|
1468
|
|
- that.setData({
|
|
1469
|
|
- List: list,
|
|
1470
|
|
- SelectedCount: selectedCount
|
|
1471
|
|
- });
|
|
1472
|
|
-
|
|
1473
|
|
- // 更新按钮显示状态
|
|
1474
|
|
- that.checkSelectedItemsPosition(firstSelectedIndex, lastSelectedIndex);
|
|
1475
|
|
- });
|
|
1476
|
|
- },
|
|
1477
|
1375
|
//保存多选数据
|
|
1478
|
1376
|
saveMultipleData:function(mData,list){
|
|
1479
|
1377
|
var that=this;
|
|
|
@@ -1768,4 +1666,125 @@ Page({
|
|
1768
|
1666
|
imageUrl: app.globalData.ShareImage,
|
|
1769
|
1667
|
}
|
|
1770
|
1668
|
},
|
|
|
1669
|
+ selectThisFunc:function(e){
|
|
|
1670
|
+ let upOrDown = e.currentTarget.dataset.selecttype;
|
|
|
1671
|
+ var that = this;
|
|
|
1672
|
+ var list = that.data.List;
|
|
|
1673
|
+ var firstSelectedIndex = -1;
|
|
|
1674
|
+ var lastSelectedIndex = -1;
|
|
|
1675
|
+
|
|
|
1676
|
+ // 找出第一个和最后一个已选中的项目索引
|
|
|
1677
|
+ for(var i = 0; i < list.length; i++) {
|
|
|
1678
|
+ if(list[i].Selected) {
|
|
|
1679
|
+ if(firstSelectedIndex === -1) firstSelectedIndex = i;
|
|
|
1680
|
+ lastSelectedIndex = i;
|
|
|
1681
|
+ }
|
|
|
1682
|
+ }
|
|
|
1683
|
+
|
|
|
1684
|
+ if(firstSelectedIndex === -1) return; // 没有选中项,不执行操作
|
|
|
1685
|
+
|
|
|
1686
|
+ // 创建选择器查询
|
|
|
1687
|
+ var query = wx.createSelectorQuery();
|
|
|
1688
|
+
|
|
|
1689
|
+ // 获取所有列表项的位置信息
|
|
|
1690
|
+ for(var i = 0; i < list.length; i++) {
|
|
|
1691
|
+ query.select('#scroll-' + i).boundingClientRect();
|
|
|
1692
|
+ }
|
|
|
1693
|
+
|
|
|
1694
|
+ // 获取视口信息
|
|
|
1695
|
+ query.selectViewport().boundingClientRect();
|
|
|
1696
|
+
|
|
|
1697
|
+ query.exec(function(res) {
|
|
|
1698
|
+ // 确保我们有足够的结果
|
|
|
1699
|
+ if(!res || res.length < 2) {
|
|
|
1700
|
+ console.error("查询结果不足,无法处理选择操作");
|
|
|
1701
|
+ return;
|
|
|
1702
|
+ }
|
|
|
1703
|
+
|
|
|
1704
|
+ var screenHeight = res[res.length - 1].height;
|
|
|
1705
|
+ var visibleItems = [];
|
|
|
1706
|
+
|
|
|
1707
|
+ // 找出当前在视口中可见的项
|
|
|
1708
|
+ for(var i = 0; i < list.length; i++) {
|
|
|
1709
|
+ var item = res[i];
|
|
|
1710
|
+ if(item && item.top < screenHeight && item.bottom > 0) {
|
|
|
1711
|
+ visibleItems.push({
|
|
|
1712
|
+ index: i,
|
|
|
1713
|
+ top: item.top,
|
|
|
1714
|
+ bottom: item.bottom
|
|
|
1715
|
+ });
|
|
|
1716
|
+ }
|
|
|
1717
|
+ }
|
|
|
1718
|
+
|
|
|
1719
|
+ if(visibleItems.length === 0) {
|
|
|
1720
|
+ console.error("没有找到可见项目");
|
|
|
1721
|
+ return;
|
|
|
1722
|
+ }
|
|
|
1723
|
+
|
|
|
1724
|
+ console.log("可见项目数量:", visibleItems.length);
|
|
|
1725
|
+ console.log("第一个可见项目索引:", visibleItems[0].index);
|
|
|
1726
|
+ console.log("最后一个可见项目索引:", visibleItems[visibleItems.length - 1].index);
|
|
|
1727
|
+ console.log("第一个选中项索引:", firstSelectedIndex);
|
|
|
1728
|
+ console.log("最后一个选中项索引:", lastSelectedIndex);
|
|
|
1729
|
+ console.log("按钮类型:", upOrDown);
|
|
|
1730
|
+
|
|
|
1731
|
+ // 根据按钮类型决定选择范围
|
|
|
1732
|
+ if(upOrDown === "up") {
|
|
|
1733
|
+ // 上按钮 - 选择从视口中最上面的项到第一个已选项之间的所有项
|
|
|
1734
|
+ var topVisibleIndex = visibleItems[0].index;
|
|
|
1735
|
+
|
|
|
1736
|
+ // 如果顶部可见项在第一个已选项之前,选择这个范围内的所有项
|
|
|
1737
|
+ if(topVisibleIndex < firstSelectedIndex) {
|
|
|
1738
|
+ for(var i = topVisibleIndex; i <= firstSelectedIndex; i++) {
|
|
|
1739
|
+ list[i].Selected = true;
|
|
|
1740
|
+ }
|
|
|
1741
|
+ console.log("向上选择范围:", topVisibleIndex, "到", firstSelectedIndex);
|
|
|
1742
|
+ }
|
|
|
1743
|
+ // 否则选择从第一个已选项到顶部可见项之间的所有项
|
|
|
1744
|
+ else {
|
|
|
1745
|
+ for(var i = firstSelectedIndex; i <= topVisibleIndex; i++) {
|
|
|
1746
|
+ list[i].Selected = true;
|
|
|
1747
|
+ }
|
|
|
1748
|
+ console.log("向上选择范围:", firstSelectedIndex, "到", topVisibleIndex);
|
|
|
1749
|
+ }
|
|
|
1750
|
+ } else if(upOrDown === "down") {
|
|
|
1751
|
+ // 下按钮 - 选择从最后一个已选项到视口中最下面的项之间的所有项
|
|
|
1752
|
+ var bottomVisibleIndex = visibleItems[visibleItems.length - 1].index;
|
|
|
1753
|
+
|
|
|
1754
|
+ // 如果底部可见项在最后一个已选项之后,选择这个范围内的所有项
|
|
|
1755
|
+ if(bottomVisibleIndex > lastSelectedIndex) {
|
|
|
1756
|
+ for(var i = lastSelectedIndex; i <= bottomVisibleIndex; i++) {
|
|
|
1757
|
+ list[i].Selected = true;
|
|
|
1758
|
+ }
|
|
|
1759
|
+ console.log("向下选择范围:", lastSelectedIndex, "到", bottomVisibleIndex);
|
|
|
1760
|
+ }
|
|
|
1761
|
+ // 否则选择从底部可见项到最后一个已选项之间的所有项
|
|
|
1762
|
+ else {
|
|
|
1763
|
+ for(var i = bottomVisibleIndex; i <= lastSelectedIndex; i++) {
|
|
|
1764
|
+ list[i].Selected = true;
|
|
|
1765
|
+ }
|
|
|
1766
|
+ console.log("向下选择范围:", bottomVisibleIndex, "到", lastSelectedIndex);
|
|
|
1767
|
+ }
|
|
|
1768
|
+ }
|
|
|
1769
|
+
|
|
|
1770
|
+ // 计算选中的总数
|
|
|
1771
|
+ var selectedCount = 0;
|
|
|
1772
|
+ for(var i = 0; i < list.length; i++) {
|
|
|
1773
|
+ if(list[i].Selected) {
|
|
|
1774
|
+ selectedCount++;
|
|
|
1775
|
+ }
|
|
|
1776
|
+ }
|
|
|
1777
|
+
|
|
|
1778
|
+ console.log("选中总数:", selectedCount);
|
|
|
1779
|
+
|
|
|
1780
|
+ // 更新数据
|
|
|
1781
|
+ that.setData({
|
|
|
1782
|
+ List: list,
|
|
|
1783
|
+ SelectedCount: selectedCount
|
|
|
1784
|
+ });
|
|
|
1785
|
+
|
|
|
1786
|
+ // 更新按钮显示状态
|
|
|
1787
|
+ that.checkSelectedItemsPosition(firstSelectedIndex, lastSelectedIndex);
|
|
|
1788
|
+ });
|
|
|
1789
|
+ },
|
|
1771
|
1790
|
})
|