Merge branch 'bugfix' into dev_hhn

# Conflicts:
#	src/utils/request.js
dev-QQq
HeHaonan 2 years ago
commit 1cd153b948

Binary file not shown.

@ -16,25 +16,29 @@
},
"dependencies": {
"@antv/g2": "^5.2.3",
"echarts-stat": "^1.2.0",
"@element-plus/icons-vue": "2.0.10",
"@vueup/vue-quill": "1.1.0",
"@vueuse/core": "9.5.0",
"axios": "0.27.2",
"echarts": "5.4.0",
"echarts-wordcloud": "2.0.0",
"element-plus": "2.2.27",
"file-saver": "2.0.5",
"fuse.js": "6.6.2",
"highlight.js": "^11.10.0",
"html2canvas": "^1.4.1",
"js-cookie": "3.0.1",
"jsencrypt": "3.3.1",
"jspdf": "^2.5.1",
"jszip": "^3.10.1",
"marked": "^14.0.0",
"md-editor-v3": "^4.18.1",
"nprogress": "0.2.0",
"pinia": "2.0.22",
"vue": "^3.2.47",
"vue-cropper": "1.0.3",
"vue-router": "4.1.4"
"vue-router": "4.1.4",
"xlsx": "^0.18.5"
},
"devDependencies": {
"@vitejs/plugin-vue": "3.1.0",

@ -73,3 +73,27 @@ export function linearRegression(data) {
data:data,
})
}
//线性回归-逻辑回归--预测
export function logisticRegressionPrediction(data) {
return request({
url: '/api/model/prediction',
method: 'post',
data:data,
})
}
//聚类分析表格下载
export function downloadClusterAnalysisForm(data) {
return request({
url: '/api/analysis/cAMExport',
method: 'post',
data:data,
})
}
//回归分析--逻辑回归
export function logisticRegression(data) {
return request({
url: '/api/model/logistic',
method: 'post',
data:data,
})
}

@ -2,7 +2,7 @@
* @Author: qinzhenpen qzp1807@126.com
* @Date: 2024-08-16 10:14:59
* @LastEditors: qinzhenpen qzp1807@126.com
* @LastEditTime: 2024-08-17 16:57:01
* @LastEditTime: 2024-08-19 15:07:27
* @FilePath: \vue3\src\api\marketing-algorithm.js
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
*/
@ -55,3 +55,21 @@ export function getMarketingAlgorithmKnowledgeImport(data) {
data,
});
}
//描述性统计分析下载
export function getMarketingAlgorithmDownload(data) {
return request({
url: "/api/analysis/dSExport",
//下载
responseType: "blob",
method: "post",
data,
});
}
// 情感分析
export function getMarketingAlgorithmSentiment(data) {
return request({
url: "/api/model/emotionalAnalysis",
method: "POST",
data,
});
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 222 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 660 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 470 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1010 B

@ -199,33 +199,60 @@ aside {
text-align: center;
.el-button:nth-child(1) {
background: url("../../assets/images/szjj/提交任务.png") no-repeat;
background-size: 100% 100%;
background: url("../../assets/images/确定222.png") no-repeat !important;
background-size: 100% 100% !important;
}
.el-button:nth-child(2) {
background: url("../../assets/images/szjj/重新开始.png") no-repeat;
background-size: 100% 100%;
background: url("../../assets/images/取消.png") no-repeat !important;
background-size: 100% 100% !important;
}
.el-button--large.is-round {
padding: 12px 20px 12px 40px !important;
}
.el-button {
width: 136px;
height: 40px;
.el-button{
width: 89px;
height: 31px;
padding: 12px 20px 12px 40px !important;
font-size: 15px;
border: none;
color: #ffffff;
color: #080138;
}
}
.app-container2 {
position: relative;
padding: 20px;
background: #FFFFFF;
box-shadow: 0px 0px 13px 0px #D6E0FE;
border-radius: 10px;
margin: 10px;
box-shadow: 0px 0px 13px 0px #0452C6;
border-radius: 10px;
padding: 25px 25px 10px 25px;
}
.dialogClass{
background:url('@/assets/images/弹框.png') !important;
background-size: 100% 100% !important;
.el-dialog__header{
padding: 5px 0px;
margin-right: 5px !important;
.gbImg{
cursor: pointer;
width: 51px;
height: 31px;
background-size: 100% 100%;
}
}
.xtImg{
margin-left: 18px;
width: 530px;
}
}
.my-header {
display: flex;
flex-direction: row;
justify-content: space-between;
gap: 16px;
text-align: center;
span{
color: #FFFFFF;
padding: 38px 20px 0;
}
}

@ -38,7 +38,7 @@ const emit = defineEmits(['update'])
const props = defineProps({
cron: {
type: Object,
default: {
default: {
second: "*",
min: "*",
hour: "*",
@ -87,7 +87,7 @@ function changeRadioValue(value) {
} else if (value.indexOf('/') > -1) {
const indexArr = value.split('/')
average01.value = Number(indexArr[0])
average02.value = Number(indexArr[1])
average01.value = Number(indexArr[1])
radioValue.value = 3
} else {
checkboxList.value = [...new Set(value.split(',').map(item => Number(item)))]

@ -2,22 +2,8 @@
<div>
<template v-for="(item, index) in options">
<template v-if="values.includes(item.value)">
<span
v-if="item.elTagType == 'default' || item.elTagType == ''"
:key="item.value"
:index="index"
:class="item.elTagClass"
>{{ item.label + " " }}</span
>
<el-tag
v-else
:disable-transitions="true"
:key="item.value + ''"
:index="index"
:type="item.elTagType === 'primary' ? '' : item.elTagType"
:class="item.elTagClass"
>{{ item.label + " " }}</el-tag
>
<span v-if="item.elTagType == 'default' || item.elTagType == ''" :key="item.value" :index="index" :class="item.elTagClass">{{ item.label + " " }}</span>
<el-tag v-else :disable-transitions="true" :key="item.value + ''" :index="index" :type="item.elTagType === 'primary' ? '' : item.elTagType" :class="item.elTagClass">{{ item.label + " " }}</el-tag>
</template>
</template>
<template v-if="unmatch && showValue">
@ -64,8 +50,7 @@ const unmatch = computed(() => {
}
// Array
props.value.forEach((item) => {
if (!props.options.some((v) => v.value == item))
unmatchArray.value.push(item);
if (!props.options.some((v) => v.value == item)) unmatchArray.value.push(item);
});
return true;
}

@ -0,0 +1,36 @@
export default {
beforeMount(el, { value, arg }) {
// 确保 binding.value 是一个函数
if (typeof value !== "function") {
console.warn("v-debounce directive requires a function as its value");
return;
}
// 默认防抖延迟为 300ms或使用传递的延迟值
const delay = Number(arg) || 300;
const debouncedFunction = debounce(value, delay);
// 事件处理器
const handler = (event) => {
debouncedFunction(event.target.value);
};
// 添加输入事件监听
el.addEventListener("input", handler);
// 保存销毁函数
el.$destroyDebounce = () => el.removeEventListener("input", handler);
},
unmounted(el) {
// 清理事件监听
if (el.$destroyDebounce) {
el.$destroyDebounce();
}
},
};
function debounce(func, delay) {
let timer;
return function (...args) {
clearTimeout(timer);
timer = setTimeout(() => func.apply(this, args), delay);
};
}

@ -0,0 +1,27 @@
/*
* @Author: qinzhenpen qzp1807@126.com
* @Date: 2024-08-21 13:43:25
* @LastEditors: qinzhenpen qzp1807@126.com
* @LastEditTime: 2024-08-21 13:43:48
* @FilePath: \vue3\src\directive\common\lazy.js
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
*/
export default {
mounted(el, binding) {
const loadIframe = () => {
const iframeSrc = binding.value;
el.src = iframeSrc;
};
const observer = new IntersectionObserver((entries) => {
entries.forEach((entry) => {
if (entry.isIntersecting) {
loadIframe();
observer.unobserve(el);
}
});
});
observer.observe(el);
},
};

@ -1,9 +1,21 @@
/*
* @Author: qinzhenpen qzp1807@126.com
* @Date: 2024-07-15 15:44:46
* @LastEditors: qinzhenpen qzp1807@126.com
* @LastEditTime: 2024-08-21 13:44:40
* @FilePath: \vue3\src\directive\index.js
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
*/
import hasRole from './permission/hasRole'
import hasPermi from './permission/hasPermi'
import copyText from './common/copyText'
import debounce from './common/debounce'
import lazy from './common/lazy'
export default function directive(app){
app.directive('hasRole', hasRole)
app.directive('hasPermi', hasPermi)
app.directive('copyText', copyText)
app.directive('debounce', debounce)
app.directive('lazy', lazy)
}

@ -1,3 +1,11 @@
/*
* @Author: qinzhenpen qzp1807@126.com
* @Date: 2024-08-16 17:56:32
* @LastEditors: qinzhenpen qzp1807@126.com
* @LastEditTime: 2024-08-21 13:48:30
* @FilePath: \vue3\src\permission.js
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
*/
import router from './router'
import { ElMessage } from 'element-plus'
import NProgress from 'nprogress'

@ -66,7 +66,7 @@ export const constantRoutes = [
path: "/index",
component: () => import("@/views/index"),
name: "Index",
meta: { title: "首页", icon: "dashboard", affix: true },
meta: { title: "首页", icon: "首页", affix: true },
},
],
},
@ -96,7 +96,7 @@ export const dynamicRoutes = [
path: "/digitalMarketTech",
component: () => import("@/views/digitalMarketTech/index"),
name: "digitalMarketTech",
meta: { title: "数字营销技术", icon: "monitor2", affix: true },
meta: { title: "数字营销技术", icon: "数据浏览", affix: true },
},
],
},

@ -0,0 +1,94 @@
import html2Canvas from 'html2canvas'
import JsPDF from 'jspdf'
var noTableHeight = 0 //table外的元素高度
export const htmlPdf = (title, html, fileList, type) => {
return new Promise((resolve, reject) => {
if (fileList) {
const pageHeight = Math.floor(277 * html.scrollWidth / 190) + 20 // 计算pdf高度
for (let i = 0; i < fileList.length; i++) { // 循环获取的元素
const multiple = Math.ceil((fileList[i].offsetTop + fileList[i].offsetHeight) / pageHeight) // 元素的高度
if (isSplit(fileList, i, multiple * pageHeight)) { // 计算是否超出一页
var _H = '' // 向pdf插入空白块的内容高度
if (fileList[i].localName !== 'tr') { // 判断是不是表格里的内容
_H = multiple * pageHeight - (fileList[i].offsetTop + fileList[i].offsetHeight)
} else {
_H = multiple * pageHeight - (fileList[i].offsetTop + fileList[i].offsetHeight + noTableHeight) + 20
}
var newNode = getFooterElement(_H) // 向pdf插入空白块的内容
const divParent = fileList[i].parentNode // 获取该div的父节点
const next = fileList[i].nextSibling // 获取div的下一个兄弟节点
// 判断兄弟节点是否存在
if (next) {
// 存在则将新节点插入到div的下一个兄弟节点之前即div之后
divParent.insertBefore(newNode, next)
} else {
// 否则向节点添加最后一个子节点
divParent.appendChild(newNode)
}
}
}
}
html2Canvas(html, {
allowTaint: false,
taintTest: false,
logging: false,
useCORS: true,
dpi: window.devicePixelRatio * 1,
scale: 1 // 按比例增加分辨率
}).then(canvas => {
var pdf = new JsPDF('l', 'mm', 'a4') // A4纸横向或纵向
var ctx = canvas.getContext('2d')
var a4w = type ? 277 : 190; var a4h = type ? 190 : 277 // A4大小
var imgHeight = Math.floor(a4h * canvas.width / a4w) // 按A4显示比例换算一页图像的像素高度
var renderedHeight = 0
while (renderedHeight < canvas.height) {
var page = document.createElement('canvas')
page.width = canvas.width
page.height = Math.min(imgHeight, canvas.height - renderedHeight)// 可能内容不足一页
// 用getImageData剪裁指定区域并画到前面创建的canvas对象中
page.getContext('2d').putImageData(ctx.getImageData(0, renderedHeight, canvas.width, Math.min(imgHeight, canvas.height - renderedHeight)), 0, 0)
pdf.addImage(page.toDataURL('image/jpeg', 1.0), 'JPEG', 10, 10, a4w, Math.min(a4h, a4w * page.height / page.width)) // 添加图像到页面
renderedHeight += imgHeight
if (renderedHeight < canvas.height) {
pdf.addPage()// 如果后面还有内容,添加一个空页
}
}
// 返回Blob对象而不是直接下载文件
const pdfBlob = pdf.output('blob');
resolve(pdfBlob);
}).catch(error => {
reject(error);
});
});
}
// pdf截断需要一个空白位置来补充
const getFooterElement = (remainingHeight, fillingHeight = 0) => {
const newNode = document.createElement('div')
newNode.style.background = '#ffffff'
newNode.style.width = 'calc(100% + 8px)'
newNode.style.marginLeft = '-4px'
newNode.style.marginBottom = '0px'
newNode.classList.add('divRemove')
newNode.style.height = (remainingHeight + fillingHeight) + 'px'
return newNode
}
const isSplit = (nodes, index, pageHeight) => {
if (nodes[index].localName !== 'tr') { // 判断元素是不是tr
noTableHeight += nodes[index].clientHeight
}
if (nodes[index].localName !== 'tr') {
return nodes[index].offsetTop + nodes[index].offsetHeight < pageHeight && nodes[index + 1] && nodes[index + 1].offsetTop + nodes[index + 1].offsetHeight > pageHeight
} else {
return nodes[index].offsetTop + nodes[index].offsetHeight + noTableHeight < pageHeight && nodes[index + 1] && nodes[index + 1].offsetTop + nodes[index + 1].offsetHeight + noTableHeight > pageHeight
}
}

@ -1,36 +1,22 @@
<template>
<div>
<el-dialog
title="任务知识导入"
style="width: 1108px; height: 798px"
custom-class="dialogClass"
:show-close="false"
class="dialog"
:title="title"
style="width: 1308px; height: 838px"
custom-class="dialog"
v-model="props.showModel"
:close-on-click-modal="false"
:before-close="close"
>
<template #header="{ titleId, titleClass }">
<div class="my-header">
<span :id="titleId" :class="titleClass">任务知识导入</span>
<img
class="gbImg"
src="@/assets/images/关闭.png"
@click="close"
alt=""
/>
</div>
<img class="xtImg" src="@/assets/images/线条.png" alt="" />
</template>
<div
class="diaMain"
style="
color: #fff;
margin-top: -35px;
padding: 10px;
padding-left: 20px;
"
>
<el-scrollbar height="650px">
<slot name="content"></slot>
<el-scrollbar height="730px">
<slot name="content" class="main"></slot>
</el-scrollbar>
</div>
<!-- <template #footer>
@ -75,39 +61,52 @@ const submit = () => {
};
</script>
<style lang="scss" scoped>
::v-deep .el-dialog {
background: url("@/assets/images/弹框@2x.png") !important;
background-size: 1108px 798px !important;
</style>
<style lang="scss">
.diaMain{
img{
max-height: 1200px;
max-width: 1200px;
}
p{
font-size: 15px;
}
}
.dialog {
border-radius: 12px;
.el-dialog__header {
padding: 5px 0px;
margin-right: 5px !important;
.gbImg {
cursor: pointer;
margin-top: 3px;
// margin-left: -30px;
width: 51px;
height: 35px;
background-size: 100% 100%;
background: url("@/assets/images/szjj/弹窗标题.png") !important;
background-size: 100% 100% !important;
margin-right: 0 !important;
span {
font-size: 14px;
font-weight: 400;
color: #ffffff;
}
}
.xtImg {
margin-left: 18px;
width: 530px;
.el-dialog__headerbtn {
top: 8px !important;
background: url("@/assets/images/szjj/关闭2.png") no-repeat;
background-size: 100% 100% !important;
width: 16px;
height: 16px;
margin-right: 15px;
margin-top: 7px;
}
}
.my-header {
display: flex;
flex-direction: row;
justify-content: space-between;
gap: 16px;
text-align: center;
margin-right: 9px;
margin-bottom: 0;
span {
color: #ffffff;
padding: 38px 20px 0;
margin-top: 10px;
margin-left: 20px;
.el-dialog__headerbtn i {
content: "1";
font-size: 13px;
visibility: hidden;
}
.el-dialog__footer {
text-align: center;
}
.tj{
color: #FFFFFF;
}
.cxks{
background: url('@/assets/images/szjj/重新开始.png') no-repeat;
}
}
</style>

@ -147,6 +147,7 @@ const handleChange2 = async (info) => {
formData.append("userId", JSON.parse(getUserInfo()).userId);
formData.append("module", "AI修图");
formData.append("count", 2);
try {
previewFile2.value = [];
const res = await uploadFile(formData);

@ -46,7 +46,7 @@
</template>
<script setup>
import { MdPreview, MdCatalog } from "md-editor-v3";
import { getToken,getUserInfo } from '@/utils/auth'
import { getToken, getUserInfo } from "@/utils/auth";
import useUserStore from "@/store/modules/user";
import "md-editor-v3/lib/preview.css";
import * as AI from "@/api/AI.js";
@ -99,9 +99,9 @@ const sendExample = (item) => {
input.value = item.text;
sendText();
};
const aiUserid=computed(()=>{
return getUserInfo() ? JSON.parse(getUserInfo()) : "";
})
const aiUserid = computed(() => {
return getUserInfo() ? JSON.parse(getUserInfo()) : "";
});
const sendText = async () => {
if (input.value.trim() === "" || isRequestPending.value) return;
if (input.value.trim() === "") return;
@ -178,7 +178,7 @@ const handleKeyDown = (event) => {
event.preventDefault();
sendText();
}
}
};
</script>
<style lang="scss" scoped>

@ -1,19 +1,31 @@
<!--
* @Author: qinzhenpen qzp1807@126.com
* @Date: 2024-08-19 09:10:19
* @LastEditors: qinzhenpen qzp1807@126.com
* @LastEditTime: 2024-08-21 16:24:11
* @FilePath: \vue3\src\views\digitalMarketTech\AIGCLargeModel\components\thirdPartyAIGC.vue
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
-->
<template>
<div class="app-containerO">
<iframe src="https://pidoutv.com/" frameborder="0"></iframe>
<div class="app-containerO" v-loading="loding">
<iframe v-lazy="'https://pidoutv.com/'" src="https://pidoutv.com/" frameborder="0"></iframe>
</div>
</template>
<script setup>
const { proxy } = getCurrentInstance();
const loding = ref(true);
onMounted(() => {
setTimeout(()=>{
loding.value = false;
},2000)
});
</script>
<style scoped lang="scss">
.app-containerO {
margin: 10px;
box-shadow: 0px 0px 13px 0px #0452C6;
border-radius: 10px;
width: 100%;
margin: 10px;
box-shadow: 0px 0px 13px 0px #0452c6;
border-radius: 10px;
width: 100%;
height: 740px;
}
iframe {

@ -1,17 +1,20 @@
<!--
* @Author: qinzhenpen qzp1807@126.com
* @Date: 2024-08-20 18:09:46
* @LastEditors: qinzhenpen qzp1807@126.com
* @LastEditTime: 2024-08-21 09:13:12
* @FilePath: \vue3\src\views\digitalMarketTech\AIGCLargeModel\index.vue
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
-->
<template>
<div class="app-top">
<el-button v-for="(item, index) in imgData" :key="index" :class="item.img" @click="clickIndx(index)">{{ item.text }}</el-button>
</div>
<component :is="page"></component>
<component v-if="page" :is="page"></component>
</template>
<script setup>
import AIVenison from "./components/AIVenisonDiagram.vue";
import AIWriting from "./components/AIWriting.vue";
import AIPicture from "./components/AIPicture.vue"
import AIVideo from "./components/AIVideo.vue"
import AIGC from "./components/thirdPartyAIGC.vue";
const pageData = [AIVenison, AIWriting, null, AIPicture, AIVideo, AIGC];
const page = ref(AIVenison);
const pageData = [defineAsyncComponent(() => import("./components/AIVenisonDiagram.vue")), defineAsyncComponent(() => import("./components/AIWriting.vue")), defineAsyncComponent(() => import("./components/AIPicture.vue")), defineAsyncComponent(() => import("./components/AIVideo.vue")), defineAsyncComponent(() => import("./components/thirdPartyAIGC.vue"))];
const page = ref(pageData[0]);
const clickIndx = (index) => {
page.value = pageData[index];
};
@ -24,10 +27,6 @@ const imgData = [
text: "AI写作",
img: "wz",
},
{
text: "AI标题",
img: "bt",
},
{
text: "AI修图",
img: "xt",
@ -36,6 +35,10 @@ const imgData = [
text: "AI视频",
img: "sp",
},
{
text: "第三方AIGC大模型",
img: "dmx",
},
];
</script>

@ -1,9 +1,9 @@
<template>
<div class="app-container">
<div class="app-container2">
<div class="img-centent">
<div class="left" style=" width: 100%" >
<el-scrollbar height="650px" style="height:96%">
<el-scrollbar height="610px" style="height:94%">
<el-row>
<el-col :span="24">
<div class="title-back">
@ -108,9 +108,9 @@
</div>
</div>
</el-scrollbar>
<div class="dialog-footer">
<el-button type="primary" round plain size="large" @click="submitTask" >提交任务</el-button>
<el-button type="primary" round plain size="large" @click="reset"></el-button>
<div class="dialog-footer" style="margin-top:10px">
<el-button type="primary" class="tj" plain size="large" @click="submitTask" >提交任务</el-button>
<el-button type="primary" class="cxks" plain size="large" @click="reset"></el-button>
</div>
</div>
<div class="Case">
@ -365,8 +365,8 @@ dialogShowbtn()
// }
.Case {
position: absolute;
top: 150px;
right: 15px;
top: 180px;
right: 40px;
width: 216px;
padding-left: 60px;
span{

@ -1,13 +1,13 @@
<template>
<div class="app-container">
<div class="app-container2">
<div class="Naturallanguageprocessing">
<div class="left">
<el-scrollbar height="650px" style="height: 93%;">
<el-scrollbar height="620px" style="height: 93%;">
<el-row>
<el-col :span="24">
<div class="TaskBackground">
<span>任务背景</span>
<span style="color:#000000;">任务背景</span>
</div>
</el-col>
</el-row>
@ -169,8 +169,8 @@
</div>
</el-scrollbar>
<div class="dialog-footer">
<el-button @click="submit"></el-button>
<el-button type="primary" @click="restart"></el-button>
<el-button @click="submit" class="tj">提交任务</el-button>
<el-button type="primary" class="tj" @click="restart"></el-button>
</div>
</div>
<div class="right">
@ -526,8 +526,8 @@ onBeforeUnmount(()=>{
}
.right {
position: absolute;
top: 150px;
right: 15px;
top: 180px;
right: 41px;
width: 216px;
padding-left: 60px;
span {
@ -670,4 +670,7 @@ onBeforeUnmount(()=>{
.dialog-footer{
margin-top: 5px;
}
.tj{
--el-button-hover-text-color:#000000;
}
</style>

@ -1,10 +1,10 @@
<template>
<div class="app-container">
<div class="app-container2">
<div class="Robot-learning">
<div class="left">
<div class="gdialog">
<el-scrollbar height="650px" style="height: 93%;">
<el-scrollbar height="620px" style="height: 93%;">
<el-row>
<el-col :span="24">
<div class="TaskBackground">
@ -163,8 +163,8 @@
</p>
</el-scrollbar>
<div class="dialog-footer" style="margin-top: 7px;">
<el-button @click="submit"></el-button>
<el-button type="primary" @click="restart"></el-button>
<el-button class="tj" @click="submit"></el-button>
<el-button class="tj" type="primary" @click="restart"></el-button>
</div>
</div>
@ -632,8 +632,8 @@ onBeforeUnmount(() => {
}
.right {
position: absolute;
top: 150px;
right: 15px;
top: 180px;
right: 41px;
width: 216px;
padding-left: 60px;
span {
@ -875,4 +875,7 @@ onBeforeUnmount(() => {
}
}
}
.tj{
--el-button-hover-text-color:#000000;
}
</style>

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save