132 lines
3.4 KiB
TypeScript
132 lines
3.4 KiB
TypeScript
![]() |
import { h } from 'vue';
|
||
|
import { Avatar,Tag, Tooltip } from 'ant-design-vue';
|
||
|
import { getFileAccessHttpUrl } from '/@/utils/common/compUtils';
|
||
|
import { Tinymce } from '/@/components/Tinymce';
|
||
|
import Icon from '/@/components/Icon';
|
||
|
import { getDictItemsByCode } from '/@/utils/dict/index';
|
||
|
import { filterMultiDictText } from '/@/utils/dict/JDictSelectUtil.js';
|
||
|
import { loadCategoryData } from '/@/api/common/api';
|
||
|
import {isEmpty} from "/@/utils/is";
|
||
|
|
||
|
const render = {
|
||
|
/**
|
||
|
* 渲染列表头像
|
||
|
*/
|
||
|
renderAvatar: ({ record }) => {
|
||
|
if (record.avatar) {
|
||
|
let avatarList = record.avatar.split(',');
|
||
|
return h('span', avatarList.map((item) => {
|
||
|
return h(Avatar, { src: getFileAccessHttpUrl(item), shape: 'square', size: 'default', style: { marginRight: '5px' } });
|
||
|
}));
|
||
|
} else {
|
||
|
return h(Avatar, { shape: 'square', size: 'default' }, {
|
||
|
icon: () => h(Icon, { icon: 'ant-design:file-image-outlined', size: 30 }),
|
||
|
});
|
||
|
}
|
||
|
},
|
||
|
/**
|
||
|
* 根据字典编码 渲染
|
||
|
* @param v 值
|
||
|
* @param code 字典编码
|
||
|
* @param renderTag 是否使用tag渲染
|
||
|
*/
|
||
|
renderDict: (v, code,renderTag=false) => {
|
||
|
let text = '';
|
||
|
let array = getDictItemsByCode(code);
|
||
|
let obj = array.filter(item => {
|
||
|
return item.value == v;
|
||
|
});
|
||
|
if (obj.length > 0) {
|
||
|
text = obj[0].text;
|
||
|
}
|
||
|
return isEmpty(text)||!renderTag?h('span',text):h(Tag,text)
|
||
|
},
|
||
|
/**
|
||
|
* 渲染图片
|
||
|
* @param text
|
||
|
*/
|
||
|
renderImage: ({text}) => {
|
||
|
if(!text){
|
||
|
return h(Avatar, { shape: 'square', size: 'large' }, {
|
||
|
icon: () => h(Icon, { icon: 'ant-design:file-image-outlined', size: 30 }),
|
||
|
});
|
||
|
}
|
||
|
let avatarList = text.split(',');
|
||
|
return h('span', avatarList.map((item) => {
|
||
|
return h(Avatar, { src: getFileAccessHttpUrl(item), shape: 'square', size: 'large', style: { marginRight: '5px' } });
|
||
|
}));
|
||
|
},
|
||
|
/**
|
||
|
* 渲染 Tooltip
|
||
|
* @param text
|
||
|
* @param len
|
||
|
*/
|
||
|
renderTip: (text, len=20) => {
|
||
|
if(text){
|
||
|
let showText = text+''
|
||
|
if(showText.length>len){
|
||
|
showText = showText.substr(0, len)+'...'
|
||
|
}
|
||
|
return h(Tooltip, { title: text }, ()=>showText)
|
||
|
}
|
||
|
return text;
|
||
|
},
|
||
|
/**
|
||
|
* 渲染a标签
|
||
|
* @param text
|
||
|
*/
|
||
|
renderHref: ({text}) => {
|
||
|
if(!text){
|
||
|
return ''
|
||
|
}
|
||
|
const len = 20
|
||
|
if(text.length>len){
|
||
|
text = text.substr(0, len)
|
||
|
}
|
||
|
return h('a', { href: text, target: '_blank'}, text)
|
||
|
},
|
||
|
/**
|
||
|
* 根据字典渲染
|
||
|
* @param v
|
||
|
* @param array
|
||
|
*/
|
||
|
renderDictNative: (v, array,renderTag=false) => {
|
||
|
let text = '';
|
||
|
let color = '';
|
||
|
let obj = array.filter(item => {
|
||
|
return item.value == v;
|
||
|
});
|
||
|
if (obj.length > 0) {
|
||
|
text = obj[0].label;
|
||
|
color = obj[0].color;
|
||
|
}
|
||
|
return isEmpty(text)||!renderTag?h('span',text):h(Tag, {color},()=>text)
|
||
|
},
|
||
|
/**
|
||
|
* 渲染富文本
|
||
|
*/
|
||
|
renderTinymce: ({ model, field }) => {
|
||
|
return h(Tinymce, {
|
||
|
showImageUpload: false,
|
||
|
height: 300,
|
||
|
value: model[field],
|
||
|
onChange: (value: string) => {
|
||
|
model[field] = value;
|
||
|
},
|
||
|
});
|
||
|
},
|
||
|
|
||
|
renderSwitch: (text, arr) => {
|
||
|
return text ? filterMultiDictText(arr, text) : '';
|
||
|
},
|
||
|
renderCategoryTree: (text, code) => {
|
||
|
let array = getDictItemsByCode(code);
|
||
|
return filterMultiDictText(array, text);
|
||
|
},
|
||
|
renderTag(text,color){
|
||
|
return isEmpty(text)?h('span', text):h(Tag, { color },()=>text)
|
||
|
}
|
||
|
|
||
|
};
|
||
|
export { render };
|