diff --git a/app/appadmin/modules/Catalog/block/productinfo/index/BatchAttr.php b/app/appadmin/modules/Catalog/block/productinfo/index/BatchAttr.php
new file mode 100644
index 0000000000000000000000000000000000000000..1afc20b3aca67ec002184209861dc4596075fd4d
--- /dev/null
+++ b/app/appadmin/modules/Catalog/block/productinfo/index/BatchAttr.php
@@ -0,0 +1,373 @@
+
+ * @since 1.0
+ */
+class BatchAttr
+{
+ protected $_currentAttrGroup;
+ protected $_attrInfo;
+ /**
+ * 为了可以使用rewriteMap,use 引入的文件统一采用下面的方式,通过Yii::mapGet()得到className和Object
+ */
+ protected $_productHelperName = '\fecshop\app\appadmin\modules\Catalog\helper\Product';
+ protected $_productHelper;
+
+ public function __construct($one)
+ {
+ /**
+ * 通过Yii::mapGet() 得到重写后的class类名以及对象。Yii::mapGet是在文件@fecshop\yii\Yii.php中
+ */
+ list($this->_productHelperName,$this->_productHelper) = Yii::mapGet($this->_productHelperName);
+
+ $currentAttrGroup = CRequest::param('attr_group');
+ if ($currentAttrGroup) {
+ $this->_currentAttrGroup = $currentAttrGroup;
+ } elseif (isset($one['attr_group']) && $one['attr_group']) {
+ $this->_currentAttrGroup = $one['attr_group'];
+ } else {
+ $this->_currentAttrGroup = Yii::$service->product->getDefaultAttrGroup();
+ }
+
+ Yii::$service->product->addGroupAttrs($this->_currentAttrGroup);
+ }
+
+ public function getGroupAttr()
+ {
+ if (!$this->_attrInfo) {
+ $this->_attrInfo = Yii::$service->product->getGroupAttrInfo($this->_currentAttrGroup);
+ }
+
+ return $this->_attrInfo;
+ }
+
+ public function getGroupGeneralAttr()
+ {
+ return Yii::$service->product->getGroupGeneralAttr($this->_currentAttrGroup);
+ }
+
+ public function getGroupSpuAttr()
+ {
+ return Yii::$service->product->getGroupSpuAttr($this->_currentAttrGroup);
+ }
+
+ public function getProductAttrGroupSelect()
+ {
+ $attrGroup = Yii::$service->product->getCustomAttrGroup();
+ $str = '';
+ if (is_array($attrGroup) && !empty($attrGroup)) {
+ $str .= '';
+ }
+
+ return $str;
+ }
+
+ public function getRelationInfo()
+ {
+ return [
+ [
+ 'label' => Yii::$service->page->translate->__('SKU of related products (comma separated)'),
+ 'name' => 'relation_sku',
+ 'display' => [
+ 'type' => 'inputString',
+ ],
+ 'require' => 0,
+ ],
+ [
+ 'label' => Yii::$service->page->translate->__('Bought also bought sku (comma separated)'),
+ 'name' => 'buy_also_buy_sku',
+ 'display' => [
+ 'type' => 'inputString',
+ ],
+ 'require' => 0,
+ ],
+ [
+ 'label' => Yii::$service->page->translate->__('Saw also saw sku (comma separated)'),
+ 'name' => 'see_also_see_sku',
+ 'display' => [
+ 'type' => 'inputString',
+ ],
+ 'require' => 0,
+ ],
+
+ ];
+ }
+
+ public function getBaseInfo()
+ {
+ return [
+ [
+ 'label' => Yii::$service->page->translate->__('Product Name'),
+ 'name' => 'name',
+ 'display' => [
+ 'type' => 'inputString',
+ 'lang' => true,
+ ],
+ 'require' => 1,
+ ],
+ [
+ 'label' => Yii::$service->page->translate->__('Spu'),
+ 'name' => 'spu',
+ 'display' => [
+ 'type' => 'inputString',
+ 'lang' => false,
+ ],
+ 'require' => 1,
+ ],
+ [
+ 'label' => Yii::$service->page->translate->__('Long (CM)'),
+ 'name' => 'long',
+ 'display' => [
+ 'type' => 'inputString',
+ 'lang' => false,
+ ],
+ 'require' => 0,
+ ],
+ [
+ 'label' => Yii::$service->page->translate->__('Width (CM)'),
+ 'name' => 'width',
+ 'display' => [
+ 'type' => 'inputString',
+ 'lang' => false,
+ ],
+ 'require' => 0,
+ ],
+ [
+ 'label' => Yii::$service->page->translate->__('High (CM)') ,
+ 'name' => 'high',
+ 'display' => [
+ 'type' => 'inputString',
+ 'lang' => false,
+ ],
+ 'require' => 0,
+ ],
+ [
+ 'label' => '' . Yii::$service->page->translate->__('Volume weight (Kg) {link_a} Formula {link_b} ', [ 'link_a' => '' , 'link_b' => '' ]) . '' ,
+ 'name' => 'volume_weight',
+ 'display' => [
+ 'type' => 'inputString',
+ 'lang' => false,
+ ],
+ 'require' => 0,
+ ],
+ [
+ 'label' => Yii::$service->page->translate->__('Weight (KG)'),
+ 'name' => 'weight',
+ 'display' => [
+ 'type' => 'inputString',
+ 'lang' => false,
+ ],
+ 'require' => 0,
+ ],
+ [
+ 'label' => Yii::$service->page->translate->__('Score'),
+ 'name' => 'score',
+ 'display' => [
+ 'type' => 'inputString',
+ 'lang' => false,
+ ],
+ 'require' => 0,
+ ],
+ [
+ 'label' => Yii::$service->page->translate->__('Status'),
+ 'name' => 'status',
+ 'display' => [
+ 'type' => 'select',
+ 'data' => $this->_productHelper->getStatusArr(),
+ ],
+ 'require' => 1,
+ 'default' => 1,
+ ],
+ [
+ 'label' => Yii::$service->page->translate->__('New Product Begin'),
+ 'name' => 'new_product_from',
+ 'display' => [
+ 'type' => 'inputDate',
+ ],
+ 'require' => 0,
+ ],
+ [
+ 'label' => Yii::$service->page->translate->__('New Product End'),
+ 'name' => 'new_product_to',
+ 'display' => [
+ 'type' => 'inputDate',
+ ],
+ 'require' => 0,
+ ],
+ [
+ 'label' => Yii::$service->page->translate->__('Url Key'),
+ 'name' => 'url_key',
+ 'display'=>[
+ 'type' => 'inputString',
+ ],
+ 'require' => 0,
+ ],
+ [
+ 'label' => Yii::$service->page->translate->__('Package sales qty'),
+ 'name' => 'package_number',
+ 'display' => [
+ 'type' => 'inputString',
+ ],
+ 'require' => 0,
+ ],
+ [
+ 'label' => Yii::$service->page->translate->__('Min sale qty'),
+ 'name' => 'min_sales_qty',
+ 'display' => [
+ 'type' => 'inputString',
+ ],
+ 'require' => 0,
+ ],
+ [
+ 'label' => Yii::$service->page->translate->__('Stock Status'),
+ 'name' => 'is_in_stock',
+ 'display'=>[
+ 'type' => 'select',
+ 'data' => $this->_productHelper->getInStockArr(),
+ ],
+ 'require' => 1,
+ 'default' => 1,
+ ],
+ [
+ 'label' => Yii::$service->page->translate->__('Remark'),
+ 'name' => 'remark',
+ 'display' => [
+ 'type' => 'inputString',
+ ],
+ 'require' => 0,
+ ],
+ ];
+ }
+
+ public function getPriceInfo()
+ {
+ return [
+ [
+ 'label' => Yii::$service->page->translate->__('Cost Price'),
+ 'name' => 'cost_price',
+ 'display' => [
+ 'type' => 'inputString',
+ ],
+ 'require' => 0,
+ ],
+
+ [
+ 'label' => Yii::$service->page->translate->__('Special Price'),
+ 'name' => 'special_price',
+ 'display' => [
+ 'type' => 'inputString',
+ ],
+ 'require' => 0,
+ ],
+ [
+ 'label' => Yii::$service->page->translate->__('Special Begin'),
+ 'name' => 'special_from',
+ 'display'=>[
+ 'type' => 'inputDateTime',
+ ],
+ 'require' => 0,
+ ],
+ [
+ 'label' => Yii::$service->page->translate->__('Special End'),
+ 'name' => 'special_to',
+ 'display'=>[
+ 'type' => 'inputDateTime',
+ ],
+ 'require' => 0,
+ ],
+ ];
+ }
+
+ public function getMetaInfo()
+ {
+ return [
+ [
+ 'label' => Yii::$service->page->translate->__('Meta Title'),
+ 'name' => 'meta_title',
+ 'display' => [
+ 'type' => 'inputString',
+ 'lang' => true,
+ ],
+ 'require' => 0,
+ ],
+ [
+ 'label' => Yii::$service->page->translate->__('Meta Keywords'),
+ 'name' => 'meta_keywords',
+ 'display'=>[
+ 'type' => 'inputString',
+ 'lang' => true,
+ ],
+ 'require' => 0,
+ ],
+ [
+ 'label' => Yii::$service->page->translate->__('Meta Description'),
+ 'name' => 'meta_description',
+ 'display' => [
+ 'type' => 'textarea',
+ 'notEditor' => true,
+ 'lang' => true,
+ 'rows' => 14,
+ 'cols' => 100,
+ ],
+ 'require' => 0,
+ ],
+ ];
+ }
+
+ public function getDescriptionInfo()
+ {
+ return [
+ [
+ 'label' => Yii::$service->page->translate->__('Short Description') ,
+ 'name' => 'short_description',
+ 'display' => [
+ 'type' => 'textarea',
+ 'lang' => true,
+ 'rows' => 14,
+ 'cols' => 100,
+ ],
+ 'require' => 0,
+ ],
+ [
+ 'label' => Yii::$service->page->translate->__('Description {b} Require {e}', ['b' => ' (' , 'e' => ')']) ,
+ 'name' => 'description',
+ 'display' => [
+ 'type' => 'textarea',
+ 'lang' => true,
+ 'rows' => 14,
+ 'cols' => 100,
+ ],
+ 'require' => 1,
+ ],
+ ];
+ }
+
+ public function getCatalogInfo()
+ {
+ return [];
+ }
+}