|  | @@ -0,0 +1,416 @@
 | 
	
		
			
				|  |  | +import { useMessage } from '/@/hooks/web/useMessage';
 | 
	
		
			
				|  |  | +import { defHttp } from '/@/utils/http/axios';
 | 
	
		
			
				|  |  | +import { useGlobSetting } from '/@/hooks/setting';
 | 
	
		
			
				|  |  | +const globSetting = useGlobSetting();
 | 
	
		
			
				|  |  | +const baseUploadUrl = globSetting.uploadUrl;
 | 
	
		
			
				|  |  | +import { ref, toRaw, unref, reactive } from 'vue';
 | 
	
		
			
				|  |  | +import { uploadMyFile } from '/@/api/common/api';
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +import excel from '/@/assets/svg/fileType/excel.svg';
 | 
	
		
			
				|  |  | +import other from '/@/assets/svg/fileType/other.svg';
 | 
	
		
			
				|  |  | +import pdf from '/@/assets/svg/fileType/pdf.svg';
 | 
	
		
			
				|  |  | +import txt from '/@/assets/svg/fileType/txt.svg';
 | 
	
		
			
				|  |  | +import word from '/@/assets/svg/fileType/word.svg';
 | 
	
		
			
				|  |  | +import { getFileAccessHttpUrl } from '/@/utils/common/compUtils';
 | 
	
		
			
				|  |  | +import { createImgPreview } from '/@/components/Preview';
 | 
	
		
			
				|  |  | +import {EmojiIndex} from "emoji-mart-vue-fast/src";
 | 
	
		
			
				|  |  | +import data from "emoji-mart-vue-fast/data/apple.json";
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +enum Api {
 | 
	
		
			
				|  |  | +  list = '/sys/comment/listByForm',
 | 
	
		
			
				|  |  | +  addText = '/sys/comment/addText',
 | 
	
		
			
				|  |  | +  deleteOne = '/sys/comment/deleteOne',
 | 
	
		
			
				|  |  | +  fileList = '/sys/comment/fileList',
 | 
	
		
			
				|  |  | +  logList = '/sys/dataLog/queryDataVerList',
 | 
	
		
			
				|  |  | +  queryById = '/sys/comment/queryById',
 | 
	
		
			
				|  |  | +  getFileViewDomain = '/sys/comment/getFileViewDomain',
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +// 文件预览地址的domain 在后台配置的
 | 
	
		
			
				|  |  | +let onlinePreviewDomain = '';
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/**
 | 
	
		
			
				|  |  | + * 获取文件预览的domain
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +const getViewFileDomain = () => defHttp.get({ url: Api.getFileViewDomain });
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/**
 | 
	
		
			
				|  |  | + * 列表接口
 | 
	
		
			
				|  |  | + * @param params
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +export const list = (params) => defHttp.get({ url: Api.list, params });
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/**
 | 
	
		
			
				|  |  | + * 查询单条记录
 | 
	
		
			
				|  |  | + * @param params
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +export const queryById = (id) => {
 | 
	
		
			
				|  |  | +  let params = { id: id };
 | 
	
		
			
				|  |  | +  return defHttp.get({ url: Api.queryById, params },{ isTransformResponse: false });
 | 
	
		
			
				|  |  | +};
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/**
 | 
	
		
			
				|  |  | + * 文件列表接口
 | 
	
		
			
				|  |  | + * @param params
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +export const fileList = (params) => defHttp.get({ url: Api.fileList, params });
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/**
 | 
	
		
			
				|  |  | + * 删除单个
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +export const deleteOne = (params) => {
 | 
	
		
			
				|  |  | +  return defHttp.delete({ url: Api.deleteOne, params }, { joinParamsToUrl: true });
 | 
	
		
			
				|  |  | +};
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/**
 | 
	
		
			
				|  |  | + * 保存
 | 
	
		
			
				|  |  | + * @param params
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +export const saveOne = (params) => {
 | 
	
		
			
				|  |  | +  let url = Api.addText;
 | 
	
		
			
				|  |  | +  return defHttp.post({ url: url, params }, { isTransformResponse: false });
 | 
	
		
			
				|  |  | +};
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/**
 | 
	
		
			
				|  |  | + * 数据日志列表接口
 | 
	
		
			
				|  |  | + * @param params
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +export const getLogList = (params) => defHttp.get({ url: Api.logList, params }, {isTransformResponse: false});
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/**
 | 
	
		
			
				|  |  | + * 文件上传接口
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +export const uploadFileUrl = `${baseUploadUrl}/sys/comment/addFile`;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +export function useCommentWithFile(props) {
 | 
	
		
			
				|  |  | +  let uploadData = {
 | 
	
		
			
				|  |  | +    biz: 'comment',
 | 
	
		
			
				|  |  | +    commentId: '',
 | 
	
		
			
				|  |  | +  };
 | 
	
		
			
				|  |  | +  const { createMessage } = useMessage();
 | 
	
		
			
				|  |  | +  const buttonLoading = ref(false);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  //确定按钮触发
 | 
	
		
			
				|  |  | +  async function saveCommentAndFiles(obj, fileList) {
 | 
	
		
			
				|  |  | +    buttonLoading.value = true;
 | 
	
		
			
				|  |  | +    setTimeout(() => {
 | 
	
		
			
				|  |  | +      buttonLoading.value = false;
 | 
	
		
			
				|  |  | +    }, 500);
 | 
	
		
			
				|  |  | +    await saveComment(obj);
 | 
	
		
			
				|  |  | +    await uploadFiles(fileList);
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  /**
 | 
	
		
			
				|  |  | +   * 保存评论
 | 
	
		
			
				|  |  | +   */
 | 
	
		
			
				|  |  | +  async function saveComment(obj) {
 | 
	
		
			
				|  |  | +    const {fromUserId, toUserId, commentId, commentContent} = obj;
 | 
	
		
			
				|  |  | +    let commentData = {
 | 
	
		
			
				|  |  | +      tableName: props.tableName,
 | 
	
		
			
				|  |  | +      tableDataId: props.dataId,
 | 
	
		
			
				|  |  | +      fromUserId,
 | 
	
		
			
				|  |  | +      commentContent,
 | 
	
		
			
				|  |  | +      toUserId: '',
 | 
	
		
			
				|  |  | +      commentId: ''
 | 
	
		
			
				|  |  | +    };
 | 
	
		
			
				|  |  | +    if(toUserId){
 | 
	
		
			
				|  |  | +      commentData.toUserId = toUserId;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    if(commentId){
 | 
	
		
			
				|  |  | +      commentData.commentId = commentId;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    uploadData.commentId = '';
 | 
	
		
			
				|  |  | +    const res = await saveOne(commentData);
 | 
	
		
			
				|  |  | +    if (res.success) {
 | 
	
		
			
				|  |  | +      uploadData.commentId = res.result;
 | 
	
		
			
				|  |  | +    } else {
 | 
	
		
			
				|  |  | +      createMessage.warning(res.message);
 | 
	
		
			
				|  |  | +      return Promise.reject('保存评论失败');
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  async function uploadOne(file) {
 | 
	
		
			
				|  |  | +    let url = uploadFileUrl;
 | 
	
		
			
				|  |  | +    const formData = new FormData();
 | 
	
		
			
				|  |  | +    formData.append('file', file);
 | 
	
		
			
				|  |  | +    formData.append('tableName', props.tableName);
 | 
	
		
			
				|  |  | +    formData.append('tableDataId', props.dataId);
 | 
	
		
			
				|  |  | +    Object.keys(uploadData).map((k) => {
 | 
	
		
			
				|  |  | +      formData.append(k, uploadData[k]);
 | 
	
		
			
				|  |  | +    });
 | 
	
		
			
				|  |  | +    return new Promise((resolve, reject) => {
 | 
	
		
			
				|  |  | +      uploadMyFile(url, formData).then((res: any) => {
 | 
	
		
			
				|  |  | +        console.log('uploadMyFile', res);
 | 
	
		
			
				|  |  | +        if (res && res.data) {
 | 
	
		
			
				|  |  | +          if (res.data.result == 'success') {
 | 
	
		
			
				|  |  | +            resolve(1);
 | 
	
		
			
				|  |  | +          } else {
 | 
	
		
			
				|  |  | +            createMessage.warning(res.data.message);
 | 
	
		
			
				|  |  | +            reject();
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +        } else {
 | 
	
		
			
				|  |  | +          reject();
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +      });
 | 
	
		
			
				|  |  | +    });
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  async function uploadFiles(fileList) {
 | 
	
		
			
				|  |  | +    if (fileList && fileList.length > 0) {
 | 
	
		
			
				|  |  | +      for (let i = 0; i < fileList.length; i++) {
 | 
	
		
			
				|  |  | +        let file = toRaw(fileList[i]);
 | 
	
		
			
				|  |  | +        await uploadOne(file.originFileObj);
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  return {
 | 
	
		
			
				|  |  | +    saveCommentAndFiles,
 | 
	
		
			
				|  |  | +    buttonLoading,
 | 
	
		
			
				|  |  | +  };
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +export function uploadMu(fileList) {
 | 
	
		
			
				|  |  | +  const formData = new FormData();
 | 
	
		
			
				|  |  | +  // let arr = []
 | 
	
		
			
				|  |  | +  for(let file of fileList){
 | 
	
		
			
				|  |  | +    formData.append('files[]', file.originFileObj);
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +  console.log(formData)
 | 
	
		
			
				|  |  | +  let url = `${baseUploadUrl}/sys/comment/addFile2`;
 | 
	
		
			
				|  |  | +  uploadMyFile(url, formData).then((res: any) => {
 | 
	
		
			
				|  |  | +    console.log('uploadMyFile', res);
 | 
	
		
			
				|  |  | +  });
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/**
 | 
	
		
			
				|  |  | + * 显示文件列表
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +export function useFileList() {
 | 
	
		
			
				|  |  | +  const imageSrcMap = reactive({});
 | 
	
		
			
				|  |  | +  const typeMap = {
 | 
	
		
			
				|  |  | +    xls: excel,
 | 
	
		
			
				|  |  | +    xlsx: excel,
 | 
	
		
			
				|  |  | +    pdf: pdf,
 | 
	
		
			
				|  |  | +    txt: txt,
 | 
	
		
			
				|  |  | +    docx: word,
 | 
	
		
			
				|  |  | +    doc: word,
 | 
	
		
			
				|  |  | +  };
 | 
	
		
			
				|  |  | +   function getBackground(item) {
 | 
	
		
			
				|  |  | +    console.log('获取文件背景图', item);
 | 
	
		
			
				|  |  | +    if (isImage(item)) {
 | 
	
		
			
				|  |  | +      return 'none'
 | 
	
		
			
				|  |  | +    } else {
 | 
	
		
			
				|  |  | +      const name = item.name;
 | 
	
		
			
				|  |  | +      if(!name){
 | 
	
		
			
				|  |  | +        return 'none';
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +      const suffix = name.substring(name.lastIndexOf('.') + 1);
 | 
	
		
			
				|  |  | +      console.log('suffix', suffix)
 | 
	
		
			
				|  |  | +      let bg = typeMap[suffix];
 | 
	
		
			
				|  |  | +      if (!bg) {
 | 
	
		
			
				|  |  | +        bg = other;
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +      return bg;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  function getBase64(file, id){
 | 
	
		
			
				|  |  | +    return new Promise((resolve, reject) => {
 | 
	
		
			
				|  |  | +      //声明js的文件流
 | 
	
		
			
				|  |  | +      let reader = new FileReader();
 | 
	
		
			
				|  |  | +      if(file){
 | 
	
		
			
				|  |  | +        //通过文件流将文件转换成Base64字符串
 | 
	
		
			
				|  |  | +        reader.readAsDataURL(file);
 | 
	
		
			
				|  |  | +        //转换成功后
 | 
	
		
			
				|  |  | +        reader.onload = function () {
 | 
	
		
			
				|  |  | +          let base = reader.result;
 | 
	
		
			
				|  |  | +          console.log('base', base)
 | 
	
		
			
				|  |  | +          imageSrcMap[id] = base;
 | 
	
		
			
				|  |  | +          console.log('imageSrcMap', imageSrcMap)
 | 
	
		
			
				|  |  | +          resolve(base)
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +      }else{
 | 
	
		
			
				|  |  | +        reject();
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +    })
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +  function handleImageSrc(file){
 | 
	
		
			
				|  |  | +    if(isImage(file)){
 | 
	
		
			
				|  |  | +      let id = file.uid;
 | 
	
		
			
				|  |  | +      getBase64(file, id);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  function downLoad(file) {
 | 
	
		
			
				|  |  | +    let url = getFileAccessHttpUrl(file.url);
 | 
	
		
			
				|  |  | +    if (url) {
 | 
	
		
			
				|  |  | +      window.open(url);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  function getFileSize(item) {
 | 
	
		
			
				|  |  | +    let size = item.fileSize;
 | 
	
		
			
				|  |  | +    if (!size) {
 | 
	
		
			
				|  |  | +      return '0B';
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    let temp = Math.round(size / 1024);
 | 
	
		
			
				|  |  | +    return temp + ' KB';
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  const selectFileList = ref<any[]>([]);
 | 
	
		
			
				|  |  | +  function beforeUpload(file) {
 | 
	
		
			
				|  |  | +    handleImageSrc(file);
 | 
	
		
			
				|  |  | +    selectFileList.value = [...selectFileList.value, file];
 | 
	
		
			
				|  |  | +    console.log('selectFileList', unref(selectFileList));
 | 
	
		
			
				|  |  | +    return false
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  function handleRemove(file) {
 | 
	
		
			
				|  |  | +    const index = selectFileList.value.indexOf(file);
 | 
	
		
			
				|  |  | +    const newFileList = selectFileList.value.slice();
 | 
	
		
			
				|  |  | +    newFileList.splice(index, 1);
 | 
	
		
			
				|  |  | +    selectFileList.value = newFileList;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  function isImage(item){
 | 
	
		
			
				|  |  | +    const type = item.type||'';
 | 
	
		
			
				|  |  | +    if (type.indexOf('image') >= 0) {
 | 
	
		
			
				|  |  | +      return true;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    return false;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  function getImageSrc(file){
 | 
	
		
			
				|  |  | +    if(isImage(file)){
 | 
	
		
			
				|  |  | +      let id = file.uid;
 | 
	
		
			
				|  |  | +      if(id){
 | 
	
		
			
				|  |  | +        if(imageSrcMap[id]){
 | 
	
		
			
				|  |  | +          return imageSrcMap[id];
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +      }else if(file.url){
 | 
	
		
			
				|  |  | +        //数据库中地址
 | 
	
		
			
				|  |  | +        let url = getFileAccessHttpUrl(file.url);
 | 
	
		
			
				|  |  | +        return url;
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    return ''
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  /**
 | 
	
		
			
				|  |  | +   * 显示图片
 | 
	
		
			
				|  |  | +   * @param item
 | 
	
		
			
				|  |  | +   */
 | 
	
		
			
				|  |  | +  function getImageAsBackground(item){
 | 
	
		
			
				|  |  | +    let url = getImageSrc(item);
 | 
	
		
			
				|  |  | +    if(url){
 | 
	
		
			
				|  |  | +      return {
 | 
	
		
			
				|  |  | +        "backgroundImage": "url('"+url+"')"
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    return {}
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  /**
 | 
	
		
			
				|  |  | +   * 预览列表 cell 图片
 | 
	
		
			
				|  |  | +   * @param text
 | 
	
		
			
				|  |  | +   */
 | 
	
		
			
				|  |  | +  async function viewImage(file) {
 | 
	
		
			
				|  |  | +    if(isImage(file)){
 | 
	
		
			
				|  |  | +      let text = getImageSrc(file)
 | 
	
		
			
				|  |  | +      if (text) {
 | 
	
		
			
				|  |  | +        let imgList = [text];
 | 
	
		
			
				|  |  | +        createImgPreview({ imageList: imgList });
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +    }else{
 | 
	
		
			
				|  |  | +      if(file.url){
 | 
	
		
			
				|  |  | +        //数据库中地址
 | 
	
		
			
				|  |  | +        let url = getFileAccessHttpUrl(file.url);
 | 
	
		
			
				|  |  | +        await initViewDomain();
 | 
	
		
			
				|  |  | +        //本地测试需要将文件地址的localhost/127.0.0.1替换成IP, 或是直接修改全局domain
 | 
	
		
			
				|  |  | +        //url = url.replace('localhost', '192.168.1.100')
 | 
	
		
			
				|  |  | +        //如果集成的KkFileview-v3.3.0+ 需要对url再做一层base64编码 encodeURIComponent(encryptByBase64(url))
 | 
	
		
			
				|  |  | +        window.open(onlinePreviewDomain+'?officePreviewType=pdf&url='+encodeURIComponent(url));
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  /**
 | 
	
		
			
				|  |  | +   * 初始化domain
 | 
	
		
			
				|  |  | +   */
 | 
	
		
			
				|  |  | +  async function initViewDomain(){
 | 
	
		
			
				|  |  | +    if(!onlinePreviewDomain){
 | 
	
		
			
				|  |  | +      onlinePreviewDomain = await getViewFileDomain();
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    if(!onlinePreviewDomain.startsWith('http')){
 | 
	
		
			
				|  |  | +      onlinePreviewDomain = 'http://'+ onlinePreviewDomain;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  return {
 | 
	
		
			
				|  |  | +    selectFileList,
 | 
	
		
			
				|  |  | +    getBackground,
 | 
	
		
			
				|  |  | +    getFileSize,
 | 
	
		
			
				|  |  | +    downLoad,
 | 
	
		
			
				|  |  | +    beforeUpload,
 | 
	
		
			
				|  |  | +    handleRemove,
 | 
	
		
			
				|  |  | +    isImage,
 | 
	
		
			
				|  |  | +    getImageSrc,
 | 
	
		
			
				|  |  | +    getImageAsBackground,
 | 
	
		
			
				|  |  | +    viewImage
 | 
	
		
			
				|  |  | +  };
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/**
 | 
	
		
			
				|  |  | + * 用于emoji渲染
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +export function useEmojiHtml(){
 | 
	
		
			
				|  |  | +  const COLONS_REGEX = new RegExp('([^:]+)?(:[a-zA-Z0-9-_+]+:(:skin-tone-[2-6]:)?)','g');
 | 
	
		
			
				|  |  | +  let emojisToShowFilter = function() {
 | 
	
		
			
				|  |  | +    return true;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +  let emojiIndex = new EmojiIndex(data, {
 | 
	
		
			
				|  |  | +    emojisToShowFilter,
 | 
	
		
			
				|  |  | +    exclude:['recent','people','nature','foods','activity','places','objects','symbols','flags']
 | 
	
		
			
				|  |  | +  });
 | 
	
		
			
				|  |  | +  
 | 
	
		
			
				|  |  | +  function getHtml(text) {
 | 
	
		
			
				|  |  | +    if(!text){
 | 
	
		
			
				|  |  | +      return ''
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    return text.replace(COLONS_REGEX, function (match, p1, p2) {
 | 
	
		
			
				|  |  | +      const before = p1 || ''
 | 
	
		
			
				|  |  | +      if (endsWith(before, 'alt="') || endsWith(before, 'data-text="')) {
 | 
	
		
			
				|  |  | +        return match
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +      let emoji = emojiIndex.findEmoji(p2)
 | 
	
		
			
				|  |  | +      if (!emoji) {
 | 
	
		
			
				|  |  | +        return match
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +      return before + emoji2Html(emoji)
 | 
	
		
			
				|  |  | +    })
 | 
	
		
			
				|  |  | +    return text;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  function endsWith(str, temp){
 | 
	
		
			
				|  |  | +    return str.endsWith(temp)
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  function emoji2Html(emoji) {
 | 
	
		
			
				|  |  | +    let style = `position: absolute;top: -3px;left: 3px;width: 18px; height: 18px;background-position: ${emoji.getPosition()}`
 | 
	
		
			
				|  |  | +    return `<span style="width: 24px" class="emoji-mart-emoji"><span class="my-emoji-icon emoji-set-apple emoji-type-image" style="${style}"> </span> </span>`
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +  
 | 
	
		
			
				|  |  | +  return {
 | 
	
		
			
				|  |  | +    emojiIndex,
 | 
	
		
			
				|  |  | +    getHtml
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/**
 | 
	
		
			
				|  |  | + * 获取modal窗体高度
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +export function getModalHeight(){
 | 
	
		
			
				|  |  | +  return window.innerHeight;
 | 
	
		
			
				|  |  | +}
 |