Former-commit-id: 2c288c708a972b7e512358516949aadaf3f67ff2
Former-commit-id: d2868a45394859fb3cfe153729a0a19fe4b0bab6
TSXN
wanggang 5 years ago
parent 82b68626d5
commit 528fcc56df

@ -382,7 +382,7 @@ namespace Infrastructure.Web
var context = services.GetService<DbContext>();
if (context.Database.EnsureCreated())
{
if(!Env.IsDevelopment())
if (!Env.IsDevelopment())
{
var sql = context.GetService<IRelationalDatabaseCreator>().GenerateCreateScript();
var file = "db.sql";

@ -0,0 +1,66 @@
using Application.Domain.Entities;
using Infrastructure.Application.Services.Settings;
using Infrastructure.Data;
using Infrastructure.Extensions;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Linq;
namespace IoTCenter.Api.Controllers
{
[ApiVersion("1.0")]
[Route("api/v{version:apiVersion}/[controller]/[action]")]
[ApiController]
public class SiteController : ControllerBase
{
private readonly ILogger<OrganController> _logger;
private readonly ISettingService _settingService;
private readonly IRepository<User> _userRepo;
public SiteController(
ILogger<OrganController> logger,
ISettingService settingService,
IRepository<User> userRepo)
{
this._logger = logger;
this._settingService = settingService;
this._userRepo = userRepo;
}
public IActionResult GetSite()
{
try
{
var username = User.Identity.IsAuthenticated ? this.HttpContext.User.Identity.Name : null;
var permissions = new List<string>();
if (User.Identity.IsAuthenticated)
{
permissions = this._userRepo.ReadOnlyTable()
.Where(o => o.UserName == username)
.SelectMany(o => o.UserRoles)
.Select(o => o.Role)
.SelectMany(o => o.RolePermissions)
.Select(o => o.Permission)
.Select(o => o.Number)
.ToList();
}
return Ok(new
{
logo = this._settingService.GetSetting("logo").Value,
name = this._settingService.GetSetting("name").Value,
copyright = this._settingService.GetSetting("copyright").Value,
version = Helper.Instance.GetVersion(),
username,
permissions
});
}
catch (Exception ex)
{
this._logger.LogError(ex, ex.Message);
return Problem(ex.Message);
}
}
}
}

@ -1,9 +1,11 @@
using Infrastructure.Domain;
using Infrastructure.Web.Mvc;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
namespace IoTCenter.Application.Domain
{
[GeneratedController]
[Display(Name = "机构")]
public class Organ : BaseEntity
{

@ -49,7 +49,7 @@
<script>
var app = new Vue({
el: '#app',
data() {
data: function () {
return {
title: "产品",
url: '/api/v1/product/getProducts',

@ -63,7 +63,7 @@ var loading = {
//
function execApi(number, method, query) {
loading.show();
axios.post('/IoTCenter/api/v1/api/execApi', { connectionId, number, method, query })
axios.post('/IoTCenter/api/v1/api/execApi', { connectionId: connectionId, number: number, method: method, query: query })
.then(function (response) {
console.log(response);
})

@ -132,25 +132,5 @@ namespace UserCenter.Controllers
return Problem(ex.Message);
}
}
public IActionResult GetLayout()
{
try
{
return Ok(new
{
logo = this._settingService.GetSetting("logo").Value,
name = this._settingService.GetSetting("name").Value,
copyright = this._settingService.GetSetting("copyright").Value,
version = Helper.Instance.GetVersion(),
username = this.HttpContext.User.Identity.IsAuthenticated ? this.HttpContext.User.Identity.Name : null
});
}
catch (Exception ex)
{
ex.PrintStack();
return Problem(ex.Message);
}
}
}
}

@ -32,7 +32,7 @@ function update(list, item, key) {
list.push(item);
result = true;
}
console.log(result ? 'insert' : 'update' + ' data by ' + key);
//console.log(result ? 'insert' : 'update' + ' data by ' + key);
return result;
}
//delete
@ -87,7 +87,6 @@ function execApi(number, method, query) {
loading.show();
axios.post(config.baseUrl+'/IoTCenter/api/v1/api/execApi', { connectionId, number, method, query })
.then(function (response) {
console.log(response);
})
.catch(function (error) {
console.log(error);

@ -1,5 +1,5 @@
Vue.component('layout', function (resolve, reject) {
axios.get("/components/layout.html").then(function (response) {
axios.get("/pages/shared/layout.html").then(function (response) {
resolve(parseModel(response));
});
});

@ -22,7 +22,6 @@ connection.on('Connected', function (id) {
});
connection.on("ServerToClient", function (method, message, to, from) {
console.log(method + ':' + message);
PubSub.publish(method, {message:message,to:to,from:from});
});
connect();

@ -0,0 +1,14 @@
<template>
<layout v-bind:title="title">
<h1>后台首页</h1>
</layout>
</template>
<script>
export default {
data: function () {
return {
title: '后台列表'
}
}
}
</script>

@ -0,0 +1,14 @@
<template>
<layout v-bind:title="title">
<h1>列表页</h1>
</layout>
</template>
<script>
export default {
data: function () {
return {
title: '列表页'
}
}
}
</script>

@ -1,5 +1,5 @@
<template>
<layout>
<layout v-bind:title="title">
<div v-if="device">
<div class="row">
<div class="col">
@ -55,6 +55,7 @@
}
},
mounted: function () {
this.subscribe();
this.load();
},
methods: {

@ -1,5 +1,5 @@
<template>
<layout v-bind:title="title" v-bind:url="url">
<layout v-bind:title="title">
<div class="row overlay-wrapper">
<div class="col-md-2 col-sm-4 col-xs-6" v-for="item in products">
<div class="card">
@ -27,6 +27,7 @@
}
},
mounted: function () {
this.subscribe();
this.load();
},
methods: {
@ -35,7 +36,6 @@
var vm = this;
axios.post(url).then(function (response) {
vm.products = response.data;
vm.subscribe();
});
},
subscribe() {

@ -1,5 +1,5 @@
<template>
<layout>
<layout v-bind:title="title">
<!--场景-->
<div class="row" v-if="node.scenes.length">
<div class="col">
@ -99,6 +99,7 @@
};
},
mounted: function () {
this.subscribe();
this.load();
},
methods: {

@ -1,5 +1,5 @@
<template>
<layout v-bind:title="title" v-bind:url="url">
<layout v-bind:title="title">
<div class="row overlay-wrapper">
<div class="col-md-2 col-sm-4 col-xs-6" v-for="item in nodes">
<div class="card">
@ -29,6 +29,7 @@
}
},
mounted: function () {
this.subscribe();
this.load();
},
methods: {
@ -37,7 +38,6 @@
var vm = this;
axios.post(url).then(function (response) {
vm.nodes = response.data;
vm.subscribe();
});
},
subscribe() {

@ -1,5 +1,5 @@
<template>
<layout v-bind:title="title" v-bind:url="url">
<layout v-bind:title="title">
<div class="row overlay-wrapper">
<div class="col-md-2 col-sm-4 col-xs-6" v-for="item in organs">
<div class="card">

@ -1,5 +1,5 @@
<template>
<layout v-bind:title="title" v-bind:url="url">
<layout v-bind:title="title">
<div class="row overlay-wrapper">
<div class="col-md-2 col-sm-4 col-xs-6" v-for="item in product.devices">
<div class="card">
@ -30,6 +30,7 @@
}
},
mounted: function () {
this.subscribe();
this.load();
},
methods: {
@ -38,7 +39,6 @@
var vm = this;
axios.post(url).then(function (response) {
vm.product = response.data;
vm.subscribe();
});
},
subscribe() {

@ -6,7 +6,7 @@
<a class="nav-link" data-widget="pushmenu" href="#"><i class="fas fa-bars"></i></a>
</li>
<li class="nav-item d-none d-sm-inline-block">
<a href="/" class="nav-link">首页</a>
<router-link :to="{path:'/'}" class="nav-link">首页</router-link>
</li>
</ul>
<ul class="navbar-nav ml-auto">
@ -35,7 +35,7 @@
<nav class="mt-2">
<ul class="nav nav-pills nav-sidebar flex-column" data-widget="treeview" role="menu" data-accordion="false">
<li class="nav-item">
<router-link :to="{path:'/'}" :class="'nav-link'+isActive(['/','/pages/product.html','/pages/device.html'])">
<router-link :to="{path:'/'}" :class="isPageActive('/','/pages/product.html','/pages/device.html')">
<i class="nav-icon far fa-image"></i>
<p>
产品
@ -43,13 +43,29 @@
</router-link>
</li>
<li class="nav-item">
<router-link :to="{path:'/pages/nodes.html'}" :class="'nav-link'+isActive(['/pages/nodes.html','/pages/node.html'])">
<router-link :to="{path:'/pages/nodes.html'}" :class="isPageActive('/pages/nodes.html','/pages/node.html')">
<i class="nav-icon far fa-image"></i>
<p>
节点
</p>
</router-link>
</li>
<li class="nav-item" v-if="hasPermission('Read-Setting')">
<router-link :to="{path:'/pages/admin/home.html'}" :class="isPageActive('/pages/admin/home.html')">
<i class="nav-icon far fa-image"></i>
<p>
控制台
</p>
</router-link>
</li>
<li class="nav-item" v-if="hasPermission('Read-Setting')">
<router-link :to="{path:'/pages/admin/list.html',query:{entity:'Setting'}}" :class="isEntityActive('Setting')">
<i class="nav-icon far fa-image"></i>
<p>
设置
</p>
</router-link>
</li>
</ul>
</nav>
</div>
@ -94,17 +110,18 @@
return {
activeIndex: 1,
openKeys: ['sub1'],
url: config.baseUrl + '/UserCenter/api/v1/token/getLayout',
url: config.baseUrl + '/IoTCenter/api/v1/site/getSite',
model: {
title: '',
logo: '/images/logo.png',
copyright: '',
version: '',
username: ''
username: '',
permissions: []
}
}
},
mounted: function () {
document.querySelector('title').innerText = this.$attrs.title;
var vm = this;
axios.post(this.url).then(function (response) {
vm.model = response.data;
@ -113,20 +130,31 @@
}).finally(function () {
//loading.hide();
});
console.log(this.$route.path);
//console.log(this.$route.path);
},
methods: {
logout() {
store.commit('logout');
router.push('/pages/login.html');
},
isActive(pages) {
for (var i = 0; i < pages.length; i++) {
if (this.$route.path == pages[i]) {
return ' active';
hasPermission(permission) {
return Enumerable.from(this.model.permissions).any(o => o == permission);
},
isPageActive() {
var cls = 'nav-link';
for (var i = 0; i < arguments.length; i++) {
if (this.$route.path == arguments[i]) {
return cls + ' active';
}
}
return '';
return cls;
},
isEntityActive(entity) {
var cls = 'nav-link';
if (this.$route.query.entity === entity) {
return cls + ' active';
}
return cls;
}
}
}
Loading…
Cancel
Save