import type { SignModeItem, SignModePageQuery } from './types';
|
|
function delay<T>(data: T, ms = 180): Promise<T> {
|
return new Promise((resolve) => setTimeout(() => resolve(data), ms));
|
}
|
|
const store: SignModeItem[] = [
|
{
|
id: 'tms_sign_app',
|
modeCode: 'app_scan',
|
modeName: 'APP扫码',
|
tipSeconds: 30,
|
matchRoster: '1',
|
enabled: '1',
|
remark: '系统 APP 扫码(图片识别 / 摄像头 / 长按识码)',
|
},
|
{
|
id: 'tms_sign_wx',
|
modeCode: 'wx_scan',
|
modeName: '微信扫码',
|
tipSeconds: 30,
|
matchRoster: '1',
|
enabled: '1',
|
remark: '微信扫码签到',
|
},
|
{
|
id: 'tms_sign_online',
|
modeCode: 'online',
|
modeName: '在线签到',
|
tipSeconds: 30,
|
matchRoster: '1',
|
enabled: '1',
|
remark: '登录系统在线签到',
|
},
|
];
|
|
export function mockQuerySignModes(params: SignModePageQuery = {}) {
|
const { currentPage = 1, pageSize = 20, keyword = '', enabled } = params;
|
let list = [...store];
|
if (enabled) list = list.filter((x) => x.enabled === enabled);
|
if (keyword) {
|
const k = keyword.trim().toLowerCase();
|
list = list.filter(
|
(x) => x.modeCode.toLowerCase().includes(k) || x.modeName.toLowerCase().includes(k),
|
);
|
}
|
const start = (currentPage - 1) * pageSize;
|
return delay({
|
list: list.slice(start, start + pageSize),
|
pagination: { total: list.length, currentPage, pageSize },
|
});
|
}
|
|
export async function mockGetSignMode(id: string) {
|
await delay(null);
|
const row = store.find((x) => x.id === id);
|
if (!row) throw new Error('签到方式不存在');
|
return { ...row };
|
}
|
|
export async function mockSaveSignMode(data: Partial<SignModeItem> & { id?: string }) {
|
await delay(null);
|
if (data.id) {
|
const row = store.find((x) => x.id === data.id);
|
if (!row) throw new Error('签到方式不存在');
|
if (data.modeCode && data.modeCode !== row.modeCode) {
|
if (store.some((x) => x.modeCode === data.modeCode && x.id !== data.id)) {
|
throw new Error('方式编码已存在');
|
}
|
}
|
Object.assign(row, data);
|
return row;
|
}
|
if (!data.modeCode) throw new Error('请填写方式编码');
|
if (store.some((x) => x.modeCode === data.modeCode)) throw new Error('方式编码已存在');
|
const row: SignModeItem = {
|
id: `sm_${Date.now()}`,
|
modeCode: data.modeCode,
|
modeName: data.modeName || data.modeCode,
|
tipSeconds: data.tipSeconds ?? 30,
|
matchRoster: (data.matchRoster as any) || '1',
|
enabled: (data.enabled as any) || '1',
|
remark: data.remark || '',
|
};
|
store.push(row);
|
return row;
|
}
|
|
export async function mockSetSignModeEnabled(id: string, enabled: '0' | '1') {
|
await delay(null);
|
const row = store.find((x) => x.id === id);
|
if (!row) throw new Error('签到方式不存在');
|
row.enabled = enabled;
|
return row;
|
}
|
|
export async function mockDeleteSignMode(id: string) {
|
await delay(null);
|
const idx = store.findIndex((x) => x.id === id);
|
if (idx < 0) throw new Error('签到方式不存在');
|
store.splice(idx, 1);
|
return true;
|
}
|