Commit 73f0498f authored by 姬鋆屾's avatar 姬鋆屾

推每日打卡记录导出超过一天时添加验证

parent e376254a
import Qs from 'qs'; import Qs from "qs";
import { post, get, upload } from './ajax'; import { post, get, upload } from "./ajax";
import queue from './queue'; import queue from "./queue";
import axios from 'axios'; import axios from "axios";
import cookie from './cookie'; import cookie from "./cookie";
import httpErrorHandler from './httpErrorHandler'; import httpErrorHandler from "./httpErrorHandler";
/** /**
* 获取参数的类型 * 获取参数的类型
...@@ -12,7 +12,7 @@ import httpErrorHandler from './httpErrorHandler'; ...@@ -12,7 +12,7 @@ import httpErrorHandler from './httpErrorHandler';
* @returns {string} 参数类型 * @returns {string} 参数类型
*/ */
export const type = (data) => { export const type = (data) => {
return Object.prototype.toString.call(data).replace(/(\[object |\])/g, '') return Object.prototype.toString.call(data).replace(/(\[object |\])/g, "");
}; };
/** /**
...@@ -22,7 +22,7 @@ export const type = (data) => { ...@@ -22,7 +22,7 @@ export const type = (data) => {
*/ */
export const getLoginStatus = () => { export const getLoginStatus = () => {
return window.sessionStorage.isLogin; return window.sessionStorage.isLogin;
} };
/** /**
* 解析url参数 * 解析url参数
...@@ -30,9 +30,8 @@ export const getLoginStatus = () => { ...@@ -30,9 +30,8 @@ export const getLoginStatus = () => {
* @returns {object} localtion的query对象 * @returns {object} localtion的query对象
*/ */
export const query = () => { export const query = () => {
return Qs.parse(window.location.href.split('?')[1]) return Qs.parse(window.location.href.split("?")[1]);
} };
/** /**
* 编码url参数 * 编码url参数
...@@ -41,8 +40,8 @@ export const query = () => { ...@@ -41,8 +40,8 @@ export const query = () => {
* @returns string * @returns string
*/ */
export const encodeURI = (data) => { export const encodeURI = (data) => {
return Qs.stringify(data, { arrayFormat: 'repeat', allowDots: true }); return Qs.stringify(data, { arrayFormat: "repeat", allowDots: true });
} };
/** /**
* formatterDate * formatterDate
...@@ -51,19 +50,23 @@ export const encodeURI = (data) => { ...@@ -51,19 +50,23 @@ export const encodeURI = (data) => {
* @returns {string} val 解析后的结果 * @returns {string} val 解析后的结果
*/ */
export function formatterDate(time) { export function formatterDate(time) {
if(time==='undefined'||time===null) { if (time === "undefined" || time === null) {
return '--'} return "--";
}
if (!time) return '--'; if (!time) return "--";
let date = new Date(Number(time)); let date = new Date(Number(time));
let Y = date.getFullYear() + '-'; let Y = date.getFullYear() + "-";
let M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-'; let M =
let D = panLeft(date.getDate()) + ' '; (date.getMonth() + 1 < 10
let h = panLeft(date.getHours()) + ':'; ? "0" + (date.getMonth() + 1)
let m = panLeft(date.getMinutes()) + ':'; : date.getMonth() + 1) + "-";
let D = panLeft(date.getDate()) + " ";
let h = panLeft(date.getHours()) + ":";
let m = panLeft(date.getMinutes()) + ":";
let s = panLeft(date.getSeconds()); let s = panLeft(date.getSeconds());
return Y + M + D + h + m + s; return Y + M + D + h + m + s;
}; }
/** /**
* formatterDate * formatterDate
* *
...@@ -91,7 +94,7 @@ export function formatterDateDay(datetime) { ...@@ -91,7 +94,7 @@ export function formatterDateDay(datetime) {
return Y + M + D; return Y + M + D;
} }
return datetime; return datetime;
}; }
/** /**
* 当前日期加天数后得到的相应日期 * 当前日期加天数后得到的相应日期
* @param {*} day * @param {*} day
...@@ -117,10 +120,9 @@ function doHandleMonth(month) { ...@@ -117,10 +120,9 @@ function doHandleMonth(month) {
} }
function panLeft(num) { function panLeft(num) {
return num < 10 ? '0' + num : num; return num < 10 ? "0" + num : num;
} }
/** /**
* call方法 * call方法
* *
...@@ -132,23 +134,24 @@ function panLeft(num) { ...@@ -132,23 +134,24 @@ function panLeft(num) {
*/ */
const call = (callMethod, url, formData, config = {}) => { const call = (callMethod, url, formData, config = {}) => {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
callMethod(url, formData, config).then(res => { callMethod(url, formData, config)
const { code, msg, data } = res; .then((res) => {
if (code !== 1) { const { code, msg, data } = res;
reject({ if (code !== 1) {
message: msg || '' reject({
}); message: msg || "",
return; });
} return;
resolve(res); }
}) resolve(res);
.catch(error => { })
.catch((error) => {
if (error.status === 403) { if (error.status === 403) {
window.location.href = '/#/login' window.location.href = "/#/login";
} }
reject(error); reject(error);
}) });
}) });
}; };
/** /**
...@@ -176,10 +179,10 @@ export const normalCallGet = (url, formData, config = {}) => { ...@@ -176,10 +179,10 @@ export const normalCallGet = (url, formData, config = {}) => {
}; };
const mimeMap = { const mimeMap = {
xlsx: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', xlsx: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
zip: 'application/zip', zip: "application/zip",
doc: 'application/msword' doc: "application/msword",
} };
/** /**
* 普通的ajax download请求 * 普通的ajax download请求
...@@ -192,90 +195,107 @@ const mimeMap = { ...@@ -192,90 +195,107 @@ const mimeMap = {
export const download = (url, formData, config = {}) => { export const download = (url, formData, config = {}) => {
return new Promise(async (resolve, reject) => { return new Promise(async (resolve, reject) => {
const option = Object.assign({}, config, { const option = Object.assign({}, config, {
responseType: 'blob' responseType: "blob",
}) });
try { try {
const data = await post(url, formData, option) const data = await post(url, formData, option);
const link = document.createElement('a') const link = document.createElement("a");
let blob let blob;
let extName let extName;
if (option.type == "zip") { if (option.type == "zip") {
blob = new Blob([data], { type: mimeMap.zip }) blob = new Blob([data], { type: mimeMap.zip });
extName = "zip" extName = "zip";
} else if (option.type == "excel") { } else if (option.type == "excel") {
blob = new Blob([data], { type: mimeMap.xlsx }) blob = new Blob([data], { type: mimeMap.xlsx });
extName = "xlsx" extName = "xlsx";
} else if (option.type == "doc") { } else if (option.type == "doc") {
blob = new Blob([data], { type: mimeMap.doc }) blob = new Blob([data], { type: mimeMap.doc });
extName = "doc" extName = "doc";
} else { } else {
extName = "xlsx" extName = "xlsx";
} }
let fileName = "导出" let fileName = "导出";
if (option.fileName) { if (option.fileName) {
fileName = option.fileName fileName = option.fileName;
} }
link.href = URL.createObjectURL(blob) link.href = URL.createObjectURL(blob);
link.setAttribute('download', `${fileName}.${extName}`) // 设置下载文件名称 link.setAttribute("download", `${fileName}.${extName}`); // 设置下载文件名称
document.body.appendChild(link) document.body.appendChild(link);
link.click() link.click();
document.body.appendChild(link) document.body.appendChild(link);
resolve(); resolve();
} catch (error) { } catch (error) {
reject(error); reject(error);
} }
}) });
}; };
export const downloadWithCustName = (url, formData, config = {}) => { export const downloadWithCustName = (url, formData, config = {}) => {
return new Promise(async (resolve, reject) => { return new Promise(async (resolve, reject) => {
const option = Object.assign({}, config, { const option = Object.assign({}, config, {
responseType: 'blob', responseType: "blob",
baseURL: '/m', baseURL: "/m",
headers: { headers: {
post: { post: {
'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8' "Content-Type": "application/x-www-form-urlencoded;charset=UTF-8",
} },
} },
}) });
try { try {
const params = Object.assign({}, formData, { const params = Object.assign({}, formData, {
__mortals_token__: cookie.getItem('__mortals_token__'), __mortals_token__: cookie.getItem("__mortals_token__"),
}) });
var requestData = Qs.stringify(params, { arrayFormat: 'repeat', allowDots: true }); var requestData = Qs.stringify(params, {
axios.post(url, requestData, option) arrayFormat: "repeat",
.then(response => { allowDots: true,
if (response.data.type == 'application/json') { });
var reader = new FileReader(); axios
reader.onload = function (event) { .post(url, requestData, option)
var content = reader.result; .then(
reject(content); (response) => {
}; if (response.data.type == "application/json") {
reader.readAsText(response.data); var reader = new FileReader();
return; reader.onload = function(event) {
var content = reader.result;
reject(content);
};
reader.readAsText(response.data);
return;
}
const filename =
decodeURI(
response.headers["content-disposition"]
.split(";")[1]
.split("=")[1]
) ||
`${url
.substr(1)
.replace(/\//g, "_")}_${new Date().getTime()}.xls`;
let downloadUrl = window.URL.createObjectURL(
new Blob([response.data])
);
let link = document.createElement("a");
link.style.display = "none";
link.href = downloadUrl;
link.setAttribute("download", filename);
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
resolve();
},
(err) => {
reject(err);
} }
const filename = decodeURI(response.headers['content-disposition'].split(';')[1].split('=')[1]) || `${url.substr(1).replace(/\//g, '_')}_${new Date().getTime()}.xls` )
let downloadUrl = window.URL.createObjectURL(new Blob([response.data])) .catch((error) => {
let link = document.createElement('a') reject(error);
link.style.display = 'none'; });
link.href = downloadUrl;
link.setAttribute('download', filename);
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
resolve();
}, err => {
reject(err);
}).catch((error) => {
reject(error)
})
} catch (error) { } catch (error) {
reject(error); reject(error);
} }
}) });
}; };
/** /**
...@@ -309,16 +329,15 @@ export async function getUserListByQuery(query) { ...@@ -309,16 +329,15 @@ export async function getUserListByQuery(query) {
try { try {
/* //下拉只获取正常状态数据:status{0: "停用", 1: "正常", 2: "冻结", 3: "销户", 4: "离职"} /* //下拉只获取正常状态数据:status{0: "停用", 1: "正常", 2: "冻结", 3: "销户", 4: "离职"}
query["query.status"] = 1;*/ query["query.status"] = 1;*/
const data = await normalCallPost('/user/list', query); const data = await normalCallPost("/user/list", query);
const list = data.data.result.map(({ id, loginName, realName, mobile }) => { const list = data.data.result.map(({ id, loginName, realName, mobile }) => {
return { id, loginName, realName, mobile } return { id, loginName, realName, mobile };
}); });
return list; return list;
} catch (error) { } catch (error) {
return []; return [];
} }
}; }
/** /**
* 构造树型结构数据 * 构造树型结构数据
...@@ -329,41 +348,48 @@ export async function getUserListByQuery(query) { ...@@ -329,41 +348,48 @@ export async function getUserListByQuery(query) {
* @param {*} rootId 根Id 默认 0 * @param {*} rootId 根Id 默认 0
*/ */
export function handleTree(data, id, parentId, children, rootId) { export function handleTree(data, id, parentId, children, rootId) {
console.log("handle") console.log("handle");
id = id || 'id' id = id || "id";
parentId = parentId || 'parentId' parentId = parentId || "parentId";
children = children || 'children' children = children || "children";
rootId = rootId || Math.min.apply(Math, data.map(item => { return item[parentId] })) || 0 rootId =
rootId ||
Math.min.apply(
Math,
data.map((item) => {
return item[parentId];
})
) ||
0;
//对源数据深度克隆 //对源数据深度克隆
const cloneData = JSON.parse(JSON.stringify(data)) const cloneData = JSON.parse(JSON.stringify(data));
//循环所有项 //循环所有项
console.log("11111", cloneData) console.log("11111", cloneData);
const treeData = cloneData.filter(father => { const treeData = cloneData.filter((father) => {
let branchArr = cloneData.filter(child => { let branchArr = cloneData.filter((child) => {
//返回每一项的子级数组 //返回每一项的子级数组
return father[id] === child[parentId] return father[id] === child[parentId];
}); });
branchArr.length > 0 ? father.children = branchArr : ''; branchArr.length > 0 ? (father.children = branchArr) : "";
//返回第一层 //返回第一层
return father[parentId] === rootId; return father[parentId] === rootId;
}); });
console.log("treeData", treeData) console.log("treeData", treeData);
return treeData != '' ? treeData : data; return treeData != "" ? treeData : data;
}; }
/** /**
* 下载文件 * 下载文件
* @param {String} path - 下载地址/下载请求地址。 * @param {String} path - 下载地址/下载请求地址。
* @param {String} name - 下载文件的名字/重命名(考虑到兼容性问题,最好加上后缀名) * @param {String} name - 下载文件的名字/重命名(考虑到兼容性问题,最好加上后缀名)
*/ */
export function downloadFile(path, name) { export function downloadFile(path, name) {
if (path && name) { if (path && name) {
const xhr = new XMLHttpRequest(); const xhr = new XMLHttpRequest();
xhr.open("get", path); xhr.open("get", path);
xhr.responseType = "blob"; xhr.responseType = "blob";
xhr.send(); xhr.send();
xhr.onload = function () { xhr.onload = function() {
if (this.status === 200 || this.status === 304) { if (this.status === 200 || this.status === 304) {
// 如果是IE10及以上,不支持download属性,采用msSaveOrOpenBlob方法,但是IE10以下也不支持msSaveOrOpenBlob // 如果是IE10及以上,不支持download属性,采用msSaveOrOpenBlob方法,但是IE10以下也不支持msSaveOrOpenBlob
if ("msSaveOrOpenBlob" in navigator) { if ("msSaveOrOpenBlob" in navigator) {
...@@ -384,10 +410,8 @@ export function downloadFile(path, name) { ...@@ -384,10 +410,8 @@ export function downloadFile(path, name) {
} }
}; };
} }
} }
// 当元素滚动条被滚动时运行的脚本 // 当元素滚动条被滚动时运行的脚本
export function handleScroll() { export function handleScroll() {
let scrollbarEl = this.$refs["scroll"].wrap; let scrollbarEl = this.$refs["scroll"].wrap;
...@@ -446,13 +470,4 @@ export function jump(index) { ...@@ -446,13 +470,4 @@ export function jump(index) {
_this.$refs["scroll"].wrap.scrollTop = distance; _this.$refs["scroll"].wrap.scrollTop = distance;
} }
} }
}; }
...@@ -335,8 +335,6 @@ export default { ...@@ -335,8 +335,6 @@ export default {
}, },
/** 导出Excel */ /** 导出Excel */
doExport() { doExport() {
this.isExport = true;
this.progress = true;
let params = {}; let params = {};
for (let value of this.config.search) { for (let value of this.config.search) {
if (this.query[value.name]) { if (this.query[value.name]) {
...@@ -349,25 +347,59 @@ export default { ...@@ -349,25 +347,59 @@ export default {
if (this.checkList.length > 0) { if (this.checkList.length > 0) {
params["properties"] = this.checkList; params["properties"] = this.checkList;
} }
this.$download( let flag = this.checkDate(
"/attendance/record/exportExcel", params.attendanceDateStart,
{ params.attendanceDateEnd,
...params, 1
}, );
{ type: "excel" } if (!flag) {
) this.isExport = true;
.then(() => {
this.percent = 100;
this.progress = false;
this.isExport = false;
this.checkList = [];
})
.catch((error) => {
this.progress = false;
this.isExport = false; this.progress = true;
this.$message.error(error.message); this.$download(
}); "/attendance/record/exportExcel",
{
...params,
},
{ type: "excel" }
)
.then((res) => {
this.percent = 100;
this.progress = false;
this.isExport = false;
this.checkList = [];
})
.catch((error) => {
this.percent = 100;
this.progress = false;
this.isExport = false;
this.$message.error(error.message);
});
}
},
checkDate(startTime, endTime, compDay) {
if (startTime == "" || startTime == null || startTime == undefined) {
this.$message.error("开始时间为空,请检查!");
return true;
}
if (endTime == "" || endTime == null || endTime == undefined) {
this.$message.error("结束时间为空,请检查!");
return true;
}
var data1 = Date.parse(startTime.replace(/-/g, "/"));
var data2 = Date.parse(endTime.replace(/-/g, "/"));
var datadiff = data2 - data1;
var time = parseInt(compDay) * (60 * 60 * 24 * 1000);
if (datadiff < 0) {
this.$message.error("开始时间应小于结束时间");
return true;
}
if (datadiff > time) {
this.$message.error("时间间隔大于" + parseInt(compDay) + "天,请检查!");
return true;
}
return false;
}, },
setdialog() { setdialog() {
this.isdialog = true; this.isdialog = true;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment