首页 > 其他分享 >前端ai工具v0使用配置

前端ai工具v0使用配置

时间:2024-10-23 10:42:49浏览次数:1  
标签:isLogin const ai 前端 value v0 message main ref

资料

ai工具Vo
Installation - Tailwind CSS

以vue3 + sass为例,配置如下

安装tailwindcss

npm install -D tailwindcss
npx tailwindcss init

安装依赖(可选)

npm install lucide-vue-next

更新 tailwind.config.js

/** @type {import('tailwindcss').Config} */
module.exports = {
  content: [
    "./index.html",
    "./src/**/*.{vue,js,ts,jsx,tsx}",
  ],
  theme: {
    extend: {},
  },
  plugins: [],
}

主CSS文件(通常是 src/assets/main.css,没有就创建一个)中添加Tailwind的指令:

@tailwind base;
@tailwind components;
@tailwind utilities;

确保main.css生效

main.ts 或者 main.js引入main.css

import './assets/main.css'

配置vite.config.ts 或者js

import tailwindcss from 'tailwindcss'

示例代码

<template>
    <div
        class="min-h-screen bg-gradient-to-br from-purple-400 via-pink-500 to-red-500 flex items-center justify-center p-4">
        <div class="bg-white w-full max-w-md rounded-2xl shadow-2xl overflow-hidden">
            <div class="p-8">
                <div class="text-center mb-8">
                    <div
                        class="inline-block p-4 rounded-full bg-gradient-to-r from-purple-500 to-pink-500 text-white mb-4">
                        <UserIcon class="h-8 w-8" />
                    </div>
                    <h2 class="text-3xl font-extrabold text-gray-900">{{ isLogin ? 'Welcome Back' : 'Create Account' }}
                    </h2>
                    <p class="mt-2 text-sm text-gray-600">
                        {{ isLogin ? 'Sign in to your account' : 'Sign up for a new account' }}
                    </p>
                </div>

                <form @submit.prevent="handleSubmit" class="space-y-6">
                    <div>
                        <label for="email" class="block text-sm font-medium text-gray-700">Email</label>
                        <input type="email" id="email" v-model="email" required class="mt-1 block w-full px-3 py-2 bg-gray-100 border border-gray-300 rounded-md text-sm shadow-sm placeholder-gray-400
                  focus:outline-none focus:border-purple-500 focus:ring-1 focus:ring-purple-500
                  transition duration-150 ease-in-out" placeholder="[email protected]">
                    </div>

                    <div>
                        <label for="password" class="block text-sm font-medium text-gray-700">Password</label>
                        <input type="password" id="password" v-model="password" required class="mt-1 block w-full px-3 py-2 bg-gray-100 border border-gray-300 rounded-md text-sm shadow-sm placeholder-gray-400
                  focus:outline-none focus:border-purple-500 focus:ring-1 focus:ring-purple-500
                  transition duration-150 ease-in-out" placeholder="••••••••">
                    </div>

                    <div v-if="!isLogin">
                        <label for="confirmPassword" class="block text-sm font-medium text-gray-700">Confirm
                            Password</label>
                        <input type="password" id="confirmPassword" v-model="confirmPassword" required class="mt-1 block w-full px-3 py-2 bg-gray-100 border border-gray-300 rounded-md text-sm shadow-sm placeholder-gray-400
                  focus:outline-none focus:border-purple-500 focus:ring-1 focus:ring-purple-500
                  transition duration-150 ease-in-out" placeholder="••••••••">
                    </div>

                    <div>
                        <button type="submit"
                            class="w-full flex justify-center py-3 px-4 border border-transparent rounded-md shadow-sm text-sm font-medium text-white bg-gradient-to-r from-purple-600 to-pink-600 hover:from-purple-700 hover:to-pink-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-purple-500 transition duration-150 ease-in-out"
                            :disabled="isLoading">
                            <Loader2Icon v-if="isLoading" class="animate-spin -ml-1 mr-3 h-5 w-5 text-white" />
                            {{ isLoading ? 'Processing...' : (isLogin ? 'Sign In' : 'Sign Up') }}
                        </button>
                    </div>
                </form>

                <div class="mt-6">
                    <div class="relative">
                        <div class="absolute inset-0 flex items-center">
                            <div class="w-full border-t border-gray-300"></div>
                        </div>
                        <div class="relative flex justify-center text-sm">
                            <span class="px-2 bg-white text-gray-500">
                                Or continue with
                            </span>
                        </div>
                    </div>

                    <div class="mt-6 grid grid-cols-3 gap-3">
                        <div>
                            <a href="#"
                                class="w-full inline-flex justify-center py-2 px-4 border border-gray-300 rounded-md shadow-sm bg-white text-sm font-medium text-gray-500 hover:bg-gray-50">
                                <GithubIcon class="h-5 w-5" />
                            </a>
                        </div>
                        <div>
                            <a href="#"
                                class="w-full inline-flex justify-center py-2 px-4 border border-gray-300 rounded-md shadow-sm bg-white text-sm font-medium text-gray-500 hover:bg-gray-50">
                                <TwitterIcon class="h-5 w-5 text-[#1DA1F2]" />
                            </a>
                        </div>
                        <div>
                            <a href="#"
                                class="w-full inline-flex justify-center py-2 px-4 border border-gray-300 rounded-md shadow-sm bg-white text-sm font-medium text-gray-500 hover:bg-gray-50">
                                <FacebookIcon class="h-5 w-5 text-[#4267B2]" />
                            </a>
                        </div>
                    </div>
                </div>
            </div>

            <div
                class="px-8 py-4 bg-gray-50 border-t border-gray-200 flex flex-col sm:flex-row justify-between items-center">
                <div class="text-sm text-gray-600">
                    {{ isLogin ? "Don't have an account?" : "Already have an account?" }}
                </div>
                <button @click="toggleForm"
                    class="mt-3 sm:mt-0 w-full sm:w-auto flex justify-center items-center px-4 py-2 border border-transparent rounded-md shadow-sm text-sm font-medium text-purple-600 bg-white hover:bg-purple-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-purple-500 transition duration-150 ease-in-out">
                    {{ isLogin ? 'Sign Up' : 'Sign In' }}
                </button>
            </div>
        </div>

        <transition name="fade">
            <div v-if="message" class="fixed bottom-4 right-4 p-4 rounded-md shadow-lg" :class="messageClass">
                {{ message }}
            </div>
        </transition>
    </div>
</template>

<script setup>
import { ref, computed } from 'vue'
import { UserIcon, Loader2Icon, GithubIcon, TwitterIcon, FacebookIcon } from 'lucide-vue-next'

const isLogin = ref(true)
const email = ref('')
const password = ref('')
const confirmPassword = ref('')
const isLoading = ref(false)
const message = ref('')

const messageClass = computed(() => {
    return {
        'bg-green-100 text-green-800 border-green-300': message.value.includes('successful'),
        'bg-red-100 text-red-800 border-red-300': message.value.includes('failed') || message.value.includes('match')
    }
})

const toggleForm = () => {
    isLogin.value = !isLogin.value
    email.value = ''
    password.value = ''
    confirmPassword.value = ''
    message.value = ''
}

const handleSubmit = async () => {
    if (!isLogin.value && password.value !== confirmPassword.value) {
        message.value = 'Passwords do not match'
        return
    }

    isLoading.value = true
    message.value = ''

    try {
        // 这里应该是实际的API调用
        await new Promise(resolve => setTimeout(resolve, 1500))

        message.value = isLogin.value ? 'Login successful' : 'Registration successful'

        // 在实际应用中,这里应该处理登录/注册成功后的逻辑,比如重定向到仪表板页面
    } catch (error) {
        message.value = isLogin.value ? 'Login failed' : 'Registration failed'
    } finally {
        isLoading.value = false
    }
}
</script>


<style scoped>
.fade-enter-active,
.fade-leave-active {
    transition: opacity 0.5s ease;
}

.fade-enter-from,
.fade-leave-to {
    opacity: 0;
}
</style>

效果展示

效果展示

标签:isLogin,const,ai,前端,value,v0,message,main,ref
From: https://www.cnblogs.com/qinLiCode/p/18495897

相关文章

  • DAPLINK 源码学习(1)BL 之 main() 函数
    目录bootloader主函数1sdk_init()2gpio_init()3config_init()4board_bootloader_init()5运行IF还是BL?6main_task()7总结bootloader主函数1)我们以stm32f103xb_bl为例,从bootloader项目的main()函数开始:(1)sdk_init():MCU初始化(2)gpio_init():USB相关引脚配......
  • 前端vue-接口的调用和特殊组件的封装
                 ......
  • 20241022 校测T1 链链链(chain)题解
    Problem链链链chain你有一个长度为\(n\)的链,编号为\(i(1≤i<n)\)的边连接着结点\(i\)与\(i+1\)。每个结点\(i\)上有一个整数\(a_i\)。你需要做以下操作\(n−1\)次:•选择一条还未被断开的边,设其连接了点\(i\)与\(i+1\),将其断开。•断边后,对于所......
  • flask 接口还在执行中,前端接收到接口请求超时,解决方案
    在Flask中,当某个接口执行时间较长而导致前端请求超时时,需要考虑以下解决方案:1.优化接口的响应时间如果可能,先优化接口中的代码逻辑,减少处理时间。对于查询操作,可以考虑数据库索引优化、缓存机制等手段。2.增加请求超时时间如果接口确实需要较长时间完成,前端可以......
  • 大数据新视界 -- 大数据大厂之 AI 驱动的大数据分析:智能决策的新引擎
           ......
  • 一文读懂AI生成小说平台Midreal AI
    今天给大家分享的MidrealAI是一款由MIT、NYU、剑桥、普林斯顿联合打造的AI生成小说产品。我个人认为,这绝对是针对普通网文作者的降维打击!我自己体验了一下,不得不说真的非常nice。下面是我自己对MidReal的总结,大家可以先了解下,后面有我的实际体验。MidrealAI的核心竞争力......
  • P2866 [USACO06NOV] Bad Hair Day S
    [USACO06NOV]BadHairDayS题目描述农夫约翰有NNN头奶牛正在过乱头发节。每一头牛都站在同一排面朝右,它们被从左到右依次编号为......
  • 【Python-AI篇】数据结构和算法
    1.算法概念1.1什么是数据结构存储,组织数据的方式1.2什么是算法实现业务目的的各种方法和思路算法是独立的存在,只是思想,不依附于代码和程序,可以使用不同语言实现(java,python,c)1.2.1算法的五大特性输入:算法具有0个或多个输入输出:算法至少有1个或多个输出有穷性:算法......
  • SUST-Sustainability
    文章目录一、征稿简介二、重要信息三、服务简述四、投稿须知五、联系咨询一、征稿简介二、重要信息期刊官网:https://ais.cn/u/3eEJNv三、服务简述Sustainability是一本关于人类环境、文化、经济和社会可持续性的国际跨学科学术开放获取期刊,为可持续性和可持续发......
  • micro-app【微前端实战】主应用 vue3 + vite 子应用 vue3+vite
    micro-app官方文档为https://micro-zoe.github.io/micro-app/docs.html#/zh-cn/framework/vite子应用无需任何修改,直接启动子应用即可。主应用1.安装微前端框架microAppnpmi@micro-zoe/micro-app--save2.导入并启用微前端框架microAppsrc/main.tsimp......