feat: integrate luckysheet inline and fullscreen
This commit is contained in:
@@ -0,0 +1,66 @@
|
||||
import { BorderInfoModel, BorderInfoModelType } from "../Sequelize/Models/BorderInfo";
|
||||
import { logger } from "../Utils/Logger";
|
||||
|
||||
/**
|
||||
* 查找是否存在边框
|
||||
* @param info
|
||||
* @returns
|
||||
*/
|
||||
async function hasConfigBorder(info: BorderInfoModelType) {
|
||||
try {
|
||||
return await BorderInfoModel.findOne({
|
||||
where: info,
|
||||
});
|
||||
} catch (error) {
|
||||
logger.error(error);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建新的边框记录
|
||||
* @param info
|
||||
* @returns
|
||||
*/
|
||||
async function createConfigBorder(info: BorderInfoModelType) {
|
||||
try {
|
||||
return await BorderInfoModel.create(info);
|
||||
} catch (error) {
|
||||
logger.error(error);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新边框记录
|
||||
* @param info
|
||||
* @returns
|
||||
*/
|
||||
async function updateConfigBorder(info: BorderInfoModelType) {
|
||||
try {
|
||||
return await BorderInfoModel.update(info, {
|
||||
where: { config_border_id: info.config_border_id },
|
||||
});
|
||||
} catch (error) {
|
||||
logger.error(error);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 初始化查询全部 borderInfo
|
||||
* @param worker_sheet_id
|
||||
* @returns
|
||||
*/
|
||||
async function findAllBorder(worker_sheet_id: string) {
|
||||
try {
|
||||
// 边框属性需要根据创建记录升序排序,先创建的在第一条,返回时,才不会覆盖后面的记录
|
||||
return await BorderInfoModel.findAll({ where: { worker_sheet_id }, order: [["createdAt", "ASC"]] });
|
||||
} catch (error) {
|
||||
logger.error(error);
|
||||
}
|
||||
}
|
||||
|
||||
export const BorderInfoService = {
|
||||
findAllBorder,
|
||||
hasConfigBorder,
|
||||
createConfigBorder,
|
||||
updateConfigBorder,
|
||||
};
|
||||
@@ -0,0 +1,66 @@
|
||||
import { CalcChainModel, CalcChainModelType } from "../Sequelize/Models/CalcChain";
|
||||
import { logger } from "../Utils/Logger";
|
||||
|
||||
/**
|
||||
* 查找是否已经存在记录
|
||||
*/
|
||||
async function findOne(worker_sheet_id: string, r: number, c: number) {
|
||||
try {
|
||||
return await CalcChainModel.findOne({
|
||||
where: { worker_sheet_id, r, c },
|
||||
});
|
||||
} catch (error) {
|
||||
logger.error(error);
|
||||
}
|
||||
}
|
||||
|
||||
// 更新
|
||||
async function update(calcchain_id: string, func: string) {
|
||||
try {
|
||||
return await CalcChainModel.update(
|
||||
{ func },
|
||||
{
|
||||
where: { calcchain_id },
|
||||
}
|
||||
);
|
||||
} catch (error) {
|
||||
logger.error(error);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
// ** 创建
|
||||
async function create(info: CalcChainModelType) {
|
||||
try {
|
||||
return await CalcChainModel.create(info);
|
||||
} catch (error) {
|
||||
logger.error(error);
|
||||
}
|
||||
}
|
||||
|
||||
// 删除
|
||||
async function deleteCalcChain(worker_sheet_id: string, r: number, c: number) {
|
||||
try {
|
||||
return await CalcChainModel.destroy({
|
||||
where: { worker_sheet_id, r, c },
|
||||
});
|
||||
} catch (error) {
|
||||
logger.error(error);
|
||||
}
|
||||
}
|
||||
|
||||
// 查询全部
|
||||
async function findAll(worker_sheet_id: string) {
|
||||
try {
|
||||
return await CalcChainModel.findAll({ where: { worker_sheet_id } });
|
||||
} catch (error) {
|
||||
logger.error(error);
|
||||
}
|
||||
}
|
||||
|
||||
export const CalcChainService = {
|
||||
findOne,
|
||||
update,
|
||||
create,
|
||||
findAll,
|
||||
deleteCalcChain,
|
||||
};
|
||||
@@ -0,0 +1,151 @@
|
||||
import { logger } from "../Utils/Logger";
|
||||
import { CellDataModel, CellDataModelType } from "../Sequelize/Models/CellData";
|
||||
|
||||
/**
|
||||
* 通过 sheetid 查找当前数据表的单元格数据
|
||||
*/
|
||||
async function getCellData(worker_sheet_id: string) {
|
||||
try {
|
||||
return await CellDataModel.findAll({ where: { worker_sheet_id } });
|
||||
} catch (error) {
|
||||
logger.error(error);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据传入的 sheetid rc 判断是否存在记录
|
||||
*/
|
||||
async function hasCellData(worker_sheet_id: string, r: number, c: number) {
|
||||
try {
|
||||
return await CellDataModel.findOne({
|
||||
where: { worker_sheet_id, r, c },
|
||||
});
|
||||
} catch (error) {
|
||||
logger.error(error);
|
||||
}
|
||||
}
|
||||
|
||||
async function updateCellData(info: CellDataModelType) {
|
||||
try {
|
||||
return await CellDataModel.update(info, {
|
||||
where: { cell_data_id: info.cell_data_id },
|
||||
});
|
||||
} catch (error) {
|
||||
logger.error(error);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
async function createCellData(info: CellDataModelType) {
|
||||
try {
|
||||
return await CellDataModel.create(info);
|
||||
} catch (error) {
|
||||
logger.error(error);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
async function deleteCellDataRC(worker_sheet_id: string, index: number, rc: "r" | "c") {
|
||||
try {
|
||||
return await CellDataModel.destroy({
|
||||
where: { worker_sheet_id, [rc]: index },
|
||||
});
|
||||
} catch (error) {
|
||||
logger.error(error);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
async function deleteCellData(worker_sheet_id: string, r: number, c: number) {
|
||||
try {
|
||||
return await CellDataModel.destroy({
|
||||
where: { worker_sheet_id, r, c },
|
||||
});
|
||||
} catch (error) {
|
||||
logger.error(error);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除行列
|
||||
*/
|
||||
async function updateCellDataRC(payload: { worker_sheet_id: string; index: number; len: number; update_type: "r" | "c" }) {
|
||||
// {"t":"drc","i":"2b62e1f2-7f7f-4889-b34d-007fe7277364","v":{"index":0,"len":1},"rc":"r"}
|
||||
const { worker_sheet_id, index, len, update_type } = payload;
|
||||
|
||||
try {
|
||||
// 1. 查询所有的 celldata 的 数据
|
||||
const cellData = await CellDataModel.findAll({
|
||||
where: { worker_sheet_id },
|
||||
});
|
||||
|
||||
// 2. 更新 r = r + len
|
||||
if (cellData.length) {
|
||||
for (let i = 0; i < cellData.length; i++) {
|
||||
// 只有比 index 大的值,才进行处理
|
||||
if (cellData[i][update_type] > index) {
|
||||
cellData[i][update_type] = cellData[i][update_type] - len;
|
||||
await cellData[i].save();
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (error) {
|
||||
logger.error(error);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 增加行列
|
||||
*/
|
||||
async function addCellDataRC(payload: { worker_sheet_id: string; index: number; len: number; update_type: "r" | "c" }) {
|
||||
const { worker_sheet_id, index, len, update_type } = payload;
|
||||
// 在上面加一列跟在下面加一列的区别:就是标记的这一行是否也跟着变化
|
||||
try {
|
||||
// 遍历查询
|
||||
const cellData = await CellDataModel.findAll({
|
||||
where: { worker_sheet_id },
|
||||
});
|
||||
|
||||
// {"t":"arc","i":"2b62e1f2...","v":{"index":8,"len":1,"direction":"lefttop","data":[]},"rc":"r"}
|
||||
|
||||
if (!cellData.length) return null;
|
||||
|
||||
// 不然执行增加操作
|
||||
// 如果rc的值是r新增行, 如果rc的值为c则新增列, 例如 rc=r,index=4,len=5,则代表从第4行开始增加5行
|
||||
// 然后把r大于4的单元格的整体的r值+5
|
||||
|
||||
for (let i = 0; i < cellData.length; i++) {
|
||||
if (cellData[i][update_type] >= index) {
|
||||
cellData[i][update_type] = cellData[i][update_type] + len;
|
||||
await cellData[i].save();
|
||||
}
|
||||
}
|
||||
} catch (error) {
|
||||
logger.error(error);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 存储函数链操作
|
||||
*/
|
||||
async function createFC(worker_sheet_id: string, r: number, c: number, calcChain: string) {
|
||||
try {
|
||||
await CellDataModel.update({ calcChain }, { where: { worker_sheet_id, r, c } });
|
||||
} catch (error) {
|
||||
logger.error(error);
|
||||
}
|
||||
}
|
||||
|
||||
export const CellDataService = {
|
||||
getCellData,
|
||||
hasCellData,
|
||||
updateCellData,
|
||||
createCellData,
|
||||
deleteCellData,
|
||||
updateCellDataRC,
|
||||
deleteCellDataRC,
|
||||
addCellDataRC,
|
||||
createFC,
|
||||
};
|
||||
@@ -0,0 +1,55 @@
|
||||
import { logger } from "../Utils/Logger";
|
||||
import { ChartModel, ChartModelType } from "../Sequelize/Models/Chart";
|
||||
|
||||
/**
|
||||
* 创建图表
|
||||
*/
|
||||
async function createChart(data: ChartModelType) {
|
||||
try {
|
||||
return await ChartModel.create(data);
|
||||
} catch (error) {
|
||||
logger.error(error);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新图表
|
||||
* @param data xy wh option
|
||||
* @returns
|
||||
*/
|
||||
async function updateChart(data: ChartModelType) {
|
||||
try {
|
||||
return await ChartModel.update(data, {
|
||||
where: { chart_id: data.chart_id },
|
||||
});
|
||||
} catch (error) {
|
||||
logger.error(error);
|
||||
}
|
||||
}
|
||||
|
||||
// 删除图表
|
||||
async function deleteChart(chart_id: string) {
|
||||
try {
|
||||
return await ChartModel.destroy({ where: { chart_id } });
|
||||
} catch (error) {
|
||||
logger.error(error);
|
||||
}
|
||||
}
|
||||
|
||||
// findAllChart
|
||||
async function findAllChart(worker_sheet_id: string) {
|
||||
try {
|
||||
return await ChartModel.findAll({
|
||||
where: { worker_sheet_id },
|
||||
});
|
||||
} catch (error) {
|
||||
logger.error(error);
|
||||
}
|
||||
}
|
||||
|
||||
export const ChartService = {
|
||||
createChart,
|
||||
updateChart,
|
||||
deleteChart,
|
||||
findAllChart,
|
||||
};
|
||||
@@ -0,0 +1,70 @@
|
||||
import { HiddenAndLenModelType, HiddenAndLenModel } from "../Sequelize/Models/HiddenAndLen";
|
||||
import { logger } from "../Utils/Logger";
|
||||
|
||||
/**
|
||||
* 创建隐藏记录
|
||||
* HidenAndLen 表结构设定为 存储单条记录,因此,在创建之前,需要先查询是否已经存在 gridkey and config_type and config_index 的记录,
|
||||
* 如果存在的话,需要先进行删除
|
||||
* @param data
|
||||
* @returns
|
||||
*/
|
||||
async function create(data: HiddenAndLenModelType) {
|
||||
try {
|
||||
// 查询是否存在记录
|
||||
const exist = await HiddenAndLenModel.findOne({
|
||||
where: {
|
||||
worker_sheet_id: data.worker_sheet_id,
|
||||
config_type: data.config_type,
|
||||
config_index: data.config_index,
|
||||
},
|
||||
});
|
||||
if (exist)
|
||||
await HiddenAndLenModel.destroy({
|
||||
where: { config_id: exist.config_id },
|
||||
});
|
||||
|
||||
return await HiddenAndLenModel.create(data);
|
||||
} catch (error) {
|
||||
logger.error(error);
|
||||
}
|
||||
}
|
||||
|
||||
// 查询 worker_sheet_id 下所有隐藏记录 - 用于初始化时查询
|
||||
async function findConfig(worker_sheet_id: string) {
|
||||
try {
|
||||
return await HiddenAndLenModel.findAll({
|
||||
where: { worker_sheet_id },
|
||||
});
|
||||
} catch (error) {
|
||||
logger.error(error);
|
||||
}
|
||||
}
|
||||
|
||||
// 删除 hidden 记录
|
||||
async function deleteHidden(worker_sheet_id: string, config_type: string, config_index?: string) {
|
||||
try {
|
||||
return await HiddenAndLenModel.destroy({
|
||||
where: Object.assign({}, { worker_sheet_id, config_type }, config_index ? { config_index } : {}),
|
||||
});
|
||||
} catch (error) {
|
||||
logger.error(error);
|
||||
}
|
||||
}
|
||||
|
||||
// 删除列
|
||||
async function deleteRC(worker_sheet_id: string, config_index: string) {
|
||||
try {
|
||||
return await HiddenAndLenModel.destroy({
|
||||
where: { worker_sheet_id, config_index },
|
||||
});
|
||||
} catch (error) {
|
||||
logger.error(error);
|
||||
}
|
||||
}
|
||||
|
||||
export const HiddenAndLenService = {
|
||||
create,
|
||||
findConfig,
|
||||
deleteHidden,
|
||||
deleteRC,
|
||||
};
|
||||
@@ -0,0 +1,36 @@
|
||||
import { logger } from '../Utils/Logger';
|
||||
import { ImageModel, ImageModelType } from '../Sequelize/Models/Image';
|
||||
|
||||
/**
|
||||
* 先删除当前 sheet 的所有图片
|
||||
*/
|
||||
async function deleteImage(worker_sheet_id: string) {
|
||||
try {
|
||||
return await ImageModel.destroy({ where: { worker_sheet_id } });
|
||||
} catch (error) {
|
||||
logger.error(error);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建 image 记录
|
||||
*/
|
||||
async function createImage(data: ImageModelType) {
|
||||
try {
|
||||
return await ImageModel.create(data);
|
||||
} catch (error) {
|
||||
logger.error(error);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询当前 workersheetid 的图片
|
||||
*/
|
||||
async function findAllImage(worker_sheet_id: string) {
|
||||
try {
|
||||
return await ImageModel.findAll({ where: { worker_sheet_id } });
|
||||
} catch (error) {
|
||||
logger.error(error);
|
||||
}
|
||||
}
|
||||
export const ImageService = { deleteImage, createImage, findAllImage };
|
||||
@@ -0,0 +1,57 @@
|
||||
/**
|
||||
* 表格合并单元格处理逻辑:
|
||||
* 设置一个合并单元格,需要处理两个地方,一是单元格对象中设置mc属性,二是在config中设置merge
|
||||
* "r": 0, //主单元格的行号
|
||||
* "c": 0, //主单元格的列号
|
||||
* "rs": 2, //合并单元格占的行数
|
||||
* "cs": 2 //合并单元格占的列数
|
||||
*
|
||||
* 业务上的处理逻辑是:先查询 merges 这个表,如果有字段值,则反馈生成 celldata mc 属性字段
|
||||
*
|
||||
* 如果是创建新的合并单元格,需要判断 r c 是否存在,存在则更新 rs cs,不存在则插入
|
||||
*/
|
||||
|
||||
import { logger } from "../Utils/Logger";
|
||||
import { MergeModel, MergeModelType } from "../Sequelize/Models/Merge";
|
||||
|
||||
async function deleteMerge(worker_sheet_id: string) {
|
||||
try {
|
||||
return await MergeModel.destroy({
|
||||
where: {
|
||||
worker_sheet_id,
|
||||
},
|
||||
});
|
||||
} catch (error) {
|
||||
logger.error(error);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
// 新增记录
|
||||
async function createMerge(info: MergeModelType) {
|
||||
try {
|
||||
return await MergeModel.create(info);
|
||||
} catch (error) {
|
||||
logger.error(error);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
// 查询全部
|
||||
async function findAllMerge(worker_sheet_id: string) {
|
||||
try {
|
||||
return await MergeModel.findAll({
|
||||
where: { worker_sheet_id },
|
||||
order: [["createdAt", "ASC"]],
|
||||
});
|
||||
} catch (error) {
|
||||
logger.error(error);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
export const MergeService = {
|
||||
deleteMerge,
|
||||
createMerge,
|
||||
findAllMerge,
|
||||
};
|
||||
@@ -0,0 +1,100 @@
|
||||
/**
|
||||
* Worker Books Service
|
||||
*/
|
||||
|
||||
import { logger } from "../Utils/Logger";
|
||||
import {
|
||||
WorkerBookModel,
|
||||
WorkerBookModelType,
|
||||
} from "../Sequelize/Models/WorkerBook";
|
||||
import {
|
||||
WorkerSheetModel,
|
||||
WorkerSheetModelType,
|
||||
} from "../Sequelize/Models/WorkerSheet";
|
||||
import { FindOptions } from "sequelize";
|
||||
|
||||
/**
|
||||
* 新增 workerBooks 记录
|
||||
* @param info WorkerBookModelType
|
||||
* @returns
|
||||
*/
|
||||
async function create(info: WorkerBookModelType) {
|
||||
try {
|
||||
// 1. 先查询用户传递的 gridKey 是否存在记录
|
||||
const exist = await findOne(info.gridKey);
|
||||
if (exist) return { code: 1, msg: "该 gridKey 已经存在" };
|
||||
|
||||
// 2. 创建一个 worker books
|
||||
const book = await WorkerBookModel.create(info);
|
||||
|
||||
// 3. 为当前 worker book 创建一个 worker sheet 因为一个 Ecxel 文档中至少需要一个 sheet
|
||||
const sheetInfo: WorkerSheetModelType = {
|
||||
gridKey: info.gridKey,
|
||||
name: "Sheet1",
|
||||
order: 0,
|
||||
status: 1,
|
||||
};
|
||||
const sheet = await WorkerSheetModel.create(sheetInfo);
|
||||
|
||||
return {
|
||||
code: 0,
|
||||
msg: "工作簿创建成功,已同步创建 worker sheet 记录.",
|
||||
book,
|
||||
sheet,
|
||||
};
|
||||
} catch (error) {
|
||||
logger.error(error);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新 workerBooks 记录
|
||||
*/
|
||||
async function update(info: WorkerBookModelType) {
|
||||
try {
|
||||
return await WorkerBookModel.update(info, {
|
||||
where: { gridKey: info.gridKey },
|
||||
});
|
||||
} catch (error) {
|
||||
logger.error(error);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除 workerBooks 记录 - 注意:该表有外键关联,如果删除记录可能会导致其他业务表有问题,因此,提供 stage 参数,标记记录是否可用
|
||||
*/
|
||||
async function del() {}
|
||||
|
||||
/**
|
||||
* 查询 workerBooks 记录
|
||||
*/
|
||||
async function findOne(
|
||||
gridKey: string,
|
||||
options?: FindOptions<WorkerBookModelType>
|
||||
) {
|
||||
try {
|
||||
return await WorkerBookModel.findOne({ where: { gridKey }, ...options });
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询 workerBooks 记录列表
|
||||
*/
|
||||
async function findAll() {
|
||||
try {
|
||||
return await WorkerBookModel.findAll();
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
}
|
||||
}
|
||||
|
||||
export const WorkerBookService = {
|
||||
create,
|
||||
update,
|
||||
delete: del,
|
||||
findOne,
|
||||
findAll,
|
||||
};
|
||||
@@ -0,0 +1,49 @@
|
||||
import { logger } from "../Utils/Logger";
|
||||
import {
|
||||
WorkerSheetModel,
|
||||
WorkerSheetModelType,
|
||||
} from "../Sequelize/Models/WorkerSheet";
|
||||
|
||||
/**
|
||||
* 更新相关配置
|
||||
*/
|
||||
async function update(data: WorkerSheetModelType) {
|
||||
try {
|
||||
return await WorkerSheetModel.update(data, {
|
||||
where: { worker_sheet_id: data.worker_sheet_id },
|
||||
});
|
||||
} catch (error) {
|
||||
logger.error(error);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 通过 gridkey 查找记录
|
||||
*/
|
||||
async function findAllByGridKey(gridKey: string) {
|
||||
try {
|
||||
return await WorkerSheetModel.findAll({
|
||||
// 要查找当前没有被删除的表
|
||||
where: { gridKey, deleteFlag: false },
|
||||
});
|
||||
} catch (error) {
|
||||
logger.error(error);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 新建 sheet
|
||||
*/
|
||||
async function createSheet(data: WorkerSheetModelType) {
|
||||
try {
|
||||
return await WorkerSheetModel.create(data);
|
||||
} catch (error) {
|
||||
logger.error(error);
|
||||
}
|
||||
}
|
||||
|
||||
export const WorkerSheetService = {
|
||||
findAllByGridKey,
|
||||
update,
|
||||
createSheet,
|
||||
};
|
||||
Reference in New Issue
Block a user