第一次提交

main
HUOJIN\92525 2024-03-15 10:59:17 +08:00
commit 7991fe68ab
56 changed files with 16690 additions and 0 deletions

7
.gitignore vendored 100644
View File

@ -0,0 +1,7 @@
wms/target/
node_modules/
wms-vue/node_modules/
dist/
.idea/

3493
package-lock.json generated 100644

File diff suppressed because it is too large Load Diff

15
package.json 100644
View File

@ -0,0 +1,15 @@
{
"dependencies": {
"axios": "^1.3.4",
"element-ui": "^2.9.2",
"file-saver": "^2.0.2",
"less-loader": "^11.1.0",
"node-sass": "^8.0.0",
"sass-loader": "^13.0.0",
"style-loader": "^3.3.2",
"vue-router": "^3.5.4",
"vuex": "^3.0.0",
"webpack": "^5.76.2",
"xlsx": "^0.16.0"
}
}

23
wms-vue/.gitignore vendored 100644
View File

@ -0,0 +1,23 @@
.DS_Store
node_modules
/dist
# local env files
.env.local
.env.*.local
# Log files
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
# Editor directories and files
.idea
.vscode
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?

24
wms-vue/README.md 100644
View File

@ -0,0 +1,24 @@
# wms-vue
## Project setup
```
npm install
```
### Compiles and hot-reloads for development
```
npm run serve
```
### Compiles and minifies for production
```
npm run build
```
### Lints and fixes files
```
npm run lint
```
### Customize configuration
See [Configuration Reference](https://cli.vuejs.org/config/).

View File

@ -0,0 +1,5 @@
module.exports = {
presets: [
'@vue/cli-plugin-babel/preset'
]
}

View File

@ -0,0 +1,19 @@
{
"compilerOptions": {
"target": "es5",
"module": "esnext",
"baseUrl": "./",
"moduleResolution": "node",
"paths": {
"@/*": [
"src/*"
]
},
"lib": [
"esnext",
"dom",
"dom.iterable",
"scripthost"
]
}
}

10944
wms-vue/package-lock.json generated 100644

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,45 @@
{
"name": "wms-vue",
"version": "0.1.0",
"private": true,
"scripts": {
"serve": "vue-cli-service serve",
"build": "vue-cli-service build",
"lint": "vue-cli-service lint"
},
"dependencies": {
"core-js": "^3.8.3",
"vue": "^2.7.14",
"element-ui": "^2.15.13"
},
"devDependencies": {
"@babel/core": "^7.12.16",
"@babel/eslint-parser": "^7.12.16",
"@vue/cli-plugin-babel": "~5.0.0",
"@vue/cli-plugin-eslint": "~5.0.0",
"@vue/cli-service": "~5.0.0",
"eslint": "^7.32.0",
"eslint-plugin-vue": "^8.0.3",
"vue-template-compiler": "^2.6.14"
},
"eslintConfig": {
"root": true,
"env": {
"node": true
},
"extends": [
"plugin:vue/essential",
"eslint:recommended"
],
"parserOptions": {
"parser": "@babel/eslint-parser"
},
"rules": {
}
},
"browserslist": [
"> 1%",
"last 2 versions",
"not dead"
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

View File

@ -0,0 +1,17 @@
<!DOCTYPE html>
<html lang="">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<link rel="icon" href="<%= BASE_URL %>favicon.ico">
<title><%= htmlWebpackPlugin.options.title %></title>
</head>
<body>
<noscript>
<strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
</noscript>
<div id="app"></div>
<!-- built files will be auto injected -->
</body>
</html>

View File

@ -0,0 +1,19 @@
<template>
<div id="app">
<router-view></router-view>
</div>
</template>
<script>
export default {
name: 'App',
components: {
}
}
</script>
<style>
#app {
height: 100%;
}
</style>

View File

@ -0,0 +1,4 @@
*{
margin: 0;
padding: 0;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 160 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 115 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

View File

@ -0,0 +1,53 @@
<template>
<el-menu
default-active="/home"
style="height: 100vh;"
class="el-menu-vertical-demo"
background-color="#545c64"
text-color="#fff"
active-text-color="#ffd04b"
:collapse="isCollapse"
:collapse-transition="false"
router
>
<el-submenu index="/home">
<template slot="title">
<i class="el-icon-s-home"></i>
<span slot="title">系统管理</span>
</template>
<el-menu-item index="/main">用户管理</el-menu-item>
</el-submenu>
<el-menu-item :index="'/'+item.menuClick" v-for="(item,i) in menu" :key="i">
<i :class="item.menuIcon"> </i>
<span slot="title">{{item.menuName}}</span>
</el-menu-item>
</el-menu>
</template>
<script>
export default {
name: "Aside",
data(){
return{
}
},
computed:{
"menu":{
get(){
return this.$store.state.menu
}
}
},
props:{
isCollapse:Boolean
}
}
</script>
<style scoped>
</style>

View File

@ -0,0 +1,68 @@
<template>
<div style="display: flex;line-height: 60px;">
<div style="margin-top: 8px;">
<i :class="icon" style="font-size: 20px;cursor: pointer" @click="collapse"></i>
</div>
<div style="flex:1px;text-align: center;font-size: 34px;">
<span>友仓WMS管理平台</span>
</div>
<el-dropdown>
<span>{{ user.userName }}</span>
<i class="el-icon-arrow-down" style="margin-left: 5px;"></i>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item @click.native="toUser">个人中心</el-dropdown-item>
<el-dropdown-item @click.native="logOut">退出登录</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</div>
</template>
<script>
export default {
name: "Header",
data() {
return {
user: JSON.parse(sessionStorage.getItem('user'))
}
},
props: {
icon: String
},
methods: {
toUser() {
this.$router.push('/home')
},
logOut() {
this.$confirm('您确认是否退出登录?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
this.$router.replace('/login')
sessionStorage.clear();
this.$message({
type: 'success',
message: '已退出!'
});
}).catch(() => {
this.$message({
type: 'info',
message: '已取消操作'
});
});
},
collapse() {
this.$emit('doCollapse')
}
},
created() {
this.$router.push('/home')
}
}
</script>
<style scoped>
</style>

View File

@ -0,0 +1,60 @@
<template>
<el-descriptions class="margin-top" title="用户信息" :column="3" :size="size" border>
<template slot="extra">
<el-button type="primary" size="small">操作</el-button>
</template>
<el-descriptions-item>
<template slot="label">
<i class="el-icon-user"></i>
用户名
</template>
{{ user.userName }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label">
<i class="el-icon-mobile-phone"></i>
手机号
</template>
{{ user.phone }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label">
<i class="el-icon-location-outline"></i>
居住地
</template>
苏州市
</el-descriptions-item>
<el-descriptions-item>
<template slot="label">
<i class="el-icon-tickets"></i>
角色
</template>
<el-tag size="small">
{{ user.roleId === 0 ? '超级管理员' : (user.roleId === 1 ? '管理员' : '用户') }}
</el-tag>
</el-descriptions-item>
<el-descriptions-item>
<template slot="label">
<i class="el-icon-office-building"></i>
联系地址
</template>
</el-descriptions-item>
</el-descriptions>
</template>
<script>
export default {
name: "Home",
data () {
return {
user: JSON.parse(sessionStorage.getItem('user')),
size:''
}
}
}
</script>
<style scoped>
</style>

View File

@ -0,0 +1,61 @@
<template>
<el-container style="height: 100%; border: 1px solid #eee">
<el-aside :width="aside_width" style="background-color: rgb(238, 241, 246);margin-left: -1px;">
<Aside :isCollapse="isCollapse"></Aside>
</el-aside>
<el-container style="height: 100%">
<el-header style="text-align: right; font-size: 12px; height: 100%;border-bottom: rgba(168,168,168,0.3) 1px solid;">
<Header @doCollapse="doCollapse" :icon="icon"></Header>
</el-header>
<el-main style="height: 100%">
<!-- <Main></Main>-->
<router-view/>
</el-main>
</el-container>
</el-container>
</template>
<script>
import Aside from "@/components/Aside.vue";
import Header from "@/components/Header.vue";
export default {
name: "Index",
components: {Header, Aside},
data(){
return{
isCollapse:false,
aside_width:'200px',
icon:'el-icon-s-fold',
}
},
methods:{
doCollapse(){
this.isCollapse=!this.isCollapse
//
if(!this.isCollapse){
this.aside_width='200px';
this.icon='el-icon-s-fold';
}else{
this.aside_width='64px';
this.icon='el-icon-s-unfold';
}
}
}
}
</script>
<style >
/*.el-header {
color: #333;
line-height: 60px;
}
.el-aside {
color: #333;
}*/
</style>

View File

@ -0,0 +1,264 @@
<template>
<div class="loginDiv">
<div class="login-box">
<h2>智能仓储WMS</h2>
<form>
<div class="user-box">
<input type="text" name="" required="" v-model="ruleForm.userNo" @keyup.enter="login"/>
<label>账号</label>
</div>
<div class="user-box">
<input type="password" name="" required="" v-model="ruleForm.passWord" @keyup.enter="login"/>
<label>密码</label>
</div>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<a href="javascript:"
@click="login"
>
<span></span>
<span></span>
<span></span>
<span></span>
登录
</a>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<a>注册 </a>
</form>
</div>
</div>
</template>
<script>
export default {
name: "login",
data() {
return {
ruleForm: {
userNo: '',
passWord: '',
}
}
},
methods: {
login() {
if (this.ruleForm.userNo == null || this.ruleForm.userNo.length <= 0) {
this.$message({
message: '请输入账号',
type: 'error'
});
return;
}
if (this.ruleForm.passWord == null || this.ruleForm.passWord.length <= 0) {
this.$message({
message: '请输入密码',
type: 'error'
});
return;
}
const loading = this.$loading({
lock: true,
text: '正在加载',
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)'
});
this.$axios.post(this.$httpUrl + '/user/login', this.ruleForm).then(res => res.data)
.then(res => {
if (res.code == 200) {
//
sessionStorage.setItem("user", JSON.stringify(res.data.user))
console.log(res.data.menu)
this.$store.commit("setMenu",res.data.menu)
//
this.$router.push('/index')
} else {
this.$message.error(res.msg);
}
})
.catch(function (err) {
console.log(err);
})
setTimeout(() => {
loading.close();
}, 1000);
}
}
}
</script>
<style lang="less" scoped>
.loginDiv {
width: 100%;
height: 100vh;
background-image: url('~@/assets/login.jpeg');
background-repeat: no-repeat;
background-position: center center;
background-size: 100% 100%;
image-rendering: -webkit-crisp-edges;
}
.login-box {
position: absolute;
top: 50%;
left: 50%;
width: 400px;
padding: 40px;
transform: translate(-50%, -50%);
background: rgba(0, 0, 0, .5);
box-sizing: border-box;
box-shadow: 0 15px 25px rgba(0, 0, 0, .6);
border-radius: 10px;
}
.login-box h2 {
margin: 0 0 30px;
padding: 0;
color: #fff;
text-align: center;
}
.login-box .user-box {
position: relative;
}
.login-box .user-box input {
width: 100%;
padding: 10px 0;
font-size: 16px;
color: #fff;
margin-bottom: 30px;
border: none;
border-bottom: 1px solid #fff;
outline: none;
background: transparent;
}
.login-box .user-box label {
position: absolute;
top: 0;
left: 0;
padding: 10px 0;
font-size: 16px;
color: #fff;
pointer-events: none;
transition: .5s;
}
.login-box .user-box input:focus ~ label,
.login-box .user-box input:valid ~ label {
top: -20px;
left: 0;
color: #03e9f4;
font-size: 12px;
}
.login-box form a {
position: relative;
display: inline-block;
padding: 10px 20px;
color: #03e9f4;
font-size: 16px;
text-decoration: none;
text-transform: uppercase;
overflow: hidden;
transition: .5s;
margin-top: 40px;
letter-spacing: 4px
}
.login-box a:hover {
background: #03e9f4;
color: #fff;
border-radius: 5px;
box-shadow: 0 0 5px #03e9f4,
0 0 25px #03e9f4,
0 0 50px #03e9f4,
0 0 100px #03e9f4;
}
.login-box a span {
position: absolute;
display: block;
}
.login-box a span:nth-child(1) {
top: 0;
left: -100%;
width: 100%;
height: 2px;
background: linear-gradient(90deg, transparent, #03e9f4);
animation: btn-anim1 1s linear infinite;
}
@keyframes btn-anim1 {
0% {
left: -100%;
}
50%, 100% {
left: 100%;
}
}
.login-box a span:nth-child(2) {
top: -100%;
right: 0;
width: 2px;
height: 100%;
background: linear-gradient(180deg, transparent, #03e9f4);
animation: btn-anim2 1s linear infinite;
animation-delay: .25s
}
@keyframes btn-anim2 {
0% {
top: -100%;
}
50%, 100% {
top: 100%;
}
}
.login-box a span:nth-child(3) {
bottom: 0;
right: -100%;
width: 100%;
height: 2px;
background: linear-gradient(270deg, transparent, #03e9f4);
animation: btn-anim3 1s linear infinite;
animation-delay: .5s
}
@keyframes btn-anim3 {
0% {
right: -100%;
}
50%, 100% {
right: 100%;
}
}
.login-box a span:nth-child(4) {
bottom: -100%;
left: 0;
width: 2px;
height: 100%;
background: linear-gradient(360deg, transparent, #03e9f4);
animation: btn-anim4 1s linear infinite;
animation-delay: .75s
}
@keyframes btn-anim4 {
0% {
bottom: -100%;
}
50%, 100% {
bottom: 100%;
}
}
</style>

View File

@ -0,0 +1,470 @@
<template>
<div class="div1">
<div class="div2" style="padding-bottom: 10px">
<div style="float: right">
<el-select v-model="xb" clearable filterable placeholder="请选择性别" style="width: 100px">
<el-option
v-for="item in xbs"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
<el-input v-model="name"
placeholder="请输入姓名"
style="width: 200px;margin-left: 5px"
class="input-with-select"
@keyup.enter.native="queryUser">
<el-button class="el-input-group__prepend" slot="append" icon="el-icon-search" @click="queryUser"></el-button>
</el-input>
<el-button type="success" icon="el-icon-refresh-left" style="margin-left: 5px;" @click="rest"></el-button>
</div>
<div class="div3" style="">
<el-button type="primary" icon="el-icon-plus" @click="add"></el-button>
<el-button type="success" icon="el-icon-edit" @click="mod"></el-button>
<el-button type="danger" icon="el-icon-delete" @click="del"></el-button>
<el-button type="warning" icon="el-icon-download" @click="exportExcel"></el-button>
</div>
</div>
<el-dialog :title="title"
:visible.sync="centerDialogVisible"
width="30%"
:before-close="handleClose"
center>
<el-form ref="form"
:model="form"
:rules="rules"
label-width="80px">
<el-form-item label="账号" prop="userNo">
<el-input v-model="form.userNo" style="width: 300px;"></el-input>
</el-form-item>
<el-form-item label="姓名" prop="userName">
<el-input v-model="form.userName" style="width: 300px;"></el-input>
</el-form-item>
<el-form-item label="年龄" prop="age">
<el-input v-model.number="form.age" style="width: 300px;" autocomplete="off"></el-input>
</el-form-item>
<el-form-item label="性别">
<el-radio-group v-model="form.sex">
<el-radio label='1'></el-radio>
<el-radio label='0'></el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="电话" prop="phone">
<el-input v-model="form.phone" style="width: 300px;"></el-input>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="cancelDialog"> </el-button>
<el-button type="primary" @click="addUser"> </el-button>
</div>
</el-dialog>
<el-table
:header-cell-style="{background:'#000',color:'#fff'}"
:data="tableData"
id="educe-table"
ref="tableData"
@selection-change="handleSelectionChange"
@select="selectionRow"
style="width: 100%;">
<el-table-column
type="selection"
width="55">
</el-table-column>
<el-table-column
fixed
label="序号"
v-if="false"
width="180">
<template slot-scope="scope">
<span style="margin-left: 10px">{{ scope.row.id }}</span>
</template>
</el-table-column>
<el-table-column
fixed
label="账号"
width="180">
<template slot-scope="scope">
<el-popover trigger="hover" placement="top">
<p>账号: {{ scope.row.userNo }}</p>
<p>电话: {{ scope.row.phone }}</p>
<div slot="reference" class="name-wrapper">
<el-tag size="medium">{{ scope.row.userNo }}</el-tag>
</div>
</el-popover>
</template>
</el-table-column>
<el-table-column
label="姓名"
width="180">
<template slot-scope="scope">
<div slot="reference" class="name-wrapper">
<span>{{ scope.row.userName }}</span>
</div>
</template>
</el-table-column>
<el-table-column
label="年龄"
width="180">
<template slot-scope="scope">
<div slot="reference" class="name-wrapper">
<span>{{ scope.row.age }}</span>
</div>
</template>
</el-table-column>
<el-table-column
label="电话"
width="180">
<template slot-scope="scope">
<div slot="reference" class="name-wrapper">
<span>{{ scope.row.phone }}</span>
</div>
</template>
</el-table-column>
<el-table-column
label="性别"
width="180">
<template slot-scope="scope">
<div slot="reference" class="name-wrapper">
<el-tag size="medium" :type="scope.row.sex ===0 ? 'primary' : 'success'">
{{ scope.row.sex === 0 ? '女' : '男' }}
</el-tag>
</div>
</template>
</el-table-column>
<el-table-column
label="角色"
width="180">
<template slot-scope="scope">
<div slot="reference" class="name-wrapper">
<el-tag size="medium"
:type="scope.row.roleId ===0 ? 'danger' : (scope.row.roleId ===1 ? 'primary':'success') ">
{{ scope.row.roleId === 0 ? '超级管理员' : (scope.row.roleId === 1 ? '管理员' : '用户') }}
</el-tag>
</div>
</template>
</el-table-column>
<el-table-column
fixed="right"
label="操作"
width="100">
<template slot-scope="scope">
<!-- <el-button
size="small"
@click="handleEdit(scope.$index, scope.row)">编辑
</el-button>
<el-button
size="small"
type="danger"
@click="handleDelete(scope.$index, scope.row)">删除
</el-button>-->
<el-button @click="handleClick(scope.row)" type="text" size="small">查看</el-button>
<el-button type="text" size="small" @click="editUser(scope.row)"></el-button>
</template>
</el-table-column>
</el-table>
<el-pagination
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="pageNum"
:page-sizes="[10, 50, 150, 200]"
:page-size="pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="total">
</el-pagination>
</div>
</template>
<script>
import {outFile} from "@/util/excel.vue";
export default {
name: "Main",
data() {
//
let checkuserNo = (rule, value, callback) => {
let id=0;
if(this.form.id>0){
id=this.form.id;
}
this.$axios.get(this.$httpUrl + '/user/queryuserNo?id='+id+'&userNo='+ this.form.userNo).then(res => res.data)
.then(res => {
if (res.code == 200) {
callback(new Error(this.form.userNo + '账号已存在!'));
} else {
callback();
}
})
.catch(function (err) {
console.log(err);
})
};
return {
tableData: [],
pageSize: 10,
pageNum: 1,
total: 3,
name: '',
xb: '',
zh:'',
xbs: [
{
value: '1',
label: '男'
},
{
value: '0',
label: '女'
}
],
form: {
id: '',
userNo: '',
userName: '',
passWord:'123456',
age: '',
sex: '1',
phone: '',
roleId: '2'
},
rules: {
userNo: [
{required: true, message: '请输入账号', trigger: 'blur'},
{ validator: checkuserNo, trigger: 'blur' }
],
userName: [
{required: true, message: '请输入姓名', trigger: 'blur'},
],
age: [
{required: true, message: '年龄不能为空'},
{type: 'number', message: '年龄必须为数字值'}
]
},
multipleSelection:[],
centerDialogVisible: false,
title:''
}
},
methods: {
handleEdit(index, row) {
console.log(index, row);
},
handleDelete(index, row) {
console.log(index, row);
},
handleSizeChange(val) {
console.log(`每页 ${val}`);
this.pageNum = 1;
this.pageSize = val;
this.queryUser();
},
handleCurrentChange(val) {
console.log(`当前页: ${val}`);
this.pageNum = val;
this.queryUser();
},
queryUser() {
//
this.$axios.post(this.$httpUrl + '/user/queryUser', {
pageSize: this.pageSize,
pageNum: this.pageNum,
param: {
name: this.name,
xb: this.xb
}
}).then(res => res.data)
.then(res => {
if (res.code == 200) {
this.tableData = res.data
this.total = res.total
} else {
this.$message.error('获取数据失败');
}
})
.catch(function (err) {
console.log(err);
})
},
rest() {
//
this.name = '',
this.xb = ''
},
add() {
//
this.title="新增用户"
this.centerDialogVisible = true;
//
this.$nextTick(() => {
this.resetForm()
})
},
resetForm() {
this.$refs["form"].resetFields();
this.$data.form=JSON.parse(JSON.stringify(this.$options.data().form))
},
handleClose(){
//
this.centerDialogVisible=false;
this.form.sex='1';
},
cancelDialog(){
//
this.centerDialogVisible=false;
this.resetForm();
this.form.sex='1';
this.$refs.tableData.clearSelection()
},
addUser() {
//
this.$refs["form"].validate((valid) => {
if (valid) {
this.$axios.post(this.$httpUrl + '/user/addorupdate', this.form).then(res => res.data)
.then(res => {
if (res.code == 200) {
this.$message({
message: res.msg,
type: 'success'
});
this.centerDialogVisible = false;//退
this.queryUser();//
this.resetForm();
} else {
this.$message.error(res.msg);
}
})
.catch(function (err) {
console.log(err);
})
} else {
return false;
}
});
},
editUser(row){
//
this.title="编辑用户"
this.centerDialogVisible = true;
this.$nextTick(() => {
this.form=JSON.parse(JSON.stringify(row));
this.form.sex=row.sex+''
this.$refs.tableData.toggleRowSelection(row, true);//
})
},
handleSelectionChange(val) {
this.multipleSelection = val;
let planIdList = [];
for (let item of this.multipleSelection) {
planIdList.push(item.id);
}
console.log(planIdList);
},
selectionRow(selection,row){
},
mod(){
//
if(this.$refs.tableData.selection.length==1){
this.title="编辑用户"
this.centerDialogVisible = true;
for (let item of this.multipleSelection) {
this.form=JSON.parse(JSON.stringify(item));
this.form.sex=item.sex+''
}
}else{
this.$message.error('请选中一条记录!');
}
},
del(){
//
if(this.$refs.tableData.selection.length==0){
this.$message.error('请至少选中一条记录!');
}else{
this.$confirm('此操作将永久删除, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
let ids=[];
for (let item of this.multipleSelection) {
ids.push(item.id)
}
this.$axios.get(this.$httpUrl + '/user/deleteUser?ids='+ids.toString()).then(res => res.data)
.then(res => {
if (res.code == 200) {
this.$message({
message: res.msg,
type: 'success'
});
this.queryUser()//
} else {
this.$message.error(res.msg);
}
})
.catch(function (err) {
console.log(err);
})
}).catch(() => {
this.$message({
type: 'info',
message: '已取消删除'
});
});
}
},
exportExcel(){
this.fixs = false
this.$nextTick(() => {
outFile('educe-table', '(用户)')
this.fixs = true
})
}
},
beforeMount() {
this.queryUser();
}
}
</script>
<style lang="scss" scoped>
</style>

View File

@ -0,0 +1,13 @@
<template>
<span>admin</span>
</template>
<script>
export default {
name: "admin"
}
</script>
<style scoped>
</style>

View File

@ -0,0 +1,13 @@
<template>
<span>user</span>
</template>
<script>
export default {
name: "user"
}
</script>
<style scoped>
</style>

View File

@ -0,0 +1,20 @@
import Vue from 'vue'
import App from './App.vue'
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
import './assets/global.css';
import axios from "axios";
import VueRouter from "vue-router";
import router from "@/router/router";
import store from "@/store/store";
Vue.prototype.$axios=axios;
Vue.prototype.$httpUrl='http://localhost:8081';
Vue.config.productionTip = false;
Vue.use(VueRouter)
Vue.use(ElementUI,{size:'small'});
new Vue({
router,
store,
render: h => h(App),
}).$mount('#app')

View File

@ -0,0 +1,69 @@
import VueRouter from "vue-router";
const routes=[
{
path:'/login',
name:'login',
component: () => import('../components/Login')
},
{
path:'/index',
name:'index',
component: () => import('../components/Index'),
children:[
{
path:'/home',
name:'home',
meta:{
title:'首页'
},
component: () => import('../components/Home')
},
{
path:'/admin',
name:'admin',
meta:{
title:'超级管理员'
},
component: () => import('../components/admin/Admin')
},
{
path:'/user',
name:'user',
meta:{
title:'用户'
},
component: () => import('../components/user/User')
},
{
path:'/admin',
name:'admin',
meta:{
title:'管理员'
},
component: () => import('../components/admin/Admin')
},
{
path:'/main',
name:'main',
meta:{
title:'用户管理'
},
component: () => import('../components/Main')
}
]
}
]
const route=new VueRouter({
mode:'history',
routes
})
const VueRouterPush = VueRouter.prototype.push
VueRouter.prototype.push = function push (to) {
return VueRouterPush.call(this, to).catch(err => err)
}
export default route;

View File

@ -0,0 +1,19 @@
import vue from 'vue'
import Vuex from 'vuex'
vue.use(Vuex)
export default new Vuex.Store({
state:{
menu:[]
},
mutations:{
setMenu(state,menuList){
state.menu=menuList
}
},
getters:{
getMenu(state){
return state.menu
}
}
})

View File

@ -0,0 +1,36 @@
<template>
</template>
<script>
import FileSaver from 'file-saver'
import XLSX from 'xlsx'
export default {
}
// Excel
export function outFile(id, fileName) {
let fix = document.querySelector('.el-table__fixed');
let wb;
if(fix){ //fixedexceldomappend
wb = XLSX.utils.table_to_book(document.querySelector('#' + id).removeChild(fix));
document.querySelector('#' + id).appendChild(fix);
}else{
wb = XLSX.utils.table_to_book(document.querySelector('#' + id));
}
let wbout = XLSX.write(wb, { bookType: 'xlsx', bookSST: true, type: 'array' })
try {
FileSaver.saveAs(new Blob([wbout], { type: 'application/octet-stream' }), fileName + '.xlsx')
} catch (e) {
if (typeof console !== 'undefined') console.log(e, wbout)
}
return wbout
}
</script>
<style scoped>
</style>

View File

@ -0,0 +1,5 @@
const { defineConfig } = require('@vue/cli-service')
module.exports = defineConfig({
transpileDependencies: true,
lintOnSave: false
})

Binary file not shown.

View File

@ -0,0 +1,18 @@
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.8.7/apache-maven-3.8.7-bin.zip
wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.1/maven-wrapper-3.1.1.jar

92
wms/pom.xml 100644
View File

@ -0,0 +1,92 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.6</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.yc</groupId>
<artifactId>wms</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>wms</name>
<description>wms</description>
<properties>
<java.version>8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<version>8.0.32</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus</artifactId>
<version>3.4.2</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.spring4all</groupId>
<artifactId>spring-boot-starter-swagger</artifactId>
<version>1.5.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.28</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.3.2</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.1</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project>

View File

@ -0,0 +1,13 @@
package com.yc.wms;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class WmsApplication {
public static void main(String[] args) {
SpringApplication.run(WmsApplication.class, args);
}
}

View File

@ -0,0 +1,41 @@
package com.yc.wms.controller;
import com.yc.wms.model.Menu;
import com.yc.wms.service.MenuService;
import com.yc.wms.until.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* <p>
*
* </p>
*
* @author wms
* @since 2023-07-07
*/
@RestController
@RequestMapping("/menu")
public class MenuController {
@Autowired
private MenuService menuService;
/**
*
* @param roleId
* @return
*/
@GetMapping("/queryMenu")
public Result queryMenu(@RequestParam String roleId) {
List list=menuService.lambdaQuery().like(Menu::getMenuRight,roleId).list();
return Result.success(list);
}
}

View File

@ -0,0 +1,154 @@
package com.yc.wms.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yc.wms.model.Menu;
import com.yc.wms.model.User;
import com.yc.wms.service.MenuService;
import com.yc.wms.service.UserService;
import com.yc.wms.until.QueryPageUtil;
import com.yc.wms.until.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
/**
* <p>
*
* </p>
*
* @author wms
* @since 2023-03-04
*/
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
@Autowired
private MenuService menuService;
/**
* @return
*
*/
@PostMapping ("/login")
public Result login(@RequestBody User user) {
Result result = null;
List<User> list= userService.lambdaQuery()
.eq(User::getUserNo,user.getUserNo())
.eq(User::getPassWord,user.getPassWord()).list();
if(list.size()>0){
List menulist=menuService.lambdaQuery().like(Menu::getMenuRight,list.get(0).getRoleId().toString()).list();
HashMap map =new HashMap();
map.put("user",list.get(0));
map.put("menu",menulist);
result=Result.success(map);
}else{
result=Result.fail("账号或密码输入有误!");
}
return result;
}
/**
* @return
* @param
*/
@PostMapping("/queryUser")
public Result queryUser(@RequestBody QueryPageUtil query) {
HashMap map = query.getParam();
String name = (String) map.get("name");
String sex = (String) map.get("xb");
Page<User> page = new Page<User>();
page.setCurrent(query.getPageNum());
page.setSize(query.getPageSize());
System.out.println("当前页:" + query.getPageNum());
System.out.println("条数:" + query.getPageSize());
LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper();
if (name != null && name.length() > 0) {
lambdaQueryWrapper.like(User::getUserName, name);
}
if (sex != null && sex.length() > 0) {
lambdaQueryWrapper.like(User::getSex, sex);
}
IPage iPage = userService.QueryUser(page, lambdaQueryWrapper);
System.out.println(iPage.getTotal());
System.out.println(iPage.getRecords());
return Result.success(iPage.getTotal(), iPage.getRecords());
}
/**
* @return
* @param
*/
@PostMapping("/addorupdate")
public Result addorupdate(@RequestBody User user) {
Result results = null;
boolean result = userService.saveOrUpdate(user);
if (result) {
results = Result.success();
} else {
results = Result.fail();
}
return results;
}
/**
* @return
* @param
*/
@GetMapping("/deleteUser")
public Result deleteUser(String ids) {
Result result = null;
if (ids != null && ids.length() > 0) {
List<String> uersIds = Arrays.asList(ids.split(","));
for (String id : uersIds) {
userService.removeById(Integer.parseInt(id));
}
result = Result.success();
} else {
result = Result.fail("参数为null");
}
return result;
}
/**
* @return
* @param
*/
@GetMapping("/queryuserNo")
public Result queryuserNo(@RequestParam String userNo, @RequestParam long id) {
Result result = null;
if (id > 0) {
List<User> list = userService.lambdaQuery().eq(User::getUserNo, userNo).list();
if (list.size() > 0) {
if (list.get(0).getId() == id && list.get(0).getUserNo().equals(userNo)) {
result = Result.fail();
} else {
result = Result.success(list);
}
} else {
result = Result.fail();
}
} else {
List list = userService.lambdaQuery().eq(User::getUserNo, userNo).list();
if (list.size() > 0) {
result = Result.success(list);
} else {
result = Result.fail();
}
}
return result;
}
}

View File

@ -0,0 +1,18 @@
package com.yc.wms.mapper;
import com.yc.wms.model.Menu;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
/**
* <p>
* Mapper
* </p>
*
* @author wms
* @since 2023-07-07
*/
@Mapper
public interface MenuMapper extends BaseMapper<Menu> {
}

View File

@ -0,0 +1,25 @@
package com.yc.wms.mapper;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.yc.wms.model.User;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* <p>
* Mapper
* </p>
*
* @author wms
* @since 2023-03-04
*/
@Mapper
public interface UserMapper extends BaseMapper<User> {
List<User> Base_Column_List();
IPage QueryUser(IPage<User> page, @Param(Constants.WRAPPER) Wrapper wrapper);
}

View File

@ -0,0 +1,62 @@
package com.yc.wms.model;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableField;
import java.io.Serializable;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
*
* </p>
*
* @author wms
* @since 2023-07-07
*/
@Data
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="Menu对象", description="")
public class Menu implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.AUTO)
private Long id;
@ApiModelProperty(value = "菜单编码")
@TableField("menuCode")
private String menuCode;
@ApiModelProperty(value = "菜单名称")
@TableField("menuName")
private String menuName;
@ApiModelProperty(value = "菜单级别")
@TableField("menuLevel")
private String menuLevel;
@ApiModelProperty(value = "菜单的父编号")
@TableField("menuParentCode")
private String menuParentCode;
@ApiModelProperty(value = "点击的触发的函数")
@TableField("menuClick")
private String menuClick;
@ApiModelProperty(value = "权限 0 超级管理员1 管理员2 用户 可以用逗号组合使用")
@TableField("menuRight")
private String menuRight;
@TableField("menuComponent")
private String menuComponent;
@ApiModelProperty(value = "图标")
@TableField("menuIcon")
private String menuIcon;
}

View File

@ -0,0 +1,51 @@
package com.yc.wms.model;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import java.io.Serializable;
import com.baomidou.mybatisplus.annotation.TableId;
import io.swagger.annotations.ApiModel;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
*
* </p>
*
* @author wms
* @since 2023-03-04
*/
@Data
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="User对象", description="")
public class User implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(type=IdType.AUTO)
private Integer id;
@TableField("userNo")
private String userNo;
@TableField("userName")
private String userName;
@TableField("passWord")
private String passWord;
private Integer age;
private Integer sex;
private String phone;
@TableField("roleId")
private Integer roleId;
@TableField("isValid")
private Boolean isValid=false;
}

View File

@ -0,0 +1,16 @@
package com.yc.wms.service;
import com.yc.wms.model.Menu;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* <p>
*
* </p>
*
* @author wms
* @since 2023-07-07
*/
public interface MenuService extends IService<Menu> {
}

View File

@ -0,0 +1,26 @@
package com.yc.wms.service;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.yc.wms.model.User;
import com.baomidou.mybatisplus.extension.service.IService;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* <p>
*
* </p>
*
* @author wms
* @since 2023-03-04
*/
public interface UserService extends IService<User> {
public List<User> Base_Column_List();
public IPage QueryUser(IPage<User> page, Wrapper wrapper);
}

View File

@ -0,0 +1,20 @@
package com.yc.wms.service.impl;
import com.yc.wms.model.Menu;
import com.yc.wms.mapper.MenuMapper;
import com.yc.wms.service.MenuService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
* <p>
*
* </p>
*
* @author wms
* @since 2023-07-07
*/
@Service
public class MenuServiceImpl extends ServiceImpl<MenuMapper, Menu> implements MenuService {
}

View File

@ -0,0 +1,38 @@
package com.yc.wms.service.impl;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.yc.wms.model.User;
import com.yc.wms.mapper.UserMapper;
import com.yc.wms.service.UserService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* <p>
*
* </p>
*
* @author wms
* @since 2023-03-04
*/
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
@Autowired
private UserMapper UserMapper;
@Override
public List<User> Base_Column_List() {
return UserMapper.Base_Column_List();
}
@Override
public IPage QueryUser(IPage<User> page, Wrapper wrapper) {
return UserMapper.QueryUser(page,wrapper);
}
}

View File

@ -0,0 +1,133 @@
package com.yc.wms.until;
import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
import com.baomidou.mybatisplus.core.toolkit.StringPool;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.InjectionConfig;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.po.TableInfo;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class CodeGenerator {
/**
* <p>
*
* </p>
*/
public static String scanner(String tip) {
Scanner scanner = new Scanner(System.in);
StringBuilder help = new StringBuilder();
help.append("请输入" + tip + "");
System.out.println(help.toString());
if (scanner.hasNext()) {
String ipt = scanner.next();
if (StringUtils.isNotBlank(ipt)) {
return ipt;
}
}
throw new MybatisPlusException("请输入正确的" + tip + "");
}
public static void main(String[] args) {
// 代码生成器
AutoGenerator mpg = new AutoGenerator();
// 全局配置
GlobalConfig gc = new GlobalConfig();
String projectPath = System.getProperty("user.dir")+"/wms";
gc.setOutputDir(projectPath + "/src/main/java");
gc.setAuthor("wms");
gc.setOpen(false);
gc.setSwagger2(true);
gc.setBaseResultMap(true);
gc.setBaseColumnList(true);
gc.setServiceName("%sService");
mpg.setGlobalConfig(gc);
// 数据源配置
DataSourceConfig dsc = new DataSourceConfig();
dsc.setUrl("jdbc:mysql://47.100.54.81:53306/wms?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC&useSSL=false&useOldAliasMetadataBehavior=true&autoReconnect=true&failOverReadOnly=false");
dsc.setDriverName("com.mysql.cj.jdbc.Driver");
dsc.setUsername("root");
dsc.setPassword("Youchain@56");
mpg.setDataSource(dsc);
// 包配置
PackageConfig pc = new PackageConfig();
pc.setParent("com.yc.wms")
.setEntity("model")
.setMapper("mapper")
.setService("service")
.setServiceImpl("service.impl")
.setController("controller");
mpg.setPackageInfo(pc);
// 自定义配置
InjectionConfig cfg = new InjectionConfig() {
@Override
public void initMap() {
// to do nothing
}
};
// 如果模板引擎是 freemarker
String templatePath = "/templates/mapper.xml.ftl";
// 如果模板引擎是 velocity
// String templatePath = "/templates/mapper.xml.vm";
// 自定义输出配置
List<FileOutConfig> focList = new ArrayList<>();
// 自定义配置会被优先输出
focList.add(new FileOutConfig(templatePath) {
@Override
public String outputFile(TableInfo tableInfo) {
// 自定义输出文件名 如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发生变化!!
return projectPath + "/src/main/resources/mapper/" + pc.getModuleName()
+ "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
}
});
cfg.setFileOutConfigList(focList);
mpg.setCfg(cfg);
// 配置模板
TemplateConfig templateConfig = new TemplateConfig();
// 配置自定义输出模板
//指定自定义模板路径,注意不要带上.ftl/.vm, 会根据使用的模板引擎自动识别
// templateConfig.setEntity("templates/entity2.java");
// templateConfig.setService();
// templateConfig.setController();
templateConfig.setXml(null);
mpg.setTemplate(templateConfig);
// 策略配置
StrategyConfig strategy = new StrategyConfig();
strategy.setNaming(NamingStrategy.underline_to_camel);
strategy.setColumnNaming(NamingStrategy.underline_to_camel);
//strategy.setSuperEntityClass("你自己的父类实体,没有就不用设置!");
strategy.setEntityLombokModel(true);
strategy.setRestControllerStyle(true);
// 公共父类
//strategy.setSuperControllerClass("你自己的父类控制器,没有就不用设置!");
// 写于父类中的公共字段
//strategy.setSuperEntityColumns("id");
strategy.setInclude(scanner("表名,多个英文逗号分割").split(","));
strategy.setControllerMappingHyphenStyle(true);
//strategy.setTablePrefix(pc.getModuleName() + "_");
mpg.setStrategy(strategy);
mpg.setTemplateEngine(new FreemarkerTemplateEngine());
mpg.execute();
}
}

View File

@ -0,0 +1,21 @@
package com.yc.wms.until;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class CorsConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
//是否发送Cookie
.allowCredentials(true)
//放行哪些原始域
.allowedOriginPatterns("*")
.allowedMethods(new String[]{"GET", "POST", "PUT", "DELETE"})
.allowedHeaders("*")
.exposedHeaders("*");
}
}

View File

@ -0,0 +1,25 @@
package com.yc.wms.until;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
@MapperScan("com.yc.wms.mapper")
public class MybatisPlusConfig {
/**
* ,mybatis, MybatisConfiguration#useDeprecatedExecutor = false ()
*/
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
return interceptor;
}
}

View File

@ -0,0 +1,15 @@
package com.yc.wms.until;
import lombok.Data;
import java.util.HashMap;
@Data
public class QueryPageUtil {
private static int PAGE_SIZE=20;
private static int PAGE_NUM=1;
private int pageSize=PAGE_SIZE;
private int pageNum=PAGE_NUM;
private HashMap param=new HashMap();
}

View File

@ -0,0 +1,45 @@
package com.yc.wms.until;
import lombok.Data;
@Data
public class Result {
private int code;//编码
private String msg;//内容
private long total;//总记录数
private Object data;//数据
public static Result fail(){
return result(400,"操作失败!",0,null);
}
public static Result fail(String msg){
return result(400,msg,0,null);
}
public static Result success(){
return result(200,"操作成功!",0,null);
}
public static Result success(Object data){
return result(200,"操作成功!",0,data);
}
public static Result success(String msg,Object data){
return result(200,msg,0,data);
}
public static Result success(long total,Object data){
return result(200,"操作成功!",total,data);
}
public static Result result(int code,String msg,long total,Object data){
Result rs=new Result();
rs.setCode(code);
rs.setMsg(msg);
rs.setTotal(total);
rs.setData(data);
return rs;
}
}

View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/java" isTestSource="false" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

View File

@ -0,0 +1,18 @@
server:
port: 8081
spring:
datasource:
url: jdbc:mysql://47.100.54.81:53306/wms?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC&useSSL=false&useOldAliasMetadataBehavior=true&autoReconnect=true&failOverReadOnly=false
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: Youchain@56
hikari:
connection-timeout: 60000
validation-timeout: 3000
idle-timeout: 60000
login-timeout: 5
max-lifetime: 60000
maximum-pool-size: 10
minimum-idle: 10
read-only: false

View File

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yc.wms.mapper.MenuMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="com.yc.wms.model.Menu">
<id column="id" property="id" />
<result column="menuCode" property="menuCode" />
<result column="menuName" property="menuName" />
<result column="menuLevel" property="menuLevel" />
<result column="menuParentCode" property="menuParentCode" />
<result column="menuClick" property="menuClick" />
<result column="menuRight" property="menuRight" />
<result column="menuComponent" property="menuComponent" />
<result column="menuIcon" property="menuIcon" />
</resultMap>
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
id, menuCode, menuName, menuLevel, menuParentCode, menuClick, menuRight, menuComponent, menuIcon
</sql>
</mapper>

View File

@ -0,0 +1,27 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yc.wms.mapper.UserMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="com.yc.wms.model.User">
<id column="id" property="id" />
<result column="userNo" property="userNo" />
<result column="userName" property="userName" />
<result column="passWord" property="passWord" />
<result column="age" property="age" />
<result column="sex" property="sex" />
<result column="phone" property="phone" />
<result column="roleId" property="roleId" />
<result column="isValid" property="isValid" />
</resultMap>
<!-- 通用查询结果列 -->
<select id="Base_Column_List" resultMap="BaseResultMap">
select * from user
</select>
<select id="QueryUser" resultType="com.yc.wms.model.User">
select * from user ${ew.customSqlSegment} order by id desc
</select>
</mapper>

View File

@ -0,0 +1,13 @@
package com.yc.wms;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class WmsApplicationTests {
@Test
void contextLoads() {
}
}

View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/java" isTestSource="true" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

8
wms/wms.iml 100644
View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<module version="4">
<component name="FacetManager">
<facet type="Spring" name="Spring">
<configuration />
</facet>
</component>
</module>