当前位置: 首页 > news >正文

网站建设定价户县网站建设

网站建设定价,户县网站建设,苏州精品网站建设,wordpress主题怎么删除边栏APP端#xff1a; 因为APP端无法使用uni的camera组件#xff0c;最开始考虑使用内嵌webview的方式#xff0c;通过原生dom调用video渲染画面然后通过canvas截图。但是此方案兼容性在ios几乎为0#xff0c;如果app只考虑安卓端的话可以采用此方案。后面又想用live-pusher组件…APP端 因为APP端无法使用uni的camera组件最开始考虑使用内嵌webview的方式通过原生dom调用video渲染画面然后通过canvas截图。但是此方案兼容性在ios几乎为0如果app只考虑安卓端的话可以采用此方案。后面又想用live-pusher组件来实现但是发现快照api好像需要真实流地址才能截取图像。因为种种原因也是安卓ios双端兼容性不佳。最终决定采用5api实现。经实测5api兼容性还算可以但是毕竟是调用原生能力肯定是没有原生开发那么丝滑的难免会出现一些不可预测的兼容性问题。所以建议app和手机硬件交互强的话还是不要用uni开发了。不然真的是翻文档能翻死人。社区也找不到靠谱的解决方案。 5api 文档https://www.html5plus.org/doc/zh_cn/video.html#plus.video.createLivePusher 就是使用这个api调用原生的camera完成。并且可以直接在预览模式下完成快照也不需要真实的推流地址。 templateview classcontentview classc-footerview classmsg-boxview classmsg1、请保证本人验证。/viewview classmsg2、请使头像正面位于画框中。/viewview classmsg3、请使头像尽量清晰。/viewview classmsg4、请保证眼镜不反光双眼可见。/viewview classmsg5、请保证无墨镜口罩面膜等遮挡物。/viewview classmsg6、请不要化浓妆不要戴帽子。/view/viewview classbut clicksnapshotPusher v-if!cilckSwitch采集本人人脸/view/view/view /templatescriptimport permission from ../../util/permission.jsexport default {data() {return {type: , //是否是补签拉起的人脸识别imgData: ,pusher: null,scanWin: null,faceInitTimeout: null,snapshTimeout: null,uploadFileTask: null,cilckSwitch: false, //防止多次点击};},methods: {//人脸比对handleFaceContrast(param) {uni.hideLoading()this.$http({url: /API_AUTH/AppIaiFace/faceContrast.api,data: {...param,userid: uni.getStorageSync(userInfo).id}}).then(res {console.log(res)if (res.data.compareResult 1) {let pages getCurrentPages(); //获取所有页面栈实例列表let nowPage pages[pages.length - 1]; //当前页页面实例let prevPage pages[pages.length - 2]; //上一页页面实例if (this.type signOut) {prevPage.$vm.signOutXh param.xh;prevPage.$vm.signOutPhotoPath param.path} else {prevPage.$vm.xh param.xh;prevPage.$vm.photoPath param.path}uni.navigateBack()} else {uni.showToast({title: 人脸比对不通过请重试,icon: none})this.cilckSwitch false}}).catch(err {uni.showToast({title: 人脸比对不通过请重试,icon: none})this.cilckSwitch false})},//初始化faceInit() {uni.showLoading({title: 请稍后...})this.faceInitTimeout setTimeout(async () {//创建livepusherif (uni.getSystemInfoSync().platform android) {const data1 await permission.requestAndroidPermission(android.permission.RECORD_AUDIO)const data2 await permission.requestAndroidPermission(android.permission.CAMERA)console.log(data1,data2,1111)if (data1 1 data2 1) {this.pusherInit();}} else {this.pusherInit();}//覆盖在视频之上的内容根据实际情况编写// this.scanWin plus.webview.create(/hybrid/html/faceTip.html, , {// background: transparent// });//新引入的webView显示// this.scanWin.show();//初始化上传本地文件的apithis.initUploader()}, 500);},//初始化播放器pusherInit() {const currentWebview this.$mp.page.$getAppWebview();this.pusher plus.video.createLivePusher(livepusher, {url: ,top: 0px,left: 0px,width: 100%,height: 50%,position: absolute,aspect: 9:16,muted: false,z-index: 999999,border-radius: 50%,});currentWebview.append(this.pusher);//反转摄像头this.pusher.switchCamera();//开始预览this.pusher.preview();uni.hideLoading()},//初始化读取本地文件initUploader() {let that thisthis.uploadFileTask plus.uploader.createUpload(完整的接口请求地址, {method: POST,headers: {// 修改请求头Content-Type类型 此类型为文件上传Content-Type: multipart/form-data}},// data服务器返回的响应值 status: 网络请求状态码(data, status) {// 请求上传文件成功if (status 200) {console.log(data)// 获取data.responseText之后根据自己的业务逻辑做处理let result JSON.parse(data.responseText);console.log(result.data.xh)that.handleFaceContrast({xh: result.data.xh,path: result.data.path})}// 请求上传文件失败else {uni.showToast({title: 上传图片失败,icon: none})console.log(上传失败, status)that.cilckSwitch falseuni.hideLoading()}});},//快照snapshotPusher() {if (this.cilckSwitch) {uni.showToast({title: 请勿频繁点击,icon: none})return}this.cilckSwitch trueuni.showLoading({title: 正在比对请勿退出})let that thisthis.snapshTimeout setTimeout(() {this.pusher.snapshot(e {// this.pusher.close();// this.scanWin.hide();//拿到本地文件路径var src e.tempImagePath;this.uploadImg(src)//获取图片base64// this.getMinImage(src);},function(e) {plus.nativeUI.alert(snapshot error: JSON.stringify(e));that.cilckSwitch falseuni.hideLoading()});}, 500);},//调用原生能力读取本地文件并上传uploadImg(imgPath) {this.uploadFileTask.addFile(file:// imgPath, {key: file // 填入图片文件对应的字段名});//添加其他表单字段参数 两个参数可能都只支持传字符串// uploadFileTask.addData(参数名, 参数值);this.uploadFileTask.start();},//获取图片base64getMinImage(imgPath) {plus.zip.compressImage({src: imgPath,dst: imgPath,overwrite: true,quality: 40},zipRes {setTimeout(() {var reader new plus.io.FileReader();reader.onloadend res {var speech res.target.result; //base64图片console.log(speech.length);console.log(speech)this.imgData speech;};reader.readAsDataURL(plus.io.convertLocalFileSystemURL(zipRes.target));}, 1000);},function(error) {console.log(Compress error!, error);});},},onLoad(option) {//#ifdef APP-PLUSthis.type option.typethis.faceInit();//#endif},onHide() {console.log(hide)this.faceInitTimeout clearTimeout(this.faceInitTimeout);this.snapshTimeout clearTimeout(this.snapshTimeout);// this.scanWin.hide();},onBackPress() {// let pages getCurrentPages(); //获取所有页面栈实例列表// let nowPage pages[pages.length - 1]; //当前页页面实例// let prevPage pages[pages.length - 2]; //上一页页面实例// prevPage.$vm.xh 11111;// prevPage.$vm.photoPath 22222 this.faceInitTimeout clearTimeout(this.faceInitTimeout);this.snapshTimeout clearTimeout(this.snapshTimeout);// this.scanWin.hide();},onUnload() {this.faceInitTimeout clearTimeout(this.faceInitTimeout);this.snapshTimeout clearTimeout(this.snapshTimeout);// this.scanWin.hide();},}; /scriptstyle langscss scoped.but {margin: 50rpx auto 0;border-radius: 10px;width: 80%;height: 100rpx;display: flex;align-items: center;justify-content: center;background-color: #008AFF;font-size: 16px;color: #FFFFFF;}.c-footer {width: 100%;position: fixed;top: 50%;left: 0;z-index: 10;padding: 30rpx 0;.msg-box {width: 80%;margin: 0 auto;text-align: left;.msg {margin-bottom: 15rpx;font-size: 13px;color: #666;}}}.img-data {width: 100%;height: auto;}.content {background-color: #fff;} /style 以上是完整的包含逻辑的代码。 关键代码 //初始化播放器pusherInit() {const currentWebview this.$mp.page.$getAppWebview();this.pusher plus.video.createLivePusher(livepusher, {url: ,top: 0px,left: 0px,width: 100%,height: 50%,position: absolute,aspect: 9:16,muted: false,z-index: 999999,border-radius: 50%,});currentWebview.append(this.pusher);//反转摄像头this.pusher.switchCamera();//开始预览this.pusher.preview();uni.hideLoading()},//快照snapshotPusher() {if (this.cilckSwitch) {uni.showToast({title: 请勿频繁点击,icon: none})return}this.cilckSwitch trueuni.showLoading({title: 正在比对请勿退出})let that thisthis.snapshTimeout setTimeout(() {this.pusher.snapshot(e { //拿到本地文件路径var src e.tempImagePath;//这里因为接口参数需要加密用base64的话加密出来的参数太大了所以选择了直接读取本地文件上传文件流的方式。this.uploadImg(src)//获取图片base64// this.getMinImage(src);},function(e) {plus.nativeUI.alert(snapshot error: JSON.stringify(e));that.cilckSwitch falseuni.hideLoading()});}, 500);},//获取图片base64getMinImage(imgPath) {plus.zip.compressImage({src: imgPath,dst: imgPath,overwrite: true,quality: 40},zipRes {setTimeout(() {var reader new plus.io.FileReader();reader.onloadend res {var speech res.target.result; //base64图片console.log(speech.length);console.log(speech)this.imgData speech;};reader.readAsDataURL(plus.io.convertLocalFileSystemURL(zipRes.target));}, 1000);},function(error) {console.log(Compress error!, error);});},//初始化读取本地文件initUploader() {let that thisthis.uploadFileTask plus.uploader.createUpload(完整的接口请求地址, {method: POST,headers: {// 修改请求头Content-Type类型 此类型为文件上传Content-Type: multipart/form-data}},// data服务器返回的响应值 status: 网络请求状态码(data, status) {// 请求上传文件成功if (status 200) {console.log(data)// 获取data.responseText之后根据自己的业务逻辑做处理let result JSON.parse(data.responseText);console.log(result.data.xh)that.handleFaceContrast({xh: result.data.xh,path: result.data.path})}// 请求上传文件失败else {uni.showToast({title: 上传图片失败,icon: none})console.log(上传失败, status)that.cilckSwitch falseuni.hideLoading()}});},//调用原生能力读取本地文件并上传uploadImg(imgPath) {this.uploadFileTask.addFile(file:// imgPath, {key: file // 填入图片文件对应的字段名});//添加其他表单字段参数 两个参数可能都只支持传字符串// uploadFileTask.addData(参数名, 参数值);this.uploadFileTask.start();},以上就是关键的代码。 接下来补充几个坑的地方。创建出来的livepusher层级很高无法在同一页面被别的元素遮挡。所以想要在他上面写样式是行不通了。只能再创建一个webview。然后将这个webview覆盖在livepusher上达到人脸识别页面的样式。 //覆盖在视频之上的内容根据实际情况编写this.scanWin plus.webview.create(/hybrid/html/faceTip.html, , {background: transparent});//新引入的webView显示this.scanWin.show();//新引入的webView影藏this.scanWin.hide(); 这种方案在ios基本没问题。至少目前没遇到过。但是安卓就一言难尽了。首先这个组件默认调起的是后置摄像头这显然不符合我们的需求。但是官方提供的文档里也没有明确支持可以配置优先调起哪个摄像头。好早提供了一个switchCamera的api可以翻转摄像头。 但是在安卓系统上尤其是鸿蒙系统调用这个api就会导致程序闪退而且发生频率还特别高。这个问题至今不知道该怎么解决。除了闪退问题安卓还存在一个麻烦事儿那就是首次进入app翻转摄像头的api没有用拉起的还是后置摄像头。但是后续再进入app就无此问题了。后面折腾来折腾去发现好像是首次进入拉起授权弹窗的时候才会出现这种问题。 然后写了个定时器做测试五秒之后再拉起摄像头再去翻转摄像头。然后再五秒内赶紧把授权给同意了。结果发现翻转竟然生效了。 然后决定再渲染推流元素之前先让用户通过权限授权然后再拉起摄像头。 也就是上文完整代码中的 //创建livepusherif (uni.getSystemInfoSync().platform android) {const data1 await permission.requestAndroidPermission(android.permission.RECORD_AUDIO)const data2 await permission.requestAndroidPermission(android.permission.CAMERA)console.log(data1,data2,1111)if (data1 1 data2 1) {this.pusherInit();}} else {this.pusherInit();} 具体的意思就不过多赘述了自行看permission的文档。或者看他的代码。很简单 permission下载地址https://ext.dcloud.net.cn/plugin?id594 以上就是调用原生能力拉起摄像头实现快照功能的所有内容了。 下面也记录一下web端如果实现这种功能毕竟当时搞出来也不容易但是最终还是败在了兼容性上 方案的话大致有两种一种是借助tracking js 有兴趣的可以了解一下一个web端人脸识别库。他可以识别画面中是否出现人脸。以及一下更高级的功能我就没有去探索了。有需要的可以自行研究 !doctype html htmlheadmeta charsetutf-8title人脸识别/titlescript src../html/js/tracking-min.js/scriptscript src../html/js/face-min.js/scriptstylevideo,canvas {position: absolute;}/style/headbodydiv classdemo-containervideo idvideo width320 height240 preload autoplay loop muted/videocanvas idcanvas width320 height240/canvas/divscriptwindow.onload function() {console.log(123123123)// 视频显示var video document.getElementById(video);// 绘图var canvas document.getElementById(canvas);var context canvas.getContext(2d);var time 10000;var tracker new tracking.ObjectTracker(face);// 设置识别的放大比例tracker.setInitialScale(4);// 设置步长tracker.setStepSize(2);// 边缘密度tracker.setEdgesDensity(0.1);// 启动摄像头并且识别视频内容var trackerTask tracking.track(#video, tracker, {camera: true});var flag true;tracker.on(track, function(event) {if (event.data.length 0) {console.log(未检测到人脸)context.clearRect(0, 0, canvas.width, canvas.height);} else if (event.data.length 1) { console.log(检测到多张人脸)} else {context.clearRect(0, 0, canvas.width, canvas.height);event.data.forEach(function(rect) {context.strokeStyle #ff0000;context.strokeRect(rect.x, rect.y, rect.width, rect.height);context.fillStyle #ff0000;//console.log(rect.x, rect.width, rect.y, rect.height);});if (flag) {console.log(拍照);context.drawImage(video, 0, 0, 320, 240);saveAsLocalImage();context.clearRect(0, 0, canvas.width, canvas.height);flag false;setTimeout(function() {flag true;}, time);} else {//console.log(冷却中);}}});};function saveAsLocalImage() {var myCanvas document.getElementById(canvas);// here is the most important part because if you dont replace you will get a DOM 18 exception. // var image myCanvas.toDataURL(image/png).replace(image/png, image/octet-stream;Content-Disposition: attachment;filenamefoobar.png); var image myCanvas.toDataURL(image/png).replace(image/png, image/octet-stream);// window.location.href image; // it will save locally // create temporary link returnvar tmpLink document.createElement(a);tmpLink.download image.png; // set the name of the download file tmpLink.href image;// temporarily add link to body and initiate the download document.body.appendChild(tmpLink);tmpLink.click();document.body.removeChild(tmpLink);}/script/body/html 另外一种就是纯videocanvas截取一张视频中的画面。 !DOCTYPE html html langenheadmeta charsetUTF-8title人脸采集/titlemeta nameviewport contentwidthdevice-width, initial-scale1.0link relstylesheet typetext/css href./css/index.css /script src./js/jq.js typetext/javascript charsetutf-8/script!-- uni 的 SDK --script typetext/javascript srchttps://js.cdn.aliyun.dcloud.net.cn/dev/uni-app/uni.webview.1.5.2.js/scriptscript srchttps://cdn.bootcdn.net/ajax/libs/vConsole/3.0.0/vconsole.min.js typetext/javascriptcharsetutf-8/scriptscript// init vConsoleapp中查看var vConsole new VConsole();// console.log(Hello world);/scriptstyle.mui-content {margin: 0 auto;text-align: center;border: 0px solid red;}/*摄像头翻转180度*/video {transform: rotateY(180deg);-webkit-transform: rotateY(180deg);/* Safari 和 Chrome */-moz-transform: rotateY(180deg);}/style/headbody classbodydiv classmui-contentdiv stylemargin: 40px auto;!-- input typefile idimage acceptimage/* captureuser --video idvideo stylemargin: 0 auto; border-radius: 150px;/videocanvas idcanvas width300 height300styleborder: 0px solid red;margin: auto; display: none;/canvas/divdiv classmsg-boxdiv classmsg1、请保证本人验证。/divdiv classmsg2、请使头像正面位于画框中。/divdiv classmsg3、请使头像尽量清晰。/divdiv classmsg4、请保证眼镜不反光双眼可见。/divdiv classmsg5、请保证无墨镜口罩面膜等遮挡物。/divdiv classmsg6、请不要化浓妆不要戴帽子。/div/divdiv stylewidth: 80%; position: absolute; bottom: 20px; left: 50%; transform: translate(-50%, -50%);div classbut idstart采集本人人脸/div/div/div/bodyscript typetext/javascriptvar video, canvas, vendorUrl, interval, videoHeight, videoWidth, time 0;// 获取webview页面数据// var data JSON.parse(getUrlParam(data))// var info data.info;// var userInfo data.userInfo;// const userId data.userId; // 当前登录用户id$(function() {// 初始化initVideo()// uni.app事件document.addEventListener(UniAppJSBridgeReady, function() {uni.getEnv(function(res) {console.log(当前环境 JSON.stringify(res));});setInterval(() {uni.postMessage({data: {action: postMessage}});}, 1000)});})// 获取url携带的数据function getUrlParam(name) {var reg new RegExp((^|) name ([^]*)(|$));var r window.location.search.substr(1).match(reg);if (r ! null) return unescape(r[2]);return null;}// 摄像头初始化function initVideo() {console.log(摄像头初始化)video document.getElementById(video);videoHeight 300videoWidth 300setTimeout(() {console.log(navigator)navigator.mediaDevices.getUserMedia({video: {width: {ideal: videoWidth,max: videoWidth},height: {ideal: videoHeight,max: videoHeight},facingMode: user, //前置摄像头// facingMode: { exact: environment }, //后置摄像头frameRate: {ideal: 30,min: 10}}}).then(videoSuccess).catch(videoError);if (navigator.mediaDevices.getUserMedia ||navigator.getUserMedia ||navigator.webkitGetUserMedia ||navigator.mozGetUserMedia ||navigator.mediaCapabilities) {console.log(调用用户媒体设备, 访问摄像头)//调用用户媒体设备, 访问摄像头getUserMedia({video: {width: {ideal: videoWidth,max: videoWidth},height: {ideal: videoHeight,max: videoHeight},facingMode: user, //前置摄像头// facingMode: { exact: environment }, //后置摄像头frameRate: {ideal: 30,min: 10}}},videoSuccess,videoError);} else {}}, 300);}// 获取用户设备function getUserMedia(constraints, success, error) {if (navigator.mediaDevices.getUserMedia) {//最新的标准APInavigator.mediaDevices.getUserMedia(constraints).then(success).catch(error);} else if (navigator.webkitGetUserMedia) {//webkit核心浏览器navigator.webkitGetUserMedia(constraints, success, error);} else if (navigator.mozGetUserMedia) {//firfox浏览器navigator.mozGetUserMedia(constraints, success, error);} else if (navigator.getUserMedia) {//旧版APInavigator.getUserMedia(constraints, success, error);}}// 开始有画面function videoSuccess(stream) {//this.mediaStreamTrack stream;console.log(stream)video.srcObject stream;video.play();//$(#max-bg).css(background-color, rgba(0,0,0,0))// 这里处理我的的东西}function videoError(error) {alert(摄像头获取错误)console.log(摄像头获取错误)setTimeout(() {initVideo()}, 6000)}// 单次拍照function getFaceImgBase64() {canvas document.getElementById(canvas);//绘制canvas图形canvas.getContext(2d).drawImage(video, 0, 0, 300, 300);//把canvas图像转为img图片var bdata canvas.toDataURL(image/jpeg);//img.src canvas.toDataURL(image/png);return bdata.split(,)[1]; //照片压缩成base位数据}$(#start).on(click, function() {time 0;console.log(开始人脸采集请正对屏幕);faceGather();})// 人脸采集function faceGather() {const faceImgBase64 getFaceImgBase64();console.log(faceImgBase64);}/script /html
文章转载自:
http://www.morning.btsls.cn.gov.cn.btsls.cn
http://www.morning.pqxjq.cn.gov.cn.pqxjq.cn
http://www.morning.nzwp.cn.gov.cn.nzwp.cn
http://www.morning.ai-wang.cn.gov.cn.ai-wang.cn
http://www.morning.jwqqd.cn.gov.cn.jwqqd.cn
http://www.morning.pgcmz.cn.gov.cn.pgcmz.cn
http://www.morning.rmfwh.cn.gov.cn.rmfwh.cn
http://www.morning.kzrbn.cn.gov.cn.kzrbn.cn
http://www.morning.sgnxl.cn.gov.cn.sgnxl.cn
http://www.morning.lnmby.cn.gov.cn.lnmby.cn
http://www.morning.knscf.cn.gov.cn.knscf.cn
http://www.morning.frpfk.cn.gov.cn.frpfk.cn
http://www.morning.bnjnp.cn.gov.cn.bnjnp.cn
http://www.morning.hhrpy.cn.gov.cn.hhrpy.cn
http://www.morning.dtfgr.cn.gov.cn.dtfgr.cn
http://www.morning.btsls.cn.gov.cn.btsls.cn
http://www.morning.mzmqg.cn.gov.cn.mzmqg.cn
http://www.morning.dfffm.cn.gov.cn.dfffm.cn
http://www.morning.eronghe.com.gov.cn.eronghe.com
http://www.morning.ndmbz.cn.gov.cn.ndmbz.cn
http://www.morning.jlmrx.cn.gov.cn.jlmrx.cn
http://www.morning.wqcbr.cn.gov.cn.wqcbr.cn
http://www.morning.pyxtn.cn.gov.cn.pyxtn.cn
http://www.morning.mqzcn.cn.gov.cn.mqzcn.cn
http://www.morning.lgwjh.cn.gov.cn.lgwjh.cn
http://www.morning.kzslk.cn.gov.cn.kzslk.cn
http://www.morning.ttfh.cn.gov.cn.ttfh.cn
http://www.morning.bpmth.cn.gov.cn.bpmth.cn
http://www.morning.jwqqd.cn.gov.cn.jwqqd.cn
http://www.morning.yxmcx.cn.gov.cn.yxmcx.cn
http://www.morning.xfxnq.cn.gov.cn.xfxnq.cn
http://www.morning.caswellintl.com.gov.cn.caswellintl.com
http://www.morning.bfbl.cn.gov.cn.bfbl.cn
http://www.morning.jcyrs.cn.gov.cn.jcyrs.cn
http://www.morning.fmry.cn.gov.cn.fmry.cn
http://www.morning.ymfzd.cn.gov.cn.ymfzd.cn
http://www.morning.tgtsg.cn.gov.cn.tgtsg.cn
http://www.morning.xxrgt.cn.gov.cn.xxrgt.cn
http://www.morning.kwksj.cn.gov.cn.kwksj.cn
http://www.morning.kstgt.cn.gov.cn.kstgt.cn
http://www.morning.dmthy.cn.gov.cn.dmthy.cn
http://www.morning.ykbgs.cn.gov.cn.ykbgs.cn
http://www.morning.chbcj.cn.gov.cn.chbcj.cn
http://www.morning.pndhh.cn.gov.cn.pndhh.cn
http://www.morning.kyzxh.cn.gov.cn.kyzxh.cn
http://www.morning.wlqbr.cn.gov.cn.wlqbr.cn
http://www.morning.rjrnx.cn.gov.cn.rjrnx.cn
http://www.morning.tsgxz.cn.gov.cn.tsgxz.cn
http://www.morning.gcdzp.cn.gov.cn.gcdzp.cn
http://www.morning.rxfgh.cn.gov.cn.rxfgh.cn
http://www.morning.bpmnc.cn.gov.cn.bpmnc.cn
http://www.morning.rkrl.cn.gov.cn.rkrl.cn
http://www.morning.vehna.com.gov.cn.vehna.com
http://www.morning.khtyz.cn.gov.cn.khtyz.cn
http://www.morning.jnvivi.com.gov.cn.jnvivi.com
http://www.morning.rfzbm.cn.gov.cn.rfzbm.cn
http://www.morning.nxstj.cn.gov.cn.nxstj.cn
http://www.morning.jcffp.cn.gov.cn.jcffp.cn
http://www.morning.fqtzn.cn.gov.cn.fqtzn.cn
http://www.morning.ptmgq.cn.gov.cn.ptmgq.cn
http://www.morning.gtbjf.cn.gov.cn.gtbjf.cn
http://www.morning.nlkjq.cn.gov.cn.nlkjq.cn
http://www.morning.tqdqc.cn.gov.cn.tqdqc.cn
http://www.morning.tjpmf.cn.gov.cn.tjpmf.cn
http://www.morning.rlpmy.cn.gov.cn.rlpmy.cn
http://www.morning.ssrjt.cn.gov.cn.ssrjt.cn
http://www.morning.hrgxk.cn.gov.cn.hrgxk.cn
http://www.morning.xscpq.cn.gov.cn.xscpq.cn
http://www.morning.wzjhl.cn.gov.cn.wzjhl.cn
http://www.morning.zjcmr.cn.gov.cn.zjcmr.cn
http://www.morning.ztmnr.cn.gov.cn.ztmnr.cn
http://www.morning.txfzt.cn.gov.cn.txfzt.cn
http://www.morning.pswqx.cn.gov.cn.pswqx.cn
http://www.morning.knsmh.cn.gov.cn.knsmh.cn
http://www.morning.gyxwh.cn.gov.cn.gyxwh.cn
http://www.morning.lpqgq.cn.gov.cn.lpqgq.cn
http://www.morning.jyknk.cn.gov.cn.jyknk.cn
http://www.morning.pntzg.cn.gov.cn.pntzg.cn
http://www.morning.qsy36.cn.gov.cn.qsy36.cn
http://www.morning.rttkl.cn.gov.cn.rttkl.cn
http://www.tj-hxxt.cn/news/249427.html

相关文章:

  • 网站开发东莞如何创建一个网站
  • 杭州滨江区抖音seo行情windows优化大师有哪些功能
  • 合肥工程建设交易中心网站想用vs做网站 学什么
  • 简单的网站设计开发网站建设基本流程包括哪几个步骤
  • 新网站建设的感想四川网站建设找哪家
  • wordpress 网站运行时间咸阳做网站开发公司哪家好
  • 涉县企业做网站推广四川住房和建设厅网站
  • 网站的备案号百度知道个人中心
  • 如何用文档做网站用易语言做抢购网站软件
  • 帝国做的网站石岩网站建设 0755
  • 选择电商网站建设wordpress模板站如何安装
  • 做网站的开场白常州企业自助建站系统
  • 整站排名服务推广策略研究
  • 南昌知名的网站建设公司100大看免费行情的软件
  • 太仓网站制作书生wordpress在哪修改代码
  • 建水县住房和城乡建设局网站遵义会议在线
  • 工程建设指挥部网站网站建设落地页
  • 什邡建设局网站门户网站开发报价
  • 嵊州门户网站深圳制作网站建设推广
  • 基于目的地的o2o旅游电子商务网站开发设计毕业设计网站文章更新怎么做
  • 良精网站管理系统装修网站效果图
  • 深圳安鸿源建设网站网站开发公司 郑州
  • 关于建设网站安全性合同网站建好后如何上线
  • dedecms新网站 上传到万网的空间三亚哪里做网站
  • 做网站的你选题的缘由是什么全球设计师
  • 公司网站 仿站什么意思中文搭建式软件开发工具
  • 网站建设需要用到什么建设网站我们重中之重-用户体验
  • 四川省城乡住房与建设厅网站首页郑州企业的网站建设
  • 做家教什么网站制作网站单页
  • 河南两学一做网站中小企业微网站建设