1. 为什么选择uniapp开发工地招工小程序
如果你正在寻找一个能同时覆盖微信和支付宝两大平台的小程序开发方案,uniapp绝对是当前最值得考虑的技术框架。去年我接手一个建筑行业招工项目时,就深刻体会到了多端开发的优势——用uniapp写一套代码,就能同时生成微信小程序、支付宝小程序和H5页面,开发效率直接翻倍。
uniapp基于Vue.js生态,对于前端开发者来说学习曲线平缓。我带的团队里有个刚毕业的实习生,只用了两周就能上手开发基础功能模块。更重要的是,它的性能表现相当可靠,我们实测在千元机上也能流畅运行,这对工地场景特别重要,因为很多工人用的都是中低端手机。
建筑行业招工有几个典型特点:需求地域性强(比如某个工地急需钢筋工)、时效性高(通常要求次日到岗)、信息真实性要求严格。uniapp的跨平台特性正好满足这些需求——雇主在微信发布招工信息后,工人通过支付宝小程序也能实时看到,双方通过实名认证机制建立信任基础。
2. 项目初始化与环境搭建
2.1 开发工具准备
首先需要安装HBuilderX,这是uniapp官方推荐的IDE。我习惯用它的稳定版(当前最新是3.6.18),安装时记得勾选"小程序开发工具集成"选项。完成后需要分别配置:
# 微信开发者工具路径 /Applications/wechatwebdevtools.app/Contents/MacOS/cli # 支付宝开发者工具路径 /Applications/alipayide.app/Contents/MacOS/alipayide支付宝小程序开发有个坑要注意:必须使用2.8.0以上版本的IDE,否则会遇到莫名其妙的编译错误。去年我们就因为这个问题卡了半天,最后发现是IDE版本不兼容。
2.2 创建项目结构
使用vue3+typescript模板初始化项目,这是我推荐的技术栈组合:
// manifest.json 关键配置 { "mp-weixin": { "appid": "wx你的小程序ID", "setting": { "urlCheck": false } }, "mp-alipay": { "appid": "2023你的小程序ID", "transparentTitle": "always" } }目录结构建议这样组织:
/src /components # 公共组件 /pages # 页面文件 /static # 静态资源 /store # 状态管理 /utils # 工具函数 /api # 接口管理3. 核心功能模块实现
3.1 招工信息发布系统
工地招工信息有几个关键字段:工种类型、薪资结算方式(日结/月结)、工作地点、需求人数、联系人等。我们采用表单+地图选点的组合方案:
<template> <view class="form-container"> <uni-forms ref="form"> <uni-forms-item label="工种类型" name="workType"> <uni-data-select v-model="formData.workType" :localdata="workTypes" /> </uni-forms-item> <uni-forms-item label="工作地点" name="location"> <map @tap="chooseLocation" :latitude="location.latitude" :longitude="location.longitude" /> </uni-forms-item> </uni-forms> </view> </template>后台审核机制通过云函数实现,当用户提交信息后触发审核流程:
// 云函数模板 exports.main = async (event, context) => { const db = uniCloud.database() await db.collection('jobs').add({ ...event.data, status: 'pending', // 审核状态 createTime: Date.now() }) // 触发短信通知管理员 await uniCloud.sendSms({ phone: '13800138000', templateId: '审核提醒模板ID' }) }3.2 多端支付对接实战
支付是变现的关键环节,我们同时接入了微信和支付宝支付。这里有个技巧:通过条件编译处理平台差异:
// utils/pay.js export const pay = (orderInfo) => { // #ifdef MP-WEIXIN return new Promise((resolve) => { wx.requestPayment({ ...orderInfo, success: resolve }) }) // #endif // #ifdef MP-ALIPAY return new Promise((resolve) => { my.tradePay({ ...orderInfo, success: resolve }) }) // #endif }支付宝支付有个特殊配置需要在manifest.json中添加:
"mp-alipay": { "usingComponents": true, "component2": true, "enableAppxNg": true }实测中发现微信的支付成功率比支付宝高约5%,建议在用户支付失败时自动切换支付方式。我们通过异常捕获实现了这个功能:
try { await pay(orderInfo) } catch (e) { uni.showToast({ title: '支付失败,尝试其他方式' }) // 切换支付渠道逻辑... }4. 性能优化与多端适配
4.1 列表渲染优化
招工信息列表常用长列表渲染,我们通过虚拟滚动技术优化性能:
<template> <uni-list> <uni-list-item v-for="(item, index) in list" :key="item.id" :title="item.title" :note="item.address" @click="navigateToDetail(item.id)" /> </uni-list> </template> <script> export default { data() { return { list: [], // 分页加载的数据 loading: false } }, onReachBottom() { if (!this.loading) { this.loadMore() } } } </script>4.2 多端样式适配
微信和支付宝的样式差异主要在这几方面:
- 单位差异:微信用rpx,支付宝用rem
- 组件默认样式不同
- 部分CSS属性支持度不同
我们的解决方案是:
/* 通用样式 */ .button { /* #ifdef MP-WEIXIN */ width: 200rpx; /* #endif */ /* #ifdef MP-ALIPAY */ width: 10rem; /* #endif */ /* 支付宝按钮默认有边框 */ border: none; }对于地图组件,差异更大些,需要封装兼容层:
const getLocation = () => { // #ifdef MP-WEIXIN return wx.getLocation({ type: 'gcj02' }) // #endif // #ifdef MP-ALIPAY return new Promise((resolve) => { my.getLocation({ success: resolve }) }) // #endif }5. 上线前的关键检查项
5.1 安全合规配置
实名认证我们采用阿里云的人脸核身方案,需要注意:
- 隐私协议必须明确告知数据用途
- 支付宝小程序需要单独申请身份验证权限
- 图片上传要开启内容安全检测
// 示例代码 uni.chooseImage({ success: (res) => { uniCloud.uploadFile({ file: res.tempFiles[0], cloudPath: 'verify/' + Date.now() + '.jpg', onCheck: (res) => { // 安全检测回调 } }) } })5.2 多端发布流程
微信和支付宝的审核标准不同,我们总结的经验是:
- 微信审核更注重UI规范(比如按钮大小)
- 支付宝对权限申请要求更严格
- 两者都要求明确的用户协议
发布脚本可以这样写:
{ "scripts": { "build:weixin": "cross-env NODE_ENV=production UNI_PLATFORM=mp-weixin vue-cli-service uni-build", "build:alipay": "cross-env NODE_ENV=production UNI_PLATFORM=mp-alipay vue-cli-service uni-build", "upload:weixin": "npm run build:weixin && cd dist/build/mp-weixin && wxcli -u", "upload:alipay": "npm run build:alipay && cd dist/build/mp-alipay && alipaycli upload" } }在实际项目中,我们遇到过支付宝审核被拒的情况,原因是"用工信息分类不明确",后来增加了工种分类说明页才通过。建议大家在提交审核前,先用测试账号把所有功能路径都跑一遍。