工厂信息

This commit is contained in:
打豆豆 2023-12-15 15:03:15 +08:00
parent b039bc4a96
commit 88c52b9693
6 changed files with 407 additions and 50 deletions

53
src/api/ownerContract.js Normal file
View File

@ -0,0 +1,53 @@
import request from '@/utils/request'
// 机构合同基本信息新增
export function addOwnerContBase(data) {
return request({
url: `/owner/contract/addOwnerContBase`,
method: 'post',
data
})
}
// 机构合同基本信息修改
export function modifyOwnerContBaseById(data) {
return request({
url: `/updateOrganInfo`,
method: 'post',
data
})
}
// 根据ID查看合同基本信息详情
export function findOwnById(id) {
return request({
url: `/owner/contract/findById/${id}`,
method: 'get'
})
}
// 根据ID查看合同基本信息详情
export function findByOrganId(organId) {
return request({
url: `/owner/contract/findByOrganId/${organId}`,
method: 'get'
})
}
// 获取登录用户机构信息
export function getOrganInfo(params) {
return request({
url: `/getOrganInfo`,
method: 'get',
params
})
}
export function updateLogoImg(params) {
return request({
url: ``,
method: 'get',
params
})
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.0 KiB

After

Width:  |  Height:  |  Size: 8.6 KiB

View File

@ -1,12 +1,39 @@
<template> <template>
<div class="navbar"> <div class="navbar">
<hamburger id="hamburger-container" :is-active="sidebar.opened" class="hamburger-container" @toggleClick="toggleSideBar" /> <hamburger
id="hamburger-container"
:is-active="sidebar.opened"
class="hamburger-container"
@toggleClick="toggleSideBar"
/>
<breadcrumb id="breadcrumb-container" class="breadcrumb-container" v-if="!topNav"/> <breadcrumb
<top-nav id="topmenu-container" class="topmenu-container" v-if="topNav"/> id="breadcrumb-container"
class="breadcrumb-container"
v-if="!topNav"
/>
<!--图片-->
<div
style="
display: inline-block;
width: 66%;
margin-left: 30px;
line-height: 40px;
"
>
<!--<el-image src="/images/logo.png" style="width:100%;height:40px"></el-image>-->
<el-image
v-show="this.companyImg != null || this.companyImg !=''"
:src="this.companyImg"
style="width: 100%; height: 46px"
></el-image>
</div>
<top-nav id="topmenu-container" class="topmenu-container" v-if="topNav" />
<div class="right-menu"> <div class="right-menu">
<template v-if="device!=='mobile'"> <template v-if="device !== 'mobile'">
<search id="header-search" class="right-menu-item" /> <search id="header-search" class="right-menu-item" />
<!-- <el-tooltip content="源码地址" effect="dark" placement="bottom"> <!-- <el-tooltip content="源码地址" effect="dark" placement="bottom">
@ -22,12 +49,14 @@
<el-tooltip content="布局大小" effect="dark" placement="bottom"> <el-tooltip content="布局大小" effect="dark" placement="bottom">
<size-select id="size-select" class="right-menu-item hover-effect" /> <size-select id="size-select" class="right-menu-item hover-effect" />
</el-tooltip> </el-tooltip>
</template> </template>
<el-dropdown class="avatar-container right-menu-item hover-effect" trigger="click"> <el-dropdown
class="avatar-container right-menu-item hover-effect"
trigger="click"
>
<div class="avatar-wrapper"> <div class="avatar-wrapper">
<img :src="avatar" class="user-avatar"> <img :src="avatar" class="user-avatar" />
<i class="el-icon-caret-bottom" /> <i class="el-icon-caret-bottom" />
</div> </div>
<el-dropdown-menu slot="dropdown"> <el-dropdown-menu slot="dropdown">
@ -47,15 +76,17 @@
</template> </template>
<script> <script>
import { mapGetters } from 'vuex' import { mapGetters } from "vuex";
import Breadcrumb from '@/components/Breadcrumb' import Breadcrumb from "@/components/Breadcrumb";
import TopNav from '@/components/TopNav' import TopNav from "@/components/TopNav";
import Hamburger from '@/components/Hamburger' import Hamburger from "@/components/Hamburger";
import Screenfull from '@/components/Screenfull' import Screenfull from "@/components/Screenfull";
import SizeSelect from '@/components/SizeSelect' import SizeSelect from "@/components/SizeSelect";
import Search from '@/components/HeaderSearch' import Search from "@/components/HeaderSearch";
import RuoYiGit from '@/components/RuoYi/Git' import RuoYiGit from "@/components/RuoYi/Git";
import RuoYiDoc from '@/components/RuoYi/Doc' import RuoYiDoc from "@/components/RuoYi/Doc";
import * as ownerServer from "@/api/ownerContract";
export default { export default {
components: { components: {
@ -66,48 +97,63 @@ export default {
SizeSelect, SizeSelect,
Search, Search,
RuoYiGit, RuoYiGit,
RuoYiDoc RuoYiDoc,
},
created() {
this.getOwnInfo();
},
data() {
return {
companyImg: null,
};
}, },
computed: { computed: {
...mapGetters([ ...mapGetters(["sidebar", "avatar", "device"]),
'sidebar',
'avatar',
'device'
]),
setting: { setting: {
get() { get() {
return this.$store.state.settings.showSettings return this.$store.state.settings.showSettings;
}, },
set(val) { set(val) {
this.$store.dispatch('settings/changeSetting', { this.$store.dispatch("settings/changeSetting", {
key: 'showSettings', key: "showSettings",
value: val value: val,
}) });
} },
}, },
topNav: { topNav: {
get() { get() {
return this.$store.state.settings.topNav return this.$store.state.settings.topNav;
} },
} },
}, },
methods: { methods: {
toggleSideBar() { toggleSideBar() {
this.$store.dispatch('app/toggleSideBar') this.$store.dispatch("app/toggleSideBar");
},
getOwnInfo() {
ownerServer.getOrganInfo().then((res) => {
if (res.code === 200 && res.data) {
this.companyImg = res.data.picture;
console.log(companyImg);
this.isEdit = true;
}
});
}, },
async logout() { async logout() {
this.$confirm('确定注销并退出系统吗?', '提示', { this.$confirm("确定注销并退出系统吗?", "提示", {
confirmButtonText: '确定', confirmButtonText: "确定",
cancelButtonText: '取消', cancelButtonText: "取消",
type: 'warning' type: "warning",
}).then(() => {
this.$store.dispatch('LogOut').then(() => {
location.href = '/index';
}) })
}).catch(() => {}); .then(() => {
} this.$store.dispatch("LogOut").then(() => {
} location.href = "/index";
} });
})
.catch(() => {});
},
},
};
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
@ -116,18 +162,18 @@ export default {
overflow: hidden; overflow: hidden;
position: relative; position: relative;
background: #fff; background: #fff;
box-shadow: 0 1px 4px rgba(0,21,41,.08); box-shadow: 0 1px 4px rgba(0, 21, 41, 0.08);
.hamburger-container { .hamburger-container {
line-height: 46px; line-height: 46px;
height: 100%; height: 100%;
float: left; float: left;
cursor: pointer; cursor: pointer;
transition: background .3s; transition: background 0.3s;
-webkit-tap-highlight-color:transparent; -webkit-tap-highlight-color: transparent;
&:hover { &:hover {
background: rgba(0, 0, 0, .025) background: rgba(0, 0, 0, 0.025);
} }
} }
@ -164,10 +210,10 @@ export default {
&.hover-effect { &.hover-effect {
cursor: pointer; cursor: pointer;
transition: background .3s; transition: background 0.3s;
&:hover { &:hover {
background: rgba(0, 0, 0, .025) background: rgba(0, 0, 0, 0.025);
} }
} }
} }

View File

@ -260,3 +260,8 @@ export default new Router({
scrollBehavior: () => ({ y: 0 }), scrollBehavior: () => ({ y: 0 }),
routes: constantRoutes, routes: constantRoutes,
}); });
export function resetRouter() {
const newRouter = createRouter()
Router.matcher = newRouter.matcher // 重制 router
}

View File

@ -0,0 +1,19 @@
const state = {
companyImg:localStorage.getItem("logo"),
isLogo:false
}
const mutations = {
SET_LOGO(state,img){
state.companyImg = img
},
SET_IS_LOGO(state,isLogo) {
state.isLogo = isLogo;
}
}
export default {
namespaced: true,
state,
mutations,
}

View File

@ -0,0 +1,234 @@
<template>
<div class="app-container">
<el-card header="工厂信息维护" shadow="never" style="min-height:600px">
<div style="width: 98%;margin:0 auto">
<el-form ref="contractForm" :model="contractForm" :rules="contractRules" label-width="110px">
<el-row>
<el-col :span="12">
<el-form-item prop="organName" label="工厂名称:" label-width="165px">
<el-input v-model="contractForm.organName" :disabled="isEdit" maxlength="20" style="width: 350pxpx" placeholder="请录入工厂名称" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="organJurPerson" label="法定代表人:">
<el-input v-model="contractForm.organJurPerson" style="width: 350pxpx" maxlength="10" placeholder="请录入法人" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="organPhone" label="工厂联系方式:" label-width="165px">
<el-input v-model="contractForm.organPhone" style="width: 350pxpx" maxlength="15" placeholder="请录入工厂联系方式" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="userName" label="用户名:" >
<el-input v-model="contractForm.userName" style="width: 350pxpx" maxlength="30" placeholder="请录入用户名" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="taxNumber" label="统一社会信用代码:" label-width="165px">
<el-input v-model="contractForm.taxNumber" :disabled="isEdit" style="width: 350pxpx" maxlength="20" placeholder="请录入统一社会信用代码" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="工厂顶图:" label-width="165px">
<el-upload
class="inline-block"
action="/prod-api/common/uploadMinio"
list-type="picture-card"
:headers="headers"
:auto-upload="false"
:on-success="handlerSuccess"
:on-change="changeLogo"
:on-remove="showLogo"
accept="jpeg,jpg,png"
name="file"
ref="upload"
:limit="1"
>
<img
v-show="isShow"
width="100%"
:src="this.contractForm.picture"
/>
<!-- <i slot="default" class="el-icon-plus"></i> -->
</el-upload>
<span style="display:inline-block;position: relative;top: 60px;left:20px"><el-button plain @click="uploadImg" >上传</el-button></span>
<div style="color: red"> 您最多只能上传一张图片,图片尺寸为1000px*40px,并且图片大小不能超过2M</div>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24" style="text-align:center;">
<el-button type="primary" @click="confirm"> </el-button>
</el-col>
</el-row>
</el-form>
</div>
</el-card>
</div>
</template>
<script>
import * as ownerServer from '@/api/ownerContract'
import { getToken } from "@/utils/auth";
export default {
data() {
return {
headers: {
Authorization: "Bearer " + getToken()
},
isShow:true,
contractForm: {
id: '',
organName: '',
contControlId: 'HT001',
address: '',
postCode: '',
jurPerson: '',
agentPerson: '',
telFax: '',
bankName: '',
bankNo: '',
taxNumber: ''
},
isEdit: false,
contractRules: {
organName: [{ required: true, message: '请录入工厂名称', trigger: 'blur' }],
organJurPerson: [{ required: true, message: '请录入法定代表人', trigger: 'blur' }],
organPhone: [{ required: true, message: '请录入工厂联系方式', trigger: 'blur' }],
userName: [{ required: true, message: '请录入用户名', trigger: 'blur' }],
},
fileFormats:["jpep","png","jpg"],
}
},
created() {
this.getOwnInfo()
},
methods: {
changeLogo(file){
const isLt2M = file.size / 1024 / 1024 < 2;
let suffixFile=file.name.substring(file.name.lastIndexOf("\.")+1);
if (!this.fileFormats.includes(suffixFile)){
this.$refs.upload.clearFiles();
this.$message.error('上传图片格式只能是.jpg,.jpeg,.png');
}else if(!isLt2M){
this.$refs.upload.clearFiles();
this.$message.error('上传头像图片大小不能超过 2MB!');
}else{
let vue=this;
let url = window.URL || window.webkitURL;
let img = new Image();
img.src = url.createObjectURL(file.raw);
img.onload=function () {
if(!(this.width==1000&&this.height==40)){
vue.$refs.upload.clearFiles();
vue.$message.error('图片尺寸必须是1000*40的图片');
}else{
vue.isShow=false;
}
}
}
},
showLogo(){
this.isShow=true;
},
handlerSuccess(companyImg) {
console.log(companyImg);
this.contractForm.picture = companyImg.fileName;
},
uploadImg() {
if (this.$refs.upload.uploadFiles.length>0){
this.$refs.upload.submit()
}else{
this.$message.error('请先选择图片');
}
},
beforeLogoUpload(file) {
// console.log(file);
// const isJPG = file.type === 'image/jpeg';
// const isLt2M = file.size / 1024 / 1024 < 2;
//
// if (!isJPG) {
// this.$message.error(' JPG !');
// }
// if (!isLt2M) {
// this.$message.error(' 2MB!');
// }
// return isJPG && isLt2M;
},
getOwnInfo() {
ownerServer.getOrganInfo().then(res => {
if (res.code === 200 && res.data) {
this.contractForm = res.data;
this.$store.commit("companyImg/SET_LOGO",this.$store.getters.sysBaseUrl + '/reportImg/' + this.contractForm.picture);
this.$store.commit("companyImg/SET_IS_LOGO",true);
this.isEdit = true;
}
})
},
confirm() {
this.$refs.contractForm.validate(valid => {
if (valid) {
this.contractForm.contControlId = 'HT001'
if (!this.isEdit) {
ownerServer.modifyOwnerContBaseById(this.contractForm).then(result => {
if (result.code === 200) {
this.$notify({
title: '成功',
message: result.message,
type: 'success'
})
this.getOwnInfo()
} else {
this.$notify({
title: '失败',
message: result.message,
type: 'error'
})
}
})
} else {
ownerServer.modifyOwnerContBaseById(this.contractForm).then(result => {
console.log(this.contractForm);
if (result.code === 200) {
this.$notify({
title: '成功',
message: result.msg,
type: 'success'
})
} else {
this.$notify({
title: '失败',
message: result.msg,
type: 'error'
})
}
})
}
} else {
this.$message.error('请录入完整信息')
}
})
}
}
}
</script>
<style scoped>
::v-deep .el-card .el-card__header {
padding: 15px 20px;
background: #F3F2F2;
}
.inline-block {
display: inline-block;
/*border: 1px solid black;*/
}
/*::v-deep .el-upload{*/
/*width: 500px;*/
/*}*/
</style>