HBuilderX

HBuilderX

极客开发工具
uni-app

uni-app

开发一次,多端覆盖
uniCloud

uniCloud

云开发平台
HTML5+

HTML5+

增强HTML5的功能体验
MUI

MUI

上万Star的前端框架

关于editor 聚焦失焦,insert插入图片文字时候不弹出软键盘问题

软键盘 弹出软键盘 editor

最近在开发uniapp 即时通讯遇到一个问题
由于要发送表情 想在输入框显示表情,所以input和textarea都不可行,就选择用了editor
但是在用insertImage 插入表情的时候,editor就聚焦弹出软键盘了,就出现表情列表和软键盘同时出现的问题
这样体验不好,也不美观
经过多方查找 找到两个方法
1、通过renderjs方法给editor加inputmode 属性 这个属性可以自行查询
if(!val) {
this.$el.querySelector('.ql-editor').setAttribute('inputmode', 'none')
} else {
console.log(this.$el)
if(this.$el.querySelector('.ql-editor')) this.$el.querySelector('.ql-editor').removeAttribute('inputmode')
}
通过选择表情还是输入文字来增加移出inputmode 属性 (ql-editor这个是editor组件内部的一个div)
但是这种方法有一个bug 如果是长页面 ,插入表情 软键盘确实可以不弹出了但是 页面会抖动,
2、就是修改hubuider关于editor的源码
https://ask.dcloud.net.cn/question/103551
参考这篇文章
D:\HBuilderX\plugins\uniapp-cli\node_modules\@dcloudio\uni-app-plus\dist
修改view.umd.min.js 这个js
insertImage

i =  h.getLength()-1;  
 h.insertEmbed(i, "image", P, f.sources.USER);  
                    var M = !!/^(file|blob):/.test(P) && P;  
                    u = !0, h.formatText(i, 1, "data-local", M), h.formatText(i, 1, "alt",  
                        x), h.formatText(i, 1, "width", C), h.formatText(i, 1, "height", O),  
                      h.formatText(i, 1, "class", E), u = !1, h.formatText(i, 1,  
                        "data-custom", Object.keys(A).map((function(t) {  
                          return "".concat(t, "=").concat(A[t])  
                        // })).join("&"));  
                        })).join("&")), h.setSelection(null, f.sources.SILENT);  
                        h.blur()

这种方法完美实现

继续阅读 »

最近在开发uniapp 即时通讯遇到一个问题
由于要发送表情 想在输入框显示表情,所以input和textarea都不可行,就选择用了editor
但是在用insertImage 插入表情的时候,editor就聚焦弹出软键盘了,就出现表情列表和软键盘同时出现的问题
这样体验不好,也不美观
经过多方查找 找到两个方法
1、通过renderjs方法给editor加inputmode 属性 这个属性可以自行查询
if(!val) {
this.$el.querySelector('.ql-editor').setAttribute('inputmode', 'none')
} else {
console.log(this.$el)
if(this.$el.querySelector('.ql-editor')) this.$el.querySelector('.ql-editor').removeAttribute('inputmode')
}
通过选择表情还是输入文字来增加移出inputmode 属性 (ql-editor这个是editor组件内部的一个div)
但是这种方法有一个bug 如果是长页面 ,插入表情 软键盘确实可以不弹出了但是 页面会抖动,
2、就是修改hubuider关于editor的源码
https://ask.dcloud.net.cn/question/103551
参考这篇文章
D:\HBuilderX\plugins\uniapp-cli\node_modules\@dcloudio\uni-app-plus\dist
修改view.umd.min.js 这个js
insertImage

i =  h.getLength()-1;  
 h.insertEmbed(i, "image", P, f.sources.USER);  
                    var M = !!/^(file|blob):/.test(P) && P;  
                    u = !0, h.formatText(i, 1, "data-local", M), h.formatText(i, 1, "alt",  
                        x), h.formatText(i, 1, "width", C), h.formatText(i, 1, "height", O),  
                      h.formatText(i, 1, "class", E), u = !1, h.formatText(i, 1,  
                        "data-custom", Object.keys(A).map((function(t) {  
                          return "".concat(t, "=").concat(A[t])  
                        // })).join("&"));  
                        })).join("&")), h.setSelection(null, f.sources.SILENT);  
                        h.blur()

这种方法完美实现

收起阅读 »

商米设备获取设备序列号

为了获取商米SN序列号,研究了好久,直接上代码,希望对各位开发者有帮助

var Build = plus.android.importClass("android.os.Build");  
var SystemProperties = plus.android.importClass("android.os.SystemProperties");  
var sunmi_serial = '';  
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {  
    sunmi_serial = SystemProperties.get('ro.sunmi.serial')  
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {  
    sunmi_serial = Build.getSerial()  
} else{  
    sunmi_serial = Build.SERIAL  
}  
console.log('商米序列号',sunmi_serial);

权限不要忘记勾上

<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
继续阅读 »

为了获取商米SN序列号,研究了好久,直接上代码,希望对各位开发者有帮助

var Build = plus.android.importClass("android.os.Build");  
var SystemProperties = plus.android.importClass("android.os.SystemProperties");  
var sunmi_serial = '';  
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {  
    sunmi_serial = SystemProperties.get('ro.sunmi.serial')  
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {  
    sunmi_serial = Build.getSerial()  
} else{  
    sunmi_serial = Build.SERIAL  
}  
console.log('商米序列号',sunmi_serial);

权限不要忘记勾上

<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
收起阅读 »

关于uniapp 集成友盟统计,离线SDK打包问题(避坑)

友盟

一、SDK版本:3.4.15 、Hx版本3.4.15

二、Android 平台集成友盟统计,离线打包

  1. 按照 官方文档 添加权限、依赖库、dcloud_properties.xm配置;
    官方文档dcloud_properties.xm配置有问题,修改services节点如下:
    <services>  
    <service name="Statistic-Umeng" value="io.dcloud.feature.statistics.umeng.StatisticsBootImpl"/>  
    </services>

按照官方文档集成友盟统计后,友盟后台怎么都没有数据,尝试在重写Application,手动初始化友盟sdk,很快就有数据上来,但是并非最佳处理方案,于是提交了云打包,对比版本包的配置文件,发现dcloud_properties.xm 有出入。

三、IOS平台集成友盟统计,离线打包 (官方文档

  1. IOS 平台也是一样的坑,反复对比了 离线SDK ,/SDK/Bundles/PandoraApi.bundle/feature.plist 文件的配置,发现出入很大。
    按照官方的集成步骤,需要修改Statistic节点,如图:

    通过云打包,分析包里的feature.plist 文件配置,出现了如下差异


通过官方QQ群,确认,最后配置修改为和云打包的一直,如图;

2.官方文档没有提到配置渠道,如图:


在umeng -- appkey 下继续增加 channel 节点,配置即可,如图:

四、业务代码中调用,官方文档
plus.statistic.eventTrig('launch',{"type": '统计启动次数' });
友盟后台注册对应的自定义事件。

至此,离线版本SDK,友盟统计集成完毕!感觉踩了大坑,

继续阅读 »

一、SDK版本:3.4.15 、Hx版本3.4.15

二、Android 平台集成友盟统计,离线打包

  1. 按照 官方文档 添加权限、依赖库、dcloud_properties.xm配置;
    官方文档dcloud_properties.xm配置有问题,修改services节点如下:
    <services>  
    <service name="Statistic-Umeng" value="io.dcloud.feature.statistics.umeng.StatisticsBootImpl"/>  
    </services>

按照官方文档集成友盟统计后,友盟后台怎么都没有数据,尝试在重写Application,手动初始化友盟sdk,很快就有数据上来,但是并非最佳处理方案,于是提交了云打包,对比版本包的配置文件,发现dcloud_properties.xm 有出入。

三、IOS平台集成友盟统计,离线打包 (官方文档

  1. IOS 平台也是一样的坑,反复对比了 离线SDK ,/SDK/Bundles/PandoraApi.bundle/feature.plist 文件的配置,发现出入很大。
    按照官方的集成步骤,需要修改Statistic节点,如图:

    通过云打包,分析包里的feature.plist 文件配置,出现了如下差异


通过官方QQ群,确认,最后配置修改为和云打包的一直,如图;

2.官方文档没有提到配置渠道,如图:


在umeng -- appkey 下继续增加 channel 节点,配置即可,如图:

四、业务代码中调用,官方文档
plus.statistic.eventTrig('launch',{"type": '统计启动次数' });
友盟后台注册对应的自定义事件。

至此,离线版本SDK,友盟统计集成完毕!感觉踩了大坑,

收起阅读 »

uni-app 应用内打开本地pdf,不需要原生插件,支持iOS、andorid

uni-app 应用内打开本地pdf,不需要原生插件,支持iOS、andorid

有偿提供源码,有需要的加QQ:543610866

uni-app 应用内打开本地pdf,不需要原生插件,支持iOS、andorid

有偿提供源码,有需要的加QQ:543610866

uniapp 原生模块 全栈开发,接单欢迎老板联系QQ:195510690

外包接单

接单欢迎老板联系QQ:195510690
uniapp 原生模块 全栈开发,熟悉前后端开发,可以做uni-app的混合app
可做小程序,也熟悉安卓java和objective-c,可做原生app开发,及原生模块开发
小程序开发也ok,欢迎联系咨询!!!

接单欢迎老板联系QQ:195510690
uniapp 原生模块 全栈开发,熟悉前后端开发,可以做uni-app的混合app
可做小程序,也熟悉安卓java和objective-c,可做原生app开发,及原生模块开发
小程序开发也ok,欢迎联系咨询!!!

uniapp的环境变量.env

uniapp HBuilderX

背景:之前在cli编译方式下,一直使用.env的方式进行环境变量的加载,非常的方便,而且在部署上也是把环境文件与开发人员分离开的。但是在使用HBuilderX的方式部署时,.env文件是加载不到的,需要重新思考和处理这个环境变量的问题。刚开始,我尝试使用了js做判断,在我看来,不算是个好方法,因为要在main.js中调用,在我看来在编译时使用最佳。所以,自己尝试了一下,也希望能分享和交流。

一、环境变量与编译方式

1.CLI编译

也就是:vue-cli-service的打包方式
我的理解:内核还是webpack,但是额外增加了一些处理,尤其是环境变量的处理。
注意:vue-cli-service只有三种环境,我之前以为可以自定义,其实不可以。
参考官方文档:https://cli.vuejs.org/zh/guide/mode-and-env.html#环境变量
这里明确说了:
想要了解解析环境文件规则的细节,请参考 dotenv。
vue-cli-service使用dotenv解析.env文件之后,使用@vue/cli-service/lib/util/resolveClientEnv.js

const prefixRE = /^VUE_APP_/  

module.exports = function resolveClientEnv (options, raw) {  
  const env = {}  
  Object.keys(process.env).forEach(key => {  
    if (prefixRE.test(key) || key === 'NODE_ENV') {  
      env[key] = process.env[key]  
    }  
  })  
  env.BASE_URL = options.publicPath  

  if (raw) {  
    return env  
  }  

  for (const key in env) {  
    env[key] = JSON.stringify(env[key])  
  }  
  return {  
    'process.env': env  
  }  
}  

过滤了一部分key,不是APP_VUE*这个开头的全局变量就会被过滤掉,此外还保留了NODE_ENV

通常来说,我们都是在项目的根目录下面执行vue-cli-service,所以默认的环境变量文件.env也是在根目录下面。

2.HBuilderX编译

HBuilderX的编译时,也是使用的webpack。但是HBuilderX的编译,是没有处理根目录下的.env文件的。

二、解决方案

1.使HBuilderX也能自动加载.env文件

在根目录下的vue.config.js(如果没有就创建一个)

const webpack = require('webpack')  
const dotenv = require('dotenv')  

module.exports = {  
  chainWebpack: config => {  
    config  
      .plugin('define')  
      .tap(args => {  
        //console.log(args)  

        const config = getEnvsByDot()  
        //console.log(config)  
        // 将自定义的环境变量塞入配置中  
                //这里有个格式转化时的字符串的坑  
        //'"http://127.0.0.1:8088/"' //这种没问题  
        //'http://127.0.0.1:8088/' //这种就报错了!  
        Object.keys(config).forEach(key => {  
            if(typeof config[key] == "string"){  
                config[key] = '"'+config[key]+'"'  
            }  
            args[0]['process.env'][key] = config[key]  

        })  
        //args[0]['process.env'] = Object.assign(args[0]['process.env'],config)  
        console.log(args)  
        return args  
      })  
  }  
}  

/**  
 * 从.env中获取  
 * 使用了dotenv依赖  
 * 模仿vue-cli-service,不是APP_VUE*这个开头的全局变量就会被过滤掉  
 */  
function getEnvsByDot(){  
    const prefixRE = /^VUE_APP_/  
    let dotEnvs = {}  
    //1.先加载通用环境变量  
    const envPath0 = __dirname+'/.env'  
    const dotEnvsConfig0 = dotenv.config({path:envPath0})  
    console.log(dotEnvsConfig0)  

    if(!dotEnvsConfig0.error){  
        Object.keys(dotEnvsConfig0.parsed).forEach(key => {  
          if (prefixRE.test(key) ) {  
            dotEnvs[key] = dotEnvsConfig0.parsed[key]  
          }  
        })  
    }  
    //2.再加载专属环境变量  
    let env='local'  
    if (process.env.NODE_ENV === 'development') {  
        env='dev'  
    } else if (process.env.NODE_ENV === 'production') {  
        env='prod'  
    }else{  
        env=process.env.NODE_ENV  
    }  

    const envPath = __dirname+'/.env.'+env  
    const dotEnvsConfig = dotenv.config({path:envPath})  
    console.log(dotEnvsConfig)  
    if(!dotEnvsConfig.error){  
        Object.keys(dotEnvsConfig.parsed).forEach(key => {  
          if (prefixRE.test(key) ) {  
            dotEnvs[key] = dotEnvsConfig.parsed[key]  
          }  
        })  
    }  

    return dotEnvs  
}

当然,你也可以不过滤VUE_APP_前缀,自由的使用环境变量,自己注意不要产生与系统自带变量名的冲突就好了。
这个方法,应该足够让.env文件在HBuilderX下的使用与cli一样舒服了。但也带来一个问题,如果你这个项目同时使用cli编译的话,可能会导致.env被加载两次。当然了一般来说,由于两种方式创建的项目的文件夹结构不一样,所以可能你不会遇到既是用cli又是用HBuilderX编译的情况。

2.用yaml文件编译

其实yaml文件类型这几年在配置文件上用得挺多的,好读好写。
同样是在根目录下的vue.config.js(如果没有就创建一个)

const webpack = require('webpack')  
const YAML = require('yaml')  
const fs = require('fs')  

module.exports = {  
  chainWebpack: config => {  
    config  
      .plugin('define')  
      .tap(args => {  
        console.log(args)  

        const config = getEnvsByYaml()  
        console.log(config)  
        // 将自定义的环境变量塞入配置中  
        args[0]['process.env'] = Object.assign(args[0]['process.env'],config)  
        console.log(args)  
        return args  
      })  
  }  
}  

/**  
 * 从env文件中读取配置:  
 * 1.要获取文件绝对路径,因为相对路径是相对于编译器的,而不是项目的根目录。使用了__dirname。  
 * 2.使用了yaml格式。  
 */  
function getEnvsByYaml(){  
    //1.先加载通用环境变量  
    const prefixRE = /^VUE_APP_/  
    let yamlEnvs = {}  
    let config0 = {}  
    try{  
        const envYaml0 = fs.readFileSync(__dirname+'/.env.yaml','utf8')  
        config0 = YAML.parse(envYaml0)  
    }catch(e){  
        console.log(e)  
    }  
    // console.log(config0)  
    Object.keys(config0).forEach(key => {  
      if (prefixRE.test(key) ) {  
        yamlEnvs[key] = config0[key]  
      }  
    })  

    //2.再加载专属环境变量  
    let env='local'  
    if (process.env.NODE_ENV === 'development') {  
        env='dev'  
    } else if (process.env.NODE_ENV === 'production') {  
        env='prod'  
    }else{  
        env=process.env.NODE_ENV  
    }  

    let config = {}  
    try{  
        const envYaml = fs.readFileSync(__dirname+'/.env.'+env+'.yaml','utf8')  
        config = YAML.parse(envYaml)  
    }catch(e){  
        console.log(e)  
    }  
    // console.log(config)  
    Object.keys(config).forEach(key => {  
      if (prefixRE.test(key) ) {  
        yamlEnvs[key] = config[key]  
      }  
    })  

    return yamlEnvs  
}

3.同时使用.env和yaml

配置好,爱用哪个就用哪个,也可以同时用,但要确定好优先级。我个人会把yaml的优先级放高一点,因为它更结构化。
方法就是把上面两个的代码一次执行,先下载.env,再加载yaml

继续阅读 »

背景:之前在cli编译方式下,一直使用.env的方式进行环境变量的加载,非常的方便,而且在部署上也是把环境文件与开发人员分离开的。但是在使用HBuilderX的方式部署时,.env文件是加载不到的,需要重新思考和处理这个环境变量的问题。刚开始,我尝试使用了js做判断,在我看来,不算是个好方法,因为要在main.js中调用,在我看来在编译时使用最佳。所以,自己尝试了一下,也希望能分享和交流。

一、环境变量与编译方式

1.CLI编译

也就是:vue-cli-service的打包方式
我的理解:内核还是webpack,但是额外增加了一些处理,尤其是环境变量的处理。
注意:vue-cli-service只有三种环境,我之前以为可以自定义,其实不可以。
参考官方文档:https://cli.vuejs.org/zh/guide/mode-and-env.html#环境变量
这里明确说了:
想要了解解析环境文件规则的细节,请参考 dotenv。
vue-cli-service使用dotenv解析.env文件之后,使用@vue/cli-service/lib/util/resolveClientEnv.js

const prefixRE = /^VUE_APP_/  

module.exports = function resolveClientEnv (options, raw) {  
  const env = {}  
  Object.keys(process.env).forEach(key => {  
    if (prefixRE.test(key) || key === 'NODE_ENV') {  
      env[key] = process.env[key]  
    }  
  })  
  env.BASE_URL = options.publicPath  

  if (raw) {  
    return env  
  }  

  for (const key in env) {  
    env[key] = JSON.stringify(env[key])  
  }  
  return {  
    'process.env': env  
  }  
}  

过滤了一部分key,不是APP_VUE*这个开头的全局变量就会被过滤掉,此外还保留了NODE_ENV

通常来说,我们都是在项目的根目录下面执行vue-cli-service,所以默认的环境变量文件.env也是在根目录下面。

2.HBuilderX编译

HBuilderX的编译时,也是使用的webpack。但是HBuilderX的编译,是没有处理根目录下的.env文件的。

二、解决方案

1.使HBuilderX也能自动加载.env文件

在根目录下的vue.config.js(如果没有就创建一个)

const webpack = require('webpack')  
const dotenv = require('dotenv')  

module.exports = {  
  chainWebpack: config => {  
    config  
      .plugin('define')  
      .tap(args => {  
        //console.log(args)  

        const config = getEnvsByDot()  
        //console.log(config)  
        // 将自定义的环境变量塞入配置中  
                //这里有个格式转化时的字符串的坑  
        //'"http://127.0.0.1:8088/"' //这种没问题  
        //'http://127.0.0.1:8088/' //这种就报错了!  
        Object.keys(config).forEach(key => {  
            if(typeof config[key] == "string"){  
                config[key] = '"'+config[key]+'"'  
            }  
            args[0]['process.env'][key] = config[key]  

        })  
        //args[0]['process.env'] = Object.assign(args[0]['process.env'],config)  
        console.log(args)  
        return args  
      })  
  }  
}  

/**  
 * 从.env中获取  
 * 使用了dotenv依赖  
 * 模仿vue-cli-service,不是APP_VUE*这个开头的全局变量就会被过滤掉  
 */  
function getEnvsByDot(){  
    const prefixRE = /^VUE_APP_/  
    let dotEnvs = {}  
    //1.先加载通用环境变量  
    const envPath0 = __dirname+'/.env'  
    const dotEnvsConfig0 = dotenv.config({path:envPath0})  
    console.log(dotEnvsConfig0)  

    if(!dotEnvsConfig0.error){  
        Object.keys(dotEnvsConfig0.parsed).forEach(key => {  
          if (prefixRE.test(key) ) {  
            dotEnvs[key] = dotEnvsConfig0.parsed[key]  
          }  
        })  
    }  
    //2.再加载专属环境变量  
    let env='local'  
    if (process.env.NODE_ENV === 'development') {  
        env='dev'  
    } else if (process.env.NODE_ENV === 'production') {  
        env='prod'  
    }else{  
        env=process.env.NODE_ENV  
    }  

    const envPath = __dirname+'/.env.'+env  
    const dotEnvsConfig = dotenv.config({path:envPath})  
    console.log(dotEnvsConfig)  
    if(!dotEnvsConfig.error){  
        Object.keys(dotEnvsConfig.parsed).forEach(key => {  
          if (prefixRE.test(key) ) {  
            dotEnvs[key] = dotEnvsConfig.parsed[key]  
          }  
        })  
    }  

    return dotEnvs  
}

当然,你也可以不过滤VUE_APP_前缀,自由的使用环境变量,自己注意不要产生与系统自带变量名的冲突就好了。
这个方法,应该足够让.env文件在HBuilderX下的使用与cli一样舒服了。但也带来一个问题,如果你这个项目同时使用cli编译的话,可能会导致.env被加载两次。当然了一般来说,由于两种方式创建的项目的文件夹结构不一样,所以可能你不会遇到既是用cli又是用HBuilderX编译的情况。

2.用yaml文件编译

其实yaml文件类型这几年在配置文件上用得挺多的,好读好写。
同样是在根目录下的vue.config.js(如果没有就创建一个)

const webpack = require('webpack')  
const YAML = require('yaml')  
const fs = require('fs')  

module.exports = {  
  chainWebpack: config => {  
    config  
      .plugin('define')  
      .tap(args => {  
        console.log(args)  

        const config = getEnvsByYaml()  
        console.log(config)  
        // 将自定义的环境变量塞入配置中  
        args[0]['process.env'] = Object.assign(args[0]['process.env'],config)  
        console.log(args)  
        return args  
      })  
  }  
}  

/**  
 * 从env文件中读取配置:  
 * 1.要获取文件绝对路径,因为相对路径是相对于编译器的,而不是项目的根目录。使用了__dirname。  
 * 2.使用了yaml格式。  
 */  
function getEnvsByYaml(){  
    //1.先加载通用环境变量  
    const prefixRE = /^VUE_APP_/  
    let yamlEnvs = {}  
    let config0 = {}  
    try{  
        const envYaml0 = fs.readFileSync(__dirname+'/.env.yaml','utf8')  
        config0 = YAML.parse(envYaml0)  
    }catch(e){  
        console.log(e)  
    }  
    // console.log(config0)  
    Object.keys(config0).forEach(key => {  
      if (prefixRE.test(key) ) {  
        yamlEnvs[key] = config0[key]  
      }  
    })  

    //2.再加载专属环境变量  
    let env='local'  
    if (process.env.NODE_ENV === 'development') {  
        env='dev'  
    } else if (process.env.NODE_ENV === 'production') {  
        env='prod'  
    }else{  
        env=process.env.NODE_ENV  
    }  

    let config = {}  
    try{  
        const envYaml = fs.readFileSync(__dirname+'/.env.'+env+'.yaml','utf8')  
        config = YAML.parse(envYaml)  
    }catch(e){  
        console.log(e)  
    }  
    // console.log(config)  
    Object.keys(config).forEach(key => {  
      if (prefixRE.test(key) ) {  
        yamlEnvs[key] = config[key]  
      }  
    })  

    return yamlEnvs  
}

3.同时使用.env和yaml

配置好,爱用哪个就用哪个,也可以同时用,但要确定好优先级。我个人会把yaml的优先级放高一点,因为它更结构化。
方法就是把上面两个的代码一次执行,先下载.env,再加载yaml

收起阅读 »

大咖授课+项目实战+工作offer,2022数据智能夏令营火热招募中!

作为浙江省温州市政府2022年启动的重点建设项目,中国(温州)数据智能与安全服务创新园【简称中国(温州)数安港】致力于推进数据要素、优质企业和创新力量的集聚,探索安全合规的数据市场化新路径,加快培育数据智能与安全服务产业生态。

数安港正着力打造一套数据安全与合规体系、一个大数据联合计算中心、一个专业司法保障部门、一个工程师学院等“九个一”体系。其中,专业人才的培育既是数安港建设的核心之一,更是数智产业创新发展的重要引擎。

对此,中国(温州)数安港特面向高校学生及社会青年人才发起“数据智能夏令营”活动,通过提供全方位、沉浸式学习课程和实践机会,挖掘、培育更多“高精尖”数据技术人才,为数据智能领域创新发展注入新力量。

|主办单位|
中国(温州)数据智能与安全服务创新园
温州市高教园区建设管理委员会

|承办单位|
每日互动股份有限公司
浙江省大数据联合计算中心有限公司

活动安排

活动时间:2022年7月1日-7月7日

活动地点:中国(温州)数安港

(浙江省温州市瓯海经济开发区北纬一路27号)

整体日程:

7月1日:入营报到+欢迎派对

7月2日-7月6日:夏令营课程培训

7月7日:小组汇报+结营仪式

具体课程安排(拟):

夏令营导师阵容(拟邀)

陈积明 浙江工业大学副校长

李 玺 浙江大学教授

金 盛 浙江大学副教授

王 巍 微博COO、新浪移动CEO

汪 源 网易副总裁、网易杭州研究院执行院长

王仲远 快手技术副总裁、MMU负责人

徐甲甲 科大讯飞股份有限公司副总裁

方 毅 每日互动股份有限公司CEO

杜小飞 数因科技CEO

汪奕菲 极豆科技CEO

叶新江 每日互动股份有限公司CTO

吴嘉之 资深算法专家

何 莺 量化算法专家

报名与选拔

招募对象:

对数据智能相关领域有浓厚兴趣,并有志于在温发展的高校学生及社会青年人才(计算机、信息技术、电子信息工程等理工类专业,经管、法学、新闻传播等人文社科类专业人员优先)。

报名时间:

即日起至2022年6月27日18:00

报名材料:

*1、个人简历

*2、过往竞赛及项目经历

3、成绩证明

4、专业技能资格证书

报名方式:

将上述报名材料以邮件形式发送至报名邮箱DataCamp@getui.com,邮件主题请以“报名+姓名+学校”命名

备注:带“*”为必交的材料,其余为弹性材料,如能提供将对审核选拔有所帮助。

审核选拔:

收到报名申请材料后,将安排专人对报名材料进行初步审核,并结合线上面试方式同步复审,择优录取。

相关说明

费用说明:

本次夏令营不收取任何培训费用,并且为每位入营学员提供路费报销(飞机经济舱、高铁二等座);所有入营学员在夏令营期间的食宿等均由组委会提供。

防疫说明

本次活动举办及学员安排将严格遵守全国疫情防控要求和当地防疫政策,必要时,将视情况作出相应调整。

数安港介绍

续写数据智能创新史,打造数据安全先行区。2022年2月,浙江省温州市政府启动重点建设项目——中国(温州)数安港。

坐落于瓯海区的数安港,致力于推进数据要素、优质企业和创新力量的集聚,探索安全合规的数据市场化新路径,加快培育数据智能与安全服务产业生态。目前已成功吸引华为、京东、每日互动等26家企业入驻。

被寄予厚望的数安港,是产业发展的风向标、培育人才的创新园,更有望成为中国数字经济的重要枢纽。

这一片创新的热土,诚邀有志之士的加入!

2022数据智能夏令营

即刻报名

咨询电话:13777844272 张老师(微信同号)

咨询QQ:997786184

申请邮箱:DataCamp@getui.com

继续阅读 »

作为浙江省温州市政府2022年启动的重点建设项目,中国(温州)数据智能与安全服务创新园【简称中国(温州)数安港】致力于推进数据要素、优质企业和创新力量的集聚,探索安全合规的数据市场化新路径,加快培育数据智能与安全服务产业生态。

数安港正着力打造一套数据安全与合规体系、一个大数据联合计算中心、一个专业司法保障部门、一个工程师学院等“九个一”体系。其中,专业人才的培育既是数安港建设的核心之一,更是数智产业创新发展的重要引擎。

对此,中国(温州)数安港特面向高校学生及社会青年人才发起“数据智能夏令营”活动,通过提供全方位、沉浸式学习课程和实践机会,挖掘、培育更多“高精尖”数据技术人才,为数据智能领域创新发展注入新力量。

|主办单位|
中国(温州)数据智能与安全服务创新园
温州市高教园区建设管理委员会

|承办单位|
每日互动股份有限公司
浙江省大数据联合计算中心有限公司

活动安排

活动时间:2022年7月1日-7月7日

活动地点:中国(温州)数安港

(浙江省温州市瓯海经济开发区北纬一路27号)

整体日程:

7月1日:入营报到+欢迎派对

7月2日-7月6日:夏令营课程培训

7月7日:小组汇报+结营仪式

具体课程安排(拟):

夏令营导师阵容(拟邀)

陈积明 浙江工业大学副校长

李 玺 浙江大学教授

金 盛 浙江大学副教授

王 巍 微博COO、新浪移动CEO

汪 源 网易副总裁、网易杭州研究院执行院长

王仲远 快手技术副总裁、MMU负责人

徐甲甲 科大讯飞股份有限公司副总裁

方 毅 每日互动股份有限公司CEO

杜小飞 数因科技CEO

汪奕菲 极豆科技CEO

叶新江 每日互动股份有限公司CTO

吴嘉之 资深算法专家

何 莺 量化算法专家

报名与选拔

招募对象:

对数据智能相关领域有浓厚兴趣,并有志于在温发展的高校学生及社会青年人才(计算机、信息技术、电子信息工程等理工类专业,经管、法学、新闻传播等人文社科类专业人员优先)。

报名时间:

即日起至2022年6月27日18:00

报名材料:

*1、个人简历

*2、过往竞赛及项目经历

3、成绩证明

4、专业技能资格证书

报名方式:

将上述报名材料以邮件形式发送至报名邮箱DataCamp@getui.com,邮件主题请以“报名+姓名+学校”命名

备注:带“*”为必交的材料,其余为弹性材料,如能提供将对审核选拔有所帮助。

审核选拔:

收到报名申请材料后,将安排专人对报名材料进行初步审核,并结合线上面试方式同步复审,择优录取。

相关说明

费用说明:

本次夏令营不收取任何培训费用,并且为每位入营学员提供路费报销(飞机经济舱、高铁二等座);所有入营学员在夏令营期间的食宿等均由组委会提供。

防疫说明

本次活动举办及学员安排将严格遵守全国疫情防控要求和当地防疫政策,必要时,将视情况作出相应调整。

数安港介绍

续写数据智能创新史,打造数据安全先行区。2022年2月,浙江省温州市政府启动重点建设项目——中国(温州)数安港。

坐落于瓯海区的数安港,致力于推进数据要素、优质企业和创新力量的集聚,探索安全合规的数据市场化新路径,加快培育数据智能与安全服务产业生态。目前已成功吸引华为、京东、每日互动等26家企业入驻。

被寄予厚望的数安港,是产业发展的风向标、培育人才的创新园,更有望成为中国数字经济的重要枢纽。

这一片创新的热土,诚邀有志之士的加入!

2022数据智能夏令营

即刻报名

咨询电话:13777844272 张老师(微信同号)

咨询QQ:997786184

申请邮箱:DataCamp@getui.com

收起阅读 »

云函数与云对象相关

云对象

不知何月何日在云函数中穿插了一段云对象的代码,可能是之前想试一下云对象用法没删干净,但是一直在h5运行也没有问题就给忘了。然后最近app调试一直报错require(...).main is not a function,一段一段代码去排查注释才发现的问题。

表现:H5运行正常,APP运行调用函数反馈访问任何一个云函数功能均得到报错:require(...).main is not a function

对于 require() is not a function 网络常见回答是教用户在require()后面添加分号 ; 不过报错在APP段始终存在的。

针对这种奇奇怪怪的问题还是多从自己的代码方面看看有无冗余代码。类似问题还有诸如错误的import引用了未知变量。

当然云函数与云对象不可共存是文档中明确标注的问题,不过还是希望以后能在编译时检测到提示吧,虽然是自己的疏忽。

继续阅读 »

不知何月何日在云函数中穿插了一段云对象的代码,可能是之前想试一下云对象用法没删干净,但是一直在h5运行也没有问题就给忘了。然后最近app调试一直报错require(...).main is not a function,一段一段代码去排查注释才发现的问题。

表现:H5运行正常,APP运行调用函数反馈访问任何一个云函数功能均得到报错:require(...).main is not a function

对于 require() is not a function 网络常见回答是教用户在require()后面添加分号 ; 不过报错在APP段始终存在的。

针对这种奇奇怪怪的问题还是多从自己的代码方面看看有无冗余代码。类似问题还有诸如错误的import引用了未知变量。

当然云函数与云对象不可共存是文档中明确标注的问题,不过还是希望以后能在编译时检测到提示吧,虽然是自己的疏忽。

收起阅读 »

承接uni-app项目外包,网站、小程序、APP都可以接哦

Vue pc uni_app

在线接单,享受满减优惠5k-0.5k,1w-1k,2w-2k,以此类推,

个人团队接uni-app外包项目开发。承接UI、H5、小程序、、PC端网站、后台系统等产品

有需求的老板可以联系

联系QQ:1819080149 vx:web9688

在线接单,享受满减优惠5k-0.5k,1w-1k,2w-2k,以此类推,

个人团队接uni-app外包项目开发。承接UI、H5、小程序、、PC端网站、后台系统等产品

有需求的老板可以联系

联系QQ:1819080149 vx:web9688

2022后的跨平台应用框架只有2个,一个是Tauri,一个是Flutter

flutter

Electron目前是桌面应用最成熟的方案,太多的成熟案例了VScode,Teams,国内的有迅雷等等。
QT起步很早,但是单一个框架商业化,还不是像Unity那样行业内有绝对优势的真的发展的下去吗?其实走开源路线也能赚钱,不知道QT的team怎么想的。

Tauri是Electron的新竞争对手,桌面端目前没有成熟案例,不过热度升的是真的快。
Tauri和Flutter一样野心很大,想跨全平台,还想做Android和iOS。
不过是否能做成Android和iOS还是一个问号,别最后像Capacitor那样说是新技术,但是没人用尴。
Tauri自身还在和Quasar合作,Quasar是目前我个人认为基于Vue的最好的跨平台框架了,但是他自身是一个UI+后端统一api的缝合怪,Tauri正在和Quasar合作,缝合Tauri后我去试试再。

前端基于webview其实不是致命伤,最多部分优化不好的应用或者很老的机器跑起来才卡。

Flutter桌面应用刚起步,没有成熟案例,不过手机跨两端还是Flutter最成熟,热度也最高,对于一个2019年正式推出的框架成绩真的很好了。
RN热度依然在降,做过实际项目的都知道,稍微复杂一点,还不如两个Team各自写原生的。Airbnb退出就是最好的证明。

其他的一些选择:
微软基于.net的MAUI不好说,谁知道他们是否又能像VScode那样,突然又蹦出一个杀手级的应用或者说开发套件
苹果SwiftUI和安卓Compose各自搞得那套不会给对手优化到哪里去的。
Uni-app还是跨平台小程序唯一选择,没有桌面端api和UI配套,只能吃吃国内各家小程序各自搞垄断的红利了。

我大胆预言一下,2022后的跨平台应用框架只有2个,一个是Tauri,一个是Flutter。

继续阅读 »

Electron目前是桌面应用最成熟的方案,太多的成熟案例了VScode,Teams,国内的有迅雷等等。
QT起步很早,但是单一个框架商业化,还不是像Unity那样行业内有绝对优势的真的发展的下去吗?其实走开源路线也能赚钱,不知道QT的team怎么想的。

Tauri是Electron的新竞争对手,桌面端目前没有成熟案例,不过热度升的是真的快。
Tauri和Flutter一样野心很大,想跨全平台,还想做Android和iOS。
不过是否能做成Android和iOS还是一个问号,别最后像Capacitor那样说是新技术,但是没人用尴。
Tauri自身还在和Quasar合作,Quasar是目前我个人认为基于Vue的最好的跨平台框架了,但是他自身是一个UI+后端统一api的缝合怪,Tauri正在和Quasar合作,缝合Tauri后我去试试再。

前端基于webview其实不是致命伤,最多部分优化不好的应用或者很老的机器跑起来才卡。

Flutter桌面应用刚起步,没有成熟案例,不过手机跨两端还是Flutter最成熟,热度也最高,对于一个2019年正式推出的框架成绩真的很好了。
RN热度依然在降,做过实际项目的都知道,稍微复杂一点,还不如两个Team各自写原生的。Airbnb退出就是最好的证明。

其他的一些选择:
微软基于.net的MAUI不好说,谁知道他们是否又能像VScode那样,突然又蹦出一个杀手级的应用或者说开发套件
苹果SwiftUI和安卓Compose各自搞得那套不会给对手优化到哪里去的。
Uni-app还是跨平台小程序唯一选择,没有桌面端api和UI配套,只能吃吃国内各家小程序各自搞垄断的红利了。

我大胆预言一下,2022后的跨平台应用框架只有2个,一个是Tauri,一个是Flutter。

收起阅读 »

多个uni项目之间怎么维护?

SVN

公司整了4个app,他们之间90%的代码都是相同,静态资源更是一摸一样。
现在每次更新功能就要往另外几个app搬运。测试的工作量也是翻了倍。

真的是拴q了

公司整了4个app,他们之间90%的代码都是相同,静态资源更是一摸一样。
现在每次更新功能就要往另外几个app搬运。测试的工作量也是翻了倍。

真的是拴q了

承接uni-app项目外包,网站、小程序、APP都可以接

外包 小程序 uniapp

个人团队接uni-app外包项目开发。

有项目案例可看 有上线作品

有需求的老板可以联系

联系QQ:6864952 wx:wu1020yt

个人团队接uni-app外包项目开发。

有项目案例可看 有上线作品

有需求的老板可以联系

联系QQ:6864952 wx:wu1020yt