400-915-1135
阿里云模版与定制小程序(小程序阿里云服务器年费多少)

阿里云模版与定制小程序(小程序阿里云服务器年费多少)

发表日期:2022-07-24 22:07:01   作者来源:众诚企业建站   浏览:120

阿里云模版与定制小程序


阿里云模版与定制小程序


做一个小程序需要多少费用

2021-06-11
做营销,就上凡科网!
向TA提问
做一个小程序可以借助小程序制作平台,小程序免费制作平台的费用从免费到几千左右,小程序同样拥有免费小程序模板,主要区别在于小程序的功能,功能越高级、费用越高,这也取决于企业想要制作什么样的小程序,比如一些官网小程序、预约小程序,免费至几百元不等,几百元价位的已经可以支付预约费用,提前回笼资金,并且拥有足够的内存上新产品信息。
小程序可以通过凡科轻站小程序平台制作。
凡科轻站是一个适用于官网和在线预约小程序制作的产品,服务模式是常见的SaaS(软件即服务)模式。凡科轻站主要针对旅游、教育、家居、医疗等行业,提供信息展示、预约咨询的服务。例如企业信息公开、家具信息展示、酒店预约、教育咨询。凡科轻站隶属于广州凡科互联网科技股份有限公司,公司于2010年11月16日在广州成立,注册资本2081.1万元,并于2015年7月成功上市国内“新三板”。
点击这里了解更多小程序费用详情:
凡科轻站小程序
小程序开发费用因小程序功能和复杂度而决定的,简单功能的微信小程序几千,中等功能的微信小程序几万,高等复杂程度的微信小程序开发费用则可能达到10万以上。
虽然没法明确回答开发一个小程序需要多少钱,但退一步的问题却是可以回答明白的:做一个小程序,该如何计算花费?开发一个小程序的花费=开发工具费用+人力费用+服务器费用+小程序注册认证费用。
1、人力费用
目前开发者/制作者的人力单价得按2000元/人天算。人天单价*完成开发需要的天数,就是总的人力成本。小程序开发工具主要有三种模式:源代码开发模式、套用模板进行编辑的模式和基于模板拖拽制作的模式。
源码开发模式下,开发一个小程序,一般都得按月计,人力费用得几万~十几万;套用模版进行编辑的模式下,一般一两天可以做完,因为可以改动的地方确实太少了,想多干几天都找不到事情做,人力费用一般不超过2000。基于模板拖拽之子的模式下,一般可以按几天到2~3周计,人力费用一般3、4000~2、3万。
2、服务器费用
除了特别简单的小程序外,正常的小程序都需要服务器对后端进行部署。服务器费用计算,可以拿阿里云的价格作为参考,有些小程序开发工具,默认自带了服务器,这时服务器这部分的费用就隐含在工具的使用费里了。
一般而言,套用模板进行编辑的工具和基于模板进行拖拽制作的工具,都是包括服务器的。即便用户自己已经有了服务器,也必须用工具自带的。相当于捆绑销售,费用都是一并收取,没法分割开来。
3、小程序的注册认证费用
这个费用是微信官方收取的,个人注册小程序不用交这部分费用。但企业注册小程序都需要交认证费。300元/年。
此外,一不小心小程序名字没取好,发布之后又需要改名时,就得再叫一次300元,重新认证一次,获得改名机会;下次要改,再交钱再认证。当然,没有人整天没事改名玩,所以这个费用还是占小头。


阿里云模版与定制小程序


做一个小程序,需要多少钱

模版的小程序我就不说了,市面上很多这种,收费很低,但是坑比较多,不美观,不实用,不稳定等等缺点相对于其他优点比较明显。
所以如果你想做模版小程序建议你浏览下比较有名的几个服务商进行对比使用下,接下来是给你普及定制化的小程序费用
定制化的小程序开发费用=服务器/域名租赁费用+软件开发费(设计+前端+后端功能)+维护费(前两项总和的20%,可选项,指日常使用出现的问题解决、网络层面攻击的解决和突发情况的问题解决)
软件则是这个小程序的核心组成。他包含了设计、前端和后端。主要的工作量在后端,所以一个小程序的功能点收费是相对比较高的。我们从设计开始算起,他的收费点是按照设计复杂度和数量进行的:简单设计300-500/一个页面,复杂设计500-1500/一个页面。其次就是前端,前端做的活就是将设计的内容图稿用编程的方式实现到网络上,同时对接后台的功能点进行完善操作内容。他的收费点和设计有点像,也是按照复杂度和页面数量进行收费的,但是他的复杂度不只是说页面设计,还要对应后台功能点的复杂度,所以他的收费点:简单版500-1000/一个页面、复杂页面1000-2000/一个页面。最后是我们的后端收费,这个位置纯按照功能难度进行收费,同时一个功能的难度是可以调整的,类似于会员功能,做难点几万一个功能很正常,简单的几千块也能搞定,就好比车的发动机,4缸和8缸、12缸都是可以跑的,但是价格却天差地别,效果也完全不同。
打个比方吧:
背景:客户要求做一个简单的兑换功能的小程序。页面是他们自己设计。
算法:了解后获得页面有:兑换页面、个人中心页面、兑换券历史页面、地址页面、关于我们页面、兑换说明页面。其中兑换说明页面和关于我们页面为静态页面属于最简单前端(500/页面),兑换页面及个人中心页面中等简单页面(800/页面),兑换券历史页面下等简单页面(700/页面)。功能点分为兑换券功能(中等简单,2000/功能点),用户信息获取功能(简单,1000/功能点),地址获得功能(简单,1000/功能)。最后就是服务器和域名的费用了(一般来做的公司都会有,如果没有的话可以看上面介绍)
所以上述例子的开发费用为前端+后端+硬件=3300+4000+1500=8800
当然这里是没有加上设计的内容,设计部分需要客户自己承担的,一般如果没有设计,需要再基础上加两千左右。
www.iwentuo.com


阿里云模版与定制小程序


阿里云数据能迁移吗阿里云的网站程序能迁移吗<br/>

完全可以,你迁移的只是网站运行程序,这个和你部署的服务器环境、采用的web服务器有关。你只需要把部署包迁移出来,然后按照目标服务器的配置要求重新配置就可以了,但是你要把关于阿里云配置的东西去掉,不要带走,这些配置其他云或者你不用云了,要求是不一样的。你申请的云服务器,实际上是分配你一个可以运行网络程序的数据空间。比如你申请了100G,我申请了50G,你迁移走后,你的这部分空间就被收回了,你可以理解成你系统分区那样,一个磁盘区被取消了,格式化后的空间可以给其他磁盘。所以你迁移走时要拷贝你的业务数据走,不然你的网站到其他地方就只有部署好后的数据,原来的数据都会消失


阿里云模版与定制小程序


小程序要怎么定制?

定制需要麻烦专业的团队去开发需要高昂的费用和时间的,而且还不一定实用,建议你去点点客小程序看看,不仅全行业覆盖小程序还免费


阿里云模版与定制小程序


重庆小程序开发模板和定制有什么不同?

小程序开发,如果用的是网上的分享模板,一般都是免费的,当然模板可能缺少一些功能,或存在错误 bug。而定制需要一定的费用,价格主要根据功能需求来决定。小程序开发定制建议选择和适合的开发商合作。


阿里云模版与定制小程序


我在网站下的免费模板,用Dreamweaver怎么编辑啊!然后怎么把网站变成我自己的网站,求那位大哥大姐解说下

你下的那个是ASP网站模板吧,ASP是动态语言,需要服务器才可以运行的。

只有DW的话只能编辑源代码,但是看不到效果。

切换到代码视图就可以编辑代码了。


阿里云模版与定制小程序


网友:阿里云模版与定制小程序

当下属于互联网时代,很多行业都需要赶上互联网的速度,通过技术手段更好地推广,但大多数实体行业并不熟悉小程序、公众号、网站等另一种执行裂变锁定客户的模式。

许多企业在建立网站的过程中不知所措。刚找了一家互联网公司,但是建好网站后,效果不是很好。基本上是因为对互联网的认知度太低。

首先,很多公司在建站的时候第一时间就看向了互联网公司。事实上,创建一个网站可以像创建一个ppt和word一样简单。首先,小白如果想省钱,可以选择模板建站。有很多云服务商(阿里云/腾讯云等)提供这个,操作非常简单。不过模板小程序样式多样,但是动画效果和显示类别比较简单,可以按照原模板进行更改,不能有更大的改动。

另外,如果你愿意,你可以找一个工作室。运营成本低,价格当然比互联网公司便宜。但是,生产周期可能比互联网公司要长一些。当然,会有工作室更改一下模板来制作,但是整体效果还是可以达到的。

最后,对于土豪老板,可以直接找网络公司。专业的用户界面,前端和后端更专业。它可以根据您的要求定制和开发,但价格也相对较高。

许多云服务提供商,不仅仅是网站,现在都有带有模板的小程序。模板都是可视化的,非常方便,完成后就可以上传发布。需要注意的是,云服务商的模板是没有源代码的,这也就涉及到后期如果有二开需要的话比较麻烦,甚至无法二开,这个可以根据自己的需要进行选择。

高端网站建站,高端企业网站建设,网站建设高端定制,企业高端网站建设,专注高端网站建设,大型网站平台建设

山东智通云信息科技有限公司是集Web开发、品牌体验、应用创新及SaaS数字营销的整合服务提供商。专业从事中小型企业智能响应网站建设及运营服务,咨询热线:0535-6206911。

作者:@软件开发程序君,为你提供APP开发、小程序开发、软件定制开发相关问题指导。

想做一款小程序不知道该怎么做?得花多少钱?

一篇文章带你了解小程序开发都有哪些收费?

小程序的开发收费分为两部分

一、小程序开发基本费用(这个是小程序的认证费用)

1、小程序认证费用:300元/年

这个费用主要是针对企业/商户,小程序账号需要申请微信支付的功能,就必须要进行认证,那么认证的费用就是300元/年,这个费用的话,是免不了的,只要在正常使用小程序的,每年都需要交这个300元。

2、域名费用:50-100元/年

域名,推荐去阿里云、腾讯云购买,方便后期备案。价格一般在50-100块一年,除了那些特别、需要抢买的域名,其他的域名都是这个价格。域名购买之后,就可以进行备案,在哪里买的域名就在哪里备案,比如你在阿里云买的域名,那么就在阿里云备案。

3、服务器费用:1500-2000元/年

选购服务器就像买电脑,价格多少跟选购的服务器内存和处理器都很大的关系。小程序开发初期,一般访问量不大,日访问人数1000左右的建议使用2核4G处理器,为了提升页面打开速度,可以选购3mb-5mb带宽,费用大概在1500-2000元/年。

日访问量1000-5000人数的,推荐购买4核8G10mb的宽带配置,如果有高并发需求的小程序,如短时间多人秒杀活动,建议增加临时宽带升级,或者购买较高配置的服务器,如8核16G10mb带宽。

但是预算能省则省,前期建议大家在预估不准日浏览量的时候,直接选个2核4g1mb带宽配置,后期可以根据运营情况,随时升级配置。

综上,小程序每年基本费用:300元(认证费)+1500元(域名服务器)=1800元

二、小程序开发成本费用

微信小程序开发类型,一种是模板开发,另外一种是定制开发,这两种开发方式和开发费用都不一样,以及开发小程序的类型,下面来介绍一下。

1、模板开发

  小程序模板开发价格就相对较低,一般几千到一万左右。优点是价格便宜,操作简单,能快速上线。缺点也有,功能固定无法修改,并不属于购买者本人,要按年租费。

2、定制开发

  定制开发的小程序可以根据客户的实际所需功能为您量身定造,该类型开发,因为排版,功能需求,UI页面设计的复杂性,一般研发费用都在1.5万以上,当然,目前小程序的开发成本是与功能、页面的多少成正比关系的,如果需要开发的小程序功能并不多,那么开发成本自然就低,反之亦然。


以上就是为大家整理的,小程序开发费用价目表,其中包含小程序的基本费用和小程序开发费用,希望能够帮助到大家!文章内容有限,欢迎评论区留言想了解的软件开发问题,适时为大家分享相关文章。


简介:当一个程序员想要个漫画风的头像时...

前言

我一直都想要有一个漫画版的头像,奈何手太笨,用了很多软件 “捏不出来”,所以就在想着,是否可以基于 AI 实现这样一个功能,并部署到 Serverless 架构上让更多人来尝试使用呢?

后端项目

后端项目采用业界鼎鼎有名的动漫风格转化滤镜库 AnimeGAN 的 v2 版本,效果大概如下:


关于这个模型的具体的信息,在这里不做详细的介绍和说明。通过与 Python Web 框架结合,将 AI 模型通过接口对外暴露:

from PIL import Imageimport ioimport torchimport base64import bottleimport randomimport jsoncacheDir = '/tmp/'modelDir = './model/bryandlee_animegan2-pytorch_main'getModel = lambda modelName: torch.hub.load(modelDir, "generator", pretrained=modelName, source='local')models = {'celeba_distill': getModel('celeba_distill'),'face_paint_512_v1': getModel('face_paint_512_v1'),'face_paint_512_v2': getModel('face_paint_512_v2'),'paprika': getModel('paprika')}randomStr = lambda num=5: "".join(random.sample('abcdefghijklmnopqrstuvwxyz', num))face2paint = torch.hub.load(modelDir, "face2paint", size=512, source='local')@bottle.route('/images/comic_style', method='POST')def getComicStyle():result = {}try:postData = json.loads(bottle.request.body.read().decode("utf-8"))style = postData.get("style", 'celeba_distill')image = postData.get("image")localName = randomStr(10)# 图片获取imagePath = cacheDir + localNamewith open(imagePath, 'wb') as f:f.write(base64.b64decode(image))# 内容预测model = models[style]imgAttr = Image.open(imagePath).convert("RGB")outAttr = face2paint(model, imgAttr)img_buffer = io.BytesIO()outAttr.save(img_buffer, format='JPEG')byte_data = img_buffer.getvalue()img_buffer.close()result["photo"] = 'data:image/jpg;base64, %s' % base64.b64encode(byte_data).decode()except Exception as e:print("ERROR: ", e)result["error"] = Truereturn resultapp = bottle.default_app()if __name__ == "__main__":bottle.run(host='localhost', port=8099)

整个代码是基于 Serverless 架构进行了部分改良的:

实例初始化的时候,进行模型的加载,已经可能的减少频繁的冷启动带来的影响情况;在函数模式下,往往只有/tmp目录是可写的,所以图片会被缓存到/tmp目录下;虽然说函数计算是“无状态”的,但是实际上也有复用的情况,所有数据在存储到tmp的时候进行了随机命名;虽然部分云厂商支持二进制的文件上传,但是大部分的 Serverless 架构对二进制上传支持的并不友好,所以这里依旧采用 Base64 上传的方案;

上面的代码,更多是和 AI 相关的,除此之外,还需要有一个获取模型列表,以及模型路径等相关信息的接口:

import bottle@bottle.route('/system/styles', method='GET')def styles():return {"AI动漫风": {'color': 'red','detailList': {"风格1": {'uri': "images/comic_style",'name': 'celeba_distill','color': 'orange','preview': ''},"风格2": {'uri': "images/comic_style",'name': 'face_paint_512_v1','color': 'blue','preview': ''},"风格3": {'uri': "images/comic_style",'name': 'face_paint_512_v2','color': 'pink','preview': ''},"风格4": {'uri': "images/comic_style",'name': 'paprika','color': 'cyan','preview': ''},}},}app = bottle.default_app()if __name__ == "__main__":bottle.run(host='localhost', port=8099)

可以看到,此时我的做法是,新增了一个函数作为新接口对外暴露,那么为什么不在刚刚的项目中,增加这样的一个接口呢?而是要多维护一个函数呢?

AI 模型加载速度慢,如果把获取AI处理列表的接口集成进去,势必会影响该接口的性能;AI 模型所需配置的内存会比较多,而获取 AI 处理列表的接口所需要的内存非常少,而内存会和计费有一定的关系,所以分开有助于成本的降低;

关于第二个接口(获取 AI 处理列表的接口),相对来说是比较简单的,没什么问题,但是针对第一个 AI 模型的接口,就有比较头疼的点:

模型所需要的依赖,可能涉及到一些二进制编译的过程,所以导致无法直接跨平台使用;模型文件比较大 (单纯的 Pytorch 就超过 800M),函数计算的上传代码最多才 100M,所以这个项目无法直接上传;

所以这里需要借助 Serverless Devs 项目来进行处理:

参考

完成 s.yaml 的编写:

edition: 1.0.0name: start-aiaccess: "default"vars: # 全局变量  region: cn-hangzhou  service:name: ainasConfig:# NAS配置, 配置后function可以访问指定NASuserId: 10003# userID, 默认为10003groupId: 10003# groupID, 默认为10003mountPoints:# 目录配置- serverAddr: 0fe764bf9d-kci94.cn-hangzhou.nas.aliyuncs.com # NAS 服务器地址nasDir: /python3fcDir: /mnt/python3vpcConfig:vpcId: vpc-bp1rmyncqxoagiyqnbcxksecurityGroupId: sg-bp1dpxwusntfryekord6vswitchIds:- vsw-bp1wqgi5lptlmk8nk5yi0services:  image:component:  fcprops: #  组件的属性值region: ${vars.region}service: ${vars.service}function:name: image_serverdescription: 图片处理服务runtime: python3codeUri: ./ossBucket: temp-code-cn-hangzhouhandler: index.appmemorySize: 3072timeout: 300environmentVariables:PYTHONUSERBASE: /mnt/python3/pythontriggers:- name: httpTriggertype: httpconfig:authType: anonymousmethods:- GET- POST- PUTcustomDomains:- domainName: avatar.aialbum.netprotocol: HTTProuteConfigs:- path: /*

然后进行:

1、依赖的安装:s build --use-docker

2、项目的部署:s deploy

3、在 NAS 中创建目录,上传依赖:

s nas command mkdir /mnt/python3/pythons nas upload -r 本地依赖路径 /mnt/python3/python

完成之后可以通过接口对项目进行测试。

另外,微信小程序需要 https 的后台接口,所以这里还需要配置 https 相关的证书信息,此处不做展开。

小程序项目

小程序项目依旧采用 colorUi,整个项目就只有一个页面:


页面相关布局:

<scroll-view scroll-y class="scrollPage">  <image src='/images/topbg.jpg' mode='widthFix' class='response'></image>  <view class="cu-bar bg-white solid-bottom margin-top"><view class="action"><text class="cuIcon-title text-blue"></text>第一步:选择图片</view>  </view>  <view class="padding bg-white solid-bottom"><view class="flex"><view class="flex-sub bg-grey padding-sm margin-xs radius text-center" bindtap="chosePhoto">本地上传图片</view><view class="flex-sub bg-grey padding-sm margin-xs radius text-center" bindtap="getUserAvatar">获取当前头像</view></view>  </view>  <view class="padding bg-white" hidden="{{!userChosePhoho}}"><view class="images"><image src="{{userChosePhoho}}" mode="widthFix" bindtap="previewImage" bindlongpress="editImage" data-image="{{userChosePhoho}}"></image></view><view class="text-right padding-top text-gray">* 点击图片可预览,长按图片可编辑</view>  </view>  <view class="cu-bar bg-white solid-bottom margin-top"><view class="action"><text class="cuIcon-title text-blue"></text>第二步:选择图片处理方案</view>  </view>  <view class="bg-white"><scroll-view scroll-x class="bg-white nav"><view class="flex text-center"><view class="cu-item flex-sub {{style==currentStyle?'text-orange cur':''}}" wx:for="{{styleList}}"wx:for-index="style" bindtap="changeStyle" data-style="{{style}}">{{style}}</view></view></scroll-view>  </view>  <view class="padding-sm bg-white solid-bottom"><view class="cu-avatar round xl bg-{{item.color}} margin-xs" wx:for="{{styleList[currentStyle].detailList}}"wx:for-index="substyle" bindtap="changeStyle" data-substyle="{{substyle}}" bindlongpress="showModal" data-target="Image"><view class="cu-tag badge cuIcon-check bg-grey" hidden="{{currentSubStyle == substyle ? false : true}}"></view><text class="avatar-text">{{substyle}}</text></view><view class="text-right padding-top text-gray">* 长按风格圆圈可以预览模板效果</view>  </view>  <view class="padding-sm bg-white solid-bottom"><button class="cu-btn block bg-blue margin-tb-sm lg" bindtap="getNewPhoto" disabled="{{!userChosePhoho}}"type="">{{ userChosePhoho ? (getPhotoStatus ? 'AI将花费较长时间' : '生成图片') : '请先选择图片' }}</button>  </view>  <view class="cu-bar bg-white solid-bottom margin-top" hidden="{{!resultPhoto}}"><view class="action"><text class="cuIcon-title text-blue"></text>生成结果</view>  </view>  <view class="padding-sm bg-white solid-bottom" hidden="{{!resultPhoto}}"><view wx:if="{{resultPhoto == 'error'}}"><view class="text-center padding-top">服务暂时不可用,请稍后重试</view><view class="text-center padding-top">或联系开发者微信:<text class="text-blue" data-data="zhihuiyushaiqi" bindtap="copyData">zhihuiyushaiqi</text></view></view><view wx:else><view class="images"><image src="{{resultPhoto}}" mode="aspectFit" bindtap="previewImage" bindlongpress="saveImage" data-image="{{resultPhoto}}"></image></view><view class="text-right padding-top text-gray">* 点击图片可预览,长按图片可保存</view></view>  </view>  <view class="padding bg-white margin-top margin-bottom"><view class="text-center">自豪的采用 Serverless Devs 搭建</view><view class="text-center">Powered By Anycodes <text bindtap="showModal" class="text-cyan" data-target="Modal">{{"<"}}作者的话{{">"}}</text></view>  </view>  <view class="cu-modal {{modalName=='Modal'?'show':''}}">  <view class="cu-dialog"><view class="cu-bar bg-white justify-end"><view class="content">作者的话</view><view class="action" bindtap="hideModal"><text class="cuIcon-close text-red"></text></view></view><view class="padding-xl text-left">大家好,我是刘宇,很感谢您可以关注和使用这个小程序,这个小程序是我用业余时间做的一个头像生成小工具,基于“人工智障”技术,反正现在怎么看怎么别扭,但是我会努力让这小程序变得“智能”起来的。如果你有什么好的意见也欢迎联系我<text class="text-blue" data-data="service@52exe.cn" bindtap="copyData">邮箱</text>或者<text class="text-blue" data-data="zhihuiyushaiqi" bindtap="copyData">微信</text>,另外值得一提的是,本项目基于阿里云Serverless架构,通过Serverless Devs开发者工具建设。</view>  </view></view><view class="cu-modal {{modalName=='Image'?'show':''}}">  <view class="cu-dialog"><view class="bg-img" style="background-image: url("{{previewStyle}}");height:200px;"><view class="cu-bar justify-end text-white"><view class="action" bindtap="hideModal"><text class="cuIcon-close "></text></view></view></view><view class="cu-bar bg-white"><view class="action margin-0 flex-sub  solid-left" bindtap="hideModal">关闭预览</view></view>  </view></view></scroll-view>页面逻辑也是比较简单的:// index.js// 获取应用实例const app = getApp()Page({  data: {styleList: {},currentStyle: "动漫风",currentSubStyle: "v1模型",userChosePhoho: undefined,resultPhoto: undefined,previewStyle: undefined,getPhotoStatus: false  },  // 事件处理函数  bindViewTap() {wx.navigateTo({url: '../logs/logs'})  },  onLoad() {const that = thiswx.showLoading({title: '加载中',})app.doRequest(`system/styles`, {}, option = {method: "GET"}).then(function (result) {wx.hideLoading()that.setData({styleList: result,currentStyle: Object.keys(result)[0],currentSubStyle: Object.keys(result[Object.keys(result)[0]].detailList)[0],})})  },  changeStyle(attr) {this.setData({"currentStyle": attr.currentTarget.dataset.style || this.data.currentStyle,"currentSubStyle": attr.currentTarget.dataset.substyle || Object.keys(this.data.styleList[attr.currentTarget.dataset.style].detailList)[0]})  },  chosePhoto() {const that = thiswx.chooseImage({count: 1,sizeType: ['compressed'],sourceType: ['album', 'camera'],complete(res) {that.setData({userChosePhoho: res.tempFilePaths[0],resultPhoto: undefined})}})  },  headimgHD(imageUrl) {imageUrl = imageUrl.split('/'); //把头像的路径切成数组//把大小数值为 46 || 64 || 96 || 132 的转换为0if (imageUrl[imageUrl.length - 1] && (imageUrl[imageUrl.length - 1] == 46 || imageUrl[imageUrl.length - 1] == 64 || imageUrl[imageUrl.length - 1] == 96 || imageUrl[imageUrl.length - 1] == 132)) {imageUrl[imageUrl.length - 1] = 0;}imageUrl = imageUrl.join('/'); //重新拼接为字符串return imageUrl;  },  getUserAvatar() {const that = thiswx.getUserProfile({desc: "获取您的头像",success(res) {const newAvatar = that.headimgHD(res.userInfo.avatarUrl)wx.getImageInfo({src: newAvatar,success(res) {that.setData({userChosePhoho: res.path,resultPhoto: undefined})}})}})  },  previewImage(e) {wx.previewImage({urls: [e.currentTarget.dataset.image]})  },  editImage() {const that = thiswx.editImage({src: this.data.userChosePhoho,success(res) {that.setData({userChosePhoho: res.tempFilePath})}})  },  getNewPhoto() {const that = thiswx.showLoading({title: '图片生成中',})this.setData({getPhotoStatus: true})app.doRequest(this.data.styleList[this.data.currentStyle].detailList[this.data.currentSubStyle].uri, {style: this.data.styleList[this.data.currentStyle].detailList[this.data.currentSubStyle].name,image: wx.getFileSystemManager().readFileSync(this.data.userChosePhoho, "base64")}, option = {method: "POST"}).then(function (result) {wx.hideLoading()that.setData({resultPhoto: result.error ? "error" : result.photo,getPhotoStatus: false})})  },  saveImage() {wx.saveImageToPhotosAlbum({filePath: this.data.resultPhoto,success(res) {wx.showToast({title: "保存成功"})},fail(res) {wx.showToast({title: "异常,稍后重试"})}})  },  onShareAppMessage: function () {return {title: "头头是道个性头像",}  },  onShareTimeline() {return {title: "头头是道个性头像",}  },  showModal(e) {if(e.currentTarget.dataset.target=="Image"){const previewSubStyle = e.currentTarget.dataset.substyleconst previewSubStyleUrl = this.data.styleList[this.data.currentStyle].detailList[previewSubStyle].previewif(previewSubStyleUrl){this.setData({previewStyle: previewSubStyleUrl})}else{wx.showToast({title: "暂无模板预览",icon: "error"})return}}this.setData({modalName: e.currentTarget.dataset.target})  },  hideModal(e) {this.setData({modalName: null})  },  copyData(e) {wx.setClipboardData({data: e.currentTarget.dataset.data,success(res) {wx.showModal({title: '复制完成',content: `已将${e.currentTarget.dataset.data}复制到了剪切板`,})}})  },})

因为项目会请求比较多次的后台接口,所以,我将请求方法进行额外的抽象:

// 统一请求接口  doRequest: async function (uri, data, option) {const that = thisreturn new Promise((resolve, reject) => {wx.request({url: that.url + uri,data: data,header: {"Content-Type": 'application/json',},method: option && option.method ? option.method : "POST",success: function (res) {resolve(res.data)},fail: function (res) {reject(null)}})})  }

完成之后配置一下后台接口,发布审核即可。

本文作者刘宇(花名:江昱)

原文链接:301 Moved Permanently

本文为阿里云原创内容,未经允许不得转载。