| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277 |
- import request from '@/utils/request';
- import axios from 'axios';
- import { Loading } from 'element-ui';
- const baseUrl = '/aps/factory/calendar';
- const pendingRequests = {};
- let loadingInstance = null;
- let loadingCount = 0;
- function showLoading(text = '加载中...') {
- loadingCount += 1;
- if (!loadingInstance) {
- loadingInstance = Loading.service({
- lock: true,
- text,
- spinner: 'el-icon-loading',
- background: 'rgba(255, 255, 255, 0.68)',
- customClass: 'factory-calendar-loading'
- });
- } else {
- loadingInstance.text = text;
- }
- }
- function hideLoading() {
- loadingCount = Math.max(loadingCount - 1, 0);
- if (!loadingCount && loadingInstance) {
- loadingInstance.close();
- loadingInstance = null;
- }
- }
- async function requestWithLoading(requestFactory, text) {
- showLoading(text);
- try {
- return await requestFactory();
- } finally {
- hideLoading();
- }
- }
- function onceRequest(key, requestFactory) {
- if (pendingRequests[key]) {
- return pendingRequests[key];
- }
- pendingRequests[key] = requestFactory().finally(() => {
- delete pendingRequests[key];
- });
- return pendingRequests[key];
- }
- function normalizeTimeValue(value) {
- if (typeof value !== 'string' || !/^\d{2}:\d{2}$/.test(value)) {
- return value;
- }
- return `${value}:00`;
- }
- function normalizeDateTimeValue(value) {
- if (typeof value !== 'string') {
- return value;
- }
- if (/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}$/.test(value)) {
- return value.replace('T', ' ');
- }
- if (/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}$/.test(value)) {
- return `${value}:00`;
- }
- return value;
- }
- function normalizeTimePayload(data) {
- if (Array.isArray(data)) {
- return data.map((item) => normalizeTimePayload(item));
- }
- if (
- !data ||
- typeof data !== 'object' ||
- Object.prototype.toString.call(data) !== '[object Object]'
- ) {
- return data;
- }
- return Object.keys(data).reduce((next, key) => {
- const value = data[key];
- if (key === 'startTime' || key === 'endTime') {
- next[key] = normalizeTimeValue(value);
- } else if (key === 'effectiveTime' || key === 'expireTime') {
- next[key] = normalizeDateTimeValue(value);
- } else {
- next[key] = normalizeTimePayload(value);
- }
- return next;
- }, {});
- }
- function normalizeSegmentContent(data) {
- if (!data || typeof data.newContent !== 'string') {
- return data;
- }
- try {
- const parsed = JSON.parse(data.newContent);
- return {
- ...data,
- newContent: JSON.stringify(normalizeTimePayload(parsed))
- };
- } catch (e) {
- return data;
- }
- }
- function normalizeRequestData(data) {
- return normalizeSegmentContent(normalizeTimePayload(data));
- }
- function unwrap(res) {
- if (res.data.code == 0) {
- return res.data.data;
- }
- return Promise.reject(new Error(res.data.message));
- }
- export async function addCalendar(data) {
- const res = await requestWithLoading(
- () => request.post(`${baseUrl}/add`, normalizeRequestData(data)),
- '保存日历中...'
- );
- return unwrap(res);
- }
- export async function editCalendar(data) {
- const res = await requestWithLoading(
- () => request.put(`${baseUrl}/edit`, normalizeRequestData(data)),
- '保存日历中...'
- );
- return unwrap(res);
- }
- export async function deleteCalendar(data) {
- const res = await requestWithLoading(
- () => request.delete(`${baseUrl}/delete`, { data }),
- '删除日历中...'
- );
- return unwrap(res);
- }
- export async function updateCalendarStatus(data) {
- const res = await requestWithLoading(
- () => request.put(`${baseUrl}/status`, data),
- '同步状态中...'
- );
- return unwrap(res);
- }
- export async function pageCalendar(params) {
- const res = await requestWithLoading(
- () => request.get(`${baseUrl}/list`, { params }),
- '加载日历数据中...'
- );
- return unwrap(res);
- }
- export async function copyCalendar(data) {
- const res = await requestWithLoading(
- () => request.post(`${baseUrl}/copy`, data),
- '复制日历中...'
- );
- return unwrap(res);
- }
- export async function exportCalendarList(params) {
- const res = await requestWithLoading(
- () => request.get(`${baseUrl}/batch/export`, { params }),
- '导出日历中...'
- );
- return unwrap(res);
- }
- export async function viewCalendar(params) {
- const res = await requestWithLoading(
- () => request.get(`${baseUrl}/view`, { params }),
- '加载日历视图中...'
- );
- return unwrap(res);
- }
- export async function saveCalendarDetail(data) {
- const res = await requestWithLoading(
- () => request.post(`${baseUrl}/detail/save`, normalizeRequestData(data)),
- '保存时段明细中...'
- );
- return unwrap(res);
- }
- export async function checkCalendarConflict(data) {
- const payload = normalizeRequestData(data);
- const res = await requestWithLoading(
- () =>
- onceRequest(`conflict-check:${JSON.stringify(payload)}`, () =>
- request.post(`${baseUrl}/conflict/check`, payload)
- ),
- '检测冲突中...'
- );
- return unwrap(res);
- }
- export async function checkAllCalendarConflict(params) {
- const payload = normalizeRequestData(params);
- const res = await requestWithLoading(
- () =>
- onceRequest(`conflict-all:${JSON.stringify(payload)}`, () =>
- request.get(`${baseUrl}/conflict/all`, { params: payload })
- ),
- '年度冲突检测中...'
- );
- return unwrap(res);
- }
- export async function applyCalendarAdjust(data) {
- const res = await requestWithLoading(
- () => request.post(`${baseUrl}/adjust/apply`, normalizeRequestData(data)),
- '提交调整申请中...'
- );
- return unwrap(res);
- }
- export async function approveCalendarAdjust(data) {
- const res = await requestWithLoading(
- () => request.put(`${baseUrl}/adjust/approve`, data),
- '审批处理中...'
- );
- return unwrap(res);
- }
- export async function pageCalendarAdjust(params) {
- const res = await requestWithLoading(
- () => request.get(`${baseUrl}/adjust/list`, { params }),
- '加载调整申请中...'
- );
- return unwrap(res);
- }
- export async function getPlanRelation(params) {
- const res = await requestWithLoading(
- () =>
- request.get(`${baseUrl}/plan/relation`, {
- params: normalizeRequestData(params)
- }),
- '加载关联计划中...'
- );
- return unwrap(res);
- }
- export async function refreshCalendarPlan(data) {
- const res = await requestWithLoading(
- () => request.post(`${baseUrl}/plan/refresh`, data),
- '刷新关联计划中...'
- );
- return unwrap(res);
- }
- export async function getMonthStat(params) {
- const res = await requestWithLoading(
- () => request.get(`${baseUrl}/stat/month`, { params }),
- '加载统计数据中...'
- );
- return unwrap(res);
- }
- export async function getPublicLegalHolidays(year) {
- const res = await axios.get(
- `https://api.jiejiariapi.com/v1/holidays/${year}`,
- {
- timeout: 8000
- }
- );
- return res.data;
- }
|