Commit 8dcf481f authored by mengwenhao's avatar mengwenhao

feature:增加金山云服务

parents 2027ccc3 f8d5f331
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);
};
const API_INTERNAL_URI = require('../config.js').API_INTERNAL_URI
const req = require('../utils/request').httpReq
const { API_INTERNAL_URI } = require("../config.js");
const req = require("../utils/request").httpReq;
var query = {
async get_permissions(ctx, next) {
async get_permissions (ctx) {
// 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`;
console.log(44444, ctx.request.query.email);
const { email } = ctx.request.query;
const opts = {
url,
method: 'GET',
method: "GET",
qs: {
user_email: 'jianghaiming@126.com'
user_email: "jianghaiming@126.com"
// user_email: email
}
}
ctx.body = await req(ctx, opts)
};
ctx.body = await req(ctx, opts);
}
}
};
exports.query = async (ctx, next) => {
var type = ctx.params.type
console.log("koa user::::::", type)
var type = ctx.params.type;
console.log("koa user::::::", type);
if (query[type]) {
try {
ctx.set('Content-Type', 'application/json; charset=utf-8')
await query[type](ctx, next)
ctx.set("Content-Type", "application/json; charset=utf-8");
await query[type](ctx, next);
} catch (e) {
console.error('/api/v1 error', e, ctx.url, ctx.headers['cookie'])
ctx.body = { status: 'failed', reason: 'Internal Server Error' }
console.error("/api/v1 error", e, ctx.url, ctx.headers["cookie"]);
ctx.body = { status: "failed", reason: "Internal Server Error" };
}
} else {
ctx.body = {
status: 'failed',
reason: 'Invalid type param',
}
status: "failed",
reason: "Invalid type param"
};
}
}
};
......@@ -11,6 +11,8 @@ 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;
......@@ -3,7 +3,7 @@ const request = require('request')
exports.httpReq = (ctx, opts) => {
opts.timeout = opts.timeout || 1000
return new Promise((resolve, reject) => {
var time_start = +new Date()
// var time_start = +new Date()
request(opts, (err, res, body) => {
//console.info(`[Api] httpReq (${opts.url},${opts.headers && opts.headers.cookie}) spent: ${+new Date() - time_start}ms`)
if (!err) {
......
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: '角色管理'
......
This diff is collapsed.
<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
......@@ -148,17 +147,17 @@
<el-button
size="mini"
type="primary"
@click="goAuditPage('AUDIT',scope.row.id)"
@click="goAuditPage('AUDIT', scope.row.id)"
>审核</el-button>
<el-button
size="mini"
type="success"
@click="goAuditPage('EDIT',scope.row.id)"
@click="goAuditPage('EDIT', scope.row.id)"
>修改提交</el-button>
<el-button
size="mini"
type="warning"
@click="goAuditPage('DETAIL',scope.row.id)"
@click="goAuditPage('DETAIL', scope.row.id)"
>查看详情</el-button>
</template>
</el-table-column>
......@@ -172,9 +171,9 @@
<script>
import Layout from '@/layouts'
import { entCheck as entChecked } from '../../../service/enterprise'
import { entCheck } from '../../../service/enterprise'
export default {
name: 'Certification',
name: "Certification",
components: { Layout },
data () {
return {
......@@ -215,14 +214,16 @@ export default {
};
},
created () { },
created () {
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);
......@@ -236,20 +237,18 @@ export default {
// 跳转到审核页面
goAuditPage (pageStatus, auditId) {
this.$router.push(
{
name: "Audit",
params: {
pageStatus,
auditId
}
this.$router.push({
name: "Audit",
params: {
pageStatus,
auditId
}
);
});
},
// 跳转到企业信息提交
goEstablish () {
this.$router.push({ name: 'Establish' })
this.$router.push({ name: "Establish" });
}
}
};
......
......@@ -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>
......@@ -18,6 +18,8 @@ const routes = [
name: 'NotFound',
component: () => import(/* webpackChunkName: "enterprise" */ '@/pages/Catch/notFound'),
},
// 企业认证管理
{
path: '/403',
name: 'Forbidden',
......@@ -57,9 +59,9 @@ const routes = [
}
},
{
path: '/life-no/lifeNoDetail',
name: 'LifeNoDetail',
component: LifeNoDetail,
path: "/life-no/lifeNoDetail",
name: "LifeNoDetail",
component: LifeNoDetail
},
//用户管理
{
......@@ -77,15 +79,20 @@ const routes = [
},
//角色管理
{
path: '/role/addRole',
name: 'AddRole',
component: AddRole,
path: "/role/addRole",
name: "AddRole",
component: AddRole
},
{
path: "/role",
name: "Role",
component: import(/* webpackChunkName: "role" */ "@/pages/Role/RoleManagement")
}
];
const router = createRouter({
history: createWebHistory(),
routes,
routes
});
export default router;
/**
* 企业认证
*/
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;
return res;
}
// 发送企业信息认证
export async function entCommit (query) {
const res = await axios.post(`/api/v1/emterprise_commit`, { query });
return res.result;
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 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