/** * Pilot * @author Tevin */ import { Fetcher } from './Fetcher'; import { Tools } from '@components/common/Tools'; import project from '@project'; export class Pilot { constructor() { } $data() { return {}; } createOptions(dataAdd) { const options = { methods: {}, }; const names = []; // 实例本身的字段 Object.getOwnPropertyNames(this).forEach(name => names.push(name)); // 类的字段 Object.getOwnPropertyNames(Object.getPrototypeOf(this)).forEach(name => names.push(name)); // 传递 names.forEach(name => { // 构造器忽略,如果存在属性 $methods 也忽略 if (name === 'constructor' || name === '$methods') { return; } if (/^\$/.test(name)) { if (name === '$data' && typeof dataAdd !== 'undefined') { // 转换 dataAdd 中 assets 属性下的图片地址值 if (typeof dataAdd.assets !== 'undefined') { dataAdd.assets = Pilot.transAssets(dataAdd.assets); } options.data = () => { // 当有传data值进来,初始值必须带data中的字段 const dataOrig = this.$data(); return { ...dataOrig, ...dataAdd, }; }; } else { options[name.replace('$', '')] = this[name]; } } else { options.methods[name] = this[name]; } }); return options; } /** * 转换静态图片引用 * @param assets * @return {{}} */ static transAssets(assets = {}) { const assets2 = {}; Object.keys(assets).forEach(key => { let asset = ''; if (assets[key].indexOf('assets') >= 0) { asset = assets[key].split('assets')[1]; } else { asset = assets[key].replace(/^[.\/\\]*/, '/'); } // 网页 if (process.env.TARO_ENV === 'h5') { assets2[key] = project.host.assetsPath + asset; } // 小程序 else if (process.env.TARO_ENV === 'weapp') { assets2[key] = Fetcher.host + project.host.assetsPath + asset; } }); return assets2; } }