123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371 |
- import axios from "axios";
- import FileSaver from "file-saver";
- import { getToken } from "@/utils/auth";
- /**
- * 删除对象中的空值
- * @param {object} obj
- * @returns {Object}
- */
- export function deleteEmptyObj(obj) {
- const newObj = obj;
- for (var key in newObj) {
- if (
- newObj[key] === "" ||
- newObj[key] === null ||
- newObj[key] === undefined
- ) {
- delete newObj[key];
- }
- }
- return newObj;
- }
- /**
- *
- * @param {*} array 要查询的数组
- * @param {*} attr 要查询的字段
- * @param {*} val 要查询的字段值
- * @returns
- */
- export function findElem(array, attr, val) {
- for (var i = 0; i < array.length; i++) {
- if (array[i][attr] == val) {
- return i; // 返回当前索引值
- }
- }
- return -1;
- }
- /**
- * 生成带参数的链接
- * @param {String} url
- * @param {Object} params
- * @returns
- */
- export function createParamsUrl(url, params) {
- if (typeof url === "undefined" || url == null || url == "") {
- return "";
- }
- if (
- typeof params === "undefined" ||
- params == null ||
- typeof params !== "object"
- ) {
- return "";
- }
- url += url.indexOf("?") != -1 ? "" : "?";
- for (var k in params) {
- url += (url.indexOf("=") != -1 ? "&" : "") + k + "=" + encodeURI(params[k]);
- }
- return url;
- }
- /**
- * 导出功能
- * @param {*} obj
- * @returns
- */
- export function downloadFiles(url, params = {}) {
- params.token = getToken();
- const newParams = deleteEmptyObj(params);
- const newUrl = createParamsUrl(url, newParams);
- console.log(process.env.VUE_APP_BASE_API + newUrl);
- window.open(process.env.VUE_APP_BASE_API + newUrl);
- }
- /**
- * 导入功能
- * @param {*} url
- * @param {*} formData
- */
- export async function handleImport(url, formData) {
- const Result = await new Promise((resolve, reject) => {
- axios
- .post(
- process.env.VUE_APP_BASE_API + url,
- formData,
- {
- headers: {
- "Content-Type": "multipart/form-data",
- "x-token": getToken(),
- },
- }
- )
- .then((res) => {
- resolve(res.data);
- })
- .catch((err) => {
- reject(err);
- });
- });
- return Result;
- }
- /**
- * 导入有返回二进制文件
- * @param {*} url
- * @param {*} formData
- */
- export async function handleImportTwo(url, formData) {
- const Result = await new Promise((resolve, reject) => {
- axios
- .post(
- process.env.VUE_APP_BASE_API + url,
- formData,
- {
- responseType: "arraybuffer",
- headers: {
- "Content-Type": "multipart/form-data",
- "x-token": getToken(),
- },
- }
- )
- .then((res) => {
- resolve(res.data);
- })
- .catch((err) => {
- reject(err);
- });
- });
- return Result;
- }
- /**
- * 重置时间格式
- * @param {*} date
- * @param {*} type
- */
- export function resetDateFormat(date, type) {
- let newDate = "";
- if (!date) {
- return "";
- }
- // type=1: yyyy-MM-dd 转 yyyy-MM-dd HH:mm:ss
- if (type == 1 || !type) {
- newDate = date + " 00:00:00";
- }
- }
- /**
- * 若文档中已有命名dateFormat,可用dFormat()调用
- * 年(Y) 可用1-4个占位符
- * 月(m)、日(d)、小时(H)、分(M)、秒(S) 可用1-2个占位符
- * 星期(W) 可用1-3个占位符
- * 季度(q为阿拉伯数字,Q为中文数字)可用1或4个占位符
- *
- * let date = new Date()
- * dateFormat("YYYY-mm-dd HH:MM:SS", date) 2020-02-09 14:04:23
- * dateFormat("YYYY-mm-dd HH:MM:SS Q", date) 2020-02-09 14:09:03 一
- * dateFormat("YYYY-mm-dd HH:MM:SS WWW", date) 2020-02-09 14:45:12 星期日
- * dateFormat("YYYY-mm-dd HH:MM:SS QQQQ", date) 2020-02-09 14:09:36 第一季度
- * dateFormat("YYYY-mm-dd HH:MM:SS WWW QQQQ", date) 2020-02-09 14:46:12 星期日 第一季度
- */
- export function dateFormat(format, date) {
- const we = date.getDay(); // 星期
- const qut = Math.floor((date.getMonth() + 3) / 3).toString(); // 季度
- const opt = {
- "Y+": date.getFullYear().toString(), // 年
- "m+": (date.getMonth() + 1).toString(), // 月(月份从0开始,要+1)
- "d+": date.getDate().toString(), // 日
- "H+": date.getHours().toString(), // 时
- "M+": date.getMinutes().toString(), // 分
- "S+": date.getSeconds().toString(), // 秒
- "q+": qut, // 季度
- };
- const week = {
- // 中文数字 (星期)
- 0: "日",
- 1: "一",
- 2: "二",
- 3: "三",
- 4: "四",
- 5: "五",
- 6: "六",
- };
- const quarter = {
- // 中文数字(季度)
- 1: "一",
- 2: "二",
- 3: "三",
- 4: "四",
- };
- if (/(W+)/.test(format)) {
- format = format.replace(
- RegExp.$1,
- RegExp.$1.length > 1
- ? RegExp.$1.length > 2
- ? "星期" + week[we]
- : "周" + week[we]
- : week[we]
- );
- }
- if (/(Q+)/.test(format)) {
- // 输入一个Q,只输出一个中文数字,输入4个Q,则拼接上字符串
- format = format.replace(
- RegExp.$1,
- RegExp.$1.length == 4 ? "第" + quarter[qut] + "季度" : quarter[qut]
- );
- }
- for (const k in opt) {
- const r = new RegExp("(" + k + ")").exec(format);
- if (r) {
- // 若输入的长度不为1,则前面补零
- format = format.replace(
- r[1],
- RegExp.$1.length == 1 ? opt[k] : opt[k].padStart(RegExp.$1.length, "0")
- );
- }
- }
- return format;
- }
- /**
- * @param url {string} pdf地址
- * @param fileName {string} pdf名称
- */
- export function downloadPdf(url, fileName) {
- axios({
- method: "get",
- url,
- responseType: "blob",
- }).then((res) => {
- const file = new Blob([res.data], {
- type: "application/pdf",
- });
- FileSaver(file, fileName);
- });
- }
- export function changeNumberMoneyToChinese(money) {
- // 接收数字或者字符串数字
- if (typeof money === "string") {
- if (money === "") return "";
- if (isNaN(parseFloat(money))) {
- throw Error(`参数有误:${money},请输入数字或字符串数字`);
- } else {
- // 去掉分隔符(,)
- money = money.replace(/,/g, "");
- }
- } else if (typeof money === "number") {
- // 去掉分隔符(,)
- money = money.toString().replace(/,/g, "");
- } else {
- throw Error(`参数有误:${money},请输入数字或字符串数字`);
- }
- // 汉字的数字
- const cnNums = [
- "零",
- "壹",
- "贰",
- "叁",
- "肆",
- "伍",
- "陆",
- "柒",
- "捌",
- "玖",
- ];
- // 基本单位
- const cnIntRadice = ["", "拾", "佰", "仟"];
- // 对应整数部分扩展单位
- const cnIntUnits = ["", "万", "亿", "兆"];
- // 对应小数部分单位
- const cnDecUnits = ["角", "分", "毫", "厘"];
- // 整数金额时后面跟的字符
- const cnInteger = "整";
- // 整型完以后的单位
- const cnIntLast = "元";
- // 金额整数部分
- let IntegerNum;
- // 金额小数部分
- let DecimalNum;
- // 输出的中文金额字符串
- let ChineseStr = "";
- // 正负值标记
- let Symbol = "";
- // 转成浮点数
- money = parseFloat(money);
- // 如果是0直接返回结果
- if (money === 0) {
- ChineseStr = cnNums[0] + cnIntLast + cnInteger;
- return ChineseStr;
- }
- // 如果小于0,则将Symbol标记为负,并转为正数
- if (money < 0) {
- money = -money;
- Symbol = "负 ";
- }
- // 转换为字符串
- money = money.toString();
- // 将整数部分和小数部分分别存入IntegerNum和DecimalNum
- if (money.indexOf(".") === -1) {
- IntegerNum = money;
- DecimalNum = "";
- } else {
- const moneyArr = money.split(".");
- IntegerNum = moneyArr[0];
- DecimalNum = moneyArr[1].substr(0, 4);
- }
- // 获取整型部分转换
- if (parseInt(IntegerNum, 10) > 0) {
- let zeroCount = 0;
- let IntLen = IntegerNum.length;
- for (let i = 0; i < IntLen; i++) {
- // 获取整数的每一项
- let term = IntegerNum.substr(i, 1);
- // 剩余待处理的数量
- let surplus = IntLen - i - 1;
- // 用于获取整数部分的扩展单位
- // 剩余数量除以4,比如12345,term为1时,expandUnit则为1,
- // cnIntUnits[expandUnit]对应得到的单位为万
- let expandUnit = surplus / 4;
- // 用于获取整数部分的基本单位
- // 剩余数量取余4,比如123,那么第一遍遍历term为1,surplus为2,baseUnit则为2,
- // 所以cnIntRadice[baseUnit]对应得到的基本单位为'佰'
- let baseUnit = surplus % 4;
- if (term === "0") {
- zeroCount++;
- } else {
- // 连续存在多个0的时候需要补'零'
- if (zeroCount > 0) {
- ChineseStr += cnNums[0];
- }
- // 归零
- zeroCount = 0;
- /*
- cnNums是汉字的零到玖组成的数组,term则是阿拉伯0-9,
- 直接将阿拉伯数字作为下标获取中文数字
- 例如term是0则cnNums[parseInt(term)]取的就是'零',9取的就是'玖'
- 最后加上单位就转换成功了!
- 这里只加十百千的单位
- */
- ChineseStr += cnNums[parseInt(term)] + cnIntRadice[baseUnit];
- }
- /*
- 如果baseUnit为0,意味着当前项和下一项隔了一个节权位即隔了一个逗号
- 扩展单位只有大单位进阶才需要,判断是否大单位进阶,则通过zeroCount判断
- baseUnit === 0即存在逗号,baseUnit === 0 && zeroCount < 4 意为大单位进阶
- */
- if (baseUnit === 0 && zeroCount < 4) {
- ChineseStr += cnIntUnits[expandUnit];
- }
- }
- ChineseStr += cnIntLast;
- }
- // 小数部分转换
- if (DecimalNum !== "") {
- let decLen = DecimalNum.length;
- for (let i = 0; i < decLen; i++) {
- // 同理,参考整数部分
- let term = DecimalNum.substr(i, 1);
- if (term !== "0") {
- ChineseStr += cnNums[Number(term)] + cnDecUnits[i];
- }
- }
- }
- ChineseStr = Symbol + ChineseStr;
- return ChineseStr;
- }
|