-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgoodstable.cpp
More file actions
145 lines (126 loc) · 4.49 KB
/
goodstable.cpp
File metadata and controls
145 lines (126 loc) · 4.49 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
#include "goodstable.h"
#include "ui_goodstable.h"
#include <QMessageBox>
#include <QSqlError>
#include <QDateTime>
GoodsTable::GoodsTable(QWidget *parent) :
QDialog(parent),
ui(new Ui::GoodsTable)
{
ui->setupUi(this);
// 1. 初始化仓库下拉框数据
initWarehouseCombo();
// 2. 设置一些默认值,方便测试
ui->priceEdit->setText("0");
ui->stockQuantityEdit->setText("0");
ui->warningQuantityEdit->setText("10");
}
GoodsTable::~GoodsTable()
{
delete ui;
}
void GoodsTable::initWarehouseCombo()
{
ui->wareBox->clear();
QSqlQuery query("SELECT w_id, w_name FROM warehouses");
while (query.next()) {
int id = query.value(0).toInt();
QString name = query.value(1).toString();
// 【关键】显示的是名字,存的是ID
ui->wareBox->addItem(name, id);
}
}
// 【新增】加载旧数据到界面
void GoodsTable::setEditData(int goodsId)
{
m_goodsId = goodsId; // 记录ID
this->setWindowTitle("修改货品档案"); // 改一下窗口标题
QSqlQuery query;
query.prepare("SELECT * FROM goods WHERE goods_id = ?");
query.addBindValue(goodsId);
if (query.exec() && query.next()) {
ui->nameEdit->setText(query.value("goods_name").toString());
ui->specEdit->setText(query.value("goods_spec").toString());
ui->unitEdit->setText(query.value("goods_unit").toString());
ui->priceEdit->setText(query.value("goods_price").toString());
ui->stockQuantityEdit->setText(query.value("stock_quantity").toString());
ui->warningQuantityEdit->setText(query.value("warning_quantity").toString());
ui->introEdit->setText(query.value("goods_intro").toString());
// 【关键】下拉框回显
int w_id = query.value("w_id").toInt();
// findData 可以根据绑定的ID找到对应的索引
int index = ui->wareBox->findData(w_id);
if (index != -1) {
ui->wareBox->setCurrentIndex(index);
}
}
}
// 【修改】点击确定时的逻辑
void GoodsTable::accept()
{
// 1. 获取输入数据 (这些跟之前一样)
QString name = ui->nameEdit->text().trimmed();
QString spec = ui->specEdit->text();
QString unit = ui->unitEdit->text();
double price = ui->priceEdit->text().toDouble();
int stock = ui->stockQuantityEdit->text().toInt();
int warning = ui->warningQuantityEdit->text().toInt();
QString intro = ui->introEdit->toPlainText();
int w_id = ui->wareBox->currentData().toInt();
double totalValue = price * stock; // 重新计算总价
// 基础校验
if (name.isEmpty()) {
QMessageBox::warning(this, "提示", "货品名称不能为空!");
return;
}
if (ui->wareBox->currentIndex() == -1) {
QMessageBox::warning(this, "提示", "请选择一个仓库!");
return;
}
QSqlQuery query;
// 2. 判断是新增还是修改
if (m_goodsId == -1) {
// === 新增模式 (INSERT) ===
query.prepare(R"(
INSERT INTO goods (
goods_name, goods_spec, goods_unit, goods_price,
total_value, goods_intro, stock_quantity, warning_quantity, w_id
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
)");
// 绑定9个参数
query.addBindValue(name);
query.addBindValue(spec);
query.addBindValue(unit);
query.addBindValue(price);
query.addBindValue(totalValue);
query.addBindValue(intro);
query.addBindValue(stock);
query.addBindValue(warning);
query.addBindValue(w_id);
} else {
// === 修改模式 (UPDATE) ===
query.prepare(R"(
UPDATE goods SET
goods_name=?, goods_spec=?, goods_unit=?, goods_price=?,
total_value=?, goods_intro=?, stock_quantity=?, warning_quantity=?, w_id=?
WHERE goods_id=?
)");
// 绑定10个参数 (最后多一个 ID)
query.addBindValue(name);
query.addBindValue(spec);
query.addBindValue(unit);
query.addBindValue(price);
query.addBindValue(totalValue);
query.addBindValue(intro);
query.addBindValue(stock);
query.addBindValue(warning);
query.addBindValue(w_id);
query.addBindValue(m_goodsId); // WHERE 条件
}
// 3. 执行
if (query.exec()) {
QDialog::accept(); // 关闭并返回成功
} else {
QMessageBox::critical(this, "错误", "操作失败: " + query.lastError().text());
}
}