一个完整的项目示例:taro开发微信小程序

news2025/5/17 13:54:34

前一周完成了一个项目,体测成绩转换的工具,没做记录,。这次计划开发一个地图应用小程序,记录一下。方便给使用的人。

一、申请微信小程序,填写相应的信息,取得开发者ID。这个要给腾讯地图使用的。

二、申请腾讯地图API,创建应用,个人版,6500次调用 。并发5.也还行吧。

好了,我们开始。

三、新建一个文件夹,我的是win系统。

放在如下位置。D:\gitee\wechat-map

在目录处:cmd

四、创建环境相关。

我使用的是react+taro等,因为工程量小,不再搞复杂了。

参考 :安装及使用 | Taro 文档

看操作记录:

npm install -g @tarojs/cli

taro init wechat-map

cd wechat-map

pnpm install 

五、 打开vscode,编译一下。

退出当前用户,重新登录一个用户。你懂的。

打开terminal,pnpm dev:weapp

我用的是taro 3.6.37,可能有点低,再说吧。

六,打开微信开发者工具。

直接导入项目即可,找到目录。其他自动生成。

注意清缓存,编译。

 

 七、正式开始吧,来个首页

/*
 * @Author: DuYicheng
 * @Date: 2025-05-13 08:49:34
 * @LastEditors: DuYicheng
 * @LastEditTime: 2025-05-13 09:57:00
 * @Description: 
 * @FilePath: \wechat-map\src\pages\index\index.tsx
 */
import { View, Text, Image } from '@tarojs/components'
import { useLoad } from '@tarojs/taro'
import './index.scss'

export default function Index() {

  useLoad(() => {
    console.log('Page loaded.')
  })

  return (
    <View className='index'>
      <View className='logo-container'>
        <Image
          className='medical-logo'
          src='../../assets/images/medical-logo.png'
          mode='aspectFit'
        />
        <Text className='title'>医疗服务</Text>
      </View>
      <View className='button-container'>
        <View className='find-button clinic'>
          找诊所
        </View>
        <View className='find-button pharmacy'>
          找药店
        </View>
      </View>
    </View>
  )
}
.index {
  display: flex;
  flex-direction: column;
  align-items: center;
  padding: 40px 20px;
}

.logo-container {
  display: flex;
  flex-direction: column;
  align-items: center;
  margin-bottom: 60px;

  .medical-logo {
    width: 120px;
    height: 120px;
    margin-bottom: 20px;
  }

  .title {
    font-size: 24px;
    color: #333;
  }
}

.button-container {
  width: 100%;
  display: flex;
  flex-direction: column;
  gap: 20px;
  padding: 0 40px; // 添加内边距使按钮更窄
}

.find-button {
  width: 100%;
  height: 80px; // 增加按钮高度
  display: flex;
  align-items: center;
  justify-content: center;
  border-radius: 8px;
  font-size: 18px;
  color: #fff;
  
  &.clinic {
    background-color: #2D7DD2;
  }
  
  &.pharmacy {
    background-color: #45B649;
  }
}

八、小程序sdk配置。

九、实现按钮的跳转。

 先实现诊所功能。

1.结构图

src/
  ├── assets/
  ├── pages/
  │   ├── index/
  │   └── clinic-map/
  │       ├── index.tsx
  │       ├── index.scss
  │       └── index.config.ts
  └── utils/
      └── qqmap-wx-jssdk.js

2.主页面调整代码如:

import { View, Text, Image } from '@tarojs/components'
import { useLoad, navigateTo } from '@tarojs/taro'
import './index.scss'

export default function Index() {
  useLoad(() => {
    console.log('Page loaded.')
  })

  const handleFindClinic = () => {
    navigateTo({
      url: '/pages/clinic-map/index'
    })
  }

  return (
    <View className='index'>
      <View className='logo-container'>
        <Image
          className='medical-logo'
          src='../../assets/medical-logo.png'
          mode='aspectFit'
        />
        <Text className='title'>医疗服务</Text>
      </View>
      <View className='button-container'>
        <View className='find-button clinic' onClick={handleFindClinic}>
          找诊所
        </View>
        <View className='find-button pharmacy'>
          找药店
        </View>
      </View>
    </View>
  )
}

3.诊所地图

import { View, Map } from '@tarojs/components'
import Taro, { useLoad } from '@tarojs/taro'
import { useState } from 'react'
import './index.scss'

const QQMapWX = require('../../utils/qqmap-wx-jssdk.js')
let qqmapsdk

export default function ClinicMap() {
  const [latitude, setLatitude] = useState(0)
  const [longitude, setLongitude] = useState(0)
  const [clinics, setClinics] = useState([])

  useLoad(() => {
    // 初始化地图SDK
    qqmapsdk = new QQMapWX({
      key: 'YOUR_KEY_HERE' // 替换成你的腾讯地图key
    })

    // 获取当前位置权限
    Taro.getLocation({
      type: 'gcj02',
      success: function(res) {
        setLatitude(res.latitude)
        setLongitude(res.longitude)
        searchNearbyClinic(res.latitude, res.longitude)
      },
      fail: function() {
        Taro.showToast({
          title: '需要授权位置信息',
          icon: 'none'
        })
      }
    })
  })

  const searchNearbyClinic = (lat, lng) => {
    qqmapsdk.search({
      keyword: '诊所',
      location: `${lat},${lng}`,
      success: function(res) {
        console.log(res)
        setClinics(res.data)
      },
      fail: function(res) {
        console.error(res)
        Taro.showToast({
          title: '搜索诊所失败',
          icon: 'none'
        })
      }
    })
  }

  return (
    <View className='clinic-map'>
      <Map
        className='map'
        latitude={latitude}
        longitude={longitude}
        markers={clinics.map((clinic, index) => ({
          id: index,
          latitude: clinic.location.lat,
          longitude: clinic.location.lng,
          title: clinic.title
        }))}
        show-location
      />
      <View className='clinic-list'>
        {clinics.map((clinic, index) => (
          <View key={index} className='clinic-item'>
            <View className='clinic-name'>{clinic.title}</View>
            <View className='clinic-address'>{clinic.address}</View>
            <View className='clinic-distance'>{clinic._distance}米</View>
          </View>
        ))}
      </View>
    </View>
  )
}

4.地图样式

.clinic-map {
  height: 100vh;
  display: flex;
  flex-direction: column;

  .map {
    width: 100%;
    height: 50vh;
  }

  .clinic-list {
    flex: 1;
    overflow-y: auto;
    padding: 10px;
    background: #f5f5f5;

    .clinic-item {
      background: #fff;
      margin-bottom: 10px;
      padding: 15px;
      border-radius: 8px;

      .clinic-name {
        font-size: 16px;
        font-weight: bold;
        color: #333;
        margin-bottom: 5px;
      }

      .clinic-address {
        font-size: 14px;
        color: #666;
        margin-bottom: 5px;
      }

      .clinic-distance {
        font-size: 12px;
        color: #999;
      }
    }
  }
}

5.创建页面配置

export default {
  navigationBarTitleText: '找诊所',
  navigationBarBackgroundColor: '#ffffff',
  navigationBarTextStyle: 'black'
}

6.修改:app.config.ts

export default defineAppConfig({
  pages: [
    'pages/index/index',
    'pages/clinic-map/index'
  ],
  window: {
    backgroundTextStyle: 'light',
    navigationBarBackgroundColor: '#fff',
    navigationBarTitleText: 'WeChat',
    navigationBarTextStyle: 'black'
  },
  permission: {
    'scope.userLocation': {
      desc: '你的位置信息将用于小程序位置接口的效果展示'
    }
  }
})

7.修改project.config.json

{
  // ...existing code...
  "permission": {
    "scope.userLocation": {
      "desc": "你的位置信息将用于小程序位置接口的效果展示"
    }
  }
  // ...existing code...
}

其他建议:

建议在开发者工具的详情设置中,确保以下设置:

  1. 勾选"使用增强编译"
  2. 勾选"不校验合法域名"(开发阶段)
  3. 确保在"API 权限设置"中已经开启了位置相关接口权限

 

测试成功,但过了一会,说用量多了。vscode,重新编译。

 

 基本可以了,下一步就可以上传代码等待审核了。以上是一个简单的教程,你可以根据实际修改。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2377711.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

龙虎榜——20250516

上证缩量收阴线&#xff0c;小盘股表现相对更好&#xff0c;上涨的个股大于下跌的&#xff0c;日线已到前期压力位附近&#xff0c;注意风险。 深证缩量收假阳线&#xff0c;临近日线周期上涨末端&#xff0c;注意风险。 2025年5月16日龙虎榜行业方向分析 跨境电商&#xff…

Python----神经网络(《Inverted Residuals and Linear Bottlenecks》论文概括和MobileNetV2网络)

一、论文 MobileNetV2 论文提出了一种新的移动架构&#xff0c;该架构提高了移动模型在多个任务和基准测试中的性能&#xff0c;以及在各种不同模型大小范围内的性能. 该架构基于倒残差结构&#xff0c;其中 shortcut 连接在 thin bottleneck 层之间. 中间的 expansion 层使用轻…

React Flow 简介:构建交互式流程图的最佳工具

本文为《React Agent&#xff1a;从零开始构建 AI 智能体》专栏系列文章。 专栏地址&#xff1a;https://blog.csdn.net/suiyingy/category_12933485.html。项目地址&#xff1a;https://gitee.com/fgai/react-agent&#xff08;含完整代码示​例与实战源&#xff09;。完整介绍…

Jupyter-AI Pandas-AI本地使用功能优化

引言 Jupyter-ai 和 Pandas-ai 的优化主要是个人工作遇到的需求,个人觉得是一个不错的体验优化,所以进行分享仅供参考,不喜勿喷,共同进步!Jupyter-AI优化主要包含以下方向(当前已实现): Jupyter-AI中 Chat 扩展和 NoteBook 的 Cell 工作去部分,使用的Language Model 和 …

WEB安全--Java安全--shiro550反序列化漏洞

一、前言 什么是shiro&#xff1f; shiro是一个Apache的Java安全框架 它的作用是什么&#xff1f; Apache Shiro 是一个强大且灵活的 Java 安全框架&#xff0c;用于处理身份验证、授权、密码管理以及会话管理等功能 二、shiro550反序列化原理 1、用户首次登录并勾选记住密码…

【 Redis | 实战篇 秒杀实现 】

目录 前言&#xff1a; 1.全局ID生成器 2.秒杀优惠券 2.1.秒杀优惠券的基本实现 2.2.超卖问题 2.3.解决超卖问题的方案 2.4.基于乐观锁来解决超卖问题 3.秒杀一人一单 3.1.秒杀一人一单的基本实现 3.2.单机模式下的线程安全问题 3.3.集群模式下的线程安全问题 前言&…

数据通信原理 光纤通信 期末速成

一、图表题 1. 双极性不归零、单极性不归零、曼彻斯特码、抑制载频2ASK&#xff0c;2PSK、2DPSK信号的波形 双极性不归零 和 单极性不归零&#xff1a;不归零意思是 0 低 1 高 非归零编码&#xff08;NRZ&#xff09;&#xff1a;用不同电平表示二进制数字&#xff0c;常以…

华为云kubernetes容器相关组件及作用

Kubernetes组件按功能分为‌控制平面组件‌、‌工作节点组件‌及‌扩展插件‌&#xff0c;协同实现容器化应用的编排与管理。 ‌一、控制平面组件&#xff08;Control Plane&#xff09;‌ 1‌、kube-apiserver‌ ‌作用&#xff1a;提供集群API入口&#xff0c;处理所有REST请…

安全与智能的双向奔赴,安恒信息先行一步

人类文明发展的长河中&#xff0c;每一次技术变革都重新书写了安全的定义。 从蒸汽机的轰鸣到电力的普及&#xff0c;从互联网的诞生到人工智能的崛起&#xff0c;技术创新与变革从未停止对于安全的挑战。今天&#xff0c;我们又站在一个关键的历史节点&#xff1a;AI大模型的…

window 显示驱动开发-分页视频内存资源

与 Microsoft Windows 2000 显示驱动程序模型不同&#xff0c;Windows Vista 显示驱动程序模型允许创建比可用物理视频内存总量更多的视频内存资源&#xff0c;然后根据需要分页进出视频内存。 换句话说&#xff0c;并非所有视频内存资源都同时位于视频内存中。 GPU 的管道中可…

【笔记】记一次PyCharm的问题反馈

#工作记录 最近更新至 PyCharm 社区版的最新版本后&#xff0c;我遇到了多个影响使用体验的问题。令人感到不便的是&#xff0c;一些在旧版本中非常便捷的功能&#xff0c;在新版本中却变得操作复杂、不够直观。过去&#xff0c;我一直通过 PyCharm 内置的故障报告与反馈机制反…

uniapp中vue3和pinia安装依赖npm install失败

目录 一、问题描述 二、问题原因 三、问题解析及解决方案 一、问题描述 用uni-app开发小程序的时候&#xff0c;使用了vue3pinia,安装依赖的时候发现vue和pinia的版本问题&#xff0c;安装失败&#xff0c; npm ERR! code ERESOLVE npm ERR! ERESOLVE could not resolve np…

DBF Converter:高效转换DBF文件,满足多样化数据处理需求

DBF Converter 是一款功能强大的数据转换工具&#xff0c;专为需要将DBF文件转换为其他格式的用户设计。它支持将DBF文件转换为CSV、Excel、HTML、SQL等多种常见格式&#xff0c;满足用户在不同场景下的数据处理需求。无论是数据迁移、报表生成还是日常数据处理&#xff0c;DBF…

Jmeter 安装包与界面汉化

Jmeter 安装包&#xff1a; 通过网盘分享的文件&#xff1a;CSDN-apache-jmeter-5.5 链接: https://pan.baidu.com/s/17gK98NxS19oKmkdRhGepBA?pwd1234 提取码: 1234 Jmeter界面汉化&#xff1a;

【C++】 —— 笔试刷题day_29

一、排序子序列 题目解析 一个数组的连续子序列&#xff0c;如果这个子序列是非递增或者非递减的&#xff1b;这个连续的子序列就是排序子序列。 现在给定一个数组&#xff0c;然后然我们判断这个子序列可以划分成多少个排序子序列。 例如&#xff1a;1 2 3 2 2 1 可以划分成 …

MongoTemplate 基础使用帮助手册

前言 MongoDB 是一种流行的 NoSQL 数据库&#xff0c;适合存储大量的非结构化数据。MongoTemplate 是 Spring Data MongoDB 中的一个核心组件&#xff0c;它提供了一组丰富的 API 来与 MongoDB 进行交互。它封装了许多常见的数据库操作&#xff0c;使开发者能够轻松执行 CRUD 操…

图像处理:预览并绘制图像细节

前言 因为最近在搞毕业论文的事情&#xff0c;要做出一下图像细节对比图&#xff0c;所以我这里写了两个脚本&#xff0c;一个用于框选并同时预览图像放大细节&#xff0c;可显示并返回框选图像的坐标&#xff0c;另外一个是输入框选图像的坐标并将放大的细节放置在图像中&…

力扣热题——最长相邻不相等子序列 |

题目要求从字符串数组 words 中选出一个最长的子序列&#xff0c;使得该子序列中相邻字符串对应的 groups 数组中的值不同。通过贪心算法&#xff0c;可以高效地解决该问题。具体步骤为&#xff1a;初始化一个结果列表&#xff0c;遍历 words 数组&#xff0c;检查当前字符串的…

ssti刷刷刷

[NewStarCTF 公开赛赛道]BabySSTI_One 测试发现过滤关键字&#xff0c;但是特殊符号中括号、双引号、点都能用 可以考虑拼接或者编码&#xff0c;这里使用拼接 ?name{{()["__cla"~"ss__"]}}?name{{()["__cla"~"ss__"]["__ba&…

java+selenum专题(一)

环境搭建部署篇-> 1.简介 java版的selenium&#xff0c;介绍一下java selenium自动化测试。大致和pythonselenium自动化测试差不多。基于java和selenium做自动化测试&#xff0c;因此你必须会搭建基本的开发环境&#xff0c;掌握python基本的语法和一个IDE来进行开发&…