基于TailwindCss,通过拖拽可视化配置快速构建现代化响应式UI、可自定义、多主题、多语言的网站应用,包含美观的后台管理主题,拥有完整的前端解决方案的低代码平台。 Easily build responsive web apps with TailwindCSS, featuring diverse themes, multilingual support, and drag-and-drop functionality, a low code platform with a complete front-end solution.
Xinshi Web builder is an Angular front-end low code framework based on Material. With its rich component library, it provides an excellent digital innovation experience.
The Web Builder allows for quick construction of responsive, multi-themed web pages through drag-and-drop.
Web Builder
·
UI Storybook
·
知乎
·
中文
Watch Demo Video
Oumuamua is the first known interstellar object passing through the solar system, which means “distant messenger(信使)”.
This open-source project is very suitable for beginners to learn or advance their skills. It covers most of the Angular technical knowledge points but is not limited to the following:
For more details, please refer to theDevelopment Guide
// src/environments/environment.ts
export const environment: IEnvironment = {
apiUrl: "http://localhost:4200",
production: false,
site: "dist",
port: 4200,
cache: false,
drupalProxy: false,
};
${this.apiUrl}/api/v1/landingPage?content=${this.pageUrl}
interface.By default, it will read the global configuration information from /api/v1/
config. This is mainly to check whether the site is open or requires login. The file path is src/app/core/guards/auth.guard.ts
. You can comment out line 35, return true;, during local development.
Configuration file config/proxy.config.js
. During local development, it will forward the request based on the corresponding API URL prefix. Configure it according to the actual situation.
const PROXY_CONFIG = [
{
context: ['/api', '/user', '/sites'],
target: 'https://yourdomain.com',
secure: false,
changeOrigin: true,
},
];
module.exports = PROXY_CONFIG;
npm start
In addition to the above route pages, when accessing other pages, the url will be used to retrieve data from the API and render the page. Returns for local and production environments are handled for easy testing:
loadPageContent(pageUrl = this.pageUrl): Observable<IPage> {
if (environment.production) {
const landingPath = '/api/v1/landingPage?content=';
const pageUrlParams = `${this.apiUrl}${landingPath}${pageUrl}`;
return this.http.get<any>(pageUrlParams).pipe(
tap((page) => {
this.updatePage(page);
}),
catchError(() => {
return this.http.get<any>(`${this.apiUrl}${landingPath}404`);
})
);
} else {
const sample = pageUrl.split('/')[1];
const samplePage = samples.elements.filter(
(item) => item.id === sample
)[0];
if (samplePage) {
this.updatePage(samplePage.page);
return of(samplePage.page);
} else {
return this.http.get<any>(`${this.apiUrl}/assets/app/404.json`);
}
}
}
For base configuration, refer to Xinshi Messenger Storybook Global Configuration
npm run build
npm run storybook
If you encounter an out-of-memory error, execute the following command and then run it again:
export NODE_OPTIONS="--max-old-space-size=8192"