import {DLaysr} from '../types'; import translateEn from './translateEn'; import generatorClassName, {getFromFeature} from './generatorClassName'; import dataIdList from './dataIdList'; const kebabCase = require('lodash.kebabcase'); async function translateClassName(data, translateList, classNameIdList) { const q = translateList.map(item => item.name).join('\n'); try { const {trans_result: result} = await translateEn(q); translateList.forEach((item, i) => { const setClassName = (layers) => { layers.forEach(layer => { if (layer.id === item.id) { let className = kebabCase(result[i].dst); // 防止重名 const classLen = classNameIdList.filter((item) => item.indexOf(className) >= 0).length; if (!!classLen) { className = `${className}-${classLen}` } classNameIdList.push(className); layer.className = className; } if (layer.children) { setClassName(layer.children) } }) } setClassName(data); }); return data; } catch (e) { // 翻译挂了的话,就走默认 data.forEach(layer => { layer.className = getFromFeature(layer, classNameIdList); }); return data; } } /** * 为代码添加className * @param data * @param numObj */ const handleClassName = async (data: DLaysr[]): Promise => { const translateList = []; const classNameIdList = []; opClassName(data, translateList, classNameIdList); data = await translateClassName(data, translateList, classNameIdList) return data; } const opClassName = (data, translateList = [], classNameIdList = [], numObj = {num: 0}): DLaysr[] => { for (let i = 0; i < data.length; i++) { const layer = data[i]; const currIndex = numObj.num % dataIdList.length;//英文单词下标 const numIndex = Math.floor(numObj.num / dataIdList.length) + 1;//数字后缀 layer.dataId = numIndex > 1 ? dataIdList[currIndex] + numIndex : dataIdList[currIndex]; numObj.num++; layer.className = generatorClassName(layer, translateList, classNameIdList) || layer.dataId; if (Array.isArray(layer.children)) { layer.children = opClassName(layer.children, translateList, classNameIdList, numObj) } } return data; } export default handleClassName;