2023-01-06 16:00:15 +08:00
< template >
< div class = "home_page" >
< div class = "page_content" >
< img
class = "page_content_bg"
src = "@/assets/images/homePage/bg.png"
/ >
< div class = "page_content_body" >
< HeaderComponent > < / HeaderComponent >
< div class = "home_page_body" >
< div class = "home_page_left" >
< div class = "home_page_left_content" >
<!-- 空状态 start -- >
< div class = "home_left_null" v-show = "!isHaveReviewCollection" >
< div >
< img
class = "home_null_icon"
src = "@/assets/images/homePage/null_img.png"
/ >
< div class = "new_collection_button" @click ="startNewCollection()" >
Start
< / div >
< / div >
< div class = "is_finish_loading" v-show = "isFinishLoading" >
< a-spin size = "large" > < / a-spin >
< / div >
< / div >
<!-- 空状态 end -- >
<!-- 有图状态 start -- >
< div class = "home_left_info" v-show = "isHaveReviewCollection" >
< div class = "left_info_top" >
< div class = "button_second" @click ="startNewCollection()" > Start < / div >
< div class = "button_first button_margin" @click ="recollection()" > Edit < / div >
< / div >
< div class = "left_info_content scroll_style" >
< div class = "left_info_content_body" ref = "collection_canvas" >
< NewCollectionReview id = "collectionReview" > < / NewCollectionReview >
< / div >
< / div >
< / div >
<!-- 有图状态 end -- >
< / div >
< / div >
< div class = "home_page_right" >
< div class = "right_top" >
< div class = "right_top_left" >
< div class = "button_second" @click ="designNewCollection()" >
Design
< / div >
< div class = "button_first button_margin_14" v-show = "designCollectionId" @click="resDesignCollection()" >
Redesign
< / div >
< div class = "system_scale" >
< div class = "system_silder" >
< a-slider
id = "system_silder"
: tooltipVisible = "true"
v - model : value = "system_scale_value"
: tip - formatter = "formatter"
: getTooltipPopupContainer = "(triggerNode) => triggerNode.parentNode"
/ >
< / div >
< div class = "sacle_left_tip" >
Designer
< / div >
< div class = "sacle_right_tip" >
System
< / div >
< / div >
< div
class = "switch_component_block"
@ click = "change_switch()"
>
< div class = "switch_item" > Outfit < / div >
< div class = "switch_item" > Category < / div >
< div
: class = " [
'switch_white_button' ,
switch _open
? 'switch_open_button'
: '' ,
] "
>
{ { switch _open ? 'Category' : 'Outfit' } }
< / div >
< / div >
< div class = "select_block" v-show = "!switch_open" >
< a-select
ref = "select"
v - model : value = "designType"
: options = "disignTypeList"
>
< template # suffixIcon
> < span
class = "icon iconfont icon-xiala"
style = "color: #343579"
> < / s p a n
> < / template >
< / a-select >
< / div >
< / div >
< div class = "right_top_right" >
< div class = "content_header_button" @click ="selectModels()" >
< span class = "content_header_button_des" > Mannequins < / span > < span class = "icon iconfont icon-xiala" > < / span >
< / div >
< / div >
< / div >
< div class = "right_content_block" >
< div class = "right_content_header" >
< div class = "content_header_left" >
< span class = "icon iconfont icon-dangqianweizhi" > < / span > < span class = "content_header_des" > Generated Design < / span >
< / div >
< / div >
< div class = "right_content_body" >
< div class = "right_content_img_block scroll_style" >
< div class = "content_img_block" v-for = "(design,index) in designCollectionList" :key="design?.designItemId" @click="designDetail(design,index,designCollectionList,'dislike')" >
< div class = "content_img_flex" > < img class = "content_img" :src = "design.designItemUrl" > < / div >
< div class = "icon iconfont icon-jushoucang icon_like" @click.stop ="likeDesignCollection(design,index)" > < / div >
< / div >
< / div >
< / div >
< div class = "right_content_header" >
< div class = "content_header_left" >
< span class = "icon iconfont icon-dangqianweizhi" > < / span > < span class = "content_header_des" > Selected Design < / span >
< / div >
< div class = "button_second" v-show = "likeDesignCollectionList.length" @click="exportCanvas()" > Export < / div >
< / div >
< div class = "right_content_body" >
< div class = "right_content_img_block scroll_style" >
< div class = "content_img_block" v-for = "(design,index) in likeDesignCollectionList" :key="design?.id" @click="designDetail(design,index,likeDesignCollectionList,'like')" >
< div class = "content_img_flex" > < img class = "content_img" v-lazy = "design.designItemUrl" :key="design.designItemUrl" > < / div >
< div class = "icon iconfont icon-jushoucanggift icon_like" @click.stop ="dislikeDesignCollection(design,index)" > < / div >
< / div >
< / div >
< / div >
< / div >
< / div >
< / div >
< / div >
< / div >
< CollectionModal ref = "collectionModal" @finishCollection ="finishCollection()" > < / CollectionModal >
< DesignDetail ref = "designDetail" @finishRedesign ="finishRedesign" > < / DesignDetail >
< ModelsModal ref = "modelsModal" @sureSelectModel ="sureSelectModel" > < / ModelsModal >
< ExportNewCoolection id = "exportNewCoolection" > < / ExportNewCoolection >
<!-- 导出缩略图的蒙层 start -- >
< div class = "mark_loading" v-show = "isShowMark" >
< a-spin size = "large" / >
< / div >
<!-- 导出缩略图的蒙层 end -- >
<!-- design collection的进度蒙层 start -- >
< div class = "progress_mark" v-show = "showDesignMark" >
< div class = "mark_content" >
< a-progress type = "circle" :percent = "designProgress" :width = "200" / >
< div >
< a-spin :indicator = "indicator" / >
< / div >
< / div >
< / div >
<!-- design collection的进度蒙层 end -- >
< / div >
< / template >
< script lang = "ts" >
import { defineComponent , h , ref , computed } from "vue" ;
import HeaderComponent from "@/component/HomePage/Header.vue" ;
import CollectionModal from "@/component/HomePage/collectionModal.vue"
import NewCollectionReview from '@/component/HomePage/NewCollectionReview.vue'
import ExportNewCoolection from '@/component/HomePage/ExportNewCoolection.vue'
import ModelsModal from '@/component/LibraryPage/ModelsModal.vue'
import DesignDetail from '@/component/Detail/DesignDetail.vue'
import html2canvas from 'html2canvas' ;
import { message } from 'ant-design-vue' ;
import { useStore } from 'vuex'
import { Https } from "@/tool/https" ;
import { rgbToHsv , dataURLtoBlob } from '@/tool/util'
import { LoadingOutlined } from '@ant-design/icons-vue' ;
import JSZip from 'jszip'
const FileSaver = require ( 'file-saver' ) ;
export default defineComponent ( {
components : {
HeaderComponent ,
CollectionModal ,
NewCollectionReview ,
DesignDetail ,
ModelsModal ,
ExportNewCoolection ,
} ,
setup ( ) {
const store = useStore ( ) ;
let likeDesignCollectionList : any = computed ( ( ) => { return store . state . HomeStoreModule . likeDesignCollectionList } )
let designCollectionList : any = computed ( ( ) => { return store . state . HomeStoreModule . designCollectionList } )
let templateId : any = computed ( ( ) => { return store . state . HomeStoreModule . templateId } ) //模特id
let userGroupId : any = computed ( ( ) => { return store . state . HomeStoreModule . userGroupId } ) //模特id //当likeDesignCollectionList长度为0时清空, startdesign时清空
let designCollectionId : any = computed ( ( ) => { return store . state . HomeStoreModule . designCollectionId } )
let designId : any = computed ( ( ) => { return store . state . HomeStoreModule . designId } )
return {
store ,
likeDesignCollectionList ,
designCollectionList ,
userGroupId ,
templateId ,
designCollectionId ,
designId
}
} ,
data ( ) {
return {
system _scale _value : 30 ,
switch _open : true ,
designType : "Outwear" ,
isHaveReviewCollection : false ,
isFinishLoading : false ,
isShowMark : false , //导出的loading蒙层
disignTypeList : [
{
value : "Outwear" ,
label : "Outwear" ,
} ,
{
value : "Blouse" ,
label : "Blouse" ,
} ,
{
value : "Dress" ,
label : "Dress" ,
} ,
{
value : "Trousers" ,
label : "Trousers" ,
} ,
{
value : "Skirt" ,
label : "Skirt" ,
} ,
] ,
indicator : h ( LoadingOutlined , {
style : {
fontSize : '4.8rem' ,
marginTop : '3rem' ,
} ,
spin : true ,
} ) ,
designProgress : 0 ,
showDesignMark : false ,
startDesignType : 'design' , //设计类型 design 和 resdesign
disLikeLoading : false , //不喜欢防抖
likeLoading : false , //喜欢防抖
} ;
} ,
mounted ( ) {
let noRefresh = this . $route . params . noRefresh //判断是否主动刷新还是路由跳转过来的 true 路由跳转过来的
if ( noRefresh ) {
let colorBoards = this . store . state . UploadFilesModule . allBoardData . colorBoards || [ ]
if ( colorBoards . length ) {
this . isHaveReviewCollection = true
}
} else {
this . store . commit ( 'setUserGroupId' , this . $route . params . id )
this . store . commit ( 'clearAllCollection' )
}
if ( this . $route . params . id ) {
this . getHistoryChoose ( this . $route . params . id , 'normal' )
} else {
this . store . commit ( 'clearAllData' )
}
} ,
methods : {
change _switch ( ) {
this . switch _open = ! this . switch _open ;
} ,
formatter ( value : number ) {
return ` ${ value } % ` ;
} ,
//开始设计collection
startNewCollection ( ) {
let collectionModal : any = this . $refs . collectionModal
this . store . commit ( 'clearAllData' )
collectionModal . changeCollectionModal ( true )
} ,
//recollection
recollection ( ) {
let collectionModal : any = this . $refs . collectionModal
this . store . commit ( 'clearAllData' )
collectionModal . changeCollectionModal ( true )
collectionModal . recollection ( )
} ,
//完成设计
finishCollection ( ) {
let _this = this
_this . isFinishLoading = true
this . getPantongName ( ) . then ( res => {
_this . store . commit ( 'setAllBoardData' )
_this . isHaveReviewCollection = true
_this . isFinishLoading = true
} ) . catch ( res => {
_this . isFinishLoading = false
} )
} ,
//查询颜色的潘通值和txc
getPantongName ( ) {
let colorBoards = this . store . state . UploadFilesModule . colorBoards
let data : any = [ ]
for ( let v of colorBoards ) {
let color : any = [ v . rgbValue . r , v . rgbValue . g , v . rgbValue . b ]
let hsv = rgbToHsv ( color )
v . hsv = hsv [ 0 ] + hsv [ 1 ] + hsv [ 2 ]
data . push ( {
h : hsv [ 0 ] ,
s : hsv [ 1 ] ,
v : hsv [ 2 ] ,
} )
}
return new Promise ( ( resolve : any , reject : any ) => {
Https . axiosPost ( Https . httpUrls . getRgbByHsvBatch , data ) . then (
( rv : any ) => {
if ( rv ) {
rv . forEach ( ( ele : any , index : number ) => {
colorBoards [ index ] . id = ele . id
colorBoards [ index ] . tcx = ele . tcx
colorBoards [ index ] . name = ele . name
} ) ;
this . store . commit ( 'setColorboardList' , colorBoards )
resolve ( )
}
}
) . catch ( res => {
reject ( )
} ) ;
} )
} ,
getContainer ( ) {
return document . querySelector ( "#system_silder" )
} ,
//设计新的collection
designNewCollection ( ) {
let { colorBoards } = this . store . state . UploadFilesModule . allBoardData
if ( ! colorBoards || colorBoards ? . length < 1 ) {
message . error ( 'You must choose one or more colors for further process.' )
return
}
let data = this . getDesignData ( '' )
Https . axiosPost ( Https . httpUrls . designCollection , data ) . then (
( rv : any ) => {
if ( rv ) {
this . store . commit ( 'setDesignCollectionList' , rv . designCollectionItems )
this . store . commit ( 'setLikeDesignCollectionList' , [ ] )
this . store . commit ( 'deleteUserGroupId' )
this . store . commit ( 'setDesignCollectionId' , rv . collectionId )
this . store . commit ( 'setDesignId' , rv . designId )
this . showDesignMark = false
this . designProgress = 0
this . startDesignType = 'design'
}
}
) . catch ( res => {
this . showDesignMark = false
} ) ;
this . getDesignProcess ( )
} ,
//重新设计collection
resDesignCollection ( ) {
let { colorBoards } = this . store . state . UploadFilesModule . allBoardData
if ( ! colorBoards || colorBoards ? . length < 1 ) {
message . error ( 'You must choose one or more colors for further process.' )
return
}
let data = this . getDesignData ( this . designCollectionId )
Https . axiosPost ( Https . httpUrls . reDesignCollection , data ) . then (
( rv : any ) => {
if ( rv ) {
this . store . commit ( 'setDesignCollectionList' , rv . designCollectionItems )
this . showDesignMark = false
this . designProgress = 0 ,
this . startDesignType = 'resDesign'
}
}
) . catch ( res => {
this . showDesignMark = false
} ) ;
this . getDesignProcess ( )
} ,
getDesignData ( designCollectionId : any ) {
let { moodboardFiles , printboardFiles , generatePrintFiles , colorBoards , skecthboardFiles , marketingSketchFiles , moodTemplateId } = this . store . state . UploadFilesModule . allBoardData
let new _printboardFiles = printboardFiles . concat ( generatePrintFiles )
let data : any = {
colorBoards : this . getColorBoard ( colorBoards ) ,
marketingSketchs : this . getBoardId ( marketingSketchFiles ) ,
moodBoards : this . getBoardId ( moodboardFiles ) ,
printBoards : this . getPrintId ( new _printboardFiles ) ,
sketchBoards : this . getSkecthBoard ( skecthboardFiles ) ,
switchCategory : ! this . switch _open ? this . designType : '' ,
singleOverall : ! this . switch _open ? 'single' : 'overall' ,
systemScale : this . system _scale _value / 100 ,
templateId : this . templateId ,
moodTemplateId : moodTemplateId ? String ( moodTemplateId ) : null ,
timeZone : Intl . DateTimeFormat ( ) . resolvedOptions ( ) . timeZone ,
}
if ( designCollectionId ) {
data . collectionId = designCollectionId
}
this . designProgress = 0
this . showDesignMark = true
return data
} ,
//deisgn的进度
getDesignProcess ( ) {
Https . axiosPost ( Https . httpUrls . countDesignProcess , { } ) . then (
( rv : any ) => {
if ( rv < 1 && this . showDesignMark ) {
this . designProgress = rv * 100
setTimeout ( ( ) => {
this . getDesignProcess ( )
} , 1000 )
}
}
) ;
} ,
getBoardId ( boardData : any ) {
let dataList = boardData . map ( ( v : any ) => {
let data : any = {
id : v . resData . id ,
designType : v . resData . designType ,
}
return data
} )
return dataList
} ,
getPrintId ( boardData : any ) {
let dataList = boardData . map ( ( v : any ) => {
let data : any = {
id : v . resData . id ,
designType : v . resData . designType ,
isPin : v . pin ? 1 : 0 ,
}
return data
} )
return dataList
} ,
getSkecthBoard ( boardData : any ) {
let sketchBoards = boardData . map ( ( v : any ) => {
let data = {
designType : v . resData . designType ,
isPin : v . pin ? 1 : 0 ,
level2Type : v . category ,
sketchBoardId : v . resData . id
}
return data
} )
return sketchBoards
} ,
getColorBoard ( boardData : any ) {
let colorBoards = boardData . map ( ( v : any ) => {
let data = {
id : v . id ,
name : v . name ,
tcx : v . tcx ,
rgbValue : ''
}
data . rgbValue = ` ${ v . rgbValue . r } ${ v . rgbValue . g } ${ v . rgbValue . b } `
return data
} )
return colorBoards
} ,
likeDesignCollection ( design : any , index : any ) {
let data = {
designItemId : design . designItemId ,
userGroupId : this . userGroupId ,
timeZone : Intl . DateTimeFormat ( ) . resolvedOptions ( ) . timeZone ,
}
if ( this . likeLoading ) {
return
}
this . likeLoading = true
Https . axiosPost ( Https . httpUrls . designLike , data ) . then (
( rv : any ) => {
if ( rv ) {
this . store . commit ( 'setUserGroupId' , rv . userGroupId )
design . groupDetailId = rv . groupDetailId
this . store . commit ( 'addLikeDesignCollectionList' , design )
this . store . commit ( 'deleteDesignCollectionList' , index )
if ( this . startDesignType === 'resDesign' ) {
this . getHistoryChoose ( this . userGroupId , 'like' )
}
}
this . likeLoading = false
}
) . catch ( rv => {
this . likeLoading = false
} ) ;
} ,
//不喜欢设计
dislikeDesignCollection ( design : any , index : any ) {
let data = {
designId : design . designId || this . designId ,
groupDetailId : design . groupDetailId ,
timeZone : Intl . DateTimeFormat ( ) . resolvedOptions ( ) . timeZone ,
}
if ( this . disLikeLoading ) {
return
}
this . disLikeLoading = true
Https . axiosPost ( Https . httpUrls . designDislike , data ) . then (
( rv : any ) => {
if ( rv ) {
this . store . commit ( 'addDesignCollectionList' , design )
this . store . commit ( 'deleteLikeDesignCollectionList' , index )
if ( ! this . likeDesignCollectionList . length ) {
this . store . commit ( 'deleteUserGroupId' )
}
}
this . disLikeLoading = false
}
) . catch ( rv => {
this . disLikeLoading = false
} ) ;
} ,
//获取选择的组
getHistoryChoose ( userGroupId : any , type : any ) {
this . isShowMark = true
let url = Https . httpUrls . historyChoose + ` ?userGroupId= ${ userGroupId } `
Https . axiosGet ( url ) . then (
( rv : any ) => {
this . dealHistoryChooseData ( rv , type )
this . isShowMark = false
}
) . catch ( rv => {
this . isShowMark = false
} ) ;
} ,
//处理选择组的数据
dealHistoryChooseData ( data : any , type : any ) {
let collectionData = {
moodboardFiles : this . dealViewChooseData ( data . collection . moodBoards ) ,
printboardFiles : this . dealViewChooseData ( data . collection . printBoards ) ,
generatePrintFiles : [ ] ,
colorBoards : this . dealViewChooseColor ( data . collection . colorBoards ) ,
skecthboardFiles : this . dealViewChooseData ( data . collection . sketchBoards ) ,
marketingSketchFiles : this . dealViewChooseData ( data . collection . marketingSketchs ) ,
moodTemplateId : data . collection . moodTemplateId
}
this . store . commit ( 'setAllBoardDataChoose' , collectionData )
this . designCollectionId = this . store . commit ( 'setDesignCollectionId' , data . collection . collectionId )
this . isHaveReviewCollection = true
if ( type === 'normal' ) {
let likeDesignCollectionList = data . userLikeDetails . map ( ( v : any ) => {
let data = {
... v ,
groupDetailId : v . id ,
designItemUrl : v . url ,
}
return data
} )
this . store . commit ( 'setLikeDesignCollectionList' , likeDesignCollectionList )
}
} ,
//统一处理选择组的渲染数据
dealViewChooseData ( data : any ) {
if ( ! data ) {
return [ ]
}
let filesList = data . map ( ( v : any ) => {
let newData : any = {
imgUrl : v . url ,
id : v . id ,
status : 'done' ,
resData : v ,
}
if ( v . level1Type === 'Sketchboard' ) {
newData . pin = v . isPin
newData . category = v . level2Type
}
if ( v . level1Type === 'Printboard' ) {
newData . pin = v . isPin
}
return newData
} )
return filesList
} ,
//统一处理选择组的渲染数据
dealViewChooseColor ( data : any ) {
let colorList = data . map ( ( v : any ) => {
let rgbValue = v . rgbValue . split ( ' ' )
let newData : any = {
id : v . id ,
name : v . name ,
tcx : v . tcx || '' ,
rgbValue : { r : rgbValue [ 0 ] , g : rgbValue [ 1 ] , b : rgbValue [ 2 ] , a : 1 }
}
return newData
} )
return colorList
} ,
//导出合成图
exportCanvas ( ) {
let collectionReview : any = document . querySelector ( "#exportNewCoolection" )
let a = document . createElement ( 'a' ) ;
this . isShowMark = true
html2canvas ( collectionReview , { useCORS : true , scale : 3 } ) . then ( ( canvas ) => {
let blob : any = dataURLtoBlob ( canvas . toDataURL ( 'image/png' ) ) ;
let allBoardData : any = this . store . state . UploadFilesModule . allBoardData
let index = 0
let img = [
{
imgUrl : URL . createObjectURL ( blob ) ,
name : 'collection.png'
}
]
for ( let key in allBoardData ) {
if ( key !== 'colorBoards' && key !== 'moodTemplateId' ) {
for ( let item of allBoardData [ key ] ) {
2023-05-25 15:11:40 +08:00
let nameTail = item . imgUrl . split ( '.' ) . pop ( )
console . log ( nameTail , 666 )
2023-01-06 16:00:15 +08:00
let data = {
imgUrl : item . imgUrl ,
2023-05-25 15:11:40 +08:00
name : item . resData . name + index + '.' + nameTail
2023-01-06 16:00:15 +08:00
}
img . push ( data )
index ++
}
}
}
this . downImg ( img )
// a.setAttribute('href', URL.createObjectURL(blob));
// a.setAttribute('download', `collection.png`);
// a.click();
} )
} ,
//打开图片详情
designDetail ( design : any , index : number , collectionList : any , type : string ) {
let designDetail : any = this . $refs . designDetail
let data = {
design : design ,
index : index ,
collectionList : collectionList ,
type : type
}
designDetail . showDesignDetailModal ( data )
} ,
//完成单个图片设计
finishRedesign ( event : any ) {
let { design , index , type } = event
if ( type === 'dislike' ) {
this . store . commit ( 'setSingleDesignCollectionList' , { index : index , design : design } )
} else {
this . store . commit ( 'setSingleLikeDesignCollectionList' , { index : index , design : design } )
}
} ,
//选择模特
selectModels ( ) {
let modelsModal : any = this . $refs . modelsModal
modelsModal . init ( )
} ,
//确定选择模特
sureSelectModel ( event : any ) {
this . store . commit ( 'setTemplateData' , event )
} ,
//通过url 转为blob格式的数据
getImgArrayBuffer ( url : any ) {
return new Promise ( ( resolve , reject ) => {
//通过请求获取文件blob格式
let xmlhttp = new XMLHttpRequest ( ) ;
xmlhttp . open ( "GET" , url , true ) ;
xmlhttp . responseType = "blob" ;
xmlhttp . onload = function ( ) {
if ( this . status == 200 ) {
resolve ( this . response ) ;
} else {
reject ( this . status ) ;
}
} ;
xmlhttp . send ( ) ;
} ) ;
} ,
// imgDataUrl 数据的url数组
downImg ( imagesParams : any ) {
let _this : any = this ;
let zip = new JSZip ( ) ;
let cache : any = { } ;
let promises = [ ] ;
for ( let item of imagesParams ) {
const promise = _this . getImgArrayBuffer ( item . imgUrl ) . then ( ( data : any ) => {
// 下载文件, 并存成ArrayBuffer对象(blob)
zip . file ( item . name , data , { binary : true } ) ; // 逐个添加文件
cache [ item . title ] = data ;
} ) ;
promises . push ( promise ) ;
}
Promise . all ( promises )
. then ( ( ) => {
zip . generateAsync ( { type : "blob" } ) . then ( ( content : any ) => {
// 生成二进制流
FileSaver . saveAs (
content ,
'DesignFiles'
) ; // 利用file-saver保存文件 自定义文件名
this . isShowMark = false
} ) ;
} )
. catch ( ( res ) => {
_this . message . error ( "Failed to export the file" ) ;
this . isShowMark = false
} ) ;
} ,
} ,
} ) ;
< / script >
< style lang = "less" scoped >
. home _page {
width : 100 % ;
height : 100 % ;
. page _content {
position : relative ;
. page _content _body {
position : absolute ;
width : 100 % ;
height : 100 % ;
padding - bottom : 2.1 rem ;
box - sizing : border - box ;
. home _page _body {
width : 100 % ;
height : calc ( 100 % - 7 rem ) ;
display : flex ;
padding - left : 0.7 rem ;
box - sizing : border - box ;
. home _page _left {
width : 44.4 rem ;
height : 100 % ;
padding : 2.3 rem 0.7 rem 1.7 rem 1.3 rem ;
background : rgba ( 255 , 255 , 255 , 0.2 ) ;
. home _page _left _content {
height : 100 % ;
. home _left _null {
display : flex ;
align - items : center ;
justify - content : center ;
text - align : center ;
width : 100 % ;
height : 100 % ;
position : relative ;
background : # f7f8fa ;
border : 1 px solid # f2f2f9 ;
border - radius : 10 px ;
overflow : hidden ;
. home _null _icon {
display : block ;
width : 32.3 rem ;
}
. new _collection _button {
padding : 0 1.5 rem ;
height : 4 rem ;
line - height : 4 rem ;
background : # e0e0f6 ;
font - size : 1.3 rem ;
color : # 343579 ;
margin : 1.2 rem auto 0 ;
text - align : center ;
cursor : pointer ;
display : inline - block ;
}
. is _finish _loading {
width : 100 % ;
height : 100 % ;
position : absolute ;
left : 0 ;
top : 0 ;
background : # ffffff ;
display : flex ;
align - items : center ;
justify - content : center ;
}
}
. home _left _info {
height : 100 % ;
. left _info _top {
padding : 0 0 1.3 rem 2 rem ;
display : flex ;
. button _margin {
margin - left : 2 rem ;
}
}
. left _info _content {
width : 100 % ;
height : calc ( 100 % - 6.9 rem ) ;
overflow - y : auto ;
background : # ffffff ;
. left _info _content _body {
width : 100 % ;
}
}
}
}
}
. home _page _right {
width : calc ( 100 % - 44.4 rem ) ;
height : 100 % ;
. right _top {
padding : 2 rem 3.2 rem 2 rem 1.2 rem ;
display : flex ;
justify - content : space - between ;
box - shadow : 0 rem 0.2 rem 8 rem 0 rem
rgba ( 238 , 238 , 244 , 0.25 ) ;
background : rgba ( 255 , 255 , 255 , 0.4 ) ;
. right _top _left {
display : flex ;
align - items : center ;
. button _margin _14 {
margin - left : 1.4 rem ;
}
. system _scale {
margin - left : 7 rem ;
width : 12 rem ;
position : relative ;
. system _scale _title {
font - size : 13 px ;
font - weight : 400 ;
color : # 030303 ;
}
. system _silder {
margin - top : 0.5 rem ;
display : flex ;
align - items : center ;
position : absolute ;
. system _silder _value {
font - size : 1.3 rem ;
color : # 030303 ;
margin - left : 0.9 rem ;
}
}
. sacle _left _tip {
position : absolute ;
left : - 2 rem ;
bottom : - 3.8 rem ;
font - size : 1.4 rem ;
line - height : 1.4 rem ;
color : # 030303 ;
}
. sacle _right _tip {
position : absolute ;
right : - 2 rem ;
bottom : - 3.8 rem ;
font - size : 1.4 rem ;
line - height : 1.4 rem ;
color : # 030303 ;
}
}
. switch _component _block {
width : 14 rem ;
height : 4 rem ;
background : # 343579 ;
border : 1 px solid # 141533 ;
padding : 0.4 rem 0.6 rem ;
margin - left : 7 rem ;
box - sizing : border - box ;
display : flex ;
position : relative ;
cursor : pointer ;
. switch _item {
width : 50 % ;
height : 100 % ;
line - height : 3 rem ;
font - size : 1.2 rem ;
text - align : center ;
color : # ffffff ;
}
. switch _white _button {
position : absolute ;
width : calc ( 50 % - 0.6 rem ) ;
height : 3 rem ;
left : 0.6 rem ;
top : 0.4 rem ;
background : # ffffff ;
transition - duration : 0.5 s ;
line - height : 3 rem ;
font - size : 1.2 rem ;
text - align : center ;
color : # 030303 ;
& . switch _open _button {
left : 50 % ;
}
}
}
. select _block {
margin - left : 2 rem ;
. icon - xiala {
color : # 1 A1A1A ! important ;
}
}
}
. right _top _right {
display : flex ;
align - items : center ;
. content _header _button {
display : flex ;
justify - content : space - between ;
align - items : center ;
height : 4 rem ;
border : 1 px solid # 000000 ;
padding : 0 1.2 rem 0 0.8 rem ;
font - size : 1.3 rem ;
color : # 1 A1A1A ;
cursor : pointer ;
. content _header _button _des {
margin - right : 1 rem ;
font - weight : bold ;
}
. icon - xiala {
transform : rotate ( - 90 deg ) ;
color : # 1 A1A1A ;
}
}
}
}
. right _content _block {
height : calc ( 100 % - 8.584 rem ) ;
. right _content _header {
display : flex ;
justify - content : space - between ;
height : 5.5 rem ;
align - items : center ;
padding : 0 3.2 rem 0 1.9 rem ;
background : rgba ( 255 , 255 , 255 , 0.2 ) ;
. content _header _left {
display : flex ;
justify - content : space - between ;
align - items : center ;
. icon - dangqianweizhi {
font - size : 1.6 rem ;
color : # 000 ;
}
. content _header _des {
font - size : 1.6 rem ;
color : # 000000 ;
margin - left : 1 rem ;
}
}
}
. right _content _body {
padding : 0 1.8 rem 0 1.2 rem ;
background : rgba ( 255 , 255 , 255 , 0.2 ) ;
height : calc ( 50 % - 5.5 rem ) ;
. right _content _img _block {
padding : 0.6 rem 2.8 rem 0.6 rem 0.9 rem ;
overflow - y : auto ;
background : # F6F6FA ;
border - radius : 1 rem ;
height : 100 % ;
. content _img _block {
width : 20.1 rem ;
height : 29.5 rem ;
margin - right : 3 rem ;
margin - bottom : 1 rem ;
display : inline - block ;
position : relative ;
vertical - align : top ;
& : hover . icon _like {
display : block ;
}
& : nth - child ( 4 n ) {
margin - right : 0 ;
}
. content _img _flex {
display : flex ;
justify - content : center ;
align - items : center ;
width : 100 % ;
height : 100 % ;
}
. content _img {
max - width : 100 % ;
max - height : 100 % ;
}
. icon _like {
font - size : 2.4 rem ;
top : 1 rem ;
right : 1 rem ;
position : absolute ;
cursor : pointer ;
display : none ;
}
. icon - jushoucang {
color : # 000 ;
}
. icon - jushoucanggift {
color : rgba ( 52 , 53 , 121 , 1 ) ;
}
}
}
}
}
}
}
}
. page _content _bg {
position : absolute ;
width : 100 % ;
height : 100 % ;
}
}
. progress _mark {
background : # ffffff ;
width : 100 % ;
height : 100 % ;
position : fixed ;
left : 0 ;
top : 0 ;
z - index : 9999 ;
display : flex ;
justify - content : center ;
align - items : center ;
. mark _content {
text - align : center ;
}
}
}
< / style >