//供应商接口 const express = require('express'); const {getDB} = require('../database'); const {auth, adminAuth} = require('../middleware/auth'); const router = express.Router(); const {SelectBuilder, InsertBuilder, UpdateBuilder} = require('../config/dbv2') const bcrypt = require('bcryptjs'); /* * username 账号 * password 密码 * avatar 头像 * real_name 姓名 * id_card 身份证号 * wechat_qr 微信二维码 * alipay_qr 支付宝收款码 * bank_card 银行卡号 * unionpay_qr 云闪付收款码 * phone 手机号 * * */ router.post('/add', auth, adminAuth, async (req, res) => { const db = getDB(); try { const { username, password, avatar, real_name, id_card, wechat_qr, alipay_qr, bank_card, unionpay_qr, phone } = req.body; console.log('12333333') // 验证手机号格式 const phoneRegex = /^1[3-9]\d{9}$/; if (!phoneRegex.test(phone)) { return res.status(400).json({success: false, message: '手机号格式不正确'}); } let userCountQuery = new SelectBuilder() .from('users') .select('COUNT(*) as total') .where(`(username=? or phone=?)`, username, phone) .where('is_delete=?', false) let [user] = await userCountQuery.execute(db); if (user.total > 0) { res.status(400).send({ success: false, message: '手机号或者用户名重复' }) } const hashedPassword = await bcrypt.hash(password, 10); let insetObj = { username, password: hashedPassword, real_name, id_card, wechat_qr, alipay_qr, bank_card, unionpay_qr, avatar, phone, user_type: 'supplier', audit_status: 'approved' } console.log(insetObj, '111') await db.query('START TRANSACTION'); let sqlResult = new InsertBuilder() .into('users') .values(insetObj) let result = await sqlResult.execute(db); console.log(result) await db.query('COMMIT'); if (result.affectedRows > 0) { res.json({success: true, message: '创建成功'}) } else { res.json({success: false, message: '系统错误请联系管理员'}) await db.query('ROLLBACK'); } } catch (err) { console.log(err) await db.query('ROLLBACK'); } }) /* * 修改供应商 * username 账号 * password 密码 * avatar 头像 * real_name 姓名 * id_card 身份证号 * wechat_qr 微信二维码 * alipay_qr 支付宝收款码 * bank_card 银行卡号 * unionpay_qr 云闪付收款码 * phone 手机号 * id 供应商id * audit_status 审核状态 'pending','approved','rejected' * */ router.put('/edit', auth, adminAuth, async (req, res) => { const db = getDB(); try { const { username, password, id, avatar, real_name, id_card, wechat_qr, bank_card, unionpay_qr, phone, audit_status } = req.body; if (!id) { return res.status(400).send({ success: false, message: '供应商id未填写' }) } let userCountQuery = new SelectBuilder() .from('users') .select('COUNT(*) as total') .where(`(username=? or phone=?)`, username, phone) .where('id!=?', id) .where('is_delete=?', false) let userInfo = await userCountQuery.execute(db); if (userInfo.total > 0) { res.status(400).send({ success: false, message: '手机号或用户名重复请重新填写' }) } // 动态组装更新对象 let upUser = new UpdateBuilder() .update('users') .where('id=?', id) const fields = [ 'username', 'avatar', 'real_name', 'id_card', 'wechat_qr', 'bank_card', 'unionpay_qr', 'phone', 'audit_status' ]; // 遍历允许的字段,存在才 set for (const field of fields) { if (req.body[field]) { upUser.set(field, req.body[field]); } } // 密码单独处理(异步 hash) if (password) { upUser.set('password', await bcrypt.hash(password, 10)); } await upUser.execute(db); res.json({success: true, message: '更新成功'}); } catch (e) { console.log(e) res.status(500).send({ success: false, message: '系统错误请联系管理员' }) } }) /* * 供应商详情 * id 供应商id * */ router.get('/details', async (req, res) => { const {id} = req.query; const db = getDB(); try { if (!id) { return res.status(400).send({ success: false, message: '供应商id不能为空' }) } let [user] = await new SelectBuilder() .from('users') .where('id=?', id) .where('user_type=?', 'supplier') .where('is_delete=?', false) .execute(db) if (user) { delete user.password } else { return res.status(400).json({success: false, message: '无此用户'}) } res.json({data: user, success: true, message: '查询成功'}) } catch (err) { return res.status(500).json({success: false, message: '系统错误,请联系管理员'}) } }) /* * 供应商列表 * page 1 页数 * limit 20 每页数量 * name 手机号,账号 * */ router.get('/list', async (req, res) => { const db = getDB(); try { let {page = 1, limit = 20, name} = req.query; console.log(page, limit, name); let userCountQuery = new SelectBuilder() .from('users') .where('user_type=?', 'supplier') .where('is_delete=?', false) if (name) { userCountQuery.where('(username LIKE ? or phone LIKE ?)', `%${name}%`, `%${name}%`) } const data = await userCountQuery.paginateWithCount(db, page, limit); return res.json(data) } catch (err) { console.log(err) return res.status(500).json({success: false, message: err}) } }) /* * 删除供应商 * id * */ router.delete('/delete', auth, adminAuth, async (req, res) => { const db = getDB(); try { const {id} = req.query; await new UpdateBuilder() .update('users') .set('is_delete', true) .where('id=?', id) .execute(db) res.json({success: true, message: '删除成功'}) } catch (err) { res.status(500).send({error: err}) } }) module.exports = router;