Commit 3109bd7d authored by mengwenhao's avatar mengwenhao

update: 合并分支并解决冲突

parents e913c4d0 5908974b
...@@ -7,15 +7,22 @@ const LOGIN_URI = { ...@@ -7,15 +7,22 @@ const LOGIN_URI = {
'production': "http://web-rest.int.yidian-inc.com" 'production': "http://web-rest.int.yidian-inc.com"
} }
const PANDORA_URI = {
'development': "http://pandora.yidian-inc.com",
'test': "http://pandora.yidian-inc.com",
'production': "http://pandora.yidian-inc.com"
}
const API_INTERNAL_URI = { const API_INTERNAL_URI = {
'development': "bp-test.ini.yidian-inc.com ", 'development': "http://bp-test.ini.yidian-inc.com",
'test': "bp-test.ini.yidian-inc.com ", 'test': "http://bp-test.ini.yidian-inc.com",
'production': "bp-test.go2yd.com " 'production': "http://bp-test.go2yd.com"
} }
module.exports = { module.exports = {
env: env, env: env,
port: port, port: port,
LOGIN_URI: LOGIN_URI[env], LOGIN_URI: LOGIN_URI[env],
API_INTERNAL_URI: API_INTERNAL_URI[env] API_INTERNAL_URI: API_INTERNAL_URI[env],
PANDORA_URI: PANDORA_URI[env]
}; };
const LOGIN_URI = require('../config.js').LOGIN_URI const LOGIN_URI = require("../config.js").LOGIN_URI;
const req = require('../utils/request').httpReq const PANDORA_URI = require("../config.js").PANDORA_URI;
const req = require("../utils/request").httpReq;
// exports.login = async (ctx, next) => {
// const url = `${LOGIN_URI}/api/v1/pandora/auth`;
// const opts = {
// url: url,
// method: 'POST',
// json: true,
// body : ctx.request.body
// }
// console.log("koa login:::::", ctx.request)
// ctx.body = await req(ctx, opts)
// }
exports.login = async (ctx) => { exports.fetch_user = async (ctx, next) => {
var url = `${LOGIN_URI}/api/v1/pandora/auth`; const url = `${PANDORA_URI}/api/user/getuser`;
var opts = { const cookie = ctx.request.header.cookie;
const opts = {
url: url, url: url,
method: 'POST', method: "GET",
json: true, headers: {
timeout: 8000, Cookie: ctx.request.header.cookie
body: ctx.request.body }
} };
ctx.body = await req(ctx, opts) console.log("fetch_user:::::", ctx.request);
} ctx.body = await req(ctx, opts);
};
const { API_INTERNAL_URI } = require('../config.js') const API_INTERNAL_URI = require('../config.js').API_INTERNAL_URI
const req = require('../utils/request').httpReq
var query = { var query = {
async get_permissions(ctx, next) { async get_permissions(ctx, next) {
// http://bp-test.ini.yidian-inc.com/merchant/authority/get_role_list?user_email=jianghaiming@126.com // http://bp-test.ini.yidian-inc.com/merchant/authority/get_role_list?user_email=jianghaiming@126.com
const url = `${API_INTERNAL_URI}/merchant/authority/get_role_list`; const url = `${API_INTERNAL_URI}/merchant/authority/get_role_list`;
console.log(44444, ctx.request.query.email);
const { email } = ctx.request.query; const { email } = ctx.request.query;
const opts = { const opts = {
url, url,
method: 'GET', method: 'GET',
params: { qs: {
email user_email: 'jianghaiming@126.com'
// user_email: email
} }
} }
ctx.body = await req(ctx, opts) ctx.body = await req(ctx, opts)
...@@ -18,12 +21,13 @@ var query = { ...@@ -18,12 +21,13 @@ var query = {
exports.query = async (ctx, next) => { exports.query = async (ctx, next) => {
var type = ctx.params.type var type = ctx.params.type
console.log("koa user::::::", type)
if (query[type]) { if (query[type]) {
try { try {
ctx.set('Content-Type', 'application/json; charset=utf-8') ctx.set('Content-Type', 'application/json; charset=utf-8')
await query[type](ctx, next) await query[type](ctx, next)
} catch (e) { } catch (e) {
console.error('/home/q error', e, ctx.url, ctx.headers['cookie']) console.error('/api/v1 error', e, ctx.url, ctx.headers['cookie'])
ctx.body = { status: 'failed', reason: 'Internal Server Error' } ctx.body = { status: 'failed', reason: 'Internal Server Error' }
} }
} else { } else {
......
const Router = require("koa-router"); const Router = require("koa-router");
const system = require("./controllers/system"); const system = require("./controllers/system");
// const user = require("./controllers/user"); const user = require("./controllers/user");
const enterprise = require("./controllers/enterprise"); const enterprise = require("./controllers/enterprise");
const router = Router(); const router = Router();
const API_VERSION = "/api/v1"; const API_VERSION = "/api/v1";
router.post(`${API_VERSION}/login`, system.login); router.post(`${API_VERSION}/login`, system.login);
// router.get(`${API_VERSION}/user/:type`, user.query); router.get(`${API_VERSION}/fetch_user`, system.fetch_user);
router.get(`${API_VERSION}/user/:type`, user.query)
router.get(`${API_VERSION}/certification`, enterprise.entCheck); router.get(`${API_VERSION}/certification`, enterprise.entCheck);
router.post(`${API_VERSION}/emterprise_commit`, enterprise.entCommit) router.post(`${API_VERSION}/emterprise_commit`, enterprise.entCommit);
module.exports = router; module.exports = router;
<template> <template>
<div id="app"> <div>
<router-view /> <router-view />
<!-- <layout> <!-- <layout>
</layout> --> </layout> -->
...@@ -9,27 +9,37 @@ ...@@ -9,27 +9,37 @@
<script> <script>
// Layout 为布局组件,控制页面基础布局,通过 slot 实现 // Layout 为布局组件,控制页面基础布局,通过 slot 实现
// import Layout from '@/layouts'; // import Layout from '@/layouts';
// import { fetchCurrentUser } from './services/user'; import { fetchCurrentUser } from './service/user';
// async function isUserLogged() { // async function isUserLogged() {
// return (await fetchCurrentUser()).status === 'success'; // const res = await fetchCurrentUser()
// return res.status === 'success';
// } // }
// function redirectToLogin() { function redirectToLogin() {
// const loginUrl = '//pandora.yidian-inc.com/tools/admin/login'; const loginUrl = '//pandora.yidian-inc.com/tools/admin/login';
// const cbUrl = location.href; const cbUrl = location.href;
// location.href = `${loginUrl}?callback=${cbUrl}`; location.href = `${loginUrl}?callback=${cbUrl}`;
// } }
export default { export default {
// components: { async mounted() {
// Layout, // http://dev.yidian-inc.com:8081/home
// }, const { status, user } = await fetchCurrentUser();
// async mounted() { // {"status":"success","user":{"userid":"732473439","name":"吕伟朝","email":"lvweichao@yidian-inc.com","avatar":""}}
// if (!(await isUserLogged())) { if (status === 'success') {
// redirectToLogin(); this.$store.dispatch('updateUserPermission', { email: user.email })
// } this.$store.commit('updateUserInfo', user)
// }, } else {
redirectToLogin();
}
// if (!(await isUserLogged())) {
// redirectToLogin();
// } else {
// }
},
}; };
</script> </script>
......
<template>
<el-dropdown>
<div class="user-info">
<el-avatar :src="userInfo.avatar || DEFAULT_AVATAR" size="small"></el-avatar>
<span class="user-name">{{userInfo.name}}</span>
</div>
<template #dropdown>
<el-dropdown-menu>
<el-dropdown-item>
<i class="el-icon-message"></i>
{{userInfo.email}}
</el-dropdown-item>
<el-dropdown-item>
<span><a class="link" href="//pandora.yidian-inc.com/">返回pandora工具平台</a></span>
</el-dropdown-item>
</el-dropdown-menu>
</template>
</el-dropdown>
</template>
<script>
import { mapState } from 'vuex'
import headerConfig from './config';
export default {
computed: mapState({
userInfo: state => state.userInfo,
}),
data() {
return {
DEFAULT_AVATAR: headerConfig.miscellaneous.defaultAvatar,
};
},
};
</script>
<style lang="less" scoped>
.user-info {
display: flex;
align-items: center;
}
.user-name {
margin-left: 12px;
color: #FFF;
}
</style>
...@@ -2,23 +2,39 @@ const headerConfig = { ...@@ -2,23 +2,39 @@ const headerConfig = {
appName: 'OP运营管理后台', appName: 'OP运营管理后台',
logo: 'http://si1.go2yd.com/get-image/0ZAJxXeZ6iu', logo: 'http://si1.go2yd.com/get-image/0ZAJxXeZ6iu',
menuItems: [ menuItems: [
// {
// path: '/home',
// name: '首页',
// },
// {
// path: '/about',
// name: '关于'
// },
{ {
path: '/home', path: '/enterprise/certification',
name: '首页', name: '企业认证管理'
}, },
{ {
path: '/about', path: '/life-no/life',
name: '关于' name: '生活号管理'
}, },
{ {
path: '/certification', path: '/certification',
name: '企业认证管理' name: '企业认证管理'
},
{
path: '/role',
name: '角色管理'
},
{
path: '/user',
name: '用户管理'
} }
], ],
// miscellaneous: { miscellaneous: {
// // 配置当用户头像不存在时使用的fallback头像图URL // 配置当用户头像不存在时使用的fallback头像图URL
// defaultAvatar: '//s.go2yd.com/a/thead_meiguoduizhang.png', defaultAvatar: '//s.go2yd.com/a/thead_meiguoduizhang.png',
// }, },
}; };
export default headerConfig; export default headerConfig;
\ No newline at end of file
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
<div id="pageheader"> <div id="pageheader">
<div class="line"></div> <div class="line"></div>
<el-menu <el-menu
class="el-menu-demo" class="header-menu"
mode="horizontal" mode="horizontal"
:router="true" :router="true"
background-color="#545c64" background-color="#545c64"
...@@ -17,16 +17,24 @@ ...@@ -17,16 +17,24 @@
> >
{{ item.name }} {{ item.name }}
</el-menu-item> </el-menu-item>
<el-menu-item key="usermenu" class="user-menu">
<user></user>
</el-menu-item>
</el-menu> </el-menu>
</div> </div>
</template> </template>
<script> <script>
import headerConfig from "./config"; import headerConfig from "./config";
import User from './User.vue';
const { menuItems } = headerConfig; const { menuItems } = headerConfig;
export default { export default {
name: "PageHeader", name: "PageHeader",
components: {
User,
},
data () { data () {
return { return {
menuItems, menuItems,
...@@ -48,4 +56,8 @@ export default { ...@@ -48,4 +56,8 @@ export default {
line-height: 60px; line-height: 60px;
width: 100%; width: 100%;
} }
.header-menu .user-menu {
float: right !important;
margin-right: 20px;
}
</style> </style>
<template> <template>
<div class="life-no"> <layout>
<el-form :inline="true" :model="formInline" class="demo-form-inline"> <div class="life-no">
<el-form-item label="生活号名称/企业名称"> <el-form :inline="true" :model="formInline" class="demo-form-inline">
<el-input <el-form-item label="生活号名称/企业名称">
class="search_life" <el-input
maxlength="15" class="search_life"
v-model="formInline.user" maxlength="15"
placeholder="生活号名称/企业名称" v-model="formInline.user"
></el-input> placeholder="生活号名称/企业名称"
</el-form-item> ></el-input>
<el-form-item label="类型"> </el-form-item>
<el-select v-model="formInline.region" placeholder="类型"> <el-form-item label="类型">
<el-option value="shanghai"></el-option> <el-select v-model="formInline.region" placeholder="类型">
<el-option value="beijing"></el-option> <el-option value="shanghai"></el-option>
</el-select> <el-option value="beijing"></el-option>
</el-form-item> </el-select>
<el-form-item> </el-form-item>
<el-button type="primary" @click="onSearchSubmit">查询</el-button> <el-form-item>
<el-button @click="onReset">重置</el-button> <el-button type="primary" @click="onSearchSubmit">查询</el-button>
</el-form-item> <el-button @click="onReset">重置</el-button>
</el-form> </el-form-item>
<el-table </el-form>
:data="tableData" <el-table
border :data="tableData"
style="width: 100%" border
@row-click="toLifeDetail" style="width: 100%"
> @row-click="toLifeDetail"
<el-table-column prop="id" label="ID"> </el-table-column> >
<el-table-column prop="name" label="生活号名称"> </el-table-column> <el-table-column prop="id" label="ID"> </el-table-column>
<el-table-column prop="address" label="类型"> </el-table-column> <el-table-column prop="name" label="生活号名称"> </el-table-column>
<el-table-column prop="name" label="状态"> </el-table-column> <el-table-column prop="address" label="类型"> </el-table-column>
<el-table-column prop="date" label="创建时间"> </el-table-column> <el-table-column prop="name" label="状态"> </el-table-column>
</el-table> <el-table-column prop="date" label="创建时间"> </el-table-column>
<page :totalNum="totalNum" @update="update" /> </el-table>
</div> <page :totalNum="totalNum" @update="update" />
</div>
</layout>
</template> </template>
<script> <script>
import Layout from '@/layouts'
import page from "./components/Pagination" import page from "./components/Pagination"
export default { export default {
components: { components: {
Layout,
page page
}, },
data () { data () {
......
<template>
<div class="user-detail">
<el-descriptions class="margin-top" :column="3" :size="size" border>
<el-descriptions-item>
<template #label> 用户姓名 </template>
kooriookami
</el-descriptions-item>
<el-descriptions-item>
<template #label> 手机号 </template>
18100000000
</el-descriptions-item>
<el-descriptions-item>
<template #label> 所属组织 </template>
研发部
</el-descriptions-item>
<el-descriptions-item>
<template #label> 添加人账号 </template>
XXXX
</el-descriptions-item>
<el-descriptions-item>
<template #label> 添加时间 </template>
2020-12-01
</el-descriptions-item>
<el-descriptions-item>
<template #label> 最后修改人账号 </template>
张三
</el-descriptions-item>
<el-descriptions-item>
<template #label> 最后修改时间 </template>
2021-05-21
</el-descriptions-item>
<el-descriptions-item>
<template #label> 已拥有角色池 </template>
角色池
</el-descriptions-item>
<el-descriptions-item>
<template #label> 角色名称 </template>
管理员
</el-descriptions-item>
<el-descriptions-item>
<template #label> 敏感词权限 </template>
敏感词权限
</el-descriptions-item>
<el-descriptions-item>
<template #label> 数据权限 </template>
数据权限
</el-descriptions-item>
</el-descriptions>
</div>
</template>
<script>
export default {
data () {
return {
userInfoList: [{
}]
}
}
}
</script>
<style lang="less" scoped>
.user-detail {
margin: 50px;
}
</style>
\ No newline at end of file
import { createRouter, createWebHistory } from "vue-router"; import { createRouter, createWebHistory } from "vue-router";
import Home from "../pages/Home"; import Home from "../pages/Home";
import Login from "../pages/Login"; import Login from "../pages/Login";
import Certification from '@/pages/Enterprise/Certification';
import LifeNo from '../pages/Life-no/index.vue' import LifeNo from '../pages/Life-no/index.vue'
import LifeNoDetail from '../pages/Life-no/life-no-detail.vue' import LifeNoDetail from '../pages/Life-no/life-no-detail.vue'
import UserDetail from '../pages/User/user-detail.vue' import UserDetail from '../pages/User/user-detail.vue'
...@@ -23,10 +26,16 @@ const routes = [ ...@@ -23,10 +26,16 @@ const routes = [
name: "About", name: "About",
component: () => import(/* webpackChunkName: "about" */ "../pages/About"), component: () => import(/* webpackChunkName: "about" */ "../pages/About"),
}, },
{
path: "/",
name: "Home",
component: Certification,
},
{ {
path: '/enterprise/certification', path: '/enterprise/certification',
name: 'Certification', name: 'Certification',
component: () => import(/* webpackChunkName: "enterprise" */ '@/pages/Enterprise/Certification') component: Certification,
// component: () => import(/* webpackChunkName: "enterprise" */ '@/pages/Enterprise/Certification')
}, },
{ {
path: '/enterprise/audit', path: '/enterprise/audit',
......
...@@ -7,6 +7,11 @@ export async function login(email, password) { ...@@ -7,6 +7,11 @@ export async function login(email, password) {
return res.data; return res.data;
} }
export async function getPermissions() { export async function fetchCurrentUser() {
return await axios.post("api/home/user/get_permissions") return await axios.get("api/v1/fetch_user");
}
export async function getPermissions(email) {
console.log("fe service, getPermissions:::", email)
return await axios.get("api/v1/user/get_permissions", { params: {email} });
} }
\ No newline at end of file
import Vuex from "vuex"; import { createStore } from "vuex";
import { getPermissions } from '@/service/user';
export default Vuex.createStore({ export default createStore({
state: {}, state: {
mutations: {}, permissions: [],
actions: {}, userInfo: {},
},
mutations: {
updateUserPermission(state, payload) {
state.permissions = payload;
},
updateUserInfo(state, payload) {
state.userInfo = payload;
}
},
actions: {
async updateUserPermission({ commit }, payload) {
const permissions = await getPermissions(payload.email);
console.log("VUEX action updateUserPermission::", permissions);
commit('updateUserPermission', permissions)
}
},
modules: {}, modules: {},
getters: {
}
}); });
...@@ -2,25 +2,26 @@ ...@@ -2,25 +2,26 @@
* axios封装 * axios封装
*/ */
import axios from "axios"; import axios from "axios";
import { ElMessage } from "element-plus"; // import { ElMessage } from "element-plus";
// import { APP_URI } from "../config/app.config"; // import { APP_URI } from "../config/app.config";
/** /**
* show error tip * show error tip
* @param mgs * @param mgs
*/ */
const showErrorMessage = mgs => { // const showErrorMessage = mgs => {
ElMessage({ // ElMessage({
message: mgs, // message: mgs,
type: "error", // type: "error",
showClose: true // showClose: true
}); // });
}; // };
/** /**
* default axios config * default axios config
*/ */
export const defaultConfig = { export const defaultConfig = {
// baseURL: APP_URI, // baseURL: APP_URI,
withCredentials: true,
timeout: 10000 timeout: 10000
}; };
...@@ -71,52 +72,26 @@ instance.interceptors.request.use( ...@@ -71,52 +72,26 @@ instance.interceptors.request.use(
instance.interceptors.response.use( instance.interceptors.response.use(
function (response) { function (response) {
const { data = {} } = response; const { data = {} } = response;
const code = data.code ?? -1; // const code = data.code ?? -1;
if (code !== 0) { // if (code !== 0) {
const msg = data.reason || "未定义错误"; // const msg = data.reason || "未定义错误";
showErrorMessage(data.reason); // showErrorMessage(data.reason);
return Promise.reject({ code, msg }); // return Promise.reject({ code, msg });
} // }
if (data.message) { // if (data.message) {
ElMessage({ // ElMessage({
message: data.reason, // message: data.reason,
type: "info", // type: "info",
showClose: true // showClose: true
}); // });
} // }
return data; return data;
}, },
function (error) { // function (error) {
if (!(error.code && error.code === -1)) error.message = "接口请求错误"; // if (!(error.code && error.code === -1)) error.message = "接口请求错误";
showErrorMessage(error.message); // showErrorMessage(error.message);
return Promise.reject(error); // return Promise.reject(error);
} // }
); );
// /**
// * Get
// * @param {*} url
// * @param {*} params
// */
// export const get = ({url, params, headers}) => {
// return instance.request({
// url,
// method: "get",
// params
// });
// };
// /**
// * Post
// * @param {*} url
// * @param {*} params
// */
// export const post = ({url, data, headers}) => {
// return instance.request({
// url,
// method: "post",
// data
// });
// };
export default instance; export default instance;
...@@ -6,7 +6,7 @@ module.exports = { ...@@ -6,7 +6,7 @@ module.exports = {
outputDir: isDev outputDir: isDev
? './dist' ? './dist'
: path.resolve('../../../www/dist/'), : path.resolve('../../../www/dist/'),
publicPath: isDev ? '' : '/dist/', publicPath: isDev ? '/' : '/dist',
configureWebpack: { configureWebpack: {
devServer: { devServer: {
// proxy: { // proxy: {
...@@ -16,7 +16,9 @@ module.exports = { ...@@ -16,7 +16,9 @@ module.exports = {
// changeOrigin: true, // changeOrigin: true,
// }, // },
// }, // },
proxy: 'http://localhost:8055' proxy: 'http://localhost:8055',
hot: true,
disableHostCheck: true,
}, },
}, },
chainWebpack: config => { chainWebpack: config => {
......
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