利用vue重构有赞商城的思路以及总结整理vue.js

以下是本次项目的代码链接和预览链接:

在完成了多页面应用的基础结构的搭建之后,会出现项目根目录下有一个src文件夹,src文件里有components、modules、pages三个文件夹的情况,而components文件夹是用来放置一些共用的vue组件的,而modules文件夹里是放置一些共用的css、js模块,至于最后的pages文件夹则是用来放置有赞商城的不同页面的文件,每个页面都会在pages内呈一个单独的文件夹,里面会放置关于这个页面的独有的所有文件。

在这里先说明一下,重构过程中所有获取到的数据,都是通过使用在easymock上编写对应的接口(原在数据在rap2上,但是接口数据不稳定且无法搭建在github上),然后通过axios发送异步请求来获取到的模拟的数据,这是模仿真实的开发环境下的操作,具体的实现过程的话可以参考easymock以及我在github上面的源码文件。

以下是重构有赞商城的所需的页面列表,一共有六个页面,分别为:

1.首页2.目录分类页3.商品搜索列表页4.商品详情页5.购物车页面6.个人中心地址管理页面接下来我们会逐个页面来说说他们的重构思路

然后我们会用到的一些第三方插件,分别为:

一、首页

1、无缝轮播组件

那我们首先来说一下轮播组件,首先我们需要在src目录下的compnents文件夹里新建一个轮播组件文件,轮播的话我们会直接选择使用swiper插件提供的轮播组件库,我们只需把它封装到一个组件文件中即可,具体的操作在这里我就不详细说明了,这里只强调两个需要注意的问题:

1.应不应该在轮播组件放入图片数据呢?

回答:不应该,原因是为了使得轮播组件独立出来,在不同的组件中得以复用,并且使其可以适应不同规格不同数量的图片,因此我们的轮播组件只负责展示数据,不负责拿数据,数据应该通过props从父组件中获取。

回答:首先我们需要了解的是swiper是对DOM节点进行操作的,所以swiper的配置应该写在组件的mounted生命周期钩子里,因为在这个阶段已经在页面上生成了该组件对应的DOM节点;另一方面,swiper组件里的数据是swiper的父组件异步获取后传递给swiper的,因此应该等swiper拿到了传递的数据之后再对这个组件进行渲染,因此需要给这个组件添加一个v-if="bannerLists"的判断,判断swiper组件是否获取到数据,只有获取到了数据才生成这个DOM节点。

同样的,这里有两个值得注意的问题:

1.获取到的价格的格式并不统一,如何来使得这些价格的格式统一起来?

回答:这里需要用到vue实例里的一个自带属性filters来对数据进行过滤,在vue1.0的时候,filters里面会有自带的过滤器,不过在vue2.0时被移除了,因此需要我们来自己写所需的过滤器的过滤方式:

filters:{currency(num){num=num+''letarr=num.split('.')if(arr.length===1){returnnum+'.00'}else{if(arr[1].length===1){returnnum+'0'}elsereturnnum}}}只有在渲染页面时,只要对你想进行的数据后加上该过滤器即可:

¥{{list.price|currency}}

2.如何做到下来商品列表就发送对应的请求来更新一页新的商品列表?

回答:这里我们使用到了mint-ui,一个移动端分页效果库,然后我们使用它文档上面对应的infinitescroll的api来达到我们想要的效果,具体代码如下:

getList(){if(this.allLoad)returnthis.loading=trueaxios.post(url.hostLists,{pageNum:this.pageNum,pageSize:this.pageSize}).then((response)=>{letcurrentList=response.data.listsif(currentList.length

3.底部导航栏组件

底部导航栏和轮播组件一样,由于可以在其他地方进行复用,因此会把该组件放于components文件夹中,这里值得一提的是,底部导航栏组件由于点击不同的图标,它会跳转到不同的页面,因此会导致导航栏状态的重新加载,因此,若想要在不同的页面让导航栏呈现不同的状态,我们需要在跳转的时候传入对应的查询参数,然后在跳转到不同的页面时读取这个参数来呈现对应的不同的状态,具体的代码片段如下:

最后,由于在其他页面中,filters属性和底部导航栏组件都可以进行复用,所以这里我们利用mixins属性,来对filters属性和底部导航栏组件的注入进行打包,打包在一个js文件夹下的mixin.js文件中:

importFootnavfrom'components/FootNav.vue'letmixin={filters:{currency(num){num=num+''letarr=num.split('.')if(arr.length===1){returnnum+'.00'}else{if(arr[1].length===1){returnnum+'0'}elsereturnnum}}},components:{Footnav}}exportdefaultmixin当你的页面需要使用到该过滤器,或者底部导航栏时,只要对这个模块进行引入,并在mixins属性中添加它即可:

newVue({...mixins:[mixin]})二、目录分类页

商品搜索列表页同样的基本操作与首页和目录分类页类似,这里唯一不同的是,商品搜索列表页在用户下拉一定距离后,会出现一个回到顶部的图标,点击图标,用户就可以直接回到顶部,在这里,我们使用了一个叫作Velocity.js的动画库,它是把css中的一些动画效果进行封装,进而可以通过一些api轻松实现一些简单的动画效果,例如上面所说的回到顶部,在项目中的代码片段如下所示:

//引入VelocityimportVelocityfrom'velocity-animate/velocity.js'//在methods中加入对应方法methods:{scrollMove(){if(window.scrollY>=290){this.isShow=true}else{this.isShow=false}},goToTop(){Velocity(document.body,'scroll',{duration:500,easing:"easeOutQuart"});this.isShow=false//回到顶部图标消失}}四、商品详情页

在商品详情页中,除了有对数据的获取和页面的渲染外,这里主要涉及到了三个新的操作:

首先是sku算法,由于此次商品详情页的选择并不需要使用到它,因为商品的可选属性只有一个,但是在实际情况下,由于很多商品的可选属性不止一个,因此是需要使用到sku算法的。SKU=StockKeepingUnit(库存量单位),同一型号的产品,或者说是同一个产品项目(产品条形码是针对企业的产品)。

然后如何制作sku页面载入和消失时的动画效果呢?这里我们使用到了vue提供的自带transition的封装组件,可以通过这个组件来给任何元素和组件添加进入或者离开时的过渡。这个组件提供了八个JavaScript钩子函数以及六个过渡类名的切换,利用这些钩子函数以及类名的切换就可以完成组件的过渡动画了,这里列举一个vue文档上的典型例子给大家参考一下吧:

transition过渡:

Togglehello

newVue({el:'#demo',data:{show:true}}).fade-enter-active,.fade-leave-active{transition:opacity.5s;}.fade-enter,.fade-leave-to/*.fade-leave-activebelowversion2.1.8*/{opacity:0;}最后在遮罩层和弹出层出现之后(即sku页面),对页面进行上下拖动时,背后的内容层也会跟着一起拖动,这是典型的滚动穿透问题,在这里我的解决办法是监听遮罩层和弹出层的出现,当它们出现之后,我们更改内容层的样式,使其样式变为:position:fixed;width:100%;这样内容层就不会再滚动了,之后我们再通过设置:

scrollTop=document.scrollingElement.scrollTopdocument.body.style.top=-scrollTop+'px'使得内容层的滚动高度与遮罩层和弹出层出现前相同,并且,调整html元素的样式:height:100%;overflow:hidden;,在关闭遮罩层和弹出层后,还原这些修改样式,即可使得滚动穿透的问题得以解决。需要注意的是,还原这些样式之后,原本内容层滚动的高度就会丢失,因此我们要通过之前记录下来内容层滚动的高度,在还原样式时将滚动高度也一并还原。

document.scrollingElement.scrollTop=scrollTop这样滚动穿透的问题就算是彻底解决了,下面是全部的这部分的全部代码片段:

五、购物车页面

购物车页面里面比较多的逻辑关系,在此就不一一枚举了,大概说一下它的重构思路:

商品的获取渲染以及增加是否被选中属性

获取后台数据加载处理或动态响应式处理

商品选中店铺选中全选,影响价格三级联动。

编辑状态,其余不可切换。对数量操作,加减更改。删除,单商品删除,选中(多个)删除,商品删除店铺删除。

原生事件,滑动删除页面,Volecity。

删除多个商品进行过滤处理

fetch层封装,

同一个场景下思维层封装

问题呈现,左滑删除样式继承。[0].style.left='0px'this.$refs[`goods-${shopIndex}-${goodIndex}`][0].style.left='0px'

ref是非响应式的,不建议在模板中进行数据绑定,即使用唯一标识绑定

v-for模式使用“就地复用”策略,简单理解就是会复用原有的dom结构,尽量减少dom重排来提高性能(解决方案:还原dom样式)

key为每个节点提供身份标识,数据改变时会重排,最好绑定唯一标识,如果用index标识可能得不到想要的效果(绑定唯一识别key)

网页性能管理详解

首先获取数据,渲染到页面这些是基本的操作

获取到数据之后,由于有一些属性数据中没有,并且我们想要它在页面中是呈响应式存在的,因此从接口获取到数据之后不应该直接赋值给data里,而是应该先给数据增添属性,再把增添后的数据赋值到data处,具体代码如下:

getLists(){cart.getCartLists().then((response)=>{letlist=response.data.cartListlist.forEach(shop=>{shop.checked=trueshop.editingStatus=falseshop.editingMsg='编辑'shop.removeChecked=falseshop.goodsList.forEach(good=>{good.checked=truegood.removeChecked=falsegood.touchDelete=false})})this.cartLists=list})}每次选择了商店下的商品时,都利用数组的every方法来遍历数组看是否全部商品都被选中了,若选中则商店也被选中,同理,若选择了商店,则遍历商店下的商品,把商店下的商品全部选中。取消选中亦是同理。

全选与否则利用计算属性来处理,利用计算属性的getter来获取此时购物车的状态来判断是否被全选,利用计算属性的setter来处理点击全选时商店及商店下商品的状态的改变。

同样的,利用计算属性来计算正常状态下选中商品的总价,并返回选中商品的列表。同理,利用计算属性来计算编辑状态下的选中的商品的列表,并以数组的形式返回。

在编辑状态下,我利用了计算属性来对商品的数量的数据进行了监测,若判断出数量中存在非数字或者负数的情况,则会自动把数量的数据变成1。

利用touchstart和touchend两个事件来实现商品左拉删除的功能,这两个事件分别绑定start和end的方法,方法的具体代码如下所示:

start(e,good){good.startX=e.changedTouches[0].clientX},end(e,good,goodIndex,shopIndex,shop){letendX=e.changedTouches[0].clientXletleft='0px'if(good.startX-endX>100){good.touchDelete=trueleft='-60px'Velocity(this.$refs[`goods-${shopIndex}-${goodIndex}`],{left})shop.goodsList.forEach((otherGood,index)=>{if(otherGood.touchDelete&&index!==goodIndex){otherGood.touchDelete=falseVelocity(this.$refs[`goods-${shopIndex}-${index}`],{left:'0px'})}})}elseif(endX-good.startX>100){good.touchDelete=falseleft='0px'Velocity(this.$refs[`goods-${shopIndex}-${goodIndex}`],{left})}}当添加了左拉删除的功能之后,页面会出现一个BUG,就是左拉之后,点击该商品对应的商店下的编辑按钮,删除的按钮会继续被左拉,呈现一个比其他删除按钮长的BUG状态。

处理办法:通过给每个商品的一个具有唯一识别性的ref,然后在点击编辑时,找到已左拉的商品的对应的具有唯一识别性的ref,把它的左拉状态还原即可,具体代码如下所示:

shop.editingStatus=!shop.editingStatusif(shop.editingStatus){shop.goodsList.forEach((good,index)=>{if(good.touchDelete){good.touchDelete=falsethis.$refs[`goods-${shopIndex}-${index}`][0].style.left='0px'}})}六、个人中心地址管理页面

另外在这个页面中,我们使用到了vue-router和vuex,接下来我将会简要介绍它们在个人中心地址管理页面中的使用方式。

首先是vue-router,他是用于构建单页面应用的,是基于路由和组件,路由用于访问特定的路径,然后特定的路径与特定的组件相联系相映射,传统页面中,是通过超链接来实现页面的跳转和切换的,但在vue-router中,则是路由的切换,即组件的切换。

我们先来看看是如何配置一个routes、创建一个router实例并把它注入到vue实例中去的:

importVuefrom'vue'importRouterfrom'vue-router'Vue.use(Router)//构造配置letroutes=[{path:'/',components:require('../components/member.vue')},{path:'/address',components:require('../components/address.vue'),children:[{path:'',redirect:'all'},{path:'all',components:require('../components/all.vue')},{path:'form',name:'form',components:require('../components/form.vue')}]}]//创建router实例letrouter=newRouter({routes})exportdefaultrouterimportVuefrom'vue'importrouterfrom'./router'importstorefrom'./vuex'//根组件注入letview=newVue({el:'#app',router,store})//router-view标签作为配置路由后组件的容器

通过这样路由的配置和注入,我们就可以实现单页面下多组件的切换和嵌套了,如果上述有不懂的地方,请到vue-router的官网处查看文档和说明。

vuex其实也是组件间通信的一种方式,说起组件间的通信,我们不如来一一列举一下他们的方式有哪些:

1.引用类型数据

用法:如果父组件有一个数据类型是引用类型的数据,当这个数据直接传递给子组件以后,在子组件对这个数据源进行修改的时候,父组件中该数据也会同步修改。

2.自定义事件

即子组件内部定义了一个自定义事件,可以用父组件在子组件上进行监听:

//子组件this.$emit('change',18)//父组件//父组件methods:{changeAge(age){this.obj.age=age}}3.全局事件(globalbus)

//bus.jsimportVuefrom'vue'constbus=newVue()exportdefaultbus//触发组件importbusfrom'js/bus.js'bus.$emit('change',18)//订阅组件importbusfrom'js/bus.js'bus.$on('change',(age)=>{this.obj.age=age})4.vuex状态管理

vuex的使用与vue-router有一点相似,具体代码如下:

importVuefrom'vue'//使用vuex插件importVuexfrom'vuex'Vue.use(Vuex)importaddressfrom'js/addressService.js'//创建Store实例conststore=newVuex.Store({state:{lists:null},mutations:{init(state,lists){state.lists=lists}},actions:{getLists({commit}){address.getList().then(response=>{commit('init',response.data.lists)})}}})exportdefaultstore之后同样的在跟组件对store实例进行注入即可,在上述实例中,state属性表示的是实例的状态,类似vue实例里的data,需要高度注意的是,不允许直接修改state里面的值,只允许定义一系列的类似事件的mutations来触发进行state的管理。而mutations属性里面存放的是同步事件,因此是对数据进行同步管理,要进行异步操作的话必须使用actions属性;actions属性里面存放一些异步的操作,在异步的操作进行完成之后再触发mutations里面的同步事件来对state里面的数据的状态进行同步的操作。

在组件中,我们一般通过dispatch来触发actions里面的异步事件进行异步操作,一般使用计算属性来获取state中的数据,之所以使用计算属性,是因为状态管理里的数据可能是变化的,因此我们希望它在页面中是响应式的,因此我们选择使用计算属性来对数据进行依赖的绑定。

具体代码如下:

computed:{list(){if(this.$store.state.lists){returnthis.$store.state.lists}returnfalse}},created(){if(!this.list){//防止在新增地址或修改地址后多次触发mutations中的initthis.$store.dispatch('getList')}}总之,vuex中状态管理的过程可总结为以下流程:(1).通过dispatch(actionFnName)分发来触发actions中的异步操作=>(2).待异步操作结束之后通过commit(mutationsFnName,data)来触发mutations中的同步事件来进行同步操作=>(3).通过同步操作改变state中的数据的状态=>(4).状态改变后,组件中的计算属性因为绑定了该数据作为依赖,因此数据的改变会响应式地展示在页面中,即页面展示的数据也会得到同步的改变

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

THE END
1.最近比较火的软件,火爆软件盘点,近期热门应用一览最近火热的软件包括短视频制作平台“剪映”,提供丰富的剪辑功能;直播互动平台“虎牙直播”,深受年轻人喜爱;以及办公协作软件“腾讯文档”,方便团队实时协作。这些应用凭借创新功能和便捷体验,迅速赢得用户青睐。 本文目录导读: 智能助手:你的贴心生活小帮手 短视频平台:记录生活,分享快乐 https://36u.cy580.net/post/2746.html
2.手机必备软件有哪些?手机必备软件大全20232023手机必备软件大全是绿色资源网为安卓用户精心整理的装机必备app合集,有微信、微博、支付宝、腾讯qq、酷狗音乐、360安全卫士、搜狗输入法、淘宝、爱奇艺、腾讯视频、高德地图、美团、墨迹天气、美颜相机,360浏览器、掌阅等一系列热门的应用,阅读、购物、社交、出行、娱乐等各类app应有尽有,全面满足你的生活需求,欢迎http://www.downcc.com/k/shoujibibeirj/
3.最新手机软件推荐,2023年度热门手机软件盘点热销货源最新手机软件推荐如下:探索全新社交应用“邻友圈”,体验实时位置分享;尝试效率提升工具“时间猎人”,智能规划日程;享受个性化阅读的“知行书签”,发现精彩内容。还有健身追踪器“健康助手”,助你保持健康生活。快来更新你的手机,体验这些实用软件吧! 本文目录导读: https://github.zhugongzi360.com/post/5449.html
4.cp速配下载安装cp速配语音交友历趣安卓应用商店首页 > APP > 社交 CP速配平台:安卓 大小: 92.65MB 类型:社交 热度: 最新版本(2024-11-23): 2.81.0-c383- 安卓手机版 软件介绍 技巧攻略 全部平台 历史版本 标签:娱乐 介绍 情侣娱乐交友聊天软件 CP速配,一般又称cp速配聊天交友,cp速配语音交友。 CP速配-一键找到有趣的灵魂CP速配是https://m.liqucn.com/rj/1135370.wml
5.最近最火的软件排行榜APP推荐最近最火的软件排行榜下载豌豆荚最近最火的软件排行榜榜单为您提供最新最近最火的软件排行榜大全,这里不仅有最近最火的软件排行榜安卓版本APP、历史版本应用下载资源,还有类似最近最火的软件排行榜的应用推荐,欢迎大家前来豌豆荚下载。https://www.wandoujia.com/bangdan/397839/
6.《行尸走肉》领衔本周十款限免App推荐平板电脑应用《行尸走肉》领衔 本周十款限免App推荐 打开App Store进入游戏专区,琳琅满目的游戏应用会让玩家觉得无从选择。App精选、新品推荐、免费游戏排行榜、收费游戏排行榜等,也都不能满足所有玩家的需求。在iOS 6.0的完美越狱发布之前,对那些想玩收费游戏却又不愿掏荷包的玩家来说,是何等的痛苦。https://pad.zol.com.cn/348/3489890.html
7.www.jxmzxx.com/appnews摘要:近期,多家银行发布通知,关于微信钱包和绑定银行卡的用户需关注的事项。背后有何深意?我们一同探究。 一、微信里的钱,何去何从? 银行通知纷纷指向微信钱包,是想要告诉我们什么呢?在这个移动支付日益普及的时代,微信钱包已成为许多人日常生活中不可或缺的一部分。我们用它购物、缴费,甚至存钱。但你是否注意到,http://www.jxmzxx.com/appnews_607434.html
8.本周或是广州今年最热一周,会否打破38.2℃的高温纪录?在副热带高压的连续把控之下,广州继续“高温烘烤”的天气,气象部门预计本周或是广州今年最热一周。今年以来广州观测站录得的最高气温,是7月25日受台风“格美”牌“空调外机”影响出现的38.2℃,本周会不会有机会打破这个纪录?要知道昨天广州观测站最高气温已经达到了38℃。广东天气昨天白天到今天早晨,广东东部的http://www.hscoc.cn/index.php/question226120.html
9.矿山行业一周简报(9月4日本周报干货较多,欢迎收藏后阅读 行业动态 NO.1 工信部张克俭:加快人工智能与制造、通信、交通、能源等行业的深度融合 9月4日,2023中国国际智能产业博览会在重庆开幕,工信部副部长张克俭表示,筑牢发展底座,聚焦智算芯片、预训练大模型、高精度传感器等基础技术,加快技术攻关和产业化应用,加强软硬件协同适配,构建开源开放https://www.iyiou.com/news/202309111051881
10.龙哥风向标20230411~20230418GPT拆解百万免费无资源广告下载新手小白利用Chat GPT写应用 盈利点:利用ChatGPT写应用的能力,可以为新手小白提供定制化的应用开发服务,从而盈利。 操作步骤: 与客户沟通需求,确定应用功能和界面设计 使用ChatGPT编写应用代码 进行本地测丨试和调试 将应用打包成可安装文件 与客户进行交付和售后服务 https://blog.csdn.net/wizardforcel/article/details/135933078
11.ak.akvtc.cn/mokohtml/11651.html湘妹子这一生也够苦的,她的老公英年早逝,已经离开19年了,她老公临走时让她答应自己绝不改嫁,湘妹子做到了守住了家,她辛苦把儿子带大了,也一直用心照顾着婆婆,本以为苦尽甘来了,可没想到病魔又缠身,任谁都会为她的人生感到唏嘘,或许这就是命吧! 为了把儿子养大,把婆婆照顾好,湘妹子卖了8年蔬菜,摆了4年地摊http://ak.akvtc.cn/mokohtml/11651.html
12.4.044.08智能电视一周各种类热门经典应用下载排行榜!智能电视/盒子必备应用商店——当贝市场 本帖最后由 开挂的牛 于 2016-4-9 15:34 编辑 节后的一周又要过去了,作为一个资深的智能电视玩家,小编可以说是鞠躬尽瘁,为那些新入手电视或是盒子的朋友们,提供本周最新最热最火下载量最高的软件,整理出周排行榜,让朋友们的智能电视体验更加完美。各种顶尖的类别功能https://www.znds.com/tv-397466-1-1.html
13.张韶涵推荐:即刻解锁,好运滚滚来!如转载稿涉及版权等问题,请 英美 content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no" />20只白酒A股本周均调整 关注头部酒企机会 首页 应用集 35.88MBhttp://m.xy77.live/11-23/454837.html
14.手机游戏下载应用软件app下载本周推荐 航海新世界 hivideo(视频剪辑) 玩转找茬红包版 我的虚拟杂货店Pretend Grocery 最强NBA体验服 战地模拟器联机版 安卓游戏 最热 最新 更多 香肠派对2024最新版 冒险解谜/1.84GB 点击进入 崩坏星穹铁道私人服 模拟养成/153MB 点击进入 我的世界163版本 http://www.winning11cn.com/
15.可以下载破解游戏的盒子哪个好手机破解游戏盒子app推荐简介: 7749游戏盒是一款优势多资源全的游戏盒子应用,覆盖了全网最新、最热、最齐全的安卓破解游戏资源,7749游戏盒子为广大安卓玩家提供智能最新、最稳定、最安全的破解游戏,7749小游戏盒app还拥有游戏PJ、BT游戏、无限金币游戏、腾讯游戏等专题栏目,集大神攻略,万千礼包,游戏社区,手机页游于一体。 6 7399游戏盒子 大量https://www.3733.com/news/399193.html
16.12个低价订国际机票的网站推荐(机票查询订票指南8%现金返利)夏季旅行 - 如果打算在7月或8月暑期度假,请提前44天至14天查看票价。出发前3周的机票平均价格最低。 冬季旅行 - 如果打算在11月或12月旅行,应该提前36到74天预订航班,最便宜的机票通常出现在提前22天左右。 2、买什么时候的机票划算? 周几出发最便宜? https://www.360doc.cn/mip/1109540203.html
17.九游娱乐(NINEGAME)手机网游梅西今天迎来37岁生日,来送上你的祝福 HDC 2024:携手鸿蒙生态快速发展 多款应用荣誉上榜 本周最热 意大利男篮奥运资格赛12人名单出炉:加里纳利&曼尼恩&梅利入选 顶配iPhone 16售价有望破2万元!博主直言大家该买还是买 英雄联盟设计师!LOL超1000天没有皮肤英雄:布隆,库奇等 毒霸网址大全 意天空预测意大利vs克罗地亚http://baike.share.xiaoachen.com/oqy/detail/vsvvzdhy.html
18.20款风靡朋友圈的视频应用;9款冷门却逆天的App;将照骗打回原型的每一个当下最热的产品,都折射出一种应用趋势,也满足了用户的多种需求。“一周酷产品”将紧随大公司成熟产品的变化和迭代,同时也将持续关注创业公司推出的可能有破局之势的新产品。 或许,我们可以一起见证下一代影响数亿甚至数十亿用户的伟大产品。 智能硬件 https://36kr.com/p/1721969213441
19.《2007全国民用建筑工程设计技术措施》节能专篇1.0.1 为贯彻落实国家建筑节能政策,积极推广建筑节能技术,提高民用建筑的建筑节能设计水平,加快既有建筑节能改造,合理选用建筑节能技术,保证设计质量,制定本专篇。 1.0.2 本专篇为现行国家、行业有关建筑节能设计标准、规范的要点和补充;为推广节能技术,合理设计建筑围护结构的热工性能,结合各地实践经验,针对民用建筑中建https://www.lanfanglian.com/gfxq/4
20.修文县人民政府门户网.历史规划.修文县水务发展“十三五”规划本次水资源综合规划水资源分区,以《全国资源综合规划分区》、《贵州省水资源综合规划水资源分区》和《贵阳市水资源分区》为基础,结合修文县的水资源开发利用现状及地区经济发展规划,围绕水资源规划分区的任务和要求,并遵循省、市水资源综合规划中已经审定的分区的前提下进行细化。 https://www.xiuwen.gov.cn/zwgk_5667434/xzfxxgkml/ghjh_5667448/lsgh/202109/t20210916_70446032.html
21.天博平台app下载中心真我GT6官宣 卡尔:自负让我失去了工作机会 但我当时相比25岁的安东尼还差点 斯洛文尼亚男篮将对卢卡伤势进行评估 以确定能否参加奥运资格赛 本周最热 世体:埃里克-加西亚新赛季更可能留巴萨,球队可能会放弃伊尼戈 愿无大碍!匈牙利前锋瓦尔加禁区被撞失去知觉,被担架抬离 违反规范 四季皆可用:扬子空气循环扇49元大http://baike.share.haoyuanv.cn/ssn/detail/whboxln.html