Former-commit-id: 8b06d7dbe61adeffa7bc3f7c6b5e8049ffbd94de
TangShanKaiPing
wanggang 6 years ago
parent 523325cf0a
commit 7404fb2ba6

@ -25,6 +25,8 @@ namespace IoTCenter.Controllers
{ {
private readonly IConfiguration _configuration; private readonly IConfiguration _configuration;
private readonly IJwtHelper _jwtHelper; private readonly IJwtHelper _jwtHelper;
private readonly IRepository<Category> _categoryRepo;
private readonly IRepository<Product> _productRepo;
private readonly IRepository<Node> _nodeRepo; private readonly IRepository<Node> _nodeRepo;
private readonly IRepository<Scene> _sceneRepo; private readonly IRepository<Scene> _sceneRepo;
private readonly IRepository<SceneCommand> _sceneCommandRepo; private readonly IRepository<SceneCommand> _sceneCommandRepo;
@ -35,6 +37,8 @@ namespace IoTCenter.Controllers
public AppController(IConfiguration configuration, public AppController(IConfiguration configuration,
IJwtHelper jwtHelper, IJwtHelper jwtHelper,
IRepository<Category> categoryRepo,
IRepository<Product> productRepo,
IRepository<Node> nodeRepo, IRepository<Node> nodeRepo,
IRepository<Scene> sceneRepo, IRepository<Scene> sceneRepo,
IRepository<SceneCommand> sceneCommandRepo, IRepository<SceneCommand> sceneCommandRepo,
@ -45,6 +49,8 @@ namespace IoTCenter.Controllers
{ {
this._configuration = configuration; this._configuration = configuration;
this._jwtHelper = jwtHelper; this._jwtHelper = jwtHelper;
this._categoryRepo = categoryRepo;
this._productRepo = productRepo;
this._nodeRepo = nodeRepo; this._nodeRepo = nodeRepo;
this._sceneRepo = sceneRepo; this._sceneRepo = sceneRepo;
this._sceneCommandRepo = sceneCommandRepo; this._sceneCommandRepo = sceneCommandRepo;
@ -60,13 +66,27 @@ namespace IoTCenter.Controllers
return View(); return View();
} }
public IActionResult GetProducts(string token)
{
var userName = this._jwtHelper.GetPayload(token)["UserName"].ToString();
var model = this._productRepo.ReadOnlyTable().Select(o => new
{
o.Id,
o.Number,
o.Name,
o.Image,
DeviceCount = o.Devices.Count()
}).ToList();
return Json(model);
}
public IActionResult GetNodes(string token) public IActionResult GetNodes(string token)
{ {
var userName = this._jwtHelper.GetPayload(token)["UserName"].ToString(); var userName = this._jwtHelper.GetPayload(token)["UserName"].ToString();
var model = this._nodeRepo.ReadOnlyTable() var model = this._nodeRepo.ReadOnlyTable()
.Include(o => o.Scenes) .Include(o => o.Scenes)
.OrderBy(o=>o.DisplayOrder) .OrderBy(o => o.DisplayOrder)
.ThenBy(o=>o.Name) .ThenBy(o => o.Name)
.Select(o => new .Select(o => new
{ {
o.Id, o.Id,
@ -75,7 +95,7 @@ namespace IoTCenter.Controllers
o.Image, o.Image,
o.DisplayOrder, o.DisplayOrder,
o.Scenes, o.Scenes,
o.Devices.Count DeviceCount = o.Devices.Count
}) })
.ToList(); .ToList();
return Json(model); return Json(model);

Binary file not shown.

@ -22,6 +22,8 @@
<None Remove="wwwroot\fonts\Framework7Icons-Regular.woff" /> <None Remove="wwwroot\fonts\Framework7Icons-Regular.woff" />
<None Remove="wwwroot\fonts\Framework7Icons-Regular.woff2" /> <None Remove="wwwroot\fonts\Framework7Icons-Regular.woff2" />
<None Remove="wwwroot\images\empty.png" /> <None Remove="wwwroot\images\empty.png" />
<None Remove="wwwroot\lib\signalr\signalr-protocol-msgpack.min.js" />
<None Remove="wwwroot\lib\signalr\signalr.min.js" />
<None Remove="wwwroot\nodes.html" /> <None Remove="wwwroot\nodes.html" />
<None Remove="wwwroot\user.html" /> <None Remove="wwwroot\user.html" />
</ItemGroup> </ItemGroup>
@ -30,5 +32,13 @@
<ExcludeFromSingleFile>true</ExcludeFromSingleFile> <ExcludeFromSingleFile>true</ExcludeFromSingleFile>
<CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory> <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
</Content> </Content>
<Content Include="wwwroot\lib\signalr\signalr-protocol-msgpack.min.js">
<ExcludeFromSingleFile>true</ExcludeFromSingleFile>
<CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
</Content>
<Content Include="wwwroot\lib\signalr\signalr.min.js">
<ExcludeFromSingleFile>true</ExcludeFromSingleFile>
<CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
</Content>
</ItemGroup> </ItemGroup>
</Project> </Project>

@ -13,9 +13,29 @@
<f7-app :params="$root.f7params"> <f7-app :params="$root.f7params">
<f7-view main> <f7-view main>
<f7-page> <f7-page>
<f7-navbar title="首页"> <f7-navbar title="产品">
<a href="config.html" slot="nav-right" class="link external"><i class="icon f7-icons if-not-md">menu</i></a> <f7-nav-right>
<f7-link class="searchbar-enable" data-searchbar=".searchbar" icon-ios="f7:search"></f7-link>
</f7-nav-right>
<f7-searchbar class="searchbar-demo"
expandable
search-container=".search-list"
search-in=".item-title"></f7-searchbar>
</f7-navbar> </f7-navbar>
<f7-list class="searchbar-not-found">
<f7-list-item title="没有匹配的结果"></f7-list-item>
</f7-list>
<f7-list class="search-list searchbar-found">
<li style="width:33.3%;display:inline-block;" v-if="model" v-for="n in model">
<a :href="'node.html?number='+n.Number" class="card external" style="display:block;text-align:center;">
<div class="card-header">
<span class="item-title">{{n.Name}}</span>
<span class="right"><span class="badge color-green">{{n.DeviceCount}}</span></span>
</div>
<img style="margin:0 auto;" :src="server+'/IoTCenter'+n.Image" />
</a>
</li>
</f7-list>
<f7-toolbar tabbar labels position="bottom"> <f7-toolbar tabbar labels position="bottom">
<a href="index.html" class="tab-link external tab-link-active"> <a href="index.html" class="tab-link external tab-link-active">
<i class="icon icon f7-icons">house</i> <i class="icon icon f7-icons">house</i>
@ -34,6 +54,7 @@
</f7-view> </f7-view>
</f7-app> </f7-app>
</div> </div>
<script type="text/javascript" src="lib/signalr/signalr.min.js"></script>
<script type="text/javascript" src="lib/axios/axios.min.js"></script> <script type="text/javascript" src="lib/axios/axios.min.js"></script>
<script type="text/javascript" src="lib/jquery/jquery.min.js"></script> <script type="text/javascript" src="lib/jquery/jquery.min.js"></script>
<script type="text/javascript" src="lib/jquery.validation/jquery.validate.min.js"></script> <script type="text/javascript" src="lib/jquery.validation/jquery.validate.min.js"></script>
@ -41,6 +62,39 @@
<script type="text/javascript" src="lib/vue/vue.min.js"></script> <script type="text/javascript" src="lib/vue/vue.min.js"></script>
<script type="text/javascript" src="lib/framework7/js/framework7.bundle.min.js"></script> <script type="text/javascript" src="lib/framework7/js/framework7.bundle.min.js"></script>
<script type="text/javascript" src="lib/framework7/js/framework7-vue.bundle.min.js"></script> <script type="text/javascript" src="lib/framework7/js/framework7-vue.bundle.min.js"></script>
<script>
var debug = true;
var wsUrl = localStorage.getItem('server') + '/IoTCenter/hub?group=page';
var connectionId;
const connection = new signalR.HubConnectionBuilder()
.withUrl(wsUrl)
.build();
function connect() {
if (debug) { console.log('start connect to server:' + Date()); }
connection.start().then(function () {
}).catch(function (err) {
console.error(err.toString());
setTimeout(connect, 15 * 1000);
});
}
connection.on('Connected', function (id) {
connectionId = id;
console.log(connectionId);
});
connection.onclose(function (err) {
console.error(err);
setTimeout(connect, 15 * 1000);
});
connection.on("ServerToClient", function (method, json, from) {
console.log(method + ':' + json);
if (method == 'ProductEntityInserted' ||
method == 'DeviceEntityInserted' ||
method == 'DeviceEntityDeleted') {
vm.load();
}
});
</script>
<script type="text/javascript"> <script type="text/javascript">
Framework7.use(Framework7Vue); Framework7.use(Framework7Vue);
var app; var app;
@ -55,7 +109,8 @@
theme: 'ios', theme: 'ios',
}, },
server: localStorage.getItem('server'), server: localStorage.getItem('server'),
token: localStorage.getItem('token') token: localStorage.getItem('token'),
model: null
}; };
}, },
mounted() { mounted() {
@ -68,25 +123,19 @@
this.$f7ready((f7) => { this.$f7ready((f7) => {
app = this.$f7; app = this.$f7;
}); });
connect();
this.load();
}, },
methods: { methods: {
submit: function (e) { load: function () {
if (!$(e.target).valid()) { var url = this.server + '/IoTCenter/App/GetProducts';
return; var data = new FormData();
} data.append('token', this.token);
var url = e.target.action;
var data = $(e.target).serialize();
axios.post(url, data) axios.post(url, data)
.then(function (response) { .then(function (response) {
console.log(response); console.log(response);
var data = response.data; var data = response.data;
if (data.Code === 0) { vm.model = data;
localStorage.setItem("token", data.Token);
window.location.href = "index.html";
}
else {
app.dialog.alert(data.Message, '警告', function () { });
}
}) })
.catch(function (error) { .catch(function (error) {
app.dialog.alert(error, '警告', function () { }) app.dialog.alert(error, '警告', function () { })

@ -26,7 +26,15 @@
<f7-list-item title="没有匹配的结果"></f7-list-item> <f7-list-item title="没有匹配的结果"></f7-list-item>
</f7-list> </f7-list>
<f7-list class="search-list searchbar-found"> <f7-list class="search-list searchbar-found">
<f7-list-item v-if="nodes" v-for="n in nodes" :title="n.Name" ></f7-list-item> <li style="width:33.3%;display:inline-block;" v-if="model" v-for="n in model">
<a :href="'product.html?number='+n.Number" class="card external" style="display:block;text-align:center;">
<div class="card-header">
<span class="item-title">{{n.Name}}</span>
<span class="right"><span class="badge color-green">{{n.DeviceCount}}</span></span>
</div>
<img style="margin:0 auto;" :src="server+'/IoTCenter'+n.Image" />
</a>
</li>
</f7-list> </f7-list>
<f7-toolbar tabbar labels position="bottom"> <f7-toolbar tabbar labels position="bottom">
<a href="index.html" class="tab-link external"> <a href="index.html" class="tab-link external">
@ -46,6 +54,7 @@
</f7-view> </f7-view>
</f7-app> </f7-app>
</div> </div>
<script type="text/javascript" src="lib/signalr/signalr.min.js"></script>
<script type="text/javascript" src="lib/axios/axios.min.js"></script> <script type="text/javascript" src="lib/axios/axios.min.js"></script>
<script type="text/javascript" src="lib/jquery/jquery.min.js"></script> <script type="text/javascript" src="lib/jquery/jquery.min.js"></script>
<script type="text/javascript" src="lib/jquery.validation/jquery.validate.min.js"></script> <script type="text/javascript" src="lib/jquery.validation/jquery.validate.min.js"></script>
@ -53,6 +62,41 @@
<script type="text/javascript" src="lib/vue/vue.min.js"></script> <script type="text/javascript" src="lib/vue/vue.min.js"></script>
<script type="text/javascript" src="lib/framework7/js/framework7.bundle.min.js"></script> <script type="text/javascript" src="lib/framework7/js/framework7.bundle.min.js"></script>
<script type="text/javascript" src="lib/framework7/js/framework7-vue.bundle.min.js"></script> <script type="text/javascript" src="lib/framework7/js/framework7-vue.bundle.min.js"></script>
<script>
var debug = true;
var wsUrl = localStorage.getItem('server') + '/IoTCenter/hub?group=page';
var connectionId;
const connection = new signalR.HubConnectionBuilder()
.withUrl(wsUrl)
.build();
function connect() {
if (debug) { console.log('start connect to server:' + Date()); }
connection.start().then(function () {
}).catch(function (err) {
console.error(err.toString());
setTimeout(connect, 15 * 1000);
});
}
connection.on('Connected', function (id) {
connectionId = id;
console.log(connectionId);
});
connection.onclose(function (err) {
console.error(err);
setTimeout(connect, 15 * 1000);
});
connection.on("ServerToClient", function (method, json, from) {
console.log(method + ':' + json);
if (method == 'NodeEntityInserted' ||
'NodeEntityUpdated' ||
'NodeEntityDeleted' ||
method == 'DeviceEntityInserted' ||
method == 'DeviceEntityDeleted') {
vm.load();
}
});
</script>
<script type="text/javascript"> <script type="text/javascript">
Framework7.use(Framework7Vue); Framework7.use(Framework7Vue);
var app; var app;
@ -68,7 +112,7 @@
}, },
server: localStorage.getItem('server'), server: localStorage.getItem('server'),
token: localStorage.getItem('token'), token: localStorage.getItem('token'),
nodes: null model: null
}; };
}, },
mounted() { mounted() {
@ -82,6 +126,7 @@
app = this.$f7; app = this.$f7;
}); });
this.load(); this.load();
connect();
}, },
methods: { methods: {
load: function () { load: function () {
@ -92,7 +137,7 @@
.then(function (response) { .then(function (response) {
console.log(response); console.log(response);
var data = response.data; var data = response.data;
vm.nodes = data; vm.model = data;
}) })
.catch(function (error) { .catch(function (error) {
app.dialog.alert(error, '警告', function () { }) app.dialog.alert(error, '警告', function () { })

Binary file not shown.
Loading…
Cancel
Save