经纬度线路不连续显示

let points = [{ lat: 111, lon: 111 }, { lat: 99999999, lon: 9999999 }, { lat: 999, lon: 999 }, { lat: 111, lon: 111 }, { lat: 222, lon: 222 }]
let indexArr = [0]
let distanceArr = []
for (var i = 0; i < points.length - 1; i++) {
    let a = points[i]
    let b = points[i + 1]
    let aValue = a.lat + a.lon
    let bValue = b.lat + b.lon
    let abDistance = Math.abs(aValue - bValue)
    distanceArr.push(abDistance)
    if (abDistance > 1000) {
        indexArr.push(i + 1)
    }
}
let last = indexArr[indexArr.length - 1]
if (last != points.length) {
    indexArr.push(points.length)
}
console.log(distanceArr)
console.log(indexArr)


for (var ii = 0; ii < indexArr.length - 1; ii++) {
    let indexBegin = indexArr[ii]
    let indexEnd = indexArr[ii + 1]
    console.log(indexBegin, indexEnd)
    let smallArr = points.slice(indexBegin, indexEnd)
    console.log(JSON.stringify(smallArr))
}

uniapp使用permision判断隐私权限

const permision = require("@/utils/permission.js");

judgeIosPermission: function (permisionID) {
    var result = permision.judgeIosPermission(permisionID);
    console.log(result);
    var strStatus = result ? "已" : "未";
    console.log(permisionID + "权限" + strStatus + "获得授权");
    if (result) {
    console.log("iOS有权限");
    } else {
    this.alertHaveNoAuth();
    }
},
async requestAndroidPermission(permisionID) {
    var result = await permision.requestAndroidPermission(permisionID);
    var strStatus;
    if (result == 1) {
    strStatus = "已获得授权";
    } else if (result == 0) {
    strStatus = "未获得授权";
    } else {
    strStatus = "被永久拒绝权限";
    }
    if (result != 1) {
    this.alertHaveNoAuth();
    } else {
    console.log("安卓有权限");
    }
    console.log(permisionID + strStatus);
},
alertHaveNoAuth() {
    uni.showModal({
    title: "未开启通讯录权限",
    confirmText: "去设置",
    success: function (res) {
        if (res.confirm) {
        permision.gotoAppPermissionSetting();
        }
    },
    });
},

HBuilderX新建uniapp项目,并导入uview

一、HBuilderX新建uniapp项目,默认模板

若是vue-cli创建的项目,要安装以下依赖

npm i sass -D
npm i sass-loader -D

二、打开插件市场,使用HBuilderX导入插件uview2

https://ext.dcloud.net.cn/plugin?id=1593

三、修改main.js

代码最底部插入

import uView from '@/uni_modules/uview-ui'
Vue.use(uView)

四、修改uni.scss

代码最底部插入

@import '@/uni_modules/uview-ui/theme.scss';

五、修改App.vue

代码最底部插入

<style lang="scss">

    /* 注意要写在第一行,同时给style标签加入lang="scss"属性 */

    @import "@/uni_modules/uview-ui/index.scss";

</style>

六、修改pages.json

插入easycom,与pages平级

"easycom": {
    "^u-(.*)": "@/uni_modules/uview-ui/components/u-$1/u-$1.vue"
},

参考文档

https://www.uviewui.com/components/downloadSetting.html

语言类型


强类型语言

强类型语言也称为强类型定义语言。 是一种总是强制类型定义的语言,要求变量的使用要严格符合定义,所有变量都必须先定义后使用。 java、.NET、C/C++等都是强制类型定义的。 也就是说,一旦一个变量被指定了某个数据类型,如果不经过强制转换,那么它就永远是这个数据类型了。

弱类型语言

弱类型定义的语言,某一个变量被定义类型,该变量可以根据环境变化自动。 弱类型语言包括:VB,PHP,JavaScript等语言。 其中VBScript是动态语言,是一种类型不安全的原因。

动态类型语言

动态类型语言:是指在运行期间才去做数据类型检查的语言。在用动态语言编程时,不用给变量指定数据类型,该语言会在你第一次赋值给变量时,在内部将数据类型记录下来。

静态类型语言

静态类型语言:与动态类型语言刚好相反,它的数据类型检查发生在在编译阶段,也就是说在写程序时要声明变量的数据类型。C/C++、C#、JAVA都是静态类型语言的典型代表。

HbuilderX mac版配置 2022年8月24日

Setting.json

{
    "adb.path" : "/Users/lixiang/Documents/platform-tools/adb",
    "alipayApp.devTools.path" : "/Applications/小程序开发者工具.app",
    "dir.exclude" : ".git,.cvs,.svn,node_modules,unpackage,dist",
    "editor.codeassist.px2upx.enabel" : false,
    "editor.contentAssistSelectionMode" : "Alt+数字模式",
    "editor.formatOnSave" : true,
    "editor.insertSpaces" : true,
    "editor.lineHeight" : "1",
    "editor.minimap.enabled" : false,
    "editor.saveOnFocusLost" : false,
    "editor.tabSize" : 2,
    "editor.wordWrap" : true,
    "terminal.type" : "内置终端",
    "weApp.devTools.path" : "/Applications/wechatwebdevtools.app"
}

jsbeautifyrc.js(此处使用的是原始文件)

module.exports = {
    parsers: {
        ".js": "js",
        ".json": "js",
        ".njs": "js",
        ".sjs": "js",
        ".wxs": "js",
        ".css": "css",
        ".nss": "css",
        ".wxss": "css",
        ".acss": "css",
        ".ttss": "css",
        ".qss": "css",
        ".html": "html",
        ".ux": "html",
        ".wxml": "html",
        ".nml": "html",
        ".vue": "html",
        ".nvue": "html",
        ".axml": "html",
        ".swan": "html",
        ".ttml": "html",
        ".qml": "html"
    },
    options: {
        "indent_size": "1",
        "indent_char": "\t",
        "indent_with_tabs": false, //使用tab缩进
        "eol": "\r\n", //行结束符
        "end_with_newline": false, //使用换行结束输出
        "indent_level": 0, //起始代码缩进数
        "preserve_newlines": true, //保留空行
        "max_preserve_newlines": null, //最大连续保留换行符个数。比如设为2,则会将2行以上的空行删除为只保留1行
        "space_in_paren": false, //括弧添加空格 示例 f( a, b )
        "space_in_empty_paren": false, //函数的括弧内没有参数时插入空格 示例 f( )
        "jslint_happy": false, //启用jslint-strict模式
        "space_after_anon_function": false, //匿名函数的括号前加空格
        "brace_style": "collapse", //代码样式,可选值 [collapse|expand|end-expand|none][,preserve-inline] [collapse,preserve-inline
        "unindent_chained_methods": false, //不缩进链式方法调用
        "break_chained_methods": false, //在随后的行中断开链式方法调用
        "keep_array_indentation": false, //保持数组缩进
        "unescape_strings": false, //使用xNN符号编码解码可显示的字符
        "wrap_line_length": 120,
        "e4x": false, //支持jsx
        "comma_first": false, //把逗号放在新行开头,而不是结尾
        "operator_position": "before-newline",
        "unformatted": ["wbr"],
        "html": {
            "indent_handlebars": true,
            "indent_inner_html": true,
            "indent-scripts": "normal", //[keep|separate|normal]
            "extra_liners": [] //配置标签列表,需要在这些标签前面额外加一空白行
        }
    }
}

package.json

{
  "dependencies": {
    "base-64": "^1.0.0",
    "dayjs": "^1.11.3"
  },
  "devDependencies": {
    "eslint-config-standard-vue-ts": "^1.0.21"
  },
  "scripts": {
    "lint": "eslint ./pages/ --ext .js,.vue",
    "lint:fix": "eslint ./pages/ --ext .js,.vue --fix"
  }
}

eslint配置 .eslintrc.js

module.exports = {
  extends: [
    'standard-vue-ts'
  ],
  rules: {
    'space-before-function-paren': 'off',
    'indent': 'off',
    'vue/html-indent': 'off',
    'vue/html-closing-bracket-newline': 'off',
    'vue/singleline-html-element-content-newline': 'off'
  },
  globals: {
    getApp: true,
    uni: true,
    $: true,
  },
}

常用命令

npm run lint
npm run lint:fix

《Vue3+Koa2》2.6 路由跳转的三种方式

一、router-link

<router-link to="/login">去登录</router-link>

二、传统跳转

goHome() {
    this.$router.push("/welcome")
}

三、composition API跳转

<script setup>
import {useRouter} from 'vue-router'
let router = useRouter()
const goHome = () => {
    router.push('/welcome')
}
</script>

《Vue3+Koa2》2.5 打印并注入环境变量

一、打印环境变量

main.js
------------
import { createApp } from 'vue'
import App from './App.vue'
// vite项目用import.meta.env | webpack项目是process.env
console.log("环境变量=>", JSON.stringify(import.meta.env,null,2))
createApp(App).mount('#app')

二、注入环境变量

  1. 在项目根目录中新建文件.env.dev
  2. 文件内容,新增变量必须以VITE开头,例如VITE_name=lixiang
  3. 修改package.json中的调试指令
    "dev": "vite --mode dev"