2023-11-13-dist

This commit is contained in:
X1627315083
2023-11-13 17:33:41 +08:00
parent 6cad540fbb
commit e3a2f8d25d
35 changed files with 433 additions and 184 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

1
dist/css/945.8e7d181e.css vendored Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

2
dist/index.html vendored
View File

@@ -1 +1 @@
<!doctype html><html lang=""><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" href="/favicon.ico"><title>AiDA</title><link rel="stylesheet" href="./css/googleapis.css"><link rel="stylesheet" href="./css/roboto.css"><script defer="defer" src="/js/chunk-vendors.ac33c5f3.js"></script><script defer="defer" src="/js/app.3705ca65.js"></script><link href="/css/chunk-vendors.5e9dbdc9.css" rel="stylesheet"><link href="/css/app.6fa284b2.css" rel="stylesheet"></head><body><script src="./js/color-thief.js"></script><noscript><strong>We're sorry but aida doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div></body></html> <!doctype html><html lang=""><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" href="/favicon.ico"><title>AiDA</title><link rel="stylesheet" href="./css/googleapis.css"><link rel="stylesheet" href="./css/roboto.css"><script defer="defer" src="/js/chunk-vendors.ac33c5f3.js"></script><script defer="defer" src="/js/app.bb3d2003.js"></script><link href="/css/chunk-vendors.5e9dbdc9.css" rel="stylesheet"><link href="/css/app.6fa284b2.css" rel="stylesheet"></head><body><script src="./js/color-thief.js"></script><noscript><strong>We're sorry but aida doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div></body></html>

File diff suppressed because one or more lines are too long

1
dist/js/586.bdf1bd31.js vendored Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

1
dist/js/972.e752e8bc.js vendored Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

1
dist/js/app.bb3d2003.js vendored Normal file

File diff suppressed because one or more lines are too long

View File

@@ -771,22 +771,27 @@ export default defineComponent({
return return
} }
let DesignDetailEnd = this.$refs.DesignDetailEnd let DesignDetailEnd = this.$refs.DesignDetailEnd
let pattern = /^\d{2}-\d{4}$/;
if(pattern.test(this.tcxColor)){
Https.axiosGet(Https.httpUrls.getRgbByTcx + '?tcx=' + this.tcxColor).then((rv) =>{
if(rv && rv.name){
// let hex = this.rgbaToHex([color.r,color.g,color.b])
let hex = this.rgbaToHex([rv.r,rv.g,rv.b,rv.a? rv.a :1])
this.reviewColor = rv?.r + ''? {rgba:{r:rv.r,g:rv.g,b:rv.b,a:1},hex:hex} : {hex:''}
this.selectColor = this.reviewColor
DesignDetailEnd.colorList[DesignDetailEnd.selectIndex] = {r:rv.r, g:rv.g, b:rv.b}
this.pantongName = rv.name
let colorList =DesignDetailEnd.colorList.filter((v) => Object.keys(v).length)
this.setColorboardList(colorList)
this.getColorBg = true
}else{
message.warning(this.t('DesignDetailAlter.jsContent6'))
}
})
}else{
message.warning(this.t('ColorboardUpload.jsContent5'))
}
Https.axiosGet(Https.httpUrls.getRgbByTcx + '?tcx=' + this.tcxColor).then((rv) =>{
if(rv && rv.name){
// let hex = this.rgbaToHex([color.r,color.g,color.b])
let hex = this.rgbaToHex([rv.r,rv.g,rv.b,rv.a? rv.a :1])
this.reviewColor = rv?.r + ''? {rgba:{r:rv.r,g:rv.g,b:rv.b,a:1},hex:hex} : {hex:''}
this.selectColor = this.reviewColor
DesignDetailEnd.colorList[DesignDetailEnd.selectIndex] = {r:rv.r, g:rv.g, b:rv.b}
this.pantongName = rv.name
let colorList =DesignDetailEnd.colorList.filter((v) => Object.keys(v).length)
this.setColorboardList(colorList)
this.getColorBg = true
}else{
message.warning(this.t('DesignDetailAlter.jsContent6'))
}
})
}, },
//查询颜色的潘通值和txc //查询颜色的潘通值和txc
getPantongName(v) { getPantongName(v) {

View File

@@ -272,21 +272,27 @@ export default defineComponent({
if(!this.tcxColor){ if(!this.tcxColor){
return return
} }
Https.axiosGet(Https.httpUrls.getRgbByTcx + '?tcx=' + this.tcxColor).then((rv) =>{ let pattern = /^\d{2}-\d{4}$/;
if(rv && rv.name){ if(pattern.test(this.tcxColor)){
// let hex = this.rgbaToHex([color.r,color.g,color.b]) Https.axiosGet(Https.httpUrls.getRgbByTcx + '?tcx=' + this.tcxColor).then((rv) =>{
let hex = this.rgbaToHex([rv.r,rv.g,rv.b,rv.a?rv.a:1]) if(rv && rv.name){
this.reviewColor = rv?.r + ''? {rgba:{r:rv.r,g:rv.g,b:rv.b,a:1},hex:hex} : {hex:''} // let hex = this.rgbaToHex([color.r,color.g,color.b])
this.selectColor = this.reviewColor let hex = this.rgbaToHex([rv.r,rv.g,rv.b,rv.a?rv.a:1])
this.colorList[this.selectIndex] = {r:rv.r, g:rv.g, b:rv.b} this.reviewColor = rv?.r + ''? {rgba:{r:rv.r,g:rv.g,b:rv.b,a:1},hex:hex} : {hex:''}
this.pantongName = rv.name this.selectColor = this.reviewColor
let colorList =this.colorList.filter((v) => Object.keys(v).length) this.colorList[this.selectIndex] = {r:rv.r, g:rv.g, b:rv.b}
this.setColorboardList(colorList) this.pantongName = rv.name
this.getColorBg = true let colorList =this.colorList.filter((v) => Object.keys(v).length)
}else{ this.setColorboardList(colorList)
message.warning(this.t('ColorboardUpload.jsContent2')) this.getColorBg = true
} }else{
}) message.warning(this.t('ColorboardUpload.jsContent2'))
}
})
}else{
message.warning(this.t('ColorboardUpload.jsContent5'))
}
}, },
//清除当前的颜色 //清除当前的颜色
@@ -334,6 +340,7 @@ export default defineComponent({
(rv) => { (rv) => {
if(rv){ if(rv){
colorSort = rv.ratio colorSort = rv.ratio
console.log(rv);
} }
} }
) )

View File

@@ -188,15 +188,15 @@ export default defineComponent({
modalWarning: null, modalWarning: null,
isLanguage: false, isLanguage: false,
language:[ language:[
{name:'English',value:'en'}, {name:'English',value:'ENGLISH'},
{name:'中文',value:'zh'}, {name:'中文',value:'CHINESE_SIMPLIFIED'},
{name:'한국인',value:'ko'}, {name:'한국인',value:'KOREAN'},
{name:'にほんご',value:'ja'}, {name:'にほんご',value:'JAPANESE'},
{name:'Русский',value:'ru'}, {name:'Русский',value:'RUSSIAN'},
{name:'Français',value:'fr'}, {name:'Français',value:'FRENCH'},
{name:'แบบไทย',value:'th'}, {name:'แบบไทย',value:'THAI'},
{name:'Tiếng Việt',value:'vi'}, {name:'Tiếng Việt',value:'VIETNAMESE'},
{name:'Italiano',value:'it'}, {name:'Italiano',value:'ITALIAN'},
] ]
}; };
}, },
@@ -208,7 +208,6 @@ export default defineComponent({
this.accountIsLogin(this.userInfo); this.accountIsLogin(this.userInfo);
} }
this.isHaveBindEmail = this.userInfo?.email ? true : false; this.isHaveBindEmail = this.userInfo?.email ? true : false;
this.getLang()
this.operateClick(); this.operateClick();
document.addEventListener("click", this.operateClick); document.addEventListener("click", this.operateClick);
}, },
@@ -374,27 +373,29 @@ export default defineComponent({
}, },
//获取当前语言 //获取当前语言
getLang(){ getLang(){
let data = {} let data
// Https.axiosPost(Https.httpUrls.getUserLanguage, data).then( Https.axiosPost(Https.httpUrls.getUserLanguage, data).then(
// (rv) => { (rv) => {
// if (rv) { if (rv) {
// this.locale = rv this.locale = v
// } console.log(rv);
// } }
// ); }
);
}, },
setLang(v){ setLang(v){
let data = { let data = {
language:v language:v
} }
// Https.axiosPost(Https.httpUrls.changeUserLanguage, data).then( Https.axiosPost(Https.httpUrls.changeUserLanguage, data).then(
// (rv) => { (rv) => {
// if (rv) { if (rv) {
// console.log(rv); let token = rv;
// this.getLang() setCookie("token", token);
// } this.getLang(v)
// } }
// ); }
);
}, },
setLocale(v){ setLocale(v){

View File

@@ -547,28 +547,27 @@ export default defineComponent({
return return
} }
} }
// this.loadingShow = true this.loadingShow = true
// Https.axiosPost(Https.httpUrls.sketchAndPrintGenerate, data).then( Https.axiosPost(Https.httpUrls.sketchAndPrintGenerate, data).then(
// (rv) => { (rv) => {
// if(rv){ if(rv){
// this.generateList = [] this.generateList = []
// let arr let arr
// rv.generatedCollectionItems.forEach((v:any,index:number)=>{ rv.generatedCollectionItems.forEach((v:any,index:number)=>{
// arr = { arr = {
// id:v.generateItemId, id:v.generateItemId,
// imgUrl:v.generateItemUrl, imgUrl:v.generateItemUrl,
// id_:GO.id++, id_:GO.id++,
// like:rv.generatedCollectionItems[index].isLiked like:rv.generatedCollectionItems[index].isLiked
}
// } this.generateList.push(arr)
// this.generateList.push(arr) this.loadingShow = false
// this.loadingShow = false })
// }) }
// } }
// } ).catch(res=>{
// ).catch(res=>{ this.loadingShow = false
// this.loadingShow = false });
// });
}, },
randomRange(min:any, max:any, num:any) { // min最小值max最大值 num排除的值 randomRange(min:any, max:any, num:any) { // min最小值max最大值 num排除的值
let index = Math.floor(Math.random() * (max - min)) + min; let index = Math.floor(Math.random() * (max - min)) + min;

View File

@@ -130,7 +130,7 @@
</template> </template>
<script lang="ts"> <script lang="ts">
import { defineComponent,ref,createVNode} from 'vue' import { defineComponent,ref,createVNode,nextTick} from 'vue'
import { Https } from "@/tool/https"; import { Https } from "@/tool/https";
import {dataURLtoFile,base64toFile} from "@/tool/util" import {dataURLtoFile,base64toFile} from "@/tool/util"
import { getCookie } from "@/tool/cookie"; import { getCookie } from "@/tool/cookie";
@@ -255,44 +255,49 @@ export default defineComponent({
this.option.img = this.printObject.url this.option.img = this.printObject.url
setTimeout(()=>{ setTimeout(()=>{
let imgbox:any = this.$refs.imgbox nextTick().then(()=>{
let image:any = new Image()
image.src = this.option.img
let imgbox:any = this.$refs.imgbox
console.log(imgbox);
let imgBoxSize = imgbox.getElementsByClassName('cropper-crop-box')[0]
let imgBoxSizeBG = imgbox.getElementsByClassName('cropper-view-box')[0]
let divTop:any = document.createElement('div');
let divBottom:any = document.createElement('div');
let divCenter:any = document.createElement('div');
if(imgbox.getElementsByClassName('cropper-view-box-Bg').length >= 1){
}else{
divTop.classList.add('cropper-view-box-Bg')
divBottom.classList.add('cropper-view-box-Bg')
divCenter.classList.add('cropper-view-box-Bg')
divTop.classList.add('cropper-view-box-Top')
divBottom.classList.add('cropper-view-box-Bottom')
divCenter.classList.add('cropper-view-box-Center')
let imgBoxSize = imgbox.getElementsByClassName('cropper-crop-box')[0] imgBoxSizeBG.appendChild(divTop)
let imgBoxSizeBG = imgbox.getElementsByClassName('cropper-view-box')[0] imgBoxSizeBG.appendChild(divBottom)
let divTop:any = document.createElement('div'); imgBoxSizeBG.appendChild(divCenter)
let divBottom:any = document.createElement('div'); // imgBoxSizeBG.appendChild(div)
let divCenter:any = document.createElement('div');
if(imgbox.getElementsByClassName('cropper-view-box-Bg').length >= 1){
}else{
divTop.classList.add('cropper-view-box-Bg')
divBottom.classList.add('cropper-view-box-Bg')
divCenter.classList.add('cropper-view-box-Bg')
divTop.classList.add('cropper-view-box-Top')
divBottom.classList.add('cropper-view-box-Bottom')
divCenter.classList.add('cropper-view-box-Center')
imgBoxSizeBG.appendChild(divTop) }
imgBoxSizeBG.appendChild(divBottom) // imgBoxSize.style.backgroundImage = 'url('+require('@assets/images/library/lemaleBG.png')')'
imgBoxSizeBG.appendChild(divCenter)
// imgBoxSizeBG.appendChild(div)
} let cropper:any = this.$refs.cropper
// imgBoxSize.style.backgroundImage = 'url('+require('@assets/images/library/lemaleBG.png')')' cropper.cropH = cropper.scale*cropper.trueHeight
cropper.cropW = cropper.cropH/2.125
cropper.cropOffsertX = cropper.getImgAxis().x1+(cropper.scale*cropper.trueWidth/2-cropper.cropW/2)
cropper.cropOffsertY = cropper.getImgAxis().y1
imgBoxSize.addEventListener('mousemove',this.startMove)
this.setImageSize()
this.getDefaultPointList(this.imgBox,' ')
})
let cropper:any = this.$refs.cropper
cropper.cropH = cropper.scale*cropper.trueHeight
cropper.cropW = cropper.cropH/2.125
cropper.cropOffsertX = cropper.getImgAxis().x1+(cropper.scale*cropper.trueWidth/2-cropper.cropW/2)
cropper.cropOffsertY = cropper.getImgAxis().y1
imgBoxSize.addEventListener('mousemove',this.startMove)
this.setImageSize()
this.getDefaultPointList(this.imgBox,' ')
},300) },300)
}, },
realTime(data:any) { realTime(data:any) {
clearTimeout(this.cropperTime) clearTimeout(this.cropperTime)
this.cropperTime = setTimeout(()=>{ this.cropperTime = setTimeout(()=>{
this.setImageSize() this.setImageSize()
},1000) },1000)

View File

@@ -194,6 +194,8 @@ export default {
jsContent2:"找不到这个TCX的颜色", jsContent2:"找不到这个TCX的颜色",
jsContent3:"您只能上传图片文件!", jsContent3:"您只能上传图片文件!",
jsContent4:'图片必须小于2MB', jsContent4:'图片必须小于2MB',
jsContent5:"请输入正确的TCX值",
}, },
MoodboardUpload:{ MoodboardUpload:{
Upload:'上传', Upload:'上传',

View File

@@ -196,6 +196,7 @@ export default {
jsContent2:"Can't find the TCX color", jsContent2:"Can't find the TCX color",
jsContent3:"You can only upload Image file!", jsContent3:"You can only upload Image file!",
jsContent4:'Image must smaller than 2MB!', jsContent4:'Image must smaller than 2MB!',
jsContent5:"Please enter the correct TCX value",
}, },
MoodboardUpload:{ MoodboardUpload:{
Upload:'Upload', Upload:'Upload',

View File

@@ -197,6 +197,7 @@ export default {
jsContent2:"Je ne trouve pas la couleur TCX", jsContent2:"Je ne trouve pas la couleur TCX",
jsContent3:"Vous pouvez uniquement télécharger un fichier image!", jsContent3:"Vous pouvez uniquement télécharger un fichier image!",
jsContent4:"L'image doit être inférieure à 2 Mo!", jsContent4:"L'image doit être inférieure à 2 Mo!",
jsContent5:"Veuillez saisir la valeur TCX correcte",
}, },
MoodboardUpload:{ MoodboardUpload:{
Upload:'Télécharger', Upload:'Télécharger',

View File

@@ -33,39 +33,39 @@ import itLocale from './it'
// 语言配置整合 // 语言配置整合
const messages = { const messages = {
'en':{ 'ENGLISH':{
...enLocale, ...enLocale,
...elementEnLocale ...elementEnLocale
}, },
'zh':{ 'CHINESE_SIMPLIFIED':{
...zhLocale, ...zhLocale,
...elementZhLocale ...elementZhLocale
}, },
'ko':{ 'KOREAN':{
...krLocale, ...krLocale,
...elementKrLocale ...elementKrLocale
}, },
'ja':{ 'JAPANESE':{
...jaLocale, ...jaLocale,
...elementJaLocale ...elementJaLocale
}, },
'ru':{ 'RUSSIAN':{
...ruLocale, ...ruLocale,
...elementRuLocale ...elementRuLocale
}, },
'fr':{ 'FRENCH':{
...frLocale, ...frLocale,
...elementFrLocale ...elementFrLocale
}, },
'th':{ 'THAI':{
...thLocale, ...thLocale,
...elementThLocale ...elementThLocale
}, },
'vi':{ 'VIETNAMESE':{
...vnLocale, ...vnLocale,
...elementVnLocale ...elementVnLocale
}, },
'it':{ 'ITALIAN':{
...itLocale, ...itLocale,
...elementItLocale ...elementItLocale
}, },
@@ -75,7 +75,7 @@ const messages = {
const i18n = createI18n({ const i18n = createI18n({
legacy: false, legacy: false,
globalInjection:true, // 全局模式,可以直接使用 $t globalInjection:true, // 全局模式,可以直接使用 $t
locale: 'en', locale: 'ENGLISH',
messages: messages messages: messages
}) })

View File

@@ -196,6 +196,7 @@ export default {
jsContent2:"Impossibile trovare il colore TCX", jsContent2:"Impossibile trovare il colore TCX",
jsContent3:"Puoi caricare solo il file immagine!", jsContent3:"Puoi caricare solo il file immagine!",
jsContent4:"L'immagine deve essere inferiore a 2 MB!", jsContent4:"L'immagine deve essere inferiore a 2 MB!",
jsContent5:"Inserisci il valore TCX corretto",
}, },
MoodboardUpload:{ MoodboardUpload:{
Upload:'Caricamento', Upload:'Caricamento',

View File

@@ -196,6 +196,7 @@ export default {
jsContent2:"TCXの色が見つからない", jsContent2:"TCXの色が見つからない",
jsContent3:"画像ファイルのみアップロードできます!", jsContent3:"画像ファイルのみアップロードできます!",
jsContent4:'画像は 2MB 未満である必要があります!', jsContent4:'画像は 2MB 未満である必要があります!',
jsContent5:'正しい TCX 値を入力してください。」',
}, },
MoodboardUpload:{ MoodboardUpload:{
Upload:'アップロード', Upload:'アップロード',

View File

@@ -196,6 +196,7 @@ export default {
jsContent2:"TCX 색상을 찾을 수 없습니다", jsContent2:"TCX 색상을 찾을 수 없습니다",
jsContent3:"이미지 파일만 업로드할 수 있습니다!", jsContent3:"이미지 파일만 업로드할 수 있습니다!",
jsContent4:'이미지는 2MB보다 작아야 합니다!', jsContent4:'이미지는 2MB보다 작아야 합니다!',
jsContent5:'올바른 TCX 값을 입력하세요"',
}, },
MoodboardUpload:{ MoodboardUpload:{
Upload:'업로드', Upload:'업로드',

View File

@@ -196,6 +196,7 @@ export default {
jsContent2:"Не могу найти цвет TCX", jsContent2:"Не могу найти цвет TCX",
jsContent3:"Вы можете загрузить только файл изображения!", jsContent3:"Вы можете загрузить только файл изображения!",
jsContent4:'Изображение должно быть меньше 2 МБ!', jsContent4:'Изображение должно быть меньше 2 МБ!',
jsContent5:'Пожалуйста, введите правильное значение TCX',
}, },
MoodboardUpload:{ MoodboardUpload:{
Upload:'Загрузить', Upload:'Загрузить',

View File

@@ -194,6 +194,7 @@ export default {
jsContent2:"ไม่พบสี TCX", jsContent2:"ไม่พบสี TCX",
jsContent3:"คุณสามารถอัปโหลดได้เฉพาะไฟล์รูปภาพเท่านั้น!", jsContent3:"คุณสามารถอัปโหลดได้เฉพาะไฟล์รูปภาพเท่านั้น!",
jsContent4:'รูปภาพต้องมีขนาดเล็กกว่า 2MB!', jsContent4:'รูปภาพต้องมีขนาดเล็กกว่า 2MB!',
jsContent5:'โปรดป้อนค่า TCX ที่ถูกต้อง',
}, },
MoodboardUpload:{ MoodboardUpload:{
Upload:'อัปโหลด', Upload:'อัปโหลด',

View File

@@ -196,6 +196,7 @@ export default {
jsContent2:"Không tìm thấy màu TCX", jsContent2:"Không tìm thấy màu TCX",
jsContent3:"YBạn chỉ có thể tải lên tệp Hình ảnh!", jsContent3:"YBạn chỉ có thể tải lên tệp Hình ảnh!",
jsContent4:'Hình ảnh phải nhỏ hơn 2MB!', jsContent4:'Hình ảnh phải nhỏ hơn 2MB!',
jsContent5:"Vui lòng nhập giá trị TCX chính xác",
}, },
MoodboardUpload:{ MoodboardUpload:{
Upload:'Tải lên', Upload:'Tải lên',

View File

@@ -8,6 +8,7 @@ export default {
var max = obj?.max == undefined ? 5 : obj.max; var max = obj?.max == undefined ? 5 : obj.max;
var img = new Image(); var img = new Image();
img.src = url; img.src = url;
let arr:any = []
img.onload = () => { img.onload = () => {
const width = img.width; const width = img.width;
const height = img.height; const height = img.height;
@@ -40,10 +41,168 @@ export default {
ratio:parseInt(String((num/ (width * height) * 100).toFixed(6))) ratio:parseInt(String((num/ (width * height) * 100).toFixed(6)))
} }
ratio.push(rgb) ratio.push(rgb)
// console.log(ratio);
// console.log((num/ (width * height) * 100).toFixed(2)); // console.log((num/ (width * height) * 100).toFixed(2));
} }
for (let i = 0; i < data.data.length; i+=4) {
var r = data.data[i];
var g = data.data[i+1];
var b = data.data[i+2];
var a = data.data[i+3];
arr.push([r,g,b,a])
}
// interface Point {
// x: number;
// y: number;
// z: number;
// }
// interface Centroid extends Point {
// points: Point[];
// }
// // 计算两个点之间的欧氏距离
// function euclideanDistance(a: Point, b: Point): number {
// const dx = a.x - b.x;
// const dy = a.y - b.y;
// const dz = a.z - b.z;
// return Math.sqrt(dx * dx + dy * dy + dz * dz);
// }
// // 使用 K-means 算法获取主要的 RGB 值
// function getMainRGBValues(rgbData: number[][], k: number): number[][] {
// const points: Point[] = rgbData.map(rgb => ({
// x: rgb[0],
// y: rgb[1],
// z: rgb[2]
// }));
// // 随机选择初始聚类中心
// const centroids: Centroid[] = [];
// for (let i = 0; i < k; i++) {
// const randomPoint = points[Math.floor(Math.random() * points.length)];
// centroids.push({ ...randomPoint, points: [] });
// }
// let converged = false;
// while (!converged) {
// // 将每个点分配到最近的聚类中心
// points.forEach(point => {
// let minDistance = Infinity;
// let closestCentroid: Centroid | undefined;
// centroids.forEach(centroid => {
// const distance = euclideanDistance(point, centroid);
// if (distance < minDistance) {
// minDistance = distance;
// closestCentroid = centroid;
// }
// });
// if (closestCentroid) {
// closestCentroid.points.push(point);
// }
// });
// // 更新聚类中心的位置
// const newCentroids: Centroid[] = [];
// centroids.forEach(centroid => {
// const { points } = centroid;
// if (points.length > 0) {
// const sumX = points.reduce((acc, point) => acc + point.x, 0);
// const sumY = points.reduce((acc, point) => acc + point.y, 0);
// const sumZ = points.reduce((acc, point) => acc + point.z, 0);
// const newX = sumX / points.length;
// const newY = sumY / points.length;
// const newZ = sumZ / points.length;
// newCentroids.push({ x: newX, y: newY, z: newZ, points: [] });
// } else {
// newCentroids.push(centroid);
// }
// });
// // 检查聚类中心是否发生变化
// converged = JSON.stringify(centroids) === JSON.stringify(newCentroids);
// centroids.splice(0, centroids.length, ...newCentroids);
// }
// // 找到每个聚类的平均颜色值
// const mainRGBValues = centroids.map(centroid => [
// Math.round(centroid.x),
// Math.round(centroid.y),
// Math.round(centroid.z)
// ]);
// return mainRGBValues;
// }
// // 示例使用
// const rgbData: number[][] = [
// [255, 0, 0], // 红色
// [0, 255, 0], // 绿色
// [0, 0, 255], // 蓝色
// // 更多 RGB 数据...
// ];
// const k = 1; // 假设我们想要找到三个主要的 RGB 值
// const mainRGBValues = getMainRGBValues(rgbData, k);
// console.log(mainRGBValues); // 输出主要的 RGB 值
//获取颜色做多的值
// function findMostFrequent(arr:any) {
// let map:any = {};
// let maxCount = 0;
// let mostFrequent;
// for (let item of arr) {
// if (map[item] === undefined) {
// map[item] = 1;
// } else {
// map[item]++;
// }
// if (map[item] > maxCount) {
// maxCount = map[item];
// mostFrequent = item;
// }
// }
// return mostFrequent;
// }
// console.log(arr);
// console.log(findMostFrequent(arr));
resolve({ resolve({
width, width,
height, height,

View File

@@ -116,6 +116,8 @@ export const Https = {
queryClassification:`/api/classification/queryClassification`,//标签类别查询 queryClassification:`/api/classification/queryClassification`,//标签类别查询
saveOrUpdate:`/api/classification/saveOrUpdate`,//标签类别新增修改 saveOrUpdate:`/api/classification/saveOrUpdate`,//标签类别新增修改
classificationDelete:`/api/classification/delete`,//标签类别新增修改 classificationDelete:`/api/classification/delete`,//标签类别新增修改
relationLibrary:`/api/classification/relationLibrary`,//标签类别新增修改
batchUpdateLibraryName:'/api/library/batchUpdateLibraryName',//Library修改用户文件名 batchUpdateLibraryName:'/api/library/batchUpdateLibraryName',//Library修改用户文件名

View File

@@ -86,23 +86,22 @@
<div class="content_body_header_right"> <div class="content_body_header_right">
<div :class="['header_operate_item' , 'fontSize',selectImgList.length>0?'active':'']" @click="deleteBatchPic()">{{ $t('LibraryPage.Delete') }}</div> <div :class="['header_operate_item' , 'fontSize',selectImgList.length>0?'active':'']" @click="deleteBatchPic()">{{ $t('LibraryPage.Delete') }}</div>
<div :class="['header_operate_item' , 'fontSize',selectImgList.length>0?'active':'']" @click="showRenameModal('','batch')">{{ $t('LibraryPage.Rename') }}</div> <div :class="['header_operate_item' , 'fontSize',selectImgList.length>0?'active':'']" @click="showRenameModal('','batch')">{{ $t('LibraryPage.Rename') }}</div>
<div :class="['header_operate_item' , 'fontSize',selectImgList.length>0?'active':'']" @click="showRenameModal('','batch')">{{ $t('LibraryPage.Rename') }}</div>
</div> </div>
<div class="content_search_block"> <div class="content_search_block">
<input class="search_input" :placeholder="$t('LibraryPage.inputContent1')" v-model="searchPictureName" @keydown.enter="getLibraryList()"> <input class="search_input" :placeholder="$t('LibraryPage.inputContent1')" v-model="searchPictureName" @keydown.enter="getLibraryList()">
<a-cascader <a-cascader
@click.stop="dropdownVisibleChange" @click.stop="dropdownVisibleChange"
ref="cascader" ref="cascader"
v-model:value="value" v-model:value="value.labelValue"
style="width: 60%" style="width: 60%"
:field-names="{ label: 'classificationName', value: 'classificationName', children: 'childList'}" :field-names="{ label: 'classificationName', value: 'id', children: 'childList'}"
multiple multiple
@change="setLabel1" @change="setLabel1"
max-tag-count="responsive" max-tag-count="responsive"
:options="options" :options="options"
placeholder="Please select" placeholder="Please select"
:show-search="{ filter }" :show-search="{ filter }"
:open="labelOpen" :open="labelOpen.labelOpen"
dropdownClassName="libraryPageCascader" dropdownClassName="libraryPageCascader"
> >
</a-cascader> </a-cascader>
@@ -298,7 +297,23 @@
<div class="rename_form_content"> <div class="rename_form_content">
<input class="rename_form_input" :placeholder="$t('LibraryPage.inputContent3')" v-model="newPicName" @keydown.enter="confrimRename()"> <input class="rename_form_input" :placeholder="$t('LibraryPage.inputContent3')" v-model="newPicName" @keydown.enter="confrimRename()">
</div> </div>
<div class="rename_button_list"> <a-cascader
@click.stop="labelSearch"
ref="cascader"
v-model:value="value.editLabelValue"
style="width: 100%"
:field-names="{ label: 'classificationName', value: 'id', children: 'childList'}"
multiple
@change="setLabel1"
max-tag-count="responsive"
:options="options"
placeholder="Please select"
:show-search="{ filter }"
:open="labelOpen.editLabelOpen"
dropdownClassName="editLabel"
>
</a-cascader>
<div class="rename_button_list">
<div class="rename_button_item rename_cancel_button" @click="closeRenameModal()">{{ $t('LibraryPage.Cancel') }}</div> <div class="rename_button_item rename_cancel_button" @click="closeRenameModal()">{{ $t('LibraryPage.Cancel') }}</div>
<div class="rename_button_item rename_submit_button" @click="confrimRename()">{{ $t('LibraryPage.Sure') }}</div> <div class="rename_button_item rename_submit_button" @click="confrimRename()">{{ $t('LibraryPage.Sure') }}</div>
</div> </div>
@@ -404,48 +419,23 @@ export default defineComponent({
}) })
let {t} = useI18n() let {t} = useI18n()
const options = ref([ const options = ref([
{
label: 'Light',
value: 'light',
children: new Array(20)
.fill(null)
.map((_, index) => ({ label: `Number ${index}`, value: index })),
},
{
label: 'Bamboo',
value: 'bamboo',
children: [
{
label: 'Little',
value: 'little',
children: [
{
label: `'Toy Fish'`,
value: 'fish',
},
{
label: 'Toy Cards',
value: 'cards',
},
{
label: 'Toy Bird',
value: 'bird',
},
],
},
],
},
]); ]);
let type:any = { let type:any = {
selectCode:selectCode, selectCode:selectCode,
designType:designType designType:designType
} }
provide('type',type) provide('type',type)
let value = ref({
labelValue:[],
editLabelValue:[],
})
const filter: ShowSearchType['filter'] = (inputValue, path) => { const filter: ShowSearchType['filter'] = (inputValue, path) => {
return path.some(option => option.label.toLowerCase().indexOf(inputValue.toLowerCase()) > -1); return path.some(option => option.label.toLowerCase().indexOf(inputValue.toLowerCase()) > -1);
}; };
let labelOpen = ref(false) let labelOpen = ref({
labelOpen:false,
editLabelOpen:false,
})
return { return {
menuList, menuList,
selectImgList, selectImgList,
@@ -476,7 +466,7 @@ export default defineComponent({
generateList, generateList,
selectGenerateList, selectGenerateList,
printModel, printModel,
value: ref<string[]>([]), value,
options, options,
filter, filter,
t, t,
@@ -635,6 +625,8 @@ export default defineComponent({
closeRenameModal(){ closeRenameModal(){
this.renameVisivle= false; this.renameVisivle= false;
this.newPicName = '' this.newPicName = ''
this.value.editLabelValue = []
this.value.labelValue = []
}, },
//确定修改名称 //确定修改名称
@@ -644,28 +636,58 @@ export default defineComponent({
libraryName:this.newPicName, libraryName:this.newPicName,
timeZone:Intl.DateTimeFormat().resolvedOptions().timeZone, timeZone:Intl.DateTimeFormat().resolvedOptions().timeZone,
} }
Https.axiosPost(Https.httpUrls.batchUpdateLibraryName, data).then( // Https.axiosPost(Https.httpUrls.batchUpdateLibraryName, data).then(
// (rv: any) => {
// if(this.renameType ==='batch'){
// this.selectImgList = []
// }
// this.getLibraryList()
// this.closeRenameModal()
// }
// ).catch((res)=>{
// this.closeRenameModal()
// });
let labelArr:any = []
this.value.editLabelValue.forEach((item:any)=>{
labelArr.push(item[item.length-1])
})
let designType = this.selectCode == 'Sketchboard' || this.selectCode == 'MarketingSketch' ? this.designType : ''
let data2 = {
"classificationIdList": labelArr,
"classificationName": "",
"createTime": "",
"id": 0,
"libraryId": this.renameType === 'single' ? [this.selectSingleImg.id] : this.selectImgList,
"type": this.selectCode,
"updateTime": "",
"userId": 0
}
Https.axiosPost(Https.httpUrls.relationLibrary, data2).then(
(rv: any) => { (rv: any) => {
if(this.renameType ==='batch'){ console.log(rv);
this.selectImgList = []
}
this.getLibraryList() this.getLibraryList()
this.closeRenameModal() this.closeRenameModal()
} }
).catch((res)=>{ ).catch((res)=>{
this.closeRenameModal() this.closeRenameModal()
}); });
}, },
//打开修改名称弹窗 //打开修改名称弹窗
showRenameModal(data:any,type:any){ showRenameModal(data:any,type:any){
this.newPicName = ''
if(type =='batch' && !this.selectImgList.length){ //批量但未选中 if(type =='batch' && !this.selectImgList.length){ //批量但未选中
this.value.labelValue = []
this.newPicName = ''
return return
} }
if(type === 'single'){ if(type === 'single'){
this.selectSingleImg = data this.selectSingleImg = data
this.newPicName = data.name
} }
this.renameType = type this.renameType = type
this.labelOpen.labelOpen = false
this.renameVisivle = true this.renameVisivle = true
}, },
upLoad(){ upLoad(){
@@ -680,6 +702,7 @@ export default defineComponent({
}, },
//删除单个图片 //删除单个图片
deleteSinglePic(data:any,index:any){ deleteSinglePic(data:any,index:any){
this.labelOpen.labelOpen = false
let _this = this let _this = this
Modal.confirm({ Modal.confirm({
title: this.t('LibraryPage.jsContent1'), title: this.t('LibraryPage.jsContent1'),
@@ -817,8 +840,15 @@ export default defineComponent({
}); });
}, },
getLibraryList(){ getLibraryList(){
let labelArr:any = []
this.value.labelValue.forEach((item:any)=>{
labelArr.push(item[item.length-1])
})
console.log(labelArr);
let designType = this.selectCode == 'Sketchboard' || this.selectCode == 'MarketingSketch' ? this.designType : '' let designType = this.selectCode == 'Sketchboard' || this.selectCode == 'MarketingSketch' ? this.designType : ''
let data = { let data = {
classificationId:[],
level1Type:this.selectCode, level1Type:this.selectCode,
level2Type:designType, level2Type:designType,
page:this.currentPage, page:this.currentPage,
@@ -844,6 +874,7 @@ export default defineComponent({
...data.libraryModelPoint, ...data.libraryModelPoint,
url:data.url, url:data.url,
} }
this.labelOpen.labelOpen = false
this.placementClick(newData) this.placementClick(newData)
}, },
@@ -997,12 +1028,11 @@ export default defineComponent({
}, },
dropdownVisibleChange(){ dropdownVisibleChange(){
this.labelOpen = true this.labelOpen.labelOpen = true
document.addEventListener('click',this.setClick) document.addEventListener('click',this.setClick)
nextTick().then(()=>{ nextTick().then(()=>{
let cascader = document.getElementsByClassName('libraryPageCascader')[0] let cascader = document.getElementsByClassName('libraryPageCascader')[0]
let cascaderChild = cascader.children[0].children[0] let cascaderChild = cascader.children[0].children[0]
console.log(cascader.children,cascaderChild);
cascader.addEventListener('click',(event)=>{ cascader.addEventListener('click',(event)=>{
event.stopPropagation() event.stopPropagation()
}) })
@@ -1034,14 +1064,15 @@ export default defineComponent({
let myCascader:any = this.$refs.cascader let myCascader:any = this.$refs.cascader
}, },
setClick(){ setClick(){
this.labelOpen = false this.labelOpen.labelOpen = false
this.labelOpen.editLabelOpen = false
document.removeEventListener('click',this.setClick) document.removeEventListener('click',this.setClick)
}, },
removeClick(){ removeClick(){
}, },
addLabel(){ addLabel(){
let setLabel:any = this.$refs.setLabel let setLabel:any = this.$refs.setLabel
this.labelOpen = false this.labelOpen.labelOpen = false
setLabel.init('add',this.options) setLabel.init('add',this.options)
}, },
// removeLabel(){ // removeLabel(){
@@ -1049,7 +1080,20 @@ export default defineComponent({
// setLabel.init('remove') // setLabel.init('remove')
// this.labelOpen = false // this.labelOpen = false
// } // }
labelSearch(){
this.labelOpen.editLabelOpen = true
document.addEventListener('click',this.setClick)
nextTick().then(()=>{
let cascader = document.getElementsByClassName('editLabel')[0]
cascader.addEventListener('click',(event)=>{
event.stopPropagation()
})
console.log(this.value.editLabelValue);
})
},
getClass(){ getClass(){
let designType = this.selectCode == 'Sketchboard' || this.selectCode == 'MarketingSketch' ? this.designType : '' let designType = this.selectCode == 'Sketchboard' || this.selectCode == 'MarketingSketch' ? this.designType : ''
let data = { let data = {
@@ -1603,6 +1647,21 @@ export default defineComponent({
color: #FFFFFF; color: #FFFFFF;
} }
} }
.ant-select-allow-clear{
height: 4.6rem;
margin-top: 2rem;
.ant-select-selector{
.ant-select-selection-overflow{
.ant-select-selection-overflow-item{
.ant-select-selection-item{
.ant-select-selection-item-content{
line-height: 2.7;
}
}
}
}
}
}
} }

View File

@@ -503,11 +503,13 @@ export default defineComponent({
}, },
//获取当前语言 //获取当前语言
getLang(){ getLang(){
let data = {} let data ={}
Https.axiosPost(Https.httpUrls.getUserLanguage, data).then( Https.axiosPost(Https.httpUrls.getUserLanguage, data).then(
(rv: any) => { (rv: any) => {
if (rv) { if (rv) {
this.locale = rv this.locale = rv
console.log(rv);
} }
} }
); );