HBuilderX

HBuilderX

极客开发工具
uni-app

uni-app

开发一次,多端覆盖
uniCloud

uniCloud

云开发平台
HTML5+

HTML5+

增强HTML5的功能体验
MUI

MUI

上万Star的前端框架

微信公众号开发之客服功能的群发消息功能

  本周我们做了一个有技术含量的一个新功能:客服功能的群发消息功能。此功能主要用于微信公众号客服群发提醒,比如客户的商家认证审核通过,用户购买商品成功等功能提醒,可以有效减少网站项目开发所必要的资金节约。

  1. 接口代码。

接口代码如下:

public function reply_customer(){

$mtime=strtotime("-1 hour");

$where['add_time']=array("gt",$mtime);

$res=M("fa_need")->where($where)->order("id desc")->find();

$id=$res['id'];

$new_time=time();

$go_time=$res['add_time']+$res['show_time']*60;

if($new_time<$go_time){

$credit_level=$res['credit_level'];

$ya_money=$res['ya_money'];

$wh['credit_level']=array("egt",$credit_level);

$wh['ya_money']=array("egt",$ya_money);

$wh['ya_money']=array("neq",$ya_money);

$wh['jie_status']=3;

$list=M("user")->where($wh)->limit(199)->select();

foreach ($list as $key => $value) {

$info[]=$value['openid'];

}

$touser=I('touser');

$content="亲,有新任务哦,可以点击链接接单啦!";

//更换成自己的APPID和APPSECRET

$APPID="wx4ae938a141e9193a";

$APPSECRET="d0ef15664f42de92875f86b8f9f98edf";

$TOKEN_URL="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$APPID."&secret=".$APPSECRET;

$json=file_get_contents($TOKEN_URL);

$result=json_decode($json);

$ACC_TOKEN=$result->access_token;

foreach($info as $val){

$data = '{

"touser":"'.$val.'",

"msgtype":"text",

"text":

{

"content":"'.$content.'http://www.xxx.com/Task/task_details?id='.$id.'"

}

}';

$url = "https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=".$ACC_TOKEN;

$result = $this->https_post($url,$data);

$final = json_decode($result);

echo $final;

}

}

}

public function https_post($url,$data)

{

$curl = curl_init();

curl_setopt($curl, CURLOPT_URL, $url);

curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);

curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);

curl_setopt($curl, CURLOPT_POST, 1);

curl_setopt($curl, CURLOPT_POSTFIELDS, $data);

curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

$result = curl_exec($curl);

if (curl_errno($curl)) {

return 'Errno'.curl_error($curl);

}

curl_close($curl);

return $result;

}

  1. php调用接口代码

Php代码如下:

public function fa_need(){

vendor('Weixinup.jssdk');

$jssdk = new JSSDK("wx4ae938a141e9193a", "d0ef15664f42de92875f86b8f9f98edf");

$signPackage = $jssdk->GetSignPackage();

// var_dump($signPackage);die;

$this->assign('signPackage', $signPackage);

$uid=session('uid');

$model=M('user');

$list=$model->where("uid=$uid")->find();

$mod=M("school");

$school=$mod->select();

$this->reply_customer();

// if (I('id')!=""||!empty(I('id'))) {

// $faid["id"] = I('id');

// $res = M("fa_need")->where($faid)->find();

// $this->assign("fa_needinfo",$res);

// }

$this->assign("school",$school);

$this->assign("list",$list);

$this->display();

}

  好了,到这里大家应该清楚是如何实现的吧,那么如果还是存在有不理解的地方,可以留言咨询获取帮助解答。
  本文由专业的郑州小程序开发公司燚轩科技整理发布,原创不易,如需转载请注明出处!

继续阅读 »

  本周我们做了一个有技术含量的一个新功能:客服功能的群发消息功能。此功能主要用于微信公众号客服群发提醒,比如客户的商家认证审核通过,用户购买商品成功等功能提醒,可以有效减少网站项目开发所必要的资金节约。

  1. 接口代码。

接口代码如下:

public function reply_customer(){

$mtime=strtotime("-1 hour");

$where['add_time']=array("gt",$mtime);

$res=M("fa_need")->where($where)->order("id desc")->find();

$id=$res['id'];

$new_time=time();

$go_time=$res['add_time']+$res['show_time']*60;

if($new_time<$go_time){

$credit_level=$res['credit_level'];

$ya_money=$res['ya_money'];

$wh['credit_level']=array("egt",$credit_level);

$wh['ya_money']=array("egt",$ya_money);

$wh['ya_money']=array("neq",$ya_money);

$wh['jie_status']=3;

$list=M("user")->where($wh)->limit(199)->select();

foreach ($list as $key => $value) {

$info[]=$value['openid'];

}

$touser=I('touser');

$content="亲,有新任务哦,可以点击链接接单啦!";

//更换成自己的APPID和APPSECRET

$APPID="wx4ae938a141e9193a";

$APPSECRET="d0ef15664f42de92875f86b8f9f98edf";

$TOKEN_URL="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$APPID."&secret=".$APPSECRET;

$json=file_get_contents($TOKEN_URL);

$result=json_decode($json);

$ACC_TOKEN=$result->access_token;

foreach($info as $val){

$data = '{

"touser":"'.$val.'",

"msgtype":"text",

"text":

{

"content":"'.$content.'http://www.xxx.com/Task/task_details?id='.$id.'"

}

}';

$url = "https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=".$ACC_TOKEN;

$result = $this->https_post($url,$data);

$final = json_decode($result);

echo $final;

}

}

}

public function https_post($url,$data)

{

$curl = curl_init();

curl_setopt($curl, CURLOPT_URL, $url);

curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);

curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);

curl_setopt($curl, CURLOPT_POST, 1);

curl_setopt($curl, CURLOPT_POSTFIELDS, $data);

curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

$result = curl_exec($curl);

if (curl_errno($curl)) {

return 'Errno'.curl_error($curl);

}

curl_close($curl);

return $result;

}

  1. php调用接口代码

Php代码如下:

public function fa_need(){

vendor('Weixinup.jssdk');

$jssdk = new JSSDK("wx4ae938a141e9193a", "d0ef15664f42de92875f86b8f9f98edf");

$signPackage = $jssdk->GetSignPackage();

// var_dump($signPackage);die;

$this->assign('signPackage', $signPackage);

$uid=session('uid');

$model=M('user');

$list=$model->where("uid=$uid")->find();

$mod=M("school");

$school=$mod->select();

$this->reply_customer();

// if (I('id')!=""||!empty(I('id'))) {

// $faid["id"] = I('id');

// $res = M("fa_need")->where($faid)->find();

// $this->assign("fa_needinfo",$res);

// }

$this->assign("school",$school);

$this->assign("list",$list);

$this->display();

}

  好了,到这里大家应该清楚是如何实现的吧,那么如果还是存在有不理解的地方,可以留言咨询获取帮助解答。
  本文由专业的郑州小程序开发公司燚轩科技整理发布,原创不易,如需转载请注明出处!

收起阅读 »

底部导航栏窗体切换

这几天一直在研究底部导航栏页面切换的问题一直都是不得要领,看了论团里的不少文章但是自己copy过来却又失败了,今天突发奇想的使用jQuery试了一下还真的可以。不过也有一些小问题出现,就是偶尔会在右边和下边会有滚动条闪一下。不说了发代码给大神看一下帮我分析分析该怎么解决
mui.plusReady(function() {
//设置默认打开首页显示的子页序号;
var Index = 0;
//把子页的路径写在数组里面
var subpages = ['html/shoping.html', 'html/chat.html', 'html/focus.html', 'html/person.html'];
var self = plus.webview.currentWebview();
for(var i = 0; i < subpages.length; i++) {
var sub = plus.webview.create(
subpages[i], //子页url
subpages[i], //子页id
{
top: '0px', //设置距离顶部的距离
bottom: '50px' //设置距离底部的距离
}
);
//如不是我们设置的默认的子页则隐藏,否则添加到窗口中
if(i != Index) {
sub.hide();
}
//将webview对象填充到窗口
self.append(sub);
}
//点击切换窗口的实现代码部分
$(".mui-tab-item").on('tap', function() {
var c = $(this).index();
plus.webview.show(subpages[c]);

            });  

        });
继续阅读 »

这几天一直在研究底部导航栏页面切换的问题一直都是不得要领,看了论团里的不少文章但是自己copy过来却又失败了,今天突发奇想的使用jQuery试了一下还真的可以。不过也有一些小问题出现,就是偶尔会在右边和下边会有滚动条闪一下。不说了发代码给大神看一下帮我分析分析该怎么解决
mui.plusReady(function() {
//设置默认打开首页显示的子页序号;
var Index = 0;
//把子页的路径写在数组里面
var subpages = ['html/shoping.html', 'html/chat.html', 'html/focus.html', 'html/person.html'];
var self = plus.webview.currentWebview();
for(var i = 0; i < subpages.length; i++) {
var sub = plus.webview.create(
subpages[i], //子页url
subpages[i], //子页id
{
top: '0px', //设置距离顶部的距离
bottom: '50px' //设置距离底部的距离
}
);
//如不是我们设置的默认的子页则隐藏,否则添加到窗口中
if(i != Index) {
sub.hide();
}
//将webview对象填充到窗口
self.append(sub);
}
//点击切换窗口的实现代码部分
$(".mui-tab-item").on('tap', function() {
var c = $(this).index();
plus.webview.show(subpages[c]);

            });  

        });
收起阅读 »

HTML编程之页面滚动div固定效果的实现

  Jquery页面滚动条向下拉到div的位置时,此div就固定在顶部,向上拉时返回原位置Div在网页打开时固定在某个位置(不一定是网页的最顶端),当滚动条向下滚动时,页面的顶部到达此div位置后,此div就固定在网页的最顶部跟随移动,当滚动条向上滚动时,页面顶部高过此div原来的固定位置,此div就定在原位置不再跟随滚动条移动(相当于返回原来的位置)。下面就来详细分享一下源码:
<head>

<script src="js/jquery-1.7.1.min.js" type="text/javascript"></script>  

<script type="text/javascript">  
        window.onload = function () {  
            var pos =  $('#div1').offset();// offset() 获得div1当前的位置,左上角坐标(x,y)  
            $(window).scroll(function () { //滚动条滚动事件  
                if ($(this).scrollTop() > pos.top ) {  
                    $('#div1').css('width', '100px').css('top', $(this).scrollTop() - pos.top);  
                } else if ($(this).scrollTop() <=  pos.top ) {  
                    $('#div1').css('width', '100x').css('top',0).css('position', 'relative');  
                }  

            })  

        };  

</script>

</head>

<html>

<div id="div1" style="width:100px">  

    我就是要跟着滚动条移动的div.  

</div>  

</html>
  好了,看到这里大家应该清楚是如何实现的吧,如果还是存在不理解的地方或者不知道哪里出错了,都是可以留言来获得帮助和解答。

  本文由专业的郑州app开发公司燚轩科技整理发布,原创不易,如需转载请注明出处!

继续阅读 »

  Jquery页面滚动条向下拉到div的位置时,此div就固定在顶部,向上拉时返回原位置Div在网页打开时固定在某个位置(不一定是网页的最顶端),当滚动条向下滚动时,页面的顶部到达此div位置后,此div就固定在网页的最顶部跟随移动,当滚动条向上滚动时,页面顶部高过此div原来的固定位置,此div就定在原位置不再跟随滚动条移动(相当于返回原来的位置)。下面就来详细分享一下源码:
<head>

<script src="js/jquery-1.7.1.min.js" type="text/javascript"></script>  

<script type="text/javascript">  
        window.onload = function () {  
            var pos =  $('#div1').offset();// offset() 获得div1当前的位置,左上角坐标(x,y)  
            $(window).scroll(function () { //滚动条滚动事件  
                if ($(this).scrollTop() > pos.top ) {  
                    $('#div1').css('width', '100px').css('top', $(this).scrollTop() - pos.top);  
                } else if ($(this).scrollTop() <=  pos.top ) {  
                    $('#div1').css('width', '100x').css('top',0).css('position', 'relative');  
                }  

            })  

        };  

</script>

</head>

<html>

<div id="div1" style="width:100px">  

    我就是要跟着滚动条移动的div.  

</div>  

</html>
  好了,看到这里大家应该清楚是如何实现的吧,如果还是存在不理解的地方或者不知道哪里出错了,都是可以留言来获得帮助和解答。

  本文由专业的郑州app开发公司燚轩科技整理发布,原创不易,如需转载请注明出处!

收起阅读 »

【力谱云】【app制作开发】移动订货行业解决方案

**【力谱云】【app制作开发】移动订货行业解决方案***>

==移动订货==
移动订货解决方案,为分销商和品牌商提供的高效移动端批发、订货和分销解决方案
让您的客户像网购一样便捷地订货,让您像京东一样高效地对客户进行营销

==核心功能==
***移动订货
专属订货商城
多平台下单
本地配送管理
多渠道支付
订货管理App

***营销推广
多渠道推广
多级分销
精准营销推送
批发优惠折扣

***客户维护
会员制管理
产品价格保护
客户分级
预付卡
会员积分
在线客服

***数据分析
实时成交分析
商品分析
交易分析
分销报表
渠道报表

==高效营销,提升销量==
集成抢购、满减、多级分销等营销工具,支持推送、短信等有效营销方式,高频互动,促成订单,增强粘性

==移动订货,高效便捷==
像网购一样订货,随时随地下单,打造高效便捷的订货体验

==专属商城,独享客户==
搭建企业专属的订货分销商城,独享所有客户和数据,并彰显切品牌和实力

==全程掌控,提升效率==
订货流程全程追踪,告别错单、漏单、拖单,本地配送支持抢单,极大提升效率

继续阅读 »

**【力谱云】【app制作开发】移动订货行业解决方案***>

==移动订货==
移动订货解决方案,为分销商和品牌商提供的高效移动端批发、订货和分销解决方案
让您的客户像网购一样便捷地订货,让您像京东一样高效地对客户进行营销

==核心功能==
***移动订货
专属订货商城
多平台下单
本地配送管理
多渠道支付
订货管理App

***营销推广
多渠道推广
多级分销
精准营销推送
批发优惠折扣

***客户维护
会员制管理
产品价格保护
客户分级
预付卡
会员积分
在线客服

***数据分析
实时成交分析
商品分析
交易分析
分销报表
渠道报表

==高效营销,提升销量==
集成抢购、满减、多级分销等营销工具,支持推送、短信等有效营销方式,高频互动,促成订单,增强粘性

==移动订货,高效便捷==
像网购一样订货,随时随地下单,打造高效便捷的订货体验

==专属商城,独享客户==
搭建企业专属的订货分销商城,独享所有客户和数据,并彰显切品牌和实力

==全程掌控,提升效率==
订货流程全程追踪,告别错单、漏单、拖单,本地配送支持抢单,极大提升效率

收起阅读 »

【力谱云】【app开发制作】移动零售行业解决方案

5 App开发 移动APP

==移动零售单店版==>
移动零售解决方案,为线下生鲜、小型超市等零售门店提供的新零售解决方案,打通线上线下场景,
一站式实现与消费者的互动营销运营

==核心功能==>
: :移动门店 多平台移动门店
精准门店导航定位
线上下单线下服务
支持独立配送团队
移动收银台

: :营销推广 多渠道推广
人人分销
拼团秒杀
优惠券代金券
满减满送
内容营销

: :客户维护 积分管理
会员等级
预付卡
社交运营
内容运营

: :数据分析 实时成交分析
商品分析
交易分析
销售报表
订单分析

==高效营销,提升复购==
集成拼团、抢购、代金券和多级分销等营销工具,高频互动,精准营销

==线上线下融合,提升留存==
线下客户,线上运营,通过积分、会员等级、预付卡等模式提升客户忠诚度

==精美商城,提升品牌==
搭建精美的线上商城,提升体验,加快品牌树立

继续阅读 »

==移动零售单店版==>
移动零售解决方案,为线下生鲜、小型超市等零售门店提供的新零售解决方案,打通线上线下场景,
一站式实现与消费者的互动营销运营

==核心功能==>
: :移动门店 多平台移动门店
精准门店导航定位
线上下单线下服务
支持独立配送团队
移动收银台

: :营销推广 多渠道推广
人人分销
拼团秒杀
优惠券代金券
满减满送
内容营销

: :客户维护 积分管理
会员等级
预付卡
社交运营
内容运营

: :数据分析 实时成交分析
商品分析
交易分析
销售报表
订单分析

==高效营销,提升复购==
集成拼团、抢购、代金券和多级分销等营销工具,高频互动,精准营销

==线上线下融合,提升留存==
线下客户,线上运营,通过积分、会员等级、预付卡等模式提升客户忠诚度

==精美商城,提升品牌==
搭建精美的线上商城,提升体验,加快品牌树立

收起阅读 »

分享 一个 github 上的翻墙 上谷歌 google 的方法,方便大家找资料

翻墙

身为开发者,需要找各种资料时,百度很多搜索不到,这时使用Google, 是个不错的选择,github 上有个还不错的翻墙方法分享给那些还不懂翻墙找资料的朋友们。

Chrome一键翻墙包

继续阅读 »

身为开发者,需要找各种资料时,百度很多搜索不到,这时使用Google, 是个不错的选择,github 上有个还不错的翻墙方法分享给那些还不懂翻墙找资料的朋友们。

Chrome一键翻墙包

收起阅读 »

哪家的郑州小程序定制开发公司要优秀些

微信小程序

  最近的这几年当中,郑州小程序开发公司的数量开始变得越来越多,如雨后春笋般的涌现出来了,在大多数这个城市也不例外,可以看到现在的小程序开发公司是非常多的,如果有小程序开发需求的时候,是有非常多的选择的。那么对于投资者来说如何选择才能保证选择好的呢?下面就跟大家来分析解答一下。

  一、看公司的创意如何

  现在的手机小程序数量太多了,导致同质化非常的严重,有很多小程序设计毫无新意,在大众使用当中也不能够引起一些好的效果。如果设计团队非常具有创意,那么它设计开发出来的小程序也将是非常新颖的,能够在众多的小程序当中脱颖而出,从而吸引更多的用户,这样也是非常的具有竞争力的。因此在选择的时候一定要选择哪些具有创意的小程序开发公司,以提高小程序的市场竞争力。

  二、看开发团队的质量如何

  一般来讲,一家好的开发公司都是拥有自己的一个专业的研发团队,比如塔尖网络,因为只有拥有自己的团队,高素质的工作人员,才能够保证公司所接的所有的开发项目能够非常顺利的进行,对于开发的成果来说,有专业团队的公司对开发质量也是非常有保障的。

  一、看实际案例

  虽然说过去所做的一些东西,并不就一定能够代表这一开发公司的好坏,但是如果一个公司过去都没有做过几个实际案例,或者说所做的案例很多都是非常的失败的,那么又怎么能够相信呢?反之,如果一家公司之前完成了非常多的优秀的、成功的案例,那么也会更加放心。因此,在选择小程序开发公司的时候,不妨多去了解、浏览一下这个公司以往的开发案例。

  四、看性价比如何

  一般来讲,好的公司提供的开发服务性价比是非常高的,花费较少的钱就能够获得较大的收获,提供功能齐全的服务,因此在选择的时候可以多进行对比,在众多的公司当中选择一家性价比最高的小程序开发公司。

  可以看出,要想选择到一家好的小程序开发公司,就必须要多多的注意以上的这几点,只要注意到了以上的这几点,那么就一定可以选择到一家好的微信小程序开发公司,从而能够开发出更好的手机小程序,使公司能够获得更大的竞争优势。信息由郑州小程序开发燚轩科技整理发布。

继续阅读 »

  最近的这几年当中,郑州小程序开发公司的数量开始变得越来越多,如雨后春笋般的涌现出来了,在大多数这个城市也不例外,可以看到现在的小程序开发公司是非常多的,如果有小程序开发需求的时候,是有非常多的选择的。那么对于投资者来说如何选择才能保证选择好的呢?下面就跟大家来分析解答一下。

  一、看公司的创意如何

  现在的手机小程序数量太多了,导致同质化非常的严重,有很多小程序设计毫无新意,在大众使用当中也不能够引起一些好的效果。如果设计团队非常具有创意,那么它设计开发出来的小程序也将是非常新颖的,能够在众多的小程序当中脱颖而出,从而吸引更多的用户,这样也是非常的具有竞争力的。因此在选择的时候一定要选择哪些具有创意的小程序开发公司,以提高小程序的市场竞争力。

  二、看开发团队的质量如何

  一般来讲,一家好的开发公司都是拥有自己的一个专业的研发团队,比如塔尖网络,因为只有拥有自己的团队,高素质的工作人员,才能够保证公司所接的所有的开发项目能够非常顺利的进行,对于开发的成果来说,有专业团队的公司对开发质量也是非常有保障的。

  一、看实际案例

  虽然说过去所做的一些东西,并不就一定能够代表这一开发公司的好坏,但是如果一个公司过去都没有做过几个实际案例,或者说所做的案例很多都是非常的失败的,那么又怎么能够相信呢?反之,如果一家公司之前完成了非常多的优秀的、成功的案例,那么也会更加放心。因此,在选择小程序开发公司的时候,不妨多去了解、浏览一下这个公司以往的开发案例。

  四、看性价比如何

  一般来讲,好的公司提供的开发服务性价比是非常高的,花费较少的钱就能够获得较大的收获,提供功能齐全的服务,因此在选择的时候可以多进行对比,在众多的公司当中选择一家性价比最高的小程序开发公司。

  可以看出,要想选择到一家好的小程序开发公司,就必须要多多的注意以上的这几点,只要注意到了以上的这几点,那么就一定可以选择到一家好的微信小程序开发公司,从而能够开发出更好的手机小程序,使公司能够获得更大的竞争优势。信息由郑州小程序开发燚轩科技整理发布。

收起阅读 »

开发微信小程序找小程序开发平台要多少钱呢

微信小程序 小程序

  郑州小程序开发费用多少?小程序开发费用问题是小程序开发需求者考虑的重点问题之一,毕竟涉及到项目预算问题。夏浪科技接下来跟大家分享一下关于小程序开发费用相关问题。

  小程序开发费用主要包含人工成本、时间成本、服务器、域名等等。如果小程序还没有认证的话,另外还要300元的小程序认证费用,这个是直接给腾讯官方的。其中小程序开发费用中的人工成本占比最高,因为开发一个小程序不是一两个人就能完成的,而是要有一个专业的团队。

  其实小程序开发费用这个很难有一个标准价,特别是针对小程序定制开发,功能需求都是不一样,因此无法给一个明确的价格。但是整体的费用构成基本都是一样的。

  除了人员成本之外,小程序开发时间成本也会影响小程序开发费用。每一个小程序项目都有其开发周期,如果小程序开发需求者比较急,要求缩短小程序开发项目时间,那么必然是要增加小程序开发费用的,毕竟这需要小程序开发团队加班加点才能完成。

  一般而言,小程序开发团队包括的人员有产品经理、项目经理、交互设计师、UI设计师、前端工程师、后端工程师、测试专员等等。具体各个岗位的人员数量视项目的难易程度来决定,功能需求复杂的人员配置多一些;功能需求简单的各个岗位配置1人即可。

  至于服务器费用、域名费用这些,小程序开发需求者自己提供的话就不用计入小程序开发费用中,如果需要小程序开发公司提供服务的话就需要考虑这部分费用。
本文由专业的郑州小程序开发燚轩科技发布,如需转载请注明出处。

继续阅读 »

  郑州小程序开发费用多少?小程序开发费用问题是小程序开发需求者考虑的重点问题之一,毕竟涉及到项目预算问题。夏浪科技接下来跟大家分享一下关于小程序开发费用相关问题。

  小程序开发费用主要包含人工成本、时间成本、服务器、域名等等。如果小程序还没有认证的话,另外还要300元的小程序认证费用,这个是直接给腾讯官方的。其中小程序开发费用中的人工成本占比最高,因为开发一个小程序不是一两个人就能完成的,而是要有一个专业的团队。

  其实小程序开发费用这个很难有一个标准价,特别是针对小程序定制开发,功能需求都是不一样,因此无法给一个明确的价格。但是整体的费用构成基本都是一样的。

  除了人员成本之外,小程序开发时间成本也会影响小程序开发费用。每一个小程序项目都有其开发周期,如果小程序开发需求者比较急,要求缩短小程序开发项目时间,那么必然是要增加小程序开发费用的,毕竟这需要小程序开发团队加班加点才能完成。

  一般而言,小程序开发团队包括的人员有产品经理、项目经理、交互设计师、UI设计师、前端工程师、后端工程师、测试专员等等。具体各个岗位的人员数量视项目的难易程度来决定,功能需求复杂的人员配置多一些;功能需求简单的各个岗位配置1人即可。

  至于服务器费用、域名费用这些,小程序开发需求者自己提供的话就不用计入小程序开发费用中,如果需要小程序开发公司提供服务的话就需要考虑这部分费用。
本文由专业的郑州小程序开发燚轩科技发布,如需转载请注明出处。

收起阅读 »

公众号小程序开发费用,公众号小程序开发价格分析

微信小程序 小程序

  小程序是在微信互联网生态里面衍生出来的,为什么会出现郑州小程序开发,为什么要有小程序,最主要是原因是人们在微信上花的时间太多了,聊天,购物,游戏,资讯等等,都在微信里面完成,小程序在这个基础上满足用户对于互联网应用更多的需求,因此微信小程序开发需求才会变得越来越火。

  而微信小程序的优势主要是在于移动端的新展示渠道。对于中小企业而言,微信小程序首先肯定是做比不做好,企业有了小程序,更利于在移动端的展示和推广,是企业推广的新的阵地,尤其是对于服务行业,小程序与服务流程的结合还是可以碰撞出效率和收益的机会,前提是认真对待小程序,认真去做。

  那么关于开发一款微信小程序需要多少钱,或者小程序开发报价等问题,接下来统一回复一下关于小程序的开发价格方面:

  任何开发都是根据开发对象的工作量来报价的,开发服务和其他服务一样,首先是根据服务内容来确定一个价格,当然因为做的比较多,所以对一个项目是可以有个初步报价,具体报价需要等到详细了解项目以后才能给出

  开发项目不能纯粹以价格为指标,首先考察开发者是否专业,他能否给到你合理的开发建议,能否迅速理解你的开发需求,能否给你一个仔细的报价,如果可以给到这几点,在这个基础上再谈价格也不迟。

  尽管微信小程序开发已经变得无所不能,考虑到用户体验以及已经做大的领域的app对于数据和用户体验影响,一些大的并且成熟的领域,小程序还是暂时无法撼动。所以,这一点投资者需要心理清楚,并不是说开发了小程序就一定代表着能够盈利,还是和许多因素有关的。
本文由专业的郑州小程序开发公司燚轩科技整理发布,如需转载请注明出处!

继续阅读 »

  小程序是在微信互联网生态里面衍生出来的,为什么会出现郑州小程序开发,为什么要有小程序,最主要是原因是人们在微信上花的时间太多了,聊天,购物,游戏,资讯等等,都在微信里面完成,小程序在这个基础上满足用户对于互联网应用更多的需求,因此微信小程序开发需求才会变得越来越火。

  而微信小程序的优势主要是在于移动端的新展示渠道。对于中小企业而言,微信小程序首先肯定是做比不做好,企业有了小程序,更利于在移动端的展示和推广,是企业推广的新的阵地,尤其是对于服务行业,小程序与服务流程的结合还是可以碰撞出效率和收益的机会,前提是认真对待小程序,认真去做。

  那么关于开发一款微信小程序需要多少钱,或者小程序开发报价等问题,接下来统一回复一下关于小程序的开发价格方面:

  任何开发都是根据开发对象的工作量来报价的,开发服务和其他服务一样,首先是根据服务内容来确定一个价格,当然因为做的比较多,所以对一个项目是可以有个初步报价,具体报价需要等到详细了解项目以后才能给出

  开发项目不能纯粹以价格为指标,首先考察开发者是否专业,他能否给到你合理的开发建议,能否迅速理解你的开发需求,能否给你一个仔细的报价,如果可以给到这几点,在这个基础上再谈价格也不迟。

  尽管微信小程序开发已经变得无所不能,考虑到用户体验以及已经做大的领域的app对于数据和用户体验影响,一些大的并且成熟的领域,小程序还是暂时无法撼动。所以,这一点投资者需要心理清楚,并不是说开发了小程序就一定代表着能够盈利,还是和许多因素有关的。
本文由专业的郑州小程序开发公司燚轩科技整理发布,如需转载请注明出处!

收起阅读 »

ios关于视频压缩、获取视频大小

希望官方赶紧出视频压缩的功能

希望官方赶紧出视频压缩的功能

uni-app 全局变量的几种实现方式

vuex Vue 全局变量 uniapp

公用模块

定义一个专用的模块,用来组织和管理这些全局的变量,在需要的页面引入。

注意这种方式只支持多个vue页面或多个nvue页面之间公用,vue和nvue之间不公用。

示例如下:
在 uni-app 项目根目录下创建 common 目录,然后在 common 目录下新建 helper.js 用于定义公用的方法。

const websiteUrl = 'http://uniapp.dcloud.io';  
const now = Date.now || function () {  
    return new Date().getTime();  
};  
const isArray = Array.isArray || function (obj) {  
    return obj instanceof Array;  
};  

export default {  
    websiteUrl,  
    now,  
    isArray  
}

接下来在 pages/index/index.vue 中引用该模块

<script>  
    import helper from '../../common/helper.js';  

    export default {  
        data() {  
            return {};  
        },  
        onLoad(){  
            console.log('now:' + helper.now());  
        },  
        methods: {  
        }  
    }  
</script>

这种方式维护起来比较方便,但是缺点就是每次都需要引入。

挂载 Vue.prototype

将一些使用频率较高的常量或者方法,直接扩展到 Vue.prototype 上,每个 Vue 对象都会“继承”下来。

注意这种方式只支持vue页面

示例如下:
在 main.js 中挂载属性/方法

Vue.prototype.websiteUrl = 'http://uniapp.dcloud.io';  
Vue.prototype.now = Date.now || function () {  
    return new Date().getTime();  
};  
Vue.prototype.isArray = Array.isArray || function (obj) {  
    return obj instanceof Array;  
};

然后在 pages/index/index.vue 中调用

<script>  
    export default {  
        data() {  
            return {};  
        },  
        onLoad(){  
            console.log('now:' + this.now());  
        },  
        methods: {  
        }  
    }  
</script>

这种方式,只需要在 main.js 中定义好即可在每个页面中直接调用。

Tips

  • 每个页面中不要在出现重复的属性或方法名。
  • 建议在 Vue.prototype 上挂载的属性或方法,可以加一个统一的前缀。比如 $url、global_url 这样,在阅读代码时也容易与当前页面的内容区分开。

globalData

小程序中有个globalData概念,可以在 App 上声明全局变量。 Vue 之前是没有这类概念的,但 uni-app 引入了globalData概念,并且在包括H5、App等平台都实现了。
在 App.vue 可以定义 globalData ,也可以使用 API 读写这个值。

globalData支持vue和nvue共享数据。

globalData是一种比较简单的全局变量使用方式。

定义:App.vue

<script>  
    export default {  
        globalData: {  
            text: 'text'  
        },  
        onLaunch: function() {  
            console.log('App Launch')  
        },  
        onShow: function() {  
            console.log('App Show')  
        },  
        onHide: function() {  
            console.log('App Hide')  
        }  
    }  
</script>  

<style>  
    /*每个页面公共css */  
</style>  

js中操作globalData的方式如下:

赋值:getApp().globalData.text = 'test'

取值:console.log(getApp().globalData.text) // 'test'

如果需要把globalData的数据绑定到页面上,可在页面的onshow声明周期里进行变量重赋值。HBuilderX 2.0.3起,nvue页面在uni-app编译模式下,也支持onshow。

Vuex

Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。

HBuilderX 2.2.5+起,支持vue和nvue之间共享。参考

这里以登录后同步更新用户信息为例,简单说明下 Vuex 的用法,更多更详细的 Vuex 的内容,建议前往其官网 Vuex 学习下。

举例说明:

在 uni-app 项目根目录下新建 store 目录,在 store 目录下创建 index.js 定义状态值

const store = new Vuex.Store({  
    state: {  
        login: false,  
        token: '',  
        avatarUrl: '',  
        userName: ''  
    },  
    mutations: {  
        login(state, provider) {  
            console.log(state)  
            console.log(provider)  
            state.login = true;  
            state.token = provider.token;  
            state.userName = provider.userName;  
            state.avatarUrl = provider.avatarUrl;  
        },  
        logout(state) {  
            state.login = false;  
            state.token = '';  
            state.userName = '';  
            state.avatarUrl = '';  
        }  
    }  
})

然后,需要在 main.js 挂载 Vuex

import store from './store'  
Vue.prototype.$store = store

最后,在 pages/index/index.vue 使用

<script>  
    import {  
        mapState,  
        mapMutations  
    } from 'vuex';  

    export default {  
        computed: {  
            ...mapState(['avatarUrl', 'login', 'userName'])  
        },  
        methods: {  
            ...mapMutations(['logout'])  
        }  
    }  
</script>

详细示例,请下载附件,在 HBuilderX 中运行。

示例操作步骤:
未登录时,提示去登录。跳转至登录页后,点击“登录”获取用户信息,同步更新状态后,返回到个人中心即可看到信息同步的结果。

注意:对比前面的方式,该方式更加适合处理全局的并且值会发生变化的情况。

注意事项

* .vue 和 .nvue 并不是一个规范,因此一些在 .vue 中适用的方案并不适用于 .nvue。 Vue 上挂载属性,不能在 .nvue 中使用。**

更多

关于登录状态的维护,还可以参考 uni-app 的登录模板示例。可以在 github 获取源码,也可以在新建 uni-app 时“从模板创建”选择登录模板。

继续阅读 »

公用模块

定义一个专用的模块,用来组织和管理这些全局的变量,在需要的页面引入。

注意这种方式只支持多个vue页面或多个nvue页面之间公用,vue和nvue之间不公用。

示例如下:
在 uni-app 项目根目录下创建 common 目录,然后在 common 目录下新建 helper.js 用于定义公用的方法。

const websiteUrl = 'http://uniapp.dcloud.io';  
const now = Date.now || function () {  
    return new Date().getTime();  
};  
const isArray = Array.isArray || function (obj) {  
    return obj instanceof Array;  
};  

export default {  
    websiteUrl,  
    now,  
    isArray  
}

接下来在 pages/index/index.vue 中引用该模块

<script>  
    import helper from '../../common/helper.js';  

    export default {  
        data() {  
            return {};  
        },  
        onLoad(){  
            console.log('now:' + helper.now());  
        },  
        methods: {  
        }  
    }  
</script>

这种方式维护起来比较方便,但是缺点就是每次都需要引入。

挂载 Vue.prototype

将一些使用频率较高的常量或者方法,直接扩展到 Vue.prototype 上,每个 Vue 对象都会“继承”下来。

注意这种方式只支持vue页面

示例如下:
在 main.js 中挂载属性/方法

Vue.prototype.websiteUrl = 'http://uniapp.dcloud.io';  
Vue.prototype.now = Date.now || function () {  
    return new Date().getTime();  
};  
Vue.prototype.isArray = Array.isArray || function (obj) {  
    return obj instanceof Array;  
};

然后在 pages/index/index.vue 中调用

<script>  
    export default {  
        data() {  
            return {};  
        },  
        onLoad(){  
            console.log('now:' + this.now());  
        },  
        methods: {  
        }  
    }  
</script>

这种方式,只需要在 main.js 中定义好即可在每个页面中直接调用。

Tips

  • 每个页面中不要在出现重复的属性或方法名。
  • 建议在 Vue.prototype 上挂载的属性或方法,可以加一个统一的前缀。比如 $url、global_url 这样,在阅读代码时也容易与当前页面的内容区分开。

globalData

小程序中有个globalData概念,可以在 App 上声明全局变量。 Vue 之前是没有这类概念的,但 uni-app 引入了globalData概念,并且在包括H5、App等平台都实现了。
在 App.vue 可以定义 globalData ,也可以使用 API 读写这个值。

globalData支持vue和nvue共享数据。

globalData是一种比较简单的全局变量使用方式。

定义:App.vue

<script>  
    export default {  
        globalData: {  
            text: 'text'  
        },  
        onLaunch: function() {  
            console.log('App Launch')  
        },  
        onShow: function() {  
            console.log('App Show')  
        },  
        onHide: function() {  
            console.log('App Hide')  
        }  
    }  
</script>  

<style>  
    /*每个页面公共css */  
</style>  

js中操作globalData的方式如下:

赋值:getApp().globalData.text = 'test'

取值:console.log(getApp().globalData.text) // 'test'

如果需要把globalData的数据绑定到页面上,可在页面的onshow声明周期里进行变量重赋值。HBuilderX 2.0.3起,nvue页面在uni-app编译模式下,也支持onshow。

Vuex

Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。

HBuilderX 2.2.5+起,支持vue和nvue之间共享。参考

这里以登录后同步更新用户信息为例,简单说明下 Vuex 的用法,更多更详细的 Vuex 的内容,建议前往其官网 Vuex 学习下。

举例说明:

在 uni-app 项目根目录下新建 store 目录,在 store 目录下创建 index.js 定义状态值

const store = new Vuex.Store({  
    state: {  
        login: false,  
        token: '',  
        avatarUrl: '',  
        userName: ''  
    },  
    mutations: {  
        login(state, provider) {  
            console.log(state)  
            console.log(provider)  
            state.login = true;  
            state.token = provider.token;  
            state.userName = provider.userName;  
            state.avatarUrl = provider.avatarUrl;  
        },  
        logout(state) {  
            state.login = false;  
            state.token = '';  
            state.userName = '';  
            state.avatarUrl = '';  
        }  
    }  
})

然后,需要在 main.js 挂载 Vuex

import store from './store'  
Vue.prototype.$store = store

最后,在 pages/index/index.vue 使用

<script>  
    import {  
        mapState,  
        mapMutations  
    } from 'vuex';  

    export default {  
        computed: {  
            ...mapState(['avatarUrl', 'login', 'userName'])  
        },  
        methods: {  
            ...mapMutations(['logout'])  
        }  
    }  
</script>

详细示例,请下载附件,在 HBuilderX 中运行。

示例操作步骤:
未登录时,提示去登录。跳转至登录页后,点击“登录”获取用户信息,同步更新状态后,返回到个人中心即可看到信息同步的结果。

注意:对比前面的方式,该方式更加适合处理全局的并且值会发生变化的情况。

注意事项

* .vue 和 .nvue 并不是一个规范,因此一些在 .vue 中适用的方案并不适用于 .nvue。 Vue 上挂载属性,不能在 .nvue 中使用。**

更多

关于登录状态的维护,还可以参考 uni-app 的登录模板示例。可以在 github 获取源码,也可以在新建 uni-app 时“从模板创建”选择登录模板。

收起阅读 »

小程序转uni-app、小程序移植uniapp经验分享~

uniapp 小程序转换

小程序发展这么久不得不说生态做的还是非常不错的,毕竟微信用户量在那放着。
大家都知道uniapp是采用小程序标准的,包括组件和api。不同的地方就是uniAPP采用了我们更加喜欢的vue。
所以,大部分小程序的插件uniapp都是可以使用的,只不过需要进行简单的处理。
好了少啰嗦,接下来分享下我移植小程序插件的经验及步骤。

1、.wxml 拷贝内容放在 .vue文件的 template标签下
2、修改基础语法,搜索 wx: 替换为 v-,搜索 bind 替换为 @,style、class、属性绑定方面有差别...具体就不细讲了,可以看看文档,很简单
3、.wxss 拷贝内容放在 .vue文件的 style 标签下,无需修改
4、.js onLoad、onShow等生命周期函数完全兼容,小程序的自定义函数要放在methods对象下
5、搜索 wx. 替换为 uni.,搜索 this.data 替换为 this 或者 数据对象按照以下写法:

data:{  
    data:{  
       key:val   
   }  
}

如果数据对象按照以上写法,以下请自行做出相应改动。
在逻辑层出来的时候个人认为比较费劲的就是小程序的setData了,以下是我的解决方案,完全兼容小程序,支持附点子元素赋值操作:

setData:function(obj){  
    let that = this;  
    let keys = [];  
    let val,data;  
    Object.keys(obj).forEach(function(key){  
         keys = key.split('.');  
         val = obj[key];  
         data = that.$data;  
         keys.forEach(function(key2,index){  
             if(index+1 == keys.length){  
                 that.$set(data,key2,val);  
             }else{  
                 if(!data[key2]){  
                    that.$set(data,key2,{});  
                 }  
             }  
             data = data[key2];  
         })  
    });  
}

6、api基本一致,具体请参考文档
至此基本上就OK了,总结的不够全面请大家多多指教。
以此文简单分享一下希望可以有用,也希望大家可以一起完善uniapp生态。
以下是我的一些功能,插件链接,望大家多多支持。
1、uniapp图片裁剪插件
2、swiper + scroll-view 实现下拉刷新
3、单击back隐藏到后台
4、【插件、图表】7种图表漂亮丰富

继续阅读 »

小程序发展这么久不得不说生态做的还是非常不错的,毕竟微信用户量在那放着。
大家都知道uniapp是采用小程序标准的,包括组件和api。不同的地方就是uniAPP采用了我们更加喜欢的vue。
所以,大部分小程序的插件uniapp都是可以使用的,只不过需要进行简单的处理。
好了少啰嗦,接下来分享下我移植小程序插件的经验及步骤。

1、.wxml 拷贝内容放在 .vue文件的 template标签下
2、修改基础语法,搜索 wx: 替换为 v-,搜索 bind 替换为 @,style、class、属性绑定方面有差别...具体就不细讲了,可以看看文档,很简单
3、.wxss 拷贝内容放在 .vue文件的 style 标签下,无需修改
4、.js onLoad、onShow等生命周期函数完全兼容,小程序的自定义函数要放在methods对象下
5、搜索 wx. 替换为 uni.,搜索 this.data 替换为 this 或者 数据对象按照以下写法:

data:{  
    data:{  
       key:val   
   }  
}

如果数据对象按照以上写法,以下请自行做出相应改动。
在逻辑层出来的时候个人认为比较费劲的就是小程序的setData了,以下是我的解决方案,完全兼容小程序,支持附点子元素赋值操作:

setData:function(obj){  
    let that = this;  
    let keys = [];  
    let val,data;  
    Object.keys(obj).forEach(function(key){  
         keys = key.split('.');  
         val = obj[key];  
         data = that.$data;  
         keys.forEach(function(key2,index){  
             if(index+1 == keys.length){  
                 that.$set(data,key2,val);  
             }else{  
                 if(!data[key2]){  
                    that.$set(data,key2,{});  
                 }  
             }  
             data = data[key2];  
         })  
    });  
}

6、api基本一致,具体请参考文档
至此基本上就OK了,总结的不够全面请大家多多指教。
以此文简单分享一下希望可以有用,也希望大家可以一起完善uniapp生态。
以下是我的一些功能,插件链接,望大家多多支持。
1、uniapp图片裁剪插件
2、swiper + scroll-view 实现下拉刷新
3、单击back隐藏到后台
4、【插件、图表】7种图表漂亮丰富

收起阅读 »