You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
334 lines
10 KiB
334 lines
10 KiB
var express = require('express');
|
|
var router = express.Router();
|
|
var doSQL = require('../mysql/index').doSQL;
|
|
const fs = require("fs");
|
|
var path = require("path");
|
|
|
|
router.get('/', function(request, response, next) {
|
|
let page = request.query.page;
|
|
let limit = request.query.limit;
|
|
let formName = request.query.formName;
|
|
let sql = `
|
|
select id,form_name formName,original_type originalType,form_desc formDesc,form_path formPath,DATE_FORMAT(workflow_form.create_time,'%Y-%m-%d') createTime,create_user createUser,sys_user.nick_name createUserName
|
|
from workflow_form
|
|
left join sys_user on workflow_form.create_user = sys_user.user_id
|
|
`;
|
|
const params = [];
|
|
if (formName) {
|
|
sql += ` where form_name like ?`;
|
|
params.push(`%${formName}%`);
|
|
}
|
|
if (page) {
|
|
sql += ` limit ?, ?`;
|
|
params.push(+(page - 1) * limit, +limit);
|
|
}
|
|
getCount(sql, params).then(count => {
|
|
doSQL(sql, params).then(res => {
|
|
if(!res.error){
|
|
response.send(JSON.stringify({
|
|
code: 200,
|
|
data: {
|
|
list: res.data,
|
|
count: count
|
|
}
|
|
}));
|
|
|
|
}else{
|
|
response.send(JSON.stringify({
|
|
code: 600,
|
|
message: res.error
|
|
}));
|
|
}
|
|
})
|
|
})
|
|
|
|
});
|
|
|
|
// router.get('/fields', function(request, response, next) {
|
|
// let formPath = request.query.path;
|
|
// //读取文件
|
|
// try {
|
|
// let form = require(path.join(__dirname, '../' + formPath));
|
|
// response.send(JSON.stringify({
|
|
// code: 200,
|
|
// data: form.formFields
|
|
// }));
|
|
// } catch (error) {
|
|
// response.send(JSON.stringify({
|
|
// code: 500,
|
|
// msg: `未找到文件${formPath}`
|
|
// }));
|
|
// }
|
|
// // fs.readFile( path.join(__dirname, '../' + formPath), 'utf-8', function(err, data) {
|
|
// // if (err) {
|
|
// // response.send(JSON.stringify({
|
|
// // code: 500,
|
|
// // msg: `未找到文件${formPath}`
|
|
// // }));
|
|
// // } else {
|
|
// // let json = JSON.stringify(eval(data));
|
|
// // response.send(JSON.stringify({
|
|
// // code: 200,
|
|
// // data: json
|
|
// // }));
|
|
// // }
|
|
// // });
|
|
|
|
// });
|
|
|
|
router.get('/:id', function(request, response, next) {
|
|
let id = request.params.id;
|
|
let sql = `
|
|
select id,form_name formName,original_type originalType,form_desc formDesc,form_path formPath,DATE_FORMAT(workflow_form.create_time,'%Y-%m-%d') createTime,create_user createUser,sys_user.nick_name createUserName
|
|
from workflow_form
|
|
left join sys_user on workflow_form.create_user = sys_user.user_id
|
|
where id = ?
|
|
`;
|
|
const params = [id];
|
|
doSQL(sql, params).then(res=>{
|
|
if(!res.error){
|
|
let data = res.data[0] || {};
|
|
let formPath = data.formPath;
|
|
//读取文件
|
|
const fullPath = path.join(__dirname, '../' + formPath);
|
|
fs.readFile(fullPath, 'utf8',function(err,res){
|
|
if (err) {
|
|
data.content = [];
|
|
} else {
|
|
data.content = JSON.parse(res);
|
|
}
|
|
response.send(JSON.stringify({
|
|
code: 200,
|
|
data
|
|
}));
|
|
});
|
|
}else{
|
|
response.send(JSON.stringify({
|
|
code: 600,
|
|
message: res.error
|
|
}));
|
|
}
|
|
})
|
|
});
|
|
|
|
|
|
function addForm(fileName, content){
|
|
return new Promise((resolve, reject) => {
|
|
//检测文件是否存在
|
|
let isExist = fs.existsSync(path.join(__dirname, '../form', fileName + '.js'));
|
|
if(isExist){
|
|
reject('文件已存在');
|
|
}else{
|
|
fileName = fileName.indexOf('.js') > -1 ? fileName : fileName + '.js';
|
|
const filePath = path.join(__dirname, '../form', fileName );
|
|
|
|
fs.writeFile(filePath, content, 'utf8', (err) => {
|
|
if (err) {
|
|
reject(err);
|
|
}else{
|
|
resolve();
|
|
}
|
|
});
|
|
}
|
|
});
|
|
}
|
|
|
|
|
|
router.post('/', async function(request, response, next) {
|
|
let { formName, formDesc, userId,formPath = '',fileName,content,type = 1 } = request.body;
|
|
fileName = fileName || formName;
|
|
let errMsg = '';
|
|
if(!userId){
|
|
errMsg = '创建人不能为空'
|
|
}else if(!formName){
|
|
errMsg = '表单名称不能为空'
|
|
}else if(!formPath && ( !fileName || !content)){
|
|
errMsg = '文件名和表单内容不能为空'
|
|
}
|
|
if(errMsg){
|
|
response.send(JSON.stringify({
|
|
code: 600,
|
|
message: errMsg
|
|
}));
|
|
return;
|
|
}
|
|
|
|
if( !formPath ){
|
|
type = 2;
|
|
try {
|
|
await addForm(fileName, content)
|
|
formPath = `/form/${fileName}.js`;
|
|
} catch (err) {
|
|
response.send(JSON.stringify({
|
|
code: 600,
|
|
message: err
|
|
}));
|
|
return;
|
|
}
|
|
}
|
|
let sql = `
|
|
insert into workflow_form (form_name, form_desc, form_path, create_time, create_user, original_type)
|
|
values (?, ?, ?, now(), ?, ?)
|
|
`;
|
|
const params = [formName, formDesc, formPath, userId,type];
|
|
|
|
doSQL(sql, params).then(res=>{
|
|
if(!res.error){
|
|
response.send(JSON.stringify({
|
|
code: 200,
|
|
message: '新增成功'
|
|
}));
|
|
}else{
|
|
response.send(JSON.stringify({
|
|
code: 600,
|
|
message: res.error
|
|
}));
|
|
}
|
|
})
|
|
});
|
|
|
|
router.delete('/:id', function(request, response, next) {
|
|
let id = request.params.id;
|
|
let sql = `delete from workflow_form where id in (?)`;
|
|
const params = [id];
|
|
doSQL(sql, params).then(res=>{
|
|
if(!res.error){
|
|
response.send(JSON.stringify({
|
|
code: 200,
|
|
message: '删除成功'
|
|
}));
|
|
}else{
|
|
response.send(JSON.stringify({
|
|
code: 600,
|
|
message: res.error
|
|
}));
|
|
}
|
|
})
|
|
});
|
|
|
|
// router.put('/', function(request, response, next) {
|
|
// let { id, formName, formDesc, formPath, userId,content } = request.body;
|
|
// let sql = `
|
|
// update workflow_form
|
|
// set form_name = ?, form_desc = ?, form_path = ?
|
|
// where id = ?
|
|
// `;
|
|
// const params = [formName, formDesc, formPath, id];
|
|
// doSQL(sql, params).then(res => {
|
|
// if(!res.error) {
|
|
// response.send(JSON.stringify({
|
|
// code: 200,
|
|
// message: '修改成功'
|
|
// }));
|
|
// } else {
|
|
// response.send(JSON.stringify({
|
|
// code: 600,
|
|
// message: res.error
|
|
// }));
|
|
// }
|
|
// })
|
|
// });
|
|
router.put('/', async function(request, response, next) {
|
|
let { id, formName, formDesc, userId, content ,formPath} = request.body;
|
|
let errMsg = '';
|
|
if (!id) {
|
|
errMsg = 'ID 不能为空';
|
|
} else if (!userId) {
|
|
errMsg = '修改人不能为空';
|
|
} else if (!formName) {
|
|
errMsg = '表单名称不能为空';
|
|
}
|
|
if (errMsg) {
|
|
return response.status(400).send({
|
|
code: 400,
|
|
message: errMsg
|
|
});
|
|
}
|
|
|
|
try {
|
|
// 根据 id 查询原数据
|
|
const originalData = await doSQL('SELECT * FROM workflow_form WHERE id = ?', [id]);
|
|
if (originalData.data.length === 0) {
|
|
return response.status(404).send({
|
|
code: 404,
|
|
message: '未找到对应的表单'
|
|
});
|
|
}
|
|
const originalFormPath = originalData.data[0].form_path;
|
|
let newFormPath;
|
|
if( content && content.length > 0){
|
|
newFormPath = `/form/${formName}.js`;
|
|
if (originalFormPath !== newFormPath) {
|
|
// 检查新文件是否存在
|
|
const newFilePath = path.join(__dirname, '../', newFormPath);
|
|
if (fs.existsSync(newFilePath)) {
|
|
return response.status(400).send({
|
|
code: 400,
|
|
message: '表单名已存在'
|
|
});
|
|
}
|
|
}
|
|
// 删除原文件
|
|
if (originalFormPath) {
|
|
const filePath = path.join(__dirname, '../', originalFormPath);
|
|
fs.unlinkSync(filePath);
|
|
}
|
|
try {
|
|
await addForm(formName, content)
|
|
} catch (err) {
|
|
response.send(JSON.stringify({
|
|
code: 600,
|
|
message: err
|
|
}));
|
|
return;
|
|
}
|
|
}else{
|
|
newFormPath = formPath || originalFormPath;
|
|
}
|
|
// 更新数据库中的记录
|
|
const sql = `
|
|
update workflow_form
|
|
set form_name = ?, form_desc = ?, form_path = ?, create_time = ?, create_user = ?
|
|
where id = ?
|
|
`;
|
|
const params = [formName, formDesc, newFormPath, new Date(), userId, id];
|
|
const res = await doSQL(sql, params);
|
|
|
|
if (!res.error) {
|
|
response.send({
|
|
code: 200,
|
|
message: '修改成功'
|
|
});
|
|
} else {
|
|
response.send({
|
|
code: 600,
|
|
message: res.error
|
|
});
|
|
}
|
|
} catch (error) {
|
|
console.error('Failed to update form:', error);
|
|
response.status(500).send({
|
|
code: 500,
|
|
message: 'Failed to update form'
|
|
});
|
|
}
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function getCount(sql, params) {
|
|
let countSql = `select count(1) count from (${sql.split('limit')[0]}) a`;
|
|
return new Promise((resolve, reject) => {
|
|
doSQL(countSql, params).then(res => {
|
|
resolve(res.data[0].count);
|
|
}).catch(err => {
|
|
reject(err);
|
|
});
|
|
});
|
|
}
|
|
|
|
module.exports = router;
|
|
|