qiyunfeng-create
3 天以前 b15a997e95d715c41df3a76aecbf58ec1141ab53
src/assets/js/toolClass.js
@@ -1,55 +1,231 @@
import SparkMD5 from "spark-md5";
import SparkMD5 from 'spark-md5'
import {
  getPublicImage
} from '@/assets/js/middleGround/tool.js'
import config from './config'
import moment from "moment";
var tool = {
  secondToTime(second) {
    var minute = Math.floor(second / 60)
    var sec = second % 60
    var time
    if (second < 60) {
      time = second + '"'
    } else {
      time = sec === 0 ? minute + "'" : minute + "'" + sec + '"'
    }
    return time
  },
  setCookie: function (c_name, value, expiredays, path) {
    var exdate = new Date();
    exdate.setDate(exdate.getDate() + expiredays);
    var exdate = new Date()
    exdate.setDate(exdate.getDate() + expiredays)
    document.cookie =
      c_name +
      "=" +
      '=' +
      escape(value) +
      (expiredays == null ? "" : ";expires=" + exdate.toGMTString()) +
      (path ? ";path=" + path : "");
      (expiredays == null ? '' : ';expires=' + exdate.toGMTString()) +
      (path ? ';path=' + path : '')
  },
  getCookie: function (c_name) {
    if (document.cookie.length > 0) {
      var c_start = document.cookie.indexOf(c_name + "=");
      var c_start = document.cookie.indexOf(c_name + '=')
      if (c_start != -1) {
        c_start = c_start + c_name.length + 1;
        var c_end = document.cookie.indexOf(";", c_start);
        if (c_end == -1) c_end = document.cookie.length;
        return unescape(document.cookie.substring(c_start, c_end));
        c_start = c_start + c_name.length + 1
        var c_end = document.cookie.indexOf(';', c_start)
        if (c_end == -1) c_end = document.cookie.length
        return unescape(document.cookie.substring(c_start, c_end))
      }
    }
    return "";
    return ''
  },
  delCookie: function (name) {
    var exp = new Date();
    exp.setTime(exp.getTime() - 1);
    var cval = tool.getCookie(name);
    if (cval != null)
      document.cookie = name + "=" + cval + ";expires=" + exp.toGMTString();
    var exp = new Date()
    exp.setTime(exp.getTime() - 1)
    var cval = tool.getCookie(name)
    if (cval != null) document.cookie = name + '=' + cval + ';expires=' + exp.toGMTString()
  },
  // 强制保留2位小数,如:2,会在2后面补上00.即2.00
  toDecimal2(x) {
    var f;
    f = parseFloat(x);
    var f
    f = parseFloat(x)
    if (isNaN(f)) {
      return false;
      return false
    }
    f = Math.round(x * 100) / 100;
    var s = f.toString();
    var rs = s.indexOf(".");
    f = Math.round(x * 100) / 100
    var s = f.toString()
    var rs = s.indexOf('.')
    if (rs < 0) {
      rs = s.length;
      s += ".";
      rs = s.length
      s += '.'
    }
    while (s.length <= rs + 2) {
      s += "0";
      s += '0'
    }
    return s;
    return s
  },
};
  formateTime(date) {
    var newDate = new Date(+new Date(date) + 8 * 3600 * 1000)
      .toISOString()
      .replace(/T/g, ' ')
      .replace(/\.[\d]{3}Z/, '')
    var time = new Date(newDate)
    return time.getTime()
  }
}
//处理表单提交数据
export function worksData(res) {
  let arr = []
  for (let i = 0; i < res.length; i++) {
    const item = res[i]
    if (item.typeField) {
      if (item.typeField.config) {
        item.typeField.options = JSON.parse(item.typeField.config).option
      }
      arr.push(item.typeField)
    }
  }
  return arr
}
export function worksDataBytool(res, value, linkList) {
  let arr = []
  let nrr = []
  if (linkList && linkList.length > 0) {
    linkList.forEach((e) =>
      nrr.push({
        linkProtectType: e.linkProtectType,
        linkType: e.linkType,
        md5: e.md5
      })
    )
  }
  res.forEach((item) => {
    const obj = {
      baseType: item.typeField.baseType,
      order: 0,
      typeFieldId: item.typeField.id,
      sequenceNum: item.config ? JSON.parse(item.config).uuid : '',
      newDataAndFileLinkListRequest: []
    }
    for (let k in value) {
      if (item.typeField.refCode === k) {
        if (item.typeField.type == 'File') {
          try {
            obj.strValue = JSON.stringify(value[k].map((citem) => citem.md5))
          } catch (error) {
            obj.strValue = ''
          }
          obj.newDataAndFileLinkListRequest = nrr
        } else {
          if (typeof value[k] == 'object') {
            obj.strValue = JSON.stringify(value[k])
          } else {
            if (obj.baseType === 'String') {
              obj.strValue = value[k] + ''
            } else if (obj.baseType === 'Text') {
              obj.textValue = value[k] + ''
            } else {
              obj.strValue = value[k] + ''
            }
          }
        }
      }
    }
    // if (obj.strValue || obj.textValue) {
    arr.push(obj)
    // }
  })
  return arr
}
export function UpdateworksDataBytool(initData, res, value, linkList) {
  let arr = []
  let newArr = []
  for (let i = 0; i < initData.length; i++) {
    const ele = initData[i]
    for (let j = 0; j < res.length; j++) {
      const item = res[j]
      if (item.sequenceNum == ele.sequenceNum) {
        item.refCode = ele.typeField.refCode
      }
    }
  }
  initData.forEach((citem) => {
    const updateOldData = res.find((f) => f.sequenceNum == citem.sequenceNum)
    if (updateOldData) {
      const obj = {
        baseType: citem.typeField.baseType,
        order: 0,
        id: updateOldData.id,
        typeFieldId: citem.typeField.id,
        sequenceNum: citem.sequenceNum,
        setDataAndFileLinkListRequest: []
      }
      for (let k in value) {
        if (citem.typeField.refCode === k) {
          if (typeof value[k] == 'object' && k != 'region') {
            obj.strValue = JSON.stringify(linkList)
            obj.setDataAndFileLinkListRequest = linkList
          } else if (typeof value[k] == 'object' && k == 'region') {
            obj.strValue = value[k]?.join('/')
            obj.setDataAndFileLinkListRequest = [{
              area: value[k]
            }]
          } else {
            obj.strValue = value[k].toString()
          }
        }
      }
      if (obj.strValue) {
        arr.push(obj)
      }
    } else {
      const newObj = {
        baseType: citem.typeField.baseType,
        order: 0,
        typeFieldId: citem.typeField.id,
        sequenceNum: citem.sequenceNum,
        setDataAndFileLinkListRequest: []
      }
      for (let k in value) {
        if (citem.typeField.refCode === k) {
          if (typeof value[k] == 'object') {
            newObj.strValue = JSON.stringify(linkList)
            newObj.setDataAndFileLinkListRequest = linkList
          } else {
            newObj.strValue = value[k].toString()
          }
        }
      }
      if (newObj.strValue) {
        newArr.push(newObj)
      }
    }
  })
  return {
    updateData: arr,
    newData: newArr
  }
}
export function download(url) {
  const iframe = document.createElement('iframe')
  iframe.setAttribute('hidden', 'hidden')
  document.body.appendChild(iframe)
  iframe.onload = () => {
    if (iframe) {
      iframe.setAttribute('src', 'about:blank')
    }
  }
  iframe.setAttribute('src', url)
}
/**
 * 获取一个UUID
@@ -58,153 +234,323 @@
 * @returns {string}
 */
export function uuid(len = 32, radix = 16) {
  const chars =
    "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split("");
  const chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('')
  let uuid = [],
    i;
  radix = radix || chars.length;
    i
  radix = radix || chars.length
  if (len) {
    // Compact form
    for (i = 0; i < len; i++) uuid[i] = chars[0 | (Math.random() * radix)];
    for (i = 0; i < len; i++) uuid[i] = chars[0 | (Math.random() * radix)]
  } else {
    // rfc4122, version 4 form
    let r;
    let r
    // rfc4122 requires these characters
    uuid[8] = uuid[13] = uuid[18] = uuid[23] = "-";
    uuid[14] = "4";
    uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-'
    uuid[14] = '4'
    // Fill in random data.  At i==19 set the high bits of clock sequence as
    // per rfc4122, sec. 4.1.5
    for (i = 0; i < 36; i++) {
      if (!uuid[i]) {
        r = 0 | (Math.random() * 16);
        uuid[i] = chars[i === 19 ? (r & 0x3) | 0x8 : r];
        r = 0 | (Math.random() * 16)
        uuid[i] = chars[i === 19 ? (r & 0x3) | 0x8 : r]
      }
    }
  }
  return uuid.join("");
  return uuid.join('')
}
export function getFileMd5(file, chunkSize) {
  return new Promise((resolve, reject) => {
    let blobSlice =
      File.prototype.slice ||
      File.prototype.mozSlice ||
      File.prototype.webkitSlice;
    let chunks = Math.ceil(file.size / chunkSize);
    let currentChunk = 0;
    let spark = new SparkMD5.ArrayBuffer();
    let fileReader = new FileReader();
    let blobSlice = File.prototype.slice || File.prototype.mozSlice || File.prototype.webkitSlice
    let chunks = Math.ceil(file.size / chunkSize)
    let currentChunk = 0
    let spark = new SparkMD5.ArrayBuffer()
    let fileReader = new FileReader()
    fileReader.onload = function (e) {
      spark.append(e.target.result);
      currentChunk++;
      spark.append(e.target.result)
      currentChunk++
      if (currentChunk < chunks) {
        loadNext();
        loadNext()
      } else {
        const md5 = spark.end();
        resolve(md5);
        const md5 = spark.end()
        resolve(md5)
      }
    };
    }
    fileReader.onerror = function (e) {
      reject(e);
    };
      reject(e)
    }
    function loadNext() {
      let start = currentChunk * chunkSize;
      let end = start + chunkSize;
      let start = currentChunk * chunkSize
      let end = start + chunkSize
      if (end > file.size) {
        end = file.size;
        end = file.size
      }
      fileReader.readAsArrayBuffer(blobSlice.call(file, start, end));
      fileReader.readAsArrayBuffer(blobSlice.call(file, start, end))
    }
    loadNext();
  });
    loadNext()
  })
}
export function worksDataBytool(res, value, linkList) {
  let arr = [];
  res.forEach((item) => {
    const obj = {
      baseType: item.typeField.baseType,
      order: 0,
      typeFieldId: item.typeField.id,
      sequenceNum: item.config ? JSON.parse(item.config).uuid : "",
      newDataAndFileLinkListRequest: [],
    };
    for (let k in value) {
      if (item.typeField.refCode === k) {
        if (typeof value[k] == "object") {
          obj.strValue = JSON.stringify(value[k]);
          obj.newDataAndFileLinkListRequest = linkList;
        } else {
          obj.strValue = value[k];
// 获取文件
export function getPublicFile(md5, isToken) {
  const {
    tokenKey,
    requestCtx
  } = config
  let src = null
  let token = localStorage.getItem(tokenKey)
  if (md5) {
    if (isToken) {
      src = requestCtx + `/file/api/ApiDownloadForAuthorize?md5=${md5}&token=${token}`
    } else {
      src = requestCtx + `/file/api/ApiDownload?md5=${md5}`
    }
  } else {
    return ''
  }
  return src
}
export const handleCmsItemListRequestData = (datas, fields, path, storeId, repositoryId) => {
  const dataList = [];
  for (let i = 0; i < datas.length; i++) {
    const item = datas[i];
    const _fields = {};
    const _datas = [];
    if (fields != null) {
      for (let fieldKey in fields) {
        // 兼容筛选条件的字段值获取,因为后台筛选和取值只能传一个,都会返回值
        fieldKey = fieldKey.replace(/[!=<>*]/g, '');
        if (item.datas[fieldKey]) {
          let values = [];
          if (typeof item.datas[fieldKey] == 'string') {
            values = JSON.parse(item.datas[fieldKey]);
          } else {
            values = item.datas[fieldKey];
          }
          if (values ?.length > 0) {
            // 用字段名处理返回的字段值
            if (values[0].Value) {
              _fields[fieldKey] = values[0].Value;
              values[0].sequenceNum = values[0].SequenceNum;
            }
            // 兼容处理数据返回的key是CmsItemData
            // if (values[0].CmsItemData) {
            //   _fields[fieldKey] = values[0].CmsItemData.Value;
            //   values[0].sequenceNum = values[0].CmsItemData.SequenceNum;
            // }
            item.datas[fieldKey] = values[0];
            if (values ?.length > 1) {
              const isFile = values.find((citem) => citem.FileList ?.length > 0);
              const dataItems = deduplicateArray(values, 'FieldId');
              if (!isFile) {
                _datas.push(dataItems[0]);
              } else {
                const customFile = {
                  customFileList: values,
                  name: fieldKey,
                  md5: _fields[fieldKey],
                  FieldId: values[0].FieldId,
                  SequenceNum: values[0].SequenceNum
                };
                _datas.push(customFile);
              }
            } else {
              _datas.push(values[0]);
            }
          }
        }
      }
    }
    if (obj.strValue) {
      arr.push(obj);
    }
  });
  return arr;
}
export function resultsBytool(res, value) {
  let obj = {};
  res.forEach((item, i) => {
    item.sequenceNum = item.config ? JSON.parse(item.config).uuid : "";
    value.forEach((e) => {
      if (item.sequenceNum == e.sequenceNum) {
        try {
          const val = JSON.parse(e.value);
          obj[item.typeField.refCode] = val;
        } catch (error) {
          obj[item.typeField.refCode] = e.value;
        }
    if (item.datas.LogQuery) {
      item.datas.LogQuery = JSON.parse(item.datas.LogQuery);
    }
    const subDatas = {};
    if (item.subDatas) {
      for (let subData of item.subDatas) {
        const tag = subData.queryTag.replace('Query', '');
        subDatas[tag] = subData.datas;
      }
    }
    dataList.push({
      ...item,
      id: item.id,
      name: item.datas.Name ? item.datas.Name : item.name,
      icon: item.datas.Icon,
      storeId: storeId,
      repositoryId: repositoryId,
      refCode: item.datas.RefCode === '[]' ? null : item.datas.RefCode,
      state: item.datas.State,
      type: item.datas.Type,
      tag: item.datas.Tag,
      creator: item.datas.Creator ? JSON.parse(item.datas.Creator) : undefined,
      linkType: item.datas.LinkType,
      childrenCount: parseInt(item.datas.ChildrenCount ?? '0'),
      childrenFolderCount: parseInt(item.datas.ChildrenFolderCount ?? '0'),
      childrenChannelCount: parseInt(item.datas.ChildrenChannelCount ?? '0'),
      childrenCmsItemCount: parseInt(item.datas.ChildrenCmsItemCount ?? '0'),
      childrenFileCount: parseInt(item.datas.ChildrenFileCount ?? '0'),
      createDate: moment(item.datas.CreateDate).format('YYYY-MM-DD HH:mm:ss'),
      description: item.datas.Description,
      sysType: item.datas.SysType,
      idPath: path + '\\' + item.id,
      typeId: parseInt(item.datas.TypeId),
      linkAppId: item.datas.linkAppId,
      linkFile: JSON.parse(item.datas.LinkFile ?? '[]'),
      PublishInfo: JSON.parse(item.datas.PublishInfo ?? '[]'),
      linkInfo: item.datas.LinkInfo ? JSON.parse(item.datas.LinkInfo) : [],
      linkPath: item.datas.LinkPath ?? null,
      linkOrg: item.datas.LinkOrg ? JSON.parse(item.datas.LinkOrg) : [],
      linkDepartment: item.datas.LinkDepartment? JSON.parse(item.datas.LinkDepartment) : [],
      ..._fields,
      datas: item.datas,
      fieldList: _datas,
      subDatas
    });
  });
  return obj;
}
  }
  return dataList;
};
export function UpdateworksDataBytool(initData, res, value, linkList) {
  let arr = [];
  for (let i = 0; i < initData.length; i++) {
    const ele = initData[i];
    for (let j = 0; j < res.length; j++) {
      const item = res[j];
      if (item.sequenceNum == ele.sequenceNum) {
        item.refCode = ele.typeField.refCode;
// type结构处理
export const handleTypeList = (list) => {
  for (let i = 0; i < list.length; i++) {
    const type = list[i];
    try {
      type.cfg = JSON.parse(type.config);
    } catch (error) {
      type.cfg = null;
    }
    const fieldRefcodeMap = {};
    const tableHeaderFieldList = [];
    const isSearchFieldList = [];
    const isAdvSearchFieldList = [];
    const isFilterFieldList = [];
    handleType({
      typeFieldList: type.typeLinkList,
      fieldRefcodeMap,
      tableHeaderFieldList,
      isSearchFieldList,
      isAdvSearchFieldList,
      isFilterFieldList
    });
    type.fieldRefcodeMap = fieldRefcodeMap;
    type.tableHeaderFieldList = tableHeaderFieldList;
    type.isSearchFieldList = isSearchFieldList;
    type.isAdvSearchFieldList = isAdvSearchFieldList;
    type.isFilterFieldList = isFilterFieldList;
  }
  return list;
};
const handleType = ({
  typeFieldList,
  fieldRefcodeMap,
  tableHeaderFieldList,
  isSearchFieldList,
  isAdvSearchFieldList,
  isFilterFieldList
}) => {
  for (let i = 0; i < typeFieldList.length; i++) {
    const item = typeFieldList[i];
    try {
      item.cfg = JSON.parse(item.config);
    } catch (error) {
      item.cfg = null;
    }
    if (item.typeField) {
      try {
        item.typeField.cfg = JSON.parse(item.typeField.config);
      } catch (error) {
        item.typeField.cfg = null;
      }
      fieldRefcodeMap[item.typeField.refCode] = item;
    }
    if (item.cfg && item.cfg.isColHeader) {
      tableHeaderFieldList.push(item);
    }
    if (item.cfg && item.cfg.isSearch) {
      isSearchFieldList.push(item);
    }
    if (item.cfg && item.cfg.isAdvSearch) {
      isAdvSearchFieldList.push(item);
    }
    if (item.cfg && item.cfg.isFilter) {
      isFilterFieldList.push(item);
    }
    if (item.children && item.children.length) {
      handleType({
        typeFieldList: item.children,
        fieldRefcodeMap,
        tableHeaderFieldList,
        isSearchFieldList,
        isAdvSearchFieldList,
        isFilterFieldList
      });
    }
  }
  res.forEach((item) => {
};
//处理树形结构
const handleTreeData = (datas, parent, noTriggerSelect = false) => {
  let parentData = {};
  if (parent) {
    parentData = { ...parent, parent: null };
  } else {
    parentData = null;
  }
  const list = [];
  for (let i = 0; i < datas.length; i++) {
    const data = datas[i];
    const obj = {
      baseType: item.baseType,
      order: 0,
      id: item.id,
      typeFieldId: item.fieldId,
      sequenceNum: item.sequenceNum,
      setDataAndFileLinkListRequest: [],
      label: data.name,
      key: parentData ? parentData.key + "_" + i : i + "",
      namePath: parentData ? parentData.namePath + "\\" + data.name : data.name,
      icon: data.icon,
      data: data,
      parent: parentData,
      leaf: false,
      children: [],
    };
    for (let k in value) {
      if (item.refCode === k) {
        if (typeof value[k] == "object") {
          obj.strValue = JSON.stringify(value[k]);
          obj.setDataAndFileLinkListRequest = linkList;
        } else {
          obj.strValue = value[k].toString();
        }
      }
    if (data["children"] && data["children"].length) {
      obj.leaf = false;
      obj.children = handleTreeData(
        data["children"],
        {
          ...data,
          key: obj.key,
          namePath: obj.namePath,
        },
        i == 0 ? false : true // 如果有子数据处理,只有第一条数据需要展开和回调
      );
    } else {
      obj.leaf =
        !data["childrenChannelCount"] || data["childrenChannelCount"] == 0;
    }
    if (obj.strValue) {
      arr.push(obj);
    }
  });
  return arr;
}
    list.push(obj);
  }
  console.log(list, "list");
  return list;
};
//获取资源
export default {
  ...tool,
@@ -212,5 +558,10 @@
  getFileMd5,
  worksDataBytool,
  UpdateworksDataBytool,
  resultsBytool,
};
  getPublicImage,
  worksData,
  getPublicFile,
  handleTypeList,
  handleTreeData,
  // parseHtml,
}