Commit 00fc4c57 authored by sheng du's avatar sheng du
Browse files

个人页面完成 简单登录权限逻辑

parent 48cfd035
No related merge requests found
Pipeline #803 canceled with stages
src/assets/img/progress-detail-box.png

1.85 KB

src/assets/img/test-qrcode.png

37.4 KB

......@@ -6,7 +6,7 @@
<img src="@/assets/img/user.png" alt="" />
<span class="user-name">刘云</span>
<img src="@/assets/img/login-out.png" alt="" />
<img src="@/assets/img/login-out.png" @click="loginOut" alt="" />
</div>
</div>
</template>
......@@ -54,6 +54,16 @@ export default {
week: now.format("dddd"),
};
},
loginOut() {
this.$confirm(`确认退出登陆吗?`, "提示", {
type: "warning",
})
.then(() => {
this.$store.dispatch("user/setUserAuth", []);
this.$router.replace("/login");
})
.catch(() => {});
},
},
};
</script>
......@@ -96,5 +106,8 @@ export default {
.date {
padding-right: 20px;
}
img {
cursor: pointer;
}
}
</style>
......@@ -35,6 +35,7 @@ export default {
padding-top: 20px;
// cursor: pointer;
flex-shrink: 0;
color: #666;
span {
padding-left: 5px;
}
......
<template>
<el-dialog
:title="title"
width="720px"
:width="width"
append-to-body
:visible.sync="dialogVisible"
:before-close="beforeClose"
......@@ -35,6 +35,10 @@ export default {
type: String,
default: () => "标题",
},
width:{
type: String,
default: () => "720px",
},
},
computed: {
dialogVisible: {
......
......@@ -2,6 +2,7 @@
// import { appName } from "@/config";
import { asyncRoutesSort } from "@/router";
import cloneDeep from "lodash/cloneDeep";
import { mapState } from "vuex";
// import logo from "@/assets/img/logo.png";
export default {
......@@ -18,6 +19,9 @@ export default {
},
},
computed: {
...mapState({
userAuth: (state) => state.user.userAuth,
}),
menus() {
let allMenu = this.treeMap(cloneDeep(asyncRoutesSort));
console.log(allMenu);
......@@ -37,12 +41,12 @@ export default {
mainMenuName() {
return this.$route.matched[0]?.name;
},
activeRouteName() {
const { name } = this.$route;
// console.log(name, this.$route);
if(this.$route?.meta?.activeName){
return this.$route.meta.activeName
if (this.$route?.meta?.activeName) {
return this.$route.meta.activeName;
}
return name;
},
......@@ -63,7 +67,9 @@ export default {
}
});
// console.log(res);
res = res.filter((item) => !item.meta.hidden);
res = res.filter(
(item) => !item.meta.hidden && this.userAuth.includes(item.name)
);
return res.length ? res : null;
},
routeTo(indexs) {
......@@ -282,8 +288,8 @@ export default {
margin-right: 10px;
}
.el-submenu__title i {
}
// .el-submenu__title i {
// }
}
}
.title-span {
......
......@@ -72,7 +72,7 @@ const mapSort = function(menus) {
const routes = [
{
path: "",
redirect: "/index",
redirect: "/login",
},
{
path: "/login",
......
export default {
namespaced: true,
state: {
userInfo: [], //
userAuth: [], //
},
actions: {
//设置用户权限
setUserAuth({ commit }, paylod) {
commit("SET_USER_AUTH", paylod);
},
},
mutations: {
//设置缓存路由
SET_USER_AUTH(state, data = []) {
state.userAuth = data;
},
},
};
<template>
<InnerView> </InnerView>
<div class="pub-form">
<div class="tip-text">
<div>亲爱的用户:</div>
<div>
为了给您提供更好的服务,我们希望收集您在使用平台时的意见或者建议。
</div>
<div>对您的配合和支持表示衷心感谢!新增证照</div>
</div>
<el-form
ref="form"
:model="form"
label-width="98px"
label-position="right"
:rules="rules"
size="small"
>
<el-form-item prop="title" label="意见标题:">
<el-input
v-model="form.title"
placeholder="请输入"
clearable
></el-input>
</el-form-item>
<el-form-item prop="content" label="意见详情:">
<el-input
v-model="form.content"
placeholder="请输入"
clearable
type="textarea"
></el-input>
</el-form-item>
<el-form-item prop="contacts" label="联系人:">
<el-input
v-model="form.contacts"
placeholder="请输入"
clearable
></el-input>
</el-form-item>
<el-form-item prop="phone" label="联系电话:">
<el-input
v-model="form.phone"
placeholder="请输入"
clearable
></el-input>
</el-form-item>
<el-form-item>
<el-button
type="primary"
size="small"
@click="submit"
:loading="loading"
>提交</el-button
>
</el-form-item>
</el-form>
</div>
</template>
<script>
import { mapState } from "vuex";
export default {
name: "feedback",
meta: {
......@@ -10,11 +68,84 @@ export default {
iconImg: "feedback",
iconImgActive: "feedbackActive",
},
components: {},
data() {
return {};
data: () => {
return {
id: "",
loading: false,
form: {
title: "",
content: "",
contacts: "李云",
phone: "15825897854",
},
rules: {
// name: [
// { required: true, message: "请输入角色名称", trigger: "change" },
// ],
},
};
},
computed: {
// import { mapState } from "vuex";
...mapState({
testData: (state) => state.tabledata.photo,
}),
},
mounted() {
let { id } = this.$route.query;
if (id) {
this.$set(this.form, "id", id);
this.getDetail(id);
}
},
methods: {
close() {
this.$router.back(-1);
},
getDetail(id) {
let findItem = this.testData.find((item) => item.id == id);
if (findItem) {
this.form = this.$utils.setFormValue(this.form, findItem);
}
},
submit() {
this.$refs.form.validate((valid) => {
if (valid) {
let datas = { ...this.form };
console.log(datas);
this.$message.success("操作成功,我们已收到您的反馈");
} else {
return false;
}
});
},
},
watch: {},
};
</script>
<style lang="scss" scoped></style>
<style lang="scss" scoped>
::v-deep {
.el-date-editor.el-input,
.el-date-editor.el-input__inner {
width: 132px;
}
.el-textarea__inner {
background-color: #fff;
height: 116px;
}
.el-textarea {
width: 325px;
}
.el-form-item--small .el-form-item__label {
font-size: 12px;
}
}
.tip-text {
padding-top: 21px;
padding-bottom: 30px;
line-height: 20px;
font-size: 12px;
color: #a6a6a6;
}
</style>
......@@ -34,7 +34,8 @@
<script>
// import { CardView } from "@/components/Layout";
import { appName } from "@/config";
import { common } from "@/api";
import { mapState } from "vuex";
// import { common } from "@/api";
export default {
name: "login",
meta: {
......@@ -47,12 +48,12 @@ export default {
return {
loading: false,
appName,
user: "",
password: "",
ruleForm: {
user: "",
password: "",
user: "enterprise",
// liyun
// enterprise
password: "123456",
},
rules: {
user: [
......@@ -70,28 +71,54 @@ export default {
},
],
},
testAuthUser: [
"spaceIndex",
"serviceData",
"profile",
"photo",
"footprint",
"feedback",
],
testAuthEnterprise: ["feedback"],
};
},
computed: {
...mapState({
userAuth: (state) => state.user.userAuth,
}),
},
watch: {},
methods: {
login() {
this.$refs.ruleForm.validate((valid) => {
if (valid) {
this.loading = true;
common
.login(this.ruleForm)
.then((res) => {
// console.log(res.token);
if (res.token) {
localStorage.setItem("token", res.token);
this.loading = false;
this.$message.success("登陆成功");
this.$router.replace("/index");
}
})
.catch(() => {
this.loading = false;
// common
// .login(this.ruleForm)
// .then((res) => {
// console.log(res.token);
// if (res.token) {
// localStorage.setItem("token", res.token);
this.loading = false;
this.$message.success("登陆成功");
if (this.ruleForm.user == "liyun") {
this.$store.dispatch("user/setUserAuth", this.testAuthUser);
}
if (this.ruleForm.user == "enterprise") {
this.$store.dispatch("user/setUserAuth", this.testAuthEnterprise);
}
this.$nextTick(() => {
this.$router.replace({
name: this.userAuth[0],
});
});
// }
// })
// .catch(() => {
// this.loading = false;
// });
// alert('submit!');
} else {
......
<template>
<InnerView class="flex-col" style="overflow: hidden;">
<BackTitle title="数据预览"></BackTitle>
<ScrollView style="overflow-x: hidden;">
<div class="block-title">
<div class="title">申请信息</div>
<div class="status">状态: 准予许可</div>
</div>
<div class="content-title">基础信息</div>
<el-descriptions title="" :column="2">
<el-descriptions-item label="申办编号"
>50023563XPGGWZ20220920566351001000</el-descriptions-item
>
<el-descriptions-item label="业务来源">网上办</el-descriptions-item>
<el-descriptions-item label="事项id"
>7cc3bc07-d86d-4701-ace..</el-descriptions-item
>
<el-descriptions-item label="受理人员">贺正勇</el-descriptions-item>
<el-descriptions-item label="事项名称"
>农药经营许可(核发)</el-descriptions-item
>
<el-descriptions-item label="申请人类型">窗口办理</el-descriptions-item>
<el-descriptions-item label="类型">XK(行政许可)</el-descriptions-item>
<el-descriptions-item label="办理形式">自然人</el-descriptions-item>
<el-descriptions-item label="事项所属区划编码"
>500235</el-descriptions-item
>
<el-descriptions-item label="邮编">——</el-descriptions-item>
<el-descriptions-item label="区划名称">云阳县</el-descriptions-item>
<el-descriptions-item label="组织机构类型">——</el-descriptions-item>
<el-descriptions-item label="所属机关代码"
>500235739.</el-descriptions-item
>
<el-descriptions-item label="统一社会信用代码">——</el-descriptions-item>
<el-descriptions-item label="所属机关"
>县农业农村委</el-descriptions-item
>
<el-descriptions-item label="法定代表人">——</el-descriptions-item>
<el-descriptions-item label="申请时间"
>2020-11-25 12:14:58</el-descriptions-item
>
<el-descriptions-item label="申请人/组织机构证件类型"
>身份证</el-descriptions-item
>
<el-descriptions-item label="服务对象名称">李荣辉</el-descriptions-item>
<el-descriptions-item label="申请人/组织机构证件号码"
>512225195910134538</el-descriptions-item
>
<el-descriptions-item label="办结日期"
>2020-11-26 14:25:25</el-descriptions-item
>
<el-descriptions-item label="数据来源">网审</el-descriptions-item>
<el-descriptions-item label="承诺办结日期"
>2020-12-02 00:00:00</el-descriptions-item
>
<el-descriptions-item label="创建时间"
>2022-07-26 19:25:14</el-descriptions-item
>
<el-descriptions-item label="业务主题"
>关于李荣辉农药经营许可(核发) 的申请</el-descriptions-item
>
</el-descriptions>
<div class="content-title">申请材料表格</div>
<div class="file-box flex-between">
<span>申请在校求职创业补贴相关资料</span>
<div class="flex download">
<i class="el-icon-download"></i>
<span>下载</span>
</div>
</div>
<div class="block-title">
<div class="title">审核进度</div>
</div>
<el-timeline class="el-timeline">
<el-timeline-item type="primary">
<div class="line-detail">
<div class="title">案卷待受理</div>
<div class="progress-detail">
<div>环节处理人:超级管理员</div>
<div>处理时间:2022-04-03 12:25:36</div>
<div>处理意见:接件,开始审核案卷信息!</div>
</div>
</div>
</el-timeline-item>
<el-timeline-item type="primary">
<div class="line-detail">
<div class="title">准予许可</div>
<div class="progress-detail">
<div>环节处理人:超级管理员</div>
<div>处理时间:2022-04-03 12:25:36</div>
<div>处理意见:您好,您提交的申请已准予许可。</div>
</div>
</div>
</el-timeline-item>
</el-timeline>
</ScrollView>
</InnerView>
</template>
<script>
// import * as api from "@/api";
export default {
name: "serviceDataDetail",
meta: {
sort: 0,
title: "我的办事数据",
hidden: true,
activeName: "serviceData",
},
components: {},
data() {
return {};
},
watch: {},
methods: {},
};
</script>
<style lang="scss" scoped>
.file-box {
width: 529px;
height: 36px;
border: 1px solid #e5e5e5;
padding: 0 22px 0 18px;
font-size: 12px;
color: #666;
margin-top: 38px;
margin-left: 30px;
margin-bottom: 30px;
.download {
color: #3182ff;
align-items: center;
cursor: pointer;
i {
font-size: 17px;
margin-right: 5px;
}
}
}
.block-title {
height: 48px;
width: 100%;
line-height: 48px;
border-bottom: 1px solid #e5e5e5;
display: flex;
align-items: center;
font-size: 14px;
color: #3182ff;
font-weight: bold;
padding-left: 10px;
margin-left: 10px;
.status {
color: #2a82e4;
font-weight: initial;
padding-left: 227px;
}
}
.el-timeline {
margin-top: 35px;
}
::v-deep {
.el-descriptions :not(.is-bordered) .el-descriptions-item__cell {
.el-descriptions-item__label:not(.is-bordered-label) {
display: inline-block;
width: 112px;
text-align: right;
}
&:nth-child(2n) {
.el-descriptions-item__label:not(.is-bordered-label) {
width: 179px;
}
}
}
.el-timeline-item__node--normal {
width: 6px;
height: 6px;
}
.el-timeline-item__tail {
left: 1px;
border-left: 2px solid #6d9ef2;
}
.el-timeline-item__wrapper {
top: -12px;
}
}
.line-detail {
width: 100%;
display: flex;
position: relative;
.title {
width: 82px;
font-size: 12px;
padding-top: 6px;
}
.progress-detail {
width: 312px;
min-height: 68px;
background: url("../../../assets/img/progress-detail-box.png");
background-size: 100% 100%;
padding: 7px 41px 9px 21px;
font-size: 12px;
color: #666;
line-height: 17px;
}
}
</style>
<template>
<InnerView> </InnerView>
<!-- <transition :name="transition"> -->
<keep-alive :include="cacheRoutes">
<router-view class="child-view"></router-view>
</keep-alive>
<!-- </transition> -->
</template>
<script>
import { mapState } from "vuex";
// import { InnerView, RouteView } from "@/components/Layout";
export default {
name: "serviceData",
meta: {
......@@ -9,8 +15,13 @@ export default {
title: "我的办事数据",
iconImg: "serviceData",
iconImgActive: "serviceDataActive",
redirect: "/serviceData/list",
},
computed: {
...mapState({
cacheRoutes: (state) => state.app.cacheRoutes,
}),
},
components: {},
data() {
return {};
},
......
<template>
<InnerView class="InnerView">
<pub-table
:headers="headers"
:fetcher="fetcher"
:params="params"
ref="table"
>
</pub-table>
<PubDialog
v-model="dialogVisible"
:title="`数据授权`"
width="571px"
@beforeClose="dialogVisible = false"
>
<div class="flex-col flex-center">
<div class="qrcode-box flex-col">
<div>扫码授权办事数据</div>
<img src="@/assets/img/test-qrcode.png" alt="" />
<div class="btns flex-between">
<el-button type="text">下载</el-button>
<el-button type="text">负责</el-button>
</div>
</div>
<div class="flex flex-center">
<el-input v-model="url" size="small" style="width:281px"></el-input>
<el-button type="primary" size="small">复制</el-button>
</div>
</div>
</PubDialog>
</InnerView>
</template>
<script>
import PubDialog from "@/components/App/PubDialog";
export default {
name: "serviceDataList",
meta: {
sort: 0,
title: "我的办事数据",
hidden: true,
activeName: "serviceData",
keepAlive: true,
},
components: { PubDialog },
data() {
return {
url: "http//:www.baidu.com",
dialogVisible: false,
headers: [
{
field: "theme",
fieldName: "业务主题",
width: 300,
},
{
field: "status",
fieldName: "当前状态",
},
{
field: "time",
fieldName: "申请时间",
},
{
field: "handle",
fieldName: "操作",
width: 200,
renderFun: (e) => this.renderBtns(e),
},
],
params: [],
testData: [
{
theme: "关于李云农药经营许可(核发) 的申请",
status: "正常",
time: "2023-07-13 17:14:43",
},
{
theme: "关于李云生育服务证登记的申请",
status: "准予许可",
time: "2023-04-25 15:28:36",
},
{
theme: "关于李云不动产登记的申请",
status: "不予许可",
time: "2023-03-15 14:22:16",
},
{
theme: "关于李云区县境内水路客运经营许可",
status: "准予许可",
time: "2023-02-18 14:28:15",
},
{
theme: "关于李云采许可证颁发的申请",
status: "准予许可",
time: "2023-02-14 12:22:33",
},
],
fetcher: async () => {
// console.log(this);
//console.log(params);
// let res = await api.publicEquipment.getBiogasDeviceInfoPage(params);
let res = {
total: this.testData.length,
data: this.testData,
};
return res;
},
};
},
watch: {},
methods: {
renderBtns(e) {
let that = this;
return (
<div>
<el-button
onClick={() => that.openDtail(e.row)}
size="mini"
plain
type="primary"
>
预览详情
</el-button>
<el-button
onClick={() => that.dataAuth(e.row)}
size="mini"
plain
type="warning"
>
数据授权
</el-button>
</div>
);
},
openDtail() {
this.$router.push("/serviceData/detail");
},
dataAuth() {
this.dialogVisible = true;
},
},
};
</script>
<style lang="scss" scoped>
.InnerView {
padding-top: 24px;
}
::v-deep {
.el-button--small {
height: 30px;
}
}
.qrcode-box {
width: 258px;
height: 252px;
border: 1px solid #e5e5e5;
padding-top: 31px;
align-items: center;
margin-bottom: 28px;
img {
width: 138px;
height: 141px;
margin-top: 10px;
margin-bottom: 3px;
}
.btns {
width: 102px;
}
}
</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