Commit f8d5f331 authored by mengwenhao's avatar mengwenhao

feature: 新增金山云服务

parents b78071b0 87a04b70
const API_INTERNAL_URI = require("../config.js").API_INTERNAL_URI;
const req = require("../utils/request").httpReq;
exports.entCheck = async (ctx) => {
// 获取企业信息验证
exports.entCheck = async ctx => {
const url = `${API_INTERNAL_URI}/merchant/inner/ent_check`;
// const url = `http://bp-test.ini.yidian-inc.com/merchant/inner/ent_check`;
const { user_id } = ctx.request.query;
const opts = {
url: url,
method: "GET",
qs: {
user_id
}
};
ctx.body = await req(ctx, opts);
};
// 企业信息提交
exports.entCommit = async ctx => {
const url = `${API_INTERNAL_URI}/merchant/inner/ent_commit`;
const opts = {
url,
method: "POST",
json: true,
timeout: 8000,
body: ctx.request.body
};
console.log("参数传递", ctx.request);
ctx.body = await req(ctx, opts);
};
exports.entCommit = async (ctx, next) => {
const url = `${API_INTERNAL_URI}/merchant/inner/ent_commit`;
// 生活号检查
exports.checkLife = async ctx => {
const url = `${API_INTERNAL_URI}/merchant/enterprise/check_life`;
const opts = {
url,
method: "POST",
json: true,
timeout: 8000,
body: ctx.request.body
};
ctx.body = await req(ctx, opts);
};
// 创建生活号
exports.createLife = async ctx => {
const url = `${API_INTERNAL_URI}/merchant/enterprise/create_life`;
const opts = {
url,
method: "POST",
......@@ -23,6 +52,5 @@ exports.entCommit = async (ctx, next) => {
timeout: 8000,
body: ctx.request.body
};
console.log(next);
ctx.body = await req(ctx, opts);
};
......@@ -6,11 +6,13 @@ const enterprise = require("./controllers/enterprise");
const router = Router();
const API_VERSION = "/api/v1";
router.post(`${API_VERSION}/login`, system.login);
// router.post(`${API_VERSION}/login`, system.login);
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.post(`${API_VERSION}/emterprise_commit`, enterprise.entCommit);
router.post(`${API_VERSION}/check_life`, enterprise.checkLife);
router.post(`${API_VERSION}/create_life`, enterprise.createLife);
module.exports = router;
<template>
<div>
<router-view />
<!-- <layout>
</layout> -->
</div>
</template>
<script>
// Layout 为布局组件,控制页面基础布局,通过 slot 实现
// import Layout from '@/layouts';
import { fetchCurrentUser } from './service/user';
// async function isUserLogged() {
// const res = await fetchCurrentUser()
// return res.status === 'success';
// }
function redirectToLogin() {
const loginUrl = '//pandora.yidian-inc.com/tools/admin/login';
const cbUrl = location.href;
......@@ -24,21 +15,14 @@ function redirectToLogin() {
export default {
async mounted() {
// http://dev.yidian-inc.com:8081/home
const { status, user } = await fetchCurrentUser();
// {"status":"success","user":{"userid":"732473439","name":"吕伟朝","email":"lvweichao@yidian-inc.com","avatar":""}}
// {"status":"success","user":{"userid":"732473439","name":"吕伟朝","email":"lvweichao@yidian-inc.com","avatar":""}}
if (status === 'success') {
this.$store.dispatch('updateUserPermission', { email: user.email })
this.$store.commit('updateUserInfo', user)
} else {
redirectToLogin();
}
// if (!(await isUserLogged())) {
// redirectToLogin();
// } else {
// }
},
};
</script>
......
import request from "@/utils/request";
export default class CommonServer {
static getKsOssSign (params) {
return request({
url: '',
method: 'get',
params
})
}
};
......@@ -18,10 +18,6 @@ const headerConfig = {
path: '/life-no/life',
name: '生活号管理'
},
{
path: '/certification',
name: '企业认证管理'
},
{
path: '/role',
name: '角色管理'
......
......@@ -74,7 +74,7 @@
<!-- 修改详情页 -->
<el-form
v-if="pageStatus === 'EDIT' "
v-if="pageStatus === 'EDIT'"
:rules="messageLishRules"
label-width="240px"
ref="establish_form"
......@@ -301,7 +301,10 @@
<el-input v-model="lifeForm.adminPhone"></el-input>
</el-form-item>
<el-form-item label="生活号名称:">
<el-input v-model="lifeForm.lifeName"></el-input>
<el-input
@blur="onCheckLife"
v-model="lifeForm.lifeName"
></el-input>
</el-form-item>
<el-form-item label="生活号管理员:">
<el-input v-model="lifeForm.lifeAdmin"></el-input>
......@@ -312,7 +315,7 @@
<el-button @click="isDialogShow = false">取 消</el-button>
<el-button
type="primary"
@click="isDialogShow = false"
@click="onMakeCreateLife"
>确认创建</el-button>
</span>
</template>
......@@ -340,6 +343,7 @@
<script>
import Layout from "@/layouts";
import { checkLife, createLife } from "../../../service/enterprise";
export default {
name: "Audit",
components: { Layout },
......@@ -395,6 +399,7 @@ export default {
{
status: 1,
id: 1221,
code: 112211,
registeredName: "一点资讯", // 企业名称
registrationCode: 1221, // 注册码
licenseList: [], // 营业执照
......@@ -484,6 +489,11 @@ export default {
}
]
},
// 生活号状态
lifeStatus: false,
// 生活号错误信息
lifeErrorMessage: ""
};
},
......@@ -500,8 +510,6 @@ export default {
},
methods: {
opinionChange () { },
// 审核-拒绝审核
auditRefuse () {
if (this.opinionArea.length === 0)
......@@ -517,6 +525,7 @@ export default {
onCreateLife (params) {
console.log(params);
this.isDialogShow = true;
this.lifeStatus = true;
},
// 修改详情-提交审核
......@@ -527,7 +536,7 @@ export default {
},
// 修改详情-取消修改表单
handelCancel () {
this.$router.replace({ name: 'Certification' });
this.$router.replace({ name: "Certification" });
},
// 修改详情-执照列表更改时
onLicenseChange (file, fileList) {
......@@ -556,6 +565,38 @@ export default {
this.messageList[0].idcardPhoto = fileList;
console.log("idCarPhoto:", this.messageList[0].idcardPhoto);
},
// 查看详情-生活号名称检查
async onCheckLife () {
const res = await checkLife(this.lifeForm.lifeName);
if (res.code !== 0) {
this.lifeErrorMessage = res.reason;
this.lifeStatus = false;
} else {
this.lifeStatus = true;
}
},
// 创建生活号
async onMakeCreateLife () {
if (!this.lifeStatus) {
return this.$message.error(this.lifeErrorMessage);
} else {
const params = {
life_account_name: this.lifeForm.lifeName,
code: this.messageList[0].code,
user_id: ""
};
const res = await createLife(params);
if (res.code !== 0) {
return this.$message.error(res.reason)
} else {
this.$message({ type: 'success', message: '创建生活号成功!' });
this.isDialogShow = false;
}
console.log(res);
}
}
}
};
</script>
<template>
<layout>
<!-- 企业信息提交 -->
<el-button
type="primary"
class="setUp"
@click="goEstablish"
>企业信息提交</el-button>
<div>
<!-- 企业信息提交 -->
<el-button
type="primary"
class="setUp"
@click="goEstablish"
>企业信息提交</el-button>
<el-card class="enterprise_card">
<!-- 企业认证筛选 -->
<el-form
......@@ -172,7 +171,7 @@
<script>
import Layout from '@/layouts'
import { entCheck as entChecked } from '../../../service/enterprise'
import { entCheck } from '../../../service/enterprise'
export default {
name: "Certification",
components: { Layout },
......@@ -216,15 +215,15 @@ export default {
},
created () {
this.entCheck();
this.onEntCheck();
},
methods: {
// 获取商户认证检查信息
async entCheck () {
async onEntCheck () {
try {
const res = await entChecked(510232747179);
console.log('res:', res);
const res = await entCheck(510232747179);
console.log('res:----', res);
}
catch (error) {
console.log('error:', error);
......
......@@ -11,9 +11,24 @@
<el-form
:rules="establishRules"
label-width="240px"
ref="establish_form"
ref="establishFormRef"
:model="establishForm"
>
<el-form-item
label="商户类型"
prop="merchantsType"
>
<el-select v-model="establishForm.merchantsType">
<el-option
label="个体工商户"
value="1"
></el-option>
<el-option
label="普通企业"
value="2"
></el-option>
</el-select>
</el-form-item>
<el-form-item
label="营业执照:"
ref="licenseChange"
......@@ -83,9 +98,9 @@
<el-input v-model.trim="establishForm.idcardNumber"></el-input>
</el-form-item>
<el-form-item>
<el-button @click="handelCancel('establish_form')">取消</el-button>
<el-button @click="handelCancel('establishFormRef')">取消</el-button>
<el-button
@click="handelSubmit('establish_form')"
@click="handelSubmit('establishFormRef')"
type="primary"
>提交审核</el-button>
</el-form-item>
......@@ -135,6 +150,7 @@ export default {
return {
// 表单输入项
establishForm: {
merchantsType: null, // 商户类型
licenseList: [], // 营业执照
registeredName: "", // 注册名称
registrationCode: "", // 注册码
......@@ -180,7 +196,9 @@ export default {
validator: idcardNumberRules,
trigger: "blur"
}
]
],
// 商户类型
merchantsType: [{ required: true, message: "请选择商户类型", trigger: "change" }]
}
};
},
......@@ -195,28 +213,22 @@ export default {
onLicenseChange (file, fileList) {
this.establishForm.licenseList = fileList;
this.$refs["licenseChange"].clearValidate();
console.log("licenseList", this.establishForm.licenseList);
},
// 身份证照片更改时
onIdPhoneChange (file, fileList) {
this.establishForm.idcardPhoto = fileList;
this.$refs["idcardPhotoChange"].clearValidate();
console.log("idcardPhoto:", this.establishForm.idcardPhoto);
},
// 删除上传的营业执照
onLicenseRemove (file, fileList) {
console.log("file", file);
console.log("fileList", fileList);
this.establishForm.licenseList = fileList;
console.log("licenseList", this.establishForm.licenseList);
},
// 删除上传的身份证照片
onIdPhoneRemove (file, fileList) {
this.establishForm.idcardPhoto = fileList;
console.log("idCarPhoto:", this.establishForm.idcardPhoto);
},
// 取消创建表单
......@@ -229,33 +241,46 @@ export default {
this.$refs[formName].validate(async valid => {
console.log(valid);
const query = {
user_id: 510232747179,
code: parseInt(this.establishForm.registrationCode),
name: this.establishForm.registeredName,
type: '',
addr: '',
pers: '',
scope: '',
time: '',
regi: '',
organizer: '',
date: '',
comp: '',
num: '',
form: '',
funding: '',
issue_date: '',
entterprise_image: '',
data_from: '',
proxy_user_name: ''
}
user_id: 510232747179, // 用户id
code: parseInt(this.establishForm.registrationCode), // 企业代码
name: this.establishForm.registeredName, // 企业名称
type: "", // 企业类型
addr: "", // 企业注册地址
pers: "", // 法人
scope: "", // 经营范围
time: "", // 有效期
regi: "", // 注册资本
organizer: "", // 主管单位(!)
date: "", // 成立时间(!)
comp: "", // 登记机关(!)
num: "", // 登记号(!)
form: "", // 组成形式(!)
funding: "", // 经费来源(!)
issue_date: "", // 发证日期(!)
entterprise_image: "", // 金山云key
data_from: "", // 数据来源,1C端,2B端,3 OP后台代提交
proxy_user_name: "" // OP后台代提交 代提交人名(!)
};
if (valid) {
const res = await entCommit(query);
if (res.code !== 0) {
return this.$message.error(res.reason);
} else {
this.$message({ type: "success", message: "信息提交成功!" });
}
console.log(res);
} else {
this.$message.error('验证不通过')
this.$message.error("表单未填写完整!");
}
});
},
// 选择商户
chooseType () {
if (this.establishForm.merchantsType) {
this.$refs["merchantsTypeRef"].clearValidate();
}
console.log(this.establishForm.merchantsType);
}
}
};
......
.role_management {
padding: 50px;
}
.role_management .el-button {
margin: 0 2px;
}
.role_management{
padding: 50px;
.el-button{
margin: 0 2px;
}
}
\ No newline at end of file
<template>
<layout>
<el-card class="role_management">
<!-- 角色检索区域 -->
<el-form
inline
:model="searchForm"
>
<el-form-item label="角色名称">
<el-input v-model="searchForm.roleName"></el-input>
</el-form-item>
<el-form-item label="状态">
<el-select
v-model="searchForm.roleStatus"
placeholder="请选择角色状态"
>
<el-option
label="正常"
:value="1"
></el-option>
<el-option
label="禁用"
:value="2"
></el-option>
<el-option
label="删除"
:value="3"
></el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary">搜索</el-button>
<el-button>重置</el-button>
</el-form-item>
</el-form>
<!-- 角色搜索列表 -->
<el-table
border
:data="managementList"
>
<el-table-column
label="ID"
prop="id"
align="center"
></el-table-column>
<el-table-column
label="角色名称"
prop="name"
align="center"
></el-table-column>
<el-table-column
label="状态"
prop="status"
align="center"
></el-table-column>
<el-table-column
label="最后修改日期"
prop="lastDate"
align="center"
></el-table-column>
<el-table-column
label="最后修改人账号"
prop="updateNumber"
align="center"
></el-table-column>
<el-table-column
label="操作"
align="center"
>
<template #default="scope">
<el-button
size="mini"
@click="handelClick(scope.row)"
type="primary"
>修改</el-button>
<el-button
size="mini"
@click="handelClick(scope.row)"
type="warning"
>删除</el-button>
<el-button
size="mini"
@click="handelClick(scope.row)"
type="danger"
>禁用</el-button>
<el-button
size="mini"
@click="handelClick(scope.row)"
type="success"
>启用</el-button>
<el-button
style="margin-top:10px"
size="mini"
@click="handelClick(scope.row)"
>查看详情</el-button>
</template>
</el-table-column>
</el-table>
</el-card>
</layout>
</template>
<style lang="less" scope src="./index.less"></style>
<script>
import Layout from "@/layouts";
export default {
name: 'RoleManagement',
components: {
Layout
},
data () {
return {
searchForm: {
roleName: '',
roleStatus: 1
},
managementList: [
{
id: 1,
name: '超级管理员',
status: 1,
lastDate: '2021-05-31',
updateNumber: 492148618,
}
]
}
},
};
</script>
import { createRouter, createWebHistory } from "vue-router";
import Home from "../pages/Home";
// import Home from "../pages/Home";
import Login from "../pages/Login";
import LifeNo from "../pages/Life-no/index.vue";
import LifeNoDetail from "../pages/Life-no/life-no-detail.vue";
import UserDetail from "../pages/User/user-detail.vue";
import AddRole from "../pages/Role/add-role.vue";
import Certification from "../pages/Enterprise/Certification";
import Establish from "../pages/Enterprise/Establish";
import Audit from "../pages/Enterprise/Audit";
const routes = [
{
path: "/home",
name: "Home",
component: Home
},
// {
// path: "/home",
// name: "Home",
// component: Home
// },
{
path: "/login",
name: "Login",
......@@ -32,23 +27,32 @@ const routes = [
{
path: "/",
name: "Home",
component: Certification,
component: () =>
import(
/* webpackChunkName: "enterprise" */ "@/pages/Enterprise/Certification"
)
},
{
path: '/enterprise/certification',
name: 'Certification',
component: Certification,
// component: () => import(/* webpackChunkName: "enterprise" */ '@/pages/Enterprise/Certification')
path: "/enterprise/certification",
name: "Certification",
component: () =>
import(
/* webpackChunkName: "enterprise" */ "@/pages/Enterprise/Certification"
)
},
{
path: "/audit",
path: "/enterprise/audit",
name: "Audit",
component: Audit
component: () =>
import(/* webpackChunkName: "enterprise" */ "@/pages/Enterprise/Audit")
},
{
path: "/establish",
path: "/enterprise/establish",
name: "Establish",
component: Establish
component: () =>
import(
/* webpackChunkName: "enterprise" */ "@/pages/Enterprise/Establish"
)
},
//生活号管理
{
......@@ -72,6 +76,11 @@ const routes = [
path: "/role/addRole",
name: "AddRole",
component: AddRole
},
{
path: "/role",
name: "Role",
component: import(/* webpackChunkName: "role" */ "@/pages/Role/RoleManagement")
}
];
......
import axios from '../utils/request';
export async function userLogin(email, password) {
let res = await axios.post(`api/v1/login`, {
let res = await axios.post(`/api/v1/login`, {
email, password, authCode: ''
});
return res.data;
......
......@@ -3,14 +3,31 @@
*/
import axios from "../utils/request";
// 获取审核列表
// export async function auditList (params) {
// const res = await axios.post(``)
// }
// 企业信息检查
export async function entCheck (user_id) {
const res = await axios.get(`api/v1/certification`, { params: { user_id } });
return res.result;
const res = await axios.get(`/api/v1/certification`, { params: { user_id } });
return res;
}
// 发送企业信息认证
export async function entCommit (query) {
const res = await axios.post(`api/v1/emterprise_commit`, { query });
return res.result;
const res = await axios.post(`/api/v1/emterprise_commit`, { query });
return res;
}
// 检查生活号信息唯一性
export async function checkLife (life_account_name) {
const res = await axios.post(`/api/v1/check_life`, { life_account_name });
return res;
}
// 创建生活号
export async function createLife (params) {
const res = await axios.post(`/api/v1/create_life`, { params });
return res;
}
import axios from '../utils/request';
export async function login(email, password) {
const res = await axios.post(`api/v1/login`, {
const res = await axios.post(`/api/v1/login`, {
email, password, authCode: ''
});
return res.data;
}
export async function fetchCurrentUser() {
return await axios.get("api/v1/fetch_user");
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} });
return await axios.get("/api/v1/user/get_permissions", { params: {email} });
}
\ No newline at end of file
......@@ -16,7 +16,7 @@ export default createStore({
},
actions: {
async updateUserPermission({ commit }, payload) {
const permissions = await getPermissions(payload.email);
const { permissions = [] } = await getPermissions(payload.email);
console.log("VUEX action updateUserPermission::", permissions);
commit('updateUserPermission', permissions)
}
......
import moment from "moment";
import CommonServer from "@/api/common";
import axios from "axios";
import { ElMessage } from "element-plus";
// 文件扩展名提取
export const fileType = fileName => {
fileName.substring(fileName.lastIndexOf(".") + 1);
};
/**
* oss 路径定义
* @param file 文件
* @param customFileType 自定义扩展名
*/
export const ossPath = (file, customFileType) => {
const folder = moment().format("YYYY-MM-DD");
const name = moment().format("YYYY-MM-DD-HH-mm-ss-SSS");
if (file.name) {
const type = fileType(file.name);
return `项目名称(金山云上创建的对应项目文件名/upload/${folder}/${type}/${name}.${type})`;
} else if (customFileType) {
return `项目名称(金山云上创建的对应项目文件名/upload/${folder}/${customFileType}/${name}.${customFileType})`;
}
};
/**
* 金山云上传
* @returns {Promise<any>}
*/
export const ksOssUpload = (file, customFileType) => {
return new Promise((resolve, reject) => {
const key = ossPath(file, customFileType);
const params = { fileName: key };
CommonServer.getKsOssSign(params)
.then(res => {
const { accessid, policy, signature, host } = res;
const formData = new FormData();
formData.append("acl", "public-read");
formData.append("key", key);
formData.append("signature", signature);
formData.append("KSSAccessKeyId", accessid);
formData.append("policy", policy);
formData.append("file", file);
axios
.post(`https://${host}`, formData)
.then(res => {
const { status } = res;
if (status === 200) {
const data = {
url: `https://${host}/${key}`,
type: file.name ? fileType(file.name) : customFileType
};
resolve(data);
} else {
reject(res);
}
})
.catch(err => {
reject(err);
});
})
.catch(err => {
console.log(err);
});
});
};
/**
* 上传文件大小限制
* @param file
* @param fileMaxSize
* @returns {boolean}
*/
export const isMaxFileSize = (file, fileMaxSize = 1) => {
if (!file) return false;
const isMaxSize = file.size / 1024 / 1024 < fileMaxSize;
if (!isMaxSize) {
ElMessage.error(`上传文件大小不能超过${fileMaxSize}MB!`);
return false;
}
return true;
};
/**
* 文件最大数量限制
* @param fileList
* @param maxLength
* @returns {boolean}
*/
export const isMaxFileLength = (fileList = [], maxLength = 3) => {
if (fileList.length > maxLength) {
ElMessage.error(`最多上传${maxLength}个文件`);
return false;
}
return true;
};
/**
* 判断上传是否为图片
* @param file
* @returns {boolean}
*/
export const isImageFile = file => {
if (!file) return false;
const types = [
"image/png",
"image/gif",
"image/jpeg",
"image/jpg",
"image/bmp",
"image/x-icon"
];
const isImage = types.includes(file.type);
if (!isImage) {
ElMessage.error(`上传文件非图片格式`);
return false;
}
return true;
};
/**
* 判断图片是否损坏
* @param file
*/
export const isNormalImage = file => {
return new Promise((resolve, reject) => {
if (!file) return;
const image = new Image();
image.src = file;
image.onload = () => {
resolve({ status: 1, message: "加载成功" });
};
image.onerror = () => {
reject({ status: 0, errMsg: "图片损坏,请重新上传" });
};
});
};
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