目录
*首先非常感谢低代码布道师 韩老师对我的帮助,再次感谢!其次本文写的不是很专业,当然如果可以帮到你们那是再好不过了!
在校园生活中,许多同学或多或少存在着电脑中毒、系统崩溃、专业软件安装困难、清灰等一系列的问题于困扰,而这恰巧体现了我们工作室存在的必要!在工作室的日常维修中,如果开发一款维修预约小程序,不但能提升学生的便捷性,而且工作室在学校的知名度也会有所提升!
为了进行功能分析,我们用在线软件(Mind line)做一个思维导图,如下图:

综合考虑,我们计划有三个页面,即首页、工作室和我的。而首页包括我们现已准备的维修预约、软件安装、硬件介绍以及软件推荐;在关于我们的页面主要是对工作室的历史进行一定的阐述,这样更有助于同学们更好的了解我们;当然在我的页面,我们通过获取用户的微信头像及昵称对其页面进行渲染,当然还有联系我们和问题反馈的按钮。
由思维导图我们可以得知,现在我们需要的数据源有:用户信息、用户预约信息、软件安装预约信息、硬件介绍数据、软件推荐数据、工作室成员信息。(可能有人会问上面的部分数据源为什么不合在一起,原因就是由于个人技术原因,在者我们的这些功能是分离的如果数据源合在一起会出现部分信息为空的漏洞);由于后期我们需要实时上传轮播图所以还需要创建图片管理的数据源。设计数据源如下:
| 头像(avatarUrl) | 文本|短文本 |
|---|---|
| 昵称(nickname) | 文本|短文本 |
| openId | 文本|短文本 |
| 头像(avatarUrl) | 文本|短文本 |
|---|---|
| 昵称(nickname) | 文本|短文本 |
| openid | 文本|短文本 |
| 手机(phone) | 手机 |
| 邮箱(email) | 邮箱 |
| 问题概述(questions) | 文本 |
| 头像(avatarUrl) | 文本|短文本 |
|---|---|
| 昵称(nickname) | 文本|短文本 |
| openid | 文本|短文本 |
| 手机(phone) | 手机 |
| 邮箱(email) | 邮箱 |
| 软件名称(Appname) | 文本 |
| 安装包有无(Y/N) | 文本 |
| 头像(avatarUrl) | 文本|短文本 |
|---|---|
| 昵称(nickname)——介绍人 | 文本|短文本 |
| openid | 文本|短文本 |
| 硬件介绍图片 | 图片 |
| 硬件名称——标题 | 文本 |
| 硬件介绍详情 | 文本 |
| 头像(avatarUrl) | 文本|短文本 |
|---|---|
| 昵称(nickname)——介绍人 | 文本|短文本 |
| openid | 文本|短文本 |
| 软件介绍图片 | 图片 |
| 软件名称——标题 | 文本 |
| 软件介绍详情 | 文本 |
| 头像(avatarUrl) | 文本|短文本 |
|---|---|
| 姓名 | 文本|短文本 |
| openid | 文本|短文本 |
| 手机 | 手机 |
| 邮箱 | 邮箱 |
| 年级 | 文本 |
| 服务时间 | 文本 |
|---|---|
| 服务地点 | 文本 |
| 预约页面图片 | 数组|图片 |
|---|---|
| 极速预约页面图片 | 数组|图片 |
| 软件安装页面图片 | 数组|图片 |
下面就详细的介绍一下我做的小程序,由于我是纯小白,主要介绍微搭中一些功能的实现
首页的创建比较简单,主要有各项功能的按钮(用于跳转页面)以及底部的Tab栏(用于定向页面)
在这个页面中主要是介绍工作室的创建等信息,在着其中由于工作室每学期的开放时间不定,所以需要调用数据源来获取实时的开放时间与地点。
在这个页面创建一个模型变量time,然后在我们需要的位置为文本来绑定这个变量中的时间字段
首先在该页面先创建如下格式,并且创建一个名为userinfo的普通变量和名为openid普通变量并将其设置为全局变量



{
"city": "",
"gender": "",
"openid": "",
"country": "",
"language": "zh_CN",
"nickName": "",
"province": "",
"avatarUrl": ""
}
然后为第一张图片绑定userinfo中的avatarUrl并设置出现条件 :$page.dataset.state.userinfo.openid !=""
为第二张图片以及下面的文本与按钮设置条件:$page.dataset.state.userinfo.openid ==""
在自定义连接器中创建方法

const cloud = require('wx-server-sdk');
cloud.init({
env: cloud.DYNAMIC_CURRENT_ENV,
})
module.exports = async function (params, context) {
const wxContext = cloud.getWXContext()
return {
openid: wxContext.OPENID,
appid: wxContext.APPID,
}
}
然后在低代码编辑区添加方法
1.openid(若要采用一定主义自己的连接器的标识和方法标识)
export default async function({event, data}) {
const objData = await app.cloud.callDataSource({
dataSourceName: 'getopenid_i3otw2h', //自定义连接器标识
methodName: 'getopenid', //自定义连接器方法标识
});
console.log('objData:', objData); //打印获取到的信息,用于对小程序进行调试(非必须)
app.dataset.state.openid=objData.openid; // 将变量赋值给上文中创建的普通变量
}
2.getuserinfo
export default async function({event, data}) {
try {
wx.getUserProfile({
desc: '用于完善用户信息',
success:async (res) => {
//const data = await app.cloud.dataSources.userinfo_xpw5sxe.wedaCreate(res);
console.log("res.userinfo",res.userInfo)
$page.dataset.state.userinfo = res.userInfo
$page.dataset.state.userinfo.openid = app.dataset.state.useropenid
let ret =await app.dataSources.userinfo_xpw5sxe.wedaCreate($page.dataset.state.userinfo);
console.log(ret)
}
})
console.log("userinfo",$page.dataset.state.userinfo)
const ret = await app.dataSources.userinfo_xpw5sxe.wedaCreate($page.dataset.state.userinfo);
console.log(ret)
} catch (e) {
console.log('错误代码', e.code, '错误信息', e.message);
}
}
3.callphone
export default function({event, data}) {
let phone = "管理员联系方式" // 在此处修改店家的联系方式即可
wx.makePhoneCall({
phoneNumber: phone
})
}
以上三种方法不敢保证代码的准确性但功能都可正常使用,同时也欢迎各位大佬前来纠正!
然后为第一个授权按钮绑定前两个方法,

传入参数为刚创建的全局变量openid,
为联系我们按钮绑定第3个方法,至于问题反馈按钮可调用数据源来创建一条信息写入


这样我的页面就创建成功了!!!
首先在页面创建一个模型变量yuyuetupian,然后将轮播容器中的图片绑定


如下:

绑定第二张图片时,将当前选中中的代码复制,然后将最后的【0】改为【1】,第三张以此类推。
首先在该页面创建一个普通变量phone,并且将其地址复制,其次在低代码编辑区添加方法callphone,如下图:

export default function({event, data}) {
let phone =$page.dataset.state.phone //这里是刚才复制的普通变量的地址
wx.makePhoneCall({
phoneNumber: phone // 在此处修改店家的联系方式即可
})
}
然后点击组件行为,选择变量赋值,变量值绑定循环数据中的tel,紧接着在添加一个点击时的自定义方法,即callphone,传入参数绑定为普通变量phone。这样点击组件自动拨号的功能就完成了!

首先在该页面添加模型变量,其次左侧组件库中有数据容器点击添加列表视图,然后点击普通容器中的通用配置,选择循环展示,绑定刚才创建的模型变量,见下图:



然后为下面的文本绑定你所需要展示的内容,接着我们为单个列表点击添加行为——页面跳转,而参数传入其中的数据标识。(如上图)这样我们的列表页就创建成功了。
紧接着我们来到详情页,首先需要创建一个参数变量orderid,用于接收列表页传过来的id,其次创建一个模型变量用于查询其内容详情,在创建过程中的数据标识那里绑定刚才创建的参数变量!接着我们设置页面中我们想要展示的内容详情!这样我们列表点击详情的功能就实现了!

以上就是工作室小程序(用户端)在创作过程中遇到的一些小问题与总结,同时也欢迎各界大佬前来批评纠正。当然也希望我的一些总结可以帮到屏幕前的你!再次感谢 低代码布道师韩老师对我的极大帮助!!!
我在从html页面生成PDF时遇到问题。我正在使用PDFkit。在安装它的过程中,我注意到我需要wkhtmltopdf。所以我也安装了它。我做了PDFkit的文档所说的一切......现在我在尝试加载PDF时遇到了这个错误。这里是错误:commandfailed:"/usr/local/bin/wkhtmltopdf""--margin-right""0.75in""--page-size""Letter""--margin-top""0.75in""--margin-bottom""0.75in""--encoding""UTF-8""--margin-left""0.75in""-
我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t
如何在buildr项目中使用Ruby?我在很多不同的项目中使用过Ruby、JRuby、Java和Clojure。我目前正在使用我的标准Ruby开发一个模拟应用程序,我想尝试使用Clojure后端(我确实喜欢功能代码)以及JRubygui和测试套件。我还可以看到在未来的不同项目中使用Scala作为后端。我想我要为我的项目尝试一下buildr(http://buildr.apache.org/),但我注意到buildr似乎没有设置为在项目中使用JRuby代码本身!这看起来有点傻,因为该工具旨在统一通用的JVM语言并且是在ruby中构建的。除了将输出的jar包含在一个独特的、仅限ruby
在rails源中:https://github.com/rails/rails/blob/master/activesupport/lib/active_support/lazy_load_hooks.rb可以看到以下内容@load_hooks=Hash.new{|h,k|h[k]=[]}在IRB中,它只是初始化一个空哈希。和做有什么区别@load_hooks=Hash.new 最佳答案 查看rubydocumentationforHashnew→new_hashclicktotogglesourcenew(obj)→new_has
我花了三天的时间用头撞墙,试图弄清楚为什么简单的“rake”不能通过我的规范文件。如果您遇到这种情况:任何文件夹路径中都不要有空格!。严重地。事实上,从现在开始,您命名的任何内容都没有空格。这是我的控制台输出:(在/Users/*****/Desktop/LearningRuby/learn_ruby)$rake/Users/*******/Desktop/LearningRuby/learn_ruby/00_hello/hello_spec.rb:116:in`require':cannotloadsuchfile--hello(LoadError) 最佳
关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭8年前。Improvethisquestion在首页我有:汽车:VolvoSaabMercedesAudistatic_pages_spec.rb中的测试代码:it"shouldhavetherightselect"dovisithome_pathit{shouldhave_select('cars',:options=>['volvo','saab','mercedes','audi'])}end响应是rspec./spec/request
在Rails4.0.2中,我使用s3_direct_upload和aws-sdkgems直接为s3存储桶上传文件。在开发环境中它工作正常,但在生产环境中它会抛出如下错误,ActionView::Template::Error(noimplicitconversionofnilintoString)在View中,create_cv_url,:id=>"s3_uploader",:key=>"cv_uploads/{unique_id}/${filename}",:key_starts_with=>"cv_uploads/",:callback_param=>"cv[direct_uplo
我的主要目标是能够完全理解我正在使用的库/gem。我尝试在Github上从头到尾阅读源代码,但这真的很难。我认为更有趣、更温和的踏脚石就是在使用时阅读每个库/gem方法的源代码。例如,我想知道RubyonRails中的redirect_to方法是如何工作的:如何查找redirect_to方法的源代码?我知道在pry中我可以执行类似show-methodmethod的操作,但我如何才能对Rails框架中的方法执行此操作?您对我如何更好地理解Gem及其API有什么建议吗?仅仅阅读源代码似乎真的很难,尤其是对于框架。谢谢! 最佳答案 Ru
我的假设是moduleAmoduleBendend和moduleA::Bend是一样的。我能够从thisblog找到解决方案,thisSOthread和andthisSOthread.为什么以及什么时候应该更喜欢紧凑语法A::B而不是另一个,因为它显然有一个缺点?我有一种直觉,它可能与性能有关,因为在更多命名空间中查找常量需要更多计算。但是我无法通过对普通类进行基准测试来验证这一点。 最佳答案 这两种写作方法经常被混淆。首先要说的是,据我所知,没有可衡量的性能差异。(在下面的书面示例中不断查找)最明显的区别,可能也是最著名的,是你的
几个月前,我读了一篇关于rubygem的博客文章,它可以通过阅读代码本身来确定编程语言。对于我的生活,我不记得博客或gem的名称。谷歌搜索“ruby编程语言猜测”及其变体也无济于事。有人碰巧知道相关gem的名称吗? 最佳答案 是这个吗:http://github.com/chrislo/sourceclassifier/tree/master 关于ruby-寻找通过阅读代码确定编程语言的rubygem?,我们在StackOverflow上找到一个类似的问题: