添加 FRONT_ATTENDANCE 文件夹内容

main
poppoppuppylove 2 months ago
parent 56a7697230
commit c979a0e004

@ -0,0 +1,30 @@
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*
node_modules
.DS_Store
dist
dist-ssr
coverage
*.local
/cypress/videos/
/cypress/screenshots/
# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
*.tsbuildinfo

@ -0,0 +1,3 @@
{
"recommendations": ["Vue.volar"]
}

@ -0,0 +1,13 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<link rel="icon" href="/点名.svg">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Vite App</title>
</head>
<body>
<div id="app"></div>
<script type="module" src="/src/main.js"></script>
</body>
</html>

@ -0,0 +1,8 @@
{
"compilerOptions": {
"paths": {
"@/*": ["./src/*"]
}
},
"exclude": ["node_modules", "dist"]
}

File diff suppressed because it is too large Load Diff

@ -0,0 +1,22 @@
{
"name": "name-nacing-system",
"version": "0.0.0",
"private": true,
"type": "module",
"scripts": {
"dev": "vite",
"build": "vite build",
"preview": "vite preview"
},
"dependencies": {
"axios": "^1.7.7",
"element-plus": "^2.8.4",
"element-ui": "^2.15.14",
"vue": "^3.4.29",
"vue-router": "^4.3.3"
},
"devDependencies": {
"@vitejs/plugin-vue": "^5.0.5",
"vite": "^5.3.1"
}
}

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1727709759865" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6581" xmlns:xlink="http://www.w3.org/1999/xlink" width="48" height="48"><path d="M485.568 906.496c-0.64-0.192-145.088 10.368-209.216-16.256-86.528-35.968-117.184-62.592-117.184-79.488 0-15.936-2.944-98.112 77.248-123.2a4319.36 4319.36 0 0 1 155.264-43.136 25.216 25.216 0 0 0 22.08-24.832V541.888a24.064 24.064 0 0 0-7.68-17.664c-69.248-66.56-97.728-131.456-97.728-243.584 0-53.312 14.656-91.008 39.296-119.744 26.496-31.104 68.032-46.912 123.264-46.912 159.104 0 169.408 128.384 169.408 171.392a291.072 291.072 0 0 1-26.56 122.048c-13.056 28.544-26.624 44.736-26.752 45.12a24.256 24.256 0 0 0 3.776 35.2 26.88 26.88 0 0 0 36.672-3.648c2.56-3.072 65.088-77.696 65.088-198.72 0-65.024-16.832-109.376-52.544-150.72C600.256 88.448 541.76 64 470.976 64 335.808 64 256.256 140.416 256.256 280.704c0 60.864 8.192 104.256 25.024 148.928a340.48 340.48 0 0 0 80.256 122.368v46.784c-36.928 6.72-73.408 15.552-109.312 26.368-39.232 12.16-70.848 25.536-93.824 40.256-34.176 21.632-51.456 117.76-51.456 145.344 0 45.76 48.64 83.968 149.056 125.504 67.712 28.032 213.12 17.664 215.872 18.368l6.848 1.024a25.92 25.92 0 0 0 25.28-18.496 24.704 24.704 0 0 0-18.432-30.656z" p-id="6582" fill="#8755f2"></path><path d="M937.024 515.776a26.624 26.624 0 0 0-37.376 4.16c-9.152 11.456-199.808 266.624-228.224 268.928-27.712 2.432-122.752-90.112-122.752-90.112a26.496 26.496 0 0 0-36.224 4.032 26.56 26.56 0 0 0 1.856 36.48c10.304 9.664 101.056 82.048 123.072 98.304l25.6 18.816c5.12 3.264 10.752 5.376 16.576 4.736a23.68 23.68 0 0 0 17.536-9.152c6.208-7.36 35.52-41.344 35.776-41.792l208.448-257.216a26.56 26.56 0 0 0-4.288-37.184z" p-id="6583" fill="#8755f2"></path></svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

@ -0,0 +1,26 @@
<template>
<div>
<router-view/>
</div>
</template>
<style>
/* 让页面铺满整个屏幕,不出现滚动条 */
html,
body,
#app {
width: 100%;
height: 100%;
margin: 0;
padding: 0;
overflow: auto;
}
</style>
<script>
export default {
name: "Layout",
}
</script>

@ -0,0 +1,121 @@
.login-register-container {
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
background-image: linear-gradient(to right, rgb(219, 219, 245), #f4dfe3);
}
.form-box {
background: rgba(211, 197, 252, 1);
padding: 100px 110px;
padding-top: 15px;
border-radius: 40px;
box-shadow: 0 10px 25px rgba(0, 0, 0, 0.1);
width: 350px;
}
h2 {
text-align: center;
color: #FFFFFF;
margin-bottom: 30px;
font-size: 45px;
}
.tab-switch {
display: flex;
margin-bottom: 20px;
}
.tab-switch span {
margin-right: 25px;
font-size: 22px;
padding: 3px 7px;
border-radius: 3px;
cursor: pointer;
color: #FFFFFF;
}
.tab-switch span.active {
border-bottom: 4px solid #FFFFFF;
}
.input-group {
position: relative;
display: flex;
align-items: center;
width: 100%;
padding: 10px 0px;
border-radius: 20px;
box-shadow: 0px 0px 10px 0px #D5E8FF;
background-color: rgba(243, 243, 243, 0.5);
border: 1px solid #FFFFFF;
margin-top: 20px;
}
.input-group input:focus {
outline: none;
/* box-shadow: 0 0 0 2px rgba(102, 126, 234, 0.5); */
}
.input-icon {
width: 25px;
height: 25px;
margin-left: 15px;
margin-right: 5px;
}
.placeholder {
color: #FFFFFF;
}
input {
flex: 1;
height: 100%;
border: none;
background: transparent;
padding: 0 10px;
color: #615EF8;
font-size: 16px;
}
.forgot-password {
text-align: right;
margin-top: 15px;
}
.forgot-password a {
color: #FFFFFF;
text-decoration: none;
}
.submit-btn {
width: 100%;
padding: 12px 0;
margin-top: 15px;
background-color: #8755F2;
color: #FFFFFF;
border-radius: 20px;
font-size: 16px;
cursor: pointer;
transition: background-color 0.3s;
box-shadow: 0px 0px 10px 0px #D5E8FF;
border: 1px solid #FFFFFF;
}
.submit-btn:hover {
background-color: #6231F5;
}
/* 隐藏默认的密码切换图标 */
input[type="password"]::-ms-reveal,
input[type="password"]::-ms-clear,
input[type="password"]::-webkit-contacts-auto-fill-button,
input[type="password"]::-webkit-credentials-auto-fill-button {
display: none !important;
}
/* 对于Chrome浏览器 */
input[type="password"]::-webkit-inner-spin-button,
input[type="password"]::-webkit-outer-spin-button,
input[type="password"]::-webkit-search-cancel-button {
-webkit-appearance: none;
margin: 0;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 134 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

@ -0,0 +1,21 @@
// 引入createApp用于创建应用
import { createApp } from 'vue'
// 引入App.vue文件
import App from './App.vue'
import router from './router'
import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'
// new Vue({
// el: '#app',
// render: h => h(App)
// });
const app = createApp(App)
app.use(router)
app.use(ElementPlus)
app.mount('#app')

@ -0,0 +1,38 @@
import { createRouter, createWebHistory} from 'vue-router'
// 引入路由组件
import login from '@/views/login2.vue'
import home from '@/views/home.vue'
import importFile from '@/views/importFile.vue'
import ruleSetting from '@/views/ruleSetting.vue'
// 创建路由器
const router = createRouter({
// 路由器的工作模式
history: createWebHistory(import.meta.env.BASE_URL),
routes: [
{
path: '/',
// name: 'home',
component: login
},
{
path:'/home',
component: home,
children:[
{
path:'importFile',
component: importFile
},
{
path:'ruleSetting',
component: ruleSetting
}
]
}
]
})
export default router

@ -0,0 +1,18 @@
// 存储、获取、删除token的文件
// 定义 setToken 函数,用于将 token 存储到 localStorage
export function setToken(token) {
localStorage.setItem('authToken', token);
}
// 定义 getToken 函数,用于从 localStorage 获取 token
export function getToken() {
return localStorage.getItem('authToken');
}
// 定义 removeToken 函数,用于从 localStorage 删除 token
export function removeToken() {
localStorage.removeItem('authToken');
}

@ -0,0 +1,89 @@
// axiosConfig.js
import axios from 'axios';
import {getToken} from '@/token/auth' // 注意这里使用了解构赋值来导入getToken函数
// 创建axios实例
const service = axios.create({
baseURL: 'http://example.com/api', // 配置基础URL
timeout: 5000, // 请求超时时间
});
// 请求拦截器
service.interceptors.request.use(
config => {
// 在发送请求之前做些什么
const token = getToken(); // 获取token的方式取决于你的应用
if (token) {
config.headers['Authorization'] = `Bearer ${token}`; // 设置token
}
return config;
},
error => {
// 对请求错误做些什么
console.error('Request Error:', error);
return Promise.reject(error);
}
);
// 响应拦截器
service.interceptors.response.use(
response => {
// 对响应数据做点什么
const res = response.data;
// 你可以根据实际情况在这里添加一些通用的响应处理逻辑
// 例如,根据返回的状态码判断请求是否成功
if (res.code !== 200) {
// 业务错误处理,比如弹窗提示等
return Promise.reject(new Error(res.message || 'Error'));
} else {
return res;
}
},
error => {
// 对响应错误做点什么
if (error.response) {
// 请求已发出但服务器响应的状态码不在2xx的范围
console.error('Error status:', error.response.status);
console.error('Error data:', error.response.data);
} else if (error.request) {
// 请求已发出,但没有收到响应
console.error('Error request:', error.request);
} else {
// 在设置请求时触发错误
console.error('Error message:', error.message);
}
return Promise.reject(error);
}
);
export default service;
// 使用
// 导入封装好的axios实例
// import axios from './axiosConfig';
// 登录方法
// methods: {
// async login() {
// try {
// const response = await axios.post('/api/login', {
// username: this.username,
// password: this.password
// });
// // 假设token在响应的data字段中
// const token = response.data.token;
// // 存储token
// setToken(token);
// // 登录成功后的操作,比如跳转到主页
// this.$router.push('/home');
// } catch (error) {
// // 处理登录错误
// console.error('Login Error:', error);
// }
// }
// }

@ -0,0 +1,80 @@
<template>
<div class="home">
<div class="content">
<!-- 展示区 -->
<div class="leftIcon">
<RouterView></RouterView>
</div>
<!-- 导航栏 -->
<div class="select">
<div @click="gotoImpt" class="selectItem">
导入文件
</div>
<div class="selectItem">
开始点名
</div>
<div @click="gotoRule" class="selectItem">
规则设置
</div>
<div class="selectItem">
查看排行
</div>
</div>
</div>
</div>
</template>
<script>
import { RouterLink, RouterView } from 'vue-router';
export default {
data() {
return {
}
},
methods: {
gotoImpt(){
this.$router.push('/home/importFile')
},
gotoRule() {
this.$router.push('/home/ruleSetting')
}
}
}
</script>
<style scoped>
.home {
background-image: url('../assets/image/bgcImg.png'); /* 图片路径 */
width:100%;
height:100%;
position:fixed;
background-size:100% 100%;
}
.content {
height:100%;
display: flex;
justify-content: space-between;
align-items: center;
padding: 0 120px;
}
.leftIcon {
width: 700px;
height: 800px;
/* background-color: red; */
}
.selectItem {
padding: 25px 130px;
border-radius: 50px;
background-color: #A182FF;
color: #FFFFFF;
font-size: 35px;
font-weight: bold;
margin-bottom: 65px;
cursor: pointer;
text-decoration: none;
}
.selectItem:hover {
background-color: #6231F5;
}
</style>

@ -0,0 +1,206 @@
<template>
<div class="imptFile">
<!-- 头部 -->
<div class="header">
<div>导入学生名单</div>
<img src="../assets/image/close.png" alt="" class="icon" @click="close">
</div>
<div style="border: 1.5px solid #C8C1C1;"></div>
<!-- 上传文件 -->
<el-upload
ref="uploadRef"
class="upload-demo"
action="https://run.mocky.io/v3/9d059bf9-4660-45f2-925d-ce80ad6c4d15"
:auto-upload="false"
:limit="1"
accept=".xlsx, .xls"
:on-exceed="handleExceed"
>
<div style="font-size: 30px; color: #7D7878;">选择文件</div>
<input placeholder="请选择上传的文件" class="inputFile" />
<!-- <template #trigger> -->
<el-button type="primary" color="#A182FF" class="btn">选取文件</el-button>
<!-- </template> -->
<!-- 按钮下面放置文件区 -->
<!-- <el-button class="ml-3" type="success" @click="submitUpload">
upload to server
</el-button> -->
<template #tip>
<div class="el-upload__tip">
请上传Excel文件文件大小不超过500KB
</div>
</template>
</el-upload>
<!-- 下载模板 -->
<a
class="download"
href="后端提供的下载URL"
download="student-template.xlsx"
@click="onDownload"
>
模板下载
</a>
<!-- 模板示例 -->
<div>
<div style="color: #8755F2; font-size: 28px; margin: 30px 0 0 40px;">模板示例</div>
<div style="display: flex; justify-content: center; margin-top:10px;">
<img src="../assets/image/muban.png" alt="" style="height: 250px;">
</div>
</div>
<!-- 底部 -->
<div class="bottom">
<div style="display: flex;">
<div class="confirm" @click="submitUpload"></div>
<div class="cancel" @click="close"></div>
</div>
</div>
</div>
</template>
<script lang="ts" setup>
import { ref } from 'vue'
import { genFileId } from 'element-plus'
import type { UploadInstance, UploadProps, UploadRawFile } from 'element-plus'
import router from '@/router';
const uploadRef = ref<UploadInstance>()
//
const handleExceed: UploadProps['onExceed'] = (files) => {
uploadRef.value!.clearFiles()
const file = files[0] as UploadRawFile
file.uid = genFileId()
uploadRef.value!.handleStart(file)
}
//
const submitUpload = () => {
uploadRef.value!.submit()
}
//
const onDownload = (event: MouseEvent) => {
//
//
// <a>href
event.preventDefault();
// 使fetchhref
window.open("后端提供的下载URL", '_blank');
}
function close() {
router.push('/home')
}
</script>
<style scoped>
.imptFile{
position: relative;
background-color: #fff;
border-radius: 40px;
height: 100%;
padding-top: 10px;
box-shadow: 5px 10px 10px 5px rgba(2, 2, 2, 0.1);
overflow: hidden;
}
.header {
display: flex;
justify-content: space-between;
align-items: center;
padding: 15px 60px;
font-size: 35px;
font-weight: bold;
}
.icon {
width: 45px;
cursor: pointer;
}
.icon:hover {
transform: scale(1.3);
}
.upload-demo {
margin-top: 35px;
padding: 0 20px;
}
.inputFile {
height: 60px;
width: 300px;
font-size: 23px;
margin-left: 20px;
border-radius: 10px;
border: 1.5px solid #272636;
padding-left: 20px;
}
.inputFile::placeholder {
padding-left: 0;
}
.btn {
height: 70px;
border-radius: 10px;
padding: 10px;
font-size: 30px;
margin-left: 30px;
color: #fff;
}
.btn:hover {
color: #fff;
transform: scale(1.1);
}
.el-upload__tip {
font-size: 23px;
margin: 25px 0 25px 70px;
}
.download{
color: #8755F2;
font-size: 28px;
margin: 20px 0 0 40px;
cursor: pointer;
text-decoration: none;
}
.download:hover {
color: #6231F5;
text-decoration: underline;
}
.bottom{
position: absolute;
display: flex; align-items: center; justify-content: right;
bottom: 0;
width: 100%;
padding: 30px 30px;
background-color: #EBE4FF;
}
.cancel {
width: auto;
border-radius: 5px;
padding: 20px 35px;
margin-right: 70px;
font-size: 28px;
background-color: #fff;
color: #A182FF;
cursor: pointer;
}
.cancel:hover {
background-color: #dfdede;
}
.confirm{
width: auto;
border-radius: 5px;
padding: 20px 35px;
margin-right: 30px;
font-size: 28px;
background-color: #A182FF;
color: #fff;
cursor: pointer;
}
.confirm:hover {
background-color: #6231F5;
}
</style>

@ -0,0 +1,187 @@
<template>
<div class="login-register-container">
<div class="form-box">
<h2>让我们开始点名</h2>
<div class="tab-switch">
<span
:class="{ active: activeTab === 'login' }"
@click="switchTab('login')"
>
登录
</span>
<span
:class="{ active: activeTab === 'register' }"
@click="switchTab('register')"
>
注册
</span>
</div>
<!-- 登录表单 -->
<form v-if="activeTab === 'login'" @submit.prevent="handleLogin">
<div class="input-group">
<img src="../assets/image/person.png" alt="" class="input-icon">
<input
v-model="loginForm.phone"
type="text"
placeholder="请输入您的手机号"
placeholder-class="placeholder"
>
</div>
<div class="input-group">
<img src="../assets/image/password.png" alt="" class="input-icon">
<input
v-model="loginForm.password"
:type="showPassword ? 'text' : 'password'"
placeholder="请输入您的密码"
>
<img src="../assets/image/eye.png"
v-if="showPassword"
class="input-icon"
@click="togglePasswordVisibility"
style="cursor: pointer;margin-right: 15px;"
>
<img src="../assets/image/eyeClose.png"
v-if="!showPassword"
class="input-icon"
@click="togglePasswordVisibility"
style="cursor: pointer;margin-right: 15px;"
>
</div>
<div class="forgot-password">
<a href="#">忘记密码?</a>
</div>
<button type="submit" class="submit-btn"> </button>
</form>
<!-- 注册表单 -->
<form v-else @submit.prevent="handleRegister">
<div class="input-group">
<img src="../assets/image/person.png" alt="" class="input-icon">
<input
v-model="registerForm.phone"
type="text"
placeholder="请输入您的手机号"
>
</div>
<div class="input-group">
<img src="../assets/image/password.png" alt="" class="input-icon">
<input
v-model="registerForm.password"
:type="showPassword ? 'text' : 'password'"
placeholder="请输入您的密码"
>
<img src="../assets/image/eye.png"
v-if="showPassword"
class="input-icon"
@click="togglePasswordVisibility"
style="cursor: pointer;margin-right: 15px;"
>
<img src="../assets/image/eyeClose.png"
v-if="!showPassword"
class="input-icon"
@click="togglePasswordVisibility"
style="cursor: pointer;margin-right: 15px;"
>
</div>
<div class="input-group">
<img src="../assets/image/password.png" alt="" class="input-icon">
<input
v-model="registerForm.confirmPassword"
:type="showConfirmPassword ? 'text' : 'password'"
placeholder="再次确认密码"
>
<img src="../assets/image/eye.png"
v-if="showPassword"
class="input-icon"
@click="togglePasswordVisibility"
style="cursor: pointer;margin-right: 15px;"
>
<img src="../assets/image/eyeClose.png"
v-if="!showPassword"
class="input-icon"
@click="togglePasswordVisibility"
style="cursor: pointer;margin-right: 15px;"
>
</div>
<button type="submit" class="submit-btn" style="margin-top: 25px;">注册</button>
</form>
</div>
</div>
</template>
<script>
import axios from '@/utils/axiosConfig';
import {setToken} from '@/token/auth'
export default {
data() {
return {
activeTab: 'login',
showPassword: false,
showConfirmPassword: false,
loginForm: {
phone: '',
password: ''
},
registerForm: {
phone: '',
password: '',
confirmPassword: ''
}
}
},
methods: {
switchTab(tab) {
this.activeTab = tab;
},
togglePasswordVisibility() {
this.showPassword = !this.showPassword;
},
//
async handleLogin() {
try {
const response = await axios.post('/teacher/login', {
username: this.loginForm.phone,
password: this.loginForm.password
});
// tokendata
const token = response.data.token;
// token
setToken(token);
//
this.$router.push('/home');
} catch (error) {
//
console.error('Login Error:', error);
}
},
//
async handleRegister() {
if (this.registerForm.password !== this.registerForm.confirmPassword) {
alert('两次输入的密码不一致');
return;
}
try {
//
const response = await axios.post('/teacher/register', {
username: this.registerForm.phone,
password: this.registerForm.password,
});
//
console.log('注册成功', response);
} catch (error) {
//
console.error('注册失败', error);
}
}
}
}
</script>
<style scoped>
@import '../assets/css/login.css'
</style>

@ -0,0 +1,192 @@
<template>
<div class="imptFile">
<!-- 头部 -->
<div class="header">
<div>规则设置</div>
<img src="../assets/image/close.png" alt="" class="icon" @click="close">
</div>
<div style="border: 1.5px solid #C8C1C1;"></div>
<!-- 问题 -->
<el-form :model="form" label-position="top">
<el-form-item label="进行点名 or 提问 ">
<el-radio-group v-model="form.nameOrQuestion">
<el-radio label="点名">点名</el-radio>
<el-radio label="提问">提问</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="是否触发随机事件 ">
<el-radio-group v-model="form.triggerRandomEvent">
<el-radio label="触发">触发</el-radio>
<el-radio label="不触发">不触发</el-radio>
</el-radio-group>
</el-form-item>
<!-- 最后一个问题 -->
<el-tooltip
content="今天众生平等!所有人被抽到的概率相等"
placement="bottom-start"
effect="dark"
>
<div class="lastQues">是否开启&quot;命运轮盘&quot; </div>
</el-tooltip>
<el-radio-group v-model="form.enableFateWheel" class="lastOpt">
<el-radio label="是"></el-radio>
<el-radio label="否"></el-radio>
</el-radio-group>
</el-form>
<!-- 底部 -->
<div class="bottom">
<div style="display: flex;">
<div class="confirm" @click="confirmSetting"></div>
<div class="cancel" @click="close"></div>
</div>
</div>
</div>
</template>
<script lang="ts" setup>
import router from '@/router';
import { ref } from 'vue'
import { ElTooltip } from 'element-plus'
const form = ref({
nameOrQuestion: '点名',
triggerRandomEvent: '触发',
enableFateWheel: '否'
})
const confirmSetting = () => {
// ,
const data = {
nameOrQuestion: form.value.nameOrQuestion,
triggerRandomEvent: form.value.triggerRandomEvent,
enableFateWheel: form.value.enableFateWheel,
}
// form
console.log(form.value.nameOrQuestion)
// API
console.log('发送到后端的数据:', data)
}
function close() {
router.push('/home')
}
</script>
<style scoped>
.imptFile{
position: relative;
background-color: #fff;
border-radius: 40px;
height: 100%;
padding-top: 10px;
box-shadow: 5px 10px 10px 5px rgba(2, 2, 2, 0.1);
overflow: hidden;
}
.header {
display: flex;
justify-content: space-between;
align-items: center;
padding: 15px 60px;
font-size: 35px;
font-weight: bold;
}
.icon {
width: 45px;
cursor: pointer;
}
.icon:hover {
transform: scale(1.3);
}
.bottom{
position: absolute;
display: flex; align-items: center; justify-content: right;
bottom: 0;
width: 100%;
padding: 30px 30px;
background-color: #EBE4FF;
}
.cancel {
width: auto;
border-radius: 5px;
padding: 20px 35px;
margin-right: 70px;
font-size: 28px;
background-color: #fff;
color: #A182FF;
cursor: pointer;
}
.cancel:hover {
background-color: #dfdede;
}
.confirm{
width: auto;
border-radius: 5px;
padding: 20px 35px;
margin-right: 30px;
font-size: 28px;
background-color: #A182FF;
color: #fff;
cursor: pointer;
}
.confirm:hover {
background-color: #6231F5;
}
/* add */
.el-form-item {
margin: 50px 0 0 60px;
}
.el-radio {
margin: 45px 80px;
margin-bottom: 0;
}
/* 最后一个问题 */
.lastQues {
margin: 50px 0 0 60px;
font-size: 35px; /* 调整为你想要的大小 */
font-weight: bold;
color: #7D7878;
cursor: pointer;
}
.lastOpt{
margin-left: 60px;
}
:deep(.el-form-item__label) {
font-size: 35px; /* 调整为你想要的大小 */
font-weight: bold;
color: #7D7878;
}
/* 如果你也想改变输入框内的文字大小 */
:deep(.el-radio__label) {
color: #8755F2;
font-size: 35px;font-weight: bold;
}
:deep(.el-radio__inner) {
width: 20px; /* 调整单选按钮的宽度 */
height: 20px; /* 调整单选按钮的高度 */
border-color: #8755F2;font-weight: bold;
}
/* 改变选中时的颜色 */
/* 单选框 */
:deep(.el-radio__input.is-checked .el-radio__inner) {
border-color: #6231F5;
background: #6231F5;
}
/* 选项文字 */
:deep(.el-radio__input.is-checked+.el-radio__label) {
color: #6231F5;
}
</style>

@ -0,0 +1,16 @@
import { fileURLToPath, URL } from 'node:url'
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
// https://vitejs.dev/config/
export default defineConfig({
plugins: [
vue(),
],
resolve: {
alias: {
'@': fileURLToPath(new URL('./src', import.meta.url))
}
}
})
Loading…
Cancel
Save