HBuilderX

HBuilderX

极客开发工具
uni-app

uni-app

开发一次,多端覆盖
uniCloud

uniCloud

云开发平台
HTML5+

HTML5+

增强HTML5的功能体验
MUI

MUI

上万Star的前端框架

vue.runtime.esm.js' does not provide an export named 'default'错误的解决方法

vue3

遇到了这个问题,后来把组件的路径改掉,就好了
import date from '@/components/_picker/date.vue'
改为
import date from '@/uni_modules/_picker/date.vue'

遇到了这个问题,后来把组件的路径改掉,就好了
import date from '@/components/_picker/date.vue'
改为
import date from '@/uni_modules/_picker/date.vue'

微信小程序不支持中文方案解决

中文开发App

在 浏览器的环境下 可以使用 <view class="样式"> , {{ 对象.属性 }} ,v-if="f显示隐藏" ,但是在小程序里面不行,

虽然有翻译插件,难免还是需要按一下快捷键或者操作鼠标, 对于开发人员来说 要懒就 就要一劳永逸的懒懒下去

我以前是写个脚本来做转换, 但是调试微信小程序很痛苦, 然后看了 vue2和vue3的打包方式, 决定从打包方式入手, 在打包时 让中文变为小程序可兼容字母,

思路如下:

将中文单个拆分,然后对每个 字符进行转换, 转换方式为 unicode 的36进制来 替换中文,

let code= "中文".split("").map(v=> "_"   v.charCodeAt(0).toString(36)).join("");  

console.log(code); //   输出   '_ffx_k1z' ;

在每个值之前加上 下划线, 解决不能以数字开头的情况,

Vue2 和 Vue3 的打包方式不同,解决方式 不一样,不过Vue3 相对来说很简单,

我就先提供Vue2的解决方案,

最开始我计划使用 vue.config.js 来解决,但是 Vue2使用 打包方式并不能解决

最终无奈的只能从编译器下手了

首先 找到你的 Hbx 安装目录, 然后找到 plugins\uniapp-cli\node_modules\@dcloudio\vue-cli-plugin-uni\packages\webpack-preprocess-loader 这个文件
完成地址如下,(这是我的地址)

D:\develop\IDEA\HBuilderX\plugins\uniapp-cli\node_modules\@dcloudio\vue-cli-plugin-uni\packages\webpack-preprocess-loader

在这个目录中导入 附件中的 chineseSupport.js 文件

/webpack-preprocess-loader

  • preprocess
  • chineseSupport.js
  • index.js

然后修改 index.js 文件, 这个文件就是对我们写的代码进行一次转义,在这里来处理 css , 以及 中文

当然 附加里面 也给你提供好了 index 文件, 不过 你可能需要稍加改造, 我的项目比较混杂 我是在.vue 文件中来指定哪些文件需要转义的,如果你希望全量转义 就把限制取消掉就可以了

附件里面还有一个 chinesefields.js 用于将对象的的所有 键 转换为 字母, 用来处理 {{ 对象.属性 }} , 这是处理后端返回的变量名是中文的情况

源文件 必须包含 <!-- 开启全量中文 -->

<template>  
  <!-- 开启全量中文 -->  
  <view class="con tent 哈哈哈 页面" :class="f名称 + '23'" :vvv="'22'">  
    <image class="logo" src="/static/logo.png" />  
    <view class="text-area" :title="f名称" name="名字">  
      <text class="title">{{ f名称 }}</text>  
    </view>  
    <button @click="m点击事件('名称', f名称)">  
      <span>点击 :{{ f名称 }}</span>  
    </button>  
    <view v-for="(item, index) in f数据列表" :key="index">  
      <view>{{ item.f名称 }}</view>  
    </view>  
  </view>  
</template>  

<script>  
import { chineseFields } from '../../assets/chinese-solution/chinesefields.js';  

export default {  
  data() {  
    return {  
      f名称: 'Hello',  
      f数据列表: [  
        {  
          f名称: '张三'  
        }  
      ]  
    };  
  },  
  onLoad() {},  
  mounted() {  
    this.m后端加载();  
  },  
  methods: {  
    m后端加载() {  
      setTimeout(() => {  
        //-> 假设  
        this.f数据列表 = chineseFields([  
          {  
            f名称: '李四'  
          }  
        ]);  
      }, 0);  
    },  
    m点击事件(a名称, fname) {  
      let f字段 = '输出值' + this.f名称;  
      console.log(f字段, a名称, fname);  
    }  
  }  
};  
</script>  

<style lang="scss">  
.哈哈哈 .title {  
  font-size: 40rpx;  
}  
.哈哈哈 {  
  background-color: aqua;  
}  
</style>

输出结果


<template>  
  <!-- 开启全量中文-->  
  <view class="con tent _gqw_gqw_gqw _u45_twi" :class="f_glp_o34   '23'" :vvv="'22'" >  
    <image class="logo" src="/static/logo.png" ></image>  
    <view class="text-area" :title="f_glp_o34" name="名字" >  
      <text class="title" >  
        {{ f_glp_o34 }}  
      </text>  
    </view>  
    <button @click="m_m9l_g6z_fij_fli('名称', f_glp_o34)" >  
      <span>  
        点击 :{{ f_glp_o34 }}  
      </span>  
    </button>  
    <view v-for="(item, index) in f_k1c_jn2_g7r_qy0" :key="index" >  
      <view>  
        {{ item.f_glp_o34 }}  
      </view>  
    </view>  
  </view>  
</template>  
<script>  
import { chineseFields } from '../../assets/chinese-solution/chinesefields.js';  

export default {  
  data() {  
    return {  
      f_glp_o34: 'Hello',  
      f_k1c_jn2_g7r_qy0: [  
        {  
          f_glp_o34: '张三'  
        }  
      ]  
    };  
  },  
  onLoad() {},  
  mounted() {  
    this.m_glq_oa7_gbk_scd();  
  },  
  methods: {  
    m_glq_oa7_gbk_scd() {  
      setTimeout(() => {  
        //-> _fuv_rlq  
        this.f_k1c_jn2_g7r_qy0 = chineseFields([  
          {  
            f_glp_o34: '李四'  
          }  
        ]);  
      }, 0);  
    },  
    m_m9l_g6z_fij_fli(a_glp_o34, fname) {  
      let f_i1j_l9x = '输出值'   this.f_glp_o34;  
      console.log(f_i1j_l9x, a_glp_o34, fname);  
    }  
  }  
};</script>  
<style lang="scss" >  
._gqw_gqw_gqw .title {  
  font-size: 40rpx;  
}  
._gqw_gqw_gqw {  
  background-color: aqua;  
}</style>  
继续阅读 »

在 浏览器的环境下 可以使用 <view class="样式"> , {{ 对象.属性 }} ,v-if="f显示隐藏" ,但是在小程序里面不行,

虽然有翻译插件,难免还是需要按一下快捷键或者操作鼠标, 对于开发人员来说 要懒就 就要一劳永逸的懒懒下去

我以前是写个脚本来做转换, 但是调试微信小程序很痛苦, 然后看了 vue2和vue3的打包方式, 决定从打包方式入手, 在打包时 让中文变为小程序可兼容字母,

思路如下:

将中文单个拆分,然后对每个 字符进行转换, 转换方式为 unicode 的36进制来 替换中文,

let code= "中文".split("").map(v=> "_"   v.charCodeAt(0).toString(36)).join("");  

console.log(code); //   输出   '_ffx_k1z' ;

在每个值之前加上 下划线, 解决不能以数字开头的情况,

Vue2 和 Vue3 的打包方式不同,解决方式 不一样,不过Vue3 相对来说很简单,

我就先提供Vue2的解决方案,

最开始我计划使用 vue.config.js 来解决,但是 Vue2使用 打包方式并不能解决

最终无奈的只能从编译器下手了

首先 找到你的 Hbx 安装目录, 然后找到 plugins\uniapp-cli\node_modules\@dcloudio\vue-cli-plugin-uni\packages\webpack-preprocess-loader 这个文件
完成地址如下,(这是我的地址)

D:\develop\IDEA\HBuilderX\plugins\uniapp-cli\node_modules\@dcloudio\vue-cli-plugin-uni\packages\webpack-preprocess-loader

在这个目录中导入 附件中的 chineseSupport.js 文件

/webpack-preprocess-loader

  • preprocess
  • chineseSupport.js
  • index.js

然后修改 index.js 文件, 这个文件就是对我们写的代码进行一次转义,在这里来处理 css , 以及 中文

当然 附加里面 也给你提供好了 index 文件, 不过 你可能需要稍加改造, 我的项目比较混杂 我是在.vue 文件中来指定哪些文件需要转义的,如果你希望全量转义 就把限制取消掉就可以了

附件里面还有一个 chinesefields.js 用于将对象的的所有 键 转换为 字母, 用来处理 {{ 对象.属性 }} , 这是处理后端返回的变量名是中文的情况

源文件 必须包含 <!-- 开启全量中文 -->

<template>  
  <!-- 开启全量中文 -->  
  <view class="con tent 哈哈哈 页面" :class="f名称 + '23'" :vvv="'22'">  
    <image class="logo" src="/static/logo.png" />  
    <view class="text-area" :title="f名称" name="名字">  
      <text class="title">{{ f名称 }}</text>  
    </view>  
    <button @click="m点击事件('名称', f名称)">  
      <span>点击 :{{ f名称 }}</span>  
    </button>  
    <view v-for="(item, index) in f数据列表" :key="index">  
      <view>{{ item.f名称 }}</view>  
    </view>  
  </view>  
</template>  

<script>  
import { chineseFields } from '../../assets/chinese-solution/chinesefields.js';  

export default {  
  data() {  
    return {  
      f名称: 'Hello',  
      f数据列表: [  
        {  
          f名称: '张三'  
        }  
      ]  
    };  
  },  
  onLoad() {},  
  mounted() {  
    this.m后端加载();  
  },  
  methods: {  
    m后端加载() {  
      setTimeout(() => {  
        //-> 假设  
        this.f数据列表 = chineseFields([  
          {  
            f名称: '李四'  
          }  
        ]);  
      }, 0);  
    },  
    m点击事件(a名称, fname) {  
      let f字段 = '输出值' + this.f名称;  
      console.log(f字段, a名称, fname);  
    }  
  }  
};  
</script>  

<style lang="scss">  
.哈哈哈 .title {  
  font-size: 40rpx;  
}  
.哈哈哈 {  
  background-color: aqua;  
}  
</style>

输出结果


<template>  
  <!-- 开启全量中文-->  
  <view class="con tent _gqw_gqw_gqw _u45_twi" :class="f_glp_o34   '23'" :vvv="'22'" >  
    <image class="logo" src="/static/logo.png" ></image>  
    <view class="text-area" :title="f_glp_o34" name="名字" >  
      <text class="title" >  
        {{ f_glp_o34 }}  
      </text>  
    </view>  
    <button @click="m_m9l_g6z_fij_fli('名称', f_glp_o34)" >  
      <span>  
        点击 :{{ f_glp_o34 }}  
      </span>  
    </button>  
    <view v-for="(item, index) in f_k1c_jn2_g7r_qy0" :key="index" >  
      <view>  
        {{ item.f_glp_o34 }}  
      </view>  
    </view>  
  </view>  
</template>  
<script>  
import { chineseFields } from '../../assets/chinese-solution/chinesefields.js';  

export default {  
  data() {  
    return {  
      f_glp_o34: 'Hello',  
      f_k1c_jn2_g7r_qy0: [  
        {  
          f_glp_o34: '张三'  
        }  
      ]  
    };  
  },  
  onLoad() {},  
  mounted() {  
    this.m_glq_oa7_gbk_scd();  
  },  
  methods: {  
    m_glq_oa7_gbk_scd() {  
      setTimeout(() => {  
        //-> _fuv_rlq  
        this.f_k1c_jn2_g7r_qy0 = chineseFields([  
          {  
            f_glp_o34: '李四'  
          }  
        ]);  
      }, 0);  
    },  
    m_m9l_g6z_fij_fli(a_glp_o34, fname) {  
      let f_i1j_l9x = '输出值'   this.f_glp_o34;  
      console.log(f_i1j_l9x, a_glp_o34, fname);  
    }  
  }  
};</script>  
<style lang="scss" >  
._gqw_gqw_gqw .title {  
  font-size: 40rpx;  
}  
._gqw_gqw_gqw {  
  background-color: aqua;  
}</style>  
收起阅读 »

招聘 uni app开发工程师

招聘与外包

招聘 uni app开发工程师
工作地点:河南郑州
学历:本科及以上
薪资范围:9K~13K
福利待遇:双休、五险一金、包午餐
职责描述:
1、负责基于H5、uni-App的手机APP 、小程序的设计与开发;
2、负责公司现有APP的开发、重构与优化;
3、参与公司级APP的发展方向的规划与设计;
4、参与APP研发技术的积累、学习、实践工作;
5、参与公司其他前端技术支持工作。
任职要求:
1、本科及以上学历,计算机、软件、设计等相关专业;
2、3年或以上手机端相关开发经验,一个以上项目跨平台APP开发经验;
3、精通符合W3C标准的Html5、JavaScript和CSS相关技术;
4、精通JSON、XML等通信格式以及基于AJAX请求实现与后台数据交互;
5、精通JQuery、Vue等常见JS开发框架;
6、熟悉使用HBuilder IDE编辑器进行开发,并完成打包发布安卓、ios版本app;
7、精通 Vue、uni-app 框架应用,并能运用uni-app框架完成移动端及小程序开发;
8、注重用户体验,具有快速迭代和敏捷开发思维,具备快速学习能力;
9、良好沟通能力、团队合作精神,积极主动、服从安排,能承受较大压力,责任心和学习能力强,能独立分析问题及解决问题;
10、对IOS,Android 原生有实际开发经验的加分;
11、对后台开发(Node.js)有了解的加分;

志同道合者请联系:13526636033、13526636033@163.com

继续阅读 »

招聘 uni app开发工程师
工作地点:河南郑州
学历:本科及以上
薪资范围:9K~13K
福利待遇:双休、五险一金、包午餐
职责描述:
1、负责基于H5、uni-App的手机APP 、小程序的设计与开发;
2、负责公司现有APP的开发、重构与优化;
3、参与公司级APP的发展方向的规划与设计;
4、参与APP研发技术的积累、学习、实践工作;
5、参与公司其他前端技术支持工作。
任职要求:
1、本科及以上学历,计算机、软件、设计等相关专业;
2、3年或以上手机端相关开发经验,一个以上项目跨平台APP开发经验;
3、精通符合W3C标准的Html5、JavaScript和CSS相关技术;
4、精通JSON、XML等通信格式以及基于AJAX请求实现与后台数据交互;
5、精通JQuery、Vue等常见JS开发框架;
6、熟悉使用HBuilder IDE编辑器进行开发,并完成打包发布安卓、ios版本app;
7、精通 Vue、uni-app 框架应用,并能运用uni-app框架完成移动端及小程序开发;
8、注重用户体验,具有快速迭代和敏捷开发思维,具备快速学习能力;
9、良好沟通能力、团队合作精神,积极主动、服从安排,能承受较大压力,责任心和学习能力强,能独立分析问题及解决问题;
10、对IOS,Android 原生有实际开发经验的加分;
11、对后台开发(Node.js)有了解的加分;

志同道合者请联系:13526636033、13526636033@163.com

收起阅读 »

uni-pay 配置多个商户动态获取,修改下 /uni-pay-co/service/pay.js 经验

目标 用户点击支付是 动态获取商家的支付配置参数,实现多商户配置,思路:商家支付配置参数储存到数据库然后获取给unipay。
第一步安装导入uniapy2组件 这步骤不说了很简单。。

是这样的 调用支付 ref pay

这里就是调用支付的时候所需的参数我们增加一个商家ID 然后打开\uni_modules\uni-pay\components\uni-pay 这个文件里看一下后面发生的事

这里它调用了创建订单函数就在下面我看了一下 这个才是真正的给unipay云函数传参数的

好这个也看了 我们看下他最后怎么做了

接下来我们去找到这个看一下

\uniCloud\cloudfunctions\uni-pay-co\service\pay,js

这是核心的地方

你因为这就完了,确实完了 但是接受这个参数过程还复杂 我这小白研究半天才实现了
看下面

最后就是按这个格式数据库存储配置信息然后在这个通过商家ID获取对应的配置信息给他就好了

我的思路在这里结束 记录一下吧

继续阅读 »

目标 用户点击支付是 动态获取商家的支付配置参数,实现多商户配置,思路:商家支付配置参数储存到数据库然后获取给unipay。
第一步安装导入uniapy2组件 这步骤不说了很简单。。

是这样的 调用支付 ref pay

这里就是调用支付的时候所需的参数我们增加一个商家ID 然后打开\uni_modules\uni-pay\components\uni-pay 这个文件里看一下后面发生的事

这里它调用了创建订单函数就在下面我看了一下 这个才是真正的给unipay云函数传参数的

好这个也看了 我们看下他最后怎么做了

接下来我们去找到这个看一下

\uniCloud\cloudfunctions\uni-pay-co\service\pay,js

这是核心的地方

你因为这就完了,确实完了 但是接受这个参数过程还复杂 我这小白研究半天才实现了
看下面

最后就是按这个格式数据库存储配置信息然后在这个通过商家ID获取对应的配置信息给他就好了

我的思路在这里结束 记录一下吧

收起阅读 »

国际化vue-i18n报错是版本问题

按照官方文档 推荐使用vue-i18n@9.1.9固定版本安装到项目报一下错误

Uncaught TypeError: Cannot read properties of undefined (reading 'install')
at Vue.use (chunk-vendors.js:20622:23)
at eval (main.js:14:5)
at Object.Vtdi (index.js:3865:1)
at webpack_require (index.js:854:30)
at fn (index.js:151:20)
at 1 (index.js:1244:18)
at
webpack_require
(index.js:854:30)
at checkDeferredModules (index.js:46:23)
at index.js:994:18****

查看本项目vue版本是2.6.14 而vue-i18n@9.1.9是vue3.0版本 经过查阅资料vue2.0版本需要 vue-i18n@5版本 安装5版本即可解决问题

继续阅读 »

按照官方文档 推荐使用vue-i18n@9.1.9固定版本安装到项目报一下错误

Uncaught TypeError: Cannot read properties of undefined (reading 'install')
at Vue.use (chunk-vendors.js:20622:23)
at eval (main.js:14:5)
at Object.Vtdi (index.js:3865:1)
at webpack_require (index.js:854:30)
at fn (index.js:151:20)
at 1 (index.js:1244:18)
at
webpack_require
(index.js:854:30)
at checkDeferredModules (index.js:46:23)
at index.js:994:18****

查看本项目vue版本是2.6.14 而vue-i18n@9.1.9是vue3.0版本 经过查阅资料vue2.0版本需要 vue-i18n@5版本 安装5版本即可解决问题

收起阅读 »

荣耀200真机运行到HBuilder检测不到手机

真机运行

手机型号是荣耀200,用数据线进行调试项目,百度了很多方法,各种方法都尝试了,但是始终检测不到手机!这个问题困扰我很久了
1、安装荣耀手机助手 HonorSuite
2、安装Android SDK Platform-Tools

解决方案:

参考文章:
关于荣耀Magic UI系列HBuilder真机调试检测不到解决办法

继续阅读 »

手机型号是荣耀200,用数据线进行调试项目,百度了很多方法,各种方法都尝试了,但是始终检测不到手机!这个问题困扰我很久了
1、安装荣耀手机助手 HonorSuite
2、安装Android SDK Platform-Tools

解决方案:

参考文章:
关于荣耀Magic UI系列HBuilder真机调试检测不到解决办法

收起阅读 »

【经验分享】uniappX中实现类似pinia-plugin-persist-uni的本地数据缓存

uniapp x

主要的实现方法

export function defineStore<T>(name : string, obj : T) : T {  
    let storage = uni.getStorageSync(name);  
    if (storage instanceof UTSJSONObject) {  
        let data = JSON.parse<T>(JSON.stringify(storage));  
        if (data != null) {  
            let newVal = data as T;  
            obj = reactive(newVal);  
        }  
    }  
    watch(obj as any, () => {  
        uni.setStorage({  
            key: name,  
            data: obj as any  
        });  
    }, {  
        deep: true  
    })  
    return obj;  
}

调用示例:

type UserStore = {  
    initReady : boolean;  
    userInfo: UTSJSONObject;  
}  
export const app = defineStore("app", reactive<UserStore>({  
    initReady: false,  
    userInfo:{}  
}))

页面中app.xxx就是响应式,参考官方文档:https://doc.dcloud.net.cn/uni-app-x/tutorial/store.html#%E5%85%A8%E5%B1%80%E5%8F%98%E9%87%8F%E4%B8%8E%E7%8A%B6%E6%80%81%E7%AE%A1%E7%90%86
如果没有这种处理,app每次启动的时候,状态都会重置。加了后数据就能本地持久化了。

继续阅读 »

主要的实现方法

export function defineStore<T>(name : string, obj : T) : T {  
    let storage = uni.getStorageSync(name);  
    if (storage instanceof UTSJSONObject) {  
        let data = JSON.parse<T>(JSON.stringify(storage));  
        if (data != null) {  
            let newVal = data as T;  
            obj = reactive(newVal);  
        }  
    }  
    watch(obj as any, () => {  
        uni.setStorage({  
            key: name,  
            data: obj as any  
        });  
    }, {  
        deep: true  
    })  
    return obj;  
}

调用示例:

type UserStore = {  
    initReady : boolean;  
    userInfo: UTSJSONObject;  
}  
export const app = defineStore("app", reactive<UserStore>({  
    initReady: false,  
    userInfo:{}  
}))

页面中app.xxx就是响应式,参考官方文档:https://doc.dcloud.net.cn/uni-app-x/tutorial/store.html#%E5%85%A8%E5%B1%80%E5%8F%98%E9%87%8F%E4%B8%8E%E7%8A%B6%E6%80%81%E7%AE%A1%E7%90%86
如果没有这种处理,app每次启动的时候,状态都会重置。加了后数据就能本地持久化了。

收起阅读 »

HBuilderX linux 平台安装包更新,解决一些低版本模块和vue2的编译问题

Linux HBuilderX CLI HBuilderX linux

Linux 环境:

推荐node 版本为 v18.20.7
uapp 版本 >= 2.3.5,uapp -v 可以查看当前使用版本

Ubuntu 22.04 不要使用 apt install nodejs, 这个版本目前发现问题。建议使用 nvm 安装

安装后,必须确认modules 版本为108,如果109或其他的,sass 插件会有问题。查看版本方法:
node -p "process.versions.modules"
输出 108 就对了,否则都有问题。

下载:

https://artisansoft.feishu.cn/docx/NZRHdetSzoi8VEx7KcYcuivpnqd

继续阅读 »

Linux 环境:

推荐node 版本为 v18.20.7
uapp 版本 >= 2.3.5,uapp -v 可以查看当前使用版本

Ubuntu 22.04 不要使用 apt install nodejs, 这个版本目前发现问题。建议使用 nvm 安装

安装后,必须确认modules 版本为108,如果109或其他的,sass 插件会有问题。查看版本方法:
node -p "process.versions.modules"
输出 108 就对了,否则都有问题。

下载:

https://artisansoft.feishu.cn/docx/NZRHdetSzoi8VEx7KcYcuivpnqd

收起阅读 »

Some App Tech Support

移动APP

一、软件介绍
名称:小秘书
类型:办公类应用

二、功能
小秘书是一款办公助手类app,兼具便签、日记本、待办事项等功能,虽然简单却功能齐全、门类清晰,方便统一处理。
【功能】
1.【idea闪现】:将突然出现的好点子捕捉下来
2.【挑战出现】:记录难题和应对方法
3.【经验总结】:帮助你将工作经验记录下来
4.【日程安排】:有序规划生活,达成你的目标
还有更多隐藏功能供探索。
让你随时随地记录灵感!更便捷地处理工作!!并形成经验总结方便日后翻阅

三、Getting Support:

邮箱: royalulugemma@yeah.net

或者评论留言

继续阅读 »

一、软件介绍
名称:小秘书
类型:办公类应用

二、功能
小秘书是一款办公助手类app,兼具便签、日记本、待办事项等功能,虽然简单却功能齐全、门类清晰,方便统一处理。
【功能】
1.【idea闪现】:将突然出现的好点子捕捉下来
2.【挑战出现】:记录难题和应对方法
3.【经验总结】:帮助你将工作经验记录下来
4.【日程安排】:有序规划生活,达成你的目标
还有更多隐藏功能供探索。
让你随时随地记录灵感!更便捷地处理工作!!并形成经验总结方便日后翻阅

三、Getting Support:

邮箱: royalulugemma@yeah.net

或者评论留言

收起阅读 »

uni.onBLECharacteristicValueChange接收不到消息

uniapp

启用低功耗蓝牙设备特征值变化时的 notify 功能 (人话:把这个打开)

deviceId,serviceId,characteristicId这三个值改为你需要回调监听的值

await uni.notifyBLECharacteristicValueChange({  
        state: true,  //设为true  
        deviceId,  
        serviceId,  
        characteristicId,  
})

打开这个监听

这里放一个,

uni.onBLECharacteristicValueChange(function (res) {  
  console.log(`characteristic ${res.characteristicId} has changed, now is ${res.value}`)  
  console.log(ab2hex(res.value))  
})

接下来就是拿这个写入数据

写入一次没用!写入两次第二次监听uni.onBLECharacteristicValueChange中就有数据了

uni.writeBLECharacteristicValue({  
  deviceId,  
  serviceId,  
  characteristicId,  
  value: buffer,  
  success(res) {  
    console.log('writeBLECharacteristicValue success', res.errMsg)  
  }  
})

总结

开启uni.notifyBLECharacteristicValueChange,后放uni.onBLECharacteristicValueChange,然后写入两次 uni.writeBLECharacteristicValue,往后再进行写操作就不用发两次了,初始化第一次时需要发两次

继续阅读 »

启用低功耗蓝牙设备特征值变化时的 notify 功能 (人话:把这个打开)

deviceId,serviceId,characteristicId这三个值改为你需要回调监听的值

await uni.notifyBLECharacteristicValueChange({  
        state: true,  //设为true  
        deviceId,  
        serviceId,  
        characteristicId,  
})

打开这个监听

这里放一个,

uni.onBLECharacteristicValueChange(function (res) {  
  console.log(`characteristic ${res.characteristicId} has changed, now is ${res.value}`)  
  console.log(ab2hex(res.value))  
})

接下来就是拿这个写入数据

写入一次没用!写入两次第二次监听uni.onBLECharacteristicValueChange中就有数据了

uni.writeBLECharacteristicValue({  
  deviceId,  
  serviceId,  
  characteristicId,  
  value: buffer,  
  success(res) {  
    console.log('writeBLECharacteristicValue success', res.errMsg)  
  }  
})

总结

开启uni.notifyBLECharacteristicValueChange,后放uni.onBLECharacteristicValueChange,然后写入两次 uni.writeBLECharacteristicValue,往后再进行写操作就不用发两次了,初始化第一次时需要发两次

收起阅读 »

[项目外包] 外包一个uniapp+uncloud的网页公众号开发,类AI聊天应用

外包接单 外包

开发要求:
1、请使用uni-app和uni-cloud进行开发,要求使用js开发,不要ts
2、功能界面需要精美,大气(有UI),动画效果需要有质感。
3、界面与交互要求
UI设计需提供完整设计稿(Figma/Sketch/PSD),开发者需按设计还原。
动画效果需流畅且有质感,需增加对动画在低端设备上流畅性的考量。
兼容性:Chrome、Safari、微信内置浏览器。
4、技术方案要求:
前端框架:uni-app(要求使用JavaScript进行开发)可使用其他UI框架
后端服务:uni-cloud阿里云版
支付解决方案:uni-pay
AI聊天:参考uni-ai-chat的流式响应实现(可选),建议结合uni-push2提高用户体验
UI设计:需精美大气,并具有良好的动画质感
兼容性:确保在主流浏览器上的良好表现
5、性能要求:
页面响应延迟需低于1秒。

开发者要求:
1、 至少两年以上uni-app手机端开发经验
2、 使用过uni-cloud,有作品可看
3、 接过2个或以上单子并成功交付

验收标准:
1、所有功能需求实现且无重大BUG。
2、UI设计稿与实现效果一致,动画流畅。
3、通过微信公众号、消息推送等官方审核流程。

交付要求:
1、需交付整套源代码
2、源代码注释详细

报价方式:
总包制(需分阶段付款:30%预付款+40%中期验收+30%交付尾款)。
30%预付款:合同签订后立即支付
40%中期验收:完成核心功能开发并通过内部测试,80%功能
30%交付尾款:所有功能开发完毕并通过最终验收后。
具体交付成果:完整的应用程序源码及其相关资源文件、用户手册和技术文档,涵盖部署指南、API文档等。确保应用程序在主流浏览器上的兼容性,并通过微信公众号平台的所有审核流程
验收标准:
应用程序完全按照需求文档的要求实现了所有功能,不存在重大BUG。
UI设计与最初的设计稿高度一致,动画效果流畅自然。
应用程序已成功上线或准备好上线,所有必要的官方审核均已通过

v:Peter-A-Gao
私信不一定看到,有意向+
UI设计稿签订合同后单独提供。

继续阅读 »

开发要求:
1、请使用uni-app和uni-cloud进行开发,要求使用js开发,不要ts
2、功能界面需要精美,大气(有UI),动画效果需要有质感。
3、界面与交互要求
UI设计需提供完整设计稿(Figma/Sketch/PSD),开发者需按设计还原。
动画效果需流畅且有质感,需增加对动画在低端设备上流畅性的考量。
兼容性:Chrome、Safari、微信内置浏览器。
4、技术方案要求:
前端框架:uni-app(要求使用JavaScript进行开发)可使用其他UI框架
后端服务:uni-cloud阿里云版
支付解决方案:uni-pay
AI聊天:参考uni-ai-chat的流式响应实现(可选),建议结合uni-push2提高用户体验
UI设计:需精美大气,并具有良好的动画质感
兼容性:确保在主流浏览器上的良好表现
5、性能要求:
页面响应延迟需低于1秒。

开发者要求:
1、 至少两年以上uni-app手机端开发经验
2、 使用过uni-cloud,有作品可看
3、 接过2个或以上单子并成功交付

验收标准:
1、所有功能需求实现且无重大BUG。
2、UI设计稿与实现效果一致,动画流畅。
3、通过微信公众号、消息推送等官方审核流程。

交付要求:
1、需交付整套源代码
2、源代码注释详细

报价方式:
总包制(需分阶段付款:30%预付款+40%中期验收+30%交付尾款)。
30%预付款:合同签订后立即支付
40%中期验收:完成核心功能开发并通过内部测试,80%功能
30%交付尾款:所有功能开发完毕并通过最终验收后。
具体交付成果:完整的应用程序源码及其相关资源文件、用户手册和技术文档,涵盖部署指南、API文档等。确保应用程序在主流浏览器上的兼容性,并通过微信公众号平台的所有审核流程
验收标准:
应用程序完全按照需求文档的要求实现了所有功能,不存在重大BUG。
UI设计与最初的设计稿高度一致,动画效果流畅自然。
应用程序已成功上线或准备好上线,所有必要的官方审核均已通过

v:Peter-A-Gao
私信不一定看到,有意向+
UI设计稿签订合同后单独提供。

收起阅读 »

关于unicloud-db模糊搜索_id字段无效的解决方案

clientDB

使用正则判定一下输入的值是否为objectId

如果是就使用查询command.eq( )方式查询

否则就使用test正则校验查询

isValidObjectId(id) {  
        return /^[0-9a-fA-F]{24}$/.test(id);  
      },  

 getWhere() {  
      const query = this.query.trim();  
      if (!query) return '';  

      // 优先处理 _id 精确查询  
      if (this.isValidObjectId(query)) {  
        return { _id: uniCloud.database().command.eq(query) };  
      }  

      // 处理普通字段正则搜索  
      const escapedQuery = query.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');  
      const regex = new RegExp(escapedQuery, 'i');  

      return {  
        $or: dbSearchFields.map(field => ({  
          [field]: regex  
        }))  
      };  
    },
继续阅读 »

使用正则判定一下输入的值是否为objectId

如果是就使用查询command.eq( )方式查询

否则就使用test正则校验查询

isValidObjectId(id) {  
        return /^[0-9a-fA-F]{24}$/.test(id);  
      },  

 getWhere() {  
      const query = this.query.trim();  
      if (!query) return '';  

      // 优先处理 _id 精确查询  
      if (this.isValidObjectId(query)) {  
        return { _id: uniCloud.database().command.eq(query) };  
      }  

      // 处理普通字段正则搜索  
      const escapedQuery = query.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');  
      const regex = new RegExp(escapedQuery, 'i');  

      return {  
        $or: dbSearchFields.map(field => ({  
          [field]: regex  
        }))  
      };  
    },
收起阅读 »