Commit 0c213766 authored by mengwenhao's avatar mengwenhao
parents 65ba0ecf f1f8590e
FROM node:14
RUN mkdir -p /home/worker/opservice.yidian-inc.com/htdocs
WORKDIR /home/worker/opservice.yidian-inc.com/htdocs
COPY . .
RUN npm install --registry=http://10.126.154.169:4873/ && npm i pm2 -g
RUN npm run web-build
#COPY . .
#CMD ["npm", "start"]
\ No newline at end of file
npm run web-build
\ No newline at end of file
#!/bin/bash
branch_name='develop'
pmJson='pm2-test.json'
if [ $1 ]
then
branch_name=$1
pmJson='pm2-test2.json'
fi
echo $branch_name
git fetch --all
git checkout ${branch_name}
git reset --hard origin/${branch_name}
git pull
npm config set registry https://registry.npm.taobao.org
npm i yarn -g
yarn install
rm -rf public
mkdir public
npm run prodTest
cp ./favicon.ico public/camel/
mv public/camel/index.html server/views/index.html
pm2 startOrReload ${pmJson}
#!/usr/bin/env bash
function assemble_env {
IMAGE_NAME=docker2.yidian.com:5000/publish/${COMPONENT}-${COMMIT_NUMBER}-image
docker build -t ${IMAGE_NAME} .
RET=$?
if [ $RET -ne 0 ];then
echo "docker build failed"
exit $RET
fi
echo "Push image to registry"
docker push $IMAGE_NAME
RET=$?
if [ $RET -ne 0 ];then
echo "docker push failed"
exit $RET
fi
}
#===========Main process begins===============================
DIST_FILE_NAME="Camel"
echo "Our commit job is "${COMMIT_JOB}
echo "Our commit number is "${COMMIT_NUMBER}
if [ "${DIST_FILE_NAME}" != "" ]; then
lftp -e "mget ${DIST_FILE_NAME}.tar.gz;quit" -u worker,services sftp://dist.yidian-inc.com:22/home/worker/jenkins_output/${COMMIT_JOB}/${COMMIT_NUMBER}/
if [ "$?" != "0" ]; then
echo "[FATAL] Failed to download dist packages!"
exit 1
fi
fi
mkdir ${DIST_FILE_NAME}
tar zxf ${DIST_FILE_NAME}.tar.gz -C ${DIST_FILE_NAME}
if [ "${DOCKERFILE}" != "" ]; then
cp ${DOCKERFILE} ./Dockerfile
fi
if [ "${COMPONENT}" = "" ]; then
COMPONENT=`echo ${JOB_NAME} | awk -F '-assemble' '{print $1}' | awk -F '-commit' '{print $1}'`
fi
assemble_env
This diff is collapsed.
{
"lockfileVersion": 1
}
{
"lockfileVersion": 1
}
exports.KS3_CONFIG = {
AK: 'AKLTTpZx6fNBQsGSKe5chqHdXA',
SK: 'OG9Bk93RUHwaH71U9K+OtWkvx44AdMheywjFlifILikvh96jNGgznJm+AyR5l4wPhw==',
DOMAIN: 'ks3-cn-beijing.ksyun.com',
protocol:'http',
baseUrl:'',
region: '',
bucket: '',
prefix:'kss',
// 分块上传的最小单位
chunkSize:5*1024*1024,
// 分块上传重试次数
retries:20,
currentUploadId: '',
stopFlag: false // for multipart upload
}
\ No newline at end of file
// const fsPromise = require("fs/promises");
const FormData = require('form-data');
const crypto = require('crypto');
const IDGEN_URI = require('../config.js').IDGEN_URI
const Ks3Util = require('../utils/ksUtil').Ks3Util
const KS3_CONFIG = require('../constant').KS3_CONFIG
const req = require("../utils/request").httpReq;
const _get_obj_id = async (ctx, next) => {
var url = `${IDGEN_URI}/Ksy/ksyun/buildObectid`;
var opts = {
url: url,
qs: {
appid: 'merchant-b',
},
method: 'GET',
}
return await req(ctx, opts);
}
const _get_bucket = async (ctx, next) => {
var url = `${IDGEN_URI}/Ksy/ksyun/getBucket`;
var opts = {
url: url,
qs: {
appid: 'merchant-b',
},
method: 'GET',
}
// console.log(await req(ctx, opts))
return await req(ctx, opts)
}
const _get_token = async (ctx, next) => {
var url = `${IDGEN_URI}/Ksy/ksyun/getToken`;
var opts = {
url: url,
data: {
appid: 'merchant-b',
},
method: 'POST',
}
return await req(ctx, opts)
}
exports.get_obj_id = async (ctx, next) => {
ctx.body = _get_obj_id(ctx, next)
}
exports.get_bucket = async (ctx, next) => {
ctx.body = await _get_bucket(ctx, next)
}
exports.get_token = async (ctx, next) => {
ctx.body = await _get_token(ctx, next)
}
exports.get_ks3_config = async (ctx, next) => {
console.log(8888, await _get_bucket(ctx, next))
const { result: { bucket } } = JSON.parse(await _get_bucket(ctx, next))
const { result: { objectId } } = JSON.parse(await _get_obj_id(ctx, next))
console.log(888834333, bucket, objectId)
const getExpires = (seconds) => {
return Math.round(new Date().getTime() / 1000) + seconds;
};
const policy = {
"expiration": new Date(getExpires(3600) * 1000).toISOString(), //一小时后
"conditions": [
["eq", "$bucket", bucket],
["starts-with", "$acl", "public-read"],
// ["starts-with", "$key", ""],
// ["starts-with", "$name", ""], //表单中传了name字段,也需要加到policy中
// ["starts-with", "$x-kss-meta-custom-param1",""],
// ["starts-with", "$x-kss-newfilename-in-body",""],//必须只包含小写字符
// ["starts-with", "$Cache-Control",""],
// ["starts-with", "$Expires", ""],
// ["starts-with", "$Content-Disposition", ""],
// ["starts-with", "$Content-Type",""],
// ["starts-with", "$Content-Encoding",""]
]
}
const stringToSign = Ks3Util.Base64.encode(JSON.stringify(policy))
console.log('stringToSign:::', stringToSign)
const signature = Ks3Util.b64_hmac_sha1(KS3_CONFIG.SK, stringToSign)
// const signature = crypto.createHmac('sha1', KS3_CONFIG.SK).update(stringToSign).digest().toString('base64');
console.log("signature::::::", signature)
ctx.body = {
bucket,
objectId,
policy: stringToSign,
signature,
}
}
exports.upload_ks3_image = async (ctx, next) => {
// console.log('upload_ks3_image::::::', ctx.request.files)
const file = ctx.request.files && ctx.request.files.file;
console.log(888899, await _get_bucket(ctx, next))
const { result: { bucket } } = JSON.parse(await _get_bucket(ctx, next))
const { result: { objectId } } = JSON.parse(await _get_obj_id(ctx, next))
console.log(3334444, file.type)
const getExpires = (seconds) => {
return Math.round(new Date().getTime() / 1000) + seconds;
};
const acl = 'public-read';
const policy = {
"expiration": new Date(getExpires(3600) * 1000).toISOString(), //一小时后
"conditions": [
["eq", "$bucket", bucket],
["starts-with", "$acl", "public-read"],
]
}
const stringToSign = Ks3Util.Base64.encode(JSON.stringify(policy))
console.log('stringToSign:::', stringToSign)
const signature = Ks3Util.b64_hmac_sha1(KS3_CONFIG.SK, stringToSign)
// const reader = fs.createReadStream(file.path);
// const reader = await fsPromise.readFile(file.path);
const reader = file;
const formData = new FormData()
// formData.append('acl', acl)
// formData.append('key', objectId)
// formData.append('signature', signature)
// formData.append('KSSAccessKeyId', KS3_CONFIG.AK)
// formData.append('policy', stringToSign)
// formData.append('bucket_name', stringToSign)
formData.append('file', reader)
const attrAcl = `x-${KS3_CONFIG.prefix}-acl`;
const date = new Date().toGMTString();
console.log('!!!!!', date)
const headersForSign = {
// ...formData.getHeaders(),
// 'content-length': formData.getLengthSync(),
'x-kss-date': date,
[attrAcl]: acl
}
const headerSignature = Ks3Util.generateToken(KS3_CONFIG.SK, bucket, objectId, 'PUT', file.type, headersForSign, date)
const hmac = crypto.createHmac('sha256', KS3_CONFIG.SK);
hmac.update(headerSignature);
console.log(hmac.digest('hex'));
console.log('headerSignature::::', headerSignature)
const headers = {
...headersForSign,
'Authorization': `KSS ${KS3_CONFIG.AK}:${headerSignature}`
}
console.log('before send::::::', headers)
var opts = {
url: `http://${KS3_CONFIG.DOMAIN}/${bucket}/${objectId}`,
method: 'PUT',
headers,
data: file
}
console.log(3333333333, formData.getLengthSync());
const res = await req(ctx, opts);
console.log('sever ks3 image::::::', res)
ctx.body = res;
// const url = `http://${KS3_CONFIG.DOMAIN}/${bucket}/${objectId}`
// var xhr = new XMLHttpRequest();
// xhr.open('PUT', url, true);
// var headers = {};
// var acl = 'public-read';
// if (acl == 'private' || acl == 'public-read') {
// var attr_Acl = 'x-' + KS3_CONFIG.prefix + '-acl';
// xhr.setRequestHeader(attr_Acl, acl);
// headers[attr_Acl] = acl;
// }
// var signature = Ks3Util.generateToken(KS3_CONFIG.SK, bucket, objectId, 'PUT', file.type, headers, '');
// xhr.onreadystatechange = function() {
// if (xhr.readyState == 4) {
// if(xhr.status >= 200 && xhr.status < 300 || xhr.status == 304){
// cb(null);
// }else if(xhr.status === 413 || xhr.status === 415) {
// // var errMsg = Ks3.xmlToJson(xhr.responseXML)['Error']['Message'];
// // cb({"msg":errMsg});
// console.log('image::::', xhr.responseXML);
// }else {
// console.log('status: ' + xhr.status);
// cb({"msg":"request failed"});
// }
// }
// };
// // xhr.upload.addEventListener("progress", params.ProgressListener, false);
// xhr.setRequestHeader('Authorization','KSS ' + KS3_CONFIG.AK + ':' + signature );
// xhr.send(file);
}
\ No newline at end of file
...@@ -5,14 +5,12 @@ const user = require("./controllers/user"); ...@@ -5,14 +5,12 @@ const user = require("./controllers/user");
const enterprise = require("./controllers/enterprise"); const enterprise = require("./controllers/enterprise");
const role = require('./controllers/role') const role = require('./controllers/role')
const life = require('./controllers/life-no') const life = require('./controllers/life-no')
const image = require('./controllers/image')
const router = Router(); const router = Router();
const API_VERSION = "/api/v1"; const API_VERSION = "/api/v1";
router.get('/', static.index) router.get('/', static.index)
// router.post(`${API_VERSION}/login`, system.login);
router.get(`${API_VERSION}/fetch_user`, system.fetch_user); router.get(`${API_VERSION}/fetch_user`, system.fetch_user);
router.get(`${API_VERSION}/user/:type`, user.query) router.get(`${API_VERSION}/user/:type`, user.query)
...@@ -37,11 +35,6 @@ router.post(`${API_VERSION}/audit`, enterprise.postAudit); ...@@ -37,11 +35,6 @@ router.post(`${API_VERSION}/audit`, enterprise.postAudit);
router.post(`${API_VERSION}/business`, enterprise.postBusiness) router.post(`${API_VERSION}/business`, enterprise.postBusiness)
router.post(`${API_VERSION}/op_commit`, enterprise.opCommit); router.post(`${API_VERSION}/op_commit`, enterprise.opCommit);
router.get(`${API_VERSION}/image/get_image_id`, image.get_obj_id)
router.get(`${API_VERSION}/image/get_bucket`, image.get_bucket)
router.get(`${API_VERSION}/image/get_token`, image.get_token)
router.post(`${API_VERSION}/image/upload_ks3_image`, image.upload_ks3_image)
router.get(`${API_VERSION}/image/get_ks3_config`, image.get_ks3_config)
//生活号 //生活号
router.post(`${API_VERSION}/merchant/lifeinner/life_info`, life.get_life_info) router.post(`${API_VERSION}/merchant/lifeinner/life_info`, life.get_life_info)
router.get(`${API_VERSION}/merchant/lifeinner/life_list`, life.get_life_list) router.get(`${API_VERSION}/merchant/lifeinner/life_list`, life.get_life_list)
......
This diff is collapsed.
<template> <template>
<div> <div>
<!-- <router-view /> -->
<router-view v-slot="{ Component }"> <router-view v-slot="{ Component }">
<keep-alive v-if="$route.meta.keepAlive"> <keep-alive v-if="$route.meta.keepAlive">
<component :is="Component"> </component> <component :is="Component"> </component>
...@@ -19,7 +17,6 @@ export default { ...@@ -19,7 +17,6 @@ export default {
async mounted () { async mounted () {
if (this.$store.state.permissions && this.$store.state.userInfo) return if (this.$store.state.permissions && this.$store.state.userInfo) return
const { status, user } = await fetchCurrentUser(); const { status, user } = await fetchCurrentUser();
//{"status":"success","user":{"userid":"732473439","name":"吕伟朝","email":"lvweichao@yidian-inc.com","avatar":""}}
if (status === 'success') { if (status === 'success') {
this.$store.commit('updateUserInfo', user); this.$store.commit('updateUserInfo', user);
this.$store.dispatch('updateUserPermission', { email: user.email }) this.$store.dispatch('updateUserPermission', { email: user.email })
......
...@@ -2,14 +2,6 @@ const headerConfig = { ...@@ -2,14 +2,6 @@ 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: '/enterprise/certification', path: '/enterprise/certification',
name: '企业认证管理' name: '企业认证管理'
......
...@@ -17,7 +17,7 @@ ...@@ -17,7 +17,7 @@
> >
{{ item.name }} {{ item.name }}
</el-menu-item> </el-menu-item>
<el-menu-item key="usermenu" index="usermenu" class="user-menu"> <el-menu-item key="usermenu" class="user-menu">
<user></user> <user></user>
</el-menu-item> </el-menu-item>
</el-menu> </el-menu>
......
<template>
<el-upload
class="upload-demo"
action="https://jsonplaceholder.typicode.com/posts/"
:on-preview="handlePreview"
:on-remove="handleRemove"
:before-remove="beforeRemove"
multiple
:limit="3"
:on-exceed="handleExceed"
:file-list="fileList"
>
<el-button size="small" type="primary">点击上传</el-button>
<template #tip>
<div class="el-upload__tip">只能上传 jpg/png 文件,且不超过 500kb</div>
</template>
</el-upload>
<input type="file" id="imgFile2">
<button @click="handleclick">Put上传</button>
</template>
<script>
import { ksOssUpload } from '@/service/ks3Image'
// import { uploadImageToKs3 } from '@/service/image'
export default {
data () {
return {
fileList: [{name: 'food.jpeg', url: 'https://fuss10.elemecdn.com/3/63/4e7f3a15429bfda99bce42a18cdd1jpeg.jpeg?imageMogr2/thumbnail/360x360/format/webp/quality/100'}, {name: 'food2.jpeg', url: 'https://fuss10.elemecdn.com/3/63/4e7f3a15429bfda99bce42a18cdd1jpeg.jpeg?imageMogr2/thumbnail/360x360/format/webp/quality/100'}]
}
},
beforeMount() {
},
methods: {
handleclick() {
var file = document.getElementById('imgFile2').files[0];
debugger;
console.log(33334444, file);
},
handleRemove(file, fileList) {
console.log(file, fileList);
},
handlePreview(file) {
const { raw } = file;
console.log('handlePreview:::', file, typeof File);
console.log(222, raw)
// uploadImageToKs3(raw)
ksOssUpload(raw)
},
handleExceed(files, fileList) {
this.$message.warning(`当前限制选择 3 个文件,本次选择了 ${files.length} 个文件,共选择了 ${files.length + fileList.length} 个文件`);
},
// beforeRemove(file, fileList) {
// return this.$confirm(`确定移除 ${ file.name }?`);
// },
}
}
</script>
<style lang="less" scoped>
</style>
...@@ -54,10 +54,11 @@ ...@@ -54,10 +54,11 @@
> >
<template #default="scope"> <template #default="scope">
<el-image <el-image
v-if="scope.row.sensitiveWord" v-if="scope.row.sensitiveWord && scope.row.entterprise_image"
fit="fill" fit="fill"
:src="scope.row.entterprise_image" :src="scope.row.entterprise_image"
></el-image> ></el-image>
<span v-else-if="scope.row.sensitiveWord && !scope.row.entterprise_image"></span>
<span v-else>无权限</span> <span v-else>无权限</span>
</template> </template>
</el-table-column> </el-table-column>
...@@ -77,10 +78,11 @@ ...@@ -77,10 +78,11 @@
> >
<template #default="scope"> <template #default="scope">
<el-image <el-image
v-if="scope.row.sensitiveWord" v-if="scope.row.sensitiveWord && scope.row.legal_front_id_card"
:src="scope.row.legal_front_id_card" :src="scope.row.legal_front_id_card"
fit="fill" fit="fill"
></el-image> ></el-image>
<span v-else-if="scope.row.sensitiveWord && !scope.row.legal_front_id_card"></span>
<span v-else>无权限</span> <span v-else>无权限</span>
</template> </template>
</el-table-column> </el-table-column>
...@@ -90,10 +92,11 @@ ...@@ -90,10 +92,11 @@
> >
<template #default="scope"> <template #default="scope">
<el-image <el-image
v-if="scope.row.sensitiveWord" v-if="scope.row.sensitiveWord && scope.row.legal_back_id_card"
fit="fill" fit="fill"
:src="scope.row.legal_back_id_card" :src="scope.row.legal_back_id_card"
></el-image> ></el-image>
<span v-else-if="scope.row.sensitiveWord && !scope.row.legal_back_id_card"></span>
<span v-else>无权限</span> <span v-else>无权限</span>
</template> </template>
</el-table-column> </el-table-column>
......
...@@ -29,11 +29,6 @@ const routes = [ ...@@ -29,11 +29,6 @@ const routes = [
name: 'Forbidden', name: 'Forbidden',
component: () => import(/* webpackChunkName: "enterprise" */ '@/pages/Catch/forbidden'), component: () => import(/* webpackChunkName: "enterprise" */ '@/pages/Catch/forbidden'),
}, },
{
path: '/demoImgUploader',
name: 'demoImgUploader',
component: () => import(/* webpackChunkName: "enterprise" */ '@/pages/DemoImageUpload'),
},
{ {
path: '/enterprise/certification', path: '/enterprise/certification',
name: 'Certification', name: 'Certification',
......
import { getKs3Config } from "@/service/image";
import { KS3_CONST } from "@/config/constant";
import axios from '../utils/request';
// async function getRemoteConfig() {
// const imgId = await getImgId();
// const bucket = await getImgBucket();
// return {imgId, bucket}
// }
// const protocal = window.location.protocol === 'https:' ? 'https' : 'http';
// const { imgId, bucket } = await getRemoteConfig();
export async function ksOssUpload(file) {
const { bucket, objectId, policy, signature } = await getKs3Config();
const protocal = window.location.protocol === 'https:' ? 'https' : 'http';
const uploadURL = `${protocal}://${KS3_CONST.DOMAIN}/${bucket}`;
// return new Promise((resolve, reject) => {
// CommonServer.getKsOssSign().then(res => {
// const { accessid, policy, signature } = res
const formData = new FormData()
formData.append('acl', 'public-read')
formData.append('key', objectId)
formData.append('signature', signature)
formData.append('KSSAccessKeyId', KS3_CONST.AccessKeyID)
formData.append('policy', policy)
formData.append('file', file)
console.log('ksOssUpload url::', uploadURL)
const res = await axios({ url: uploadURL, method: 'post', data: formData, withCredentials: false }).then(res => {
console.log('ksOssUpload res::', res)
})
return res;
}
\ No newline at end of file
...@@ -39,23 +39,3 @@ export function checkPathAuth (path) { ...@@ -39,23 +39,3 @@ export function checkPathAuth (path) {
return true; return true;
} }
// /**
// * 获取页面子权限
// * @param {*} module: 枚举值参考:PAGEMODULE_PERMISSIONNAME key
// * @returns 子权限列表
// */
// export function getModuleSubPermissions(module) {
// const authObj = getPermissionObj() || {};
// return Object.keys(authObj[PAGEMODULE_PERMISSIONNAME[module]])
// }
// /**
// * 获取一级权限
// * @returns 一级权限列表
// */
// export function getModulePermissions() {
// const authObj = getPermissionObj();
// const modules = Object.keys(authObj).map(ele => PERMISSIONNAME_PAGEMODULE[ele])
// return modules.filter(ele => !!ele)
// }
import request from "@/utils/request";
export default class CommonServer {
static getKsOssSign (params) {
return request({
url: '',
method: 'get',
params
})
}
};
import moment from "moment";
import CommonServer from "./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: "图片损坏,请重新上传" });
};
});
};
...@@ -9,13 +9,6 @@ module.exports = { ...@@ -9,13 +9,6 @@ module.exports = {
publicPath: isDev ? '/' : '/dist', publicPath: isDev ? '/' : '/dist',
configureWebpack: { configureWebpack: {
devServer: { devServer: {
// proxy: {
// '/api': {
// target: 'http://localhost:8055',
// // pathRewrite: { '^/api': '/api/v1' },
// changeOrigin: true,
// },
// },
proxy: 'http://localhost:8055', proxy: 'http://localhost:8055',
hot: true, hot: true,
disableHostCheck: true, disableHostCheck: true,
......
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