做网站建设怎么样,爱站网 关键词挖掘,泰州市建设工程招标网,食品网站建设客户需求调查表文章目录 主要内容一、vite脚手架工具初始化项目二、项目代码加入eslint校验和自动格式化2.1安装对应依赖插件2.2 配置script脚本#xff0c;项目安装eslint配置2.3 安装完成后#xff0c;后面启动项目还缺少一些依赖#xff0c;提前按需安装好 三#xff0c;修改eslintrc.… 文章目录 主要内容一、vite脚手架工具初始化项目二、项目代码加入eslint校验和自动格式化2.1安装对应依赖插件2.2 配置script脚本项目安装eslint配置2.3 安装完成后后面启动项目还缺少一些依赖提前按需安装好 三修改eslintrc.cjs文件四、修改vue.config.ts文件五、修改添加常见配置六、Husky、lint-staged、commitlint功能添加七、stylelint钩子校验css八、环境配置开发预发生产环境九、vite.config.js配置十、添加路由十一、添加api,封装请求axios十二、pinia状态管理器 主要内容 vite,eslint,prettierrc,husky,commitlint,lint-staget,stylelintvuexvue-routeraxiospinia 环境win11node 18.17.0 pnpm 8.12.0 一、vite脚手架工具初始化项目
vite官网初始化项目https://cn.vitejs.dev/guide/本文以pnpm创建项目
# npm 7, extra double-dash is needed:
npm create vitelatest vue3_project_template --template vue-ts# yarn
yarn create vite vue3_project_template --template vue-ts# pnpm
pnpm create vite vue3_project_template --template vue-ts# bun
bunx create-vite vue3_project_template --template vue-ts创建好项目根据创建项目提示输入命令 cd vue3_project_templatepnpm installpnpm run dev运行结果如下
二、项目代码加入eslint校验和自动格式化 node工具eslint官网 eslint 运行代码前就可以发现一些语法错误和潜在bug保证团队代码的一直性 prettier格式化官网 prettier 是代码格式化工具用于检查代码中的格式问题 区别联系eslint保证代码质量prettier保证代码风格eslint有小部分格式化功能通常和prettier结合使用 2.1安装对应依赖插件 eslint ESLint的核心代码库 prettierprettier格式化代码的核心库 eslint-config-airbnb-base airbnb的代码规范 (依赖plugin-import) eslint-config-prettiereslint结合prettier的格式化 eslint-plugin-vueeslint在vue里的代码规范 eslint-plugin-import项目里面支持eslint eslint-plugin-prettier将prettier结合进入eslint的插件 pnpm install eslint eslint-plugin-vue eslint-config-prettier prettier eslint-plugin-import eslint-plugin-prettier eslint-config-airbnb-base -Dvscode 安装两个插件 2.2 配置script脚本项目安装eslint配置
在package.json文件scripts加入命令 lint:create:eslint --init 执行npm run lint:create
npm run lint:create执行之后会自动创建.eslintrc.cjs文件
2.3 安装完成后后面启动项目还缺少一些依赖提前按需安装好 typescript-esTint/parser: ESLint的解析器用于解析typescript从而检查和规范Typescript代码; typescript-eslint/eslint-plugin: 这是一个ESLint插件包含了各类定义好的检测Typescript代码的规范 eslint-import-resolver-alias 让我们可以import的时候使用 别名 pnpm install typescript typescript-eslint/parser typescript-eslint/eslint-plugin eslint-import-resolver-alias types/eslint types/node -D三修改eslintrc.cjs文件
eslintrc.cjs主要内容如下
module.exports {// 环境 浏览器最新ES语法node环境env: {browser: true,es2021: true,node: true},/*** 扩展的eslint规范语法可以被继承的规则字符串数组每个配置继承它之前的配置* 分别是eslint-config-vue 提供的* eslint-config-airbnb-base 提供的* eslint-config-prettier 提供的* eslint-config- 前缀可以简写*/extends: [eslint:recommended,plugin:typescript-eslint/recommended,plugin:vue/vue3-essential,airbnb-base,prettier],// eslint 会对代码进行校验parser是将代码转换为ESTree(AST),ESlint会对ESTree校验parser: vue-eslint-parser,// 解析器的配置项parserOptions: {// eslint的版本号或者年份都可以ecmaVersion: latest,parser: typescript-eslint/parser,sourceType: module,// 额外的语言类型ecmaFeatures: {jsx: true,tsx: true}},// 全局自定义宏这样在源文件中使用全局变量不会报错或警告globals: {defineProps: readonly,defineEmits: readonly,defineExpose: readonly,withDefaults: readonly},/*** 插件* eslint-plugin- 前缀可以简写* vue官方提供了一个eslint插件eslint-plugin-vue它提供了parser和rules。* parser为vue-eslint-parser放在前面的parser字段里rules放在extends字段里*/plugins: [typescript-eslint,vue],settings: {// 设置项目内的别名import/resolver: {alias: {map: [[,./src]]}},import/extensions: [.js,.jsx,.tsx,.ts,.mjs,.cjs]},/*** rules: 自定义规则覆盖extends继承的规则对规则进行灵活配置** off 或 0 关闭规则* warn 或 1 打开的规则作为警告不影响代码执行* error 或 2 规则作为一个错误代码不能执行界面报错*/rules: {// eslinthttps://eslint.bootcss.com/docs/rules/no-var: error, // 要求使用 let 或 const 而不是 varno-multiple-empty-lines: [warn, { max: 2 }], // 不允许多个空行no-console: process.env.NODE_ENV production ? error : off,no-debugger: process.env.NODE_ENV production ? error : off,no-unexpected-multiline: error, // 禁止空余的多行no-useless-escape: off, // 禁止不必要的转义字符import/no-unresolved: off,import/extensions: off,import/no-absolute-path: off,import/no-extraneous-dependencies: off,import/prefer-default-export: off,// typeScript (https://typescript-eslint.io/rules)typescript-eslint/no-unused-vars: error, // 禁止定义未使用的变量typescript-eslint/prefer-ts-expect-error: error, // 禁止使用 ts-ignoretypescript-eslint/no-explicit-any: off, // 禁止使用 any 类型typescript-eslint/no-non-null-assertion: off,typescript-eslint/no-namespace: off, // 禁止使用自定义 TypeScript 模块和命名空间。typescript-eslint/semi: off,// eslint-plugin-vue (https://eslint.vuejs.org/rules/)vue/multi-word-component-names: off, // 要求组件名称始终为 “-” 链接的单词vue/script-setup-uses-vars: error, // 防止script setup使用的变量template被标记为未使用vue/no-mutating-props: off, // 不允许组件 prop的改变vue/attribute-hyphenation: off, // 对模板中的自定义组件强制执行属性命名样式},
}
修改package.json文件添加如下命令
lint: eslint \src/**/*.{js,ts,vue}\ --fix
四、修改vue.config.ts文件 pnpm install vite-plugin-eslint -D vite的一个插件让项目可以方便的得到eslint支持完成eslint配置后可以快速的将其集成进vite中便于在代码不符合eslint规范的第一时间看到提示 pnpm install vite-plugin-eslint -D import eslintPlugin from “vite-plugin-eslint” plugins: [vue(),eslintPlugin()], 五、修改添加常见配置 项目根目录创建以下配置文件 .eslintrcignore 忽略校验文件 .prettierrc.cjs 配置格式化规则 .prettierignore 忽略格式化文件 .eslintrcignore
# .eslintrcignore*.sh
node_modules
*.md
*.woff
*.ttf
dist
/pubilc
/docs
.husky
/bin
.eslintrc.js
perttier.config.js
/src/mock/*# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
pnpm-debug.log*
lerna-debug.log*.DS_Store
dist-ssr
*.local/cypress/videos/
/cypress/screenshots/# Editor directories and files
.vscode
!.vscode/extensions.json
.idea
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?components.d.ts
.prettierrc.cjs
module.exports {printWidth: 80, // 一行最多100字符tabWidth: 2, // 使用2个空格缩进useTabs: false, // 不适用缩进符使用空格semi: false, // 行尾是否要有分号singleQuote: true, // 使用单引号quoteProps: as-needed, // 对象的key仅仅在必要时使用引号jsxSingleQuote: false, // jsx是否使用双引号trailingComma: es5, // 尾随逗号bracketSpacing: true, // 大括号内的首尾需要有空格arrowParens: always, // 箭头函数是有一个参数的时候也需要小括号rangeStart: 0, // 文件格式化的范围是全部内容rangeEnd: Infinity,requirePragma: false, // 不需要写文件开头的 prettierinsertPragma: false, // 不需要在文件开头插入 prettierproseWrap: always, // 使用默认执行标准htmlWhitespaceSensitivity: css, // 根据显示样式决定html是否执行endOfLine: lf // 换行符是有lf
}.prettierignore
# prettierignore
/dist/*
.local
.output.js
/node_modules/**
src/.DS_Store**/*.svg
**/*.sh
/pubilc/*
components.d.ts在package.json添加格式化命令
prettier-format: prettier --config .prettierrc.cjs \src/**/*.{js,ts,vue}\ --write
六、Husky、lint-staged、commitlint功能添加 husky是一个我git客户端增加hook钩子的工具在一些git操作前自动触发的函数https://ty.picode.github.io/husky/#/;如果我们希望在检测错误的同事自动修复eslint语法错误就可以通过后面的钩子实现 lint-staged过滤出Git代码暂存区文件被git add的文件的工具将所有暂存文件的列表传递给任务 commitlint是对我们git commit提交的注释进行校验的工具 可以让我们在如git commitgit push执行前预先处理我们指定的任务
pnpm install lint-staged husky -D配置package.json文件 新项目需要先git init 一下 prepare:husky install 执行命令 npm run prepare
后面就开始添加各种git hook钩子 pre-commit钩子一般添加的是lint-stage 去对git暂存区的代码做一些格式化操作 npx husky add .husky/pre-commit npx lint-staged add — 追加 set — 直接覆盖 lint-staged对add之后暂存区里面的文件进行格式化修复等工作 pnpm install lint-staged -D packge.json文件中添加
lint-staged: {src/**/*.{js,ts,vue}: [prettier --write,eslint --fix,git add]
},或者放入脚本命令
lint-staged: {*.{js,ts,vue,tsx,jsx}: [npm run lint,npm run prettier-format]
}或者
*.{ts,js,vue}: [eslint --fix
],
*.{html,scss,css,vue}: [prettier --write,stylelint --fix
]packge.json文件里面 添加有两个脚本命令 lint: eslint \src/**/*.{js,ts,vue}\ --fix, 既可以检查又可以修复部分语法问题 prettier-format: prettier --config .prettierrc.cjs \src/**/*.{js,ts,vue}\ --write, 利用prettier手动格式化一些样式问题
git commit提交时说明清楚更新内容 pnpm install commitlint/config-conventional commitlint/cli -D 安装两个库然后新建一个代码提交配置文件config 添加到git钩子 npx husky add .husky/commit-msg npx --no -- commitlint --edit ${1} 通过一个命令添加钩子 使用git commit -m “提交说明” 进行提交提交说明尽量清晰明了说明本次提交的目的推荐使用angular规范这是目前使用最广泛的写法 项目根目录添加commitlint.config.cjs文件
// commitlint.config.cjsmodule.exports {extends: [commitlint/config-conventional],rules: {type-enum: [2,always,[build, // 编译相关的修改例如发布版本对项目构建或者依赖的改动feat, // 新功能fix, // 修复bugupd, // 更新某个功能refactor, // 重构docs, // 文档chore, // 构建过程或辅助工具的变动比如增加依赖库style, // 格式不影响代码运行的变动revert, // 撤销commit回滚到上一个版本perf, // 性能优化test, // 测试单元集成测试],],type-case: [0],type-empty: [0],scope-empty: [0],scope-case: [0],subject-full-stop: [0,never],subject-case: [0,never],header-max-length: [0,always,72],},
};常用的git hooks pre-commit由git commit 调用在commit之前执行 commit-msg由git commit或git merge调用 pre-merge-commit由git merge 调用 在merge之前执行 pre-push被git push 调用在git push 前执行防止进行推送 七、stylelint钩子校验css css 代码检查器linter帮助规避css代码中错误并保持一致的编码风格 安装 vscode插件stylelint插件 修改setting.json添加下面几行代码
{editor.codeActionsOnSave: {source.fixAll.stylelint: true},stylelint.validate: [ css, scss, less, vue]
}安装依赖 pnpm install --save-dev stylelint stylelint-config-standard 根目录创建 .stylelintrc.cjs
// see https://stylelint.bootcss.com/module.exports {extends: [stylelint-config-standard, // 配置stylelint拓展插件stylelint-config-html/vue, // 配置 vue 中 template 样式格式化stylelint-config-standard-scss, // 配置stylelint scss插件stylelint-config-recommended-vue/scss, // 配置 vue 中 scss 样式格式化stylelint-config-recess-order, // 配置stylelint css属性书写顺序插件,stylelint-config-prettier, // 配置stylelint和prettier兼容],overrides: [{files: [**/*.(scss|css|vue|html)],customSyntax: postcss-scss,},{files: [**/*.(html|vue)],customSyntax: postcss-html,},],ignoreFiles: [**/*.js,**/*.jsx,**/*.tsx,**/*.ts,**/*.json,**/*.md,**/*.yaml,],/*** null 关闭该规则* always 必须*/rules: {value-keyword-case: null, // 在 css 中使用 v-bind不报错no-descending-specificity: null, // 禁止在具有较高优先级的选择器后出现被其覆盖的较低优先级的选择器function-url-quotes: always, // 要求或禁止 URL 的引号 always(必须加上引号)|never(没有引号)no-empty-source: null, // 关闭禁止空源码selector-class-pattern: null, // 关闭强制选择器类名的格式property-no-unknown: null, // 禁止未知的属性(true 为不允许)block-opening-brace-space-before: always, //大括号之前必须有一个空格或不能有空白符value-no-vendor-prefix: null, // 关闭 属性值前缀 --webkit-boxproperty-no-vendor-prefix: null, // 关闭 属性前缀 -webkit-maskselector-pseudo-class-no-unknown: [// 不允许未知的选择器true,{ignorePseudoClasses: [global, v-deep, deep], // 忽略属性修改element默认样式的时候能使用到},],},
}这是一个标准样式库也可自动加一下样式规则在.stylelintrc.cjs文件里面 执行命令 npx stylelint **/*.css 发现项目里面的style.css全局样式报错具体到对应文件安ctrls就回执行自动格式化我们在setting.json里面添加的json语句 修改错误的颜色值之后执行 npx stylelint **/*.css 会告诉我们颜色错误 增加对vue里面的样式校验附带less和sass的支持 pnpm install stylelint-less stylelint-config-recommended-less -D 对less的支持 pnpm install stylelint-scss stylelint-config-recommended-scss postcss -D 对sass的支持 pnpm install postcss-html stylelint-config-standard-scss stylelint-config-recommended-vue postcss -D 对vue里面的样式支持vue样式需要依赖这个库 vite 也同时提供了对.scss.sass.less.style和.stylus文件的内置支持不需要在安装特定插件和预处理器
extends: [stylelint-config-standard,stylelint-config-recommended-less,stylelint-config-recommended-scss,stylelint-config-recommended-vuesass的extends
extends: [stylelint-config-standard-scss,stylelint-config-recommended-vue/scss,
]新建.stylelintignore文件 .stylelintignore 忽略文件校验 /node_modules/*
/dist/*
/html/*
/public/*修改package.json文件 lint:css: stylelint src/**/*.{css,scss,sass,less,html,vue} --cache --fix 给vite添加插件 pnpm install vite-plugin-stylelint -D 添加完成依赖然后修改vite.config.js import StylelintPlugin from vite-plugin-stylelint plugin:[... StylelintPlugin({fix:true}) 添加到lint-staged在暂存区自动对文件进行格式化
lint-staged: {*.{js,ts,vue,tsx,jsx}: [npm run lint,npm run prettier-format],*.{vue,less,scss,sass,html}: [npm run lint:css]}添加完成后在进行代码commit的时候就会执行npm run lint:css命令校验我们的css代码了
八、环境配置开发预发生产环境 开发环境开发人员开发的环境 测试环境测试人员测试的环境 预发环境准备上线的环境也可叫内测环境 生产环境正式线上环境投入生产的环境 这里我们配置两个环境一个测试环境和生产环境 开发人员和测试人员使用测试环境修改package.json文件添加两个命令 build:dev: vue-tsc --noEmit vite build --mode development, build:pro: vue-tsc --noEmit vite build --mode production, 新建两个配置文件 .env.development开发测试环境 .env.production生产环境 # .env.development
# 变量必须以 VITE_ 为前缀才能暴露给外部读取
NODE_ENV development
VITE_APP_TITLE 项目模版
VITE_APP_BASE_API /dev_api# .env.production
# 变量必须以 VITE_ 为前缀才能暴露给外部读取
NODE_ENV production
VITE_APP_TITLE 项目模版
VITE_APP_BASE_API /pro_api九、vite.config.js配置
/* eslint-disable import/no-extraneous-dependencies */
import { defineConfig, loadEnv } from vite
import path from path
import vue from vitejs/plugin-vue
import eslintPlugin from vite-plugin-eslint
import StylelintPlugin from vite-plugin-stylelint// https://vitejs.dev/config/
export default defineConfig(({ mode }){const env loadEnv(mode, process.cwd());return {plugins: [vue(), eslintPlugin(), StylelintPlugin({ fix: true })],base: ./, // 在生产中服务时的基本公共路径publicDir: public, // 静态资源服务的文件夹, 默认publicresolve: {alias: {: path.resolve(./src) // 相对路径别名配置使用 代替 src}},// 本地运行配置server: {host: 0.0.0.0, // 指定服务器主机名 0.0.0.0 可以看见network 通过ip访问port: 3000, // 指定服务器端口open: true, // 在服务器启动时自动在浏览器中打开应用程序strictPort: false, // 设置为false时,若端口被占用会尝试下一个可用端口, 而不是直接退出https: false, // 是否开启 httpscors: true, // 为开发服务器配置 CORS, 默认启用并允许任何源proxy: { // 为开发服务器配置自定义代理规则[env.VITE_APP_BASE_API]: {target: http://192.168.xxx.xxx:xxxx, // 代理接口changeOrigin: true,rewrite: (_path) _path.replace(/^\/api/, ),}}},// 打包配置build: {target: modules, // 设置最终构建的浏览器兼容目标。modules:支持原生 ES 模块的浏览器outDir: dist, // 指定输出路径assetsDir: assets, // 指定生成静态资源的存放路径assetsInlineLimit: 4096, // 小于此阈值的导入或引用资源将内联为base64编码设置为0可禁用此项。默认40964kbcssCodeSplit: true, // 启用/禁用CSS代码拆分如果禁用整个项目的所有CSS将被提取到一个CSS文件中,默认truesourcemap: false, // 构建后是否生成 source map 文件minify: terser, // 混淆器terser构建后文件体积更小write: true, // 设置为 false 来禁用将构建后的文件写入磁盘emptyOutDir: true, // 默认情况下若 outDir 在 root 目录下则 Vite 会在构建时清空该目录。chunkSizeWarningLimit: 500, // chunk 大小警告的限制terserOptions: {compress: {drop_console: true,drop_debugger: true,}}, // 去除 console debugger},}
})
十、添加路由
pnpm install vue-router 安装路由依赖在src目录下新建router文件夹index.ts文件
// index.ts
// 通过vue-router插件实现模板路由配置
import { createRouter, createWebHistory } from vue-router
import { constantRoute } from ./routes
// 创建路由器
const router createRouter({// 路由模式hashhistory: createWebHistory(),routes: constantRoute,// 滚动行为scrollBehavior() {return {left: 0,top: 0}}
});
export default router;新建routers.ts文件
export const constantRoute [{// 首页path: /,name: home,component: () import(/views/home/Home.vue),meta: {title: 首页,}},{// 404path: /404,component: () import(/views/404/index.vue),name: 404,meta: {title: 404,}},{// 任意路由path: /:pathMatch(.*)*,redirect: /404,name: Any,meta: {title: 任意路由}}
]修改main.ts文件
import { createApp } from vue
import ./style.css
import App from ./App.vue
// 引入路由
import router from ./routerconst app createApp(App)
app.use(router)
app.mount(#app)
修改App.vue文件
templatedivrouter-view/router-view/div
/template
script setup langts
/script
style scoped/style十一、添加api,封装请求axios
安装依赖pnpm install axios --save新建api文件夹utils文件夹及创建request.ts文件
// 进行axios二次封装:使用请求与响应拦截器
import axios from axios;
// 第一步:利用axios对象的create方法,去创建axios实例(其他的配置:基础路径、超时的时间)
const request axios.create({// 基础路径baseURL: import.meta.env.VITE_APP_BASE_API,// 基础路径上会携带/apitimeout: 5000// 超时的时间的设置
});// 第二步:request实例添加请求与响应拦截器
request.interceptors.request.use((config) // config配置对象,headers属性请求头,经常给服务器端携带公共参数,例如token// 返回配置对象config
);// 第三步:响应拦截器
request.interceptors.response.use((response) // 成功回调// 简化数据response.data
, (error) {// 失败回调:处理http网络错误的// 定义一个变量:存储网络错误信息let message ;// http状态码const {status} error.response;switch (status) {case 401:message TOKEN过期break;case 403:message 无权访问break;case 404:message 请求地址错误;break;case 500:message 服务器出现问题break;default:message 网络出现问题;break;}return Promise.reject(message);
});
// 对外暴露
export default request;api文件夹创建testApi.ts文件文件中引入request.ts
import request from /utils/request;// post接口请求方式
export const testPostApi (data:any) request.post(/api/postUrl,data)// get接口请求方式
export const testGetApi (data:string) request.post(/api/getUrl?id${data})在页面中调用接口
script setup langts
import { ref, reactive, onMounted } from vue
import { testPostApi, testGetApi } from ../../api/testApiconst postApiData () {testPostApi({ username: admin, password: 123456 }).then(res {console.log(res)})
}const getApiData () {testGetApi(SKU12345678).then(res {console.log(res)})
}// 调用接口
onMounted(() {postApiData()getApiData()
})
const count ref(0)
const list reactive([你好, 你好世界])
/script调用结果 十二、pinia状态管理器
安装依赖pnpm install pinia --save在src目录下新建文件夹store,在store文件下新建文件index.ts和modules文件夹
// store/index.ts
// 大仓库
import { createPinia } from pinia;
// 创建大仓库
const pinia createPinia();
// 对外暴露入口文件需要安装仓库
export default pinia;在modules文件下新建test.ts文件
// store/modules/test.ts
// 小仓库
import { defineStore } from pinia;// 选项式API写法
const useTestStore defineStore(test, {state: () ({count: 100,list: [1, 2, 3, 4, 5]}),actions: {updateCount() {this.count 100}},getters: {total() {const num: any this.list.reduce((prev, next) prev next, 0)return num}}
})
export default useTestStoremain.ts内引入store
// 引入store
import store from ./stores
app.use(store)
再页面中使用
templatediv classh1欢迎使用项目模板/h1div classcontentpstore_count{{ storeCount }}/pbutton clickcountcount{{ count }}/buttondiv classlistulli v-foritem in list :keyitem{{ item }}/li/ul/div/div/div
/template
script setup langts
import { ref, reactive, onMounted } from vue
import useTestStore from ../../store/modules/test
import { testPostApi, testGetApi } from ../../api/testApiconst storeCount ref(0)
const userTestStoreData useTestStore()
storeCount.value userTestStoreData.countconst postApiData () {testPostApi({ username: admin, password: 123456 }).then(res {console.log(res)})
}const getApiData () {testGetApi(SKU12345678).then(res {console.log(res)})
}// 调用接口
onMounted(() {postApiData()getApiData()
})
const count ref(0)
const list reactive([你好, 你好世界])
/scriptstyle scoped langscss/style
项目搭建到这里就结束了引入项目UI框架看需求引入再引入对应框架 文章参考【vue3企业级项目骨架搭建涉及vite、eslint、prettierrc、husky、commitlint、lint-staged、stylelint】 文章转载自: http://www.morning.lbqt.cn.gov.cn.lbqt.cn http://www.morning.gychx.cn.gov.cn.gychx.cn http://www.morning.fzwf.cn.gov.cn.fzwf.cn http://www.morning.lwrcg.cn.gov.cn.lwrcg.cn http://www.morning.brkrt.cn.gov.cn.brkrt.cn http://www.morning.rdzlh.cn.gov.cn.rdzlh.cn http://www.morning.i-bins.com.gov.cn.i-bins.com http://www.morning.bpmtr.cn.gov.cn.bpmtr.cn http://www.morning.jrrqs.cn.gov.cn.jrrqs.cn http://www.morning.gnwpg.cn.gov.cn.gnwpg.cn http://www.morning.jtkfm.cn.gov.cn.jtkfm.cn http://www.morning.lqlc.cn.gov.cn.lqlc.cn http://www.morning.pmhln.cn.gov.cn.pmhln.cn http://www.morning.zhiheliuxue.com.gov.cn.zhiheliuxue.com http://www.morning.hjwzpt.com.gov.cn.hjwzpt.com http://www.morning.ylmxs.cn.gov.cn.ylmxs.cn http://www.morning.msgrq.cn.gov.cn.msgrq.cn http://www.morning.pqwrg.cn.gov.cn.pqwrg.cn http://www.morning.rntyn.cn.gov.cn.rntyn.cn http://www.morning.yqyhr.cn.gov.cn.yqyhr.cn http://www.morning.sxbgc.cn.gov.cn.sxbgc.cn http://www.morning.jwbfj.cn.gov.cn.jwbfj.cn http://www.morning.rmqmc.cn.gov.cn.rmqmc.cn http://www.morning.tjmfz.cn.gov.cn.tjmfz.cn http://www.morning.yrxcn.cn.gov.cn.yrxcn.cn http://www.morning.xnkb.cn.gov.cn.xnkb.cn http://www.morning.rfhwc.cn.gov.cn.rfhwc.cn http://www.morning.jmbgl.cn.gov.cn.jmbgl.cn http://www.morning.klwxh.cn.gov.cn.klwxh.cn http://www.morning.fnnkl.cn.gov.cn.fnnkl.cn http://www.morning.cthrb.cn.gov.cn.cthrb.cn http://www.morning.svrud.cn.gov.cn.svrud.cn http://www.morning.cmzgt.cn.gov.cn.cmzgt.cn http://www.morning.ftrpvh.cn.gov.cn.ftrpvh.cn http://www.morning.zpfqh.cn.gov.cn.zpfqh.cn http://www.morning.pgcmz.cn.gov.cn.pgcmz.cn http://www.morning.qxmnf.cn.gov.cn.qxmnf.cn http://www.morning.elsemon.com.gov.cn.elsemon.com http://www.morning.jcyyh.cn.gov.cn.jcyyh.cn http://www.morning.ngzkt.cn.gov.cn.ngzkt.cn http://www.morning.cmzgt.cn.gov.cn.cmzgt.cn http://www.morning.kmbgl.cn.gov.cn.kmbgl.cn http://www.morning.wjhpg.cn.gov.cn.wjhpg.cn http://www.morning.pudejun.com.gov.cn.pudejun.com http://www.morning.zqdzg.cn.gov.cn.zqdzg.cn http://www.morning.qbfwb.cn.gov.cn.qbfwb.cn http://www.morning.xoaz.cn.gov.cn.xoaz.cn http://www.morning.zhiheliuxue.com.gov.cn.zhiheliuxue.com http://www.morning.hmqwn.cn.gov.cn.hmqwn.cn http://www.morning.lfmwt.cn.gov.cn.lfmwt.cn http://www.morning.ffrys.cn.gov.cn.ffrys.cn http://www.morning.qqhfc.cn.gov.cn.qqhfc.cn http://www.morning.xxwfq.cn.gov.cn.xxwfq.cn http://www.morning.qmtzq.cn.gov.cn.qmtzq.cn http://www.morning.trhrk.cn.gov.cn.trhrk.cn http://www.morning.kjrlp.cn.gov.cn.kjrlp.cn http://www.morning.qfgxk.cn.gov.cn.qfgxk.cn http://www.morning.kqpq.cn.gov.cn.kqpq.cn http://www.morning.lmbm.cn.gov.cn.lmbm.cn http://www.morning.xwnnp.cn.gov.cn.xwnnp.cn http://www.morning.xinxianzhi005.com.gov.cn.xinxianzhi005.com http://www.morning.yfddl.cn.gov.cn.yfddl.cn http://www.morning.rywn.cn.gov.cn.rywn.cn http://www.morning.lfsmf.cn.gov.cn.lfsmf.cn http://www.morning.ttrdr.cn.gov.cn.ttrdr.cn http://www.morning.jyznn.cn.gov.cn.jyznn.cn http://www.morning.mnsmb.cn.gov.cn.mnsmb.cn http://www.morning.bfbl.cn.gov.cn.bfbl.cn http://www.morning.lqypx.cn.gov.cn.lqypx.cn http://www.morning.gnfkl.cn.gov.cn.gnfkl.cn http://www.morning.tmlhh.cn.gov.cn.tmlhh.cn http://www.morning.mdjzydr.com.gov.cn.mdjzydr.com http://www.morning.tmsxn.cn.gov.cn.tmsxn.cn http://www.morning.rzdpd.cn.gov.cn.rzdpd.cn http://www.morning.bmncq.cn.gov.cn.bmncq.cn http://www.morning.nqlkb.cn.gov.cn.nqlkb.cn http://www.morning.xwbld.cn.gov.cn.xwbld.cn http://www.morning.mspqw.cn.gov.cn.mspqw.cn http://www.morning.qbksx.cn.gov.cn.qbksx.cn http://www.morning.wwznd.cn.gov.cn.wwznd.cn