备份:大改造前的完整版本 - 修复合同细节/付款节点/文件上传/施工管理/项目保存等BUG
This commit is contained in:
+228
-220
@@ -1,10 +1,10 @@
|
||||
const express = require('express');
|
||||
const db = require('../db');
|
||||
const { authenticate, requireAdmin } = require('../middleware/auth');
|
||||
const LedgerService = require('../services/ledgerService');
|
||||
|
||||
const router = express.Router();
|
||||
|
||||
const express = require('express');
|
||||
const db = require('../db');
|
||||
const { authenticate, requireAdmin } = require('../middleware/auth');
|
||||
const LedgerService = require('../services/ledgerService');
|
||||
|
||||
const router = express.Router();
|
||||
|
||||
router.get('/', async (req, res) => {
|
||||
try {
|
||||
const result = await db.query(`
|
||||
@@ -26,7 +26,7 @@ router.get('/', async (req, res) => {
|
||||
name: contact.name || '未命名',
|
||||
position: contact.position || '',
|
||||
phone: contact.phone || '',
|
||||
is_primary: contact.is_primary === 1
|
||||
is_primary: contact.is_primary === true
|
||||
}));
|
||||
|
||||
// 获取收款信息
|
||||
@@ -41,11 +41,15 @@ router.get('/', async (req, res) => {
|
||||
bank_account: payment.bank_account,
|
||||
bank_name: payment.bank_name,
|
||||
qr_code: payment.qr_code,
|
||||
is_primary: payment.is_primary === 1
|
||||
is_primary: payment.is_primary === true
|
||||
}));
|
||||
|
||||
return {
|
||||
...subcontractor,
|
||||
scope: subcontractor.specialty,
|
||||
features: subcontractor.category,
|
||||
country: subcontractor.country,
|
||||
remark: subcontractor.remark || '',
|
||||
contacts: contacts.length > 0 ? contacts : [],
|
||||
payment_infos: paymentInfos.length > 0 ? paymentInfos : []
|
||||
};
|
||||
@@ -62,11 +66,11 @@ router.get('/', async (req, res) => {
|
||||
res.status(500).json({
|
||||
success: false,
|
||||
message: '获取分包商失败',
|
||||
error: error.message
|
||||
error: process.env.NODE_ENV === 'development' ? error.message : '操作失败'
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
router.get('/:id', async (req, res) => {
|
||||
try {
|
||||
const { id } = req.params;
|
||||
@@ -74,7 +78,7 @@ router.get('/:id', async (req, res) => {
|
||||
// 获取分包商基本信息
|
||||
const subcontractorResult = await db.query(`
|
||||
SELECT * FROM subcontractors
|
||||
WHERE id = ?
|
||||
WHERE id = $1
|
||||
`, [id]);
|
||||
|
||||
if (subcontractorResult.rows.length > 0) {
|
||||
@@ -83,7 +87,7 @@ router.get('/:id', async (req, res) => {
|
||||
// 获取分包商的所有联系人
|
||||
const contactsResult = await db.query(`
|
||||
SELECT * FROM contacts
|
||||
WHERE entity_id = ? AND entity_type = 'subcontractor'
|
||||
WHERE entity_id = $1 AND entity_type = 'subcontractor'
|
||||
ORDER BY is_primary DESC
|
||||
`, [id]);
|
||||
|
||||
@@ -92,13 +96,13 @@ router.get('/:id', async (req, res) => {
|
||||
name: contact.name || '未命名',
|
||||
position: contact.position || '',
|
||||
phone: contact.phone || '',
|
||||
is_primary: contact.is_primary === 1
|
||||
is_primary: contact.is_primary === true
|
||||
}));
|
||||
|
||||
// 获取分包商的所有收款信息
|
||||
const paymentInfosResult = await db.query(`
|
||||
SELECT * FROM subcontractor_payment_infos
|
||||
WHERE subcontractor_id = ?
|
||||
WHERE subcontractor_id = $1
|
||||
ORDER BY is_primary DESC
|
||||
`, [id]);
|
||||
|
||||
@@ -109,7 +113,7 @@ router.get('/:id', async (req, res) => {
|
||||
bank_account: payment.bank_account,
|
||||
bank_name: payment.bank_name,
|
||||
qr_code: payment.qr_code,
|
||||
is_primary: payment.is_primary === 1
|
||||
is_primary: payment.is_primary === true
|
||||
}));
|
||||
|
||||
// 获取业务台账
|
||||
@@ -120,8 +124,8 @@ router.get('/:id', async (req, res) => {
|
||||
id: subcontractor.id,
|
||||
code: `SC${String(subcontractor.id).padStart(4, '0')}`,
|
||||
name: subcontractor.name,
|
||||
scope: subcontractor.scope || '',
|
||||
features: subcontractor.features || '',
|
||||
scope: subcontractor.specialty || '',
|
||||
features: subcontractor.category || '',
|
||||
country: subcontractor.country || '',
|
||||
contacts: contacts.length > 0 ? contacts : [],
|
||||
payment_infos: paymentInfos.length > 0 ? paymentInfos : [],
|
||||
@@ -148,27 +152,27 @@ router.get('/:id', async (req, res) => {
|
||||
res.status(500).json({
|
||||
success: false,
|
||||
message: '获取分包商详情失败',
|
||||
error: error.message
|
||||
error: process.env.NODE_ENV === 'development' ? error.message : '操作失败'
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
router.post('/', async (req, res) => {
|
||||
try {
|
||||
const { name, scope, features, country, remark, contacts, payment_infos } = req.body;
|
||||
|
||||
// 从contacts中获取主联系人信息
|
||||
const primaryContact = contacts?.find(c => c.is_primary) || contacts?.[0];
|
||||
const contact = primaryContact?.name || '';
|
||||
const position = primaryContact?.position || '';
|
||||
const contact_person = primaryContact?.name || '';
|
||||
const phone = primaryContact?.phone || '';
|
||||
const email = ''; // 前端没有email字段
|
||||
const address = ''; // 前端没有address字段
|
||||
|
||||
const result = await db.query(
|
||||
`INSERT INTO subcontractors (name, address, contact, position, phone, email, scope, features, country, remark, created_at, updated_at)
|
||||
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP)`,
|
||||
[name, address, contact, position, phone, email, scope, features, country, remark]
|
||||
`INSERT INTO subcontractors (name, address, contact_person, phone, email, specialty, category, country, remark, created_at, updated_at)
|
||||
VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP)
|
||||
RETURNING id`,
|
||||
[name, address, contact_person, phone, email, scope, features, country || '', remark || '']
|
||||
);
|
||||
|
||||
const subcontractorId = (result.rows[0]?.id || result.rows?.[0]?.id);
|
||||
@@ -178,8 +182,9 @@ router.post('/', async (req, res) => {
|
||||
for (const contactItem of contacts) {
|
||||
await db.query(
|
||||
`INSERT INTO contacts (entity_id, entity_type, name, position, phone, is_primary, created_at, updated_at)
|
||||
VALUES (?, ?, ?, ?, ?, ?, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP)`,
|
||||
[subcontractorId, 'subcontractor', contactItem.name, contactItem.position, contactItem.phone, contactItem.is_primary ? 1 : 0]
|
||||
VALUES ($1, $2, $3, $4, $5, $6, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP)
|
||||
RETURNING id`,
|
||||
[subcontractorId, 'subcontractor', contactItem.name, contactItem.position, contactItem.phone, contactItem.is_primary ? true : false]
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -189,8 +194,9 @@ router.post('/', async (req, res) => {
|
||||
for (const paymentItem of payment_infos) {
|
||||
await db.query(
|
||||
`INSERT INTO subcontractor_payment_infos (subcontractor_id, account_name, bank_name, bank_account, qr_code, is_primary, created_at, updated_at)
|
||||
VALUES (?, ?, ?, ?, ?, ?, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP)`,
|
||||
[subcontractorId, paymentItem.account_name, paymentItem.bank_name, paymentItem.bank_account, paymentItem.qr_code, paymentItem.is_primary ? 1 : 0]
|
||||
VALUES ($1, $2, $3, $4, $5, $6, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP)
|
||||
RETURNING id`,
|
||||
[subcontractorId, paymentItem.account_name, paymentItem.bank_name, paymentItem.bank_account, paymentItem.qr_code, paymentItem.is_primary ? true : false]
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -219,11 +225,11 @@ router.post('/', async (req, res) => {
|
||||
res.status(500).json({
|
||||
success: false,
|
||||
message: '创建分包商失败',
|
||||
error: error.message
|
||||
error: process.env.NODE_ENV === 'development' ? error.message : '操作失败'
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
router.put('/:id', async (req, res) => {
|
||||
try {
|
||||
const { id } = req.params;
|
||||
@@ -231,17 +237,16 @@ router.put('/:id', async (req, res) => {
|
||||
|
||||
// 从contacts中获取主联系人信息
|
||||
const primaryContact = contacts?.find(c => c.is_primary) || contacts?.[0];
|
||||
const contact = primaryContact?.name || '';
|
||||
const position = primaryContact?.position || '';
|
||||
const contact_person = primaryContact?.name || '';
|
||||
const phone = primaryContact?.phone || '';
|
||||
const email = ''; // 前端没有email字段
|
||||
const address = ''; // 前端没有address字段
|
||||
|
||||
await db.query(
|
||||
`UPDATE subcontractors
|
||||
SET name = ?, address = ?, contact = ?, position = ?, phone = ?, email = ?, scope = ?, features = ?, country = ?, remark = ?, updated_at = CURRENT_TIMESTAMP
|
||||
WHERE id = ?`,
|
||||
[name, address, contact, position, phone, email, scope, features, country, remark, id]
|
||||
SET name = $1, address = $2, contact_person = $3, phone = $4, email = $5, specialty = $6, category = $7, country = $8, remark = $9, updated_at = CURRENT_TIMESTAMP
|
||||
WHERE id = $10`,
|
||||
[name, address, contact_person, phone, email, scope, features, country || '', remark || '', id]
|
||||
);
|
||||
|
||||
// 删除旧的联系人数据
|
||||
@@ -252,8 +257,9 @@ router.put('/:id', async (req, res) => {
|
||||
for (const contactItem of contacts) {
|
||||
await db.query(
|
||||
`INSERT INTO contacts (entity_id, entity_type, name, position, phone, is_primary, created_at, updated_at)
|
||||
VALUES (?, ?, ?, ?, ?, ?, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP)`,
|
||||
[id, 'subcontractor', contactItem.name, contactItem.position, contactItem.phone, contactItem.is_primary ? 1 : 0]
|
||||
VALUES ($1, $2, $3, $4, $5, $6, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP)
|
||||
RETURNING id`,
|
||||
[id, 'subcontractor', contactItem.name, contactItem.position, contactItem.phone, contactItem.is_primary ? true : false]
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -266,8 +272,9 @@ router.put('/:id', async (req, res) => {
|
||||
for (const paymentItem of payment_infos) {
|
||||
await db.query(
|
||||
`INSERT INTO subcontractor_payment_infos (subcontractor_id, account_name, bank_name, bank_account, qr_code, is_primary, created_at, updated_at)
|
||||
VALUES (?, ?, ?, ?, ?, ?, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP)`,
|
||||
[id, paymentItem.account_name, paymentItem.bank_name, paymentItem.bank_account, paymentItem.qr_code, paymentItem.is_primary ? 1 : 0]
|
||||
VALUES ($1, $2, $3, $4, $5, $6, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP)
|
||||
RETURNING id`,
|
||||
[id, paymentItem.account_name, paymentItem.bank_name, paymentItem.bank_account, paymentItem.qr_code, paymentItem.is_primary ? true : false]
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -296,11 +303,11 @@ router.put('/:id', async (req, res) => {
|
||||
res.status(500).json({
|
||||
success: false,
|
||||
message: '更新分包商失败',
|
||||
error: error.message
|
||||
error: process.env.NODE_ENV === 'development' ? error.message : '操作失败'
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
router.delete('/:id', async (req, res) => {
|
||||
try {
|
||||
const { id } = req.params;
|
||||
@@ -311,7 +318,7 @@ router.delete('/:id', async (req, res) => {
|
||||
// 再删除分包商数据
|
||||
const result = await db.query(`DELETE FROM subcontractors WHERE id = $1`, [id]);
|
||||
|
||||
if (result.changes > 0) {
|
||||
if (result.rowCount > 0) {
|
||||
res.json({
|
||||
success: true,
|
||||
message: '分包商删除成功'
|
||||
@@ -327,183 +334,184 @@ router.delete('/:id', async (req, res) => {
|
||||
res.status(500).json({
|
||||
success: false,
|
||||
message: '删除分包商失败',
|
||||
error: error.message
|
||||
error: process.env.NODE_ENV === 'development' ? error.message : '操作失败'
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
// ==================== 分包商收款信息管理接口 ====================
|
||||
|
||||
// 获取分包商的所有收款信息
|
||||
router.get('/:id/payment-infos', async (req, res) => {
|
||||
try {
|
||||
const { id } = req.params;
|
||||
|
||||
const result = await db.query(`
|
||||
SELECT * FROM subcontractor_payment_infos
|
||||
WHERE subcontractor_id = ?
|
||||
ORDER BY is_primary DESC, created_at DESC
|
||||
`, [id]);
|
||||
|
||||
const paymentInfos = result.rows.map(payment => ({
|
||||
id: payment.id,
|
||||
account_name: payment.account_name,
|
||||
bank_account: payment.bank_account,
|
||||
bank_name: payment.bank_name,
|
||||
qr_code: payment.qr_code,
|
||||
is_primary: payment.is_primary === 1,
|
||||
created_at: payment.created_at,
|
||||
updated_at: payment.updated_at
|
||||
}));
|
||||
|
||||
res.json({
|
||||
success: true,
|
||||
data: paymentInfos,
|
||||
count: paymentInfos.length
|
||||
});
|
||||
} catch (error) {
|
||||
console.error('获取分包商收款信息失败:', error);
|
||||
res.status(500).json({
|
||||
success: false,
|
||||
message: '获取分包商收款信息失败',
|
||||
error: error.message
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
// 添加分包商收款信息
|
||||
router.post('/:id/payment-infos', async (req, res) => {
|
||||
try {
|
||||
const { id } = req.params;
|
||||
const { account_name, bank_account, bank_name, qr_code, is_primary } = req.body;
|
||||
|
||||
// 如果设置为默认账户,先取消其他账户的默认状态
|
||||
if (is_primary) {
|
||||
await db.query(
|
||||
'UPDATE subcontractor_payment_infos SET is_primary = 0 WHERE subcontractor_id = $1',
|
||||
[id]
|
||||
);
|
||||
}
|
||||
|
||||
const result = await db.query(
|
||||
`INSERT INTO subcontractor_payment_infos (subcontractor_id, account_name, bank_account, bank_name, qr_code, is_primary, created_at, updated_at)
|
||||
VALUES (?, ?, ?, ?, ?, ?, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP)`,
|
||||
[id, account_name, bank_account, bank_name, qr_code, is_primary ? 1 : 0]
|
||||
);
|
||||
|
||||
const paymentInfoId = (result.rows[0]?.id || result.rows?.[0]?.id);
|
||||
|
||||
res.json({
|
||||
success: true,
|
||||
message: '收款信息添加成功',
|
||||
data: {
|
||||
id: paymentInfoId,
|
||||
subcontractor_id: id,
|
||||
account_name,
|
||||
bank_account,
|
||||
bank_name,
|
||||
qr_code,
|
||||
is_primary: !!is_primary,
|
||||
created_at: new Date().toISOString(),
|
||||
updated_at: new Date().toISOString()
|
||||
}
|
||||
});
|
||||
} catch (error) {
|
||||
console.error('添加分包商收款信息失败:', error);
|
||||
res.status(500).json({
|
||||
success: false,
|
||||
message: '添加分包商收款信息失败',
|
||||
error: error.message
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
// 更新分包商收款信息
|
||||
router.put('/payment-infos/:infoId', async (req, res) => {
|
||||
try {
|
||||
const { infoId } = req.params;
|
||||
const { account_name, bank_account, bank_name, qr_code, is_primary } = req.body;
|
||||
|
||||
// 先获取当前收款信息以获取分包商ID
|
||||
const currentInfoResult = await db.query(
|
||||
'SELECT subcontractor_id FROM subcontractor_payment_infos WHERE id = $1',
|
||||
[infoId]
|
||||
);
|
||||
|
||||
if (currentInfoResult.rows.length === 0) {
|
||||
return res.status(404).json({
|
||||
success: false,
|
||||
message: '收款信息不存在'
|
||||
});
|
||||
}
|
||||
|
||||
const subcontractorId = currentInfoResult.rows[0].subcontractor_id;
|
||||
|
||||
// 如果设置为默认账户,先取消其他账户的默认状态
|
||||
if (is_primary) {
|
||||
await db.query(
|
||||
'UPDATE subcontractor_payment_infos SET is_primary = 0 WHERE subcontractor_id = $1 AND id != $2',
|
||||
[subcontractorId, infoId]
|
||||
);
|
||||
}
|
||||
|
||||
await db.query(
|
||||
`UPDATE subcontractor_payment_infos
|
||||
SET account_name = ?, bank_account = ?, bank_name = ?, qr_code = ?, is_primary = ?, updated_at = CURRENT_TIMESTAMP
|
||||
WHERE id = ?`,
|
||||
[account_name, bank_account, bank_name, qr_code, is_primary ? 1 : 0, infoId]
|
||||
);
|
||||
|
||||
res.json({
|
||||
success: true,
|
||||
message: '收款信息更新成功',
|
||||
data: {
|
||||
id: infoId,
|
||||
subcontractor_id: subcontractorId,
|
||||
account_name,
|
||||
bank_account,
|
||||
bank_name,
|
||||
qr_code,
|
||||
is_primary: !!is_primary,
|
||||
updated_at: new Date().toISOString()
|
||||
}
|
||||
});
|
||||
} catch (error) {
|
||||
console.error('更新分包商收款信息失败:', error);
|
||||
res.status(500).json({
|
||||
success: false,
|
||||
message: '更新分包商收款信息失败',
|
||||
error: error.message
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
// 删除分包商收款信息
|
||||
router.delete('/payment-infos/:infoId', async (req, res) => {
|
||||
try {
|
||||
const { infoId } = req.params;
|
||||
|
||||
const result = await db.query('DELETE FROM subcontractor_payment_infos WHERE id = $1', [infoId]);
|
||||
|
||||
if (result.changes > 0) {
|
||||
res.json({
|
||||
success: true,
|
||||
message: '收款信息删除成功'
|
||||
});
|
||||
} else {
|
||||
res.status(404).json({
|
||||
success: false,
|
||||
message: '收款信息不存在'
|
||||
});
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('删除分包商收款信息失败:', error);
|
||||
res.status(500).json({
|
||||
success: false,
|
||||
message: '删除分包商收款信息失败',
|
||||
error: error.message
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
// ==================== 分包商收款信息管理接口 ====================
|
||||
|
||||
// 获取分包商的所有收款信息
|
||||
router.get('/:id/payment-infos', async (req, res) => {
|
||||
try {
|
||||
const { id } = req.params;
|
||||
|
||||
const result = await db.query(`
|
||||
SELECT * FROM subcontractor_payment_infos
|
||||
WHERE subcontractor_id = $1
|
||||
ORDER BY is_primary DESC, created_at DESC
|
||||
`, [id]);
|
||||
|
||||
const paymentInfos = result.rows.map(payment => ({
|
||||
id: payment.id,
|
||||
account_name: payment.account_name,
|
||||
bank_account: payment.bank_account,
|
||||
bank_name: payment.bank_name,
|
||||
qr_code: payment.qr_code,
|
||||
is_primary: payment.is_primary === true,
|
||||
created_at: payment.created_at,
|
||||
updated_at: payment.updated_at
|
||||
}));
|
||||
|
||||
res.json({
|
||||
success: true,
|
||||
data: paymentInfos,
|
||||
count: paymentInfos.length
|
||||
});
|
||||
} catch (error) {
|
||||
console.error('获取分包商收款信息失败:', error);
|
||||
res.status(500).json({
|
||||
success: false,
|
||||
message: '获取分包商收款信息失败',
|
||||
error: process.env.NODE_ENV === 'development' ? error.message : '操作失败'
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
// 添加分包商收款信息
|
||||
router.post('/:id/payment-infos', async (req, res) => {
|
||||
try {
|
||||
const { id } = req.params;
|
||||
const { account_name, bank_account, bank_name, qr_code, is_primary } = req.body;
|
||||
|
||||
// 如果设置为默认账户,先取消其他账户的默认状态
|
||||
if (is_primary) {
|
||||
await db.query(
|
||||
'UPDATE subcontractor_payment_infos SET is_primary = 0 WHERE subcontractor_id = $1',
|
||||
[id]
|
||||
);
|
||||
}
|
||||
|
||||
const result = await db.query(
|
||||
`INSERT INTO subcontractor_payment_infos (subcontractor_id, account_name, bank_account, bank_name, qr_code, is_primary, created_at, updated_at)
|
||||
VALUES ($1, $2, $3, $4, $5, $6, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP)
|
||||
RETURNING id`,
|
||||
[id, account_name, bank_account, bank_name, qr_code, is_primary ? true : false]
|
||||
);
|
||||
|
||||
const paymentInfoId = (result.rows[0]?.id || result.rows?.[0]?.id);
|
||||
|
||||
res.json({
|
||||
success: true,
|
||||
message: '收款信息添加成功',
|
||||
data: {
|
||||
id: paymentInfoId,
|
||||
subcontractor_id: id,
|
||||
account_name,
|
||||
bank_account,
|
||||
bank_name,
|
||||
qr_code,
|
||||
is_primary: !!is_primary,
|
||||
created_at: new Date().toISOString(),
|
||||
updated_at: new Date().toISOString()
|
||||
}
|
||||
});
|
||||
} catch (error) {
|
||||
console.error('添加分包商收款信息失败:', error);
|
||||
res.status(500).json({
|
||||
success: false,
|
||||
message: '添加分包商收款信息失败',
|
||||
error: process.env.NODE_ENV === 'development' ? error.message : '操作失败'
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
// 更新分包商收款信息
|
||||
router.put('/payment-infos/:infoId', async (req, res) => {
|
||||
try {
|
||||
const { infoId } = req.params;
|
||||
const { account_name, bank_account, bank_name, qr_code, is_primary } = req.body;
|
||||
|
||||
// 先获取当前收款信息以获取分包商ID
|
||||
const currentInfoResult = await db.query(
|
||||
'SELECT subcontractor_id FROM subcontractor_payment_infos WHERE id = $1',
|
||||
[infoId]
|
||||
);
|
||||
|
||||
if (currentInfoResult.rows.length === 0) {
|
||||
return res.status(404).json({
|
||||
success: false,
|
||||
message: '收款信息不存在'
|
||||
});
|
||||
}
|
||||
|
||||
const subcontractorId = currentInfoResult.rows[0].subcontractor_id;
|
||||
|
||||
// 如果设置为默认账户,先取消其他账户的默认状态
|
||||
if (is_primary) {
|
||||
await db.query(
|
||||
'UPDATE subcontractor_payment_infos SET is_primary = 0 WHERE subcontractor_id = $1 AND id != $2',
|
||||
[subcontractorId, infoId]
|
||||
);
|
||||
}
|
||||
|
||||
await db.query(
|
||||
`UPDATE subcontractor_payment_infos
|
||||
SET account_name = $1, bank_account = $2, bank_name = $3, qr_code = $4, is_primary = $5, updated_at = CURRENT_TIMESTAMP
|
||||
WHERE id = $6`,
|
||||
[account_name, bank_account, bank_name, qr_code, is_primary ? true : false, infoId]
|
||||
);
|
||||
|
||||
res.json({
|
||||
success: true,
|
||||
message: '收款信息更新成功',
|
||||
data: {
|
||||
id: infoId,
|
||||
subcontractor_id: subcontractorId,
|
||||
account_name,
|
||||
bank_account,
|
||||
bank_name,
|
||||
qr_code,
|
||||
is_primary: !!is_primary,
|
||||
updated_at: new Date().toISOString()
|
||||
}
|
||||
});
|
||||
} catch (error) {
|
||||
console.error('更新分包商收款信息失败:', error);
|
||||
res.status(500).json({
|
||||
success: false,
|
||||
message: '更新分包商收款信息失败',
|
||||
error: process.env.NODE_ENV === 'development' ? error.message : '操作失败'
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
// 删除分包商收款信息
|
||||
router.delete('/payment-infos/:infoId', async (req, res) => {
|
||||
try {
|
||||
const { infoId } = req.params;
|
||||
|
||||
const result = await db.query('DELETE FROM subcontractor_payment_infos WHERE id = $1', [infoId]);
|
||||
|
||||
if (result.rowCount > 0) {
|
||||
res.json({
|
||||
success: true,
|
||||
message: '收款信息删除成功'
|
||||
});
|
||||
} else {
|
||||
res.status(404).json({
|
||||
success: false,
|
||||
message: '收款信息不存在'
|
||||
});
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('删除分包商收款信息失败:', error);
|
||||
res.status(500).json({
|
||||
success: false,
|
||||
message: '删除分包商收款信息失败',
|
||||
error: process.env.NODE_ENV === 'development' ? error.message : '操作失败'
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
module.exports = router;
|
||||
Reference in New Issue
Block a user