292 lines
6.6 KiB
Vue
292 lines
6.6 KiB
Vue
|
|
<template>
|
|||
|
|
<view class="container">
|
|||
|
|
<!-- H5端使用Ant Design Vue组件 -->
|
|||
|
|
<!-- #ifdef H5 -->
|
|||
|
|
<a-card title="欢迎使用 nl-uniapp" :bordered="false">
|
|||
|
|
<a-space direction="vertical" :size="16" style="width: 100%">
|
|||
|
|
<a-typography-title :level="3">项目信息</a-typography-title>
|
|||
|
|
|
|||
|
|
<a-descriptions :column="1" bordered>
|
|||
|
|
<a-descriptions-item label="框架">Vue 3</a-descriptions-item>
|
|||
|
|
<a-descriptions-item label="构建工具">Vite</a-descriptions-item>
|
|||
|
|
<a-descriptions-item label="UI组件库">Ant Design Vue</a-descriptions-item>
|
|||
|
|
<a-descriptions-item label="状态管理">Pinia</a-descriptions-item>
|
|||
|
|
<a-descriptions-item label="HTTP请求">Axios</a-descriptions-item>
|
|||
|
|
</a-descriptions>
|
|||
|
|
|
|||
|
|
<a-divider />
|
|||
|
|
|
|||
|
|
<a-space direction="vertical" :size="12" style="width: 100%">
|
|||
|
|
<a-typography-title :level="4">功能演示</a-typography-title>
|
|||
|
|
|
|||
|
|
<a-button type="primary" block @click="handleGetRequest" :loading="loading">
|
|||
|
|
测试GET请求
|
|||
|
|
</a-button>
|
|||
|
|
|
|||
|
|
<a-button type="primary" block @click="handlePostRequest" :loading="loading">
|
|||
|
|
测试POST请求
|
|||
|
|
</a-button>
|
|||
|
|
|
|||
|
|
<a-button type="default" block @click="handleShowMessage">
|
|||
|
|
显示消息提示
|
|||
|
|
</a-button>
|
|||
|
|
</a-space>
|
|||
|
|
|
|||
|
|
<a-divider />
|
|||
|
|
|
|||
|
|
<a-alert
|
|||
|
|
message="提示"
|
|||
|
|
description="这是一个基于 Vue3 + Vite + Ant Design Vue 的 uniapp 项目模板"
|
|||
|
|
type="info"
|
|||
|
|
show-icon
|
|||
|
|
/>
|
|||
|
|
</a-space>
|
|||
|
|
</a-card>
|
|||
|
|
<!-- #endif -->
|
|||
|
|
|
|||
|
|
<!-- 小程序端使用uni-app原生组件 -->
|
|||
|
|
<!-- #ifndef H5 -->
|
|||
|
|
<view class="card">
|
|||
|
|
<view class="title">欢迎使用 nl-uniapp</view>
|
|||
|
|
|
|||
|
|
<view class="info-section">
|
|||
|
|
<view class="info-title">项目信息</view>
|
|||
|
|
<view class="info-item">
|
|||
|
|
<text class="label">框架:</text>
|
|||
|
|
<text class="value">Vue 3</text>
|
|||
|
|
</view>
|
|||
|
|
<view class="info-item">
|
|||
|
|
<text class="label">构建工具:</text>
|
|||
|
|
<text class="value">Vite</text>
|
|||
|
|
</view>
|
|||
|
|
<view class="info-item">
|
|||
|
|
<text class="label">UI组件库:</text>
|
|||
|
|
<text class="value">Ant Design Vue</text>
|
|||
|
|
</view>
|
|||
|
|
<view class="info-item">
|
|||
|
|
<text class="label">状态管理:</text>
|
|||
|
|
<text class="value">Pinia</text>
|
|||
|
|
</view>
|
|||
|
|
<view class="info-item">
|
|||
|
|
<text class="label">HTTP请求:</text>
|
|||
|
|
<text class="value">Axios</text>
|
|||
|
|
</view>
|
|||
|
|
</view>
|
|||
|
|
|
|||
|
|
<view class="divider"></view>
|
|||
|
|
|
|||
|
|
<view class="demo-section">
|
|||
|
|
<view class="demo-title">功能演示</view>
|
|||
|
|
<button class="btn btn-primary" @click="handleGetRequest" :loading="loading">
|
|||
|
|
测试GET请求
|
|||
|
|
</button>
|
|||
|
|
<button class="btn btn-primary" @click="handlePostRequest" :loading="loading">
|
|||
|
|
测试POST请求
|
|||
|
|
</button>
|
|||
|
|
<button class="btn btn-default" @click="handleShowMessage">
|
|||
|
|
显示消息提示
|
|||
|
|
</button>
|
|||
|
|
</view>
|
|||
|
|
|
|||
|
|
<view class="divider"></view>
|
|||
|
|
|
|||
|
|
<view class="alert">
|
|||
|
|
<text class="alert-title">提示</text>
|
|||
|
|
<text class="alert-desc">这是一个基于 Vue3 + Vite + Ant Design Vue 的 uniapp 项目模板</text>
|
|||
|
|
</view>
|
|||
|
|
</view>
|
|||
|
|
<!-- #endif -->
|
|||
|
|
</view>
|
|||
|
|
</template>
|
|||
|
|
|
|||
|
|
<script setup>
|
|||
|
|
import { ref } from 'vue'
|
|||
|
|
import { api } from '@/api'
|
|||
|
|
// #ifdef H5
|
|||
|
|
import { message } from 'ant-design-vue'
|
|||
|
|
// #endif
|
|||
|
|
|
|||
|
|
const loading = ref(false)
|
|||
|
|
|
|||
|
|
// GET请求示例
|
|||
|
|
const handleGetRequest = async () => {
|
|||
|
|
try {
|
|||
|
|
loading.value = true
|
|||
|
|
const res = await api.getList({ page: 1, pageSize: 10 })
|
|||
|
|
console.log('GET请求成功:', res)
|
|||
|
|
// #ifdef H5
|
|||
|
|
message.success('GET请求成功,请查看控制台')
|
|||
|
|
// #endif
|
|||
|
|
// #ifndef H5
|
|||
|
|
uni.showToast({
|
|||
|
|
title: 'GET请求成功',
|
|||
|
|
icon: 'success'
|
|||
|
|
})
|
|||
|
|
// #endif
|
|||
|
|
} catch (error) {
|
|||
|
|
console.error('GET请求失败:', error)
|
|||
|
|
// #ifdef H5
|
|||
|
|
message.error('GET请求失败')
|
|||
|
|
// #endif
|
|||
|
|
// #ifndef H5
|
|||
|
|
uni.showToast({
|
|||
|
|
title: 'GET请求失败',
|
|||
|
|
icon: 'none'
|
|||
|
|
})
|
|||
|
|
// #endif
|
|||
|
|
} finally {
|
|||
|
|
loading.value = false
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// POST请求示例
|
|||
|
|
const handlePostRequest = async () => {
|
|||
|
|
try {
|
|||
|
|
loading.value = true
|
|||
|
|
const res = await api.create({ name: '测试数据', value: '123' })
|
|||
|
|
console.log('POST请求成功:', res)
|
|||
|
|
// #ifdef H5
|
|||
|
|
message.success('POST请求成功,请查看控制台')
|
|||
|
|
// #endif
|
|||
|
|
// #ifndef H5
|
|||
|
|
uni.showToast({
|
|||
|
|
title: 'POST请求成功',
|
|||
|
|
icon: 'success'
|
|||
|
|
})
|
|||
|
|
// #endif
|
|||
|
|
} catch (error) {
|
|||
|
|
console.error('POST请求失败:', error)
|
|||
|
|
// #ifdef H5
|
|||
|
|
message.error('POST请求失败')
|
|||
|
|
// #endif
|
|||
|
|
// #ifndef H5
|
|||
|
|
uni.showToast({
|
|||
|
|
title: 'POST请求失败',
|
|||
|
|
icon: 'none'
|
|||
|
|
})
|
|||
|
|
// #endif
|
|||
|
|
} finally {
|
|||
|
|
loading.value = false
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 消息提示示例
|
|||
|
|
const handleShowMessage = () => {
|
|||
|
|
// #ifdef H5
|
|||
|
|
message.info('这是一个消息提示')
|
|||
|
|
// #endif
|
|||
|
|
// #ifndef H5
|
|||
|
|
uni.showToast({
|
|||
|
|
title: '这是一个消息提示',
|
|||
|
|
icon: 'none'
|
|||
|
|
})
|
|||
|
|
// #endif
|
|||
|
|
}
|
|||
|
|
</script>
|
|||
|
|
|
|||
|
|
<style lang="scss" scoped>
|
|||
|
|
.container {
|
|||
|
|
padding: 16px;
|
|||
|
|
min-height: 100vh;
|
|||
|
|
background-color: #f5f5f5;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 小程序端样式
|
|||
|
|
.card {
|
|||
|
|
background: #fff;
|
|||
|
|
border-radius: 8px;
|
|||
|
|
padding: 24px;
|
|||
|
|
margin-bottom: 16px;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.title {
|
|||
|
|
font-size: 20px;
|
|||
|
|
font-weight: bold;
|
|||
|
|
margin-bottom: 24px;
|
|||
|
|
text-align: center;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.info-section {
|
|||
|
|
margin-bottom: 24px;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.info-title {
|
|||
|
|
font-size: 18px;
|
|||
|
|
font-weight: bold;
|
|||
|
|
margin-bottom: 16px;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.info-item {
|
|||
|
|
display: flex;
|
|||
|
|
padding: 12px 0;
|
|||
|
|
border-bottom: 1px solid #f0f0f0;
|
|||
|
|
|
|||
|
|
.label {
|
|||
|
|
color: #666;
|
|||
|
|
width: 120px;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.value {
|
|||
|
|
color: #333;
|
|||
|
|
flex: 1;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.divider {
|
|||
|
|
height: 1px;
|
|||
|
|
background-color: #e8e8e8;
|
|||
|
|
margin: 24px 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.demo-section {
|
|||
|
|
margin-bottom: 24px;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.demo-title {
|
|||
|
|
font-size: 18px;
|
|||
|
|
font-weight: bold;
|
|||
|
|
margin-bottom: 16px;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.btn {
|
|||
|
|
width: 100%;
|
|||
|
|
margin-bottom: 12px;
|
|||
|
|
padding: 12px;
|
|||
|
|
border-radius: 4px;
|
|||
|
|
font-size: 16px;
|
|||
|
|
|
|||
|
|
&.btn-primary {
|
|||
|
|
background-color: #1890ff;
|
|||
|
|
color: #fff;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
&.btn-default {
|
|||
|
|
background-color: #fff;
|
|||
|
|
color: #333;
|
|||
|
|
border: 1px solid #d9d9d9;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.alert {
|
|||
|
|
padding: 12px;
|
|||
|
|
background-color: #e6f7ff;
|
|||
|
|
border: 1px solid #91d5ff;
|
|||
|
|
border-radius: 4px;
|
|||
|
|
|
|||
|
|
.alert-title {
|
|||
|
|
display: block;
|
|||
|
|
font-weight: bold;
|
|||
|
|
margin-bottom: 8px;
|
|||
|
|
color: #1890ff;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.alert-desc {
|
|||
|
|
display: block;
|
|||
|
|
color: #666;
|
|||
|
|
font-size: 14px;
|
|||
|
|
line-height: 1.5;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
</style>
|
|||
|
|
|