Initial commit: 全友米项目完整代码

This commit is contained in:
Yvan
2026-04-09 09:40:45 +08:00
commit 89960b1cb8
54 changed files with 14574 additions and 0 deletions
+44
View File
@@ -0,0 +1,44 @@
const { DataTypes } = require('sequelize');
const sequelize = require('./db');
const Activity = sequelize.define('Activity', {
id: {
type: DataTypes.INTEGER,
primaryKey: true,
autoIncrement: true
},
title: {
type: DataTypes.STRING,
allowNull: false
},
description: DataTypes.TEXT,
location: DataTypes.STRING,
locationLat: DataTypes.DECIMAL(10, 7),
locationLng: DataTypes.DECIMAL(10, 7),
startTime: DataTypes.DATE,
endTime: DataTypes.DATE,
registrationDeadline: DataTypes.DATE,
maxParticipants: DataTypes.INTEGER,
status: {
type: DataTypes.ENUM('upcoming', 'ongoing', 'completed'),
defaultValue: 'upcoming'
},
registrationEnabled: {
type: DataTypes.BOOLEAN,
defaultValue: true,
comment: '报名开关'
},
coverImage: DataTypes.STRING,
price: {
type: DataTypes.DECIMAL(10, 2),
defaultValue: 0,
comment: '人均费用'
},
budget: {
type: DataTypes.DECIMAL(10, 2),
defaultValue: 0,
comment: '活动预算'
}
});
module.exports = Activity;
+22
View File
@@ -0,0 +1,22 @@
const { DataTypes } = require('sequelize');
const sequelize = require('./db');
const Admin = sequelize.define('Admin', {
id: {
type: DataTypes.INTEGER,
primaryKey: true,
autoIncrement: true
},
username: {
type: DataTypes.STRING,
allowNull: false,
unique: true
},
password: {
type: DataTypes.STRING,
allowNull: false
},
name: DataTypes.STRING
});
module.exports = Admin;
+32
View File
@@ -0,0 +1,32 @@
const { DataTypes } = require('sequelize');
const sequelize = require('./db');
const Expense = sequelize.define('Expense', {
id: {
type: DataTypes.INTEGER,
primaryKey: true,
autoIncrement: true
},
activityId: {
type: DataTypes.INTEGER,
allowNull: false
},
item: {
type: DataTypes.STRING,
allowNull: false
},
amount: {
type: DataTypes.DECIMAL(10, 2),
allowNull: false
},
category: DataTypes.STRING,
receipt: DataTypes.STRING,
note: DataTypes.TEXT,
media: {
type: DataTypes.JSON,
defaultValue: [],
comment: '经费相关照片/视频,最多5个'
}
});
module.exports = Expense;
+30
View File
@@ -0,0 +1,30 @@
const { DataTypes } = require('sequelize');
const sequelize = require('./db');
const Photo = sequelize.define('Photo', {
id: {
type: DataTypes.INTEGER,
primaryKey: true,
autoIncrement: true
},
activityId: {
type: DataTypes.INTEGER,
allowNull: false
},
url: {
type: DataTypes.STRING,
allowNull: false
},
type: {
type: DataTypes.ENUM('image', 'video'),
defaultValue: 'image'
},
description: DataTypes.STRING,
uploadedBy: DataTypes.STRING,
status: {
type: DataTypes.ENUM('pending', 'approved', 'rejected'),
defaultValue: 'approved'
}
});
module.exports = Photo;
+40
View File
@@ -0,0 +1,40 @@
const { DataTypes } = require('sequelize');
const sequelize = require('./db');
const Registration = sequelize.define('Registration', {
id: {
type: DataTypes.INTEGER,
primaryKey: true,
autoIncrement: true
},
activityId: {
type: DataTypes.INTEGER,
allowNull: false
},
name: {
type: DataTypes.STRING,
allowNull: false
},
phone: {
type: DataTypes.STRING,
allowNull: false
},
carModel: DataTypes.STRING,
carNumber: DataTypes.STRING,
peopleCount: {
type: DataTypes.INTEGER,
defaultValue: 1
},
status: {
type: DataTypes.ENUM('pending', 'approved', 'rejected'),
defaultValue: 'pending'
},
note: DataTypes.TEXT,
checkInStatus: {
type: DataTypes.BOOLEAN,
defaultValue: false
},
checkInTime: DataTypes.DATE
});
module.exports = Registration;
+26
View File
@@ -0,0 +1,26 @@
const { DataTypes } = require('sequelize');
const sequelize = require('./db');
const Sponsor = sequelize.define('Sponsor', {
id: {
type: DataTypes.INTEGER,
primaryKey: true,
autoIncrement: true
},
activityId: {
type: DataTypes.INTEGER,
allowNull: false
},
name: {
type: DataTypes.STRING,
allowNull: false
},
logo: DataTypes.STRING,
type: {
type: DataTypes.ENUM('title', 'sponsor'),
defaultValue: 'sponsor'
},
link: DataTypes.STRING
});
module.exports = Sponsor;
+14
View File
@@ -0,0 +1,14 @@
const { Sequelize } = require('sequelize');
const sequelize = new Sequelize(
process.env.DB_NAME || 'quanyoumi',
process.env.DB_USER || 'root',
process.env.DB_PASSWORD || '',
{
host: process.env.DB_HOST || 'localhost',
dialect: 'mysql',
logging: false
}
);
module.exports = sequelize;
+22
View File
@@ -0,0 +1,22 @@
const sequelize = require('./db');
const Activity = require('./Activity');
const Registration = require('./Registration');
const Expense = require('./Expense');
const Photo = require('./Photo');
const Sponsor = require('./Sponsor');
const Admin = require('./Admin');
// 同步数据库
sequelize.sync({ alter: true }).then(() => {
console.log('数据库同步完成');
});
module.exports = {
sequelize,
Activity,
Registration,
Expense,
Photo,
Sponsor,
Admin
};