• 原生微信小程序中案例--仿boss区域树选择列多选功能


    1. 需求描述:

    区域三级列表, 有添加,编辑,删除功能。

    1. 选择父级分类,其下子类全部选中,当前分类后加标志显示字样
    2. 取消选中子类,其父类分类后标志显示选中数量
    3. 若子类全部选中,除当前父类标志是字外,显示页面只显示当前父类
    4. 清除则清空选中结果
    5. 后台提交数据传参说明:
      • 如果子类全部选择,只传父类code
      • 如果子类没有全部选择,传父类code+子类code

    示例:

    1. 选择数据
    • 河北省下:
      1.石家庄市子类全部选中,
      2.唐山市子类选择桥西区、长安区
      页面显示:
      - 河北 石家庄
      - 河北 唐山市 桥西区
      - 河北 唐山市 长安区
    • 山西省:(假设山西省下只有大同市和太原市)
      1. 太原市子类全部选中
      2. 大同市子类全部选中
      页面显示:
      - 山西省
    1. 传输参数
    	data: [
    		{one:130000, two: '130100'},
    		{one:130000, two: '130200', three: '130201'},
    		{one:130000, two: '130200', three: '130202'},
    		{one:140000}
    	]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    2. 效果图:

    描述

    3. 代码

    1. 主页面:show.wxml
    
    
      
        选择地区
        
          +
          去编辑
        
      
      选择您的地区
      
        
          
          删除
        
      
      
      
        +
        去添加
      
      
      
    
      
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    1. 添加区域页面area.wxml
    
    
      
      
        
          {{ item.name }}
          
            {{item.signName}}
          
        
      
      
      
        
          {{ item.name }}
          
            {{item.signName}}
          
        
      
      
      
        
        {{ item.name }}
        
      
    
    
    
      
          
          
        
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    1. 区域操作页面:area.js:
    const app = getApp()
    const {throttle} = require('../../../utils/throttle')
    Page({
    
      /**
       * 页面的初始数据
       */
      data: {
        // 省数据
        areaList: [],
        // 省当前选中索引值
        provinceCurrentIdx: 0,
        // 市数据
        cityList: [],
        // 市当前选中索引值
        cityCurrentIdx: 0,
        // 区县数据
        townList: [],
      },
    
      // 清除
      cancel(){
        const {areaList, cityList, townList} = this.data
        areaList.map(one => {
          one.isSelect = 0
          one.signName = ''
          if(!one.children || !one.children.length) return
    
          one.children.map(two => {
            two.isSelect = 0
            two.signName = ''
            if(!two.children || !two.children.length) return
    
            two.children.map(three => {
              three.isSelect = 0
            })
          })
        })
    
        cityList.map(item=> {item.isSelect = 0; item.signName = ''})
        townList.map(item=> item.isSelect = 0)
    
        this.setData({
          areaList,
          cityList,
          townList
        })
      },
      
      // 注册节流事件
      throttle(){},
      // 点击确定,调取节流
      sure(){
       this.throttle()
      },
      // 保存
      save(){
        const selectArea = this.data.areaList.filter(item => item.isSelect)
        if(!selectArea.length){
          return wx.showToast({
            title: '请选择地区',
            icon: 'none'
          })
        }
        // 处理参数并返回结果
        const params =this.getParams(selectArea)
        // todo 可注释请求,查看结果
        wx.request({
          url: "",
          header: {},
          data: {
          	data: params 
          },
          method: 'POST',
          success: function(res) {
          }
        })
      },
    
      getParams(arr){
        const params = []
        arr.map(one => {
          // 若省无子集
          if(!one.children || !one.children.length){
            return params.push({one: one.code})
          }
          
          const twoAreas = one.children.filter(item => item.isSelect)
    
          const isAll = twoAreas.every(two => (two.signName+'').localeCompare('全') === 0)
          if((twoAreas.length === one.children.length) && isAll){
            return params.push({one: one.code})
          }
    
          twoAreas.map(two => {
            // 选中的市若无子集
            if(!two.children || !two.children.length){
              return params.push({one: one.code, two: two.code})
            }
    
            const threeAreas = two.children.filter(item => item.isSelect)
            if(threeAreas.length === two.children.length){
              return params.push({one: one.code, two: two.code})
            }
            // 区县集
            threeAreas.map(three => {
              params.push({one: one.code, two: two.code, three: three.code})
            })
          })
          
        })
        return JSON.stringify(params)
      },
      /**
       * 生命周期函数--监听页面加载
       */
      onLoad(options) {
        this.throttle = throttle(this.save, 2000)
      },
      onShow() {
        this.getArea()
      },
      // 获取地区
      getArea(){
        const _this = this
        // todo 可注释请求,只做虚拟数据操作
        // _this.valuation(datalist)
        // _this.initShow(datalist)
        wx.request({
          url: "",
          header: {},
          data: {},
          method: 'POST',
          success: function(res) {
            if (res.statusCode == 200) {
              if(res.data.code == 200){
                const arr =  [...数据]
                const datalist = arr.map(item => {
                  item.signName = ''
                  return item
                })
                // 回显地区
                _this.valuation(datalist)
                _this.initShow(datalist)
              } else {
                wx.showToast({
                  title: res.data.msg,
                  icon: 'none'
                })
              }
            }
          }
        })
      },
      // 地区回显
      valuation(datalist){
        const selectList = datalist.filter(item=> item.isSelect)
        if(!selectList.length){
          return
        }
        selectList.map(one=>{
          if(!one.children || !one.children.length){
            one.signName = '全'
            return
          }
          const selectTwo = one.children.filter(two => two.isSelect)
          one.signName = selectTwo.length === one.children.length
            ? '全'
            : selectTwo.length
    
          one.children.map(two => {
            if(!two.children || !two.children.length){
              two.signName = '全'
              return
            }
            const selectThree = two.children.filter(three => three.isSelect)
            two.signName = selectThree.length === two.children.length
            ? '全'
            : selectThree.length
          })
        })
      },
      // 定位点击省市区并初始加载
      initShow(datalist){
        const provinceCurrentIdx = datalist.findIndex(item => item.isSelect)
        if(provinceCurrentIdx === -1){
          return this.setData({
            areaList: datalist
          })
        }
        if(!datalist[provinceCurrentIdx].children && !datalist[provinceCurrentIdx].children.length){
          return this.setData({
            areaList: datalist,
            provinceCurrentIdx
          })
        }
    
        const cityList = datalist[provinceCurrentIdx].children
        const cityCurrentIdx = cityList.findIndex(item => item.isSelect)
        if(cityCurrentIdx === -1){
          return this.setData({
            areaList: datalist,
            provinceCurrentIdx,
            cityList
          })
        }
        if(!cityList[cityCurrentIdx].children && !cityList[cityCurrentIdx].children.length){
          return this.setData({
            areaList: datalist,
            provinceCurrentIdx,
            cityList,
            cityCurrentIdx
          })
        }
        
        const townList = cityList[cityCurrentIdx].children
        this.setData({
          areaList: datalist,
          provinceCurrentIdx,
          cityList,
          cityCurrentIdx,
          townList
        })
      },
      // 点击省
      provinceClick(e){
        const { idx } = e.target.dataset
        const { areaList, provinceCurrentIdx } = this.data
        // 切换省,则默认选中
        if(provinceCurrentIdx == idx){
          areaList[idx].isSelect = areaList[idx].isSelect ? 0  : 1
          this.setChioce(areaList[idx])
          this.setSign(areaList[idx])
        } else {
          if(!areaList[idx].isSelect){
            areaList[idx].isSelect = 1
            this.setChioce(areaList[idx])
            this.setSign(areaList[idx])
          }
        }
        
        this.setData({
          areaList: areaList,
          provinceCurrentIdx: idx,
          cityList: [],
          cityCurrentIdx: 0,
          townList: [],
        })
        this.getChildArea(1)
        this.getChildArea(2)
      },
      
      // 点击市
      cityClick(e){
        const { idx } = e.target.dataset
        const { areaList, cityList, cityCurrentIdx } = this.data
        if(cityCurrentIdx == idx){
          cityList[idx].isSelect = cityList[idx].isSelect ? 0  : 1
          this.setChioce(cityList[idx])
          this.setParentChioce(cityList[idx])
          this.setSign(cityList[idx])
        } else {
          if(!cityList[idx].isSelect){
            cityList[idx].isSelect = 1
            this.setChioce(cityList[idx])
            this.setParentChioce(cityList[idx])
            this.setSign(cityList[idx])
          }
        }
        this.setData({
          areaList: areaList,
          cityList: cityList,
          cityCurrentIdx: idx,
          townList: [],
        })
        this.getChildArea(2)
      }, 
    
      // 找下一级的地区
      getChildArea(level){
        const { areaList, provinceCurrentIdx, cityList, cityCurrentIdx } = this.data
       
        switch (level){
          case 1:
            if(areaList[provinceCurrentIdx].children){
              this.setData({
                cityList: areaList[provinceCurrentIdx].children
              })
            }
          break;
          case 2:
            if(cityList[cityCurrentIdx] && cityList[cityCurrentIdx].children){
              this.setData({
                townList: cityList[cityCurrentIdx].children
              })
            }
          break;
        }
      },
      
      // 切换--当前项子项选中与取消选中
      setChioce(data){
        if(!data.children) return
        data.children.forEach(item => {
          item.isSelect = data.isSelect
          this.setChioce(item)
        })
      },
    
      // 设置父元素选中
      setParentChioce(){
        let { areaList, provinceCurrentIdx, cityList } = this.data
        areaList[provinceCurrentIdx].isSelect = 1
    
        // 设置市选中状态及角标
        const len = cityList.filter(item => item.isSelect).length
        if(!len){
          areaList[provinceCurrentIdx].isSelect = 0
        }
      },
    
      // 设置元素角标
      setSign(data){
        let { areaList, provinceCurrentIdx, cityList } = this.data
        // 设置当前元素角标提示
        if(data.isSelect){
          data.signName = '全'
        } else {
          data.signName = ''
        }
        // 关联其父角标提示
        if(data.parentId){
          const len = areaList[provinceCurrentIdx].children.filter(item => item.isSelect).length
          if(cityList.length === len){
            areaList[provinceCurrentIdx].signName = '全'
          } else {
            areaList[provinceCurrentIdx].signName = len
          }
        }
    
        // 关联其子角标提示
        if(data.children){
          data.children.forEach(item => {
            item.signName = data.isSelect ? '全' : ''
          })
        }
      },
    
      // 点击区县
      townClick(e){
        let { areaList, provinceCurrentIdx, cityList, cityCurrentIdx, townList } = this.data
        const { idx } = e.target.dataset
        townList[idx].isSelect = townList[idx].isSelect ? 0 : 1
        cityList[cityCurrentIdx].isSelect = 1
        areaList[provinceCurrentIdx].isSelect = 1
    
        // 设置市选中状态及角标
        const len = townList.filter(item => item.isSelect).length
        if(!len){
          cityList[cityCurrentIdx].isSelect = 0
        }
        if(cityList[cityCurrentIdx].children.length === len){
          cityList[cityCurrentIdx].signName = '全'
        } else {
          cityList[cityCurrentIdx].signName = len
        }
    
        // 设置省选中状态及角标
        const lenP = areaList[provinceCurrentIdx].children.filter(item => item.isSelect).length
        if(!lenP){
          areaList[provinceCurrentIdx].isSelect = 0
        }
        if(cityList.length === lenP){
          areaList[provinceCurrentIdx].signName = '全'
        } else {
          areaList[provinceCurrentIdx].signName = lenP
        }
    
        this.setData({
          areaList: areaList,
          cityList: cityList,
          townList: townList
        })
      },
    
    })
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139
    • 140
    • 141
    • 142
    • 143
    • 144
    • 145
    • 146
    • 147
    • 148
    • 149
    • 150
    • 151
    • 152
    • 153
    • 154
    • 155
    • 156
    • 157
    • 158
    • 159
    • 160
    • 161
    • 162
    • 163
    • 164
    • 165
    • 166
    • 167
    • 168
    • 169
    • 170
    • 171
    • 172
    • 173
    • 174
    • 175
    • 176
    • 177
    • 178
    • 179
    • 180
    • 181
    • 182
    • 183
    • 184
    • 185
    • 186
    • 187
    • 188
    • 189
    • 190
    • 191
    • 192
    • 193
    • 194
    • 195
    • 196
    • 197
    • 198
    • 199
    • 200
    • 201
    • 202
    • 203
    • 204
    • 205
    • 206
    • 207
    • 208
    • 209
    • 210
    • 211
    • 212
    • 213
    • 214
    • 215
    • 216
    • 217
    • 218
    • 219
    • 220
    • 221
    • 222
    • 223
    • 224
    • 225
    • 226
    • 227
    • 228
    • 229
    • 230
    • 231
    • 232
    • 233
    • 234
    • 235
    • 236
    • 237
    • 238
    • 239
    • 240
    • 241
    • 242
    • 243
    • 244
    • 245
    • 246
    • 247
    • 248
    • 249
    • 250
    • 251
    • 252
    • 253
    • 254
    • 255
    • 256
    • 257
    • 258
    • 259
    • 260
    • 261
    • 262
    • 263
    • 264
    • 265
    • 266
    • 267
    • 268
    • 269
    • 270
    • 271
    • 272
    • 273
    • 274
    • 275
    • 276
    • 277
    • 278
    • 279
    • 280
    • 281
    • 282
    • 283
    • 284
    • 285
    • 286
    • 287
    • 288
    • 289
    • 290
    • 291
    • 292
    • 293
    • 294
    • 295
    • 296
    • 297
    • 298
    • 299
    • 300
    • 301
    • 302
    • 303
    • 304
    • 305
    • 306
    • 307
    • 308
    • 309
    • 310
    • 311
    • 312
    • 313
    • 314
    • 315
    • 316
    • 317
    • 318
    • 319
    • 320
    • 321
    • 322
    • 323
    • 324
    • 325
    • 326
    • 327
    • 328
    • 329
    • 330
    • 331
    • 332
    • 333
    • 334
    • 335
    • 336
    • 337
    • 338
    • 339
    • 340
    • 341
    • 342
    • 343
    • 344
    • 345
    • 346
    • 347
    • 348
    • 349
    • 350
    • 351
    • 352
    • 353
    • 354
    • 355
    • 356
    • 357
    • 358
    • 359
    • 360
    • 361
    • 362
    • 363
    • 364
    • 365
    • 366
    • 367
    • 368
    • 369
    • 370
    • 371
    • 372
    • 373
    • 374
    • 375
    • 376
    • 377
    • 378
    • 379
    • 380
    • 381
    • 382
    • 383
    • 384
    • 385
    • 386
    1. 当然还加了一个节流操作:
    // throttle.js
    function throttle(func, limit) {  
      let lastFunc;  
      let lastRan;  
    
      return function() {  
        const context = this;  
        const args = arguments;  
        if (!lastRan) {  
          func.apply(context, args);  
          lastRan = Date.now();  
        } else {  
          clearTimeout(lastFunc);  
          lastFunc = setTimeout(function() {  
            if ((Date.now() - lastRan) >= limit) {  
              func.apply(context, args);  
              lastRan = Date.now();  
            }  
          }, limit - (Date.now() - lastRan));  
        }  
      };  
    }
    module.exports = {
      throttle
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    1. 您可以拿测试数据测试:
      • code:唯一值
      • isSelect:表示选中,回显时记得更改,0表示未选择,1表示选择
      • parentId:父级code
      • parentName: 父级name
      • children: 子集
    {
    	"data": [
    		{
    			"code": "110000",
    			"isSelect": 0,
    			"name":"北京",
    			"children": [
    				{
    					"code": "110100",
    					"isSelect": 0,
    					"name": "北京",
    					"parentId": "110000",
    					"parentName": "北京",
    					"children": [ 
    						{
    							"code": "110101",
    							"isSelect": 0,
    							"name": "东城区",
    							"parentId": "110100",
    							"parentName": "北京"
    						},
    						{
    							"code": "110102",
    							"isSelect": 0,
    							"name": "西城区",
    							"parentId": "110100",
    							"parentName": "北京"
    						},
    						{
    							"code": "110103",
    							"isSelect": 0,
    							"name": "朝阳区",
    							"parentId": "110100",
    							"parentName": "北京"
    						}
    					],
    				}
    			]
    		},
    		{
    			"code": "130000",
    			"isSelect": 0,
    			"name":"河北",
    			"children": [
    				{
    					"code": "130100",
    					"isSelect": 0,
    					"name": "石家庄市",
    					"parentId": "130000",
    					"parentName": "河北",
    					"children": [ 
    						{
    							"code": "130101",
    							"isSelect": 0,
    							"name": "桥西区",
    							"parentId": "130100",
    							"parentName": "石家庄市"
    						},
    						{
    							"code": "130102",
    							"isSelect": 0,
    							"name": "长安区",
    							"parentId": "130100",
    							"parentName": "石家庄市"
    						},
    						{
    							"code": "130103",
    							"isSelect": 0,
    							"name": "新华区",
    							"parentId": "130100",
    							"parentName": "石家庄市"
    						}
    					],
    				},
    				{
    					"code": "130200",
    					"isSelect": 0,
    					"name": "唐山市",
    					"parentId": "130000",
    					"parentName": "河北",
    					"children": [ 
    						{
    							"code": "130201",
    							"isSelect": 0,
    							"name": "桥西区",
    							"parentId": "130200",
    							"parentName": "唐山市"
    						},
    						{
    							"code": "130202",
    							"isSelect": 0,
    							"name": "长安区",
    							"parentId": "130200",
    							"parentName": "唐山市"
    						},
    						{
    							"code": "130203",
    							"isSelect": 0,
    							"name": "新华区",
    							"parentId": "130200",
    							"parentName": "唐山市"
    						}
    					],
    				}
    			]
    		},
    		{
    			"code": "140000",
    			"isSelect": 0,
    			"name":"山西",
    			"children": [
    				{
    					"code": "140100",
    					"isSelect": 0,
    					"name": "太原市",
    					"parentId": "140000",
    					"parentName": "山西",
    					"children": [ 
    						{
    							"code": "140101",
    							"isSelect": 0,
    							"name": "小店区",
    							"parentId": "140100",
    							"parentName": "太原市"
    						},
    						{
    							"code": "140102",
    							"isSelect": 0,
    							"name": "迎泽区",
    							"parentId": "140100",
    							"parentName": "太原市"
    						},
    						{
    							"code": "140103",
    							"isSelect": 0,
    							"name": "万柏林区",
    							"parentId": "140100",
    							"parentName": "太原市"
    						},
    						{
    							"code": "140104",
    							"isSelect": 0,
    							"name": "尖草坪区",
    							"parentId": "140100",
    							"parentName": "太原市"
    						},
    						{
    							"code": "140105",
    							"isSelect": 0,
    							"name": "阳曲县",
    							"parentId": "140100",
    							"parentName": "太原市"
    						},
    						{
    							"code": "140106",
    							"isSelect": 0,
    							"name": "古交市",
    							"parentId": "140100",
    							"parentName": "太原市"
    						}
    					],
    				},
    				{
    					"code": "140200",
    					"isSelect": 0,
    					"name": "大同市",
    					"parentId": "140000",
    					"parentName": "山西",
    					"children": [ 
    						{
    							"code": "140201",
    							"isSelect": 0,
    							"name": "新荣区",
    							"parentId": "140200",
    							"parentName": "大同市"
    						},
    						{
    							"code": "140202",
    							"isSelect": 0,
    							"name": "平城区",
    							"parentId": "140200",
    							"parentName": "大同市"
    						},
    						{
    							"code": "140203",
    							"isSelect": 0,
    							"name": "云州区",
    							"parentId": "140200",
    							"parentName": "大同市"
    						},
    					]
    				}
    			]
    		}
    	]
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139
    • 140
    • 141
    • 142
    • 143
    • 144
    • 145
    • 146
    • 147
    • 148
    • 149
    • 150
    • 151
    • 152
    • 153
    • 154
    • 155
    • 156
    • 157
    • 158
    • 159
    • 160
    • 161
    • 162
    • 163
    • 164
    • 165
    • 166
    • 167
    • 168
    • 169
    • 170
    • 171
    • 172
    • 173
    • 174
    • 175
    • 176
    • 177
    • 178
    • 179
    • 180
    • 181
    • 182
    • 183
    • 184
    • 185
    • 186
    • 187
    • 188
    • 189
    • 190
    • 191
    • 192
    • 193
    • 194
    • 195
    • 196
  • 相关阅读:
    Web前端—Flex布局:标准流、浮动、Flex布局、综合案例(短视频首页解决方案)
    李沐67_自注意力——自学笔记
    什么样的护眼灯适合孩子用?真正适合孩子的护眼台灯
    Docker 可用镜像源
    mysql备份与恢复
    数据结构:AVL树讲解(C++)
    基本的TCP套接字编程(详解)
    Android 视频通话分析总结
    js-promise-resolve应用(3)
    Kernel: module接口ABI相关问题分析的思路;__GENKSYMS__;
  • 原文地址:https://blog.csdn.net/qq_35940731/article/details/138163141