import store from "../store"; import {waiting} from "../utils"; import appEntry from "../views/appEntry"; import router from "./router"; import axios from "./axios"; export default { routes: () => store.state.apps, init() { //约束正则式 store.commit("cleanApps") // 自动化本工程应用 this.loadApps() }, loadApps() { //新App的自动化格式 let apps = require.context('../../packages/', true, /\.(\/.+)\/App[A-Z][^\/]+\.vue$/, 'lazy'), projects = require.context('../../project/', true, /\.(\/.+)\/App[A-Z][^\/]+\.vue$/, 'lazy') const promise = (mods, base) => Promise.all(mods.keys().map(path => mods(path).then(file => { if (file.default) { let {name, label} = file.default, addApp = { name: [base, path.replace(/\.\/?(vue)?/g, '')?.split("/")].flat().join("_"), label: label || name, path: `/${base}${path.replace(/\.(\/.+\/App.+)\.vue$/, '$1')}`, component: appEntry, module: file.default } waiting.setContent(`加载${name}...`) router.addRoute(addApp) //命名规范入口文件必须以App开头 return store.commit("addApp", addApp) } else return 0 }))) waiting.init({innerHTML: '应用加载中..'}) Promise.all([ promise(apps, "packages"), promise(projects, "project") ]).then(() => { axios.post("/node/wechatapps/addOrUpdate", { type: "web", list: this.routes().map(({path: libPath, label, module: {name}, name: id}) => ({ id, type: 'web', libPath, label, name })) }, {baseURL: "/ns"}).catch(() => 0) waiting.close() }) } }