全国咨询热线:18720358503

ECStore二次开发设计随笔之13.仿天猫商城商城系统

类别:行业新闻 发布时间:2021-04-04 浏览人次:

虫神曰:

近期CEO非常心烦,便是由于ECSTORE这一系统软件呀,没法跟天猫商城一样,挑选的产品没法撤销,由于大家的产品均全是低库存量的,也便是有的火热型号规格的库存量量会非常少,那麼当然便是迅速卖光,如果沒有立即停售如何办?顾客会挑选到,随后

实际上嘛,我认为这一并不是问题,但是她们的觉得并不是很友善,非得制成跟天猫商城一样的实际效果,能够撤销挑选,能够再次挑选

行吧~拿钱消灾,那么就勤奋解决这一难题吧。下边便是处理计划方案,消耗我十天的時间。

升级纪录:

2016.04.14
修补该作用不健全的地区,便是加载会更新,此外便是挑选有的产品标准不是存有的,则无法显示的难题。改动后要是有的规格型号全是会显示信息能够依据必须做了滤。

实际效果截屏:

_selector

 

构思剖析:

在ShopEX4.85系列产品的情况下,产品的多规格型号還是能够挑选跟撤销的,可是系统软件到ECStore的情况下就越来越不可以撤销了,随后剖析一下京东商城跟天猫商城大家会发觉:京东商城是每一个SKU一个连接,不可以挑选跟撤销的;而天猫商城则是所有的SKU都会一个网页页面,能够挑选跟撤销的。

从这一差别看来大家不可以得到:应选择能够撤销的务必是宣传单页面的结果。

可是!大家能够获得一个构思,大家要是把所有的规格型号值的情况都会一个网页页面获得,随后就依据挑选来显示信息便可以了。

文章正文

从上边的构思大家了解必须将大家必须的所有的规格型号的情况都获得出去,那麼在哪儿里获得呢?大家开启/app/b2c/controller/文档,历经剖析大家了解这一的逻辑性集中化在:

//获得货物规格型号数据信息

function _get_goods_spec($aGoods){ }

方式中。

注:这里的关键逻辑性是应用array_diff_assoc方式获得规格型号差集,这一构思非常好,前提条件是要先掌握一下多规格型号的储存构造才可以看懂哈。

随后大家就依据大家的构思,改变这一方式:

//获得货物规格型号数据信息
// 2016.01.13 ChinaBUG
function _get_goods_spec_two( $aGoods, $curspec=null ){
$goodsSpec = array();
// 产品的所有规格型号目录
$products = app::get( b2c )- model( products )- getList( product_id,spec_desc,store,freez,marketable ,array( goods_id = $aGoods[ goods_id ]));
if($aGoods[ spec_desc ]){//产品的多规格型号信息内容
foreach($aGoods[ spec_desc ] as $specId= $specValue){ $arrSpecId[ spec_id ][] = $specId;}
$arrSpecName = app::get( b2c )- model( specification )- getList( spec_name,spec_id,spec_type ,$arrSpecId,0,-1, p_order ASC );
foreach($arrSpecName as $specItem){
$goodsSpec[ specification ][ spec_name ][$specItem[ spec_id ]] = $specItem[ spec_name ];
$goodsSpec[ specification ][ spec_type ][$specItem[ spec_id ]] = $specItem[ spec_type ];
}
$goodsSpec[ specification ][ spec_count ] = count($goodsSpec[ specification ][ spec_name ]);
$goodsSpec[ goods ] = $aGoods[ spec_desc ];
// 当今产品的规格型号信息内容
$goodsSpec[ product ] = $aGoods[ product ][ spec_desc ][ spec_private_value_id ];
foreach($products as $row){
$products_spec = $row[ spec_desc ][ spec_private_value_id ];
$diff_class = array_diff_assoc( $products_spec, $goodsSpec[ product ] );//求出当今货物和别的货物规格型号的差集
if(count($diff_class) === 1){
$goodsSpec[ goods ][key($diff_class)][current($diff_class)][ product_id ] = $row[ product_id ];
$goodsSpec[ goods ][key($diff_class)][current($diff_class)][ marketable ] = $row[ marketable ];
if($row[ store ] === || $row[ store ] === null){
$product_store = 999999
}else{
$product_store = $row[ store ]-$row[ freez ];
}
$goodsSpec[ goods ][key($diff_class)][current($diff_class)][ store ] = $product_store;
}
}
}
return $goodsSpec;
}

这一便是依据大家传到当今的规格型号来清查有关的规格型号的实际值,这一当今值有2个情况:一个是全是沒有,也没有,那麼过虑出去的规格型号便是所有的型号规格值了,一个是独立的规格型号不一样的情况。

这一地区最好画一幅图,便捷自身了解噢。

ecstore_spec

仿写结束,那麼大家就必须启用,在前台接待全部的步骤应当是,当我们点一下一个规格型号时,那麼这一规格型号的值立即递交帮我后台管理解决,鉴别这时应当显示信息的规格型号的

/*
* 2016.01.13 ChinaBUG
* 依据GID获得所有规格型号,并依照规格型号获得所有的情况
*/
function ajax_get_spec_all( $goods_id ){
$this- _response- set_header( Cache-Control , no-store, no-cache );
$f_goods = goods_id,spec_desc
$aGoods = app::get( b2c )- model( goods )- getrow( $f_goods, array( goods_id = $goods_id) );
$f_pro = product_id,spec_desc,store,freez,marketable
$products = app::get( b2c )- model( products )- getList( $f_pro, array( goods_id = $aGoods[ goods_id ]) );

$spec_param = $_POST[ p ]?$_POST[ p ]:$_GET[ p ];
$spec_check = false;//设置假定入录的规格型号数据信息全是不正确的

// 多规格型号信息内容
foreach($aGoods[ spec_desc ] as $specId= $specValue){
$arrSpecId[ spec_id ][] = $specId;
}
$arrSpecName = app::get( b2c )- model( specification )- getList( spec_name,spec_id,spec_type ,$arrSpecId,0,-1, p_order ASC );
foreach($arrSpecName as $specItem){
$goodsSpec[ specification ][ spec_name ][$specItem[ spec_id ]] = $specItem[ spec_name ];
$goodsSpec[ specification ][ spec_type ][$specItem[ spec_id ]] = $specItem[ spec_type ];
}
//
$aGoods[ product ][ spec_desc ][ spec_private_value_id ] = $spec_param;//在这里边键入大家当今的规格型号的唯一编号
$tmp_goods_spec = $this- _get_goods_spec_two( $aGoods );
// 查验键入的规格型号值是不是存有,不会有则必须显示信息所有的规格型号值
// 分两步
// 1.如今规格型号内查验规格型号的序号是不是存有
// 2.查验规格型号的值是不是存有
foreach( $tmp_goods_spec[ goods ] as $gskey= $gsVal ){
if( isset($spec_param[ $gskey ]) in_array($spec_param[ $gskey ], array_keys($gsVal)) ){
$spec_check = true;
}
foreach($gsVal as $gsKey2= $gsVal2){
$JSON[ goods ][ $gskey ][ $gsKey2 ] = array(
product_id = $gsVal2[ product_id ]?$gsVal2[ product_id ]:0,
marketable = $gsVal2[ marketable ]?$gsVal2[ marketable ]:0,
store       = $gsVal2[ store ]?$gsVal2[ store ]:0,
);
}
}
//
$JSON[ isexist ] = $goodsSpec[ specification ][ isexist ] = !$spec_check; // 假如true 则必须在主视图那里显示信息所有
echo json_encode($JSON);
exit;
}

随后,大家就必须在前台接待主视图上做一下更新改造了,请先开启/app/b2c/view/site/product/文档,随后改成以下:

div id= product_spec > ul > {foreach from=$page_product_basic.spec.goods key=key item=spec}
li > span > span > ul > {foreach from=$spec key=item_key item=item}
{if $item_key == $page_product_basic.spec.product.$key || $item.product_id}
li > {if $item_key!=$page_product_basic.spec.product.$key $item.store 1} div > {if $item_key==$page_product_basic.spec.product.$key}
a href= javascript:void(0);
{elseif $item.product_id}
a href= {link app=b2c ctl=site_product act=index arg0=$item.product_id} rel= {$item.product_id}
{/if}
{if $page_product_basic.spec.specification.spec_type.$key == image }
img src= {$item.spec_image|storager: s } alt= {$item.spec_value} title= {$item.spec_value}
{else}
span {$item.spec_value} /span
{/if}
i /i
/a
/li
{/if}
{/foreach}
/ul
/span
/li
{/foreach}
/ul
/div

升级2016.04.14 改动以前程序出現的不正确,不可以无更新加载,也有便是不可以显示信息所有的规格型号并依照组成全自动掩藏

**************************

div id= product_spec > ul > {foreach from=$page_product_basic.spec.goods key=key item=spec}
li > span > span > ul > {foreach from=$spec key=item_key item=item}
{* ($item.store 0)*}
{*if ($item_key == $page_product_basic.spec.product.$key || $item.product_id)*}
li > {if $item_key!=$page_product_basic.spec.product.$key $item.store 1} div > {if $item_key==$page_product_basic.spec.product.$key}
a href= javascript:void(0); data-select= true rel= {$page_product_basic.product_id}
{elseif $item.product_id}
a href= {if $item.store 0} {link app=b2c ctl=site_product act=index arg0=$item.product_id} {else} javascript:void(0); {/if} rel= {$item.product_id} data-store= {$item.store|default:0}
{else}
a href= javascript:void(0); rel= {$item.product_id}
{/if}
{if $page_product_basic.spec.specification.spec_type.$key == image }
img src= {$item.spec_image|storager: s } alt= {$item.spec_value} title= {$item.spec_value} span {$item.spec_value} /span
{else}
span {$item.spec_value} /span
{/if}
i /i
/a
div > div > ! img > img > /div
div > /div
/li
{*/if*}
{/foreach}
/ul
/span
/li
{/foreach}
/ul
/div

**************************

更新改造主视图文档关键是以便要我们在JS中启用大家必须的数据信息并依照大家预置的构造键入輸出数据信息。

下边请开启/app/b2c/view/site/文档,随后寻找    click:relay(.spec-attr) : function(e){ 所属部位,下边提升编码以下:

        // 限定的规格型号不是容许实际操作的
if(this.hasClass( ecs-not-store )){
e.preventDefault();
return;
}
// 当今早已挑选的,点一下后撤销挑选,再次分派规格型号情况
if(this.hasClass( selected )){
this.removeClass( selected );
renderLayout();
return;
}
// 查验是不是同一个规格型号好几个值
var liObj = this.getParent( ul.clearfix ).getChildren( li.selected );
if( !this.hasClass( selected ) liObj.length 0 ){
liObj.erase(this).removeClass( selected );
this.addClass( selected );
}
// 当当网前规格型号沒有挑选的情况,点一下当今规格型号产品再次挑选则立即提升挑选款式,不做别的解决
if( liObj.length==0 this.getChildren( a ).get( href )== javascript:void(0); ) {
this.addClass( selected );
renderLayout();
return;
}
// 当今所有沒有挑选,点一下一个以后
var ulObj = this.getParent( ul.spec-area ).getChildren( li.selected );
if( ulObj.length == 0 ){
this.addClass( selected );
renderLayout();
return;
}

升级2016.04.14 改动以前程序出現的不正确,不可以无更新加载,也有便是不可以显示信息所有的规格型号并依照组成全自动掩藏

**************************

// 限定的规格型号不是容许实际操作的
if(this.hasClass( ecs-not-store )){
e.preventDefault();
return;
}
// 当今早已挑选的,点一下后撤销挑选,再次分派规格型号情况
if(this.hasClass( selected )){
this.removeClass( selected );
renderLayout();
return;
}
// 查验是不是同一个规格型号好几个值
var liObj = this.getParent( ul.clearfix ).getChildren( li.selected );
if( !this.hasClass( selected ) liObj.length 0 ){
liObj.erase(this).removeClass( selected );
this.addClass( selected );
// ??
//renderLayout();
//return;
}
// 当当网前规格型号沒有挑选的情况,点一下当今规格型号产品再次挑选则立即提升挑选款式,不做别的解决
if( liObj.length==0 this.getChildren( a ).get( href )== javascript:void(0); ) {
this.addClass( selected );
renderLayout();
return;
}
// 当今所有沒有挑选,点一下一个以后
var ulObj = this.getParent( ul.spec-area ).getElements( li.selected );
if( ulObj.length == 0 ){
this.addClass( selected );
renderLayout();
return;
}

**************************
升级2016.04.22 改动以前程序出現的不正确,假如挑选一个规格型号的情况下,库存量0的都是被限定不愿挑选,导致同一类的不能二次点一下,还必须点一下撤销才能够挑选别的规格型号值,这一解决以后也不必须多此一举了。

**************************

// 限定的规格型号不是容许实际操作的
if(this.hasClass( ecs-not-store )){
e.preventDefault();
return;
}
// 当今早已挑选的,点一下后撤销挑选,再次分派规格型号情况
if(this.hasClass( selected )){
this.removeClass( selected );
renderLayout();
return;
}
// 查验是不是同一个规格型号好几个值
var liObj = this.getParent( ul.clearfix ).getChildren( li.selected );
if( !this.hasClass( selected ) liObj.length>0 ){
liObj.erase(this).removeClass( selected );
this.addClass( selected );
// 2016.04.22
renderLayout();
console.log( 查验是不是同一个规格型号好几个值 );
return;
}
// 当当网前规格型号沒有挑选的情况,点一下当今规格型号产品再次挑选则立即提升挑选款式,不做别的解决
if( liObj.length==0 this.getChildren( a ).get( href )== javascript:void(0); ) {
this.addClass( selected );
renderLayout();
return;
}
// 当今所有沒有挑选,点一下一个以后
var ulObj = this.getParent( ul.spec-area ).getElements( li.selected );
if( ulObj.length == 0 ){
this.addClass( selected );
renderLayout();
return;
}

**************************

随后在上边随意寻个地区放上renderLayout方式就行:

/* 2016.01.15 */
function renderLayout(){
var pData=Array(),myJson;
$$( #product_spec .spec-attr.selected ).each(function(el,idx){
pData.push( p[ +el.getParent( ul.clearfix ).get( data-sp-id )+ ]= + el.get( date-spi-id ));
});
selectNum = pData.length;
myJson = new Request.HTML(
{
url: {link ctl=site_product act=ajax_get_spec_all arg0=$page_product_basic.goods_id} ,
data:pData.join( ),
ess:function(rspTree, rspEl, rspHTML, rspJS){
rspObj = JSON.decode(rspHTML);
if(rspObj[ isexist ]){
var obj = $( product_spec );
var obj2 = obj.getElements( .spec-attr.ecs-not-store .product-not-allowed );
if( obj2[0] != undefined ){
obj2[0].getParent( .ecs-not-store ).removeClass( ecs-not-store );
obj2[0].destroy();
}
}
Object.each(rspObj[ goods ],function(item,idx){
Object.each(item,function(subitem,subidx){
var href = javascript:void(0);
var li = $( sp_ +idx+ _ +subidx );
if( li == null ) return;
li_a = li.getChildren( a )[0];

li_a.set( href ,href).set( data-store ,subitem.store);
if( (subitem.product_id==0 li.hasClass( ecs-not-store )) || (subitem.store 0 subitem.product_id 0) ){
li.removeClass( ecs-not-store );
if(li.getNext( product-not-allowed )!=null) li.getNext( product-not-allowed ).destroy();
}else if( subitem.store==0 subitem.product_id 0 ){
li.addClass( ecs-not-store );
(new Elements( div#product-not-allowed )).inject( li.getNext( a ), top );
}
});
});
if(selectNum!=specTotal){
$( product-action ).getElements( .product-buy-quantity .p-store ).set( html , );
}
}
}).post();
}

升级2016.04.14 改动以前程序出現的不正确,不可以无更新加载,也有便是不可以显示信息所有的规格型号并依照组成全自动掩藏

**************************

// 2016.04.14 ChinaBUG
function renderLayout(){
var pData=Array(),myJson;
$$( #product_spec .spec-attr.selected ).each(function(el,idx){
pData.push( p[ +el.getParent( ul.clearfix ).get( data-sp-id )+ ]= + el.get( date-spi-id ));
});
selectNum = pData.length;
// console.log( pData : + pData.join( ));
// console.log( pData LENGTH : + selectNum);
myJson = new Request.HTML(
{
url: {link ctl=site_product act=ajax_get_spec_all arg0=$page_product_basic.goods_id} ,
data:pData.join( ),
ess:function(rspTree, rspEl, rspHTML, rspJS){
rspObj = JSON.decode(rspHTML);
// console.log( START +rspObj[ isexist ]);
if(rspObj[ isexist ]){
var obj = $( product_spec );
// var obj2 = obj.getElements( .spec-attr .product-not-allowed );
var obj2 = obj.getElements( .spec-attr );
// console.log( .spec-attr : + obj2.length);
obj2.each(function(ele,index){
// console.log(ele+ +index);
ele.removeClass( ecs-not-store );
// console.log( getChildren : +  ele.getChildren( a ).length);
ele.getChildren( a ).set( href , javascript:void(0); );

});
return true;
}
//步骤:
// 1.先设定连接
// 2.假如沒有库存量则查验是不是有.product-not-allowed,沒有提升
// 3.有库存量则删掉.product-not-allowed
Object.each(rspObj[ goods ],function(item,idx){
Object.each(item,function(subitem,subidx){
var href = javascript:void(0); ,rel=
// console.log( 当今实际操作的ID : + sp_ +idx+ _ +subidx);
var li = $( sp_ +idx+ _ +subidx );
// console.log( li );
if( (li == null) || (typeof(li)== undefined ) ) return;
li_a = li.getChildren( a )[0];
if( (li_a == null) || (typeof(li_a)== undefined ) ) return;
// 有库存量且并不是当今规格型号值则授予新的产品连接
if(subitem.product_id 0) {

rel = subitem.product_id;
}else{
href = javascript:void(0);
rel =
}
li_a.set( href ,href).set( rel ,rel).set( data-store ,subitem.store);
// 沒有产品编号的解决,默认设置立即打开
console.log( +subitem);
if( li.hasClass( selected ) ){
li.removeClass( ecs-not-store );
}else if( (subitem.product_id==0 subitem.marketable==0 subitem.store==0) || (subitem.store==0 subitem.product_id 0)  ){//(subitem.store==0)
li.addClass( ecs-not-store );
(new Elements( div#product-not-allowed )).inject( li.getNext( a ), top );
}else if( (subitem.product_id==0 li.hasClass( ecs-not-store )) || (subitem.store 0 subitem.product_id 0) || (subitem.product_id 0 subitem.marketable== true ) ){
li.removeClass( ecs-not-store );
if(li.getNext( product-not-allowed )!=null) li.getNext( product-not-allowed ).destroy();
}
// (subitem.product_id 0) ||
//
console.log( idx + + subidx + + subitem.product_id + + subitem.store );
});
});
// 依据具体设定库存量:规格型号挑选不详细则库存量值清除
if(selectNum!=specTotal){
$( product-action ).getElements( .product-buy-quantity .p-store ).set( html , );
}
// console.log( END );
}
}).post();
}

**************************
升级2016.04.22 改动以前程序出現的不正确,假如挑选一个规格型号的情况下,库存量0的都是被限定不愿挑选,导致同一类的不能二次点一下,还必须点一下撤销才能够挑选别的规格型号值,这一解决以后也不必须多此一举了。

**************************

/* 2016.04.22 */
function renderLayout(){
var pData=Array(),myJson;
$$( #product_spec .spec-attr.selected ).each(function(el,idx){
pData.push( p[ +el.getParent( ul.clearfix ).get( data-sp-id )+ ]= + el.get( date-spi-id ));
});
selectNum = pData.length;
// console.log( pData : + pData.join( ));
// console.log( pData LENGTH : + selectNum);
myJson = new Request.HTML(
{
url: ,
data:pData.join( ),
ess:function(rspTree, rspEl, rspHTML, rspJS){
rspObj = JSON.decode(rspHTML);
// console.log( START +rspObj[ isexist ]);
if(rspObj[ isexist ]){
var obj = $( product_spec );
// var obj2 = obj.getElements( .spec-attr .product-not-allowed );
var obj2 = obj.getElements( .spec-attr );
// console.log( .spec-attr : + obj2.length);
obj2.each(function(ele,index){
// console.log(ele+ +index);
ele.removeClass( ecs-not-store );
// console.log( getChildren : + ele.getChildren( a ).length);
ele.getChildren( a ).set( href , javascript:void(0); );

});
return true;
}
//步骤:
// 1.先设定连接
// 2.假如沒有库存量则查验是不是有.product-not-allowed,沒有提升
// 3.有库存量则删掉.product-not-allowed
Object.each(rspObj[ goods ],function(item,idx){
Object.each(item,function(subitem,subidx){
var href = javascript:void(0); ,rel=
// console.log( 当今实际操作的ID : + sp_ +idx+ _ +subidx);
var li = $( sp_ +idx+ _ +subidx );
// console.log( li );
if( (li == null) || (typeof(li)== undefined ) ) return;
li_a = li.getChildren( a )[0];
if( (li_a == null) || (typeof(li_a)== undefined ) ) return;
// 有库存量且并不是当今规格型号值则授予新的产品连接
if(subitem.product_id>0) {

rel = subitem.product_id;
}else{
href = javascript:void(0);
rel =
}
li_a.set( href ,href).set( rel ,rel).set( data-store ,subitem.store);
// 沒有产品编号的解决,默认设置立即打开
console.log( >> +subitem);
if( li.hasClass( selected ) ){
li.removeClass( ecs-not-store );
}else if( (subitem.product_id==0 subitem.marketable==0 subitem.store==0) || (subitem.store==0 subitem.product_id>0) ){//(subitem.store==0)
li.addClass( ecs-not-store );
(new Elements( div#product-not-allowed )).inject( li.getNext( a ), top );
}else if( (subitem.product_id==0 li.hasClass( ecs-not-store )) || (subitem.store>0 subitem.product_id>0) || (subitem.product_id>0 subitem.marketable== true ) ){
li.removeClass( ecs-not-store );
if(li.getNext( product-not-allowed )!=null) li.getNext( product-not-allowed ).destroy();
}
// (subitem.product_id>0) ||
//
console.log( idx + + subidx + + subitem.product_id + + subitem.store );
});
});
// 2016.04.22 ChinaBUG 查验规格型号中,假如仅有一个规格型号有挑选得话,则,有挑选的哪一个规格型号的别的不可以挑选的新项目都开启
var selects = $$( .spec-area .spec-item li.selected );
if( selects.length==1 ){
selects[0].getParent( .clearfix ).getChildren( li ).removeClass( ecs-not-store );
}
// 依据具体设定库存量:规格型号挑选不详细则库存量值清除
if(selectNum!=specTotal){
$( product-action ).getElements( .product-buy-quantity .p-store ).set( html , );
}
// console.log( END );
}
}).post();
}
**************************

储存,下班,检测一下,便会发觉难题处理了~但是这一改动会导致宣传单页的再次加载,本来的加载是觉得不上更新的,如今这一改动一下便会发觉,宣传单页运用的编码被忽视了,编码部位便是下边的:

备注名称:2016.04.14 这一难题在后边的版本号早已更改。

if (window.history history.pushState) { }

必须做一些解决,時间比较有限也不解决了,大伙儿有时间自身解决,解决好就通告我呗。谢谢~

注:写完这一改动,才发觉自身对脚本制作的操控工作能力很差,年之后再说好好地再次学习培训一一下吧,有提升的朋友能够给一份否?^_^

下一篇:没有了

推荐阅读

ECStore二次开发设计随笔之13.仿天猫商城商城系统

虫神曰:近期CEO非常心烦,便是由于ECSTORE这一系统软件呀,没法跟天猫商城一样,挑选的产品没法撤销,由于大家的产品均全是低库存量的,也便是有的火热型号规格的库存量量会非常...

2021-04-04
网站建设六种设计方案合理布局剖析

伴随着互连网的发展趋势和发展,对企业网站建设的规定越来越越严苛。企业网站建设设计方案合理布局的整体规定是啥?大家应当从哪儿设计方案?下列六点剖析由福州市德撆高新科...

2021-04-04
家居家具灯饰挑选方法 你装正确了吗?

在家里装中,针对灯光效果设计方案,许多人第一反映是“没必需”,但商丘健铭装饰设计网编觉得,灯饰是家居家具软装设计关键的构成一部分,它不但为家居家具日常生活出示照明...

2021-04-04
网络商城如何推广-怎样给你的手机微信微信公众

微信营销活动越来越成为许多企业和个人宣传推广的选择。微信营销活动一般是借助公众号作为营销的平台,那么微信公众号粉丝的数量就决定了营销的效果。如何才能让你的公众号迅...

2021-04-04
dedecms公布文章内容时不可以免费下载远程控制照

本网站技术性精英团队七年织梦cmsCMS及王国仿站、二次开发设计工作经验。有着平稳的设计方案精英团队和技术性精英团队,确保您的售后服务技术性服务。仿站最少20零元,热烈欢迎...

2021-04-04
r10荼叶网站源代码 纯粮酒公司网站模版 古典网站

安裝表明:将缩小包传至室内空间,缓解压力至网站根目录,“网站域名/install” 开展安裝,安裝结束进到后台管理复原数据信息。复原完就和演试站是一样的。模版详细介绍:FK模版...

2021-04-03
X

400-8700-61718720358503
企业邮箱2639601583@qq.com
官方微信