52 Commits

Author SHA1 Message Date
X1627315083@163.com
ae1d7245f4 Merge remote-tracking branch 'origin/dev_vite' into research 2026-04-08 09:25:56 +08:00
bb021ae9ac style: 文案修改 2026-03-25 10:12:45 +08:00
bfb4e128f5 Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2026-03-25 09:48:39 +08:00
2f9b33e4ca feat: transaction分页器显示总数据数量 2026-03-25 09:48:36 +08:00
X1627315083@163.com
48c37e0810 风格字段全部处理空情况 2026-03-23 17:22:57 +08:00
b869a82fae Merge branch 'StableVersion' of ssh://18.167.251.121:10002/aidlab/aida_front into StableVersion 2026-03-23 14:08:42 +08:00
e61a8e372d feat: Transaction Record页面totalamount改为所有数据总数 2026-03-23 13:59:17 +08:00
X1627315083@163.com
f5a74991c9 fix 2026-03-23 11:57:10 +08:00
X1627315083@163.com
e58e8540c9 fix 2026-03-23 10:41:16 +08:00
e75ed7684e Merge branch 'StableVersion' into dev_vite 2026-03-13 14:05:39 +08:00
918d71072b bugfix: 首尾帧模式上传图片转视频 2026-03-13 14:01:44 +08:00
X1627315083@163.com
242bc7a01d fix 2026-03-06 18:44:48 +08:00
X1627315083@163.com
02ad8a340a 用户身份默认值改为1 2026-03-05 17:33:50 +08:00
X1627315083@163.com
0c250a21b4 Merge remote-tracking branch 'origin/StableVersion' into dev_vite 2026-03-05 10:58:10 +08:00
X1627315083@163.com
f781060e7b fix 2026-03-05 10:55:54 +08:00
李志鹏
832c9101ab Merge branch 'StableVersion' of http://18.167.251.121:10003/aidlab/aida_front into StableVersion 2026-03-02 11:28:42 +08:00
李志鹏
c48e836f8e fix 2026-03-02 11:28:39 +08:00
李志鹏
6f0780ac2e Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite 2026-03-02 11:24:06 +08:00
李志鹏
5acb91e584 fix 2026-03-02 11:24:05 +08:00
X1627315083@163.com
f66ba9e6fa 修复design过程中切换其他页面在切换回来后like异常 2026-03-02 09:50:32 +08:00
7a90cb8db9 feat: 隐藏竞赛活动入口 2026-02-25 15:02:47 +08:00
dafe87fad8 feat: 竞赛页面活动页 2026-02-25 15:01:40 +08:00
c44747e2c2 feat: 竞赛页面地址 2026-02-25 14:48:47 +08:00
X1627315083@163.com
341c765c73 修复getMoudel后直接打开detail印花衣服没有类型我呢提 2026-02-25 13:36:49 +08:00
X1627315083@163.com
ed6cc294a5 注册页面可以根据输入的地址设置不同的语言 2026-02-24 17:27:13 +08:00
X1627315083@163.com
a77dc718f9 fix 2026-02-24 11:30:02 +08:00
X1627315083@163.com
86953a91a1 fix 2026-02-24 11:28:18 +08:00
X1627315083@163.com
b8f38db351 overall印花scale为字符串时候使用toFixed会报错 2026-02-24 11:27:43 +08:00
cabbb653bd Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2026-02-09 14:35:33 +08:00
99533c12b6 bugfix: 竞赛表单验证码输入 2026-02-09 11:52:31 +08:00
X1627315083@163.com
7fb7ffaced fix 2026-02-06 16:47:45 +08:00
X1627315083@163.com
59da67e4b4 Merge remote-tracking branch 'origin/StableVersion' into dev_vite 2026-02-06 16:46:37 +08:00
X1627315083@163.com
1428f191dd fix 2026-02-06 14:17:46 +08:00
李志鹏
13024cdd99 画布loading 2026-02-06 13:07:06 +08:00
李志鹏
fd85ea02c1 画布loading 2026-02-06 13:05:19 +08:00
李志鹏
c196ab6678 Merge branch 'dev_vite' of http://18.167.251.121:10003/aidlab/aida_front into dev_vite 2026-02-06 11:11:06 +08:00
李志鹏
c005b85c06 设置画布loading 2026-02-06 11:11:04 +08:00
李志鹏
b50dbbc246 去掉部件选取 2026-02-06 10:36:31 +08:00
X1627315083@163.com
01d09f4c34 修复overall印花和画布中印花scale不同 2026-02-05 17:38:27 +08:00
X1627315083@163.com
79c9a66296 Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2026-02-05 16:49:50 +08:00
X1627315083@163.com
761b1b3512 Merge remote-tracking branch 'origin/StableVersion' into dev_vite 2026-02-05 16:49:47 +08:00
X1627315083@163.com
b2cb7378d6 修复overall模式角度设置不上 2026-02-05 16:41:56 +08:00
4d9ea75146 chore: i18n内容 2026-02-05 16:30:24 +08:00
f7e6926ee9 bugfix: events i18n 2026-02-05 16:25:12 +08:00
7aba4e30c9 Merge branch 'dev_vite' of ssh://18.167.251.121:10002/aidlab/aida_front into dev_vite 2026-02-05 10:33:47 +08:00
dc1ab330cf AiDA跳转竞赛页面 2026-02-05 10:33:42 +08:00
X1627315083@163.com
96b3636aea 取消3d 拼贴功能 2026-02-04 15:59:45 +08:00
X1627315083
3dfb607b91 Merge remote-tracking branch 'origin/dev_vite' into StableVersion 2026-02-03 15:29:37 +08:00
X1627315083
181e6a87b8 Merge remote-tracking branch 'origin/dev_vite' into StableVersion 2026-02-03 10:46:09 +08:00
X1627315083
012f0ef1b5 修复画布打开发布后仍然可以对画布里面复制内容 2026-01-29 16:55:38 +08:00
X1627315083
2d5d1b7a5e 删除衣服时候imgDom要随着变化 2026-01-29 09:55:15 +08:00
X1627315083
f6556ec9a9 fix 2026-01-28 17:10:58 +08:00
35 changed files with 4918 additions and 5424 deletions

View File

@@ -9,11 +9,6 @@
"id": 2, "id": 2,
"title": "AiDA X SFT AI Fashion Award 2024", "title": "AiDA X SFT AI Fashion Award 2024",
"imgUrl": "/image/events/Fashion-Award-2024.png" "imgUrl": "/image/events/Fashion-Award-2024.png"
},
{
"id": 3,
"title": "AiDA Global Design Awards 2026",
"imgUrl": "/image/events/award-poster.gif"
} }
], ],
"eventsItem": [ "eventsItem": [
@@ -25,7 +20,7 @@
{ {
"paragraph": [ "paragraph": [
{ {
"text": "Scan the QR code for more information and to join the competition! The AiDA Global Design Award 2026 is an international design competition hosted by CodeCreate, a globally leading AI fashion solutions provider, celebrating the future of creativity powered by artificial intelligence. Open to designers from Hong Kong, China, Singapore, South Korea, and beyond, the competition brings together global talent, empowering AI as a creative partner—pushing fashion beyond traditional boundaries and unlocking new possibilities where technology amplifies human imagination." "text": "Click the “View Details” button for more information and to join the competition! The AiDA Global Design Award 2026 is an international design competition hosted by CodeCreate, a globally leading AI fashion solutions provider, celebrating the future of creativity powered by artificial intelligence. Open to designers from Hong Kong, China, Singapore, South Korea, and beyond, the competition brings together global talent, empowering AI as a creative partner—pushing fashion beyond traditional boundaries and unlocking new possibilities where technology amplifies human imagination."
} }
] ]
}, },

View File

@@ -9,11 +9,6 @@
"id": 2, "id": 2,
"title": "AiDA X SFT AI时尚设计比赛2024", "title": "AiDA X SFT AI时尚设计比赛2024",
"imgUrl": "/image/events/Fashion-Award-2024.png" "imgUrl": "/image/events/Fashion-Award-2024.png"
},
{
"id": 3,
"title": "AiDA全球设计奖 2026",
"imgUrl": "/image/events/award-poster-zh.gif"
} }
], ],
"eventsItem": [ "eventsItem": [
@@ -25,7 +20,7 @@
{ {
"paragraph": [ "paragraph": [
{ {
"text": "秉承推动 AI 赋能创意设计的初衷CodeCreate 举办了「AiDA 全球设计大奖 2026」面向来自香港、中国、新加坡、韩国及全球的设计师鼓励大家探索 AI 与时尚设计的无限可能,突破传统界限,释放科技与想象力的创新潜能。扫描二维码获取更多比赛信息,抓住成为 AI 时尚先锋的机会吧!" "text": "秉承推动 AI 赋能创意设计的初衷CodeCreate 举办了「AiDA 全球设计大奖 2026」面向来自香港、中国、新加坡、韩国及全球的设计师鼓励大家探索 AI 与时尚设计的无限可能,突破传统界限,释放科技与想象力的创新潜能。点击“查看详情”按钮获取更多比赛信息,抓住成为 AI 时尚先锋的机会吧!"
} }
] ]
}, },

View File

@@ -148,6 +148,7 @@
total: total, total: total,
showQuickJumper: true, showQuickJumper: true,
bordered: false, bordered: false,
showTotal: (total) => `Total Transaction: ${total}`
}" }"
> >
<template #bodyCell="{ column, text, record, index }"> <template #bodyCell="{ column, text, record, index }">
@@ -465,13 +466,16 @@ export default defineComponent({
(rv: any) => { (rv: any) => {
if (rv) { if (rv) {
// this.dataList = rv // this.dataList = rv
// console.log('rv----',rv);
filter.dataList = rv.content; filter.dataList = rv.content;
filterData.total = rv.total; filterData.total = rv.total;
filter.tableLoading = false; filter.tableLoading = false;
filterData.totalPayer = rv.content.reduce((total: number, item: any) => { filterData.totalPayer = rv.totalAmount;
const value = item && item.status === 'Success' ? parseFloat(item.payerTotal) : 0; // filterData.totalPayer = rv.content.reduce((total: number, item: any) => {
return total + (isNaN(value) ? 0 : value); // const value = item && item.status === 'Success' ? parseFloat(item.payerTotal) : 0;
}, 0); // return total + (isNaN(value) ? 0 : value);
// }, 0);
// this.workspaceItem.position = this.singleTypeList[0].label // this.workspaceItem.position = this.singleTypeList[0].label
} }

File diff suppressed because it is too large Load Diff

View File

@@ -1335,7 +1335,7 @@ backgroundObject.scaleY,'CanvasManager resetCanvasSizeByFixedLayer')
} }
} }
loadJSON(json, calllBack) { loadJSON(json, calllBack) {
this.canvas.loading.value = true;
// 确保传入的json是字符串格式 // 确保传入的json是字符串格式
if (typeof json === "object") { if (typeof json === "object") {
json = JSON.stringify(json); json = JSON.stringify(json);
@@ -1507,7 +1507,6 @@ backgroundObject.scaleY,'CanvasManager resetCanvasSizeByFixedLayer')
*/ */
async createOtherLayers(otherData) { async createOtherLayers(otherData) {
if (!otherData) return console.warn("otherData 为空不需要添加"); if (!otherData) return console.warn("otherData 为空不需要添加");
this.canvas.loading.value = true;
let resolve = ()=>{}; let resolve = ()=>{};
this.awaitCanvasRun = ()=>(new Promise((v) => resolve = v)) this.awaitCanvasRun = ()=>(new Promise((v) => resolve = v))
const otherData_ = JSON.parse(JSON.stringify(otherData)); const otherData_ = JSON.parse(JSON.stringify(otherData));
@@ -1555,7 +1554,6 @@ backgroundObject.scaleY,'CanvasManager resetCanvasSizeByFixedLayer')
console.log("==========创建其他图层成功"); console.log("==========创建其他图层成功");
resolve(); resolve();
this.awaitCanvasRun = null; this.awaitCanvasRun = null;
this.canvas.loading.value = false;
} }
// 设置画布对象的裁剪信息 // 设置画布对象的裁剪信息

View File

@@ -1580,7 +1580,7 @@ export class LayerManager {
/** /**
* 排序图层,确保图层顺序: 普通图层 > 固定图层 > 背景图层 * 排序图层,确保图层顺序: 普通图层 > 固定图层 > 背景图层
*/ */
sortLayers() { async sortLayers() {
// 对图层进行排序:背景图层在最底层(数组最后),固定图层在中间 // 对图层进行排序:背景图层在最底层(数组最后),固定图层在中间
this.layers.value.sort((a, b) => { this.layers.value.sort((a, b) => {
// 如果a是背景图层它应该排在后面最底层 // 如果a是背景图层它应该排在后面最底层
@@ -1604,17 +1604,17 @@ export class LayerManager {
}); });
// 更新画布对象顺序 // 更新画布对象顺序
this._rearrangeObjects(); await this._rearrangeObjects();
} }
/** /**
* 重新排列画布上的对象以匹配图层顺序 * 重新排列画布上的对象以匹配图层顺序
* @private * @private
*/ */
_rearrangeObjects() { async _rearrangeObjects() {
if (this.layerSort) { if (this.layerSort) {
// 使用LayerSort的高级排序 // 使用LayerSort的高级排序
this.layerSort.rearrangeObjects(); await this.layerSort.rearrangeObjects();
return; return;
} }

View File

@@ -30,27 +30,30 @@ export class LayerSort {
if (canvasObjects.length === 0) return; if (canvasObjects.length === 0) return;
// 使用画布渲染优化 // 使用画布渲染优化
await optimizeCanvasRendering(this.canvas, () => { await new Promise((resolve) => {
// 计算每个对象应该在的 z-index 位置 optimizeCanvasRendering(this.canvas, () => {
const objectZIndexMap = this.calculateObjectZIndexes(); // 计算每个对象应该在的 z-index 位置
const objectZIndexMap = this.calculateObjectZIndexes();
// 按照新的 z-index 排序对象 // 按照新的 z-index 排序对象
const sortedObjects = canvasObjects const sortedObjects = canvasObjects
.map((obj) => ({ .map((obj) => ({
object: obj, object: obj,
targetZIndex: objectZIndexMap.get(obj.id) ?? -1, targetZIndex: objectZIndexMap.get(obj.id) ?? -1,
})) }))
.filter((item) => item.targetZIndex >= 0) // 过滤掉无效对象 .filter((item) => item.targetZIndex >= 0) // 过滤掉无效对象
.sort((a, b) => a.targetZIndex - b.targetZIndex); .sort((a, b) => a.targetZIndex - b.targetZIndex);
// 使用 fabric.js 的 moveTo 方法重新排序 // 使用 fabric.js 的 moveTo 方法重新排序
sortedObjects.forEach((item, index) => { sortedObjects.forEach((item, index) => {
const currentIndex = this.canvas.getObjects().indexOf(item.object); const currentIndex = this.canvas.getObjects().indexOf(item.object);
if (currentIndex !== index && currentIndex !== -1) { if (currentIndex !== index && currentIndex !== -1) {
// 将对象移动到正确的位置 // 将对象移动到正确的位置
this.canvas.moveTo(item.object, index); this.canvas.moveTo(item.object, index);
} }
}); });
resolve();
});
}); });
} }

View File

@@ -375,6 +375,7 @@ const confirm = ()=>{
/* 图片网格 */ /* 图片网格 */
.image-grid { .image-grid {
display: grid; display: grid;
align-content: start;
grid-template-columns: repeat(auto-fill, minmax(20rem, 1fr)); grid-template-columns: repeat(auto-fill, minmax(20rem, 1fr));
gap: 16px; gap: 16px;
min-height: 20rem; min-height: 20rem;

View File

@@ -7,7 +7,7 @@
:enabledRedGreenMode="false" :enabledRedGreenMode="false"
/> />
</div> </div>
<div class="btn">123 <div class="btn">
<div class="gallery_btn" @click="exportElement">Export</div> <div class="gallery_btn" @click="exportElement">Export</div>
</div> </div>
</div> </div>

View File

@@ -759,7 +759,6 @@ export default defineComponent({
const uploadSelectDetail = async ()=>{//更新选中的detail const uploadSelectDetail = async ()=>{//更新选中的detail
// await detailDom.canvasBox.saveCanvas() // await detailDom.canvasBox.saveCanvas()
const allInfo = await (detailDom.canvasBox as any).getCanvasElement() const allInfo = await (detailDom.canvasBox as any).getCanvasElement()
console.log(allInfo)
let color:any = {} let color:any = {}
if(allInfo.color?.color?.rgba || allInfo.color?.color?.gradient){ if(allInfo.color?.color?.rgba || allInfo.color?.color?.gradient){
let canvasColor = allInfo.color.color; let canvasColor = allInfo.color.color;

View File

@@ -12,7 +12,6 @@
is-edit is-edit
:clothingImageUrl="selectDetail.path" :clothingImageUrl="selectDetail.path"
:clothingImageUrl2="selectDetail.maskUrl || selectDetail.layersObject[0].maskUrl" :clothingImageUrl2="selectDetail.maskUrl || selectDetail.layersObject[0].maskUrl"
:clothingMinIOPath="selectDetail.minIOPath"
showFixedLayer showFixedLayer
:canvasJSON="canvasJSON" :canvasJSON="canvasJSON"
@canvasLoadJsonSuccess="canvasLoadJsonSuccess" @canvasLoadJsonSuccess="canvasLoadJsonSuccess"
@@ -52,9 +51,9 @@
</div> </div>
</div> </div>
<div class="mark_loading" v-show="isShowMark"> <!-- <div class="mark_loading" v-show="isShowMark">
<a-spin size="large" /> <a-spin size="large" />
</div> </div> -->
</div> </div>
</template> </template>

View File

@@ -40,11 +40,29 @@ export default defineComponent({
setup(props,{emit}) { setup(props,{emit}) {
const {t} = useI18n(); const {t} = useI18n();
const store = useStore(); const store = useStore();
const updateCatecory = (arr)=>{
arr.forEach((v:any) => {
if(props.catecoryList)props.catecoryList.forEach((item:any) => {
if(v.level2Type == item.value && !v.category){
v.category=item.name
v.categoryValue=item.value
}
})
});
}
const detailData = reactive({ const detailData = reactive({
allBoardData:computed(()=>store.state.UploadFilesModule.allBoardData), allBoardData:computed(()=>store.state.UploadFilesModule.allBoardData),
currentList:{ currentList:{
sketch:computed(()=>store.state.UploadFilesModule.allBoardData.sketchboardFiles), sketch:computed(()=>{
print:computed(()=>store.state.UploadFilesModule.allBoardData.printboardFiles), let sketch = store.state.UploadFilesModule.allBoardData.sketchboardFiles
updateCatecory(sketch)
return sketch
}),
print:computed(()=>{
let print = store.state.UploadFilesModule.allBoardData.printboardFiles
updateCatecory(print)
return print
}),
color:computed(()=>store.state.UploadFilesModule.allBoardData.colorBoards), color:computed(()=>store.state.UploadFilesModule.allBoardData.colorBoards),
models:computed(()=>store.state.Workspace.probjects.model), models:computed(()=>store.state.Workspace.probjects.model),
}, },

View File

@@ -76,6 +76,7 @@ export default defineComponent({
selectImgItem(data) selectImgItem(data)
return return
} }
data.id = id
if(data?.imgUrl)data.url = data.imgUrl if(data?.imgUrl)data.url = data.imgUrl
let value = { let value = {
data, data,

View File

@@ -273,7 +273,7 @@ export default defineComponent({
minIOPath:data.minIOPath || data.originalUrl, minIOPath:data.minIOPath || data.originalUrl,
path:data.url, path:data.url,
priority:printIndex, priority:printIndex,
scale, scale:editPrintElementData.stateOverallSingle == 'single'?scale:[1,1],
globalCompositeOperation:'', globalCompositeOperation:'',
} }
getItemPosition(item) getItemPosition(item)
@@ -300,7 +300,7 @@ export default defineComponent({
// location = [item.pattern.style.left,item.pattern.style.top] // location = [item.pattern.style.left,item.pattern.style.top]
} }
let value ={ let value ={
angle : item.pattern.transform.rotateZ, angle:0,
// angle : !this.overallSingle ? 0:item.pattern.transform.rotateZ, // angle : !this.overallSingle ? 0:item.pattern.transform.rotateZ,
location : location, location : location,
priority:item.priority, priority:item.priority,
@@ -312,7 +312,9 @@ export default defineComponent({
ifSingle:!!item.ifSingle, ifSingle:!!item.ifSingle,
globalCompositeOperation:'', globalCompositeOperation:'',
} }
if(item.object)value.object = item.object if(item.object)value.object = item.object;
value.angle = value.ifSingle?item.pattern.transform.rotateZ:item.angle
return value return value
} }
if(editPrintElementData.printStyleList[props.type].single.length>0){ if(editPrintElementData.printStyleList[props.type].single.length>0){
@@ -359,7 +361,7 @@ export default defineComponent({
//overall //overall
left = item.location[0] / editPrintElementData.sketchWH.scale[0] left = item.location[0] / editPrintElementData.sketchWH.scale[0]
top = item.location[1] / editPrintElementData.sketchWH.scale[1] top = item.location[1] / editPrintElementData.sketchWH.scale[1]
item.scale = [1,1] item.scale = item.scale || [1,1]
} }
let pattern = { let pattern = {
centers:{left:0,top:0}, centers:{left:0,top:0},
@@ -915,6 +917,7 @@ export default defineComponent({
} }
const inputFillAngle = (angle:any)=>{ const inputFillAngle = (angle:any)=>{
let arr = editPrintElementData.printStyleList[props.type].overall let arr = editPrintElementData.printStyleList[props.type].overall
console.log(angle)
arr[editPrintElementData.imgDomIndex].angle = angle arr[editPrintElementData.imgDomIndex].angle = angle
editPrintElementDom.pingpuRef.updataList([ editPrintElementDom.pingpuRef.updataList([
{ {

View File

@@ -16,7 +16,7 @@
:max="1000" :max="1000"
:step="1" :step="1"
is-input is-input
:tipFormatter="(v) => `${scale.toFixed(0)}%`" :tipFormatter="(v) => `${Number(scale)?.toFixed(0)}%`"
:value="scale" :value="scale"
@input="inputFillScale" @input="inputFillScale"
/> />
@@ -25,7 +25,7 @@
<div class="repeat-setting-item"> <div class="repeat-setting-item">
<span class="label">Gap X</span> <span class="label">Gap X</span>
<slider <slider
:min="0" :min="1"
:max="1000" :max="1000"
:step="1" :step="1"
is-input is-input
@@ -39,7 +39,7 @@
<div class="repeat-setting-item"> <div class="repeat-setting-item">
<span class="label">Gap Y</span> <span class="label">Gap Y</span>
<slider <slider
:min="0" :min="1"
:max="1000" :max="1000"
:step="1" :step="1"
is-input is-input
@@ -84,7 +84,7 @@
const scale = computed(() => { const scale = computed(() => {
// let scaleValue = props.object?.scale/10; // let scaleValue = props.object?.scale/10;
// return props.object?.scale/10; // return props.object?.scale/10;
return props.object?.scale[0] * 100; return (props.object?.scale[0] * 100).toFixed(0);
}); });
const scalePrint = computed(() => { const scalePrint = computed(() => {
let index = sketchWH.value[0] > sketchWH.value[1]?0:1; let index = sketchWH.value[0] > sketchWH.value[1]?0:1;

View File

@@ -1,142 +1,175 @@
<template> <template>
<div class="eventsDetail_page" :class="{active:isScroll}"> <div class="eventsDetail_page" :class="{ active: isScroll }">
<div class="eventsDetail_title "> <div class="eventsDetail_title">
<div class="modal_title_text" @click="setBack"> <div class="modal_title_text" @click="setBack">
<i class="fi fi-sr-left"></i> <i class="fi fi-sr-left"></i>
<div class="eventsDetail_title_text">{{ $t('event.back') }}</div> <div class="eventsDetail_title_text">{{ $t("event.back") }}</div>
</div> </div>
</div> </div>
<div class="eventsDetail_content"> <div class="eventsDetail_content">
<div class="eventsDetail_content_left"> <div class="eventsDetail_content_left">
<fullScreenImg :src="eventsDetail.imgUrl" width="100%" :center="true"></fullScreenImg> <fullScreenImg
:src="eventsDetail.imgUrl"
width="100%"
:center="true"
></fullScreenImg>
</div> </div>
<div class="eventsDetail_content_right"> <div class="eventsDetail_content_right">
<div class="modal_title_text"> <div class="modal_title_text modal_title_text-header flex space-between">
<div>{{ eventsDetail.title }}</div> <div>{{ eventsDetail.title }}</div>
<div class="detail-btn" v-if="eventsDetail.id === 3" @click="openDetail">
{{ $t("event.detail") }}
</div>
</div> </div>
<div class="modal_title_text" v-for="item in eventsDetail.textList"> <div class="modal_title_text content" v-for="item in eventsDetail.textList">
<div class="eventsDetail_content_right_btn_box"> <div class="eventsDetail_content_right_btn_box">
<div class="eventsDetail_content_right_btn" v-for="buttonItem,buttonIndex in item?.button" @click="openButton(buttonItem,buttonIndex)"> <div
<div v-show="!loadingShow[buttonIndex]" class="started_btn">{{ buttonItem.text }}</div> class="eventsDetail_content_right_btn"
<div v-show="loadingShow[buttonIndex]" class="started_btn"><i class="fi fi-br-loading"></i></div> v-for="(buttonItem, buttonIndex) in item?.button"
@click="openButton(buttonItem, buttonIndex)"
>
<div v-show="!loadingShow[buttonIndex]" class="started_btn">
{{ buttonItem.text }}
</div>
<div v-show="loadingShow[buttonIndex]" class="started_btn">
<i class="fi fi-br-loading"></i>
</div>
</div> </div>
</div> </div>
<div class="modal_title_text_intro" v-for="introItem in item?.paragraph" :class="{active:introItem.display == 'flex'}" v-detailText="introItem.text"> <div
</div> class="modal_title_text_intro"
v-for="introItem in item?.paragraph"
:class="{ active: introItem.display == 'flex' }"
v-detailText="introItem.text"
></div>
</div> </div>
</div> </div>
</div> </div>
</div>
</div>
</template> </template>
<script lang="ts"> <script lang="ts">
import { LoadingOutlined } from "@ant-design/icons-vue"; import { LoadingOutlined } from "@ant-design/icons-vue"
import { defineComponent,h ,toRefs,ref,reactive,onMounted,nextTick,provide,computed} from 'vue' import {
defineComponent,
h,
toRefs,
ref,
reactive,
onMounted,
nextTick,
provide,
computed
} from "vue"
// import RobotAssist from "@/component/HomePage/RobotAssist.vue"; // import RobotAssist from "@/component/HomePage/RobotAssist.vue";
import { Https } from "@/tool/https"; import { Https } from "@/tool/https"
import { message, Upload, Modal } from "ant-design-vue"; import { message, Upload, Modal } from "ant-design-vue"
import fullScreenImg from '@/component/HomePage/fullScreenImg.vue' import fullScreenImg from "@/component/HomePage/fullScreenImg.vue"
import { useRouter } from 'vue-router'; import { useRouter } from "vue-router"
import { useI18n } from "vue-i18n"; import { useI18n } from "vue-i18n"
import generalMenu from "@/component/HomePage/generalMenu.vue"; import generalMenu from "@/component/HomePage/generalMenu.vue"
import eventData from "@/assets/json/events.json"; import eventData from "@/assets/json/events.json"
import eventDataCn from "@/assets/json/events_cn.json"; import eventDataCn from "@/assets/json/events_cn.json"
import { useStore } from "vuex"; import { useStore } from "vuex"
export default defineComponent({ export default defineComponent({
components: { components: {
generalMenu, generalMenu,
fullScreenImg, fullScreenImg
},
props:{
isScroll:{
type:Boolean,
default:true,
},
}, },
setup() { props: {
const router = useRouter(); isScroll: {
const store = useStore(); type: Boolean,
let filter:any = reactive({ default: true
eventsDetail: {
},
getListDate:{
"getLikePortfolio": 0,
"getMyPortfolio": 0,
page:1,
size:10,
},
isShowMark:false,
isNoData:false,//如果数据为空就不加载
loadingShow:{},
})
let likeFile = (item:any,type:string) => {
} }
let setBack = ()=>{ },
router.go(-1); setup() {
const { t, locale } = useI18n()
const router = useRouter()
const store = useStore()
let filter: any = reactive({
eventsDetail: {},
getListDate: {
getLikePortfolio: 0,
getMyPortfolio: 0,
page: 1,
size: 10
},
isShowMark: false,
isNoData: false, //如果数据为空就不加载
loadingShow: {}
})
let likeFile = (item: any, type: string) => {}
let setBack = () => {
router.go(-1)
// router.push('/home/events') // router.push('/home/events')
} }
let openButton = (data:any,index:number)=>{ let openButton = (data: any, index: number) => {
if(filter.loadingShow[index]){ if (filter.loadingShow[index]) {
return return
} }
filter.loadingShow[index] = true filter.loadingShow[index] = true
Https.axiosGet(data.https).then( Https.axiosGet(data.https)
(rv: any) => { .then((rv: any) => {
if(rv){ if (rv) {
message.success(data.success) message.success(data.success)
filter.loadingShow[index] = false filter.loadingShow[index] = false
} }
} })
).catch(res=>{ .catch((res) => {
filter.loadingShow[index] = false filter.loadingShow[index] = false
}); })
} }
onMounted (()=>{ const openDetail = () => {
const { t, locale } = useI18n(); let language = locale.value === "ENGLISH" ? "en" : "zh"
const currentLocale = locale.value; let url = `https://aida-global-design-awards.com.hk/${language}`
let eventLangData:any window.open(url, "_blank")
if(currentLocale == 'ENGLISH'){
// router.push("/award/index")
}
onMounted(() => {
const currentLocale = locale.value
let eventLangData: any
if (currentLocale == "ENGLISH") {
eventLangData = eventData eventLangData = eventData
}else{ } else {
eventLangData = eventDataCn eventLangData = eventDataCn
} }
eventLangData.eventsItem.forEach((item:any)=>{ eventLangData.eventsItem.forEach((item: any) => {
if(item.id == router.currentRoute.value.query.eventId){ if (item.id == router.currentRoute.value.query.eventId) {
filter.eventsDetail = item; filter.eventsDetail = item
} }
}) })
}) })
return { return {
...toRefs(filter), ...toRefs(filter),
likeFile, likeFile,
setBack, setBack,
openButton, openButton,
} openDetail
}, }
directives:{ },
detailText:{ directives: {
mounted (el,binding) { detailText: {
mounted(el, binding) {
el.innerHTML = binding.value el.innerHTML = binding.value
} }
} }
}, },
async mounted(){ async mounted() {}
},
}) })
</script> </script>
<style lang="less"> <style lang="less">
.eventsDetail_page { .eventsDetail_page {
min-height: 100%; min-height: 100%;
width: 100%; width: 100%;
padding: 0 6rem; padding: 0 6rem;
padding-top: 5rem; padding-top: 5rem;
&.active{ &.active {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
height: 100%; height: 100%;
.eventsDetail_content{ .eventsDetail_content {
overflow-y: auto; overflow-y: auto;
width: 100%; width: 100%;
} }
@@ -146,7 +179,7 @@ export default defineComponent({
min-height: auto; min-height: auto;
padding-bottom: 10rem; padding-bottom: 10rem;
} }
.eventsDetail_title{ .eventsDetail_title {
display: flex; display: flex;
padding: 2rem 0rem; padding: 2rem 0rem;
align-items: center; align-items: center;
@@ -154,21 +187,21 @@ export default defineComponent({
top: 0; top: 0;
z-index: 222; z-index: 222;
background: #fff; background: #fff;
.modal_title_text{ .modal_title_text {
cursor: pointer; cursor: pointer;
display: flex; display: flex;
margin-bottom: 0; margin-bottom: 0;
} }
.modal_title_text:hover .eventsDetail_title_text{ .modal_title_text:hover .eventsDetail_title_text {
text-decoration: underline; text-decoration: underline;
} }
i{ i {
display: flex; display: flex;
align-items: center; align-items: center;
margin-right: 1rem; margin-right: 1rem;
} }
} }
.eventsDetail_content{ .eventsDetail_content {
border-top: 1px solid #f0f0f0; border-top: 1px solid #f0f0f0;
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
@@ -176,59 +209,69 @@ export default defineComponent({
@media (max-width: 768px) { @media (max-width: 768px) {
flex-direction: column; flex-direction: column;
} }
.eventsDetail_content_left,.eventsDetail_content_right{ .eventsDetail_content_left,
.eventsDetail_content_right {
width: 50%; width: 50%;
@media (max-width: 768px) { @media (max-width: 768px) {
width: 100%; width: 100%;
} }
} }
.eventsDetail_content_left{ .eventsDetail_content_left {
width: 40%; width: 40%;
max-height: 60rem; max-height: 60rem;
@media (max-width: 768px) { @media (max-width: 768px) {
width: 100%; width: 100%;
} }
.ant-image{ .ant-image {
// height: auto; // height: auto;
height: 100%; height: 100%;
} }
.eventsDetail_content_left_img{ .eventsDetail_content_left_img {
width: 100%; width: 100%;
cursor: zoom-in; cursor: zoom-in;
} }
} }
.eventsDetail_content_right{ .eventsDetail_content_right {
.modal_title_text{ .modal_title_text {
letter-spacing: .4rem; letter-spacing: 0.4rem;
font-weight: 600; font-weight: 600;
.modal_title_text_intro{ &-header {
display: flex;
flex-wrap: wrap;
align-items: flex-end;
justify-content: space-between;
gap: 1rem;
> div:first-child {
flex: 1;
min-width: 0;
}
}
.modal_title_text_intro {
display: block; display: block;
&.active{ &.active {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
} }
li{ li {
width: 48%; width: 48%;
} }
em{ em {
// font-family: auto; // font-family: auto;
} }
a{ a {
display: inline; display: inline;
} }
} }
.eventsDetail_content_right_btn_box{ .eventsDetail_content_right_btn_box {
display: flex; display: flex;
justify-content: space-evenly; justify-content: space-evenly;
.eventsDetail_content_right_btn{ .eventsDetail_content_right_btn {
} }
} }
} }
.modal_title_text:last-child{ .modal_title_text:last-child {
} }
.modal_title_text:last-child::after{ .modal_title_text:last-child::after {
content: ""; content: "";
display: block; display: block;
border-top: 3px solid; border-top: 3px solid;
@@ -237,4 +280,17 @@ export default defineComponent({
} }
} }
} }
.detail-btn {
// width: 11rem;
padding: 0 1.4rem;
height: 4rem;
line-height: 4rem;
text-align: center;
color: #fff;
border-radius: 2rem;
background-color: #000;
font-size: 1.4rem;
white-space: nowrap;
cursor: pointer;
}
</style> </style>

View File

@@ -853,9 +853,7 @@ export default defineComponent({
level2Type = this.sketchboardList?.[0]?.categoryValue level2Type = this.sketchboardList?.[0]?.categoryValue
? this.sketchboardList[0].categoryValue ? this.sketchboardList[0].categoryValue
: '' : ''
if (this.workspace.styleName) { sloganText = `${this.workspace.styleName || 'all'},${sloganText}`
sloganText = `${this.workspace.styleName},${sloganText}`
}
} else if (this.upload.level1Type == 'Printboard') { } else if (this.upload.level1Type == 'Printboard') {
level2Type = this.scene?.value level2Type = this.scene?.value
if (level2Type == 'Slogan' && this.searchPictureName == '') { if (level2Type == 'Slogan' && this.searchPictureName == '') {

View File

@@ -7,6 +7,7 @@
:get-container="() => $refs.upgradePlan" :get-container="() => $refs.upgradePlan"
width="35%" width="35%"
height="auto" height="auto"
zIndex="9999999"
:maskClosable="false" :maskClosable="false"
:centered="true" :centered="true"
:closable="false" :closable="false"

View File

@@ -517,6 +517,7 @@ defineExpose({
/* 图片网格 */ /* 图片网格 */
.image-grid { .image-grid {
display: grid; display: grid;
align-content: start;
overflow-y: auto; overflow-y: auto;
grid-template-columns: repeat(auto-fill, minmax(20rem, 1fr)); grid-template-columns: repeat(auto-fill, minmax(20rem, 1fr));
gap: 16px; gap: 16px;

View File

@@ -379,6 +379,7 @@ export default defineComponent({
setup(props,{emit}) { setup(props,{emit}) {
const {t,locale} = useI18n() const {t,locale} = useI18n()
const store = useStore(); const store = useStore();
const route = useRoute()
const editDesignType = reactive({ const editDesignType = reactive({
selectProbject:computed(()=>{ selectProbject:computed(()=>{
return store.state.Workspace.probjects return store.state.Workspace.probjects
@@ -624,6 +625,7 @@ export default defineComponent({
collItemSize.collTime = setTimeout(()=>{ collItemSize.collTime = setTimeout(()=>{
nextTick(()=>{ nextTick(()=>{
let parentWidth = likeItemDom.value.parentElement.offsetWidth let parentWidth = likeItemDom.value.parentElement.offsetWidth
if(parentWidth == 0)return
collItemSize.widthValue.value = collItemSize.widthValue.value == -1?100:collItemSize.widthValue.value collItemSize.widthValue.value = collItemSize.widthValue.value == -1?100:collItemSize.widthValue.value
collItemSize.widthValue.value = collItemSize.widthValue.value > parentWidth?parentWidth:collItemSize.widthValue.value collItemSize.widthValue.value = collItemSize.widthValue.value > parentWidth?parentWidth:collItemSize.widthValue.value
collItemSize.collValue = Math.floor(parentWidth / collItemSize.widthValue.value) collItemSize.collValue = Math.floor(parentWidth / collItemSize.widthValue.value)
@@ -634,7 +636,6 @@ export default defineComponent({
collItemSize.collStyle.width = (collItemDom.value.offsetWidth - 30) / 3 * collItemSize.scale[0] + 'px' collItemSize.collStyle.width = (collItemDom.value.offsetWidth - 30) / 3 * collItemSize.scale[0] + 'px'
collItemSize.collStyle.height = (collItemDom.value.offsetWidth - 30) / 3 * collItemSize.scale[1] + 'px' collItemSize.collStyle.height = (collItemDom.value.offsetWidth - 30) / 3 * collItemSize.scale[1] + 'px'
collItemSize.likeStyle.width = collItemSize.itemStyle.width + 'px' collItemSize.likeStyle.width = collItemSize.itemStyle.width + 'px'
collItemSize.likeStyle.height = collItemSize.itemStyle.height + 'px' collItemSize.likeStyle.height = collItemSize.itemStyle.height + 'px'
let elArr = likeItemDom.value.children let elArr = likeItemDom.value.children

View File

@@ -271,7 +271,7 @@ export default defineComponent({
allCollectionStr.forEach((itemStr:any)=>{ allCollectionStr.forEach((itemStr:any)=>{
let list = [] as any let list = [] as any
allCollection[itemStr.value].forEach((imgItem)=>{ allCollection[itemStr.value].forEach((imgItem)=>{
list.push({url:imgItem.url || imgItem.imgUrl}) list.push({url:imgItem?.url || imgItem?.imgUrl})
}) })
let obj = { let obj = {
value:itemStr.value, value:itemStr.value,

View File

@@ -196,9 +196,9 @@ export default defineComponent({
type:rv.process == 'SERIES_DESIGN'?'seriesDesign':'singleProductDesign', type:rv.process == 'SERIES_DESIGN'?'seriesDesign':'singleProductDesign',
httpType:rv.process,//项目类型 httpType:rv.process,//项目类型
ageGroup:rv.workspaceVO?.ageGroup, ageGroup:rv.workspaceVO?.ageGroup,
style:rv.workspaceVO?.style, style:rv.workspaceVO?.style || '',
styleId:rv.workspaceVO?.styleId, styleId:rv.workspaceVO?.styleId || null,
styleName:rv.workspaceVO?.styleName, styleName:rv.workspaceVO?.styleName || '',
sex:rv.workspaceVO?.sex, sex:rv.workspaceVO?.sex,
userBrandDnaImg:rv.workspaceVO?.userBrandDnaImg, userBrandDnaImg:rv.workspaceVO?.userBrandDnaImg,
userBrandDnaName:rv.workspaceVO?.userBrandDnaName, userBrandDnaName:rv.workspaceVO?.userBrandDnaName,

View File

@@ -94,9 +94,9 @@ export default defineComponent({
type:rv.process == 'SERIES_DESIGN'?'seriesDesign':'singleProductDesign', type:rv.process == 'SERIES_DESIGN'?'seriesDesign':'singleProductDesign',
httpType:rv.process,//项目类型 httpType:rv.process,//项目类型
ageGroup:rv.workspaceVO.ageGroup, ageGroup:rv.workspaceVO.ageGroup,
style:rv.workspaceVO.style, style:rv.workspaceVO.style || '',
styleId:rv.workspaceVO.styleId, styleId:rv.workspaceVO.styleId || null,
styleName:rv.workspaceVO.styleName, styleName:rv.workspaceVO.styleName || '',
sex:rv.workspaceVO.sex, sex:rv.workspaceVO.sex,
userBrandDnaImg:rv.workspaceVO.userBrandDnaImg, userBrandDnaImg:rv.workspaceVO.userBrandDnaImg,
userBrandDnaName:rv.workspaceVO.userBrandDnaName, userBrandDnaName:rv.workspaceVO.userBrandDnaName,

View File

@@ -179,9 +179,9 @@ export default defineComponent({
dataDom.brandDNA.init(data.selectObject); dataDom.brandDNA.init(data.selectObject);
} }
const setWorkspaceStyle = (value:any)=>{ const setWorkspaceStyle = (value:any)=>{
data.selectObject.styleName = value.name data.selectObject.styleName = value.name || ''
data.selectObject.style = value.value data.selectObject.style = value.value || ''
data.selectObject.styleId = value.id data.selectObject.styleId = value.id || null
// store.commit('setProbject',data) // store.commit('setProbject',data)
} }
const setWorkspaceBrandDNA = (value:any)=>{ const setWorkspaceBrandDNA = (value:any)=>{
@@ -238,9 +238,9 @@ export default defineComponent({
// type:rv.process == 'SERIES_DESIGN'?'seriesDesign':'singleProductDesign', // type:rv.process == 'SERIES_DESIGN'?'seriesDesign':'singleProductDesign',
// httpType:rv.process,//项目类型 // httpType:rv.process,//项目类型
ageGroup:rv.workspaceVO?.ageGroup, ageGroup:rv.workspaceVO?.ageGroup,
style:rv.workspaceVO?.style, style:rv.workspaceVO?.style || '',
styleId:rv.workspaceVO?.styleId, styleId:rv.workspaceVO?.styleId || null,
styleName:rv.workspaceVO?.styleName, styleName:rv.workspaceVO?.styleName || '',
sex:rv.workspaceVO?.sex, sex:rv.workspaceVO?.sex,
userBrandDnaImg:rv.workspaceVO?.userBrandDnaImg, userBrandDnaImg:rv.workspaceVO?.userBrandDnaImg,
userBrandDnaName:rv.workspaceVO?.userBrandDnaName, userBrandDnaName:rv.workspaceVO?.userBrandDnaName,

View File

@@ -352,7 +352,8 @@ export default defineComponent({
props: { props: {
isDesignPage: { isDesignPage: {
type: Boolean, type: Boolean,
default: false default: false,
required:false
}, },
source: { source: {
type: String, type: String,
@@ -773,7 +774,7 @@ export default defineComponent({
data.lastSelectImg = res.data data.lastSelectImg = res.data
} }
} }
// 同步尾帧文件列表到全局 store // 同步尾帧文件列表到全局 store(使用专门的 lastFrameList
store.commit('setPoseTransferLastFrameList', { store.commit('setPoseTransferLastFrameList', {
str: 'set', str: 'set',
list: [file] list: [file]
@@ -989,6 +990,7 @@ export default defineComponent({
if (data.lastSelectImg?.id === item.id) { if (data.lastSelectImg?.id === item.id) {
data.lastSelectImg = {} data.lastSelectImg = {}
} }
// 使用专门的 lastFrameList mutation 清空列表
store.commit('setPoseTransferLastFrameList') store.commit('setPoseTransferLastFrameList')
} else { } else {
// 如果删除的是当前选中的首帧,清空选中状态 // 如果删除的是当前选中的首帧,清空选中状态
@@ -1176,10 +1178,10 @@ export default defineComponent({
firstFrameList.value = store.state.HomeStoreModule.uploadElement.filter( firstFrameList.value = store.state.HomeStoreModule.uploadElement.filter(
item => item.frameType === 'first' item => item.frameType === 'first'
) )
// 注意:尾帧通过专门的 watch (lastFrameList) 监听,不需要从这里过滤
lastFrameList.value = store.state.HomeStoreModule.uploadElement.filter( // lastFrameList.value = store.state.HomeStoreModule.uploadElement.filter(
item => item.frameType === 'last' // item => item.frameType === 'last'
) // )
// 更新 showFirstFrameList 中项的选中状态 // 更新 showFirstFrameList 中项的选中状态
showFirstFrameList.value.forEach((listItem: any) => { showFirstFrameList.value.forEach((listItem: any) => {
if (listItem.id == data.selectImg.id) { if (listItem.id == data.selectImg.id) {

View File

@@ -102,9 +102,9 @@ setup(props,{emit}) {
// if(habitSetStyleData.styleList.length == 0){ // if(habitSetStyleData.styleList.length == 0){
// getStyleList() // getStyleList()
// } // }
oldDataId = data.styleId oldDataId = data.styleId || null
habitSetStyleData.selectStyle.id = data.styleId habitSetStyleData.selectStyle.id = data.styleId || null
habitSetStyleData.selectStyle.name = data.styleName habitSetStyleData.selectStyle.name = data.styleName || ''
// habitSetStyleData.selectStyleId = 'feng2' // habitSetStyleData.selectStyleId = 'feng2'
} }
let setCover = (item:any)=>{ let setCover = (item:any)=>{

File diff suppressed because it is too large Load Diff

View File

@@ -133,8 +133,7 @@ export default {
UploadOpenimage: 'Upload/Open image', UploadOpenimage: 'Upload/Open image',
jsContent1: jsContent1:
"Have you saved your canvas content? If not, please click 'Save' before closing.", "Have you saved your canvas content? If not, please click 'Save' before closing.",
jsContent2: jsContent2: 'We only provide super-resolution capabilities for printboard images.',
'We only provide super-resolution capabilities for printboard images.',
jsContent3: 'Your points are less than one SR', jsContent3: 'Your points are less than one SR',
jsContent4: 'Your points balance is insufficient', jsContent4: 'Your points balance is insufficient',
jsContent5: jsContent5:
@@ -556,8 +555,7 @@ export default {
inputContent1: 'Input prompt', inputContent1: 'Input prompt',
GeneratePrint: 'Pattern', GeneratePrint: 'Pattern',
maximumLength: 'The entered content exceeds the maximum length.', maximumLength: 'The entered content exceeds the maximum length.',
PatternTitle: PatternTitle: 'Generates repeatable designs that can be fully tiled across garments.',
'Generates repeatable designs that can be fully tiled across garments.',
LogoTitle: LogoTitle:
'Creates standalone graphic designs that can be placed individually or tiled.', 'Creates standalone graphic designs that can be placed individually or tiled.',
SloganTitle: SloganTitle:
@@ -1006,15 +1004,21 @@ export default {
subscriptionRenewal: 'There are no subscription plans with automatic renewal.' subscriptionRenewal: 'There are no subscription plans with automatic renewal.'
}, },
guide: { guide: {
guide1: "You can personalize your design settings right here in the <strong>Workspace</strong>, including choosing to design for men's or women's wear, as well as selecting the mannequin to use for your creations.", guide1:
"You can personalize your design settings right here in the <strong>Workspace</strong>, including choosing to design for men's or women's wear, as well as selecting the mannequin to use for your creations.",
guide2: "Select the apparel type you'd like to work on.", guide2: "Select the apparel type you'd like to work on.",
guide3: 'Change the mannequin here.', guide3: 'Change the mannequin here.',
guide4: 'You can currently select a mannequin from our system library. Later, you can also choose from the user library after registering your own mannequin.', guide4:
'You can currently select a mannequin from our system library. Later, you can also choose from the user library after registering your own mannequin.',
guide5: 'Begin your creative journey here. ', guide5: 'Begin your creative journey here. ',
guide6: 'For the Moodboard, Printboard, or Sketchboard, we provide three different sourcing methods to add images. The first option is <strong>Upload</strong>, allowing you to <stront>upload</stront> directly from your local device.', guide6:
guide7: "The second method is to select from your <strong>Library</strong>. <br> You might notice that your library page is currently empty; there's no need to worry. All the images you upload will be automatically added to your library. In the future, you won't have to upload each time—you can simply choose from your library instead.", 'For the Moodboard, Printboard, or Sketchboard, we provide three different sourcing methods to add images. The first option is <strong>Upload</strong>, allowing you to <stront>upload</stront> directly from your local device.',
guide8: 'The third method is to <strong>Generate</strong> images using the latest Image Generation technology.', guide7:
guide9: 'Enter keywords that capture the mood you wish to express and then click the <strong>Low Quality</strong> button.', "The second method is to select from your <strong>Library</strong>. <br> You might notice that your library page is currently empty; there's no need to worry. All the images you upload will be automatically added to your library. In the future, you won't have to upload each time—you can simply choose from your library instead.",
guide8:
'The third method is to <strong>Generate</strong> images using the latest Image Generation technology.',
guide9:
'Enter keywords that capture the mood you wish to express and then click the <strong>Low Quality</strong> button.',
guide10: 'Select two images for your moodboard.', guide10: 'Select two images for your moodboard.',
guide11: 'Click here to layout your moodboard.', guide11: 'Click here to layout your moodboard.',
guide12: 'Click here for next step.', guide12: 'Click here for next step.',
@@ -1064,8 +1068,7 @@ export default {
guide52: 'Click here to generate the product image.', guide52: 'Click here to generate the product image.',
guide53: 'Click this button to apply more tools to the product image. ', guide53: 'Click this button to apply more tools to the product image. ',
guide54: 'We can adjust the lighting and background of this image. ', guide54: 'We can adjust the lighting and background of this image. ',
guide55: guide55: 'Click here to generate a product image with lighting from the right side.',
'Click here to generate a product image with lighting from the right side.',
guide56: 'If you like this result, click the little heart to save it.', guide56: 'If you like this result, click the little heart to save it.',
guide57: 'Click here to go to the export page. ', guide57: 'Click here to go to the export page. ',
guide58: 'You can share your work to the gallery or export to your local device.', guide58: 'You can share your work to the gallery or export to your local device.',
@@ -1229,8 +1232,7 @@ export default {
touchDevicePrompts_2: 'Double-click an element to quickly enter edit mode.', touchDevicePrompts_2: 'Double-click an element to quickly enter edit mode.',
touchDevicePrompts_3: 'Two-finger drag to pan the canvas.', touchDevicePrompts_3: 'Two-finger drag to pan the canvas.',
touchDevicePrompts_4: 'Pinch to zoom.', touchDevicePrompts_4: 'Pinch to zoom.',
touchDevicePrompts_5: touchDevicePrompts_5: "Two-finger tap to display the element's transform handles.",
"Two-finger tap to display the element's transform handles.",
touchDevicePrompts_6: 'Three-finger swipe left or right to undo/redo.', touchDevicePrompts_6: 'Three-finger swipe left or right to undo/redo.',
TheDetectedPlatform: 'Guide Detected Platform', TheDetectedPlatform: 'Guide Detected Platform',
BasicOperations: 'Basic Operations', BasicOperations: 'Basic Operations',
@@ -1361,8 +1363,7 @@ export default {
furCurvature: 'Curvature', furCurvature: 'Curvature',
furCurvatureDescription: 'Control the degree of hair curvature', furCurvatureDescription: 'Control the degree of hair curvature',
randomizeDirection: 'Random Cirection', randomizeDirection: 'Random Cirection',
randomizeDirectionDescription: randomizeDirectionDescription: 'Whether to randomize the direction of hair growth',
'Whether to randomize the direction of hair growth',
//水墨 //水墨
InkSettings: 'Ink painting settings', InkSettings: 'Ink painting settings',
InkAmount: 'The amount of ink', InkAmount: 'The amount of ink',
@@ -1388,8 +1389,7 @@ export default {
//马克笔 //马克笔
MarkerSettings: 'Marker Settings', MarkerSettings: 'Marker Settings',
MarkerWidth: 'Brush stroke width', MarkerWidth: 'Brush stroke width',
MarkerWidthDescription: MarkerWidthDescription: 'Control the width of the brush strokes with the marker pen',
'Control the width of the brush strokes with the marker pen',
MarkerCapStyle: 'Writing style', MarkerCapStyle: 'Writing style',
MarkerCapStyleDescription: 'Set the shape of the marker pen tip', MarkerCapStyleDescription: 'Set the shape of the marker pen tip',
MarkerCapStyleRound: 'Round', MarkerCapStyleRound: 'Round',
@@ -1520,18 +1520,15 @@ export default {
CompositeMultiply: 'Multiply', CompositeMultiply: 'Multiply',
CompositeMultiplyTip: 'Multiply: Darken the image', CompositeMultiplyTip: 'Multiply: Darken the image',
CompositeColorBurn: 'Color Burn', CompositeColorBurn: 'Color Burn',
CompositeColorBurnTip: CompositeColorBurnTip: 'Color Burn: Increase contrast and darken the bottom color',
'Color Burn: Increase contrast and darken the bottom color',
CompositeLighten: 'Lighten', CompositeLighten: 'Lighten',
CompositeLightenTip: 'Lighten: Take the brightest color', CompositeLightenTip: 'Lighten: Take the brightest color',
CompositeScreen: 'Screen', CompositeScreen: 'Screen',
CompositeScreenTip: 'Screen: Lighten the image', CompositeScreenTip: 'Screen: Lighten the image',
CompositeColorDodge: 'Color Dodge', CompositeColorDodge: 'Color Dodge',
CompositeColorDodgeTip: CompositeColorDodgeTip: 'Color Dodge: Reduce contrast and lighten the bottom color',
'Color Dodge: Reduce contrast and lighten the bottom color',
CompositeLighter: 'Color Dodge (Add)', CompositeLighter: 'Color Dodge (Add)',
CompositeLighterTip: CompositeLighterTip: 'Color Dodge (Add): Add the brightness of the overlapping parts',
'Color Dodge (Add): Add the brightness of the overlapping parts',
CompositeOverlay: 'Overlay', CompositeOverlay: 'Overlay',
CompositeOverlayTip: 'Overlay: Highlight effect', CompositeOverlayTip: 'Overlay: Highlight effect',
CompositeSoftLight: 'Soft Light', CompositeSoftLight: 'Soft Light',
@@ -1586,7 +1583,8 @@ export default {
LiquefactionTool: 'Liquefaction Tool' LiquefactionTool: 'Liquefaction Tool'
}, },
event: { event: {
back: 'Back' back: 'Back',
detail: 'View Details'
}, },
admin: { admin: {
allUser: 'All User', allUser: 'All User',
@@ -1668,7 +1666,8 @@ export default {
ForgotPassword: '忘记密码', ForgotPassword: '忘记密码',
Welcome: 'Welcome to', Welcome: 'Welcome to',
AiDA: 'AiDA', AiDA: 'AiDA',
Slogan: 'AiDA, a first-to-market technology that empowers fashion designers, based on their creative inspirations, to work with AI to create original designs.', Slogan:
'AiDA, a first-to-market technology that empowers fashion designers, based on their creative inspirations, to work with AI to create original designs.',
LoginMethod: 'Continue with one of these:', LoginMethod: 'Continue with one of these:',
Individual: 'Individual', Individual: 'Individual',
Academic: 'Academic', Academic: 'Academic',
@@ -1709,8 +1708,7 @@ export default {
IncorrectEmail: 'The email format is incorrect', IncorrectEmail: 'The email format is incorrect',
IncorrectEmailFormat: 'The email format is incorrect', IncorrectEmailFormat: 'The email format is incorrect',
CompleteVerificationCode: 'Please enter the complete verification code.', CompleteVerificationCode: 'Please enter the complete verification code.',
PleaseEnterYourAccountNumberOrPassword: PleaseEnterYourAccountNumberOrPassword: 'Please enter your account number or password'
'Please enter your account number or password'
}, },
LoginSchool: { LoginSchool: {
School: 'School', School: 'School',
@@ -1741,8 +1739,7 @@ export default {
IncorrectEmail: 'The email format is incorrect', IncorrectEmail: 'The email format is incorrect',
IncorrectEmailFormat: 'The email format is incorrect', IncorrectEmailFormat: 'The email format is incorrect',
CompleteVerificationCode: 'Please enter the complete verification code.', CompleteVerificationCode: 'Please enter the complete verification code.',
PleaseEnterYourAccountNumberOrPassword: PleaseEnterYourAccountNumberOrPassword: 'Please enter your account number or password'
'Please enter your account number or password'
}, },
LoginEnterprise: { LoginEnterprise: {
Enterprise: 'Enterprise', Enterprise: 'Enterprise',
@@ -1772,265 +1769,6 @@ export default {
IncorrectEmail: 'The email format is incorrect', IncorrectEmail: 'The email format is incorrect',
IncorrectEmailFormat: 'The email format is incorrect', IncorrectEmailFormat: 'The email format is incorrect',
CompleteVerificationCode: 'Please enter the complete verification code.', CompleteVerificationCode: 'Please enter the complete verification code.',
PleaseEnterYourAccountNumberOrPassword: PleaseEnterYourAccountNumberOrPassword: 'Please enter your account number or password'
'Please enter your account number or password'
},
AwardsPage: {
submitApplication: 'Submit your Application',
applicationDeadline: 'Application Deadline:15th July 2026',
howToApply: 'How to Apply',
stepByStep: 'Step by step',
step1Title: 'Step 1. Become an\nAiDA Subscriber',
step1Desc:
'All applicants must be active\nAiDA subscribers at the time of\nsubmission. You may subscribe\nunder either a monthly or yearly plan.',
step2Title: 'Step 2. Create Your Design Using AiDA',
step2Desc:
'Applicants must create their\ndesigns exclusively using the\nAiDA platform. ',
step2ListTitle: 'Your work should clearly demonstrate:',
step2List: [
'· How AiDA is used as a creative tool',
'· Your design concept and creative direction',
'· The intergration of AI and human creativity'
],
step3Title: 'Step 3. Prepare Your Submission',
processVideo: 'Process Video',
processVideoDesc:
'Include a screenrecorded video\nyour creative process\nusing AiDA.',
videoRequirements: 'Video requirements:',
videoFormat: 'Format: MP4',
videoResolution: 'Resolution: 1080×1920 px',
videoDuration: 'Duration: Maximum 1 minute',
videoSize: 'File size: Maximum 20MB',
fileName: 'File Name',
fileNameDesc: 'AiDAGlobalDesignAward\n2026_[Your Full Name]',
designPortfolio: 'Design Portfolio(PDF)',
submitPdf: 'Submit one single PDF file that includes:',
requiredStructure: 'Required structure:',
pdfDesignTitle: 'Design title',
pdfMoodboard: 'Moodboard',
pdfConcept: 'Concept explanation',
pdfConceptDesc: '(How to use AiDA to develop design)',
pdfRequirements: 'PDF requirements:',
pdfMaxPages: 'Maximum 15 pages',
pdfMaxSize: 'Maximum file size: 20MB',
pdfLanguage: 'Language: English or native language\nwith English translation',
step4Title: 'Step 4. Finalist Requirement',
step4Subtitle: '(for top 20 Designers)',
step4Desc:
'The 20 finalists will be required to\nsubmit physical garments for final\nevaluation',
finalistPieces: 'Number of pieces: 1 full outfit',
finalistBasedOn:
'Garments must be produced\nbased on the submitted\nAiDA-generated designs',
finalistShipping: 'Shipping instructions will be provided by\nCode-create',
bloomYourCreativity: 'Bloom Your Creativity',
themeOf2026: 'Theme of 2026',
bloomText: {
desc1: {
regular1: 'The',
bold1: 'AiDA Global Design Award 2026',
regular2: 'is an ',
bold2: 'international design competition ',
regular3: 'hosted by ',
bold3: 'Code-create ',
regular4: ', a globally leading\n',
bold4: 'AI fashion solutions provider,',
regular5:
'celebrating the future of creativity powered by artificial intelligence.\nBringing together designers from around the world, AiDA empowers AI as a creative partner—pushing fashion beyond traditional boundaries and unlocking new possibilities where technology amplifies human imagination.'
},
desc2: {
regular1: 'Under the theme',
bold1: '“Where Imagination Meets Innovation, Creativity Blooms,” ',
regular2:
'participants are invited to transform bold ideas into extraordinary designs, seamlessly merging human artistry with artificial intelligence to shape the next era of fashion.'
}
},
bloomDesc1:
'The AiDA Global Design Award 2026 is an\ninternational design competition hosted by\nCodeCreate, a globally leading AI fashion solutions provider,\ncelebrating the future of creativity powered by artificial intelligence.\nBringing together designers from around the world, AiDA empowers AI as a creative partner—pushing fashion beyond traditional boundaries and unlocking new possibilities where technology amplifies human imagination.',
bloomDesc2:
'Under the theme “Where Imagination Meets Innovation, Creativity Blooms,” participants are invited to transform bold ideas into extraordinary designs, seamlessly merging human artistry with artificial intelligence to shape the next era of fashion.',
panelOfJudges: 'Panel of Judges',
expertise: 'Expertise',
judgesHat: {
jae: 'Code-create\nKorea Branch Director\nBesfxxk creative director',
diego: 'Co-founder & Chief Father\nOfficer of OnTheList\n(Hong Kong)',
gregory: 'Senior Designer at\nGabriela Heasrst (Italy)',
vincenzo: 'Cheif Editor of SCMP Style\n(Hong Kong)',
tim: 'Group Fashion Direction of\n Modern Media Group\n(Shanghai)',
desmond: 'Cheif Editor of Vogue\n(Singapore)'
},
awardPrizes: 'Award & Prizes',
recognition: 'Recognition',
grandMoney: 'US$5,000',
goldMoney: 'US$3,000',
silverMoney: 'US$1,000',
grandAwards: 'Grand Awards',
goldAwards: 'Gold Awards',
silverAwards: 'Silver Awards',
finalists: 'Finalists',
cashAward: 'Cash Award',
awardCertificate: 'Award Certificate',
globalMediaExposure: 'Global Media Exposure',
awardCertification: 'Award\nCertification',
TravelAllowance: 'Travel Allowance',
selectionCriteria: 'Selection Criteria',
evaluation: 'Evaluation',
originality: 'Originality',
originalityDesc: 'Unique perspective and\ninnovative approach to\nfashion design',
creativity: 'Creativity',
creativityDesc: 'Artistic vision and exceptional\ndesign excellence',
aidaIntegration: 'AiDA Integration',
aidaIntegrationDesc: 'Effective application of\nAiDA functions',
execution: 'Execution',
executionDesc: 'Quality of presentation and\ntechnical craftsmanship',
totalCashPrizes: 'UP TO\nUS$9000',
totalCashPrizesLabel: 'In total cash prizes',
globalMediaExpose: 'GLOBAL MEDIA\nEXPOSE',
globalMediaExposeLabel: 'Showcased by top\ninternational media platforms',
networkingOpportunities: 'NETWORKING\nOPPORTUNITIES',
networkingOpportunitiesLabel:
'Build connections with\ndesigners and industry leaders',
awardCeremonyHongKong: 'AWARD CEREMONY\nIN HONG KONG',
awardCeremonyLabel: 'Travel allowance\nprovided for finalists',
competitionTimeline: 'Competition Timeline',
shapingTheFuture: 'Shaping the Future',
timelineApplicationLabel: 'Application',
timelineDeadlineLabel: 'Deadline',
timeJul15: 'Jul 15',
applicationDeadlineDesc:
'Application deadline and\nentry review process\nbegins.',
twentyFinalistsAnnounced: '20 Finallists',
announcedLabel: 'Announced',
timeAug30: 'Aug 30',
twentyFinalistsDesc:
'Announcement of 20\nfinalists entering final\nevaluation stage.',
finalistSubmission: 'Finallist\nSubmission',
submissionLabel: 'Deadline',
timeSept30: 'Sept 30',
finalistSubmissionDesc:
'Finalists submit\ncompleted outfits for\nfinal assessment.',
receivingOutfits: 'Receiving Outfits',
fromFinalistsLabel: 'from Finallists',
timeOctober: 'October',
receivingOutfitsDesc: 'AiDA receives physical\noutfits from all 20\nfinalists.',
awardCeremony: 'Award',
ceremonyLabel: 'Ceremony',
timeNov12: 'Nov 12',
awardCeremonyDesc: 'Award Ceremony &\nCommunity Gathering\n Soho House.',
submissionSuccessful: 'Submission Successful',
submissionSuccessfulDesc:
'Please review your submitted information in the AiDA in-platform message.\nYou may edit it if needed. Competition updates and results will be sent via email.',
deadlinePassed: 'Application Deadline Passed',
deadlinePassedDesc:
'The submission deadline for AiDA Global Fashion Award 2026 has ended.\nWe are no longer accepting new applications.',
uploadInProgress: 'Upload in progress…',
uploadSuccess: 'Uploaded Successfully',
uploadFailed: 'Upload failed',
pdfFileTip: 'PDF file, max 20MB',
videoFileTip: 'Video file (MP4, MOV), 1080p, max 100MB',
wechatTitle: 'WeChat Official Account',
wechatDesc: 'Scan the QR code in WeChat'
},
AwardApply: {
// 页面主标题区域
applicationForm: 'Application Form',
emailVerification: 'Email Verification',
aidaUsersOnly: 'AiDA Users Only',
slogan: 'BLOOM YOUR CREATIVITY • AIDA GLOBAL DESIGN AWARDS 2026',
// 邮箱验证部分
emailAddress: 'Email Address',
sendCode: 'Send Code',
pleaseUseRegisteredEmail:
'Please use the email address you registered with AiDA.',
// 个人信息部分
personalInformation: 'Personal Information',
tellUsAboutYourself: 'Tell us about yourself',
firstName: 'First Name',
lastName: 'Last Name',
gender: 'Gender',
occupation: 'Occupation',
age: 'Age',
countryRegionCity: 'Country/Region and City',
phoneNumber: 'Phone Number',
portfolioUrl: 'Portfolio Website/Instagram (Optional)',
// 性别选项
male: 'Male',
female: 'Female',
other: 'Other',
// 设计信息部分
designInformation: 'Design Information',
shareYourCreativeVision: 'Share your creative vision',
designTitle: 'Design Title',
designDescription: 'Design description',
designDescriptionPlaceholder:
'Briefly describe your design concept, inspiration, and creative direction...',
// 提交文件部分
submissionFiles: 'Submission Files',
uploadYourDesignMaterials: 'Upload your design materials',
submissionRequirements: 'Submission Requirements',
pdfRequirement: `Single PDF file\n Title, mood board, elaboration\n+ 4 outfit design with materials (max 15 pages)`,
rightContent: {
format: 'Format: Single PDF file, 15 pages, maximum 20MB',
video: `Video: Design process, 1080×1920 pixels (9:16 ratio), maximum 60 seconds`
},
// PDF 上传
uploadPdfTitle: 'How will you use AiDA in your design process?',
clickToUploadPdf: 'Click to upload or drag and drop',
pdfFileLimit: 'PDF file, max 20MB',
// 视频上传
uploadVideoTitle: 'How will you use AiDA in your design process?',
clickToUploadVideo: 'Click to upload or drag and drop',
videoFileLimit: 'Video file (MP4, MOV), 1080p, max 100MB',
// 条款与条件
termsAndConditions: 'Terms & Conditions',
conditionFirst:
'I confirm that all submitted work is original and created by me.',
conditionSecond:
'I understand that Code-Create has marketing and promotional rights to all submitted designs and videos.',
conditionThird:
'I agree to participate in finalist activities if selected, including AiDA training and award ceremony.',
conditionFourth:
'I would like to receive updates about AiDA products and future competitions. (Optional)',
// 提交按钮
submitYourDesign: 'Submit your Design',
unfinishedFormTip:
'The link in the AiDA in-platform message will save your unfinished form.',
// 验证码弹窗
checkYourEmail: 'Check your email',
enterSixDigitCode: 'Enter the 6-digit code sent to',
verify: 'Verify',
resendCode: 'Resend',
resendCodeIn: 'Resend Code in',
// 验证消息
verificationSuccess: 'Verification successful!',
pleaseVerifyEmailFirst: 'Please verify your email first',
pleaseCheckTerms: 'Please agree to the terms and conditions',
pleaseFillRequiredFields: 'Please fill in all the required fields',
pleaseEnterCompleteCode: 'Please enter the complete 6-digit verification code',
// 上传状态
fileUploadedSuccess: '{fileName} file uploaded successfully.',
fileUploadFailed: '{fileName} file upload failed.',
// 验证器消息
pleaseInputEmail: 'Please input the email address',
pleaseInputValidEmail: 'Please input a valid email address',
pleaseInputFirstName: 'Please input your first name',
pleaseInputLastName: 'Please input your last name',
pleaseSelectGender: 'Please select your gender',
pleaseInputOccupation: 'Please input your occupation',
pleaseInputAge: 'Please input your age',
pleaseInputCountry: 'Please input your country/region and city',
pleaseInputPhoneNumber: 'Please enter your phone number.',
pleaseInputValidPhone: 'Please enter a valid phone number.',
pleaseInputDigits: 'Please enter digits only',
pleaseInputDesignTitle: 'Please input your design title',
pleaseInputDesignDescription: 'Please input your design description',
pleaseUploadPdf: 'Please upload your PDF',
pleaseUploadVideo: 'Please upload your video',
uploadPdfOnly: 'Please upload a PDF file only.',
uploadVideoOnly: 'Please upload a MP4 or MOV file only.',
fileSizeExceeds:
'File size exceeds {sizeLimit} limit. Please upload a smaller file.',
videoDurationExceeds:
'Video duration exceeds 60 seconds limit. Please upload a shorter video.',
uploadFailed: 'Upload failed'
} }
} }

View File

@@ -53,6 +53,12 @@ const routes: Array<RouteRecordRaw> = [
meta: { enter: "all" }, meta: { enter: "all" },
component: () => import("@/views/Register.vue"), component: () => import("@/views/Register.vue"),
}, },
{
path: "/register/:lang",
name: "registerLang",
meta: { enter: "all" },
component: () => import("@/views/Register.vue"),
},
{ {
path: "/upgrade", path: "/upgrade",
name: "upgrade", name: "upgrade",

View File

@@ -74,7 +74,7 @@ const HomeStoreModule : Module<DesignDetail,RootState> = {
}, },
setPoseTransferLastFrameList(state,data){ setPoseTransferLastFrameList(state,data){
// 支持两种方式set 替换整个列表add/删除与 uploadElement 一致 // 支持两种方式set 替换整个列表add/删除与 uploadElement 一致
if(data.str === 'set'){ if(data?.str === 'set'){
state.lastFrameList = data.list || [] state.lastFrameList = data.list || []
return return
}else{ }else{

View File

@@ -77,7 +77,7 @@ const userHabit : Module<UserHabit,RootState> = {
followeeCount: '-', followeeCount: '-',
followerCount: '-', followerCount: '-',
accountExtendList:null, accountExtendList:null,
systemList:[], systemList:[1],
expireTime:null, expireTime:null,
language:'', language:'',
organizationId: null, organizationId: null,
@@ -194,7 +194,7 @@ const userHabit : Module<UserHabit,RootState> = {
followeeCount: '-', followeeCount: '-',
followerCount: '-', followerCount: '-',
accountExtendList:null, accountExtendList:null,
systemList:[], systemList:[1],
expireTime:null, expireTime:null,
language:'', language:'',
organizationId: null, organizationId: null,
@@ -407,7 +407,7 @@ const userHabit : Module<UserHabit,RootState> = {
item.name = name item.name = name
}); });
// const {t} = useI18n() // const {t} = useI18n()
rv.unshift({name:t('Model.all'),value:'',id:''}) rv.unshift({name:t('Model.all'),value:'',id:null})
store.commit('setMannequinStyle',rv) store.commit('setMannequinStyle',rv)
resolve('') resolve('')
} }

View File

@@ -74,7 +74,8 @@ const Workspace: Module<DesignDetail, RootState> = {
}, },
setProbject(state, data) { setProbject(state, data) {
for (const key in data) { for (const key in data) {
if (data[key] == undefined) continue let list = ['styleName','styleId','style']
if (data[key] == undefined && !list.includes(key)) continue
state.probjects[key] = data[key] state.probjects[key] = data[key]
} }
}, },

File diff suppressed because it is too large Load Diff

View File

@@ -1721,9 +1721,8 @@ export default defineComponent({
sloganText = this.captionGeneration sloganText = this.captionGeneration
if(this.selectCode == "Sketchboard"){ if(this.selectCode == "Sketchboard"){
level2Type = this.selectGenerateList?.[0]?.categoryValue?this.selectGenerateList[0].categoryValue:'' level2Type = this.selectGenerateList?.[0]?.categoryValue?this.selectGenerateList[0].categoryValue:''
if(this.workspace.styleName){ // sloganText = `${this.workspace.styleName || 'all'},${sloganText}`
sloganText = `${this.workspace.styleName},${sloganText}` sloganText = `'all',${sloganText}`
}
}else if(this.selectCode == "Printboard"){ }else if(this.selectCode == "Printboard"){
level2Type = this.scene?.value level2Type = this.scene?.value
if(level2Type == 'Slogan' && this.captionGeneration == ''){ if(level2Type == 'Slogan' && this.captionGeneration == ''){

View File

@@ -85,7 +85,7 @@ import {
import { setCookie, getCookie, WriteCookie, clonAllCookie } from '@/tool/cookie' import { setCookie, getCookie, WriteCookie, clonAllCookie } from '@/tool/cookie'
import { Https } from '@/tool/https' import { Https } from '@/tool/https'
import { useStore } from 'vuex' import { useStore } from 'vuex'
import { useRouter } from 'vue-router' import { useRouter, useRoute } from 'vue-router'
import signUp from '@/component/mainPage/signUp/index.vue' import signUp from '@/component/mainPage/signUp/index.vue'
export default defineComponent({ export default defineComponent({
components: { components: {
@@ -93,6 +93,7 @@ export default defineComponent({
}, },
setup() { setup() {
const store = useStore() const store = useStore()
const route = useRoute();
const router = useRouter() const router = useRouter()
let data = reactive({ let data = reactive({
homeRecommendMax: null, homeRecommendMax: null,
@@ -148,7 +149,14 @@ export default defineComponent({
onMounted(() => { onMounted(() => {
updataIsMoblie() updataIsMoblie()
const savedLang = localStorage.getItem('loginLanguage') let savedLang = localStorage.getItem('loginLanguage') || 'ENGLISH'
if(route?.params?.lang == 'cn'){
savedLang = 'CHINESE_SIMPLIFIED'
localStorage.setItem('loginLanguage', savedLang)
}else if(route?.params?.lang == 'en'){
savedLang = 'ENGLISH'
localStorage.setItem('loginLanguage', savedLang)
}
if (savedLang) { if (savedLang) {
data.isSelectSuccessively = savedLang === 'CHINESE_SIMPLIFIED' data.isSelectSuccessively = savedLang === 'CHINESE_SIMPLIFIED'
} }