河南航天建设工程有限公司网站,谷歌搜索排名规则,宜阳县住房和城乡建设局网站,青岛网站制作辰星辰Vue篇 data为什么是个函数#xff1f; 在Vue中#xff0c;data必须是一个函数#xff0c;这是因为当data是函数时#xff0c;每个组件实例化时都会调用该函数#xff0c;返回一个新的数据对象#xff0c;从而保证每个组件实例拥有独立的数据#xff0c;避免数据冲… Vue篇 data为什么是个函数 在Vue中data必须是一个函数这是因为当data是函数时每个组件实例化时都会调用该函数返回一个新的数据对象从而保证每个组件实例拥有独立的数据避免数据冲突和不正确的状态更新。 具体来说如果data是一个对象字面量多个组件实例会共享同一个数据对象导致数据冲突和不正确的状态更新。而当data是一个函数时每次创建组件实例时都会调用该函数返回一个新的数据对象每个组件实例都有自己的数据对象互不干扰。这样改变其中一个组件的状态不会影响到其他组件。
优点
避免数据冲突通过将data定义为函数每个组件实例都会获得一个独立的数据对象避免了数据冲突和不正确的状态更新。更好的封装和组件化将data定义为函数可以更好地封装组件的状态使得组件的逻辑更加清晰和模块化也使得组件的测试更加容易。提高性能由于data是函数而不是对象字面量Vue可以更好地跟踪依赖关系和变化从而提高响应性和性能。
生命周期
Vue2的生命周期 beforeCreate实例初始化之后数据观测(data observer)和事件/watcher 设置之前被调。 created实例创建完成后被立即调用。在这一步实例已完成以下的配置数据观测(data observer)属性和方法的运算watch/event 事件回调。然而挂载阶段还没开始$el 属性目前不可见。 beforeMount模板编译/挂载之前被调用。在这之前$el 属性还不存在。 mountedel 被新创建的 vm.$el 替换并挂载到实例上去之后调用。一旦挂载完成实例就处于可用状态。 beforeUpdate数据更新时调用发生在虚拟 DOM 重新渲染和打补丁之前。 updated由于数据更改导致的虚拟 DOM 重新渲染和打补丁在这之后会调用该钩子。 activated在使用 vue-router 时路由变化切换到当前组件时被调用。 deactivated在使用 vue-router 时路由变化离开当前组件时被调用。 beforeDestroy实例销毁之前调用。在这一步实例仍然完全可用。 destroyedVue 实例销毁后调用。调用后Vue 实例指示的所有东西都会解绑所有的事件监听器会被移除所有的子实例也会被销毁。
Vue3的生命周期 setup - Vue2中的beforecreate和created被setup方法本身所替代 onBeforeMount - 组件挂载之前调用。 onMounted - 组件挂载之后调用。 onBeforeUpdate - 组件更新之前调用。 onUpdated - 组件更新之后调用。 onBeforeUnmount - 组件卸载之前调用。 onUnmounted - 组件卸载之后调用。 onActivated - 组件被keep-alive激活时调用。 onDeactivated - 组件被keep-alive停用时调用。 onErrorCaptured - 捕获子组件的错误时调用。
父子组件生命周期:
创建时父beforeCreate - 父created - 父beforeMount - 子beforeCreate - 子created - 子beforeMount - 子mounted - 父mounted
销毁时父beforeUpdated - 子beforeUpdated - 子updated - 父updated
父子组件传参和事件:
子组件 templatediv classhellodiv{{ msg }} 子组件/divbutton clickadd加一/buttonbutton clickadd2加二/button/div/templatescript
export default {name: HelloWorld,props: {msg: String},data() {return {child: 儿子}},methods: {add() {this.$emit(child)// 触发父组件的自定义事件},add2() {this.$emit(child, 2)// 触发父组件的自定义事件},}
}
/scriptstyle scoped/style父组件 templatediv idapp!-- img altVue logo src./assets/logo.png --h1父组件/h1HelloWorld :msgAppMsg childparentMethod refchildComponentRef /{{ count }}button clickcallChildMethod调用子组件方法/button/div
/templatescript
import HelloWorld from ./components/HelloWorld.vueexport default {components: {HelloWorld},data() {return {AppMsg: Welcome to Your Vue.js App,count: 1}},methods: {parentMethod(e) {if (e) {this.count e} else {this.count}},callChildMethod() {this.$refs.childComponentRef.add(); // 调用子组件的方法this.AppMsg this.$refs.childComponentRef.child; // 访问子组件的属性},}
}
/scriptstyle/style组件的封装
父组件使用被封装的组件
templatediv idmap-container
!-- 使用组件 --mapItem :mapDatamapData :isFullScreenisFullScreen refmapIndex pointermoveclickPointdivclassmap-itemv-for(item, index) in mapData:keyindex:class{ active: index 1 parseInt(pointName) }插槽内容/div/mapItem/div
/template
script
import mapItem from /components/map/index.vue;//引用组件
export default {name: map,data() {return {pointName: ,//传递给组件的数据isFullScreen: true,mapData: [//传递给组件的数据],};},components: {mapItem,//声明组件},mounted() {},methods: {clickPoint(e) {this.pointName e;},},};
/script
style scoped
#map-container {height: 100%;
}
#map-container {display: flex;
}
.margin-top {margin-top: 10px;margin-left: 5px;
}
::v-deep .el-descriptions-item {line-height: 0.85 !important;font-size: 11px;
}
.map-item {border: 1px solid #a3cffe;border-bottom: 0;
}
.map-item:last-child {border-bottom: 1px solid #a3cffe;
}
.active {background-color: #a3cffe;
}
/style组件
templatediv classmap-containerdiv classmap-content/divdiv classmap-right v-if$slots.default
!-- 默认插槽 --slot //div/div
/templatescriptexport default {name: Map,props: {//接受父组件传来的数据mapData: Array,isFullScreen:Boolean,},data() {return {pointName: ,};},mounted() {},methods: {changePoint(e) {this.pointName e;this.$emit(pointermove,this.pointName)},},
};
/scriptstyle scoped
.map-container {height: 100%;width:100%;
}
.map-container {display: flex;
}
.map-container .map-content {flex: 8;
}
.map-container .map-right {flex: 2;
}/styleVue常见问题一组件的使用-CSDN博客
::v-deep和:deep()
在Vue中::v-deep 和 :deep() 都用于修改CSS选择器的作用域。 区别在于
:deep() 是一个伪类选择器可以用于将CSS规则应用于当前组件及其所有子组件中匹配选择器的元素。例如.foo :deep(.bar)会选择包含class为bar的元素的所有嵌套层次结构。::v-deep 是一个特殊的深度作用选择器它只在scoped样式中起作用并且可以将CSS规则应用于当前组件及其所有子组件中匹配选择器的元素。例如.foo::v-deep .bar 会选择包含class为bar的元素的所有嵌套层次结构但仅对 .foo组件的样式生效。
$.nextTick
为什么使用nextTick
因为 vue 采用的异步更新策略当监听到数据发生变化的时候不会立即去更新DOM而是开启一个任务队列并缓存在同一事件循环中发生的所有数据变更;这种做法带来的好处就是可以将多次数据更新合并成一次减少操作DOM的次数如果不采用这种方法假设数据改变100次就要去更新100次DOM而频繁的DOM更新是很耗性能的。
nextTick的作用和使用
nextTick 接收一个回调函数作为参数并将这个回调函数延迟到DOM更新后才执行使用场景想要操作 基于最新数据生成的DOM 时就将这个操作放在 nextTick 的回调中
new Vue({data() {return {message: Hello, Jock!!}},mounted() {this.message Hi,Tomthis.$nextTick(() {// 在DOM更新之后执行的操作console.log(this.$el.textContent) // 输出Hi,Tom})}
})
Vue.set
一般定义在data里的数据,由于双向绑定,操作后会发生改变,但是对于复杂数据类型中的值的改变Vue不能检测,所以我们需要用到Vue.set来实现。
为什么要使用Vue.set 因为 value 数据发生变化的时候Vue 没有立刻去更新 DOM 而是将修改数据的操作放在了一个异步操作队列中如果一直修改相同数据异步操作队列还会进行去重等待同一事件循环中的所有数据变化完成之后会将队列中的事件拿来进行处理进行 DOM 的更新.
Vue.set的使用:
Vue.set( target, key, value ) target要更改的数据源(可以是对象或者数组) key要更改的具体数据 value 重新赋的值
Vuex
官方文档开始 | Vuex
v-show和v-if v-show是通过控制dom元素的display属性来控制元素的显示与隐藏而v-if是直接在dom树中添加或者删除元素来控制元素的显示与隐藏。切换条件时v-if控制的元素会进行销毁和重建而v-show控制的元素只是进行css切换。如果进行不断的条件切换时因为v-if会对元素进行销毁和重建所以消耗的性能更大v-show只是对css进行变更所以消耗的性能更小。
Vue2和Vue3的区别和优点
Vue2和Vue3的区别
Vue 2和Vue 3之间的主要区别体现在多个方面包括底层API、语法、根节点、兼容性、生态支持以及开发工具的支持。以下是详细的对比
底层API和响应式原理
Vue 2使用Object.defineProperty来实现响应式数据这种方式可以劫持对象的属性但对于数组和对象的变化处理不够灵活新增属性需要手动处理才能实现响应式。Vue 3采用Proxy来实现响应式数据可以劫持整个对象递归返回属性的值的代理从而实现对整个对象的深度监听包括属性的新增和删除。
根节点
Vue 2必须有一个根节点。Vue 3可以没有根节点多个根节点会被默认包裹在一个Fragment虚拟标签中这有助于减少内存使用。
兼容性
Vue 2不支持IE8及以下版本。Vue 3不支持IE11及以下版本。
语法和API
Vue 2采用选项式API将数据和函数集中在一个对象中处理这种方式在复杂项目中不利于代码的阅读和维护。Vue 3采用组合式API将同一个功能的代码集中在一起处理使得代码更加有序有利于代码的书写和维护。
开发工具
Vue 2主要使用Vetur插件进行代码高亮和语法提示Vue 2 Snippets提供语法片段支持。Vue 3推荐使用Volar插件进行代码高亮和语法提示Vue 3 Snippets提供更好的Vue 3支持。
生态支持
Vue 2由JavaScript编写对TypeScript的支持相对较弱。Vue 3由TypeScript重写提供更好的TypeScript支持有利于使用TypeScript进行开发。
生命周期
Vue3.0中 Composition API 形式的生命周期钩子与Vue2.x中钩子对应关系
beforeCreatesetup()createdsetup()beforeMount onBeforeMountmountedonMountedbeforeUpdateonBeforeUpdateupdated onUpdatedbeforeUnmount onBeforeUnmountunmounted onUnmounted
插槽 插槽就是子组件中的提供给父组件使用的一个占位符用slot标签表示父组件可以在这个占位符中填充任何模板代码如 HTML、组件等填充的内容会替换子组件的slot标签。简单理解就是子组件中留下个“坑”父组件可以使用指定内容来补“坑”。vue插槽之插槽的用法及作用域插槽详解-CSDN博客
官方文档https://v2.cn.vuejs.org/v2/guide/components-slots.html
数据双向绑定的原理 Vue的双向绑定原理是通过数据劫持合发布者-订阅者模式来实现的关键步骤如下
数据劫持Vue组件初始化时对 data 中的 item 进行递归遍历会通过Object.defineProperty()方法来劫持对象的属性这个方法可以对一个对象的属性进行定义或修改包括定义getter和setter。这样当这些被劫持的属性被读取或赋值时就会触发相应的getter或setter函数。依赖收集在编译器编译模板的过程中如果模板中出现了某个数据对象的属性那么Vue会为这个属性添加一个订阅者这个过程就是依赖收集。这样当数据变化时就可以通知所有依赖于这个数据的订阅者进行更新。派发更新当数据发生变化时会触发setter函数进而通知所有的订阅者。订阅者收到通知后就会执行对应的更新函数从而更新视图。视图更新最后Vue会根据更新函数的指示对DOM进行操作从而实现视图的更新。
页面白屏的原因 HTML篇 rem、em、vh、vw、px
em
em是相对长度单位它是基于父元素的字体大小。如父元素的字体大小为14px子元素字体大小为1.2em显示出来的就是16px。当前对行内文本的字体尺寸未被人为设置则相对于浏览器的默认字体尺寸1em 16px。如果自身定义了font-size按自身来计算整个页面内1em不是一个固定的值。 rem rem也是相对单位但它相对的只是HTML根元素font-size的值。 vwvh
vw 就是根据窗口的宽度分成100等份100vw就表示满宽50vw就表示一半宽。vw 始终是针对窗口的宽同理vh则为窗口的高度。在pc端中指的是浏览器的可视区域。在移动端中指的则是布局视口。 px 绝对单位页面按精确像素展示。
H5低版本浏览器如何处理 使用html5.js插件兼容(推荐)
!--[if IE]
script src”http://html5shiv.googlecode.com/svn/trunk/html5.js”/script
![endif]-- CSS篇 CSS3新特性
圆角border-radius div {border-radius: 10px;
} 阴影box-shadow div {box-shadow: 5px 5px 10px #888888;
} 渐变gradient div {background: linear-gradient(to right, red, yellow);
} 变换transform div:hover {transform: rotate(360deg);
} 动画animation keyframes example {from {background-color: red;}to {background-color: yellow;}
}div {animation-name: example;animation-duration: 4s;
} 多列布局multi-column layout div {column-count: 3;
} 过渡效果transition div:hover {transition: all 0.3s ease-in-out;
} 用户界面UI input[typerange] {-webkit-appearance: none;background: #333;height: 10px;
} 2D/3D转换transform) div {transform: translate(50px, 100px) rotate(360deg) scale(1.5);
} 文字效果text-effects div {text-shadow: 2px 2px 2px #888888;
} 伪元素::before, ::after、媒体查询media、字体图标font-face、网格布局、弹性布局、透明度等。
display: none 和 visibily: hidden 区别?
display:none隐藏对应的元素整个元素消失不占空间。visibily:hidden隐藏对应的元素元素还会占用空间。
JS篇
typeof和instanceof的区别是什么
作用typeof检测数据类型操作符返回一个字符串表示未经计算的操作数的类型。instanceof检测对象之间的关联性运算符用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上。返回值typeof返回小写字母字符串表示数据属于什么类型instanceof返回布尔值。操作数typeof是简单数据类型、函数或者对象instanceof的左边必须是引用数据类型右边必须是函数。操作数数量typeof是1个instanceof是2个。 typeof的用法
typeof John // 返回 string
typeof 3.14 // 返回 number
typeof false // 返回 boolean
typeof [1,2,3,4] // 返回 object
typeof {name:John, age:34} // 返回 object
typeof undefined // undefined
typeof Symbol() // symbol
typeof null // object
instanceof 的用法
// 定义构建函数
let Car function() {}
let benz new Car()
benz instanceof Car // true
let car new String(xxx)
car instanceof String // true
let str xxx
str instanceof String // falseinstanceof的底层原理 instanceof查找构造函数的原型对象是否在实例对象的原型链上如果在返回true如果不在返回false。 所以只要右边变量的 prototype 在左边变量的原型链上即可。因此instanceof 在查找的过程中会遍历左边变量的原型链直到找到右边变量的 prototype如果查找失败则会返回 false。
function instance_of(L, R) {//L 表示左表达式R 表示右表达式 var O R.prototype; // 取 R 的显示原型 L L.__proto__; // 取 L 的隐式原型while (true) { if (L null) return false; if (O L) // 当 O 显式原型 严格等于 L隐式原型 时返回truereturn true; L L.__proto__; }
}懒加载 懒加载也就是延迟加载。当访问一个页面的时候先把img元素或是其他元素的背景图片路径替换成一张大小为1*1px图片的路径这样就只需请求一次俗称占位图只有当图片出现在浏览器的可视区域内时才设置图片正真的路径让图片显示出来。这就是图片懒加载。 懒加载的原理
页面中的img元素如果没有src属性浏览器就不会发出请求去下载图片只有通过javascript设置了图片路径浏览器才会发送请求。懒加载的原理就是先在页面中把所有的图片统一使用一张占位图进行占位把真正的路径存在元素的“data-url”这个名字起个自己认识好记的就行属性里要用的时候就取出来再设置 懒加载的实现步骤
首先不要将图片地址放到src属性中而是放到其它属性(data-original)中。页面加载完成后根据scrollTop判断图片是否在用户的视野内如果在则将data-original属性中的值取出存放到src属性中。在滚动事件中重复判断图片是否进入视野如果进入则将data-original属性中的值取出存放到src属性中。 懒加载的优点 页面加载速度快、可以减轻服务器的压力、节约了流量用户体验好。
promise
对象的遍历
使用for...in循环
let obj { a: 1, b: 2, c: 3 };
for (let key in obj) {if (obj.hasOwnProperty(key)) { // 确保属性是对象自身的而不是继承的console.log(key, obj[key]);}
} 使用Object.keys()结合forEach
let obj { a: 1, b: 2, c: 3 };
Object.keys(obj).forEach(key {console.log(key, obj[key]);
});
使用Object.entries()结合for...of循环
let obj { a: 1, b: 2, c: 3 };
for (let [key, value] of Object.entries(obj)) {console.log(key, value);
}
使用Object.getOwnPropertyNames()结合forEach
深拷贝和浅拷贝
let obj { a: 1, b: 2, c: 3 };
Object.getOwnPropertyNames(obj).forEach(key {console.log(key, obj[key]);
});
闭包 闭包closure是一个函数以及它所引用环境的组合。创建闭包的常见方式是在一个函数内部创建另一个函数而该内部函数可以访问外部函数的局部变量即使外部函数已经执行完毕。【JavaScript】一文了解JS的闭包_js闭包-CSDN博客
防抖与节流
防抖触发高频事件后 n 秒内函数只会执行一次如果 n 秒内高频事件再次被触发则重新计算时间。作用防止事件连续或高频触发让它只触发一次或者最后一次。 var btn document.querySelector(button);
var tiemr null;
btn.onclick function () {clearInterval(tiemr);tiemr setTimeout(() {console.log(触发了)}, 500)
}节流高频事件触发但在 n 秒内只会执行一次所以节流会稀释函数的执行频率。作用降低事件触发的频率比如1s内最多执行一次。 let btn document.querySelector(button);
let jie true;
btn.onclick function () {if (jie) {jie false;console.log(触发了);setTimeout(() {jie true;}, 2000)}
}
axios的封装 Axios 是一个基于 promise 网络请求库。封装后我们只需要改变方法请求路径和请求返回的数据即可发送网络请求省去大量重复的代码。
Axios封装代码
import axios from axios;// 创建axios实例
const service axios.create({baseURL: process.env.VUE_APP_BASE_API, // api的base_urltimeout: 5000 // 请求超时时间
});// 请求拦截器
service.interceptors.request.use(config {// 可以在这里添加请求头等信息// 例如config.headers[Authorization] Bearer your-token;return config;},error {// 请求错误处理console.log(error); // for debugPromise.reject(error);}
);// 响应拦截器
service.interceptors.response.use(response {// 对响应数据做处理例如只返回data部分const res response.data;// 如果返回的状态码为200说明成功可以直接返回数据if (res.code 200) {return res.data;} else {// 其他状态码都当作错误处理// 可以在这里对不同的错误码进行不同处理return Promise.reject({message: res.message || Error,status: res.code});}},error {// 对响应错误做处理console.log(err error); // for debugreturn Promise.reject(error);}
);export default service;
Axios封装后的使用
import service from /utils/request;// 获取用户列表
export function getUserList(params) {return service.get(/user/list, { params: params });
}// 创建用户
export function createUser(data) {return service.post(/user/create, data);
}// 更新用户信息
export function updateUser(id, data) {return service.put(/user/update/${id}, data);
} 数组常用方法 push() - 在数组末尾添加一个或多个元素并返回新的长度。 pop() - 删除数组的最后一个元素并返回那个元素。 shift() - 删除数组的第一个元素并返回那个元素。 unshift() - 在数组的开始添加一个或多个元素并返回新的长度。 slice() - 选取数组的一部分返回数组的一个浅拷贝。 splice() - 通过删除现有元素和/或添加新元素来更改一个数组的内容。 concat() - 连接两个或更多数组并返回一个新数组。 join() - 将数组中的所有元素转换为一个字符串。 reverse() - 颠倒数组中元素的顺序。 sort() - 对数组的元素进行排序。 forEach() - 遍历数组中的每个元素并执行回调函数。 map() - 创建一个新数组其结果是该数组中的每个元素是调用一次提供的函数后的返回值。 filter() - 创建一个新数组, 其包含通过所提供函数符合条件所有元素。 reduce() - 对数组中的每个元素执行一个由您提供的reducer函数升序执行将其结果汇总为单个返回值。 reduceRight() - 对数组中的每个元素执行一个由您提供的reducer函数降序执行将其结果汇总为单个返回值。 some() - 检测数组元素中是否有元素符合指定条件。 fill() - 使用一个固定值来填充数组。
更多内容参考JavaScript Array 对象 | 菜鸟教程
Git篇
版本冲突和回退
网络综合篇
url请求的过程
浏览器进程与网络进程的通信浏览器进程通过进程间通信(IPC)将URL请求发送至网络进程。
本地缓存检查网络进程首先检查本地缓存是否有所请求的资源。如果有缓存资源则直接返回给浏览器进程如果没有则进入网络请求流程。
DNS解析在进行网络请求前需要进行DNS解析以获取请求域名的服务器IP地址。如果请求协议是HTTPS还需要建立TLS连接。
TCP连接建立利用IP地址和服务器建立TCP连接。
构建请求信息连接建立后浏览器端会构建请求行、请求头等信息并将和该域名相关的Cookie等数据附加到请求头中然后向服务器发送构建的请求信息。
服务器响应服务器接收到请求信息后根据请求信息生成响应数据包括响应行、响应头和响应体等信息并发给网络进程。
响应头解析网络进程接收响应行和响应头后开始解析响应头的内容。如果发现返回的状态码是301或302说明需要进行重定向到其他URL。
重定向处理网络进程从响应头的Location字段里读取重定向的地址然后发起新的HTTP或HTTPS请求重新开始整个过程。 文章转载自: http://www.morning.sdamsm.com.gov.cn.sdamsm.com http://www.morning.llllcc.com.gov.cn.llllcc.com http://www.morning.txtzr.cn.gov.cn.txtzr.cn http://www.morning.hhxpl.cn.gov.cn.hhxpl.cn http://www.morning.zhnyj.cn.gov.cn.zhnyj.cn http://www.morning.hkcjx.cn.gov.cn.hkcjx.cn http://www.morning.fndmk.cn.gov.cn.fndmk.cn http://www.morning.prls.cn.gov.cn.prls.cn http://www.morning.wljzr.cn.gov.cn.wljzr.cn http://www.morning.xqmd.cn.gov.cn.xqmd.cn http://www.morning.xhhqd.cn.gov.cn.xhhqd.cn http://www.morning.rgpsq.cn.gov.cn.rgpsq.cn http://www.morning.lqchz.cn.gov.cn.lqchz.cn http://www.morning.lrzst.cn.gov.cn.lrzst.cn http://www.morning.knpmj.cn.gov.cn.knpmj.cn http://www.morning.xswrb.cn.gov.cn.xswrb.cn http://www.morning.dbnpz.cn.gov.cn.dbnpz.cn http://www.morning.qghjc.cn.gov.cn.qghjc.cn http://www.morning.brjq.cn.gov.cn.brjq.cn http://www.morning.leeong.com.gov.cn.leeong.com http://www.morning.lqypx.cn.gov.cn.lqypx.cn http://www.morning.rkck.cn.gov.cn.rkck.cn http://www.morning.tmzlt.cn.gov.cn.tmzlt.cn http://www.morning.rqkk.cn.gov.cn.rqkk.cn http://www.morning.rbbzn.cn.gov.cn.rbbzn.cn http://www.morning.qlsbz.cn.gov.cn.qlsbz.cn http://www.morning.cpktd.cn.gov.cn.cpktd.cn http://www.morning.bnmrp.cn.gov.cn.bnmrp.cn http://www.morning.incmt.com.gov.cn.incmt.com http://www.morning.mzwqt.cn.gov.cn.mzwqt.cn http://www.morning.jpqmq.cn.gov.cn.jpqmq.cn http://www.morning.ywndg.cn.gov.cn.ywndg.cn http://www.morning.zfrs.cn.gov.cn.zfrs.cn http://www.morning.epeij.cn.gov.cn.epeij.cn http://www.morning.skrxp.cn.gov.cn.skrxp.cn http://www.morning.lgmty.cn.gov.cn.lgmty.cn http://www.morning.wtdyq.cn.gov.cn.wtdyq.cn http://www.morning.srbfp.cn.gov.cn.srbfp.cn http://www.morning.pqchr.cn.gov.cn.pqchr.cn http://www.morning.yrmpz.cn.gov.cn.yrmpz.cn http://www.morning.ttxnj.cn.gov.cn.ttxnj.cn http://www.morning.gccrn.cn.gov.cn.gccrn.cn http://www.morning.mbfkt.cn.gov.cn.mbfkt.cn http://www.morning.iqcge.com.gov.cn.iqcge.com http://www.morning.nzfqw.cn.gov.cn.nzfqw.cn http://www.morning.fslxc.cn.gov.cn.fslxc.cn http://www.morning.cndxl.cn.gov.cn.cndxl.cn http://www.morning.ynrzf.cn.gov.cn.ynrzf.cn http://www.morning.rdymd.cn.gov.cn.rdymd.cn http://www.morning.elmtw.cn.gov.cn.elmtw.cn http://www.morning.nrfrd.cn.gov.cn.nrfrd.cn http://www.morning.hcwjls.com.gov.cn.hcwjls.com http://www.morning.qtxwb.cn.gov.cn.qtxwb.cn http://www.morning.rgpy.cn.gov.cn.rgpy.cn http://www.morning.mqxrx.cn.gov.cn.mqxrx.cn http://www.morning.gkgr.cn.gov.cn.gkgr.cn http://www.morning.xjnjb.cn.gov.cn.xjnjb.cn http://www.morning.gkmwk.cn.gov.cn.gkmwk.cn http://www.morning.gyxwh.cn.gov.cn.gyxwh.cn http://www.morning.sqmlw.cn.gov.cn.sqmlw.cn http://www.morning.zthln.cn.gov.cn.zthln.cn http://www.morning.kjcfz.cn.gov.cn.kjcfz.cn http://www.morning.dlhxj.cn.gov.cn.dlhxj.cn http://www.morning.qmncj.cn.gov.cn.qmncj.cn http://www.morning.ksggr.cn.gov.cn.ksggr.cn http://www.morning.xdmsq.cn.gov.cn.xdmsq.cn http://www.morning.qmzwl.cn.gov.cn.qmzwl.cn http://www.morning.qzpkr.cn.gov.cn.qzpkr.cn http://www.morning.cywf.cn.gov.cn.cywf.cn http://www.morning.hqrr.cn.gov.cn.hqrr.cn http://www.morning.kqwsy.cn.gov.cn.kqwsy.cn http://www.morning.hcgbm.cn.gov.cn.hcgbm.cn http://www.morning.fkfyn.cn.gov.cn.fkfyn.cn http://www.morning.tqbqb.cn.gov.cn.tqbqb.cn http://www.morning.gbfck.cn.gov.cn.gbfck.cn http://www.morning.jhrlk.cn.gov.cn.jhrlk.cn http://www.morning.yxlhz.cn.gov.cn.yxlhz.cn http://www.morning.kpzbf.cn.gov.cn.kpzbf.cn http://www.morning.bfbl.cn.gov.cn.bfbl.cn http://www.morning.lthgy.cn.gov.cn.lthgy.cn