Browse Source

添加用户管理,修改配置

添加用户管理,取消内外网域名配置,增加统一域名配置项,
master
许孟阳 3 years ago
parent
commit
b0741e9027
  1. 8
      java/src/main/java/vip/xumy/picture/conf/PictureApplicationRunner.java
  2. 67
      java/src/main/java/vip/xumy/picture/ctrl/MyUserController.java
  3. 13
      java/src/main/java/vip/xumy/picture/ctrl/PictureController.java
  4. 4
      java/src/main/java/vip/xumy/picture/ctrl/PublicControoler.java
  5. 27
      java/src/main/java/vip/xumy/picture/mapper/MyUserMapper.java
  6. 38
      java/src/main/java/vip/xumy/picture/service/MyUserService.java
  7. 2
      vue/src/components/template/mainHeader.vue
  8. 2
      vue/src/components/template/manage.vue
  9. 4
      vue/src/router/index.ts
  10. 6
      vue/src/store/mutations.js
  11. 9
      vue/src/store/state.js
  12. 12
      vue/src/views/biz/picture.vue
  13. 109
      vue/src/views/sys/user.vue

8
java/src/main/java/vip/xumy/picture/conf/PictureApplicationRunner.java

@ -19,14 +19,12 @@ import vip.xumy.admin.sys.service.ConfigService; @@ -19,14 +19,12 @@ import vip.xumy.admin.sys.service.ConfigService;
@Component
@Configuration
public class PictureApplicationRunner implements ApplicationRunner {
private static final String HOSTR_CFG_KEY = "intranet_host";
private static final String HOSTE_CFG_KEY = "internet_host";
public static Map<String, String> HOST_MAP = new HashMap<>();;
private static final String HOST_CFG_KEY = "host_url";
public static Map<String, String> CONF_MAP = new HashMap<>();;
@Autowired
public void setConfigService(ConfigService configService) {
HOST_MAP.put("traHost", configService.getStringConfig(HOSTR_CFG_KEY, null));
HOST_MAP.put("tertHost", configService.getStringConfig(HOSTE_CFG_KEY, null));
CONF_MAP.put("host", configService.getStringConfig(HOST_CFG_KEY, null));
}
@Override

67
java/src/main/java/vip/xumy/picture/ctrl/MyUserController.java

@ -0,0 +1,67 @@ @@ -0,0 +1,67 @@
package vip.xumy.picture.ctrl;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import vip.xumy.admin.verify.controller.PublicController;
import vip.xumy.admin.verify.pojo.User;
import vip.xumy.core.pojo.base.BasePageParam;
import vip.xumy.core.pojo.com.AjaxResponse;
import vip.xumy.core.pojo.com.PageResponse;
import vip.xumy.picture.service.MyUserService;
/**
* Do not use for any commercial purposes without permission
*
* @author: mengyxu
* @date: 2022年1月7日
*/
@RestController
@RequestMapping("my/user")
public class MyUserController {
@Autowired
private MyUserService userService;
@GetMapping
public PageResponse<User> save(BasePageParam param, HttpServletRequest request) {
User user = (User) request.getSession().getAttribute(PublicController.KEY);
PageResponse<User> rsp = new PageResponse<>();
if (!"1".equals(user.getPermission())) {
rsp.setRows(new ArrayList<User>());
rsp.setTotal(0L);
} else {
Page<User> pages = PageHelper.startPage(param.getPage(), param.getSize());
List<User> list = userService.list();
rsp.setRows(list);
rsp.setTotal(pages.getTotal());
}
return rsp;
}
@PostMapping
public AjaxResponse save(@RequestBody User user) {
userService.save(user);
return AjaxResponse.successed();
}
@DeleteMapping
public AjaxResponse delete(@RequestBody User user) {
userService.delete(user.getUserId());
return AjaxResponse.successed();
}
}

13
java/src/main/java/vip/xumy/picture/ctrl/PictureController.java

@ -1,5 +1,6 @@ @@ -1,5 +1,6 @@
package vip.xumy.picture.ctrl;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
@ -18,6 +19,8 @@ import com.github.pagehelper.Page; @@ -18,6 +19,8 @@ import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import vip.xumy.admin.utils.LoginUtil;
import vip.xumy.admin.verify.controller.PublicController;
import vip.xumy.admin.verify.pojo.User;
import vip.xumy.core.exception.CoreException;
import vip.xumy.core.pojo.com.AjaxResponse;
import vip.xumy.core.pojo.com.PageResponse;
@ -39,12 +42,18 @@ public class PictureController { @@ -39,12 +42,18 @@ public class PictureController {
@GetMapping
public PageResponse<Picture> list(Picture example, HttpServletRequest request) {
example.setUser(LoginUtil.getUserId(request));
User user = (User) request.getSession().getAttribute(PublicController.KEY);
PageResponse<Picture> rsp = new PageResponse<>();
if (!"1".equals(user.getPermission())) {
rsp.setRows(new ArrayList<Picture>());
rsp.setTotal(0L);
}else {
example.setUser(user.getUserId());
Page<Picture> pages = PageHelper.startPage(example.getPage(), example.getSize());
List<Picture> list = pictureService.list(example);
PageResponse<Picture> rsp = new PageResponse<>();
rsp.setRows(list);
rsp.setTotal(pages.getTotal());
}
return rsp;
}

4
java/src/main/java/vip/xumy/picture/ctrl/PublicControoler.java

@ -17,9 +17,9 @@ import vip.xumy.picture.conf.PictureApplicationRunner; @@ -17,9 +17,9 @@ import vip.xumy.picture.conf.PictureApplicationRunner;
@RequestMapping("public")
public class PublicControoler {
@GetMapping("host")
@GetMapping("conf")
public Map<String, String> getHost(){
return PictureApplicationRunner.HOST_MAP;
return PictureApplicationRunner.CONF_MAP;
}
}

27
java/src/main/java/vip/xumy/picture/mapper/MyUserMapper.java

@ -0,0 +1,27 @@ @@ -0,0 +1,27 @@
package vip.xumy.picture.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import vip.xumy.admin.verify.pojo.User;
/**
* @author:mengyxu
* @date:2020年10月28日
*/
public interface MyUserMapper {
@Select({ "SELECT * FROM user" })
List<User> list();
@Delete({ "DELETE FROM user WHERE user_id = #{id}" })
void delete(String id);
@Insert({ "INSERT INTO user VALUES (#{userId}, #{name}, #{password}, #{desc}, '0')" })
int save(User user);
}

38
java/src/main/java/vip/xumy/picture/service/MyUserService.java

@ -0,0 +1,38 @@ @@ -0,0 +1,38 @@
package vip.xumy.picture.service;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.DigestUtils;
import vip.xumy.admin.verify.pojo.User;
import vip.xumy.picture.mapper.MyUserMapper;
/** Do not use for any commercial purposes without permission
* @author: mengyxu
* @date: 2022年1月7日
*/
@Service
public class MyUserService {
@Autowired
private MyUserMapper userMapper;
@Autowired
private PictureService pictureService;
public List<User> list() {
return userMapper.list();
}
public void save(User user) {
user.setPassword(DigestUtils.md5DigestAsHex(user.getPassword().getBytes()));
userMapper.save(user);
}
public void delete(String id) {
userMapper.delete(id);
pictureService.deleteAll(id);
}
}

2
vue/src/components/template/mainHeader.vue

@ -21,7 +21,7 @@ @@ -21,7 +21,7 @@
<el-button :size="$store.state.size" type="primary" icon="el-icon-search" @click="$emit('query')"
v-if="flag.list"> 查询
</el-button>
<el-button :size="$store.state.size" type="success" icon="el-icon-plus" @click="add()" v-if="flag.save">
<el-button :size="$store.state.size" type="success" icon="el-icon-plus" @click="$emit('add')" v-if="flag.save">
添加{{name}}
</el-button>
<slot name="header"></slot>

2
vue/src/components/template/manage.vue

@ -1,6 +1,6 @@ @@ -1,6 +1,6 @@
<template>
<div id="mamageTemp">
<MainHead :name="name" :flag="flag" :terms="terms" :example="example" @query="query(1)"></MainHead>
<MainHead :name="name" :flag="flag" :terms="terms" :example="example" @add="add" @query="query(1)"></MainHead>
<!-- <el-row class="main-head" :style="{ height: $store.state.sizes.mainHead }">
<el-row type="flex" justify="end">
<span v-for="term in terms">

4
vue/src/router/index.ts

@ -19,6 +19,10 @@ const routes: Array<RouteConfig> = [ @@ -19,6 +19,10 @@ const routes: Array<RouteConfig> = [
path: '/config',
name: 'Config',
component: () => import('../views/sys/config.vue')
},{
path: '/user',
name: 'User',
component: () => import('../views/sys/user.vue')
}
]

6
vue/src/store/mutations.js

@ -8,7 +8,7 @@ const urls = { @@ -8,7 +8,7 @@ const urls = {
info: 'public/info',
dict: 'public/get/dict',
logout: 'public/logout',
host: 'public/host'
conf: 'public/conf'
}
function stop() {
@ -118,8 +118,8 @@ export default { @@ -118,8 +118,8 @@ export default {
},
getCfg(state) {
http.get(urls.host).then(rsp => {
state.host = rsp;
http.get(urls.conf).then(rsp => {
state.conf = rsp;
});
},

9
vue/src/store/state.js

@ -1,11 +1,14 @@ @@ -1,11 +1,14 @@
export default {
menuGroups: [],
menuGroups: [{
name: '主页',
id: 'home',
child: []
}],
sizes: {},
userInfo: {},
showHeader: true,
size: 'small',
dict: {},
handlers: {},
host: {},
network: "traHost"
conf: {}
}

12
vue/src/views/biz/picture.vue

@ -1,13 +1,6 @@ @@ -1,13 +1,6 @@
<template>
<div id="picture">
<MainHead name="图片" :flag="flag" :terms="terms" :example="example" @query="query(1)">
<template slot="title">
<span class="network-switch">
<div class="switch-label">网络环境:</div>
<el-switch v-model="$store.state.network" active-value="tertHost" inactive-value="traHost" :width="60" active-text="外网"
inactive-text="内网"></el-switch>
</span>
</template>
<template slot="header">
<el-upload class="upload-btn" :action="uploadUrl" :on-error="onError" :on-success="onSuccess" :multiple="false"
:show-file-list="false">
@ -22,7 +15,7 @@ @@ -22,7 +15,7 @@
<el-result icon="success" :title="item.remark ? item.remark : (index + 1).toString()"
:subTitle="item.time + ' ' + item.space + ' ' + item.remark">
<template slot="icon">
<el-image :src="'http//'+ $store.state.host[$store.state.network] + '/' + item.path">
<el-image :src="'http//'+ $store.state.conf.host + '/' + item.path">
</el-image>
</template>
<template slot="extra">
@ -116,7 +109,7 @@ @@ -116,7 +109,7 @@
copy(row) {
const that = this;
const host = this.$store.state.host[this.$store.state.network];
const host = this.$store.state.conf.host;
const path = 'http://' + host + "/" + row.path;
this.$copyText(path).then(e => {
that.$showMessage("success", "复制成功");
@ -231,6 +224,7 @@ @@ -231,6 +224,7 @@
.network-switch {
padding-left: 20px;
}
.switch-label {
float: left;
font-size: 16px;

109
vue/src/views/sys/user.vue

@ -0,0 +1,109 @@ @@ -0,0 +1,109 @@
<template>
<div id="user">
<Template ref="template" name="用户" :url="url" :flag="flag" :terms="terms" :props="props" :rules="rules"
:actions="actions"></template>
</div>
</template>
<script>
import {
Vue,
Component,
Prop
} from "vue-property-decorator";
import Template from '@/components/template/manage.vue';
import {
userName,
password,
name
} from '@/static/tool/validate.js';
@Component({
components: {
Template
}
})
export default class User extends Vue {
url = 'my/user'
flag = {
list: true,
save: true,
update: false,
del: true
}
rules = {
userId: [{
required: true,
message: '请输入用户名',
trigger: 'blur'
},
{
validator: userName,
trigger: 'blur'
}
],
password: [{
required: true,
message: '请输入密码',
trigger: 'blur'
},
{
validator: password,
trigger: 'blur'
}
],
name: [{
required: true,
message: '请输入用户姓名',
trigger: 'blur'
},
{
validator: name,
trigger: 'blur'
}
],
desc: [{
required: false,
max: 64,
message: '备注不得超过64位',
trigger: 'blur'
}
]
};
terms = [];
props = [{
code: 'userId',
name: '用户名',
readOnly: true,
width: 180
}, {
code: 'password',
name: '密码',
tableHide: true,
modifyHide: true
}, {
code: 'name',
name: '姓名',
width: 120
}, {
code: 'desc',
name: '备注',
width: 180
}];
actions = [];
created() {} // - 访this
mounted() {} // - 访DOM
beforeCreate() {} // -
beforeMount() {} // -
beforeUpdate() {} // -
updated() {} // -
beforeDestroy() {} // -
destroyed() {} // -
activated() {} //keep-alive
}
</script>
<style scoped>
#user {
padding: 0px 100px;
}
</style>
Loading…
Cancel
Save