hyperf-view/builder/View.php

79 lines
2.4 KiB
PHP

<?php
/**
* SAAS应用系统 --- 十年开发经验汇集巨献!
* ==========================================================
* Copy right 2020-2050 成都众联思索科技有限公司,保留所有权利。
* ----------------------------------------------------------
* 官方网址: https://www.zoomtk.com
* 这不是自由软件!未经允许不得用于商业目或程序代码摘取及修改。
* 任何企业和个人未经允许对程序代码以任何形式任何目的再发布传播。
* 唯一发布渠道www.zoomtk.com;非官方渠道统一视为侵权行为。
* ==========================================================
*/
namespace Builder;
use Hyperf\HttpMessage\Stream\SwooleStream;
use Psr\Http\Message\ResponseInterface;
use Builder\Entity\UISettingEntity;
use Hyperf\HttpServer\Response;
class View extends MineResponse
{
/***
* @param UISettingEntity $setting
* @param null $content
* @return ResponseInterface
*/
public static function make(UISettingEntity $setting, $content = null): ResponseInterface
{
$apiRoot = $setting->getApiRoot();
$homeUrl = $setting->getHomeUrl();
$token = $setting->getUser()->getToken();
$title = $setting->getTitle();
if ($setting->getUser()->getUid() > 0) {
$root = 'root';
} else {
$root = 'login';
}
$pageData = $setting->toArray();
$pageData = json_encode($pageData, 256);
if (!$content) {
$content = <<<EOF
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>{$title}</title>
<meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport">
</head>
<body>
<div id="app">{{ message }}</div>
<script>
let AuthInfo = {};
AuthInfo.token = "{$token}";
window.config = {
'apiRoot': "{$apiRoot}",
'homeUrl': "{$homeUrl}"
}
</script>
<script src="/static/js/vue.global.js"></script>
<script>
const { createApp } = Vue
createApp({
data() {
return {
message: 'Hello TkView!'
}
}
}).mount('#app')
</script>
</body>
</html>
EOF;
}
$response = new Response();
$request = $response->withHeader('content-type', 'text/html; charset=utf8')
->withBody(new SwooleStream($content));
return $request;
}
}