- 新增订单管理页面,实现订单列表展示、搜索、分页等功能 - 新增供应商管理页面,实现供应商列表展示、搜索、分页等功能- 添加订单和供应商相关模型及数据库迁移 - 实现订单状态更新和供应商信息编辑功能 - 优化后端路由结构,移除不必要的代码
221 lines
4.7 KiB
JavaScript
221 lines
4.7 KiB
JavaScript
// 数据库连接和模型定义
|
||
const { Sequelize } = require('sequelize');
|
||
const config = require('../config/database.js');
|
||
|
||
// 根据环境变量选择配置
|
||
const env = process.env.NODE_ENV || 'development';
|
||
const dbConfig = config[env];
|
||
|
||
// 创建Sequelize实例
|
||
const sequelize = new Sequelize(
|
||
dbConfig.database,
|
||
dbConfig.username,
|
||
dbConfig.password,
|
||
{
|
||
host: dbConfig.host,
|
||
port: dbConfig.port,
|
||
dialect: dbConfig.dialect,
|
||
dialectOptions: dbConfig.dialectOptions,
|
||
timezone: dbConfig.timezone,
|
||
logging: dbConfig.logging,
|
||
pool: dbConfig.pool
|
||
}
|
||
);
|
||
|
||
// 导入模型定义
|
||
const defineOrder = require('./order.js');
|
||
|
||
// 测试数据库连接
|
||
const testConnection = async () => {
|
||
try {
|
||
await sequelize.authenticate();
|
||
console.log('✅ 数据库连接成功');
|
||
return true;
|
||
} catch (error) {
|
||
console.error('❌ 数据库连接失败:', error);
|
||
return false;
|
||
}
|
||
};
|
||
|
||
// 定义模型
|
||
const models = {
|
||
sequelize,
|
||
Sequelize,
|
||
|
||
// 用户模型(匹配实际数据库结构)
|
||
User: sequelize.define('User', {
|
||
id: {
|
||
type: Sequelize.INTEGER,
|
||
primaryKey: true,
|
||
autoIncrement: true
|
||
},
|
||
openid: {
|
||
type: Sequelize.STRING(64),
|
||
allowNull: false,
|
||
unique: true
|
||
},
|
||
nickname: {
|
||
type: Sequelize.STRING(50),
|
||
allowNull: false
|
||
},
|
||
avatar: {
|
||
type: Sequelize.STRING(255)
|
||
},
|
||
gender: {
|
||
type: Sequelize.ENUM('male', 'female', 'other')
|
||
},
|
||
birthday: {
|
||
type: Sequelize.DATE
|
||
},
|
||
phone: {
|
||
type: Sequelize.STRING(20),
|
||
unique: true
|
||
},
|
||
email: {
|
||
type: Sequelize.STRING(100),
|
||
unique: true
|
||
},
|
||
uuid: {
|
||
type: Sequelize.STRING(36),
|
||
unique: true
|
||
}
|
||
}, {
|
||
tableName: 'users',
|
||
timestamps: true,
|
||
createdAt: 'created_at',
|
||
updatedAt: 'updated_at'
|
||
}),
|
||
|
||
// 为了兼容现有API,创建一个简化版的用户模型
|
||
ApiUser: sequelize.define('ApiUser', {
|
||
id: {
|
||
type: Sequelize.INTEGER,
|
||
primaryKey: true,
|
||
autoIncrement: true
|
||
},
|
||
username: {
|
||
type: Sequelize.STRING(50),
|
||
allowNull: false,
|
||
unique: true
|
||
},
|
||
password_hash: {
|
||
type: Sequelize.STRING(255),
|
||
allowNull: false
|
||
},
|
||
phone: {
|
||
type: Sequelize.STRING(20),
|
||
allowNull: false,
|
||
unique: true
|
||
},
|
||
email: {
|
||
type: Sequelize.STRING(100)
|
||
},
|
||
user_type: {
|
||
type: Sequelize.ENUM('client', 'supplier', 'driver', 'staff', 'admin'),
|
||
allowNull: false
|
||
},
|
||
status: {
|
||
type: Sequelize.ENUM('active', 'inactive', 'locked'),
|
||
defaultValue: 'active'
|
||
}
|
||
}, {
|
||
tableName: 'api_users',
|
||
timestamps: true
|
||
}),
|
||
|
||
// 订单模型
|
||
Order: defineOrder(sequelize),
|
||
|
||
// 供应商模型
|
||
Supplier: sequelize.define('Supplier', {
|
||
id: {
|
||
type: Sequelize.BIGINT,
|
||
primaryKey: true,
|
||
autoIncrement: true
|
||
},
|
||
name: {
|
||
type: Sequelize.STRING(100),
|
||
allowNull: false
|
||
},
|
||
code: {
|
||
type: Sequelize.STRING(20),
|
||
allowNull: false,
|
||
unique: true
|
||
},
|
||
contact: {
|
||
type: Sequelize.STRING(50),
|
||
allowNull: false
|
||
},
|
||
phone: {
|
||
type: Sequelize.STRING(20),
|
||
allowNull: false,
|
||
unique: true
|
||
},
|
||
address: {
|
||
type: Sequelize.STRING(200),
|
||
allowNull: false
|
||
},
|
||
businessLicense: {
|
||
type: Sequelize.STRING(255)
|
||
},
|
||
qualificationLevel: {
|
||
type: Sequelize.STRING(10),
|
||
allowNull: false
|
||
},
|
||
certifications: {
|
||
type: Sequelize.JSON
|
||
},
|
||
cattleTypes: {
|
||
type: Sequelize.JSON
|
||
},
|
||
capacity: {
|
||
type: Sequelize.INTEGER
|
||
},
|
||
rating: {
|
||
type: Sequelize.DECIMAL(3, 2)
|
||
},
|
||
cooperationStartDate: {
|
||
type: Sequelize.DATE
|
||
},
|
||
status: {
|
||
type: Sequelize.ENUM('active', 'inactive', 'suspended'),
|
||
defaultValue: 'active'
|
||
},
|
||
region: {
|
||
type: Sequelize.STRING(20),
|
||
allowNull: false
|
||
}
|
||
}, {
|
||
tableName: 'suppliers',
|
||
timestamps: true,
|
||
createdAt: 'created_at',
|
||
updatedAt: 'updated_at'
|
||
})
|
||
};
|
||
|
||
// 同步数据库模型
|
||
const syncModels = async () => {
|
||
try {
|
||
// 同步API用户表(如果不存在则创建)
|
||
await models.ApiUser.sync({ alter: true });
|
||
console.log('✅ API用户表同步成功');
|
||
|
||
// 同步订单表(如果不存在则创建)
|
||
await models.Order.sync({ alter: true });
|
||
console.log('✅ 订单表同步成功');
|
||
|
||
// 同步供应商表(如果不存在则创建)
|
||
await models.Supplier.sync({ alter: true });
|
||
console.log('✅ 供应商表同步成功');
|
||
|
||
console.log('✅ 数据库模型同步完成');
|
||
} catch (error) {
|
||
console.error('❌ 数据库模型同步失败:', error);
|
||
}
|
||
};
|
||
|
||
module.exports = {
|
||
...models,
|
||
testConnection,
|
||
syncModels
|
||
}; |