前端终极完善

This commit is contained in:
橙子
2021-11-03 20:28:45 +08:00
parent 2e4f024928
commit ca815ec53e
15 changed files with 106 additions and 77 deletions

View File

@@ -50,7 +50,7 @@ namespace Yi.Framework.ApiMicroservice.Controllers
if ( user_data!=null) if ( user_data!=null)
{ {
var token = MakeJwt.app(new jwtUser() {user=user_data,menuIds= menuList}); var token = MakeJwt.app(new jwtUser() {user=user_data,menuIds= menuList});
return Result.Success().SetData(new { user = new { _user.id, _user.username, _user.introduction, _user.icon, _user.nick }, token }); return Result.Success().SetData(new { user = new { user_data.id, user_data.username, user_data.introduction, user_data.icon, user_data.nick }, token });
} }
return Result.Error(); return Result.Error();
} }

View File

@@ -23,28 +23,42 @@ namespace Yi.Framework.ApiMicroservice.Controllers
{ {
_userService = userService; _userService = userService;
_env = env; _env = env;
} }
[HttpPost] [HttpPost]
[Authorize] [Authorize]
public async Task<Result> EditIcon(IFormFile file) public async Task<Result> EditIcon(IFormFile file)
{ {
var _user = HttpContext.GetCurrentUserInfo(); try
var user_data = await _userService.GetUserById(_user.id); {
var type = "image"; var _user = HttpContext.GetCurrentUserInfo();
var filename = await Upload(type, file); var user_data = await _userService.GetUserById(_user.id);
user_data.icon = filename; var type = "image";
await _userService.UpdateAsync(user_data); var filename = await Upload(type, file);
return Result.Success(); user_data.icon = filename;
await _userService.UpdateAsync(user_data);
return Result.Success();
}
catch
{
return Result.Error();
}
} }
[Route("{type}/{fileNmae}")] [Route("/api/{type}/{fileName}")]
[HttpGet] [HttpGet]
public IActionResult Get(string type, string fileNmae) public IActionResult Get(string type, string fileName)
{ {
var path = Path.Combine($"wwwroot\\{type}", fileNmae); try
var stream = System.IO.File.OpenRead(path); {
var MimeType = Common.Helper.MimeHelper.GetMimeMapping(fileNmae); var path = Path.Combine($"wwwroot/{type}", fileName);
return new FileStreamResult(stream, MimeType); var stream = System.IO.File.OpenRead(path);
var MimeType = Common.Helper.MimeHelper.GetMimeMapping(fileName);
return new FileStreamResult(stream, MimeType);
}
catch
{
return new NotFoundResult();
}
} }
/// <summary> /// <summary>
@@ -53,11 +67,10 @@ namespace Yi.Framework.ApiMicroservice.Controllers
/// <param name="type"></param> /// <param name="type"></param>
/// <param name="file"></param> /// <param name="file"></param>
/// <returns></returns> /// <returns></returns>
private async Task<string> Upload(string type,IFormFile file) private async Task<string> Upload(string type, IFormFile file)
{ {
string filename = Guid.NewGuid().ToString() + Path.GetExtension(file.FileName); string filename = Guid.NewGuid().ToString() + Path.GetExtension(file.FileName);
using (var stream = new FileStream(Path.Combine($"wwwroot\\{type}", filename), FileMode.CreateNew, FileAccess.Write)) using (var stream = new FileStream(Path.Combine($"wwwroot/{type}", filename), FileMode.CreateNew, FileAccess.Write))
{ {
await file.CopyToAsync(stream); await file.CopyToAsync(stream);
} }
@@ -65,15 +78,15 @@ namespace Yi.Framework.ApiMicroservice.Controllers
return filename; return filename;
} }
[HttpGet] [HttpGet]
public async Task<IActionResult>ExportFile() public async Task<IActionResult> ExportFile()
{ {
var userdata = await _userService.GetAllEntitiesTrueAsync(); var userdata = await _userService.GetAllEntitiesTrueAsync();
var userList = userdata.ToList(); var userList = userdata.ToList();
List<string> header = new() { "用户", "密码", "头像", "昵称", "邮箱", "ip","年龄", "个人介绍", "地址", "手机", "角色" }; List<string> header = new() { "用户", "密码", "头像", "昵称", "邮箱", "ip", "年龄", "个人介绍", "地址", "手机", "角色" };
var filename= Common.Helper.ExcelHelper.CreateExcelFromList(userList,header,_env.ContentRootPath.ToString()); var filename = Common.Helper.ExcelHelper.CreateExcelFromList(userList, header, _env.ContentRootPath.ToString());
var MimeType = Common.Helper.MimeHelper.GetMimeMapping(filename); var MimeType = Common.Helper.MimeHelper.GetMimeMapping(filename);
return new FileStreamResult(new FileStream(Path.Combine(_env.ContentRootPath+@"\wwwroot\Excel", filename), FileMode.Open),MimeType); return new FileStreamResult(new FileStream(Path.Combine(_env.ContentRootPath + @"\wwwroot\Excel", filename), FileMode.Open), MimeType);
} }
} }
} }

View File

@@ -103,6 +103,11 @@ namespace Yi.Framework.ApiMicroservice
#endregion #endregion
//app.UseErrorHandlingService(); //app.UseErrorHandlingService();
#region
//<2F><>̬<EFBFBD>ļ<EFBFBD>ע<EFBFBD><D7A2>
#endregion
//app.UseStaticFiles();
#region #region
//HttpsRedirectionע<6E><D7A2> //HttpsRedirectionע<6E><D7A2>
#endregion #endregion

View File

@@ -15,7 +15,7 @@
"Cors_Enabled": true, "Cors_Enabled": true,
"RabbitMQ_Enabled": false, "RabbitMQ_Enabled": false,
"Redis_Enabled": true, "Redis_Enabled": true,
"RedisSeed_Enabled": true, "RedisSeed_Enabled": false,
"Kafka_Enabled": false, "Kafka_Enabled": false,
"MutiDB_Enabled": false, "MutiDB_Enabled": false,
"DbList": [ "Sqlite", "Mysql", "Sqlserver", "Oracle" ], "DbList": [ "Sqlite", "Mysql", "Sqlserver", "Oracle" ],

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

View File

@@ -93,7 +93,7 @@ namespace Yi.Framework.Core
{ {
for (int i = menu_data.children.Count() - 1; i >= 0; i--) for (int i = menu_data.children.Count() - 1; i >= 0; i--)
{ {
menu_data.children = menu_data.children.AsEnumerable().OrderBy(u => u.sort).ToList(); menu_data.children = menu_data.children.AsEnumerable().OrderByDescending(u => u.sort).ToList();
if (menu_data.children != null || menu_data.children.Count() != 0) if (menu_data.children != null || menu_data.children.Count() != 0)
{ {

View File

@@ -16,7 +16,7 @@ namespace Yi.Framework.WebCore.Init
if (_cacheClientDB.Get<SettingDto>(RedisConst.key)==null) if (_cacheClientDB.Get<SettingDto>(RedisConst.key)==null)
{ {
Newtonsoft.Json.JsonConvert.SerializeObject(); //Newtonsoft.Json.JsonConvert.SerializeObject();
_cacheClientDB.Add(RedisConst.key, new SettingDto() _cacheClientDB.Add(RedisConst.key, new SettingDto()
{ {
ImageList_key = { "默认图片", "默认图片" } , ImageList_key = { "默认图片", "默认图片" } ,

View File

@@ -0,0 +1,28 @@
<template>
<v-avatar :size="size" >
<!-- <img src="https://z3.ax1x.com/2021/05/09/gJadhD.jpg" /> -->
<img
:src="baseurl +'/image/'+$store.state.user.user.icon"
/>
</v-avatar>
</template>
<script>
// Utilities
// import { get } from 'vuex-pathify'
export default {
name: 'ccAvatar',
mounted() {
this.baseurl = process.env.VUE_APP_BASE_API;
},
data:()=>({
baseurl: "",
}),
props: {
size: {
type: Number,
}
},
}
</script>

View File

@@ -65,8 +65,10 @@
}, },
title () { title () {
const matches = this.item.menu_name.match(/\b(\w)/g) const matches = this.item.menu_name.match(/\b(\w)/g)
if(matches!=null)
{
return matches.join('') return matches.join('')
}
}, },
}, },

View File

@@ -48,8 +48,10 @@
computed: { computed: {
title () { title () {
const matches = this.item.menu_name.match(/\b(\w)/g) const matches = this.item.menu_name.match(/\b(\w)/g)
if(matches!=null)
{
return matches.join('') return matches.join('')
}
}, },
}, },
} }

View File

@@ -8,50 +8,26 @@
transition="scale-transition" transition="scale-transition"
> >
<template v-slot:activator="{ attrs, on }"> <template v-slot:activator="{ attrs, on }">
<v-btn <v-btn class="ml-2" min-width="0" text v-bind="attrs" v-on="on">
class="ml-2"
min-width="0"
text
v-bind="attrs"
v-on="on"
>
<!-- <v-icon>mdi-account</v-icon> --> <!-- <v-icon>mdi-account</v-icon> -->
<v-avatar size="36" class="elevation-2"> <ccAvatar :size="36" class="elevation-2"></ccAvatar>
<!-- <img src="https://z3.ax1x.com/2021/05/09/gJadhD.jpg" /> -->
<img
:src="
baseurl +
'/File/ShowNoticeImg?filePath=' +
$store.state.user.user.icon
"
/>
</v-avatar>
</v-btn> </v-btn>
</template> </template>
<v-list <v-list :tile="false" flat nav>
:tile="false" <app-bar-item to="/"
flat ><v-list-item-title v-text="'用户名:'+$store.state.user.user.username"
nav /></app-bar-item>
> <app-bar-item to="/"
><v-list-item-title v-text="'称号:'+$store.state.user.user.nick"
/></app-bar-item>
<app-bar-item to="/"><v-list-item-title v-text="'用户名:橙子'" /></app-bar-item> <v-divider class="mb-2 mt-2" />
<app-bar-item to="/"><v-list-item-title v-text="'称号:橙子'" /></app-bar-item>
<v-divider class="mb-2 mt-2"/>
<template v-for="(p, i) in profile"> <template v-for="(p, i) in profile">
<v-divider <v-divider v-if="p.divider" :key="`divider-${i}`" class="mb-2 mt-2" />
v-if="p.divider"
:key="`divider-${i}`"
class="mb-2 mt-2"
/>
<app-bar-item <app-bar-item v-else :key="`item-${i}`" to="/">
v-else
:key="`item-${i}`"
to="/"
>
<v-list-item-title v-text="p.title" /> <v-list-item-title v-text="p.title" />
</app-bar-item> </app-bar-item>
</template> </template>
@@ -60,16 +36,15 @@
</template> </template>
<script> <script>
export default { export default {
name: 'DefaultAccount', name: "DefaultAccount",
data: () => ({ data: () => ({
profile: [ profile: [
{ title: '用户信息' }, { title: "用户信息" },
{ title: '设置' }, { title: "设置" },
{ divider: true }, { divider: true },
{ title: '登出' }, { title: "登出" },
], ],
}), }),
} };
</script> </script>

View File

@@ -3,11 +3,7 @@
<v-row justify="center"> <v-row justify="center">
<v-col cols="12" md="4"> <v-col cols="12" md="4">
<app-card class="mt-4 text-center"> <app-card class="mt-4 text-center">
<v-img <ccAvatar :size="128" class="rounded-circle elevation-6 mt-n12 d-inline-block"></ccAvatar>
class="rounded-circle elevation-6 mt-n12 d-inline-block"
src="https://demos.creative-tim.com/vue-material-dashboard/img/marc.aba54d65.jpg"
width="128"
/>
<v-card-text class="text-center"> <v-card-text class="text-center">
<h6 class="text-h6 mb-2 text--secondary"> <h6 class="text-h6 mb-2 text--secondary">
@@ -321,8 +317,12 @@ export default {
this.userInfo = resp.data; this.userInfo = resp.data;
this.userInfo.password = ""; this.userInfo.password = "";
this.editInfo = Object.assign({}, this.userInfo); this.editInfo = Object.assign({}, this.userInfo);
this.$store.commit('SET_USER',this.userInfo)
}); });
menuApi.GetTopMenusByHttpUser().then((resp) => { menuApi.GetTopMenusByHttpUser().then((resp) => {
this.menuInfo = resp.data; this.menuInfo = resp.data;
}); });
@@ -333,9 +333,13 @@ choiceImg() {
uploadImage() { uploadImage() {
const file = this.$refs.imgFile.files[0]; const file = this.$refs.imgFile.files[0];
let formData = new FormData(); let formData = new FormData();
formData.append("img", file); formData.append("file", file);
fileApi.EditIcon(formData).then(resp=>{ fileApi.EditIcon(formData).then(resp=>{
this.init(); this.init();
this.$dialog.notify.success(resp.msg, {
position: "top-right",
timeout: 5000,
});
}) })
}, },