系统上线运行问题修改

This commit is contained in:
lSun 2025-09-22 15:04:17 +08:00
parent 79b9349598
commit 5dcba00915
5 changed files with 847 additions and 682 deletions

36
src/utils/aes_new.js Normal file
View File

@ -0,0 +1,36 @@
// src/utils/aesUtil.js
import CryptoJS from 'crypto-js'
/**
* AES解密函数
* @param {string} word - 需要解密的字符串
* @returns {string} 解密后的明文
*/
export function bnsCloudDecrypt(word) {
const key = CryptoJS.enc.Utf8.parse("bonus@cloud@2025")
const decrypt = CryptoJS.AES.decrypt(word, key, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
})
return CryptoJS.enc.Utf8.stringify(decrypt).toString()
}
/**
* AES加密函数
* @param {string} word - 需要加密的明文
* @returns {string} 加密后的字符串
*/
export function bnsCloudEncrypt(word) {
const key = CryptoJS.enc.Utf8.parse("bonus@cloud@2025")
const srcs = CryptoJS.enc.Utf8.parse(word)
const encrypted = CryptoJS.AES.encrypt(srcs, key, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
})
return encrypted.toString()
}
export default {
bnsCloudDecrypt,
bnsCloudEncrypt
}

View File

@ -1,7 +1,7 @@
<template> <template>
<div class="add-and-edit-form"> <div class="add-and-edit-form">
<!-- 基本信息表单 --> <!-- 基本信息表单 -->
<TitleTip title="基本信息" /> <TitleTip title="基本信息"/>
<el-form <el-form
ref="addAndEditForm" ref="addAndEditForm"
label-width="120px" label-width="120px"
@ -40,6 +40,32 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-row>
<el-col :span="12">
<el-form-item label="账号" prop="linkUser">
<el-input
clearable
maxlength="50"
show-word-limit
placeholder="请输入账号"
v-model="addAndEditForm.linkUser"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="密码" prop="linkPassword">
<el-input
clearable
maxlength="50"
show-word-limit
placeholder="请输入密码"
v-model="addAndEditForm.linkPassword"
/>
</el-form-item>
</el-col>
</el-row>
<el-row> <el-row>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="链接" prop="linkUrl"> <el-form-item label="链接" prop="linkUrl">
@ -94,7 +120,7 @@
</el-form> </el-form>
<!-- 产品案例Tabs区域 --> <!-- 产品案例Tabs区域 -->
<TitleTip title="产品案例" /> <TitleTip title="产品案例"/>
<el-row class="add-product-case"> <el-row class="add-product-case">
<el-col :span="21" class="add-product-case-tags"> <el-col :span="21" class="add-product-case-tags">
<el-tabs <el-tabs
@ -215,10 +241,13 @@ import {
} from '@/api/dataManage/product-center' } from '@/api/dataManage/product-center'
import TitleTip from '@/components/TitleTip' import TitleTip from '@/components/TitleTip'
import UploadImgFormData from '@/components/UploadImgFormData' import UploadImgFormData from '@/components/UploadImgFormData'
// import { bnsCloudEncrypt, bnsCloudDecrypt } from '@/utils/aes_new'
export default { export default {
name: 'AddAndEditForm', name: 'AddAndEditForm',
dicts: ['tb_product_type'], dicts: ['tb_product_type'],
components: { TitleTip, UploadImgFormData }, components: {TitleTip, UploadImgFormData},
props: { props: {
formType: { formType: {
type: Number, type: Number,
@ -241,20 +270,29 @@ export default {
linkUrl: '', // linkUrl: '', //
isAccess: '1', // 访 isAccess: '1', // 访
introduction: '', // introduction: '', //
linkUser: '', //
linkPassword: '',//
encryptedPassword: '' //
}, },
// //
addAndEditFormRules: { addAndEditFormRules: {
name: [ name: [
{ required: true, message: '请输入名称', trigger: 'blur' }, {required: true, message: '请输入名称', trigger: 'blur'},
],
linkUser: [
{required: true, message: '请输入账号', trigger: 'blur'},
],
linkPassword: [
{required: true, message: '请输入密码', trigger: 'blur'},
], ],
typeId: [ typeId: [
{ required: true, message: '请输入类型', trigger: 'blur' }, {required: true, message: '请输入类型', trigger: 'blur'},
], ],
linkUrl: [ linkUrl: [
{ required: true, message: '请输入链接', trigger: 'blur' }, {required: true, message: '请输入链接', trigger: 'blur'},
], ],
cover: [ cover: [
{ required: true, message: '请输入封面', trigger: 'blur' }, {required: true, message: '请输入封面', trigger: 'blur'},
], ],
isAccess: [ isAccess: [
{ {
@ -288,7 +326,7 @@ export default {
}, },
], ],
caseSort: [ caseSort: [
{ required: true, message: '请输入排序', trigger: 'blur' }, {required: true, message: '请输入排序', trigger: 'blur'},
], ],
caseIntroduction: [ caseIntroduction: [
{ {
@ -347,6 +385,19 @@ export default {
this.$emit('closeDialog', false) this.$emit('closeDialog', false)
}, },
//
encryptPassword(password) {
// if (!password) return ''
// try {
// // 使AES
// return bnsCloudEncrypt(password)
// } catch (error) {
// console.error(':', error)
// return password //
// }
},
// //
async handleSave() { async handleSave() {
this.$message.closeAll() this.$message.closeAll()
@ -364,9 +415,9 @@ export default {
// 2. // 2.
const requiredFields = [ const requiredFields = [
{ key: 'caseCompany', name: '案例公司' }, {key: 'caseCompany', name: '案例公司'},
{ key: 'caseSort', name: '案例排序' }, {key: 'caseSort', name: '案例排序'},
{ key: 'caseIntroduction', name: '案例介绍' }, {key: 'caseIntroduction', name: '案例介绍'},
] ]
let isValid = true let isValid = true
@ -434,6 +485,7 @@ export default {
// 3. // 3.
const submitData = { const submitData = {
...this.addAndEditForm, ...this.addAndEditForm,
linkPassword: this.encryptPassword(this.addAndEditForm.linkPassword), //
cases: this.editableTabs.map((tab) => tab.formInfo), cases: this.editableTabs.map((tab) => tab.formInfo),
} }
console.log('提交数据:', submitData) console.log('提交数据:', submitData)
@ -449,6 +501,8 @@ export default {
linkUrl, // linkUrl, //
isAccess, // 访 isAccess, // 访
introduction, // introduction, //
linkUser, //
linkPassword //
} = this.addAndEditForm } = this.addAndEditForm
cover.forEach((item) => { cover.forEach((item) => {
if (!item.id) { if (!item.id) {
@ -464,6 +518,8 @@ export default {
linkUrl, // linkUrl, //
isAccess, // 访 isAccess, // 访
introduction, // introduction, //
linkUser, //
linkPassword //
} }
for (const key in addAndEditFormParams) { for (const key in addAndEditFormParams) {
@ -612,6 +668,8 @@ export default {
introduction, introduction,
isAccess, isAccess,
list, list,
linkUser,
linkPassword
} = res?.data } = res?.data
this.addAndEditForm = { this.addAndEditForm = {
@ -621,8 +679,10 @@ export default {
linkUrl, linkUrl,
introduction, introduction,
isAccess, isAccess,
linkUser,
linkPassword,
cover: [ cover: [
{ url: image.url, id: image.id, name: image.originalName }, {url: image.url, id: image.id, name: image.originalName},
], ],
} }

View File

@ -114,7 +114,7 @@
<a <a
target="_blank" target="_blank"
class="link-text" class="link-text"
:href="scope.row[column.prop]" :href="getEncryptedUrl(scope.row)"
> >
{{ scope.row[column.prop] }} {{ scope.row[column.prop] }}
</a> </a>
@ -179,6 +179,7 @@ import {
} from '@/api/dataManage/product-center' } from '@/api/dataManage/product-center'
import DialogModel from '@/components/DialogModel' import DialogModel from '@/components/DialogModel'
import AddAndEditForm from './components/addAndEditForm.vue' import AddAndEditForm from './components/addAndEditForm.vue'
import {bnsCloudEncrypt, bnsCloudDecrypt} from '@/utils/aes_new'
export default { export default {
name: 'ProductCenter', name: 'ProductCenter',
dicts: ['tb_product_type'], dicts: ['tb_product_type'],
@ -236,6 +237,30 @@ export default {
} }
}, },
methods: { methods: {
getEncryptedUrl(row) {
const { linkUrl, linkUser, linkPassword } = row;
//
if (!linkUrl) return '';
// URL
if (linkUser && linkPassword) {
// username=admin&password=123
const authString = `username=${linkUser}&password=${linkPassword}`;
//
const encryptedParams = bnsCloudEncrypt(authString);
// URL
const separator = linkUrl.includes('?') ? '&' : '?';
return `${linkUrl}${separator}params=${encodeURIComponent(encryptedParams)}`;
}
//
return linkUrl;
},
// //
async getProductCenterListFun() { async getProductCenterListFun() {
const res = await getProductCenterListAPI(this.queryParams) const res = await getProductCenterListAPI(this.queryParams)

View File

@ -195,7 +195,7 @@ export default {
// //
getItemWidth() { getItemWidth() {
this.itemWidth = (this.$refs.servicesGrid?.clientWidth - 120) / 4 this.itemWidth = (this.$refs.servicesGrid?.clientWidth - 280) / 4
}, },
// //
@ -481,6 +481,7 @@ export default {
.services-grid { .services-grid {
height: 240px; /* 给子元素设置固定高度以便测试滚动 */ height: 240px; /* 给子元素设置固定高度以便测试滚动 */
width: 365px;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
align-items: center; align-items: center;

View File

@ -46,7 +46,7 @@
> >
访问演示 访问演示
</div> </div>
<div @click="handleDetail(item)"> 查看详情 </div> <div @click="handleDetail(item)"> 查看详情</div>
</div> </div>
</div> </div>
</div> </div>
@ -54,7 +54,9 @@
</template> </template>
<script> <script>
import { getProductCenterListAPI } from '@/api/publicService/productCenter' import {getProductCenterListAPI} from '@/api/publicService/productCenter'
import {bnsCloudEncrypt, bnsCloudDecrypt} from '@/utils/aes_new'
export default { export default {
name: 'ProductCenter', name: 'ProductCenter',
dicts: ['tb_product_type'], dicts: ['tb_product_type'],
@ -98,7 +100,7 @@ export default {
methods: { methods: {
// //
getItemWidth() { getItemWidth() {
this.itemWidth = (this.$refs.servicesGrid?.clientWidth - 120) / 4 this.itemWidth = (this.$refs.servicesGrid?.clientWidth - 280) / 4
}, },
// //
@ -117,7 +119,8 @@ export default {
}) })
}) })
} }
} catch (error) {} } catch (error) {
}
}, },
// 访 // 访
handleDemo(service) { handleDemo(service) {
@ -126,8 +129,48 @@ export default {
return return
} }
// URL //
const {linkUser, linkPassword} = service
let url = service.linkUrl let url = service.linkUrl
// URL
if (linkUser && linkPassword) {
// username=admin&password=123
const authString = `username=${linkUser}&password=${linkPassword}`
//
const encryptedParams = bnsCloudEncrypt(authString)
// URL
const separator = url.includes('?') ? '&' : '?'
url += `${separator}params=${encodeURIComponent(encryptedParams)}`
} else if (!url.startsWith('http://') && !url.startsWith('https://')) {
// URL http:// https:// https://
if (url.startsWith('www.')) {
url = 'https://' + url
} else {
// https://
url = 'https://' + url
}
}
// URL
/*
const authData = {
username: linkUser,
password: linkPassword
}
// JSON
const authJson = JSON.stringify(authData)
console.log(authJson)
const encryptedParams = bnsCloudEncrypt(authJson)
console.log(encryptedParams)
// URL
const separator = url.includes('?') ? '&' : '?'
url += `${separator}params=${encodeURIComponent(encryptedParams)}`
// URL http:// https:// https:// // URL http:// https:// https://
if (!url.startsWith('http://') && !url.startsWith('https://')) { if (!url.startsWith('http://') && !url.startsWith('https://')) {
// URL www. https:// // URL www. https://
@ -137,7 +180,7 @@ export default {
// https:// // https://
url = 'https://' + url url = 'https://' + url
} }
} }*/
window.open(url, '_blank') window.open(url, '_blank')
}, },
@ -145,7 +188,7 @@ export default {
handleDetail(service) { handleDetail(service) {
this.$router.push({ this.$router.push({
name: 'ProductDetail', name: 'ProductDetail',
params: { id: service.id }, params: {id: service.id},
}) })
}, },
// //
@ -245,6 +288,7 @@ export default {
.services-grid { .services-grid {
height: 260px; /* 给子元素设置固定高度以便测试滚动 */ height: 260px; /* 给子元素设置固定高度以便测试滚动 */
width: 365px;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
align-items: center; align-items: center;
@ -457,8 +501,7 @@ export default {
.category-item.active { .category-item.active {
// background-color: #4a90e2; // background-color: #4a90e2;
background: url('../../../assets/images/publicService/btn-sel.png') background: url('../../../assets/images/publicService/btn-sel.png') no-repeat center center;
no-repeat center center;
background-size: 100% 100%; background-size: 100% 100%;
color: white; color: white;
} }