# news-cli-m **Repository Path**: chen-1999/news-cli-m ## Basic Information - **Project Name**: news-cli-m - **Description**: 移动端新闻管理系统 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-01-14 - **Last Updated**: 2024-03-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # news-cli-m ## 安装插件 ##### 1,vscode安装插件px-to-vw(将px单位转化为vw) 快捷键alt+z //或者安装px-to-vw 安装: ``` npm i -s postcss-px-to-viewport ``` 配置文件:(新建postcss.config.js) ``` module.exports = { plugins: { autoprefixer: {}, 'postcss-px-to-viewport': { // 视窗的宽度,对应的是我们设计稿的宽度,我们公司用的是移动端375,pc端1920 viewportWidth: 375, // 视窗的高度,根据750设备的宽度来指定,可以不配置 // viewportHeight: 1334, // 指定`px`转换为视窗单位值的小数位数 unitPrecision: 3, // 指定需要转换成的视窗单位,建议使用vw viewportUnit: 'vw', // 指定不转换为视窗单位的类,可以自定义,可以无限添加,建议定义一至两个通用的类名 selectorBlackList: ['.ignore'], // 小于或等于`1px`不转换为视窗单位,你也可以设置为你想要的值 minPixelValue: 1, // 允许在媒体查询中转换`px` mediaQuery: false } } } ``` ##### (或者)2,使用postcss-pxtorem将px转化为rem 安装 ``` npm install postcss-pxtorem -d ``` 配置 ``` /** * PostCSS 的配置文件 * PostCSS 是基于 Node.js 运行的一个处理 CSS 的工具 * 所以它的配置文件也是运行在 Node.js 中 */ // PostCSS 配置文件需要导出一个对象 module.exports = { // 配置要使用的相关插件 plugins: { // 自动添加浏览器厂商声明前缀,用来兼容不同的浏览器 // VueCLI 已经在内部默认配置了 autoprefixer // autoprefixer: { // // browsers 用来配置要兼容到的系统(浏览器)环境 // // 这个配置没有问题,但是写到这里会有控制台编译警告 // // 为什么?因为 VueCLI 是通过项目中的 .browserslistrc 文件来配置要兼容的环境信息的 // browsers: ['Android >= 4.0', 'iOS >= 8'] // }, // 把 px 转为 rem 'postcss-pxtorem': { // 转换的根元素基准值 // 正常情况下按照你的设计稿来 // 750 宽的设计稿,750 / 10 = 75 // 375 宽的设计稿,375 / 10 = 37.5 // Vant 组件库是基于 375 宽写的 // 移动端页面一般都是以 iphone 6/7/8 为原型设计的 // Vant 组件库是基于逻辑像素 375 写的 // 设计稿都是基于物理像素 750 宽设计的 // 所以如果设置成 75,那么我们就可以在设计稿中测量多少就写多少,但是 Vant 的样式就会变得很小,小了一半 // 所以我们还必须设置成 37.5,但是在测量我们的设计稿的时候我们必须让你的测量单位 / 2 // 有没有更好的办法:不用计算 rootValue: 37.5, // 需要转换的 CSS 属性,* 就是所有属性都要转换 propList: ['*'] } } } ``` ##### 样式组件vant 安装: ``` npm i -s vant ``` 导入:(main.js) ``` import Vant from 'vant'; import 'vant/lib/index.css'; Vue.use(Vant); ``` ##### axios安装 安装: ``` npm install --save axios ``` 导入(utils/request.js) ``` import axios from 'axios' ``` #### 相对时间(xxx分钟前) 安装: ``` npm i dayjs ``` 配置: 创建(utils/dayjs.js) ``` ``` #### 节流,防抖(当输入过快时只触发函数一次延迟触发) 安装:(利用淘宝镜像或cnpm) ``` npm i lodash --registry=https://registry.npm.taobao.org ``` 使用时导入即可 ``` import _ from 'lodash'(全部导入) import { debounce } from 'lodash'(这里只要用debounce方法防抖) ``` ##### github风格正文样式(views/article/github-markdown.css)直接导入引用类名 ##### json-bigint(id超出 2 的 53 次方之后就不精确) 安装 ``` npm i json-bigint ``` 使用(在request.js中加入) ``` + import JSONbig from 'json-bigint' const request = axios.create({ baseURL: 'http://ttapi.research.itcast.cn/', + transformResponse: [function (data) { + try { + return JSONbig.parse(data) + } catch (err) { + return data + } + }] }) ``` ##### 图片裁剪cropperjs 安装(纯js) ``` npm install cropperjs ``` 导入 ``` import 'cropperjs/dist/cropper.css' import Cropper from 'cropperjs' ``` 使用(需要将图片包装在块元素内,并填充) ``` // 图片裁切器必须基于 img 进行初始化 // 注意:img 必须是可见状态才能正常完成初始化 // 因为我们这里要在对话框里面初始化裁切器 // 所以务必要在对话框完全打开的状态去进行初始化。 // 获取图片 DOM 节点 const image = this.$refs["preview-image"]; // 初始化裁切器 this.cropper = new Cropper(image, { aspectRatio: 1, //剪切比例 ``` ## vuecli导航守卫动态改变标题 ``` routes: [ { path: '/', name: 'login', component: login, meta: { title: '首页入口' } }, { path: '/apply', name: 'apply', component: apply, meta: { title: '申请' } } ] ``` main.js最后在遍历 ``` router.beforeEach((to, from, next) => { if (to.meta.title) { document.title = to.meta.title } next() }) ``` app.vue判断pc与移动端 ``` mounted () { if (this._isMobile()) { const phone = confirm('请用电脑预览,确认即进入git地址!!!') // this.$router.replace('/m_index'); if (phone) { window.location.href = '' } else { this.$router.replace('/error') } } else { // this.$router.replace('/pc_index'); } }, methods: { _isMobile () { const flag = navigator.userAgent.match( /(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i ) localStorage.setItem('ismobile', flag ? 1 : 0) return flag } } ``` ## 打开第三方数据403问题 ``` ``` 将refeerror关闭,第三方检测不到,姑且会认为是自己人.会将数据返回给你 ## 断尾 发现bug,登陆后数据接口异常,请求不到数据(不报错),聊天功能需登陆(起冲突),尽可能完善,开发资讯兼容版 ## 应用打包 public/manifest.json ``` { "@platforms" : [ "android", "iPhone", "iPad" ], "id" : "H6D009C88", /*应用的标识*/ "name" : "网咯资讯", /*应用名称,程序桌面图标名称*/ "version" : { "name" : "1.8", /*应用版本名称*/ "code" : "100" }, "description" : "", /*应用描述信息*/ "icons" : { "72" : "icon.png" }, // 本地开发写这个地址,发布上线写线上的 Web 服务地址 "launch_path" : "http://chenlong1999.gitee.io/news-cli-m/", /*应用的入口页面,默认为根目录下的index.html;支持网络地址,必须以http://或https://开头*/ "developer" : { "name" : "@成同学", /*开发者名称*/ "email" : "725372239@qq.com", /*开发者邮箱地址*/ "url" : "http://chenlong1999.gitee.io/skip/" /*开发者个人主页地址*/ }, "permissions" : { "Accelerometer" : { "description" : "访问加速度感应器" }, "Audio" : { "description" : "访问麦克风" }, "Messaging" : { "description" : "短彩邮件插件" }, "Cache" : { "description" : "管理应用缓存" }, "Camera" : { "description" : "访问摄像头" }, "Console" : { "description" : "跟踪调试输出日志" }, "Contacts" : { "description" : "访问系统联系人信息" }, "Device" : { "description" : "访问设备信息" }, "Downloader" : { "description" : "文件下载管理" }, "Events" : { "description" : "应用扩展事件" }, "File" : { "description" : "访问本地文件系统" }, "Gallery" : { "description" : "访问系统相册" }, "Geolocation" : { "description" : "访问位置信息" }, "Invocation" : { "description" : "使用Native.js能力" }, "Orientation" : { "description" : "访问方向感应器" }, "Proximity" : { "description" : "访问距离感应器" }, "Storage" : { "description" : "管理应用本地数据" }, "Uploader" : { "description" : "管理文件上传任务" }, "Runtime" : { "description" : "访问运行期环境" }, "XMLHttpRequest" : { "description" : "跨域网络访问" }, "Zip" : { "description" : "文件压缩与解压缩" }, "Barcode" : { "description" : "管理二维码扫描插件" }, "Maps" : { "description" : "管理地图插件" }, "Speech" : { "description" : "管理语音识别插件" }, "Webview" : { "description" : "窗口管理" }, "NativeUI" : { "description" : "原生UI控件" }, "Navigator" : { "description" : "浏览器信息" }, "NativeObj" : { "description" : "原生对象" } }, "plus" : { "splashscreen" : { "autoclose" : true, /*是否自动关闭程序启动界面,true表示应用加载应用入口页面后自动关闭;false则需调plus.navigator.closeSplashscreen()关闭*/ "waiting" : true /*是否在程序启动界面显示等待雪花,true表示显示,false表示不显示。*/ }, "popGesture" : "close", /*设置应用默认侧滑返回关闭Webview窗口,"none"为无侧滑返回功能,"hide"为侧滑隐藏Webview窗口。参考http://ask.dcloud.net.cn/article/102*/ "runmode" : "normal", /*应用的首次启动运行模式,可取liberate或normal,liberate模式在第一次启动时将解压应用资源(Android平台File API才可正常访问_www目录)*/ "signature" : "Sk9JTiBVUyBtYWlsdG86aHIyMDEzQGRjbG91ZC5pbw==", /*可选,保留给应用签名,暂不使用*/ "distribute" : { "apple" : { "appid" : "", /*iOS应用标识,苹果开发网站申请的appid,如io.dcloud.HelloH5*/ "mobileprovision" : "", /*iOS应用打包配置文件*/ "password" : "", /*iOS应用打包个人证书导入密码*/ "p12" : "", /*iOS应用打包个人证书,打包配置文件关联的个人证书*/ "devices" : "universal", /*iOS应用支持的设备类型,可取值iphone/ipad/universal*/ "frameworks" : [] /*调用Native.js调用原生Objective-c API需要引用的FrameWork,如需调用GameCenter,则添加"GameKit.framework"*/ }, "google" : { "packagename" : "", /*Android应用包名,如io.dcloud.HelloH5*/ "keystore" : "", /*Android应用打包使用的密钥库文件*/ "password" : "", /*Android应用打包使用密钥库中证书的密码*/ "aliasname" : "", /*Android应用打包使用密钥库中证书的别名*/ "permissions" : [ "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" ] }, /*使用Native.js调用原生安卓API需要使用到的系统权限*/ "orientation" : [ "portrait-primary" ], /*应用支持的方向,portrait-primary:竖屏正方向;portrait-secondary:竖屏反方向;landscape-primary:横屏正方向;landscape-secondary:横屏反方向*/ "icons" : { "ios" : { "prerendered" : true, /*应用图标是否已经高亮处理,在iOS6及以下设备上有效*/ "auto" : "", /*应用图标,分辨率:512x512,用于自动生成各种尺寸程序图标*/ "iphone" : { "normal" : "", /*iPhone3/3GS程序图标,分辨率:57x57*/ "retina" : "", /*iPhone4程序图标,分辨率:114x114*/ "retina7" : "", /*iPhone4S/5/6程序图标,分辨率:120x120*/ "retina8" : "", /*iPhone6 Plus程序图标,分辨率:180x180*/ "spotlight-normal" : "", /*iPhone3/3GS Spotlight搜索程序图标,分辨率:29x29*/ "spotlight-retina" : "", /*iPhone4 Spotlight搜索程序图标,分辨率:58x58*/ "spotlight-retina7" : "", /*iPhone4S/5/6 Spotlight搜索程序图标,分辨率:80x80*/ "settings-normal" : "", /*iPhone4设置页面程序图标,分辨率:29x29*/ "settings-retina" : "", /*iPhone4S/5/6设置页面程序图标,分辨率:58x58*/ "settings-retina8" : "" /*iPhone6Plus设置页面程序图标,分辨率:87x87*/ }, "ipad" : { "normal" : "", /*iPad普通屏幕程序图标,分辨率:72x72*/ "retina" : "", /*iPad高分屏程序图标,分辨率:144x144*/ "normal7" : "", /*iPad iOS7程序图标,分辨率:76x76*/ "retina7" : "", /*iPad iOS7高分屏程序图标,分辨率:152x152*/ "spotlight-normal" : "", /*iPad Spotlight搜索程序图标,分辨率:50x50*/ "spotlight-retina" : "", /*iPad高分屏Spotlight搜索程序图标,分辨率:100x100*/ "spotlight-normal7" : "", /*iPad iOS7 Spotlight搜索程序图标,分辨率:40x40*/ "spotlight-retina7" : "", /*iPad iOS7高分屏Spotlight搜索程序图标,分辨率:80x80*/ "settings-normal" : "", /*iPad设置页面程序图标,分辨率:29x29*/ "settings-retina" : "" /*iPad高分屏设置页面程序图标,分辨率:58x58*/ } }, "android" : { "mdpi" : "", /*普通屏程序图标,分辨率:48x48*/ "ldpi" : "", /*大屏程序图标,分辨率:48x48*/ "hdpi" : "", /*高分屏程序图标,分辨率:72x72*/ "xhdpi" : "", /*720P高分屏程序图标,分辨率:96x96*/ "xxhdpi" : "" /*1080P 高分屏程序图标,分辨率:144x144*/ } }, "splashscreen" : { "ios" : { "iphone" : { "default" : "", /*iPhone3启动图片选,分辨率:320x480*/ "retina35" : "", /*3.5英寸设备(iPhone4)启动图片,分辨率:640x960*/ "retina40" : "", /*4.0 英寸设备(iPhone5/iPhone5s)启动图片,分辨率:640x1136*/ "retina47" : "", /*4.7 英寸设备(iPhone6)启动图片,分辨率:750x1334*/ "retina55" : "", /*5.5 英寸设备(iPhone6 Plus)启动图片,分辨率:1242x2208*/ "retina55l" : "" /*5.5 英寸设备(iPhone6 Plus)横屏启动图片,分辨率:2208x1242*/ }, "ipad" : { "portrait" : "", /*iPad竖屏启动图片,分辨率:768x1004*/ "portrait-retina" : "", /*iPad高分屏竖屏图片,分辨率:1536x2008*/ "landscape" : "", /*iPad横屏启动图片,分辨率:1024x748*/ "landscape-retina" : "", /*iPad高分屏横屏启动图片,分辨率:2048x1496*/ "portrait7" : "", /*iPad iOS7竖屏启动图片,分辨率:768x1024*/ "portrait-retina7" : "", /*iPad iOS7高分屏竖屏图片,分辨率:1536x2048*/ "landscape7" : "", /*iPad iOS7横屏启动图片,分辨率:1024x768*/ "landscape-retina7" : "" /*iPad iOS7高分屏横屏启动图片,分辨率:2048x1536*/ } }, "android" : { "mdpi" : "", /*普通屏启动图片,分辨率:240x282*/ "ldpi" : "", /*大屏启动图片,分辨率:320x442*/ "hdpi" : "", /*高分屏启动图片,分辨率:480x762*/ "xhdpi" : "", /*720P高分屏启动图片,分辨率:720x1242*/ "xxhdpi" : "" /*1080P高分屏启动图片,分辨率:1080x1882*/ } }, "plugins" : { "speech" : { "ifly" : {} }, "ad" : {} } } }, "screenOrientation" : [ "portrait-primary" ] } ```