Commit 6b85d2ea by liudx

联调管理员页面接口

parent 9956c743
......@@ -8,7 +8,7 @@ export default {
name: "EchartsCon",
data() {
return {
chart: "",
};
},
props: {
......@@ -32,7 +32,17 @@ export default {
},
tooltip: {},
legend: {
data: ["销量"],
icon: "circle",
orient: "horizontal",
itemGap: 40,
itemWidth: 14,
itemHeight: 14,
textStyle: {
fontSize: 14,
fontWeight: 400,
padding: [4, 0, 0, 0],
},
},
xAxis: {
type: "category",
......@@ -59,6 +69,7 @@ export default {
};
},
},
watch: {
option: {
handler(newVal) {
......@@ -76,9 +87,12 @@ export default {
},
methods: {
init() {
this.chart = echarts.init(document.getElementById(this.id));
this.chart.setOption(this.option);
// window.addEventListener("resize", this.chart.resize);
let chart = echarts.init(document.getElementById(this.id));
chart.setOption(this.option);
// window.addEventListener("resize", chart.resize);
},
},
};
......
......@@ -48,13 +48,15 @@
export default {
name: "HeaderCon",
props: {
username: {
type: String,
},
},
created(){
this.username = this.$store.state.username
},
data() {
return {
hover_num: 0,
username:''
};
},
methods: {
......
......@@ -5,6 +5,7 @@ import home from "../views/home/home.vue"
import index from "../views/home/index.vue"
//企业页面
import company from "../views/company/index.vue"
import companyDetails from "../views/company/companyDetails.vue"
//专利页面
import patent from "../views/patent/index.vue"
import patentDetails from "../views/patent/patentDetails.vue"
......@@ -20,6 +21,10 @@ import forget from "../views/login/forget.vue"
import usersetting from "../views/userset/index.vue"
import personalSetting from "../views/userset/personalSetting.vue"
import securitySetting from "../views/userset/securitySetting.vue"
//管理员设置
import adminset from "../views/adminset/index.vue"
import userInfo from "../views/adminset/userInfo.vue"
const routes = [
......@@ -79,28 +84,49 @@ const routes = [
name: 'patentDetails',
component: patentDetails
},
{
path: '/companyDetails',
name: 'companyDetails',
component: companyDetails
}
]
},
//个人信息设置
{
path:'/usersetting',
name:'usersetting',
component:usersetting,
redirect:'/personalSetting',
children:[
path: '/usersetting',
name: 'usersetting',
component: usersetting,
redirect: '/personalSetting',
children: [
{
path:'/personalSetting',
name:'personalSetting',
component:personalSetting,
path: '/personalSetting',
name: 'personalSetting',
component: personalSetting,
},
{
path:'/securitySetting',
name:'securitySetting',
component:securitySetting,
path: '/securitySetting',
name: 'securitySetting',
component: securitySetting,
}
]
},
//管理员设置
{
path: '/adminset',
name: 'adminset',
component: adminset,
redirect: '/userInfo',
children: [
{
path: '/userInfo',
name: 'userInfo',
component: userInfo,
},
]
}
// path: '/about',
// name: 'about',
// // route level code-splitting
......
......@@ -2,12 +2,16 @@ import { createStore } from 'vuex'
export default createStore({
state: {
username:'123456',
username:'',
token:''
},
mutations: {
setTOKEN(str){
this.token = str
setTOKEN(state,payload){
this.state.token = payload
},
setname(state,payload){
// console.log(state,payload)
this.state.username = payload
}
},
actions: {
......
import { get, post } from './request'
import { get, post,put } from './request'
/**
* 示例
get请求
......@@ -9,6 +9,9 @@ import { get, post } from './request'
export const login = p => post('/api/common/login', p);
export const changePassword = p => post('/api/common/changePassword',p);
export const sendSms = p => post('/api/common/sendSms',p);
export const users = p => get('/api/backup/users?page='+p.page+'&size='+p.size);
export const changeStatus = p => put('/api/backup/users/'+p.id,{status:p.status});
......
......@@ -15,7 +15,7 @@ axios.interceptors.request.use(
const token = localStorage.getItem('token') || '';
if (token) {
// config.params = { 'token': token } //如果要求携带在参数中
config.headers.token = token; //如果要求携带在请求头中
config.headers.Authorization = token; //如果要求携带在请求头中
}
return config;
},
......@@ -85,7 +85,8 @@ axios.interceptors.response.use(
}
return Promise.reject(error.response);
}
});/**
});
/**
* get方法,对应get请求
* @param {String} url [请求的url地址]
* @param {Object} params [请求时携带的参数]
......@@ -101,7 +102,8 @@ axios.interceptors.response.use(
reject(err.data)
})
});
}/**
}
/**
* post方法,对应post请求
* @param {String} url [请求的url地址]
* @param {Object} params [请求时携带的参数]
......@@ -116,3 +118,18 @@ axios.interceptors.response.use(
})
});
}
/**
* put方法,对应put请求
* @param {String} url [请求的url地址]
* @param {Object} params [请求时携带的参数]
*/export function put(url, params) {
return new Promise((resolve, reject) => {
axios.put(url, params)
.then(res => {
resolve(res.data);
})
.catch(err => {
reject(err.data)
})
});
}
<template>
<div class="user">
<!-- 标题栏 -->
<HeaderCon ></HeaderCon>
<div class="user_main">
<div class="sider">
<div
:class="[current == item.name ? 'sider_item active' : 'sider_item ']"
v-for="item in siderArr"
:key="item.name"
@click="changepage(item.name)"
>
<img
:src="current == item.name ? item.img_select : item.img"
alt=""
class="sider_item_img"
/>
<div
:class="[
current == item.name
? ' sider_item_name active '
: 'sider_item_name',
]"
>
{{ item.name }}
</div>
</div>
</div>
<router-view></router-view>
</div>
</div>
</template>
<script>
import HeaderCon from "../../components/HeaderCon.vue";
export default {
name: "adminset",
components: {
HeaderCon,
},
data() {
return {
current: "用户信息管理",
username: "",
siderArr: [
{
name: "用户信息管理",
img: require("@/static/user/icon-grxx.png"),
img_select: require("@/static/user/icon-grxx-select.png"),
},
],
};
},
methods: {
changepage(name) {
switch (name) {
case "用户信息管理":
this.$router.push({
path: "/userInfo",
});
break;
}
this.current = name;
},
},
};
</script>
<style lang="less" scoped>
.user {
width: calc(100%);
height: 100%;
.user_main {
height: calc(100% - 65px);
width: 100%;
background-color: #ebebeb;
display: flex;
.home_con {
background-color: #ebebeb;
padding-left: 30px;
width: calc(100% -80px);
flex: 1;
.nav_bread {
height: 50px;
padding: 20px 3px;
background-color: #ebebeb;
}
}
}
.sider {
// height: calc(100% - 70px);
background-color: #002d70;
width: 80px;
.sider_item {
height: 100px;
text-align: center;
padding: 20px 10px 20px 0;
.sider_item_img {
width: 27px;
}
.sider_item_name {
margin-top: 10px;
color: #848bad;
font-size: 14px;
text-align: center;
}
.active {
color: #fff;
}
}
.active {
background-color: #124795;
color: #fff;
}
}
}
</style>
<template>
<div class="personal_con">
<!-- 面包屑导航 -->
<a-breadcrumb class="nav_bread">
<a-breadcrumb-item>用户设置</a-breadcrumb-item>
<a-breadcrumb-item>个人信息</a-breadcrumb-item>
</a-breadcrumb>
<div class="table">
<a-button type="primary" size="large">新增</a-button>&nbsp;
<a-button type="primary" size="large">删除</a-button>
<br /><br />
<a-table
:row-selection="{ onChange: onSelectChange }"
:columns="columns"
:data-source="data"
>
<template #bodyCell="{ column, text, record }">
<template v-if="column.dataIndex === 'status'">
<a @click="change(record)" danger v-if="text">禁用</a>
<a v-else>使用</a>
</template>
</template>
</a-table>
</div>
</div>
</template>
<script>
// import { AES_Encrypt, AES_Decrypt } from "@/utils/aes_util.js";
import { message } from "ant-design-vue";
import { users, changeStatus } from "@/utils/loginAPI";
export default {
name: "userInfo",
data() {
return {
columns: [
{
title: "序号",
dataIndex: "id",
},
{
title: "姓名",
dataIndex: "name",
},
{
title: "手机号",
dataIndex: "phone",
},
{
title: "账号名",
dataIndex: "account_number",
},
{
title: "创建时间",
dataIndex: "create_time",
},
{
title: "操作",
dataIndex: "status",
},
],
data:[]
};
},
created() {
this.init();
},
mounted() {},
methods: {
init() {
users({
page: 1,
size: 10,
}).then((res) => {
console.log(res);
if (res.code == 0) {
this.data = res.data;
} else {
message.error(res.msg);
}
});
},
onSelectChange: (selectedRowKeys, selectedRows) => {
console.log(
`selectedRowKeys: ${selectedRowKeys}`,
"selectedRows: ",
selectedRows
);
},
change(record) {
console.log(record);
changeStatus({ id: record.id, status: record.status }).then((res) => {
console.log(res);
});
},
},
};
</script>
<style lang="less" scoped>
.personal_con {
background-color: #ebebeb;
padding-left: 30px;
width: calc(100% - 80px);
flex: 1;
.nav_bread {
height: 50px;
padding: 20px 3px;
background-color: #ebebeb;
}
}
</style>
<template>
<div class="details">
<a-breadcrumb class="nav_bread">
<a-breadcrumb-item>首页</a-breadcrumb-item>
<a-breadcrumb-item>专利</a-breadcrumb-item>
<a-breadcrumb-item>公司详情</a-breadcrumb-item>
</a-breadcrumb>
<div class="back_btn">返回</div>
<div class="details_title">
<div class="company_num">
<span>{{ "山西煤炭进出口集团有限公司" }}</span>
<a-tag color="#56CA95">{{ "存续(在营、开业、在册)" }}</a-tag>
<a-tag color="#6096E6">{{ "2222222" }}</a-tag>
</div>
<div class="company_basic">
<div>注册地址:太原市小店区长风街115号</div>
<div>邮箱:zonghebangong@sxmtcoal.cn</div>
<div>联系电话:0351-4645051</div>
<div>官网:http://www.shanxicoal.cn/</div>
</div>
</div>
<div class="btn_group">
<span><img src="@/static/patent/icon-dc.png" alt="" />导出</span>
<span v-if="follow"
><img src="@/static/patent/icon-gz.png" alt="" />关注</span
>
<span v-else
><img src="@/static/patent/icon-gz-select.png" alt="" />关注</span
>
</div>
<a-tabs v-model:activeKey="activeKey" style="background: #fff">
<a-tab-pane key="企业概况" tab="企业概况">
<companyProfile></companyProfile>
</a-tab-pane>
<a-tab-pane key="研发概要" tab="研发概要">
<overview></overview>
</a-tab-pane>
<a-tab-pane key="技术合作" tab="技术合作">
<cooperation></cooperation>
</a-tab-pane>
<a-tab-pane key="科创能力评价" tab="科创能力评价">
<technology></technology>
</a-tab-pane>
</a-tabs>
</div>
</template>
<script>
import EchartsCloud from "../../components/EchartsCloud.vue";
import companyProfile from "./companyProfile.vue";
import overview from "./overview.vue";
import cooperation from "./cooperation.vue"
import technology from "./technology.vue"
export default {
name: "companyDetails",
data() {
return {
value: undefined,
activeKey: "企业概况",
count: 161,
follow: true,
techArr: [
{
name: "支架搬运车",
value: 30,
},
{
name: "人工智能领域",
value: 80,
},
{
name: "广泛应用",
value: 70,
},
{
name: "驾驶室",
value: 301,
},
],
list: [
{
name: "山西科达自控股份有限公司",
status: "存续(在营、开业、在册)",
type: "高新技术企业",
legalRepresentative: "郭晓明",
registrationTime: "2023-6-1",
money: "222941.42万人民币",
industry: "批发和零售业>批发业",
address: "北京市海淀区西二旗产业园百度大厦28号",
info: "一种基于人工智能的雷达视频数据融合方法",
range:
"提供智能化科技服务,智能仓储,装直径单桩人工智能单钩硬件销售;机械设备研发",
},
{
name: "山西科达自控股份有限公司",
status: "存续(在营、开业、在册)",
type: "高新技术企业",
legalRepresentative: "郭晓明",
registrationTime: "2023-6-1",
money: "222941.42万人民币",
industry: "批发和零售业>批发业",
address: "北京市海淀区西二旗产业园百度大厦28号",
info: "一种基于人工智能的雷达视频数据融合方法",
range:
"提供智能化科技服务,智能仓储,装直径单桩人工智能单钩硬件销售;机械设备研发",
},
],
};
},
components: {
EchartsCloud,
companyProfile,
cooperation,
overview,
technology
},
methods: {
getCurrentAnchor() {
return "#technicalSummary";
},
},
created() {},
};
</script>
<style lang="less" scoped>
.details {
padding: 0 30px;
width: calc(100%);
background-color: #ebebeb;
position: relative;
.back_btn {
width: 76px;
height: 32px;
background: #ffffff;
border-radius: 8px 8px 8px 8px;
opacity: 1;
color: #3e7bfa;
text-align: center;
line-height: 32px;
position: absolute;
right: 80px;
top: 10px;
}
.nav_bread {
height: 50px;
padding: 20px 3px;
background-color: #ebebeb;
}
.details_title {
background-color: #0062c4;
width: 100%;
height: 176px;
.company_num {
font-size: 25px;
padding: 20px 0 15px 40px;
font-family: Microsoft YaHei-Bold, Microsoft YaHei;
font-weight: bold;
color: #fff;
span {
vertical-align: -webkit-baseline-middle;
margin-right: 20px;
}
}
:deep(.ant-tag-has-color) {
padding: 3px 5px;
border-radius: 6px;
}
.company_basic {
margin-top: 20px;
display: flex;
margin-left: 15px;
div {
width: 18%;
font-size: 16px;
text-align: center;
color: #c7d8ec;
border-right: 1px solid #c7d8ec;
}
div:last-child {
border-right: transparent;
}
}
}
.btn_group {
position: absolute;
top: 80px;
right: 60px;
span {
display: inline-block;
width: 100px;
height: 32px;
background: rgba(255, 255, 255, 0.3);
border-radius: 8px 8px 8px 8px;
opacity: 1;
color: #fff;
line-height: 32px;
text-align: center;
margin-right: 15px;
img {
width: 17px;
vertical-align: text-bottom;
margin-right: 5px;
}
}
}
}
</style>
<template>
<div>
3333333333
</div>
</template>
<script>
export default {
name:'cooperation'
}
</script>
<style lang="less" scoped>
</style>
\ No newline at end of file
<template>
<router-link to="/companyDetails">企业详情</router-link>
<router-view></router-view>
</template>
......
<template>
<div>
444444444444
</div>
</template>
<script>
export default {
name:'technology'
}
</script>
<style lang="less" scoped>
</style>
\ No newline at end of file
<template>
<div class="home">
<!-- 标题栏 -->
<HeaderCon :username="username"></HeaderCon>
<HeaderCon></HeaderCon>
<div class="home_main">
<div class="sider">
......
......@@ -129,10 +129,11 @@ export default {
console.log(res)
if(res.code == 0){
message.success('登录成功')
this.$store.commit('setTOKEN',res.data.token)
// this.$store.commit('setTOKEN',res.data.token)
this.$store.commit('setname',this.formState.username)
localStorage.setItem('token',res.data.token)
this.$router.push({
path:'/index'
path:'/adminset'
})
}else{
message.error(res.msg)
......
......@@ -149,7 +149,8 @@ export default {
if (res.code == 0) {
message.success("登录成功");
this.$store.commit("setTOKEN", res.data.token);
// this.$store.commit("setTOKEN", res.data.token);
this.$store.commit("setname", this.formState.username);
localStorage.setItem("token", res.data.token);
//记住密码功能
......
<template>
<router-link to="/patentDetails">专利</router-link>
<router-view></router-view>
<router-link to="/patentDetails">专利</router-link>
<router-view></router-view>
</template>
<script>
export default {
name:'patent',
data(){
return{
}
name: "patent",
data() {
return {};
},
components: {
},
methods:{
},
created(){
}
}
components: {},
methods: {},
created() {},
};
</script>
<style lang="less" scoped>
</style>
\ No newline at end of file
<style lang="less" scoped></style>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment