作者 SHW\戥岁。。

折扣变化

正在显示 26 个修改的文件 包含 4792 行增加26 行删除

要显示太多修改。

为保证性能只显示 26 of 26+ 个文件。

  1 +<?php
  2 +
  3 +namespace app\admin\controller\activity_goods;
  4 +
  5 +use app\admin\model\litestore\Litestoregoodsspec;
  6 +use app\common\controller\Backend;
  7 +use app\admin\model\litestore\Litestorespec as SpecModel;
  8 +use app\admin\model\litestore\Litestorespecvalue as SpecValueModel;
  9 +use PhpOffice\PhpSpreadsheet\Cell\Coordinate;
  10 +use PhpOffice\PhpSpreadsheet\Reader\Csv;
  11 +use PhpOffice\PhpSpreadsheet\Reader\Xls;
  12 +use PhpOffice\PhpSpreadsheet\Reader\Xlsx;
  13 +use think\Db;
  14 +use think\exception\PDOException;
  15 +
  16 +
  17 +/**
  18 + *
  19 + *
  20 + * @icon fa fa-circle-o
  21 + */
  22 +class ImportGoods extends Backend
  23 +{
  24 + private $SpecModel;
  25 + private $SpecValueModel;
  26 + /**
  27 + * Litestoregoods模型对象
  28 + * @var \app\admin\model\litestore\Litestoregoods
  29 + */
  30 + protected $model = null;
  31 + protected $spec_model = null;
  32 +// protected $searchFields = 'category.name';
  33 +
  34 + public function _initialize()
  35 + {
  36 + parent::_initialize();
  37 + $this->SpecModel = new SpecModel;
  38 + $this->SpecValueModel = new SpecValueModel;
  39 +
  40 + $this->model = new \app\admin\model\litestore\Litestoregoods;
  41 + $this->spec_model = new \app\admin\model\litestore\Litestoregoodsspec();
  42 + $this->view->assign("specTypeList", $this->model->getSpecTypeList());
  43 + $this->view->assign("deductStockTypeList", $this->model->getDeductStockTypeList());
  44 + $this->view->assign("goodsStatusList", $this->model->getGoodsStatusList());
  45 + $this->view->assign("isDeleteList", $this->model->getIsDeleteList());
  46 + $this->view->assign("makeforList", $this->model->getMakeforList());
  47 + $this->view->assign("isIndexList", $this->model->getIsIndexList());
  48 +
  49 + $this->view->assign("spec_attr", '');
  50 + $this->view->assign("spec_list", '');
  51 + }
  52 +
  53 + /**
  54 + * 默认生成的控制器所继承的父类中有index/add/edit/del/multi五个基础方法、destroy/restore/recyclebin三个回收站方法
  55 + * 因此在当前控制器中可不用编写增删改查的代码,除非需要自己控制这部分逻辑
  56 + * 需要将application/admin/library/traits/Backend.php中对应的方法复制到当前控制器,然后进行修改
  57 + */
  58 +
  59 +
  60 + /**
  61 + * 查看
  62 + */
  63 + public function index()
  64 + {
  65 + //当前是否为关联查询
  66 + $this->relationSearch = true;
  67 + //设置过滤方法
  68 + $this->request->filter(['strip_tags']);
  69 + if ($this->request->isAjax()) {
  70 + //如果发送的来源是Selectpage,则转发到Selectpage
  71 + if ($this->request->request('keyField')) {
  72 + return $this->selectpage();
  73 + }
  74 + list($where, $sort, $order, $offset, $limit) = $this->buildparams("category.name",true);
  75 + $total = $this->model
  76 + ->with(['category', 'activity'])
  77 + ->where($where)
  78 + ->where('activity_id',3)
  79 + ->order($sort, $order)
  80 + ->count();
  81 +
  82 + $list = $this->model
  83 + ->with(['category', 'activity'])
  84 + ->where($where)
  85 + ->where('activity_id',3)
  86 + ->order($sort, $order)
  87 + ->limit($offset, $limit)
  88 + ->select();
  89 +
  90 + foreach ($list as $row) {
  91 +
  92 + $row->getRelation('category')->visible(['name']);
  93 + $row->getRelation('activity')->visible(['name']);
  94 +// $row->getRelation('freight')->visible(['name']);
  95 + $row->stock_num = Litestoregoodsspec::where('goods_id', $row['goods_id'])->sum('stock_num');
  96 + }
  97 + $list = collection($list)->toArray();
  98 + $result = array("total" => $total, "rows" => $list);
  99 +
  100 + return json($result);
  101 + }
  102 + $this->assign('template', $this->request->domain() . '/static/template/商品导入模板.xlsx');
  103 +
  104 + return $this->view->fetch();
  105 + }
  106 +
  107 + public function addSpec($spec_name, $spec_value)
  108 + {
  109 + // 判断规格组是否存在
  110 + if (!$specId = $this->SpecModel->getSpecIdByName($spec_name)) {
  111 + // 新增规格组and规则值
  112 + if ($this->SpecModel->add($spec_name)
  113 + && $this->SpecValueModel->add($this->SpecModel['id'], $spec_value))
  114 + return $this->success('', '', [
  115 + 'spec_id' => (int)$this->SpecModel['id'],
  116 + 'spec_value_id' => (int)$this->SpecValueModel['id'],
  117 + ]);
  118 + return $this->error();
  119 + }
  120 + //return ;
  121 + // 判断规格值是否存在
  122 + if ($specValueId = $this->SpecValueModel->getSpecValueIdByName($specId, $spec_value)) {
  123 + return $this->success('', '', [
  124 + 'spec_id' => (int)$specId,
  125 + 'spec_value_id' => (int)$specValueId,
  126 + ]);
  127 + }
  128 + // 添加规则值
  129 + if ($this->SpecValueModel->add($specId, $spec_value))
  130 + return $this->success('', '', [
  131 + 'spec_id' => (int)$specId,
  132 + 'spec_value_id' => (int)$this->SpecValueModel['id'],
  133 + ]);
  134 + return $this->error();
  135 + }
  136 +
  137 +
  138 + /**
  139 + * 添加规格值
  140 + */
  141 + public function addSpecValue($spec_id, $spec_value)
  142 + {
  143 + // 判断规格值是否存在
  144 + if ($specValueId = $this->SpecValueModel->getSpecValueIdByName($spec_id, $spec_value)) {
  145 + return $this->success('', '', [
  146 + 'spec_value_id' => (int)$specValueId,
  147 + ]);
  148 + }
  149 + // 添加规则值
  150 + if ($this->SpecValueModel->add($spec_id, $spec_value))
  151 + return $this->success('', '', [
  152 + 'spec_value_id' => (int)$this->SpecValueModel['id'],
  153 + ]);
  154 + return $this->error();
  155 + }
  156 +
  157 + /**
  158 + * 添加
  159 + */
  160 + public function add()
  161 + {
  162 + if ($this->request->isPost()) {
  163 + $params = $this->request->post("row/a");
  164 + if ($params) {
  165 + if ($this->dataLimit && $this->dataLimitFieldAutoFill) {
  166 + $params[$this->dataLimitField] = $this->auth->id;
  167 + }
  168 + if ($params['spec_type'] == '20' && !$this->request->post("spec_many/a")) {
  169 + $this->error('请添加规格');
  170 + }
  171 + try {
  172 + //是否采用模型验证
  173 + if ($this->modelValidate) {
  174 + $name = str_replace("\\model\\", "\\validate\\", get_class($this->model));
  175 + $validate = is_bool($this->modelValidate) ? ($this->modelSceneValidate ? $name . '.add' : true) : $this->modelValidate;
  176 + $this->model->validate($validate);
  177 + }
  178 + $result = $this->model->allowField(true)->save($params);
  179 + if ($result !== false) {
  180 + //成功之后 存储商品规格
  181 + $spec_many_params = $this->request->post("spec_many/a");
  182 + $this->model->addGoodsSpec($params, $spec_many_params, $this->request->post("spec/a"));
  183 + $this->success();
  184 + } else {
  185 + $this->error($this->model->getError());
  186 + }
  187 + } catch (\think\exception\PDOException $e) {
  188 + $this->error($e->getMessage());
  189 + } catch (\think\Exception $e) {
  190 + $this->error($e->getMessage());
  191 + }
  192 + }
  193 + $this->error(__('Parameter %s can not be empty', ''));
  194 + }
  195 + return $this->view->fetch();
  196 + }
  197 +
  198 + /**
  199 + * 删除
  200 + */
  201 + public function del($ids = "")
  202 + {
  203 + if ($ids) {
  204 + $pk = $this->model->getPk();
  205 + $adminIds = $this->getDataLimitAdminIds();
  206 + if (is_array($adminIds)) {
  207 + $count = $this->model->where($this->dataLimitField, 'in', $adminIds);
  208 + }
  209 + $list = $this->model->where($pk, 'in', $ids)->select();
  210 + $count = 0;
  211 + foreach ($list as $k => $v) {
  212 + // 删除商品sku
  213 + $v->removesku();
  214 +
  215 + $count += $v->delete();
  216 + }
  217 + if ($count) {
  218 + $this->success();
  219 + } else {
  220 + $this->error(__('No rows were deleted'));
  221 + }
  222 + }
  223 + $this->error(__('Parameter %s can not be empty', 'ids'));
  224 + }
  225 +
  226 + /**
  227 + * 编辑
  228 + */
  229 + public function edit($ids = NULL)
  230 + {
  231 + $row = $this->model->get($ids, ['specRel', 'spec', 'spec_rel.spec']);
  232 + if (!$row)
  233 + $this->error(__('No Results were found'));
  234 + $adminIds = $this->getDataLimitAdminIds();
  235 + if (is_array($adminIds)) {
  236 + if (!in_array($row[$this->dataLimitField], $adminIds)) {
  237 + $this->error(__('You have no permission'));
  238 + }
  239 + }
  240 + if ($this->request->isPost()) {
  241 + $params = $this->request->post("row/a");
  242 + if ($params) {
  243 + if ($params['spec_type'] == '20' && !$this->request->post("spec_many/a")) {
  244 + $this->error('请添加规格');
  245 + }
  246 + try {
  247 + //是否采用模型验证
  248 + if ($this->modelValidate) {
  249 + $name = basename(str_replace('\\', '/', get_class($this->model)));
  250 + $validate = is_bool($this->modelValidate) ? ($this->modelSceneValidate ? $name . '.edit' : true) : $this->modelValidate;
  251 + $row->validate($validate);
  252 + }
  253 + $result = $row->allowField(true)->save($params);
  254 + if ($result !== false) {
  255 + //成功之后 存储商品规格
  256 + $spec_many_params = $this->request->post("spec_many/a");
  257 + $row->addGoodsSpec($params, $spec_many_params, $this->request->post("spec/a"), true);
  258 + // 删除购物车
  259 + Db::name('cart')->where('goods_id', $row->goods_id)->delete();
  260 + //删除我常买
  261 + Db::name('user_buylist')->where('goods_id', $row->goods_id)->delete();
  262 + $this->success();
  263 + } else {
  264 + $this->error($row->getError());
  265 + }
  266 + } catch (\think\exception\PDOException $e) {
  267 + $this->error($e->getMessage());
  268 + } catch (\think\Exception $e) {
  269 + $this->error($e->getMessage());
  270 + }
  271 + }
  272 + $this->error(__('Parameter %s can not be empty', ''));
  273 + }
  274 + // 多规格信息
  275 + $specData = 'null';
  276 + if ($row['spec_type'] === '20') {
  277 + $specData = json_encode($this->model->getManySpecData($row['spec_rel'], $row['spec']));
  278 + }
  279 + $row['specData'] = $specData;
  280 + $this->view->assign("row", $row);
  281 + return $this->view->fetch();
  282 + }
  283 +
  284 +
  285 + /**
  286 + * 导出
  287 + */
  288 + public function export()
  289 + {
  290 + //1.从数据库中导出需要进行要导出的数据
  291 + $list = Db::name('litestore_goods_spec')->alias('c')
  292 + ->join('fa_litestore_goods g', 'g.goods_id = c.goods_id', 'LEFT')
  293 + ->select();
  294 + $list = collection($list)->toArray();
  295 + foreach ($list as &$item) {
  296 + $item['category_name'] = Db::name('litestore_category')->where('id', $item['category_id'])->value('name');
  297 + if (!empty($item['spec_sku_id'])) {
  298 + $sku_value = explode('_', $item['spec_sku_id']);
  299 + if (count($sku_value) > 1) {
  300 + $key = Db::name('litestore_spec_value')->where('id', $sku_value[0])->value('spec_value');
  301 + $value = Db::name('litestore_spec_value')->where('id', $sku_value[1])->value('spec_value');
  302 + $item['sku_value'] = $key . '_' . $value;
  303 + } else {
  304 + $key = Db::name('litestore_spec_value')->where('id', $sku_value[0])->value('spec_value');
  305 + $item['sku_value'] = $key;
  306 + }
  307 + } else {
  308 + $item['sku_value'] = '';
  309 + }
  310 + }
  311 + if (empty($list)) {
  312 + $this->error('没有可导出的数据');
  313 + }
  314 + //重要补助
  315 + //2.加载PHPExcle类库
  316 + vendor('PHPExcel.PHPExcel');
  317 + //3.实例化PHPExcel类
  318 + $objPHPExcel = new \PHPExcel();
  319 + //4.激活当前的sheet表
  320 + $objPHPExcel->setActiveSheetIndex(0);
  321 + //5.设置表格头(即excel表格的第一行)
  322 + $objPHPExcel->setActiveSheetIndex(0)
  323 + ->setCellValue('A1', '商品ID')
  324 + ->setCellValue('B1', '商品名称')
  325 + ->setCellValue('C1', '搜索关键词')
  326 + ->setCellValue('D1', '分类名称')
  327 + ->setCellValue('E1', '活动名称(新人用户=1,限时秒杀=2,进口商品=4)')
  328 + ->setCellValue('F1', '商品规格(10=单规格,20=多规格)')
  329 + ->setCellValue('G1', '库存')
  330 + ->setCellValue('H1', '商品规格')
  331 + ->setCellValue('I1', '商品原价')
  332 + ->setCellValue('J1', '折扣')
  333 + ->setCellValue('K1', '商品现价')
  334 + ->setCellValue('L1', '已销数量')
  335 + ->setCellValue('M1', '商品状态(10=上架,20=下架)')
  336 + ->setCellValue('N1', '首页展示(0=未展示,1=已展示)')
  337 + ->setCellValue('O1', '导出时间');
  338 + //设置A列水平居中
  339 + $objPHPExcel->setActiveSheetIndex(0)->getStyle('A1')->getAlignment()
  340 + ->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  341 + //设置单元格宽度
  342 + //6.循环刚取出来的数组,将数据逐一添加到excel表格。
  343 + $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('A')->setWidth(10);
  344 + $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('B')->setWidth(20);
  345 + $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('C')->setWidth(20);
  346 + $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('D')->setWidth(20);
  347 + $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('E')->setWidth(20);
  348 + $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('F')->setWidth(20);
  349 + $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('G')->setWidth(20);
  350 + $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('H')->setWidth(20);
  351 + $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('I')->setWidth(20);
  352 + $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('J')->setWidth(20);
  353 + $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('K')->setWidth(20);
  354 + $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('L')->setWidth(20);
  355 + $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('M')->setWidth(20);
  356 + $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('N')->setWidth(20);
  357 + $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('O')->setWidth(20);
  358 +
  359 +
  360 + for ($i = 0; $i < count($list); $i++) {
  361 + $objPHPExcel->getActiveSheet()->setCellValue('A' . ($i + 2), $list[$i]['goods_id']);//ID
  362 + $objPHPExcel->getActiveSheet()->setCellValue('B' . ($i + 2), $list[$i]['goods_name']);//商品名称
  363 + $objPHPExcel->getActiveSheet()->setCellValue('C' . ($i + 2), $list[$i]['keywords']);//商品规格
  364 + $objPHPExcel->getActiveSheet()->setCellValue('D' . ($i + 2), $list[$i]['category_name']);//原价
  365 + $objPHPExcel->getActiveSheet()->setCellValue('E' . ($i + 2), $list[$i]['activity_id']);//ID
  366 + $objPHPExcel->getActiveSheet()->setCellValue('F' . ($i + 2), $list[$i]['spec_type']);//标签码
  367 + $objPHPExcel->getActiveSheet()->setCellValue('G' . ($i + 2), $list[$i]['stock_num']);//ID
  368 + $objPHPExcel->getActiveSheet()->setCellValue('H' . ($i + 2), $list[$i]['sku_value']);//ID
  369 + $objPHPExcel->getActiveSheet()->setCellValue('I' . ($i + 2), $list[$i]['line_price']);//ID
  370 + $objPHPExcel->getActiveSheet()->setCellValue('J' . ($i + 2), $list[$i]['discount']);//ID
  371 + $objPHPExcel->getActiveSheet()->setCellValue('K' . ($i + 2), $list[$i]['goods_price']);//ID
  372 + $objPHPExcel->getActiveSheet()->setCellValue('L' . ($i + 2), $list[$i]['goods_sales']);//ID
  373 + $objPHPExcel->getActiveSheet()->setCellValue('M' . ($i + 2), $list[$i]['goods_status']);//ID
  374 + $objPHPExcel->getActiveSheet()->setCellValue('N' . ($i + 2), $list[$i]['is_index']);//标签码
  375 + $objPHPExcel->getActiveSheet()->setCellValue('O' . ($i + 2), datetime(time()));//标签码
  376 + }
  377 + ob_end_clean();
  378 + ob_start();
  379 + $title = '商品列表';
  380 + header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
  381 + header('Content-Disposition:attachment;filename="' . $title . '.xlsx"');
  382 + header('Cache-Control: max-age=0');
  383 + header('Cache-Control: max-age=1');
  384 + header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past
  385 + header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); // always modified
  386 + header('Cache-Control: cache, must-revalidate'); // HTTP/1.1
  387 + header('Pragma: public'); // HTTP/1.0
  388 + $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
  389 + $objWriter->save('php://output'); //文件通过浏览器下载
  390 + exit();
  391 + }
  392 +
  393 + /**
  394 + *导入
  395 + *
  396 + * */
  397 + public function import()
  398 + {
  399 + $file = $this->request->request('file');
  400 + if (!$file) {
  401 + $this->error(__('Parameter %s can not be empty', 'file'));
  402 + }
  403 + $filePath = ROOT_PATH . DS . 'public' . DS . $file;
  404 + if (!is_file($filePath)) {
  405 + $this->error(__('No results were found'));
  406 + }
  407 + //实例化reader
  408 + $ext = pathinfo($filePath, PATHINFO_EXTENSION);
  409 + if (!in_array($ext, ['csv', 'xls', 'xlsx'])) {
  410 + $this->error(__('Unknown data format'));
  411 + }
  412 + if ($ext === 'csv') {
  413 + $file = fopen($filePath, 'r');
  414 + $filePath = tempnam(sys_get_temp_dir(), 'import_csv');
  415 + $fp = fopen($filePath, "w");
  416 + $n = 0;
  417 + while ($line = fgets($file)) {
  418 + $line = rtrim($line, "\n\r\0");
  419 + $encoding = mb_detect_encoding($line, ['utf-8', 'gbk', 'latin1', 'big5']);
  420 + if ($encoding != 'utf-8') {
  421 + $line = mb_convert_encoding($line, 'utf-8', $encoding);
  422 + }
  423 + if ($n == 0 || preg_match('/^".*"$/', $line)) {
  424 + fwrite($fp, $line . "\n");
  425 + } else {
  426 + fwrite($fp, '"' . str_replace(['"', ','], ['""', '","'], $line) . "\"\n");
  427 + }
  428 + $n++;
  429 + }
  430 + fclose($file) || fclose($fp);
  431 + $reader = new Csv();
  432 + } elseif ($ext === 'xls') {
  433 + $reader = new Xls();
  434 + } else {
  435 + $reader = new Xlsx();
  436 + }
  437 + set_time_limit(0);
  438 + //加载文件
  439 + $insert = [];
  440 + try {
  441 + if (!$PHPExcel = $reader->load($filePath)) {
  442 + $this->error(__('Unknown data format'));
  443 + }
  444 + $currentSheet = $PHPExcel->getSheet(0); //读取文件中的第一个工作表
  445 + $allColumn = $currentSheet->getHighestDataColumn(); //取得最大的列号
  446 + $allRow = $currentSheet->getHighestRow(); //取得一共有多少行
  447 + $maxColumnNumber = Coordinate::columnIndexFromString($allColumn); // 一共多少列
  448 + for ($i = 2; $i <= $allRow; $i++) {
  449 + if (!empty($PHPExcel->getActiveSheet()->getCell("A" . $i)->getValue())) {
  450 + $insert[$i]['goods_name'] = $PHPExcel->getActiveSheet()->getCell("A" . $i)->getValue();//商品名称
  451 + $insert[$i]['keywords'] = $PHPExcel->getActiveSheet()->getCell("B" . $i)->getValue();//关键词
  452 + $category = $PHPExcel->getActiveSheet()->getCell("C" . $i)->getValue() ?? '';//类别
  453 + $insert[$i]['category_id'] = Db::name('litestore_category')->where('name', $category)->value('id') ?? '';
  454 + $insert[$i]['activity_id'] = $PHPExcel->getActiveSheet()->getCell("D" . $i)->getValue() ?? '';//活动类型
  455 + $insert[$i]['is_index'] = $PHPExcel->getActiveSheet()->getCell("I" . $i)->getValue() ?? '';//是否首页
  456 + $insert[$i]['goods_status'] = $PHPExcel->getActiveSheet()->getCell("H" . $i)->getValue() ?? '';//商品状态
  457 + $spec_insert[$i]['stock_num'] = $PHPExcel->getActiveSheet()->getCell("E" . $i)->getValue() ?? '';//库存
  458 + $spec_insert[$i]['goods_price'] = $PHPExcel->getActiveSheet()->getCell("G" . $i)->getValue() ?? '';//现价
  459 + $spec_insert[$i]['line_price'] = $PHPExcel->getActiveSheet()->getCell("F" . $i)->getValue() ?? '';//原价
  460 + }
  461 + }
  462 + } catch (\Exception $exception) {
  463 + $this->error($exception->getMessage());
  464 + }
  465 + if (!$insert) {
  466 + $this->error(__('No rows were updated'));
  467 + }
  468 + try {
  469 +
  470 + $res_goods = $this->model->saveAll($insert);
  471 + foreach ($spec_insert as $key => &$v) {
  472 + $v['goods_id'] = $res_goods[$key]['goods_id'];
  473 + }
  474 + unset($v);
  475 + $this->spec_model->saveAll($spec_insert);
  476 + } catch (PDOException $exception) {
  477 + $msg = $exception->getMessage();
  478 + if (preg_match("/.+Integrity constraint violation: 1062 Duplicate entry '(.+)' for key '(.+)'/is", $msg, $matches)) {
  479 + $msg = "导入失败,包含【{$matches[1]}】的记录已存在";
  480 + };
  481 + $this->error($msg);
  482 + } catch (\Exception $e) {
  483 + $this->error($e->getMessage());
  484 + }
  485 + $this->success();
  486 + }
  487 +
  488 +
  489 +}
  1 +<?php
  2 +
  3 +namespace app\admin\controller\activity_goods;
  4 +
  5 +use app\admin\model\litestore\Litestoregoodsspec;
  6 +use app\common\controller\Backend;
  7 +use app\admin\model\litestore\Litestorespec as SpecModel;
  8 +use app\admin\model\litestore\Litestorespecvalue as SpecValueModel;
  9 +use PhpOffice\PhpSpreadsheet\Cell\Coordinate;
  10 +use PhpOffice\PhpSpreadsheet\Reader\Csv;
  11 +use PhpOffice\PhpSpreadsheet\Reader\Xls;
  12 +use PhpOffice\PhpSpreadsheet\Reader\Xlsx;
  13 +use think\Db;
  14 +use think\exception\PDOException;
  15 +
  16 +
  17 +/**
  18 + *
  19 + *
  20 + * @icon fa fa-circle-o
  21 + */
  22 +class NewGoods extends Backend
  23 +{
  24 + private $SpecModel;
  25 + private $SpecValueModel;
  26 + /**
  27 + * Litestoregoods模型对象
  28 + * @var \app\admin\model\litestore\Litestoregoods
  29 + */
  30 + protected $model = null;
  31 + protected $spec_model = null;
  32 +// protected $searchFields = 'category.name';
  33 +
  34 + public function _initialize()
  35 + {
  36 + parent::_initialize();
  37 + $this->SpecModel = new SpecModel;
  38 + $this->SpecValueModel = new SpecValueModel;
  39 +
  40 + $this->model = new \app\admin\model\litestore\Litestoregoods;
  41 + $this->spec_model = new \app\admin\model\litestore\Litestoregoodsspec();
  42 + $this->view->assign("specTypeList", $this->model->getSpecTypeList());
  43 + $this->view->assign("deductStockTypeList", $this->model->getDeductStockTypeList());
  44 + $this->view->assign("goodsStatusList", $this->model->getGoodsStatusList());
  45 + $this->view->assign("isDeleteList", $this->model->getIsDeleteList());
  46 + $this->view->assign("makeforList", $this->model->getMakeforList());
  47 + $this->view->assign("isIndexList", $this->model->getIsIndexList());
  48 +
  49 + $this->view->assign("spec_attr", '');
  50 + $this->view->assign("spec_list", '');
  51 + }
  52 +
  53 + /**
  54 + * 默认生成的控制器所继承的父类中有index/add/edit/del/multi五个基础方法、destroy/restore/recyclebin三个回收站方法
  55 + * 因此在当前控制器中可不用编写增删改查的代码,除非需要自己控制这部分逻辑
  56 + * 需要将application/admin/library/traits/Backend.php中对应的方法复制到当前控制器,然后进行修改
  57 + */
  58 +
  59 +
  60 + /**
  61 + * 查看
  62 + */
  63 + public function index()
  64 + {
  65 + //当前是否为关联查询
  66 + $this->relationSearch = true;
  67 + //设置过滤方法
  68 + $this->request->filter(['strip_tags']);
  69 + if ($this->request->isAjax()) {
  70 + //如果发送的来源是Selectpage,则转发到Selectpage
  71 + if ($this->request->request('keyField')) {
  72 + return $this->selectpage();
  73 + }
  74 + list($where, $sort, $order, $offset, $limit) = $this->buildparams("category.name",true);
  75 + $total = $this->model
  76 + ->with(['category', 'activity'])
  77 + ->where($where)
  78 + ->where('activity_id',1)
  79 + ->order($sort, $order)
  80 + ->count();
  81 +
  82 + $list = $this->model
  83 + ->with(['category', 'activity'])
  84 + ->where($where)
  85 + ->where('activity_id',1)
  86 + ->order($sort, $order)
  87 + ->limit($offset, $limit)
  88 + ->select();
  89 +
  90 + foreach ($list as $row) {
  91 +
  92 + $row->getRelation('category')->visible(['name']);
  93 + $row->getRelation('activity')->visible(['name']);
  94 +// $row->getRelation('freight')->visible(['name']);
  95 + $row->stock_num = Litestoregoodsspec::where('goods_id', $row['goods_id'])->sum('stock_num');
  96 + }
  97 + $list = collection($list)->toArray();
  98 + $result = array("total" => $total, "rows" => $list);
  99 +
  100 + return json($result);
  101 + }
  102 + $this->assign('template', $this->request->domain() . '/static/template/商品导入模板.xlsx');
  103 +
  104 + return $this->view->fetch();
  105 + }
  106 +
  107 + public function addSpec($spec_name, $spec_value)
  108 + {
  109 + // 判断规格组是否存在
  110 + if (!$specId = $this->SpecModel->getSpecIdByName($spec_name)) {
  111 + // 新增规格组and规则值
  112 + if ($this->SpecModel->add($spec_name)
  113 + && $this->SpecValueModel->add($this->SpecModel['id'], $spec_value))
  114 + return $this->success('', '', [
  115 + 'spec_id' => (int)$this->SpecModel['id'],
  116 + 'spec_value_id' => (int)$this->SpecValueModel['id'],
  117 + ]);
  118 + return $this->error();
  119 + }
  120 + //return ;
  121 + // 判断规格值是否存在
  122 + if ($specValueId = $this->SpecValueModel->getSpecValueIdByName($specId, $spec_value)) {
  123 + return $this->success('', '', [
  124 + 'spec_id' => (int)$specId,
  125 + 'spec_value_id' => (int)$specValueId,
  126 + ]);
  127 + }
  128 + // 添加规则值
  129 + if ($this->SpecValueModel->add($specId, $spec_value))
  130 + return $this->success('', '', [
  131 + 'spec_id' => (int)$specId,
  132 + 'spec_value_id' => (int)$this->SpecValueModel['id'],
  133 + ]);
  134 + return $this->error();
  135 + }
  136 +
  137 +
  138 + /**
  139 + * 添加规格值
  140 + */
  141 + public function addSpecValue($spec_id, $spec_value)
  142 + {
  143 + // 判断规格值是否存在
  144 + if ($specValueId = $this->SpecValueModel->getSpecValueIdByName($spec_id, $spec_value)) {
  145 + return $this->success('', '', [
  146 + 'spec_value_id' => (int)$specValueId,
  147 + ]);
  148 + }
  149 + // 添加规则值
  150 + if ($this->SpecValueModel->add($spec_id, $spec_value))
  151 + return $this->success('', '', [
  152 + 'spec_value_id' => (int)$this->SpecValueModel['id'],
  153 + ]);
  154 + return $this->error();
  155 + }
  156 +
  157 + /**
  158 + * 添加
  159 + */
  160 + public function add()
  161 + {
  162 + if ($this->request->isPost()) {
  163 + $params = $this->request->post("row/a");
  164 + if ($params) {
  165 + if ($this->dataLimit && $this->dataLimitFieldAutoFill) {
  166 + $params[$this->dataLimitField] = $this->auth->id;
  167 + }
  168 + if ($params['spec_type'] == '20' && !$this->request->post("spec_many/a")) {
  169 + $this->error('请添加规格');
  170 + }
  171 + try {
  172 + //是否采用模型验证
  173 + if ($this->modelValidate) {
  174 + $name = str_replace("\\model\\", "\\validate\\", get_class($this->model));
  175 + $validate = is_bool($this->modelValidate) ? ($this->modelSceneValidate ? $name . '.add' : true) : $this->modelValidate;
  176 + $this->model->validate($validate);
  177 + }
  178 + $result = $this->model->allowField(true)->save($params);
  179 + if ($result !== false) {
  180 + //成功之后 存储商品规格
  181 + $spec_many_params = $this->request->post("spec_many/a");
  182 + $this->model->addGoodsSpec($params, $spec_many_params, $this->request->post("spec/a"));
  183 + $this->success();
  184 + } else {
  185 + $this->error($this->model->getError());
  186 + }
  187 + } catch (\think\exception\PDOException $e) {
  188 + $this->error($e->getMessage());
  189 + } catch (\think\Exception $e) {
  190 + $this->error($e->getMessage());
  191 + }
  192 + }
  193 + $this->error(__('Parameter %s can not be empty', ''));
  194 + }
  195 + return $this->view->fetch();
  196 + }
  197 +
  198 + /**
  199 + * 删除
  200 + */
  201 + public function del($ids = "")
  202 + {
  203 + if ($ids) {
  204 + $pk = $this->model->getPk();
  205 + $adminIds = $this->getDataLimitAdminIds();
  206 + if (is_array($adminIds)) {
  207 + $count = $this->model->where($this->dataLimitField, 'in', $adminIds);
  208 + }
  209 + $list = $this->model->where($pk, 'in', $ids)->select();
  210 + $count = 0;
  211 + foreach ($list as $k => $v) {
  212 + // 删除商品sku
  213 + $v->removesku();
  214 +
  215 + $count += $v->delete();
  216 + }
  217 + if ($count) {
  218 + $this->success();
  219 + } else {
  220 + $this->error(__('No rows were deleted'));
  221 + }
  222 + }
  223 + $this->error(__('Parameter %s can not be empty', 'ids'));
  224 + }
  225 +
  226 + /**
  227 + * 编辑
  228 + */
  229 + public function edit($ids = NULL)
  230 + {
  231 + $row = $this->model->get($ids, ['specRel', 'spec', 'spec_rel.spec']);
  232 + if (!$row)
  233 + $this->error(__('No Results were found'));
  234 + $adminIds = $this->getDataLimitAdminIds();
  235 + if (is_array($adminIds)) {
  236 + if (!in_array($row[$this->dataLimitField], $adminIds)) {
  237 + $this->error(__('You have no permission'));
  238 + }
  239 + }
  240 + if ($this->request->isPost()) {
  241 + $params = $this->request->post("row/a");
  242 + if ($params) {
  243 + if ($params['spec_type'] == '20' && !$this->request->post("spec_many/a")) {
  244 + $this->error('请添加规格');
  245 + }
  246 + try {
  247 + //是否采用模型验证
  248 + if ($this->modelValidate) {
  249 + $name = basename(str_replace('\\', '/', get_class($this->model)));
  250 + $validate = is_bool($this->modelValidate) ? ($this->modelSceneValidate ? $name . '.edit' : true) : $this->modelValidate;
  251 + $row->validate($validate);
  252 + }
  253 + $result = $row->allowField(true)->save($params);
  254 + if ($result !== false) {
  255 + //成功之后 存储商品规格
  256 + $spec_many_params = $this->request->post("spec_many/a");
  257 + $row->addGoodsSpec($params, $spec_many_params, $this->request->post("spec/a"), true);
  258 + // 删除购物车
  259 + Db::name('cart')->where('goods_id', $row->goods_id)->delete();
  260 + //删除我常买
  261 + Db::name('user_buylist')->where('goods_id', $row->goods_id)->delete();
  262 + $this->success();
  263 + } else {
  264 + $this->error($row->getError());
  265 + }
  266 + } catch (\think\exception\PDOException $e) {
  267 + $this->error($e->getMessage());
  268 + } catch (\think\Exception $e) {
  269 + $this->error($e->getMessage());
  270 + }
  271 + }
  272 + $this->error(__('Parameter %s can not be empty', ''));
  273 + }
  274 + // 多规格信息
  275 + $specData = 'null';
  276 + if ($row['spec_type'] === '20') {
  277 + $specData = json_encode($this->model->getManySpecData($row['spec_rel'], $row['spec']));
  278 + }
  279 + $row['specData'] = $specData;
  280 + $this->view->assign("row", $row);
  281 + return $this->view->fetch();
  282 + }
  283 +
  284 +
  285 + /**
  286 + * 导出
  287 + */
  288 + public function export()
  289 + {
  290 + //1.从数据库中导出需要进行要导出的数据
  291 + $list = Db::name('litestore_goods_spec')->alias('c')
  292 + ->join('fa_litestore_goods g', 'g.goods_id = c.goods_id', 'LEFT')
  293 + ->select();
  294 + $list = collection($list)->toArray();
  295 + foreach ($list as &$item) {
  296 + $item['category_name'] = Db::name('litestore_category')->where('id', $item['category_id'])->value('name');
  297 + if (!empty($item['spec_sku_id'])) {
  298 + $sku_value = explode('_', $item['spec_sku_id']);
  299 + if (count($sku_value) > 1) {
  300 + $key = Db::name('litestore_spec_value')->where('id', $sku_value[0])->value('spec_value');
  301 + $value = Db::name('litestore_spec_value')->where('id', $sku_value[1])->value('spec_value');
  302 + $item['sku_value'] = $key . '_' . $value;
  303 + } else {
  304 + $key = Db::name('litestore_spec_value')->where('id', $sku_value[0])->value('spec_value');
  305 + $item['sku_value'] = $key;
  306 + }
  307 + } else {
  308 + $item['sku_value'] = '';
  309 + }
  310 + }
  311 + if (empty($list)) {
  312 + $this->error('没有可导出的数据');
  313 + }
  314 + //重要补助
  315 + //2.加载PHPExcle类库
  316 + vendor('PHPExcel.PHPExcel');
  317 + //3.实例化PHPExcel类
  318 + $objPHPExcel = new \PHPExcel();
  319 + //4.激活当前的sheet表
  320 + $objPHPExcel->setActiveSheetIndex(0);
  321 + //5.设置表格头(即excel表格的第一行)
  322 + $objPHPExcel->setActiveSheetIndex(0)
  323 + ->setCellValue('A1', '商品ID')
  324 + ->setCellValue('B1', '商品名称')
  325 + ->setCellValue('C1', '搜索关键词')
  326 + ->setCellValue('D1', '分类名称')
  327 + ->setCellValue('E1', '活动名称(新人用户=1,限时秒杀=2,进口商品=4)')
  328 + ->setCellValue('F1', '商品规格(10=单规格,20=多规格)')
  329 + ->setCellValue('G1', '库存')
  330 + ->setCellValue('H1', '商品规格')
  331 + ->setCellValue('I1', '商品原价')
  332 + ->setCellValue('J1', '折扣')
  333 + ->setCellValue('K1', '商品现价')
  334 + ->setCellValue('L1', '已销数量')
  335 + ->setCellValue('M1', '商品状态(10=上架,20=下架)')
  336 + ->setCellValue('N1', '首页展示(0=未展示,1=已展示)')
  337 + ->setCellValue('O1', '导出时间');
  338 + //设置A列水平居中
  339 + $objPHPExcel->setActiveSheetIndex(0)->getStyle('A1')->getAlignment()
  340 + ->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  341 + //设置单元格宽度
  342 + //6.循环刚取出来的数组,将数据逐一添加到excel表格。
  343 + $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('A')->setWidth(10);
  344 + $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('B')->setWidth(20);
  345 + $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('C')->setWidth(20);
  346 + $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('D')->setWidth(20);
  347 + $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('E')->setWidth(20);
  348 + $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('F')->setWidth(20);
  349 + $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('G')->setWidth(20);
  350 + $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('H')->setWidth(20);
  351 + $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('I')->setWidth(20);
  352 + $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('J')->setWidth(20);
  353 + $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('K')->setWidth(20);
  354 + $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('L')->setWidth(20);
  355 + $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('M')->setWidth(20);
  356 + $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('N')->setWidth(20);
  357 + $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('O')->setWidth(20);
  358 +
  359 +
  360 + for ($i = 0; $i < count($list); $i++) {
  361 + $objPHPExcel->getActiveSheet()->setCellValue('A' . ($i + 2), $list[$i]['goods_id']);//ID
  362 + $objPHPExcel->getActiveSheet()->setCellValue('B' . ($i + 2), $list[$i]['goods_name']);//商品名称
  363 + $objPHPExcel->getActiveSheet()->setCellValue('C' . ($i + 2), $list[$i]['keywords']);//商品规格
  364 + $objPHPExcel->getActiveSheet()->setCellValue('D' . ($i + 2), $list[$i]['category_name']);//原价
  365 + $objPHPExcel->getActiveSheet()->setCellValue('E' . ($i + 2), $list[$i]['activity_id']);//ID
  366 + $objPHPExcel->getActiveSheet()->setCellValue('F' . ($i + 2), $list[$i]['spec_type']);//标签码
  367 + $objPHPExcel->getActiveSheet()->setCellValue('G' . ($i + 2), $list[$i]['stock_num']);//ID
  368 + $objPHPExcel->getActiveSheet()->setCellValue('H' . ($i + 2), $list[$i]['sku_value']);//ID
  369 + $objPHPExcel->getActiveSheet()->setCellValue('I' . ($i + 2), $list[$i]['line_price']);//ID
  370 + $objPHPExcel->getActiveSheet()->setCellValue('J' . ($i + 2), $list[$i]['discount']);//ID
  371 + $objPHPExcel->getActiveSheet()->setCellValue('K' . ($i + 2), $list[$i]['goods_price']);//ID
  372 + $objPHPExcel->getActiveSheet()->setCellValue('L' . ($i + 2), $list[$i]['goods_sales']);//ID
  373 + $objPHPExcel->getActiveSheet()->setCellValue('M' . ($i + 2), $list[$i]['goods_status']);//ID
  374 + $objPHPExcel->getActiveSheet()->setCellValue('N' . ($i + 2), $list[$i]['is_index']);//标签码
  375 + $objPHPExcel->getActiveSheet()->setCellValue('O' . ($i + 2), datetime(time()));//标签码
  376 + }
  377 + ob_end_clean();
  378 + ob_start();
  379 + $title = '商品列表';
  380 + header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
  381 + header('Content-Disposition:attachment;filename="' . $title . '.xlsx"');
  382 + header('Cache-Control: max-age=0');
  383 + header('Cache-Control: max-age=1');
  384 + header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past
  385 + header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); // always modified
  386 + header('Cache-Control: cache, must-revalidate'); // HTTP/1.1
  387 + header('Pragma: public'); // HTTP/1.0
  388 + $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
  389 + $objWriter->save('php://output'); //文件通过浏览器下载
  390 + exit();
  391 + }
  392 +
  393 + /**
  394 + *导入
  395 + *
  396 + * */
  397 + public function import()
  398 + {
  399 + $file = $this->request->request('file');
  400 + if (!$file) {
  401 + $this->error(__('Parameter %s can not be empty', 'file'));
  402 + }
  403 + $filePath = ROOT_PATH . DS . 'public' . DS . $file;
  404 + if (!is_file($filePath)) {
  405 + $this->error(__('No results were found'));
  406 + }
  407 + //实例化reader
  408 + $ext = pathinfo($filePath, PATHINFO_EXTENSION);
  409 + if (!in_array($ext, ['csv', 'xls', 'xlsx'])) {
  410 + $this->error(__('Unknown data format'));
  411 + }
  412 + if ($ext === 'csv') {
  413 + $file = fopen($filePath, 'r');
  414 + $filePath = tempnam(sys_get_temp_dir(), 'import_csv');
  415 + $fp = fopen($filePath, "w");
  416 + $n = 0;
  417 + while ($line = fgets($file)) {
  418 + $line = rtrim($line, "\n\r\0");
  419 + $encoding = mb_detect_encoding($line, ['utf-8', 'gbk', 'latin1', 'big5']);
  420 + if ($encoding != 'utf-8') {
  421 + $line = mb_convert_encoding($line, 'utf-8', $encoding);
  422 + }
  423 + if ($n == 0 || preg_match('/^".*"$/', $line)) {
  424 + fwrite($fp, $line . "\n");
  425 + } else {
  426 + fwrite($fp, '"' . str_replace(['"', ','], ['""', '","'], $line) . "\"\n");
  427 + }
  428 + $n++;
  429 + }
  430 + fclose($file) || fclose($fp);
  431 + $reader = new Csv();
  432 + } elseif ($ext === 'xls') {
  433 + $reader = new Xls();
  434 + } else {
  435 + $reader = new Xlsx();
  436 + }
  437 + set_time_limit(0);
  438 + //加载文件
  439 + $insert = [];
  440 + try {
  441 + if (!$PHPExcel = $reader->load($filePath)) {
  442 + $this->error(__('Unknown data format'));
  443 + }
  444 + $currentSheet = $PHPExcel->getSheet(0); //读取文件中的第一个工作表
  445 + $allColumn = $currentSheet->getHighestDataColumn(); //取得最大的列号
  446 + $allRow = $currentSheet->getHighestRow(); //取得一共有多少行
  447 + $maxColumnNumber = Coordinate::columnIndexFromString($allColumn); // 一共多少列
  448 + for ($i = 2; $i <= $allRow; $i++) {
  449 + if (!empty($PHPExcel->getActiveSheet()->getCell("A" . $i)->getValue())) {
  450 + $insert[$i]['goods_name'] = $PHPExcel->getActiveSheet()->getCell("A" . $i)->getValue();//商品名称
  451 + $insert[$i]['keywords'] = $PHPExcel->getActiveSheet()->getCell("B" . $i)->getValue();//关键词
  452 + $category = $PHPExcel->getActiveSheet()->getCell("C" . $i)->getValue() ?? '';//类别
  453 + $insert[$i]['category_id'] = Db::name('litestore_category')->where('name', $category)->value('id') ?? '';
  454 + $insert[$i]['activity_id'] = $PHPExcel->getActiveSheet()->getCell("D" . $i)->getValue() ?? '';//活动类型
  455 + $insert[$i]['is_index'] = $PHPExcel->getActiveSheet()->getCell("I" . $i)->getValue() ?? '';//是否首页
  456 + $insert[$i]['goods_status'] = $PHPExcel->getActiveSheet()->getCell("H" . $i)->getValue() ?? '';//商品状态
  457 + $spec_insert[$i]['stock_num'] = $PHPExcel->getActiveSheet()->getCell("E" . $i)->getValue() ?? '';//库存
  458 + $spec_insert[$i]['goods_price'] = $PHPExcel->getActiveSheet()->getCell("G" . $i)->getValue() ?? '';//现价
  459 + $spec_insert[$i]['line_price'] = $PHPExcel->getActiveSheet()->getCell("F" . $i)->getValue() ?? '';//原价
  460 + }
  461 + }
  462 + } catch (\Exception $exception) {
  463 + $this->error($exception->getMessage());
  464 + }
  465 + if (!$insert) {
  466 + $this->error(__('No rows were updated'));
  467 + }
  468 + try {
  469 +
  470 + $res_goods = $this->model->saveAll($insert);
  471 + foreach ($spec_insert as $key => &$v) {
  472 + $v['goods_id'] = $res_goods[$key]['goods_id'];
  473 + }
  474 + unset($v);
  475 + $this->spec_model->saveAll($spec_insert);
  476 + } catch (PDOException $exception) {
  477 + $msg = $exception->getMessage();
  478 + if (preg_match("/.+Integrity constraint violation: 1062 Duplicate entry '(.+)' for key '(.+)'/is", $msg, $matches)) {
  479 + $msg = "导入失败,包含【{$matches[1]}】的记录已存在";
  480 + };
  481 + $this->error($msg);
  482 + } catch (\Exception $e) {
  483 + $this->error($e->getMessage());
  484 + }
  485 + $this->success();
  486 + }
  487 +
  488 +
  489 +}
  1 +<?php
  2 +
  3 +namespace app\admin\controller\activity_goods;
  4 +
  5 +use app\admin\model\litestore\Litestoregoodsspec;
  6 +use app\common\controller\Backend;
  7 +use app\admin\model\litestore\Litestorespec as SpecModel;
  8 +use app\admin\model\litestore\Litestorespecvalue as SpecValueModel;
  9 +use PhpOffice\PhpSpreadsheet\Cell\Coordinate;
  10 +use PhpOffice\PhpSpreadsheet\Reader\Csv;
  11 +use PhpOffice\PhpSpreadsheet\Reader\Xls;
  12 +use PhpOffice\PhpSpreadsheet\Reader\Xlsx;
  13 +use think\Db;
  14 +use think\exception\PDOException;
  15 +
  16 +
  17 +/**
  18 + *
  19 + *
  20 + * @icon fa fa-circle-o
  21 + */
  22 +class SeckillGoods extends Backend
  23 +{
  24 + private $SpecModel;
  25 + private $SpecValueModel;
  26 + /**
  27 + * Litestoregoods模型对象
  28 + * @var \app\admin\model\litestore\Litestoregoods
  29 + */
  30 + protected $model = null;
  31 + protected $spec_model = null;
  32 +
  33 +// protected $searchFields = 'category.name';
  34 +
  35 + public function _initialize()
  36 + {
  37 + parent::_initialize();
  38 + $this->SpecModel = new SpecModel;
  39 + $this->SpecValueModel = new SpecValueModel;
  40 +
  41 + $this->model = new \app\admin\model\litestore\Litestoregoods;
  42 + $this->spec_model = new \app\admin\model\litestore\Litestoregoodsspec();
  43 + $this->view->assign("specTypeList", $this->model->getSpecTypeList());
  44 + $this->view->assign("deductStockTypeList", $this->model->getDeductStockTypeList());
  45 + $this->view->assign("goodsStatusList", $this->model->getGoodsStatusList());
  46 + $this->view->assign("isDeleteList", $this->model->getIsDeleteList());
  47 + $this->view->assign("makeforList", $this->model->getMakeforList());
  48 + $this->view->assign("isIndexList", $this->model->getIsIndexList());
  49 +
  50 + $this->view->assign("spec_attr", '');
  51 + $this->view->assign("spec_list", '');
  52 + }
  53 +
  54 + /**
  55 + * 默认生成的控制器所继承的父类中有index/add/edit/del/multi五个基础方法、destroy/restore/recyclebin三个回收站方法
  56 + * 因此在当前控制器中可不用编写增删改查的代码,除非需要自己控制这部分逻辑
  57 + * 需要将application/admin/library/traits/Backend.php中对应的方法复制到当前控制器,然后进行修改
  58 + */
  59 +
  60 +
  61 + /**
  62 + * 查看
  63 + */
  64 + public function index()
  65 + {
  66 + //当前是否为关联查询
  67 + $this->relationSearch = true;
  68 + //设置过滤方法
  69 + $this->request->filter(['strip_tags']);
  70 + if ($this->request->isAjax()) {
  71 + //如果发送的来源是Selectpage,则转发到Selectpage
  72 + if ($this->request->request('keyField')) {
  73 + return $this->selectpage();
  74 + }
  75 + list($where, $sort, $order, $offset, $limit) = $this->buildparams("category.name", true);
  76 + $total = $this->model
  77 + ->with(['category', 'activity'])
  78 + ->where($where)
  79 + ->where('activity_id',2)
  80 + ->order($sort, $order)
  81 + ->count();
  82 +
  83 + $list = $this->model
  84 + ->with(['category', 'activity'])
  85 + ->where($where)
  86 + ->where('activity_id',2)
  87 + ->order($sort, $order)
  88 + ->limit($offset, $limit)
  89 + ->select();
  90 +
  91 + foreach ($list as $row) {
  92 +
  93 + $row->getRelation('category')->visible(['name']);
  94 + $row->getRelation('activity')->visible(['name']);
  95 +// $row->getRelation('freight')->visible(['name']);
  96 + $row->stock_num = Litestoregoodsspec::where('goods_id', $row['goods_id'])->sum('stock_num');
  97 + }
  98 + $list = collection($list)->toArray();
  99 + $result = array("total" => $total, "rows" => $list);
  100 +
  101 + return json($result);
  102 + }
  103 + $this->assign('template', $this->request->domain() . '/static/template/商品导入模板.xlsx');
  104 +
  105 + return $this->view->fetch();
  106 + }
  107 +
  108 + public function addSpec($spec_name, $spec_value)
  109 + {
  110 + // 判断规格组是否存在
  111 + if (!$specId = $this->SpecModel->getSpecIdByName($spec_name)) {
  112 + // 新增规格组and规则值
  113 + if ($this->SpecModel->add($spec_name)
  114 + && $this->SpecValueModel->add($this->SpecModel['id'], $spec_value))
  115 + return $this->success('', '', [
  116 + 'spec_id' => (int)$this->SpecModel['id'],
  117 + 'spec_value_id' => (int)$this->SpecValueModel['id'],
  118 + ]);
  119 + return $this->error();
  120 + }
  121 + //return ;
  122 + // 判断规格值是否存在
  123 + if ($specValueId = $this->SpecValueModel->getSpecValueIdByName($specId, $spec_value)) {
  124 + return $this->success('', '', [
  125 + 'spec_id' => (int)$specId,
  126 + 'spec_value_id' => (int)$specValueId,
  127 + ]);
  128 + }
  129 + // 添加规则值
  130 + if ($this->SpecValueModel->add($specId, $spec_value))
  131 + return $this->success('', '', [
  132 + 'spec_id' => (int)$specId,
  133 + 'spec_value_id' => (int)$this->SpecValueModel['id'],
  134 + ]);
  135 + return $this->error();
  136 + }
  137 +
  138 +
  139 + /**
  140 + * 添加规格值
  141 + */
  142 + public function addSpecValue($spec_id, $spec_value)
  143 + {
  144 + // 判断规格值是否存在
  145 + if ($specValueId = $this->SpecValueModel->getSpecValueIdByName($spec_id, $spec_value)) {
  146 + return $this->success('', '', [
  147 + 'spec_value_id' => (int)$specValueId,
  148 + ]);
  149 + }
  150 + // 添加规则值
  151 + if ($this->SpecValueModel->add($spec_id, $spec_value))
  152 + return $this->success('', '', [
  153 + 'spec_value_id' => (int)$this->SpecValueModel['id'],
  154 + ]);
  155 + return $this->error();
  156 + }
  157 +
  158 + /**
  159 + * 添加
  160 + */
  161 + public function add()
  162 + {
  163 + if ($this->request->isPost()) {
  164 + $params = $this->request->post("row/a");
  165 + if ($params) {
  166 + if ($this->dataLimit && $this->dataLimitFieldAutoFill) {
  167 + $params[$this->dataLimitField] = $this->auth->id;
  168 + }
  169 + if ($params['spec_type'] == '20' && !$this->request->post("spec_many/a")) {
  170 + $this->error('请添加规格');
  171 + }
  172 + try {
  173 + //是否采用模型验证
  174 + if ($this->modelValidate) {
  175 + $name = str_replace("\\model\\", "\\validate\\", get_class($this->model));
  176 + $validate = is_bool($this->modelValidate) ? ($this->modelSceneValidate ? $name . '.add' : true) : $this->modelValidate;
  177 + $this->model->validate($validate);
  178 + }
  179 + $result = $this->model->allowField(true)->save($params);
  180 + if ($result !== false) {
  181 + //成功之后 存储商品规格
  182 + $spec_many_params = $this->request->post("spec_many/a");
  183 + $this->model->addGoodsSpec($params, $spec_many_params, $this->request->post("spec/a"));
  184 + $this->success();
  185 + } else {
  186 + $this->error($this->model->getError());
  187 + }
  188 + } catch (\think\exception\PDOException $e) {
  189 + $this->error($e->getMessage());
  190 + } catch (\think\Exception $e) {
  191 + $this->error($e->getMessage());
  192 + }
  193 + }
  194 + $this->error(__('Parameter %s can not be empty', ''));
  195 + }
  196 + return $this->view->fetch();
  197 + }
  198 +
  199 + /**
  200 + * 删除
  201 + */
  202 + public function del($ids = "")
  203 + {
  204 + if ($ids) {
  205 + $pk = $this->model->getPk();
  206 + $adminIds = $this->getDataLimitAdminIds();
  207 + if (is_array($adminIds)) {
  208 + $count = $this->model->where($this->dataLimitField, 'in', $adminIds);
  209 + }
  210 + $list = $this->model->where($pk, 'in', $ids)->select();
  211 + $count = 0;
  212 + foreach ($list as $k => $v) {
  213 + // 删除商品sku
  214 + $v->removesku();
  215 +
  216 + $count += $v->delete();
  217 + }
  218 + if ($count) {
  219 + $this->success();
  220 + } else {
  221 + $this->error(__('No rows were deleted'));
  222 + }
  223 + }
  224 + $this->error(__('Parameter %s can not be empty', 'ids'));
  225 + }
  226 +
  227 + /**
  228 + * 编辑
  229 + */
  230 + public function edit($ids = NULL)
  231 + {
  232 + $row = $this->model->get($ids, ['specRel', 'spec', 'spec_rel.spec']);
  233 + if (!$row)
  234 + $this->error(__('No Results were found'));
  235 + $adminIds = $this->getDataLimitAdminIds();
  236 + if (is_array($adminIds)) {
  237 + if (!in_array($row[$this->dataLimitField], $adminIds)) {
  238 + $this->error(__('You have no permission'));
  239 + }
  240 + }
  241 + if ($this->request->isPost()) {
  242 + $params = $this->request->post("row/a");
  243 + if ($params) {
  244 + if ($params['spec_type'] == '20' && !$this->request->post("spec_many/a")) {
  245 + $this->error('请添加规格');
  246 + }
  247 + try {
  248 + //是否采用模型验证
  249 + if ($this->modelValidate) {
  250 + $name = basename(str_replace('\\', '/', get_class($this->model)));
  251 + $validate = is_bool($this->modelValidate) ? ($this->modelSceneValidate ? $name . '.edit' : true) : $this->modelValidate;
  252 + $row->validate($validate);
  253 + }
  254 + $result = $row->allowField(true)->save($params);
  255 + if ($result !== false) {
  256 + //成功之后 存储商品规格
  257 + $spec_many_params = $this->request->post("spec_many/a");
  258 + $row->addGoodsSpec($params, $spec_many_params, $this->request->post("spec/a"), true);
  259 + // 删除购物车
  260 + Db::name('cart')->where('goods_id', $row->goods_id)->delete();
  261 + //删除我常买
  262 + Db::name('user_buylist')->where('goods_id', $row->goods_id)->delete();
  263 + $this->success();
  264 + } else {
  265 + $this->error($row->getError());
  266 + }
  267 + } catch (\think\exception\PDOException $e) {
  268 + $this->error($e->getMessage());
  269 + } catch (\think\Exception $e) {
  270 + $this->error($e->getMessage());
  271 + }
  272 + }
  273 + $this->error(__('Parameter %s can not be empty', ''));
  274 + }
  275 + // 多规格信息
  276 + $specData = 'null';
  277 + if ($row['spec_type'] === '20') {
  278 + $specData = json_encode($this->model->getManySpecData($row['spec_rel'], $row['spec']));
  279 + }
  280 + $row['specData'] = $specData;
  281 + $this->view->assign("row", $row);
  282 + return $this->view->fetch();
  283 + }
  284 +
  285 +
  286 + /**
  287 + * 导出
  288 + */
  289 + public function export()
  290 + {
  291 + //1.从数据库中导出需要进行要导出的数据
  292 + $list = Db::name('litestore_goods_spec')->alias('c')
  293 + ->join('fa_litestore_goods g', 'g.goods_id = c.goods_id', 'LEFT')
  294 + ->select();
  295 + $list = collection($list)->toArray();
  296 + foreach ($list as &$item) {
  297 + $item['category_name'] = Db::name('litestore_category')->where('id', $item['category_id'])->value('name');
  298 + if (!empty($item['spec_sku_id'])) {
  299 + $sku_value = explode('_', $item['spec_sku_id']);
  300 + if (count($sku_value) > 1) {
  301 + $key = Db::name('litestore_spec_value')->where('id', $sku_value[0])->value('spec_value');
  302 + $value = Db::name('litestore_spec_value')->where('id', $sku_value[1])->value('spec_value');
  303 + $item['sku_value'] = $key . '_' . $value;
  304 + } else {
  305 + $key = Db::name('litestore_spec_value')->where('id', $sku_value[0])->value('spec_value');
  306 + $item['sku_value'] = $key;
  307 + }
  308 + } else {
  309 + $item['sku_value'] = '';
  310 + }
  311 + }
  312 + if (empty($list)) {
  313 + $this->error('没有可导出的数据');
  314 + }
  315 + //重要补助
  316 + //2.加载PHPExcle类库
  317 + vendor('PHPExcel.PHPExcel');
  318 + //3.实例化PHPExcel类
  319 + $objPHPExcel = new \PHPExcel();
  320 + //4.激活当前的sheet表
  321 + $objPHPExcel->setActiveSheetIndex(0);
  322 + //5.设置表格头(即excel表格的第一行)
  323 + $objPHPExcel->setActiveSheetIndex(0)
  324 + ->setCellValue('A1', '商品ID')
  325 + ->setCellValue('B1', '商品名称')
  326 + ->setCellValue('C1', '搜索关键词')
  327 + ->setCellValue('D1', '分类名称')
  328 + ->setCellValue('E1', '活动名称(新人用户=1,限时秒杀=2,进口商品=4)')
  329 + ->setCellValue('F1', '商品规格(10=单规格,20=多规格)')
  330 + ->setCellValue('G1', '库存')
  331 + ->setCellValue('H1', '商品规格')
  332 + ->setCellValue('I1', '商品原价')
  333 + ->setCellValue('J1', '折扣')
  334 + ->setCellValue('K1', '商品现价')
  335 + ->setCellValue('L1', '已销数量')
  336 + ->setCellValue('M1', '商品状态(10=上架,20=下架)')
  337 + ->setCellValue('N1', '首页展示(0=未展示,1=已展示)')
  338 + ->setCellValue('O1', '导出时间');
  339 + //设置A列水平居中
  340 + $objPHPExcel->setActiveSheetIndex(0)->getStyle('A1')->getAlignment()
  341 + ->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  342 + //设置单元格宽度
  343 + //6.循环刚取出来的数组,将数据逐一添加到excel表格。
  344 + $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('A')->setWidth(10);
  345 + $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('B')->setWidth(20);
  346 + $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('C')->setWidth(20);
  347 + $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('D')->setWidth(20);
  348 + $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('E')->setWidth(20);
  349 + $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('F')->setWidth(20);
  350 + $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('G')->setWidth(20);
  351 + $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('H')->setWidth(20);
  352 + $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('I')->setWidth(20);
  353 + $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('J')->setWidth(20);
  354 + $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('K')->setWidth(20);
  355 + $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('L')->setWidth(20);
  356 + $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('M')->setWidth(20);
  357 + $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('N')->setWidth(20);
  358 + $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('O')->setWidth(20);
  359 +
  360 +
  361 + for ($i = 0; $i < count($list); $i++) {
  362 + $objPHPExcel->getActiveSheet()->setCellValue('A' . ($i + 2), $list[$i]['goods_id']);//ID
  363 + $objPHPExcel->getActiveSheet()->setCellValue('B' . ($i + 2), $list[$i]['goods_name']);//商品名称
  364 + $objPHPExcel->getActiveSheet()->setCellValue('C' . ($i + 2), $list[$i]['keywords']);//商品规格
  365 + $objPHPExcel->getActiveSheet()->setCellValue('D' . ($i + 2), $list[$i]['category_name']);//原价
  366 + $objPHPExcel->getActiveSheet()->setCellValue('E' . ($i + 2), $list[$i]['activity_id']);//ID
  367 + $objPHPExcel->getActiveSheet()->setCellValue('F' . ($i + 2), $list[$i]['spec_type']);//标签码
  368 + $objPHPExcel->getActiveSheet()->setCellValue('G' . ($i + 2), $list[$i]['stock_num']);//ID
  369 + $objPHPExcel->getActiveSheet()->setCellValue('H' . ($i + 2), $list[$i]['sku_value']);//ID
  370 + $objPHPExcel->getActiveSheet()->setCellValue('I' . ($i + 2), $list[$i]['line_price']);//ID
  371 + $objPHPExcel->getActiveSheet()->setCellValue('J' . ($i + 2), $list[$i]['discount']);//ID
  372 + $objPHPExcel->getActiveSheet()->setCellValue('K' . ($i + 2), $list[$i]['goods_price']);//ID
  373 + $objPHPExcel->getActiveSheet()->setCellValue('L' . ($i + 2), $list[$i]['goods_sales']);//ID
  374 + $objPHPExcel->getActiveSheet()->setCellValue('M' . ($i + 2), $list[$i]['goods_status']);//ID
  375 + $objPHPExcel->getActiveSheet()->setCellValue('N' . ($i + 2), $list[$i]['is_index']);//标签码
  376 + $objPHPExcel->getActiveSheet()->setCellValue('O' . ($i + 2), datetime(time()));//标签码
  377 + }
  378 + ob_end_clean();
  379 + ob_start();
  380 + $title = '商品列表';
  381 + header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
  382 + header('Content-Disposition:attachment;filename="' . $title . '.xlsx"');
  383 + header('Cache-Control: max-age=0');
  384 + header('Cache-Control: max-age=1');
  385 + header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past
  386 + header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); // always modified
  387 + header('Cache-Control: cache, must-revalidate'); // HTTP/1.1
  388 + header('Pragma: public'); // HTTP/1.0
  389 + $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
  390 + $objWriter->save('php://output'); //文件通过浏览器下载
  391 + exit();
  392 + }
  393 +
  394 + /**
  395 + *导入
  396 + *
  397 + * */
  398 + public function import()
  399 + {
  400 + $file = $this->request->request('file');
  401 + if (!$file) {
  402 + $this->error(__('Parameter %s can not be empty', 'file'));
  403 + }
  404 + $filePath = ROOT_PATH . DS . 'public' . DS . $file;
  405 + if (!is_file($filePath)) {
  406 + $this->error(__('No results were found'));
  407 + }
  408 + //实例化reader
  409 + $ext = pathinfo($filePath, PATHINFO_EXTENSION);
  410 + if (!in_array($ext, ['csv', 'xls', 'xlsx'])) {
  411 + $this->error(__('Unknown data format'));
  412 + }
  413 + if ($ext === 'csv') {
  414 + $file = fopen($filePath, 'r');
  415 + $filePath = tempnam(sys_get_temp_dir(), 'import_csv');
  416 + $fp = fopen($filePath, "w");
  417 + $n = 0;
  418 + while ($line = fgets($file)) {
  419 + $line = rtrim($line, "\n\r\0");
  420 + $encoding = mb_detect_encoding($line, ['utf-8', 'gbk', 'latin1', 'big5']);
  421 + if ($encoding != 'utf-8') {
  422 + $line = mb_convert_encoding($line, 'utf-8', $encoding);
  423 + }
  424 + if ($n == 0 || preg_match('/^".*"$/', $line)) {
  425 + fwrite($fp, $line . "\n");
  426 + } else {
  427 + fwrite($fp, '"' . str_replace(['"', ','], ['""', '","'], $line) . "\"\n");
  428 + }
  429 + $n++;
  430 + }
  431 + fclose($file) || fclose($fp);
  432 + $reader = new Csv();
  433 + } elseif ($ext === 'xls') {
  434 + $reader = new Xls();
  435 + } else {
  436 + $reader = new Xlsx();
  437 + }
  438 + set_time_limit(0);
  439 + //加载文件
  440 + $insert = [];
  441 + try {
  442 + if (!$PHPExcel = $reader->load($filePath)) {
  443 + $this->error(__('Unknown data format'));
  444 + }
  445 + $currentSheet = $PHPExcel->getSheet(0); //读取文件中的第一个工作表
  446 + $allColumn = $currentSheet->getHighestDataColumn(); //取得最大的列号
  447 + $allRow = $currentSheet->getHighestRow(); //取得一共有多少行
  448 + $maxColumnNumber = Coordinate::columnIndexFromString($allColumn); // 一共多少列
  449 + for ($i = 2; $i <= $allRow; $i++) {
  450 + if (!empty($PHPExcel->getActiveSheet()->getCell("A" . $i)->getValue())) {
  451 + $insert[$i]['goods_name'] = $PHPExcel->getActiveSheet()->getCell("A" . $i)->getValue();//商品名称
  452 + $insert[$i]['keywords'] = $PHPExcel->getActiveSheet()->getCell("B" . $i)->getValue();//关键词
  453 + $category = $PHPExcel->getActiveSheet()->getCell("C" . $i)->getValue() ?? '';//类别
  454 + $insert[$i]['category_id'] = Db::name('litestore_category')->where('name', $category)->value('id') ?? '';
  455 + $insert[$i]['activity_id'] = $PHPExcel->getActiveSheet()->getCell("D" . $i)->getValue() ?? '';//活动类型
  456 + $insert[$i]['is_index'] = $PHPExcel->getActiveSheet()->getCell("I" . $i)->getValue() ?? '';//是否首页
  457 + $insert[$i]['goods_status'] = $PHPExcel->getActiveSheet()->getCell("H" . $i)->getValue() ?? '';//商品状态
  458 + $spec_insert[$i]['stock_num'] = $PHPExcel->getActiveSheet()->getCell("E" . $i)->getValue() ?? '';//库存
  459 + $spec_insert[$i]['goods_price'] = $PHPExcel->getActiveSheet()->getCell("G" . $i)->getValue() ?? '';//现价
  460 + $spec_insert[$i]['line_price'] = $PHPExcel->getActiveSheet()->getCell("F" . $i)->getValue() ?? '';//原价
  461 + }
  462 + }
  463 + } catch (\Exception $exception) {
  464 + $this->error($exception->getMessage());
  465 + }
  466 + if (!$insert) {
  467 + $this->error(__('No rows were updated'));
  468 + }
  469 + try {
  470 +
  471 + $res_goods = $this->model->saveAll($insert);
  472 + foreach ($spec_insert as $key => &$v) {
  473 + $v['goods_id'] = $res_goods[$key]['goods_id'];
  474 + }
  475 + unset($v);
  476 + $this->spec_model->saveAll($spec_insert);
  477 + } catch (PDOException $exception) {
  478 + $msg = $exception->getMessage();
  479 + if (preg_match("/.+Integrity constraint violation: 1062 Duplicate entry '(.+)' for key '(.+)'/is", $msg, $matches)) {
  480 + $msg = "导入失败,包含【{$matches[1]}】的记录已存在";
  481 + };
  482 + $this->error($msg);
  483 + } catch (\Exception $e) {
  484 + $this->error($e->getMessage());
  485 + }
  486 + $this->success();
  487 + }
  488 +
  489 +
  490 +}
@@ -29,6 +29,7 @@ class Litestoregoods extends Backend @@ -29,6 +29,7 @@ class Litestoregoods extends Backend
29 */ 29 */
30 protected $model = null; 30 protected $model = null;
31 protected $spec_model = null; 31 protected $spec_model = null;
  32 +
32 // protected $searchFields = 'category.name'; 33 // protected $searchFields = 'category.name';
33 34
34 public function _initialize() 35 public function _initialize()
@@ -71,7 +72,7 @@ class Litestoregoods extends Backend @@ -71,7 +72,7 @@ class Litestoregoods extends Backend
71 if ($this->request->request('keyField')) { 72 if ($this->request->request('keyField')) {
72 return $this->selectpage(); 73 return $this->selectpage();
73 } 74 }
74 - list($where, $sort, $order, $offset, $limit) = $this->buildparams("category.name",true); 75 + list($where, $sort, $order, $offset, $limit) = $this->buildparams("category.name", true);
75 $total = $this->model 76 $total = $this->model
76 ->with(['category', 'activity']) 77 ->with(['category', 'activity'])
77 ->where($where) 78 ->where($where)
@@ -483,5 +484,19 @@ class Litestoregoods extends Backend @@ -483,5 +484,19 @@ class Litestoregoods extends Backend
483 $this->success(); 484 $this->success();
484 } 485 }
485 486
486 - 487 + /**
  488 + * 批量设置折扣
  489 + */
  490 + public function discount()
  491 + {
  492 + //接收所选商品id集
  493 + $goods_ids = $this->request->get('id');
  494 + $goods_ids = explode(',', $goods_ids);
  495 + //接收所设置的折扣
  496 + $discount = $this->request->get('discount');
  497 + foreach ($goods_ids as &$v) {
  498 + Db::name('litestore_goods_spec')->where('goods_id', $v)->update(['discount' => $discount]);
  499 + }
  500 + $this->success('设置成功');
  501 + }
487 } 502 }
  1 +<?php
  2 +
  3 +return [
  4 + 'Goods_id' => 'ID',
  5 + 'Goods_name' => '商品名称',
  6 + 'Category_id' => '商品类别',
  7 + 'Image' => '商品封面',
  8 + 'Images' => '商品轮播图片',
  9 + 'Spec_type' => '商品规格',
  10 + 'Spec_type 10' => '单规格',
  11 + 'Spec_type 20' => '多规格',
  12 + 'Deduct_stock_type' => '库存计算方式',
  13 + 'Deduct_stock_type 10' => '下单减库存',
  14 + 'Deduct_stock_type 20' => '付款减库存',
  15 + 'Content' => '描述详情',
  16 + 'Sales_initial' => '初始销量',
  17 + 'Sales_actual' => '实际销量',
  18 + 'Goods_sort' => '权重',
  19 + 'Delivery_id' => '运费模板ID',
  20 + 'Goods_status' => '商品状态',
  21 + 'Goods_status 10' => '上架',
  22 + 'Goods_status 20' => '下架',
  23 + 'Is_delete' => '是否删除',
  24 + 'Is_delete 0' => '未删除',
  25 + 'Is_delete 1' => '已删除',
  26 + 'Createtime' => '创建时间',
  27 + 'Updatetime' => '更新时间',
  28 + 'Category.name' => '分类名称',
  29 + 'Activity.name' => '活动名称',
  30 + 'Freight.name' => '运费模版名称',
  31 + 'Makefor' => '产地',
  32 + 'Makefor 1' => '国产',
  33 + 'Makefor 2' => '进口',
  34 + 'Number' => '编号',
  35 + 'Keep' => '保存条件',
  36 + 'Packing' => '包装方式',
  37 + 'Brand' => '品牌',
  38 + 'Four_images' => '四宫格图',
  39 + 'Down_image' => '底部图',
  40 + 'Detail_images' => '详情图',
  41 + 'Is_index' => '首页展示',
  42 + 'Is_index 1' => '已展示',
  43 + 'Is_index 0' => '未展示',
  44 + 'Activity_id' => '活动类型',
  45 + 'Price_description' => '价格说明',
  46 + 'Keywords' => '搜索关键词',
  47 +];
  1 +<?php
  2 +
  3 +return [
  4 + 'Goods_id' => 'ID',
  5 + 'Goods_name' => '商品名称',
  6 + 'Category_id' => '商品类别',
  7 + 'Image' => '商品封面',
  8 + 'Images' => '商品轮播图片',
  9 + 'Spec_type' => '商品规格',
  10 + 'Spec_type 10' => '单规格',
  11 + 'Spec_type 20' => '多规格',
  12 + 'Deduct_stock_type' => '库存计算方式',
  13 + 'Deduct_stock_type 10' => '下单减库存',
  14 + 'Deduct_stock_type 20' => '付款减库存',
  15 + 'Content' => '描述详情',
  16 + 'Sales_initial' => '初始销量',
  17 + 'Sales_actual' => '实际销量',
  18 + 'Goods_sort' => '权重',
  19 + 'Delivery_id' => '运费模板ID',
  20 + 'Goods_status' => '商品状态',
  21 + 'Goods_status 10' => '上架',
  22 + 'Goods_status 20' => '下架',
  23 + 'Is_delete' => '是否删除',
  24 + 'Is_delete 0' => '未删除',
  25 + 'Is_delete 1' => '已删除',
  26 + 'Createtime' => '创建时间',
  27 + 'Updatetime' => '更新时间',
  28 + 'Category.name' => '分类名称',
  29 + 'Activity.name' => '活动名称',
  30 + 'Freight.name' => '运费模版名称',
  31 + 'Makefor' => '产地',
  32 + 'Makefor 1' => '国产',
  33 + 'Makefor 2' => '进口',
  34 + 'Number' => '编号',
  35 + 'Keep' => '保存条件',
  36 + 'Packing' => '包装方式',
  37 + 'Brand' => '品牌',
  38 + 'Four_images' => '四宫格图',
  39 + 'Down_image' => '底部图',
  40 + 'Detail_images' => '详情图',
  41 + 'Is_index' => '首页展示',
  42 + 'Is_index 1' => '已展示',
  43 + 'Is_index 0' => '未展示',
  44 + 'Activity_id' => '活动类型',
  45 + 'Price_description' => '价格说明',
  46 + 'Keywords' => '搜索关键词',
  47 +];
  1 +<?php
  2 +
  3 +return [
  4 + 'Goods_id' => 'ID',
  5 + 'Goods_name' => '商品名称',
  6 + 'Category_id' => '商品类别',
  7 + 'Image' => '商品封面',
  8 + 'Images' => '商品轮播图片',
  9 + 'Spec_type' => '商品规格',
  10 + 'Spec_type 10' => '单规格',
  11 + 'Spec_type 20' => '多规格',
  12 + 'Deduct_stock_type' => '库存计算方式',
  13 + 'Deduct_stock_type 10' => '下单减库存',
  14 + 'Deduct_stock_type 20' => '付款减库存',
  15 + 'Content' => '描述详情',
  16 + 'Sales_initial' => '初始销量',
  17 + 'Sales_actual' => '实际销量',
  18 + 'Goods_sort' => '权重',
  19 + 'Delivery_id' => '运费模板ID',
  20 + 'Goods_status' => '商品状态',
  21 + 'Goods_status 10' => '上架',
  22 + 'Goods_status 20' => '下架',
  23 + 'Is_delete' => '是否删除',
  24 + 'Is_delete 0' => '未删除',
  25 + 'Is_delete 1' => '已删除',
  26 + 'Createtime' => '创建时间',
  27 + 'Updatetime' => '更新时间',
  28 + 'Category.name' => '分类名称',
  29 + 'Activity.name' => '活动名称',
  30 + 'Freight.name' => '运费模版名称',
  31 + 'Makefor' => '产地',
  32 + 'Makefor 1' => '国产',
  33 + 'Makefor 2' => '进口',
  34 + 'Number' => '编号',
  35 + 'Keep' => '保存条件',
  36 + 'Packing' => '包装方式',
  37 + 'Brand' => '品牌',
  38 + 'Four_images' => '四宫格图',
  39 + 'Down_image' => '底部图',
  40 + 'Detail_images' => '详情图',
  41 + 'Is_index' => '首页展示',
  42 + 'Is_index 1' => '已展示',
  43 + 'Is_index 0' => '未展示',
  44 + 'Activity_id' => '活动类型',
  45 + 'Price_description' => '价格说明',
  46 + 'Keywords' => '搜索关键词',
  47 +];
@@ -153,8 +153,8 @@ class Litestoregoods extends Model @@ -153,8 +153,8 @@ class Litestoregoods extends Model
153 $isUpdate && $model->removeAll($this['goods_id']); 153 $isUpdate && $model->removeAll($this['goods_id']);
154 // 添加规格数据 154 // 添加规格数据
155 if ($data['spec_type'] === '10') { 155 if ($data['spec_type'] === '10') {
156 - // 单规格  
157 - $specparams['discount'] = (round($specparams['goods_price'] / $specparams['line_price'], 2) * 10) . '折'; 156 +// // 单规格
  157 +// $specparams['discount'] = (round($specparams['goods_price'] / $specparams['line_price'], 2) * 10) . '折';
158 $this->spec()->save($specparams); 158 $this->spec()->save($specparams);
159 } else if ($data['spec_type'] === '20') { 159 } else if ($data['spec_type'] === '20') {
160 // 添加商品与规格关系记录 160 // 添加商品与规格关系记录
@@ -31,7 +31,7 @@ class Litestoregoodsspec extends Model @@ -31,7 +31,7 @@ class Litestoregoodsspec extends Model
31 $data[] = array_merge($item['form'], [ 31 $data[] = array_merge($item['form'], [
32 'spec_sku_id' => $item['spec_sku_id'], 32 'spec_sku_id' => $item['spec_sku_id'],
33 'goods_id' => $goods_id, 33 'goods_id' => $goods_id,
34 - 'discount' => (round($item['form']['goods_price'] / $item['form']['line_price'], 2) * 10) . '折', 34 +// 'discount' => (round($item['form']['goods_price'] / $item['form']['line_price'], 2) * 10) . '折',
35 35
36 ]); 36 ]);
37 } 37 }
  1 +<form id="add-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action="">
  2 +
  3 + <div class="form-group">
  4 + <label class="control-label col-xs-12 col-sm-2">{:__('Goods_name')}:</label>
  5 + <div class="col-xs-12 col-sm-8">
  6 + <input id="c-goods_name" data-rule="required" class="form-control form-control" name="row[goods_name]" type="text" value="">
  7 + </div>
  8 + </div>
  9 + <div class="form-group">
  10 + <label class="control-label col-xs-12 col-sm-2">{:__('Keywords')}:</label>
  11 + <div class="col-xs-12 col-sm-8">
  12 + <input id="c-keywords" data-rule="required" class="form-control form-control" name="row[keywords]" type="text" value="">
  13 + </div>
  14 + </div>
  15 + <div class="form-group">
  16 + <label class="control-label col-xs-12 col-sm-2">{:__('Category_id')}:</label>
  17 + <div class="col-xs-12 col-sm-8">
  18 + <input id="c-category_id" data-rule="required" data-source="litestore/litestorecategory/selectpage" class="form-control selectpage form-control" name="row[category_id]" type="text" value="">
  19 + </div>
  20 + </div>
  21 + <div class="form-group">
  22 + <label class="control-label col-xs-12 col-sm-2">{:__('Activity_id')}:</label>
  23 + <div class="col-xs-12 col-sm-8">
  24 + <input id="c-activity_id" data-source="activity/index" class="form-control selectpage" name="row[activity_id]" type="text" value="">
  25 + </div>
  26 + </div>
  27 + <div class="form-group">
  28 + <label class="control-label col-xs-12 col-sm-2">{:__('Image')}:</label>
  29 + <div class="col-xs-12 col-sm-8">
  30 + <div class="input-group">
  31 + <input id="c-image" data-rule="required" class="form-control form-control" size="50" name="row[image]" type="text">
  32 + <div class="input-group-addon no-border no-padding">
  33 + <span><button type="button" id="plupload-image" class="btn btn-danger plupload" data-input-id="c-image" data-mimetype="image/jpeg,image/png,image/jpg" data-multiple="false" data-preview-id="p-image"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
  34 + <span><button type="button" id="fachoose-image" class="btn btn-primary fachoose" data-input-id="c-image" data-mimetype="image/jpeg,image/png,image/jpg" data-multiple="false"><i class="fa fa-list"></i> {:__('Choose')}</button></span>
  35 + </div>
  36 + <span class="msg-box n-right" for="c-image"></span>
  37 + </div>
  38 + <ul class="row list-inline plupload-preview" id="p-image"></ul>
  39 + <span class="help-block">建议尺寸:宽110,高110</span>
  40 + </div>
  41 + </div>
  42 + <div class="form-group">
  43 + <label class="control-label col-xs-12 col-sm-2">{:__('Images')}:</label>
  44 + <div class="col-xs-12 col-sm-8">
  45 + <div class="input-group">
  46 + <input id="c-images" data-rule="required" class="form-control form-control" size="50" name="row[images]" type="text">
  47 + <div class="input-group-addon no-border no-padding">
  48 + <span><button type="button" id="plupload-images" class="btn btn-danger plupload" data-input-id="c-images" data-mimetype="image/gif,image/jpeg,image/png,image/jpg,image/bmp" data-multiple="true" data-preview-id="p-images"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
  49 + <span><button type="button" id="fachoose-images" class="btn btn-primary fachoose" data-input-id="c-images" data-mimetype="image/*" data-multiple="true"><i class="fa fa-list"></i> {:__('Choose')}</button></span>
  50 + </div>
  51 + <span class="msg-box n-right" for="c-images"></span>
  52 + </div>
  53 + <ul class="row list-inline plupload-preview" id="p-images"></ul>
  54 + <span class="help-block">建议尺寸:宽375,高375</span>
  55 + </div>
  56 + </div>
  57 + <div class="form-group">
  58 + <label class="control-label col-xs-12 col-sm-2">{:__('Spec_type')}:</label>
  59 + <div class="col-xs-12 col-sm-8">
  60 +
  61 + <select id="c-spec_type" data-rule="required" class="form-control selectpicker" name="row[spec_type]">
  62 + {foreach name="specTypeList" item="vo"}
  63 + <option value="{$key}" {in name="key" value="10"}selected{/in}>{$vo}</option>
  64 + {/foreach}
  65 + </select>
  66 +
  67 + </div>
  68 + </div>
  69 +
  70 +<!-- 商品规格属性 start -->
  71 +<div class="goods-spec-many form-group">
  72 + <!-- <label class="control-label col-xs-12 col-sm-2"></label>-->
  73 + <div class="goods-spec-box col-xs-12 col-sm-11" style="background-color: white;">
  74 + <!-- 规格属性 -->
  75 + <div class="spec-attr"></div>
  76 +
  77 + <!-- 添加规格:按钮 -->
  78 + <div class="spec-group-button">
  79 + <button type="button" class="btn-addSpecGroup btn btn-xs btn-success">添加规格</button>
  80 + </div>
  81 +
  82 + <!-- 添加规格:表单 -->
  83 + <div class="spec-group-add">
  84 + <div class="spec-group-add-item form-group">
  85 + <label class="control-label form-require">规格名 </label>
  86 + <input type="text" class="input-specName tpl-form-input"
  87 + placeholder="请输入规格名称">
  88 + </div>
  89 + <div class="spec-group-add-item form-group">
  90 + <label class="control-label form-require">规格值 </label>
  91 + <input type="text" class="input-specValue tpl-form-input"
  92 + placeholder="请输入规格值">
  93 + </div>
  94 + <div class="spec-group-add-item margin-top">
  95 + <button type="button" class="btn-addSpecName btn btn-xs btn-success"> 确定
  96 + </button>
  97 + <button type="button" class="btn-cancleAddSpecName btn btn-xs btn-default"> 取消
  98 + </button>
  99 + </div>
  100 + </div>
  101 + <!-- 商品多规格sku信息 -->
  102 + <div class="goods-sku scrollable-horizontal">
  103 + <!-- 分割线 -->
  104 + <div class="goods-spec-line"></div>
  105 + <!-- sku 批量设置 -->
  106 + <div class="spec-batch form-inline">
  107 + <div class="form-group">
  108 + <label class="control-label">批量设置</label>
  109 + </div>
  110 + <div class="form-group">
  111 + <input type="text" data-type="goods_no" placeholder="商家编码">
  112 + </div>
  113 + <div class="form-group">
  114 + <input type="number" data-type="goods_price" placeholder="销售价">
  115 + </div>
  116 + <div class="form-group">
  117 + <input type="number" data-type="line_price" placeholder="划线价">
  118 + </div>
  119 + <div class="form-group">
  120 + <input type="number" data-type="stock_num" placeholder="库存数量">
  121 + </div>
  122 + <!--<div class="form-group">
  123 + <input type="number" data-type="goods_weight" placeholder="重量">
  124 + </div>-->
  125 + <div class="form-group">
  126 + <button type="button" class="btn-specBatchBtn btn btn-sm btn-secondary
  127 + radius">确定
  128 + </button>
  129 + </div>
  130 + </div>
  131 + <!-- sku table -->
  132 + <table class="spec-sku-tabel table table-bordered table-centered margin-bottom-xs text-nowrap"></table>
  133 + </div>
  134 + </div>
  135 +</div>
  136 +
  137 +<div class="goods-spec-single">
  138 + <div class="form-group">
  139 + <label class="control-label col-xs-12 col-sm-2">商品编码:</label>
  140 + <div class="col-xs-12 col-sm-8">
  141 + <input id="c-goods_no" class="form-control form-control" name="spec[goods_no]" type="text" value="">
  142 + </div>
  143 + </div>
  144 + <div class="form-group">
  145 + <label class="control-label col-xs-12 col-sm-2">商品价格:</label>
  146 + <div class="col-xs-12 col-sm-8">
  147 + <input id="c-goods_price" data-rule="required" class="form-control form-control" name="spec[goods_price]" type="number" value="0">
  148 + </div>
  149 + </div>
  150 + <div class="form-group">
  151 + <label class="control-label col-xs-12 col-sm-2">商品划线价:</label>
  152 + <div class="col-xs-12 col-sm-8">
  153 + <input id="c-line_price" class="form-control form-control" name="spec[line_price]" type="number" value="">
  154 + </div>
  155 + </div>
  156 + <div class="form-group">
  157 + <label class="control-label col-xs-12 col-sm-2">当前库存数量:</label>
  158 + <div class="col-xs-12 col-sm-8">
  159 + <input id="c-stock_num" class="form-control form-control" name="spec[stock_num]" type="number" value="100">
  160 + </div>
  161 + </div>
  162 + <!--<div class="form-group">
  163 + <label class="control-label col-xs-12 col-sm-2">商品重量(Kg):</label>
  164 + <div class="col-xs-12 col-sm-8">
  165 + <input id="c-goods_weight" class="form-control form-control" name="spec[goods_weight]" type="number" value="1">
  166 + </div>
  167 + </div>-->
  168 +</div>
  169 +<!-- 商品规格属性 end -->
  170 +
  171 + <div class="form-group">
  172 + <label class="control-label col-xs-12 col-sm-2">{:__('Deduct_stock_type')}:</label>
  173 + <div class="col-xs-12 col-sm-8">
  174 +
  175 + <select id="c-deduct_stock_type" data-rule="required" class="form-control selectpicker" name="row[deduct_stock_type]">
  176 + {foreach name="deductStockTypeList" item="vo"}
  177 + <option value="{$key}" {in name="key" value="20"}selected{/in}>{$vo}</option>
  178 + {/foreach}
  179 + </select>
  180 +
  181 + </div>
  182 + </div>
  183 +<!-- <div class="form-group">-->
  184 +<!-- <label class="control-label col-xs-12 col-sm-2">{:__('Content')}:</label>-->
  185 +<!-- <div class="col-xs-12 col-sm-8">-->
  186 +<!-- <textarea id="c-content" data-rule="required" class="form-control editor form-control" rows="5" name="row[content]" cols="50"></textarea>-->
  187 +<!-- </div>-->
  188 +<!-- </div>-->
  189 +<!-- <div class="form-group">-->
  190 +<!-- <label class="control-label col-xs-12 col-sm-2">{:__('Sales_initial')}:</label>-->
  191 +<!-- <div class="col-xs-12 col-sm-8">-->
  192 +<!-- <input id="c-sales_initial" data-rule="required" class="form-control form-control" name="row[sales_initial]" type="number" value="0">-->
  193 +<!-- </div>-->
  194 +<!-- </div>-->
  195 +<!-- <div class="form-group">-->
  196 +<!-- <label class="control-label col-xs-12 col-sm-2">{:__('Sales_actual')}:</label>-->
  197 +<!-- <div class="col-xs-12 col-sm-8">-->
  198 +<!-- <input id="c-sales_actual" data-rule="required" class="form-control form-control" name="row[sales_actual]" type="number" value="0">-->
  199 +<!-- </div>-->
  200 +<!-- </div>-->
  201 +<!-- <div class="form-group">-->
  202 +<!-- <label class="control-label col-xs-12 col-sm-2">{:__('Goods_sort')}:</label>-->
  203 +<!-- <div class="col-xs-12 col-sm-8">-->
  204 +<!-- <input id="c-goods_sort" data-rule="required" class="form-control form-control" name="row[goods_sort]" type="number" value="100">-->
  205 +<!-- </div>-->
  206 +<!-- </div>-->
  207 +<!-- <div class="form-group">-->
  208 +<!-- <label class="control-label col-xs-12 col-sm-2">{:__('Delivery_id')}:</label>-->
  209 +<!-- <div class="col-xs-12 col-sm-8">-->
  210 +<!-- <input id="c-delivery_id" data-rule="required" data-source="litestore/litestorefreight/index" class="form-control selectpage form-control" name="row[delivery_id]" type="text" value="">-->
  211 +<!-- </div>-->
  212 +<!-- </div>-->
  213 + <div class="form-group">
  214 + <label class="control-label col-xs-12 col-sm-2">{:__('Price_description')}:</label>
  215 + <div class="col-xs-12 col-sm-8">
  216 + <textarea id="c-price_description" data-rule="required" class="form-control" name="row[price_description]"></textarea>
  217 + </div>
  218 + </div>
  219 + <div class="form-group">
  220 + <label class="control-label col-xs-12 col-sm-2">{:__('Brand')}:</label>
  221 + <div class="col-xs-12 col-sm-8">
  222 + <input id="c-brand" data-rule="required" class="form-control form-control" name="row[brand]" type="text" value="">
  223 + </div>
  224 + </div>
  225 + <div class="form-group">
  226 + <label class="control-label col-xs-12 col-sm-2">{:__('Makefor')}:</label>
  227 + <div class="col-xs-12 col-sm-8">
  228 + <div class="radio">
  229 + {foreach name="makeforList" item="vo"}
  230 + <label for="row[makefor]-{$key}"><input id="row[makefor]-{$key}" name="row[makefor]" type="radio" value="{$key}" {in name="key" value="1"}checked{/in} /> {$vo}</label>
  231 + {/foreach}
  232 + </div>
  233 + </div>
  234 + </div>
  235 + <div class="form-group">
  236 + <label class="control-label col-xs-12 col-sm-2">{:__('Packing')}:</label>
  237 + <div class="col-xs-12 col-sm-8">
  238 + <input id="c-packing" data-rule="required" class="form-control form-control" name="row[packing]" type="text" value="">
  239 + </div>
  240 + </div>
  241 + <div class="form-group">
  242 + <label class="control-label col-xs-12 col-sm-2">{:__('Keep')}:</label>
  243 + <div class="col-xs-12 col-sm-8">
  244 + <input id="c-keep" data-rule="required" class="form-control form-control" name="row[keep]" type="text" value="">
  245 + </div>
  246 + </div>
  247 + <div class="form-group">
  248 + <label class="control-label col-xs-12 col-sm-2">{:__('Number')}:</label>
  249 + <div class="col-xs-12 col-sm-8">
  250 + <input id="c-number" data-rule="required" class="form-control form-control" name="row[number]" type="text" value="">
  251 + </div>
  252 + </div>
  253 +<!-- <div class="form-group">-->
  254 +<!-- <label class="control-label col-xs-12 col-sm-2">{:__('Down_image')}:</label>-->
  255 +<!-- <div class="col-xs-12 col-sm-8">-->
  256 +<!-- <div class="input-group">-->
  257 +<!-- <input id="c-down_image" data-rule="required" class="form-control form-control" size="50" name="row[down_image]" type="text">-->
  258 +<!-- <div class="input-group-addon no-border no-padding">-->
  259 +<!-- <span><button type="button" id="plupload-down_image" class="btn btn-danger plupload" data-input-id="c-down_image" data-mimetype="image/jpeg,image/png,image/jpg" data-multiple="false" data-preview-id="p-down_image"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>-->
  260 +<!-- <span><button type="button" id="fachoose-down_image" class="btn btn-primary fachoose" data-input-id="c-down_image" data-mimetype="image/jpeg,image/png,image/jpg" data-multiple="false"><i class="fa fa-list"></i> {:__('Choose')}</button></span>-->
  261 +<!-- </div>-->
  262 +<!-- <span class="msg-box n-right" for="c-down_image"></span>-->
  263 +<!-- </div>-->
  264 +<!-- <ul class="row list-inline plupload-preview" id="p-down_image"></ul>-->
  265 +<!-- <span class="help-block">建议尺寸:宽375,高267</span>-->
  266 +<!-- </div>-->
  267 +<!-- </div>-->
  268 +<!-- <div class="form-group">-->
  269 +<!-- <label class="control-label col-xs-12 col-sm-2">{:__('Four_images')}:</label>-->
  270 +<!-- <div class="col-xs-12 col-sm-8">-->
  271 +<!-- <div class="input-group">-->
  272 +<!-- <input id="c-four_images" data-rule="required" class="form-control form-control" size="50" name="row[four_images]" type="text">-->
  273 +<!-- <div class="input-group-addon no-border no-padding">-->
  274 +<!-- <span><button type="button" id="plupload-four_images" class="btn btn-danger plupload" data-input-id="c-four_images" data-mimetype="image/jpeg,image/png,image/jpg" data-multiple="true" data-preview-id="p-four_images"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>-->
  275 +<!-- <span><button type="button" id="fachoose-four_images" class="btn btn-primary fachoose" data-input-id="c-four_images" data-mimetype="image/jpeg,image/png,image/jpg" data-multiple="true"><i class="fa fa-list"></i> {:__('Choose')}</button></span>-->
  276 +<!-- </div>-->
  277 +<!-- <span class="msg-box n-right" for="c-four_images"></span>-->
  278 +<!-- </div>-->
  279 +<!-- <ul class="row list-inline plupload-preview" id="p-four_images"></ul>-->
  280 +<!-- <span class="help-block">建议尺寸:宽185,高185</span>-->
  281 +<!-- </div>-->
  282 +<!-- </div>-->
  283 + <div class="form-group">
  284 + <label class="control-label col-xs-12 col-sm-2">{:__('Detail_images')}:</label>
  285 + <div class="col-xs-12 col-sm-8">
  286 + <div class="input-group">
  287 + <input id="c-detail_images" data-rule="required" class="form-control form-control" size="50" name="row[detail_images]" placeholder="图片最多添加十张" type="text">
  288 + <div class="input-group-addon no-border no-padding">
  289 + <span><button type="button" id="plupload-detail_images" data-maxcount="10" class="btn btn-danger plupload" data-input-id="c-detail_images" data-mimetype="image/jpeg,image/png,image/jpg" data-multiple="true" data-preview-id="p-detail_images"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
  290 + <span><button type="button" id="fachoose-detail_images" data-maxcount="10" class="btn btn-primary fachoose" data-input-id="c-detail_images" data-mimetype="image/jpeg,image/png,image/jpg" data-multiple="true"><i class="fa fa-list"></i> {:__('Choose')}</button></span>
  291 + </div>
  292 + <span class="msg-box n-right" for="c-detail_images"></span>
  293 + </div>
  294 + <ul class="row list-inline plupload-preview" id="p-detail_images"></ul>
  295 + <span class="help-block">建议尺寸:宽185,高185</span>
  296 + </div>
  297 + </div>
  298 + <div class="form-group">
  299 + <label class="control-label col-xs-12 col-sm-2">{:__('Goods_status')}:</label>
  300 + <div class="col-xs-12 col-sm-8">
  301 +
  302 + <div class="radio">
  303 + {foreach name="goodsStatusList" item="vo"}
  304 + <label for="row[goods_status]-{$key}"><input id="row[goods_status]-{$key}" name="row[goods_status]" type="radio" value="{$key}" {in name="key" value="10"}checked{/in} /> {$vo}</label>
  305 + {/foreach}
  306 + </div>
  307 +
  308 + </div>
  309 + </div>
  310 + <div class="form-group">
  311 + <label class="control-label col-xs-12 col-sm-2">{:__('Is_delete')}:</label>
  312 + <div class="col-xs-12 col-sm-8">
  313 +
  314 + <select id="c-is_delete" data-rule="required" class="form-control selectpicker" name="row[is_delete]">
  315 + {foreach name="isDeleteList" item="vo"}
  316 + <option value="{$key}" {in name="key" value="0"}selected{/in}>{$vo}</option>
  317 + {/foreach}
  318 + </select>
  319 +
  320 + </div>
  321 + </div>
  322 + <div class="form-group">
  323 + <label class="control-label col-xs-12 col-sm-2">{:__('Is_index')}:</label>
  324 + <div class="col-xs-12 col-sm-8">
  325 +
  326 + <select id="c-is_index" data-rule="required" class="form-control selectpicker" name="row[is_index]">
  327 + {foreach name="isIndexList" item="vo"}
  328 + <option value="{$key}" {in name="key" value="0"}selected{/in}>{$vo}</option>
  329 + {/foreach}
  330 + </select>
  331 +
  332 + </div>
  333 + </div>
  334 + <div class="form-group layer-footer">
  335 + <label class="control-label col-xs-12 col-sm-2"></label>
  336 + <div class="col-xs-12 col-sm-8">
  337 + <button type="submit" class="btn btn-success btn-embossed disabled">{:__('OK')}</button>
  338 + <button type="reset" class="btn btn-default btn-embossed">{:__('Reset')}</button>
  339 + </div>
  340 + </div>
  341 +</form>
  342 +{include file="litestore/litestoregoods/spec_many_template" /}
  343 +
  344 +<link rel="stylesheet" href="__CDN__/assets/addons/litestore/css/litestoregoods.css">
  1 +<form id="edit-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action="">
  2 +
  3 + <div class="form-group">
  4 + <label class="control-label col-xs-12 col-sm-2">{:__('Goods_name')}:</label>
  5 + <div class="col-xs-12 col-sm-8">
  6 + <input id="c-goods_name" data-rule="required" class="form-control form-control" name="row[goods_name]" type="text" value="{$row.goods_name}">
  7 + </div>
  8 + </div>
  9 + <div class="form-group">
  10 + <label class="control-label col-xs-12 col-sm-2">{:__('Keywords')}:</label>
  11 + <div class="col-xs-12 col-sm-8">
  12 + <input id="c-keywords" data-rule="required" class="form-control form-control" name="row[keywords]" type="text" value="{$row.keywords}">
  13 + </div>
  14 + </div>
  15 + <div class="form-group">
  16 + <label class="control-label col-xs-12 col-sm-2">{:__('Category_id')}:</label>
  17 + <div class="col-xs-12 col-sm-8">
  18 + <input id="c-category_id" data-rule="required" data-source="litestore/litestorecategory/selectpage" class="form-control selectpage form-control" name="row[category_id]" type="text" value="{$row.category_id}">
  19 + </div>
  20 + </div>
  21 + <div class="form-group">
  22 + <label class="control-label col-xs-12 col-sm-2">{:__('Activity_id')}:</label>
  23 + <div class="col-xs-12 col-sm-8">
  24 + <input id="c-activity_id" data-source="activity/index" class="form-control selectpage" name="row[activity_id]" type="text" value="{$row.activity_id}">
  25 + </div>
  26 + </div>
  27 + <div class="form-group">
  28 + <label class="control-label col-xs-12 col-sm-2">{:__('Image')}:</label>
  29 + <div class="col-xs-12 col-sm-8">
  30 + <div class="input-group">
  31 + <input id="c-image" data-rule="required" class="form-control form-control" size="50" name="row[image]" type="text" value="{$row.image}">
  32 + <div class="input-group-addon no-border no-padding">
  33 + <span><button type="button" id="plupload-image" class="btn btn-danger plupload" data-input-id="c-image" data-mimetype="image/jpeg,image/png,image/jpg" data-multiple="false" data-preview-id="p-image"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
  34 + <span><button type="button" id="fachoose-image" class="btn btn-primary fachoose" data-input-id="c-image" data-mimetype="image/jpeg,image/png,image/jpg" data-multiple="false"><i class="fa fa-list"></i> {:__('Choose')}</button></span>
  35 + </div>
  36 + <span class="msg-box n-right" for="c-image"></span>
  37 + </div>
  38 + <ul class="row list-inline plupload-preview" id="p-image"></ul>
  39 + <span class="help-block">建议尺寸:宽110,高110</span>
  40 + </div>
  41 + </div>
  42 + <div class="form-group">
  43 + <label class="control-label col-xs-12 col-sm-2">{:__('Images')}:</label>
  44 + <div class="col-xs-12 col-sm-8">
  45 + <div class="input-group">
  46 + <input id="c-images" data-rule="required" class="form-control form-control" size="50" name="row[images]" type="text" value="{$row.images}">
  47 + <div class="input-group-addon no-border no-padding">
  48 + <span><button type="button" id="plupload-images" class="btn btn-danger plupload" data-input-id="c-images" data-mimetype="image/gif,image/jpeg,image/png,image/jpg,image/bmp" data-multiple="true" data-preview-id="p-images"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
  49 + <span><button type="button" id="fachoose-images" class="btn btn-primary fachoose" data-input-id="c-images" data-mimetype="image/*" data-multiple="true"><i class="fa fa-list"></i> {:__('Choose')}</button></span>
  50 + </div>
  51 + <span class="msg-box n-right" for="c-images"></span>
  52 + </div>
  53 + <ul class="row list-inline plupload-preview" id="p-images"></ul>
  54 + <span class="help-block">建议尺寸:宽375,高375</span>
  55 + </div>
  56 + </div>
  57 + <div class="form-group">
  58 + <label class="control-label col-xs-12 col-sm-2">{:__('Spec_type')}:</label>
  59 + <div class="col-xs-12 col-sm-8">
  60 +
  61 + <select id="c-spec_type" data-rule="required" class="form-control selectpicker" name="row[spec_type]">
  62 + {foreach name="specTypeList" item="vo"}
  63 + <option value="{$key}" {in name="key" value="$row.spec_type"}selected{/in}>{$vo}</option>
  64 + {/foreach}
  65 + </select>
  66 +
  67 + </div>
  68 + </div>
  69 +
  70 + <!-- 商品规格属性 start -->
  71 + <div class="goods-spec-many form-group" style="display: <?= $row['spec_type'] === '20' ? 'block' : 'none' ?>;" >
  72 + <!-- <label class="control-label col-xs-12 col-sm-2"></label>-->
  73 + <div class="goods-spec-box col-xs-12 col-sm-11" style="background-color: white;">
  74 + <!-- 规格属性 -->
  75 + <div class="spec-attr"></div>
  76 +
  77 + <!-- 添加规格:按钮 -->
  78 + <div class="spec-group-button">
  79 + <button type="button" class="btn-addSpecGroup btn btn-xs btn-success">添加规格</button>
  80 + </div>
  81 +
  82 + <!-- 添加规格:表单 -->
  83 + <div class="spec-group-add">
  84 + <div class="spec-group-add-item form-group">
  85 + <label class="control-label form-require">规格名 </label>
  86 + <input type="text" class="input-specName tpl-form-input"
  87 + placeholder="请输入规格名称">
  88 + </div>
  89 + <div class="spec-group-add-item form-group">
  90 + <label class="control-label form-require">规格值 </label>
  91 + <input type="text" class="input-specValue tpl-form-input"
  92 + placeholder="请输入规格值">
  93 + </div>
  94 + <div class="spec-group-add-item margin-top">
  95 + <button type="button" class="btn-addSpecName btn btn-xs btn-success"> 确定
  96 + </button>
  97 + <button type="button" class="btn-cancleAddSpecName btn btn-xs btn-default"> 取消
  98 + </button>
  99 + </div>
  100 + </div>
  101 + <!-- 商品多规格sku信息 -->
  102 + <div class="goods-sku scrollable-horizontal">
  103 + <!-- 分割线 -->
  104 + <div class="goods-spec-line"></div>
  105 + <!-- sku 批量设置 -->
  106 + <div class="spec-batch form-inline">
  107 + <div class="form-group">
  108 + <label class="control-label">批量设置</label>
  109 + </div>
  110 + <div class="form-group">
  111 + <input type="text" data-type="goods_no" placeholder="商家编码">
  112 + </div>
  113 + <div class="form-group">
  114 + <input type="number" data-type="goods_price" placeholder="销售价">
  115 + </div>
  116 + <div class="form-group">
  117 + <input type="number" data-type="line_price" placeholder="划线价">
  118 + </div>
  119 + <div class="form-group">
  120 + <input type="number" data-type="stock_num" placeholder="库存数量">
  121 + </div>
  122 + <div class="form-group">
  123 + <input type="number" data-type="goods_weight" placeholder="重量">
  124 + </div>
  125 + <div class="form-group">
  126 + <button type="button" class="btn-specBatchBtn btn btn-sm btn-secondary
  127 + radius">确定
  128 + </button>
  129 + </div>
  130 + </div>
  131 + <!-- sku table -->
  132 + <table class="spec-sku-tabel table table-bordered table-centered margin-bottom-xs text-nowrap"></table>
  133 + </div>
  134 + </div>
  135 + </div>
  136 +
  137 + <div class="goods-spec-single" style="display: <?= $row['spec_type'] === '10' ? 'block' : 'none' ?>;">
  138 + <div class="form-group">
  139 + <label class="control-label col-xs-12 col-sm-2">商品编码:</label>
  140 + <div class="col-xs-12 col-sm-8">
  141 + <input id="c-goods_no" class="form-control form-control" name="spec[goods_no]" type="text" value="{$row.spec.0.goods_no}">
  142 + </div>
  143 + </div>
  144 + <div class="form-group">
  145 + <label class="control-label col-xs-12 col-sm-2">商品价格:</label>
  146 + <div class="col-xs-12 col-sm-8">
  147 + <input id="c-goods_price" data-rule="required" class="form-control form-control" name="spec[goods_price]" type="number" value="{$row.spec.0.goods_price}">
  148 + </div>
  149 + </div>
  150 + <div class="form-group">
  151 + <label class="control-label col-xs-12 col-sm-2">商品划线价:</label>
  152 + <div class="col-xs-12 col-sm-8">
  153 + <input id="c-line_price" class="form-control form-control" name="spec[line_price]" type="number" value="{$row.spec.0.line_price}">
  154 + </div>
  155 + </div>
  156 + <div class="form-group">
  157 + <label class="control-label col-xs-12 col-sm-2">当前库存数量:</label>
  158 + <div class="col-xs-12 col-sm-8">
  159 + <input id="c-stock_num" class="form-control form-control" name="spec[stock_num]" type="number" value="{$row.spec.0.stock_num}">
  160 + </div>
  161 + </div>
  162 + <!--<div class="form-group">
  163 + <label class="control-label col-xs-12 col-sm-2">商品重量(Kg):</label>
  164 + <div class="col-xs-12 col-sm-8">
  165 + <input id="c-goods_weight" class="form-control form-control" name="spec[goods_weight]" type="number" value="{$row.spec.0.goods_weight}">
  166 + </div>
  167 + </div>-->
  168 + </div>
  169 + <!-- 商品规格属性 end -->
  170 +
  171 + <div class="form-group">
  172 + <label class="control-label col-xs-12 col-sm-2">{:__('Deduct_stock_type')}:</label>
  173 + <div class="col-xs-12 col-sm-8">
  174 +
  175 + <select id="c-deduct_stock_type" data-rule="required" class="form-control selectpicker" name="row[deduct_stock_type]">
  176 + {foreach name="deductStockTypeList" item="vo"}
  177 + <option value="{$key}" {in name="key" value="$row.deduct_stock_type"}selected{/in}>{$vo}</option>
  178 + {/foreach}
  179 + </select>
  180 +
  181 + </div>
  182 + </div>
  183 +<!-- <div class="form-group">-->
  184 +<!-- <label class="control-label col-xs-12 col-sm-2">{:__('Content')}:</label>-->
  185 +<!-- <div class="col-xs-12 col-sm-8">-->
  186 +<!-- <textarea id="c-content" data-rule="required" class="form-control editor form-control" rows="5" name="row[content]" cols="50">{$row.content}</textarea>-->
  187 +<!-- </div>-->
  188 +<!-- </div>-->
  189 +<!-- <div class="form-group">-->
  190 +<!-- <label class="control-label col-xs-12 col-sm-2">{:__('Sales_initial')}:</label>-->
  191 +<!-- <div class="col-xs-12 col-sm-8">-->
  192 +<!-- <input id="c-sales_initial" data-rule="required" class="form-control form-control" name="row[sales_initial]" type="number" value="{$row.sales_initial}">-->
  193 +<!-- </div>-->
  194 +<!-- </div>-->
  195 +<!-- <div class="form-group">-->
  196 +<!-- <label class="control-label col-xs-12 col-sm-2">{:__('Sales_actual')}:</label>-->
  197 +<!-- <div class="col-xs-12 col-sm-8">-->
  198 +<!-- <input id="c-sales_actual" data-rule="required" class="form-control form-control" name="row[sales_actual]" type="number" value="{$row.sales_actual}">-->
  199 +<!-- </div>-->
  200 +<!-- </div>-->
  201 +<!-- <div class="form-group">-->
  202 +<!-- <label class="control-label col-xs-12 col-sm-2">{:__('Goods_sort')}:</label>-->
  203 +<!-- <div class="col-xs-12 col-sm-8">-->
  204 +<!-- <input id="c-goods_sort" data-rule="required" class="form-control form-control" name="row[goods_sort]" type="number" value="{$row.goods_sort}">-->
  205 +<!-- </div>-->
  206 +<!-- </div>-->
  207 +<!-- <div class="form-group">-->
  208 +<!-- <label class="control-label col-xs-12 col-sm-2">{:__('Delivery_id')}:</label>-->
  209 +<!-- <div class="col-xs-12 col-sm-8">-->
  210 +<!-- <input id="c-delivery_id" data-rule="required" data-source="litestore/litestorefreight/index" class="form-control selectpage form-control" name="row[delivery_id]" type="text" value="{$row.delivery_id}">-->
  211 +<!-- </div>-->
  212 +<!-- </div>-->
  213 + <div class="form-group">
  214 + <label class="control-label col-xs-12 col-sm-2">{:__('Price_description')}:</label>
  215 + <div class="col-xs-12 col-sm-8">
  216 + <textarea id="c-price_description" data-rule="required" class="form-control" name="row[price_description]">{$row.price_description}</textarea>
  217 + </div>
  218 + </div>
  219 + <div class="form-group">
  220 + <label class="control-label col-xs-12 col-sm-2">{:__('Brand')}:</label>
  221 + <div class="col-xs-12 col-sm-8">
  222 + <input id="c-brand" data-rule="required" class="form-control form-control" name="row[brand]" type="text" value="{$row.brand}">
  223 + </div>
  224 + </div>
  225 + <div class="form-group">
  226 + <label class="control-label col-xs-12 col-sm-2">{:__('Makefor')}:</label>
  227 + <div class="col-xs-12 col-sm-8">
  228 + <div class="radio">
  229 + {foreach name="makeforList" item="vo"}
  230 + <label for="row[makefor]-{$key}"><input id="row[makefor]-{$key}" name="row[makefor]" type="radio" value="{$key}" {in name="key" value="$row.makefor"}checked{/in} /> {$vo}</label>
  231 + {/foreach}
  232 + </div>
  233 + </div>
  234 + </div>
  235 + <div class="form-group">
  236 + <label class="control-label col-xs-12 col-sm-2">{:__('Packing')}:</label>
  237 + <div class="col-xs-12 col-sm-8">
  238 + <input id="c-packing" data-rule="required" class="form-control form-control" name="row[packing]" type="text" value="{$row.packing}">
  239 + </div>
  240 + </div>
  241 + <div class="form-group">
  242 + <label class="control-label col-xs-12 col-sm-2">{:__('Keep')}:</label>
  243 + <div class="col-xs-12 col-sm-8">
  244 + <input id="c-keep" data-rule="required" class="form-control form-control" name="row[keep]" type="text" value="{$row.keep}">
  245 + </div>
  246 + </div>
  247 + <div class="form-group">
  248 + <label class="control-label col-xs-12 col-sm-2">{:__('Number')}:</label>
  249 + <div class="col-xs-12 col-sm-8">
  250 + <input id="c-number" data-rule="required" class="form-control form-control" name="row[number]" type="text" value="{$row.number}">
  251 + </div>
  252 + </div>
  253 +<!-- <div class="form-group">-->
  254 +<!-- <label class="control-label col-xs-12 col-sm-2">{:__('Down_image')}:</label>-->
  255 +<!-- <div class="col-xs-12 col-sm-8">-->
  256 +<!-- <div class="input-group">-->
  257 +<!-- <input id="c-down_image" data-rule="required" class="form-control form-control" size="50" name="row[down_image]" type="text" value="{$row.down_image}">-->
  258 +<!-- <div class="input-group-addon no-border no-padding">-->
  259 +<!-- <span><button type="button" id="plupload-down_image" class="btn btn-danger plupload" data-input-id="c-down_image" data-mimetype="image/jpeg,image/png,image/jpg" data-multiple="false" data-preview-id="p-down_image"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>-->
  260 +<!-- <span><button type="button" id="fachoose-down_image" class="btn btn-primary fachoose" data-input-id="c-down_image" data-mimetype="image/jpeg,image/png,image/jpg" data-multiple="false"><i class="fa fa-list"></i> {:__('Choose')}</button></span>-->
  261 +<!-- </div>-->
  262 +<!-- <span class="msg-box n-right" for="c-down_image"></span>-->
  263 +<!-- </div>-->
  264 +<!-- <ul class="row list-inline plupload-preview" id="p-down_image"></ul>-->
  265 +<!-- <span class="help-block">建议尺寸:宽375,高267</span>-->
  266 +<!-- </div>-->
  267 +<!-- </div>-->
  268 +<!-- <div class="form-group">-->
  269 +<!-- <label class="control-label col-xs-12 col-sm-2">{:__('Four_images')}:</label>-->
  270 +<!-- <div class="col-xs-12 col-sm-8">-->
  271 +<!-- <div class="input-group">-->
  272 +<!-- <input id="c-four_images" data-rule="required" class="form-control form-control" size="50" name="row[four_images]" type="text" value="{$row.four_images}">-->
  273 +<!-- <div class="input-group-addon no-border no-padding">-->
  274 +<!-- <span><button type="button" id="plupload-four_images" class="btn btn-danger plupload" data-input-id="c-four_images" data-mimetype="image/jpeg,image/png,image/jpg" data-multiple="true" data-preview-id="p-four_images"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>-->
  275 +<!-- <span><button type="button" id="fachoose-four_images" class="btn btn-primary fachoose" data-input-id="c-four_images" data-mimetype="image/jpeg,image/png,image/jpg" data-multiple="true"><i class="fa fa-list"></i> {:__('Choose')}</button></span>-->
  276 +<!-- </div>-->
  277 +<!-- <span class="msg-box n-right" for="c-four_images"></span>-->
  278 +<!-- </div>-->
  279 +<!-- <ul class="row list-inline plupload-preview" id="p-four_images"></ul>-->
  280 +<!-- <span class="help-block">建议尺寸:宽185,高185</span>-->
  281 +<!-- </div>-->
  282 +<!-- </div>-->
  283 + <div class="form-group">
  284 + <label class="control-label col-xs-12 col-sm-2">{:__('Detail_images')}:</label>
  285 + <div class="col-xs-12 col-sm-8">
  286 + <div class="input-group">
  287 + <input id="c-detail_images" data-rule="required" placeholder="图片最多添加十张" class="form-control form-control" size="50" name="row[detail_images]" type="text" value="{$row.detail_images}">
  288 + <div class="input-group-addon no-border no-padding">
  289 + <span><button type="button" id="plupload-detail_images" class="btn btn-danger plupload" data-input-id="c-detail_images" data-mimetype="image/jpeg,image/png,image/jpg" data-maxcount="10" data-multiple="true" data-preview-id="p-detail_images"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
  290 + <span><button type="button" id="fachoose-detail_images" class="btn btn-primary fachoose" data-input-id="c-detail_images" data-mimetype="image/jpeg,image/png,image/jpg" data-maxcount="10" data-multiple="true"><i class="fa fa-list"></i> {:__('Choose')}</button></span>
  291 + </div>
  292 + <span class="msg-box n-right" for="c-detail_images"></span>
  293 + </div>
  294 + <ul class="row list-inline plupload-preview" id="p-detail_images"></ul>
  295 + <span class="help-block">建议尺寸:宽185,高185</span>
  296 + </div>
  297 + </div>
  298 + <div class="form-group">
  299 + <label class="control-label col-xs-12 col-sm-2">{:__('Goods_status')}:</label>
  300 + <div class="col-xs-12 col-sm-8">
  301 +
  302 + <div class="radio">
  303 + {foreach name="goodsStatusList" item="vo"}
  304 + <label for="row[goods_status]-{$key}"><input id="row[goods_status]-{$key}" name="row[goods_status]" type="radio" value="{$key}" {in name="key" value="$row.goods_status"}checked{/in} /> {$vo}</label>
  305 + {/foreach}
  306 + </div>
  307 +
  308 + </div>
  309 + </div>
  310 + <div class="form-group">
  311 + <label class="control-label col-xs-12 col-sm-2">{:__('Is_delete')}:</label>
  312 + <div class="col-xs-12 col-sm-8">
  313 +
  314 + <select id="c-is_delete" data-rule="required" class="form-control selectpicker" name="row[is_delete]">
  315 + {foreach name="isDeleteList" item="vo"}
  316 + <option value="{$key}" {in name="key" value="$row.is_delete"}selected{/in}>{$vo}</option>
  317 + {/foreach}
  318 + </select>
  319 +
  320 + </div>
  321 + </div>
  322 + <div class="form-group">
  323 + <label class="control-label col-xs-12 col-sm-2">{:__('Is_index')}:</label>
  324 + <div class="col-xs-12 col-sm-8">
  325 +
  326 + <select id="c-is_index" data-rule="required" class="form-control selectpicker" name="row[is_index]">
  327 + {foreach name="isIndexList" item="vo"}
  328 + <option value="{$key}" {in name="key" value="$row.is_index"}selected{/in}>{$vo}</option>
  329 + {/foreach}
  330 + </select>
  331 +
  332 + </div>
  333 + </div>
  334 + <div class="form-group layer-footer">
  335 + <label class="control-label col-xs-12 col-sm-2"></label>
  336 + <div class="col-xs-12 col-sm-8">
  337 + <button type="submit" class="btn btn-success btn-embossed disabled">{:__('OK')}</button>
  338 + <button type="reset" class="btn btn-default btn-embossed">{:__('Reset')}</button>
  339 + </div>
  340 + </div>
  341 +</form>
  342 +
  343 +{include file="litestore/litestoregoods/spec_many_template" /}
  344 +
  345 +<link rel="stylesheet" href="__CDN__/assets/addons/litestore/css/litestoregoods.css">
  346 +
  347 +<script type="text/javascript">
  348 + var from_specData = <?= $row['specData'] ?>;
  349 +</script>
  1 +<div class="panel panel-default panel-intro">
  2 + {:build_heading()}
  3 +
  4 + <div class="panel-body">
  5 + <div id="myTabContent" class="tab-content">
  6 + <div class="tab-pane fade active in" id="one">
  7 + <div class="widget-body no-padding">
  8 + <div id="toolbar" class="toolbar">
  9 + <a href="javascript:;" class="btn btn-primary btn-refresh" title="{:__('Refresh')}"><i
  10 + class="fa fa-refresh"></i> </a>
  11 +<!-- <a href="javascript:;"-->
  12 +<!-- class="btn btn-success btn-add {:$auth->check('litestore/litestoregoods/add')?'':'hide'}"-->
  13 +<!-- title="{:__('Add')}"><i class="fa fa-plus"></i> {:__('Add')}</a>-->
  14 +<!-- <a href="javascript:;"-->
  15 +<!-- class="btn btn-success btn-edit btn-disabled disabled {:$auth->check('litestore/litestoregoods/edit')?'':'hide'}"-->
  16 +<!-- title="{:__('Edit')}"><i class="fa fa-pencil"></i> {:__('Edit')}</a>-->
  17 + <a href="javascript:;"
  18 + class="btn btn-danger btn-del btn-disabled disabled {:$auth->check('litestore/litestoregoods/del')?'':'hide'}"
  19 + title="{:__('Delete')}"><i class="fa fa-trash"></i> {:__('Delete')}</a>
  20 + <div class="dropdown btn-group {:$auth->check('litestore/litestoregoods/multi')?'':'hide'}">
  21 + <a class="btn btn-primary btn-more dropdown-toggle btn-disabled disabled" data-toggle="dropdown"><i class="fa fa-check-square-o"></i> {:__('批量添加活动商品')}</a>
  22 + <ul class="dropdown-menu text-left" role="menu">
  23 + <li><a class="btn btn-link btn-multi btn-disabled disabled" href="javascript:;" data-params="activity_id=1"><i class="fa fa-free-code-camp"></i> {:__('新人用户')}</a></li>
  24 + <li><a class="btn btn-link btn-multi btn-disabled disabled" href="javascript:;" data-params="activity_id=2"><i class="fa fa-clock-o"></i> {:__('限时秒杀')}</a></li>
  25 + <li><a class="btn btn-link btn-multi btn-disabled disabled" href="javascript:;" data-params="activity_id=3"><i class="fa fa-location-arrow"></i> {:__('进口商品')}</a></li>
  26 + <li><a class="btn btn-link btn-multi btn-disabled disabled" href="javascript:;" data-params="activity_id=0"><i class="fa fa-eye-slash"></i> {:__('不参与活动')}</a></li>
  27 + </ul>
  28 + </div>
  29 + </div>
  30 + <table id="table" class="table table-striped table-bordered table-hover table-nowrap"
  31 + data-operate-edit="{:$auth->check('litestore/litestoregoods/edit')}"
  32 + data-operate-del="{:$auth->check('litestore/litestoregoods/del')}"
  33 + width="100%">
  34 + </table>
  35 + </div>
  36 + </div>
  37 +
  38 + </div>
  39 + </div>
  40 +</div>
  1 +<!-- 商品规格属性模板 -->
  2 +<script id="tpl_spec_attr" type="text/template">
  3 + <% for(var j=0;j< spec_attr.length;j++){ %>
  4 + <div class="spec-group-item" data-index="<%=j%>" data-group-id="<%=spec_attr[j].group_id%>">
  5 + <div class="spec-group-name">
  6 + <span><%=spec_attr[j].group_name%></span>
  7 + <i class="spec-group-delete fa fa-trash icon-shanchu1" title="点击删除"></i>
  8 + </div>
  9 + <div class="spec-list am-cf">
  10 + <% for(var k=0;k<spec_attr[j].spec_items.length;k++){ %>
  11 + <div class="spec-item am-fl" data-item-index="<%=k%>">
  12 + <span><%=spec_attr[j].spec_items[k].spec_value%></span>
  13 + <i class="spec-item-delete fa fa-trash icon-shanchu1" title="点击删除"></i>
  14 + </div>
  15 + <% } %>
  16 + <div class="spec-item-add am-cf am-fl">
  17 + <input type="text" class="ipt-specItem am-fl am-field-valid">
  18 + <button type="button" class="btn-addSpecItem btn btn-xs btn-success am-fl">添加</button>
  19 + </div>
  20 + </div>
  21 + </div>
  22 + <% } %>
  23 +</script>
  24 +
  25 +<!-- 商品规格table模板 -->
  26 +<script id="tpl_spec_table" type="text/template">
  27 + <tbody>
  28 + <tr>
  29 + <th>sku隐藏</th>
  30 + <% for(var i=0;i< spec_attr.length;i++){ %>
  31 + <th><%=spec_attr[i].group_name%></th>
  32 + <% } %>
  33 + <th>商品编码</th>
  34 + <th>销售价</th>
  35 + <th>划线价</th>
  36 + <th>库存(-1隐藏)</th>
  37 + <!--<th>重量(kg)</th>-->
  38 + <th>规格封面</th>
  39 + <th>封面编辑</th>
  40 + </tr>
  41 + <% for(var i=0;i<spec_list.length;i++){ %>
  42 + <tr data-index="<%=i%>" data-sku-id="<%=spec_list[i].spec_sku_id %>">
  43 + <td>
  44 + <button type="button" class="am-text-middle btn delsku-bt"><% if(spec_list[i].form.stock_num===-1) {%> 显示 <%}else{%> 隐藏 <%} %></button>
  45 + </td>
  46 + <% for(var k=0;k<spec_list[i].rows.length;k++){ %>
  47 + <td class="td-spec-value am-text-middle" rowspan="<%=spec_list[i].rows[k].rowspan%>">
  48 + <%=spec_list[i].rows[k].spec_value%>
  49 + </td>
  50 + <% } %>
  51 + <td>
  52 + <input <% if(spec_list[i].form.stock_num===-1) {%> disabled <%}else{%> <%} %> type="text" name="goods_no" data-rule="required" value="<%=spec_list[i].form.goods_no%>" class="ipt-goods-no am-field-valid">
  53 + </td>
  54 + <td>
  55 + <input <% if(spec_list[i].form.stock_num===-1) {%> disabled <%}else{%> <%} %> type="number" name="goods_price" data-rule="required" value="<%=spec_list[i].form.goods_price%>" class="am-field-valid ipt-w80"
  56 + required>
  57 + </td>
  58 + <td>
  59 + <input <% if(spec_list[i].form.stock_num===-1) {%> disabled <%}else{%> <%} %> type="number" name="line_price" data-rule="required" value="<%=spec_list[i].form.line_price%>" class="am-field-valid ipt-w80">
  60 + </td>
  61 + <td>
  62 + <input <% if(spec_list[i].form.stock_num===-1) {%>disabled <%}else{%> <%} %> type="number" name="stock_num" data-rule="required" value="<%=spec_list[i].form.stock_num%>" class="am-field-valid ipt-w80"
  63 + required>
  64 + </td>
  65 + <!--<td>
  66 + <input <% if(spec_list[i].form.stock_num===-1) {%>disabled <%}else{%> <%} %> type="number" name="goods_weight" data-rule="required" value="<%=spec_list[i].form.goods_weight%>" class="am-field-valid ipt-w80"
  67 + required>
  68 + </td>-->
  69 + <td>
  70 + <input <% if(spec_list[i].form.stock_num===-1) {%> disabled <%}else{%> <%} %> id="c-image<%=i%>" class="form-control form-control" style="display: none!important;" name="spec_image" type="text" value="<%=spec_list[i].form.spec_image%>">
  71 + <div class="row list-inline plupload-preview spe_img_one" id="p-image<%=i%>"></div>
  72 + </td>
  73 + <td>
  74 + <div class="input-group-addon no-border no-padding">
  75 + <span><button type="button" id="plupload-image<%=i%>" style="display: none!important;" class="btn btn-danger plupload" data-input-id="c-image<%=i%>" data-mimetype="image/gif,image/jpeg,image/png,image/jpg,image/bmp" data-multiple="false" data-preview-id="p-image<%=i%>"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
  76 + <span><button type="button" <% if(spec_list[i].form.stock_num===-1) {%> disabled <%}else{%> <%} %> id="fachoose-image<%=i%>" class="btn btn-primary fachoose" data-input-id="c-image<%=i%>" data-mimetype="image/*" data-preview-id="p-image<%=i%>" data-multiple="false"><i class="fa fa-list"></i> {:__('Choose')}</button></span>
  77 + </div>
  78 + </td>
  79 + </tr>
  80 + <% } %>
  81 + </tbody>
  82 +</script>
  1 +<form id="add-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action="">
  2 +
  3 + <div class="form-group">
  4 + <label class="control-label col-xs-12 col-sm-2">{:__('Goods_name')}:</label>
  5 + <div class="col-xs-12 col-sm-8">
  6 + <input id="c-goods_name" data-rule="required" class="form-control form-control" name="row[goods_name]" type="text" value="">
  7 + </div>
  8 + </div>
  9 + <div class="form-group">
  10 + <label class="control-label col-xs-12 col-sm-2">{:__('Keywords')}:</label>
  11 + <div class="col-xs-12 col-sm-8">
  12 + <input id="c-keywords" data-rule="required" class="form-control form-control" name="row[keywords]" type="text" value="">
  13 + </div>
  14 + </div>
  15 + <div class="form-group">
  16 + <label class="control-label col-xs-12 col-sm-2">{:__('Category_id')}:</label>
  17 + <div class="col-xs-12 col-sm-8">
  18 + <input id="c-category_id" data-rule="required" data-source="litestore/litestorecategory/selectpage" class="form-control selectpage form-control" name="row[category_id]" type="text" value="">
  19 + </div>
  20 + </div>
  21 + <div class="form-group">
  22 + <label class="control-label col-xs-12 col-sm-2">{:__('Activity_id')}:</label>
  23 + <div class="col-xs-12 col-sm-8">
  24 + <input id="c-activity_id" data-source="activity/index" class="form-control selectpage" name="row[activity_id]" type="text" value="">
  25 + </div>
  26 + </div>
  27 + <div class="form-group">
  28 + <label class="control-label col-xs-12 col-sm-2">{:__('Image')}:</label>
  29 + <div class="col-xs-12 col-sm-8">
  30 + <div class="input-group">
  31 + <input id="c-image" data-rule="required" class="form-control form-control" size="50" name="row[image]" type="text">
  32 + <div class="input-group-addon no-border no-padding">
  33 + <span><button type="button" id="plupload-image" class="btn btn-danger plupload" data-input-id="c-image" data-mimetype="image/jpeg,image/png,image/jpg" data-multiple="false" data-preview-id="p-image"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
  34 + <span><button type="button" id="fachoose-image" class="btn btn-primary fachoose" data-input-id="c-image" data-mimetype="image/jpeg,image/png,image/jpg" data-multiple="false"><i class="fa fa-list"></i> {:__('Choose')}</button></span>
  35 + </div>
  36 + <span class="msg-box n-right" for="c-image"></span>
  37 + </div>
  38 + <ul class="row list-inline plupload-preview" id="p-image"></ul>
  39 + <span class="help-block">建议尺寸:宽110,高110</span>
  40 + </div>
  41 + </div>
  42 + <div class="form-group">
  43 + <label class="control-label col-xs-12 col-sm-2">{:__('Images')}:</label>
  44 + <div class="col-xs-12 col-sm-8">
  45 + <div class="input-group">
  46 + <input id="c-images" data-rule="required" class="form-control form-control" size="50" name="row[images]" type="text">
  47 + <div class="input-group-addon no-border no-padding">
  48 + <span><button type="button" id="plupload-images" class="btn btn-danger plupload" data-input-id="c-images" data-mimetype="image/gif,image/jpeg,image/png,image/jpg,image/bmp" data-multiple="true" data-preview-id="p-images"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
  49 + <span><button type="button" id="fachoose-images" class="btn btn-primary fachoose" data-input-id="c-images" data-mimetype="image/*" data-multiple="true"><i class="fa fa-list"></i> {:__('Choose')}</button></span>
  50 + </div>
  51 + <span class="msg-box n-right" for="c-images"></span>
  52 + </div>
  53 + <ul class="row list-inline plupload-preview" id="p-images"></ul>
  54 + <span class="help-block">建议尺寸:宽375,高375</span>
  55 + </div>
  56 + </div>
  57 + <div class="form-group">
  58 + <label class="control-label col-xs-12 col-sm-2">{:__('Spec_type')}:</label>
  59 + <div class="col-xs-12 col-sm-8">
  60 +
  61 + <select id="c-spec_type" data-rule="required" class="form-control selectpicker" name="row[spec_type]">
  62 + {foreach name="specTypeList" item="vo"}
  63 + <option value="{$key}" {in name="key" value="10"}selected{/in}>{$vo}</option>
  64 + {/foreach}
  65 + </select>
  66 +
  67 + </div>
  68 + </div>
  69 +
  70 +<!-- 商品规格属性 start -->
  71 +<div class="goods-spec-many form-group">
  72 + <!-- <label class="control-label col-xs-12 col-sm-2"></label>-->
  73 + <div class="goods-spec-box col-xs-12 col-sm-11" style="background-color: white;">
  74 + <!-- 规格属性 -->
  75 + <div class="spec-attr"></div>
  76 +
  77 + <!-- 添加规格:按钮 -->
  78 + <div class="spec-group-button">
  79 + <button type="button" class="btn-addSpecGroup btn btn-xs btn-success">添加规格</button>
  80 + </div>
  81 +
  82 + <!-- 添加规格:表单 -->
  83 + <div class="spec-group-add">
  84 + <div class="spec-group-add-item form-group">
  85 + <label class="control-label form-require">规格名 </label>
  86 + <input type="text" class="input-specName tpl-form-input"
  87 + placeholder="请输入规格名称">
  88 + </div>
  89 + <div class="spec-group-add-item form-group">
  90 + <label class="control-label form-require">规格值 </label>
  91 + <input type="text" class="input-specValue tpl-form-input"
  92 + placeholder="请输入规格值">
  93 + </div>
  94 + <div class="spec-group-add-item margin-top">
  95 + <button type="button" class="btn-addSpecName btn btn-xs btn-success"> 确定
  96 + </button>
  97 + <button type="button" class="btn-cancleAddSpecName btn btn-xs btn-default"> 取消
  98 + </button>
  99 + </div>
  100 + </div>
  101 + <!-- 商品多规格sku信息 -->
  102 + <div class="goods-sku scrollable-horizontal">
  103 + <!-- 分割线 -->
  104 + <div class="goods-spec-line"></div>
  105 + <!-- sku 批量设置 -->
  106 + <div class="spec-batch form-inline">
  107 + <div class="form-group">
  108 + <label class="control-label">批量设置</label>
  109 + </div>
  110 + <div class="form-group">
  111 + <input type="text" data-type="goods_no" placeholder="商家编码">
  112 + </div>
  113 + <div class="form-group">
  114 + <input type="number" data-type="goods_price" placeholder="销售价">
  115 + </div>
  116 + <div class="form-group">
  117 + <input type="number" data-type="line_price" placeholder="划线价">
  118 + </div>
  119 + <div class="form-group">
  120 + <input type="number" data-type="stock_num" placeholder="库存数量">
  121 + </div>
  122 + <!--<div class="form-group">
  123 + <input type="number" data-type="goods_weight" placeholder="重量">
  124 + </div>-->
  125 + <div class="form-group">
  126 + <button type="button" class="btn-specBatchBtn btn btn-sm btn-secondary
  127 + radius">确定
  128 + </button>
  129 + </div>
  130 + </div>
  131 + <!-- sku table -->
  132 + <table class="spec-sku-tabel table table-bordered table-centered margin-bottom-xs text-nowrap"></table>
  133 + </div>
  134 + </div>
  135 +</div>
  136 +
  137 +<div class="goods-spec-single">
  138 + <div class="form-group">
  139 + <label class="control-label col-xs-12 col-sm-2">商品编码:</label>
  140 + <div class="col-xs-12 col-sm-8">
  141 + <input id="c-goods_no" class="form-control form-control" name="spec[goods_no]" type="text" value="">
  142 + </div>
  143 + </div>
  144 + <div class="form-group">
  145 + <label class="control-label col-xs-12 col-sm-2">商品价格:</label>
  146 + <div class="col-xs-12 col-sm-8">
  147 + <input id="c-goods_price" data-rule="required" class="form-control form-control" name="spec[goods_price]" type="number" value="0">
  148 + </div>
  149 + </div>
  150 + <div class="form-group">
  151 + <label class="control-label col-xs-12 col-sm-2">商品划线价:</label>
  152 + <div class="col-xs-12 col-sm-8">
  153 + <input id="c-line_price" class="form-control form-control" name="spec[line_price]" type="number" value="">
  154 + </div>
  155 + </div>
  156 + <div class="form-group">
  157 + <label class="control-label col-xs-12 col-sm-2">当前库存数量:</label>
  158 + <div class="col-xs-12 col-sm-8">
  159 + <input id="c-stock_num" class="form-control form-control" name="spec[stock_num]" type="number" value="100">
  160 + </div>
  161 + </div>
  162 + <!--<div class="form-group">
  163 + <label class="control-label col-xs-12 col-sm-2">商品重量(Kg):</label>
  164 + <div class="col-xs-12 col-sm-8">
  165 + <input id="c-goods_weight" class="form-control form-control" name="spec[goods_weight]" type="number" value="1">
  166 + </div>
  167 + </div>-->
  168 +</div>
  169 +<!-- 商品规格属性 end -->
  170 +
  171 + <div class="form-group">
  172 + <label class="control-label col-xs-12 col-sm-2">{:__('Deduct_stock_type')}:</label>
  173 + <div class="col-xs-12 col-sm-8">
  174 +
  175 + <select id="c-deduct_stock_type" data-rule="required" class="form-control selectpicker" name="row[deduct_stock_type]">
  176 + {foreach name="deductStockTypeList" item="vo"}
  177 + <option value="{$key}" {in name="key" value="20"}selected{/in}>{$vo}</option>
  178 + {/foreach}
  179 + </select>
  180 +
  181 + </div>
  182 + </div>
  183 +<!-- <div class="form-group">-->
  184 +<!-- <label class="control-label col-xs-12 col-sm-2">{:__('Content')}:</label>-->
  185 +<!-- <div class="col-xs-12 col-sm-8">-->
  186 +<!-- <textarea id="c-content" data-rule="required" class="form-control editor form-control" rows="5" name="row[content]" cols="50"></textarea>-->
  187 +<!-- </div>-->
  188 +<!-- </div>-->
  189 +<!-- <div class="form-group">-->
  190 +<!-- <label class="control-label col-xs-12 col-sm-2">{:__('Sales_initial')}:</label>-->
  191 +<!-- <div class="col-xs-12 col-sm-8">-->
  192 +<!-- <input id="c-sales_initial" data-rule="required" class="form-control form-control" name="row[sales_initial]" type="number" value="0">-->
  193 +<!-- </div>-->
  194 +<!-- </div>-->
  195 +<!-- <div class="form-group">-->
  196 +<!-- <label class="control-label col-xs-12 col-sm-2">{:__('Sales_actual')}:</label>-->
  197 +<!-- <div class="col-xs-12 col-sm-8">-->
  198 +<!-- <input id="c-sales_actual" data-rule="required" class="form-control form-control" name="row[sales_actual]" type="number" value="0">-->
  199 +<!-- </div>-->
  200 +<!-- </div>-->
  201 +<!-- <div class="form-group">-->
  202 +<!-- <label class="control-label col-xs-12 col-sm-2">{:__('Goods_sort')}:</label>-->
  203 +<!-- <div class="col-xs-12 col-sm-8">-->
  204 +<!-- <input id="c-goods_sort" data-rule="required" class="form-control form-control" name="row[goods_sort]" type="number" value="100">-->
  205 +<!-- </div>-->
  206 +<!-- </div>-->
  207 +<!-- <div class="form-group">-->
  208 +<!-- <label class="control-label col-xs-12 col-sm-2">{:__('Delivery_id')}:</label>-->
  209 +<!-- <div class="col-xs-12 col-sm-8">-->
  210 +<!-- <input id="c-delivery_id" data-rule="required" data-source="litestore/litestorefreight/index" class="form-control selectpage form-control" name="row[delivery_id]" type="text" value="">-->
  211 +<!-- </div>-->
  212 +<!-- </div>-->
  213 + <div class="form-group">
  214 + <label class="control-label col-xs-12 col-sm-2">{:__('Price_description')}:</label>
  215 + <div class="col-xs-12 col-sm-8">
  216 + <textarea id="c-price_description" data-rule="required" class="form-control" name="row[price_description]"></textarea>
  217 + </div>
  218 + </div>
  219 + <div class="form-group">
  220 + <label class="control-label col-xs-12 col-sm-2">{:__('Brand')}:</label>
  221 + <div class="col-xs-12 col-sm-8">
  222 + <input id="c-brand" data-rule="required" class="form-control form-control" name="row[brand]" type="text" value="">
  223 + </div>
  224 + </div>
  225 + <div class="form-group">
  226 + <label class="control-label col-xs-12 col-sm-2">{:__('Makefor')}:</label>
  227 + <div class="col-xs-12 col-sm-8">
  228 + <div class="radio">
  229 + {foreach name="makeforList" item="vo"}
  230 + <label for="row[makefor]-{$key}"><input id="row[makefor]-{$key}" name="row[makefor]" type="radio" value="{$key}" {in name="key" value="1"}checked{/in} /> {$vo}</label>
  231 + {/foreach}
  232 + </div>
  233 + </div>
  234 + </div>
  235 + <div class="form-group">
  236 + <label class="control-label col-xs-12 col-sm-2">{:__('Packing')}:</label>
  237 + <div class="col-xs-12 col-sm-8">
  238 + <input id="c-packing" data-rule="required" class="form-control form-control" name="row[packing]" type="text" value="">
  239 + </div>
  240 + </div>
  241 + <div class="form-group">
  242 + <label class="control-label col-xs-12 col-sm-2">{:__('Keep')}:</label>
  243 + <div class="col-xs-12 col-sm-8">
  244 + <input id="c-keep" data-rule="required" class="form-control form-control" name="row[keep]" type="text" value="">
  245 + </div>
  246 + </div>
  247 + <div class="form-group">
  248 + <label class="control-label col-xs-12 col-sm-2">{:__('Number')}:</label>
  249 + <div class="col-xs-12 col-sm-8">
  250 + <input id="c-number" data-rule="required" class="form-control form-control" name="row[number]" type="text" value="">
  251 + </div>
  252 + </div>
  253 +<!-- <div class="form-group">-->
  254 +<!-- <label class="control-label col-xs-12 col-sm-2">{:__('Down_image')}:</label>-->
  255 +<!-- <div class="col-xs-12 col-sm-8">-->
  256 +<!-- <div class="input-group">-->
  257 +<!-- <input id="c-down_image" data-rule="required" class="form-control form-control" size="50" name="row[down_image]" type="text">-->
  258 +<!-- <div class="input-group-addon no-border no-padding">-->
  259 +<!-- <span><button type="button" id="plupload-down_image" class="btn btn-danger plupload" data-input-id="c-down_image" data-mimetype="image/jpeg,image/png,image/jpg" data-multiple="false" data-preview-id="p-down_image"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>-->
  260 +<!-- <span><button type="button" id="fachoose-down_image" class="btn btn-primary fachoose" data-input-id="c-down_image" data-mimetype="image/jpeg,image/png,image/jpg" data-multiple="false"><i class="fa fa-list"></i> {:__('Choose')}</button></span>-->
  261 +<!-- </div>-->
  262 +<!-- <span class="msg-box n-right" for="c-down_image"></span>-->
  263 +<!-- </div>-->
  264 +<!-- <ul class="row list-inline plupload-preview" id="p-down_image"></ul>-->
  265 +<!-- <span class="help-block">建议尺寸:宽375,高267</span>-->
  266 +<!-- </div>-->
  267 +<!-- </div>-->
  268 +<!-- <div class="form-group">-->
  269 +<!-- <label class="control-label col-xs-12 col-sm-2">{:__('Four_images')}:</label>-->
  270 +<!-- <div class="col-xs-12 col-sm-8">-->
  271 +<!-- <div class="input-group">-->
  272 +<!-- <input id="c-four_images" data-rule="required" class="form-control form-control" size="50" name="row[four_images]" type="text">-->
  273 +<!-- <div class="input-group-addon no-border no-padding">-->
  274 +<!-- <span><button type="button" id="plupload-four_images" class="btn btn-danger plupload" data-input-id="c-four_images" data-mimetype="image/jpeg,image/png,image/jpg" data-multiple="true" data-preview-id="p-four_images"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>-->
  275 +<!-- <span><button type="button" id="fachoose-four_images" class="btn btn-primary fachoose" data-input-id="c-four_images" data-mimetype="image/jpeg,image/png,image/jpg" data-multiple="true"><i class="fa fa-list"></i> {:__('Choose')}</button></span>-->
  276 +<!-- </div>-->
  277 +<!-- <span class="msg-box n-right" for="c-four_images"></span>-->
  278 +<!-- </div>-->
  279 +<!-- <ul class="row list-inline plupload-preview" id="p-four_images"></ul>-->
  280 +<!-- <span class="help-block">建议尺寸:宽185,高185</span>-->
  281 +<!-- </div>-->
  282 +<!-- </div>-->
  283 + <div class="form-group">
  284 + <label class="control-label col-xs-12 col-sm-2">{:__('Detail_images')}:</label>
  285 + <div class="col-xs-12 col-sm-8">
  286 + <div class="input-group">
  287 + <input id="c-detail_images" data-rule="required" class="form-control form-control" size="50" name="row[detail_images]" placeholder="图片最多添加十张" type="text">
  288 + <div class="input-group-addon no-border no-padding">
  289 + <span><button type="button" id="plupload-detail_images" data-maxcount="10" class="btn btn-danger plupload" data-input-id="c-detail_images" data-mimetype="image/jpeg,image/png,image/jpg" data-multiple="true" data-preview-id="p-detail_images"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
  290 + <span><button type="button" id="fachoose-detail_images" data-maxcount="10" class="btn btn-primary fachoose" data-input-id="c-detail_images" data-mimetype="image/jpeg,image/png,image/jpg" data-multiple="true"><i class="fa fa-list"></i> {:__('Choose')}</button></span>
  291 + </div>
  292 + <span class="msg-box n-right" for="c-detail_images"></span>
  293 + </div>
  294 + <ul class="row list-inline plupload-preview" id="p-detail_images"></ul>
  295 + <span class="help-block">建议尺寸:宽185,高185</span>
  296 + </div>
  297 + </div>
  298 + <div class="form-group">
  299 + <label class="control-label col-xs-12 col-sm-2">{:__('Goods_status')}:</label>
  300 + <div class="col-xs-12 col-sm-8">
  301 +
  302 + <div class="radio">
  303 + {foreach name="goodsStatusList" item="vo"}
  304 + <label for="row[goods_status]-{$key}"><input id="row[goods_status]-{$key}" name="row[goods_status]" type="radio" value="{$key}" {in name="key" value="10"}checked{/in} /> {$vo}</label>
  305 + {/foreach}
  306 + </div>
  307 +
  308 + </div>
  309 + </div>
  310 + <div class="form-group">
  311 + <label class="control-label col-xs-12 col-sm-2">{:__('Is_delete')}:</label>
  312 + <div class="col-xs-12 col-sm-8">
  313 +
  314 + <select id="c-is_delete" data-rule="required" class="form-control selectpicker" name="row[is_delete]">
  315 + {foreach name="isDeleteList" item="vo"}
  316 + <option value="{$key}" {in name="key" value="0"}selected{/in}>{$vo}</option>
  317 + {/foreach}
  318 + </select>
  319 +
  320 + </div>
  321 + </div>
  322 + <div class="form-group">
  323 + <label class="control-label col-xs-12 col-sm-2">{:__('Is_index')}:</label>
  324 + <div class="col-xs-12 col-sm-8">
  325 +
  326 + <select id="c-is_index" data-rule="required" class="form-control selectpicker" name="row[is_index]">
  327 + {foreach name="isIndexList" item="vo"}
  328 + <option value="{$key}" {in name="key" value="0"}selected{/in}>{$vo}</option>
  329 + {/foreach}
  330 + </select>
  331 +
  332 + </div>
  333 + </div>
  334 + <div class="form-group layer-footer">
  335 + <label class="control-label col-xs-12 col-sm-2"></label>
  336 + <div class="col-xs-12 col-sm-8">
  337 + <button type="submit" class="btn btn-success btn-embossed disabled">{:__('OK')}</button>
  338 + <button type="reset" class="btn btn-default btn-embossed">{:__('Reset')}</button>
  339 + </div>
  340 + </div>
  341 +</form>
  342 +{include file="litestore/litestoregoods/spec_many_template" /}
  343 +
  344 +<link rel="stylesheet" href="__CDN__/assets/addons/litestore/css/litestoregoods.css">
  1 +<form id="edit-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action="">
  2 +
  3 + <div class="form-group">
  4 + <label class="control-label col-xs-12 col-sm-2">{:__('Goods_name')}:</label>
  5 + <div class="col-xs-12 col-sm-8">
  6 + <input id="c-goods_name" data-rule="required" class="form-control form-control" name="row[goods_name]" type="text" value="{$row.goods_name}">
  7 + </div>
  8 + </div>
  9 + <div class="form-group">
  10 + <label class="control-label col-xs-12 col-sm-2">{:__('Keywords')}:</label>
  11 + <div class="col-xs-12 col-sm-8">
  12 + <input id="c-keywords" data-rule="required" class="form-control form-control" name="row[keywords]" type="text" value="{$row.keywords}">
  13 + </div>
  14 + </div>
  15 + <div class="form-group">
  16 + <label class="control-label col-xs-12 col-sm-2">{:__('Category_id')}:</label>
  17 + <div class="col-xs-12 col-sm-8">
  18 + <input id="c-category_id" data-rule="required" data-source="litestore/litestorecategory/selectpage" class="form-control selectpage form-control" name="row[category_id]" type="text" value="{$row.category_id}">
  19 + </div>
  20 + </div>
  21 + <div class="form-group">
  22 + <label class="control-label col-xs-12 col-sm-2">{:__('Activity_id')}:</label>
  23 + <div class="col-xs-12 col-sm-8">
  24 + <input id="c-activity_id" data-source="activity/index" class="form-control selectpage" name="row[activity_id]" type="text" value="{$row.activity_id}">
  25 + </div>
  26 + </div>
  27 + <div class="form-group">
  28 + <label class="control-label col-xs-12 col-sm-2">{:__('Image')}:</label>
  29 + <div class="col-xs-12 col-sm-8">
  30 + <div class="input-group">
  31 + <input id="c-image" data-rule="required" class="form-control form-control" size="50" name="row[image]" type="text" value="{$row.image}">
  32 + <div class="input-group-addon no-border no-padding">
  33 + <span><button type="button" id="plupload-image" class="btn btn-danger plupload" data-input-id="c-image" data-mimetype="image/jpeg,image/png,image/jpg" data-multiple="false" data-preview-id="p-image"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
  34 + <span><button type="button" id="fachoose-image" class="btn btn-primary fachoose" data-input-id="c-image" data-mimetype="image/jpeg,image/png,image/jpg" data-multiple="false"><i class="fa fa-list"></i> {:__('Choose')}</button></span>
  35 + </div>
  36 + <span class="msg-box n-right" for="c-image"></span>
  37 + </div>
  38 + <ul class="row list-inline plupload-preview" id="p-image"></ul>
  39 + <span class="help-block">建议尺寸:宽110,高110</span>
  40 + </div>
  41 + </div>
  42 + <div class="form-group">
  43 + <label class="control-label col-xs-12 col-sm-2">{:__('Images')}:</label>
  44 + <div class="col-xs-12 col-sm-8">
  45 + <div class="input-group">
  46 + <input id="c-images" data-rule="required" class="form-control form-control" size="50" name="row[images]" type="text" value="{$row.images}">
  47 + <div class="input-group-addon no-border no-padding">
  48 + <span><button type="button" id="plupload-images" class="btn btn-danger plupload" data-input-id="c-images" data-mimetype="image/gif,image/jpeg,image/png,image/jpg,image/bmp" data-multiple="true" data-preview-id="p-images"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
  49 + <span><button type="button" id="fachoose-images" class="btn btn-primary fachoose" data-input-id="c-images" data-mimetype="image/*" data-multiple="true"><i class="fa fa-list"></i> {:__('Choose')}</button></span>
  50 + </div>
  51 + <span class="msg-box n-right" for="c-images"></span>
  52 + </div>
  53 + <ul class="row list-inline plupload-preview" id="p-images"></ul>
  54 + <span class="help-block">建议尺寸:宽375,高375</span>
  55 + </div>
  56 + </div>
  57 + <div class="form-group">
  58 + <label class="control-label col-xs-12 col-sm-2">{:__('Spec_type')}:</label>
  59 + <div class="col-xs-12 col-sm-8">
  60 +
  61 + <select id="c-spec_type" data-rule="required" class="form-control selectpicker" name="row[spec_type]">
  62 + {foreach name="specTypeList" item="vo"}
  63 + <option value="{$key}" {in name="key" value="$row.spec_type"}selected{/in}>{$vo}</option>
  64 + {/foreach}
  65 + </select>
  66 +
  67 + </div>
  68 + </div>
  69 +
  70 + <!-- 商品规格属性 start -->
  71 + <div class="goods-spec-many form-group" style="display: <?= $row['spec_type'] === '20' ? 'block' : 'none' ?>;" >
  72 + <!-- <label class="control-label col-xs-12 col-sm-2"></label>-->
  73 + <div class="goods-spec-box col-xs-12 col-sm-11" style="background-color: white;">
  74 + <!-- 规格属性 -->
  75 + <div class="spec-attr"></div>
  76 +
  77 + <!-- 添加规格:按钮 -->
  78 + <div class="spec-group-button">
  79 + <button type="button" class="btn-addSpecGroup btn btn-xs btn-success">添加规格</button>
  80 + </div>
  81 +
  82 + <!-- 添加规格:表单 -->
  83 + <div class="spec-group-add">
  84 + <div class="spec-group-add-item form-group">
  85 + <label class="control-label form-require">规格名 </label>
  86 + <input type="text" class="input-specName tpl-form-input"
  87 + placeholder="请输入规格名称">
  88 + </div>
  89 + <div class="spec-group-add-item form-group">
  90 + <label class="control-label form-require">规格值 </label>
  91 + <input type="text" class="input-specValue tpl-form-input"
  92 + placeholder="请输入规格值">
  93 + </div>
  94 + <div class="spec-group-add-item margin-top">
  95 + <button type="button" class="btn-addSpecName btn btn-xs btn-success"> 确定
  96 + </button>
  97 + <button type="button" class="btn-cancleAddSpecName btn btn-xs btn-default"> 取消
  98 + </button>
  99 + </div>
  100 + </div>
  101 + <!-- 商品多规格sku信息 -->
  102 + <div class="goods-sku scrollable-horizontal">
  103 + <!-- 分割线 -->
  104 + <div class="goods-spec-line"></div>
  105 + <!-- sku 批量设置 -->
  106 + <div class="spec-batch form-inline">
  107 + <div class="form-group">
  108 + <label class="control-label">批量设置</label>
  109 + </div>
  110 + <div class="form-group">
  111 + <input type="text" data-type="goods_no" placeholder="商家编码">
  112 + </div>
  113 + <div class="form-group">
  114 + <input type="number" data-type="goods_price" placeholder="销售价">
  115 + </div>
  116 + <div class="form-group">
  117 + <input type="number" data-type="line_price" placeholder="划线价">
  118 + </div>
  119 + <div class="form-group">
  120 + <input type="number" data-type="stock_num" placeholder="库存数量">
  121 + </div>
  122 + <div class="form-group">
  123 + <input type="number" data-type="goods_weight" placeholder="重量">
  124 + </div>
  125 + <div class="form-group">
  126 + <button type="button" class="btn-specBatchBtn btn btn-sm btn-secondary
  127 + radius">确定
  128 + </button>
  129 + </div>
  130 + </div>
  131 + <!-- sku table -->
  132 + <table class="spec-sku-tabel table table-bordered table-centered margin-bottom-xs text-nowrap"></table>
  133 + </div>
  134 + </div>
  135 + </div>
  136 +
  137 + <div class="goods-spec-single" style="display: <?= $row['spec_type'] === '10' ? 'block' : 'none' ?>;">
  138 + <div class="form-group">
  139 + <label class="control-label col-xs-12 col-sm-2">商品编码:</label>
  140 + <div class="col-xs-12 col-sm-8">
  141 + <input id="c-goods_no" class="form-control form-control" name="spec[goods_no]" type="text" value="{$row.spec.0.goods_no}">
  142 + </div>
  143 + </div>
  144 + <div class="form-group">
  145 + <label class="control-label col-xs-12 col-sm-2">商品价格:</label>
  146 + <div class="col-xs-12 col-sm-8">
  147 + <input id="c-goods_price" data-rule="required" class="form-control form-control" name="spec[goods_price]" type="number" value="{$row.spec.0.goods_price}">
  148 + </div>
  149 + </div>
  150 + <div class="form-group">
  151 + <label class="control-label col-xs-12 col-sm-2">商品划线价:</label>
  152 + <div class="col-xs-12 col-sm-8">
  153 + <input id="c-line_price" class="form-control form-control" name="spec[line_price]" type="number" value="{$row.spec.0.line_price}">
  154 + </div>
  155 + </div>
  156 + <div class="form-group">
  157 + <label class="control-label col-xs-12 col-sm-2">当前库存数量:</label>
  158 + <div class="col-xs-12 col-sm-8">
  159 + <input id="c-stock_num" class="form-control form-control" name="spec[stock_num]" type="number" value="{$row.spec.0.stock_num}">
  160 + </div>
  161 + </div>
  162 + <!--<div class="form-group">
  163 + <label class="control-label col-xs-12 col-sm-2">商品重量(Kg):</label>
  164 + <div class="col-xs-12 col-sm-8">
  165 + <input id="c-goods_weight" class="form-control form-control" name="spec[goods_weight]" type="number" value="{$row.spec.0.goods_weight}">
  166 + </div>
  167 + </div>-->
  168 + </div>
  169 + <!-- 商品规格属性 end -->
  170 +
  171 + <div class="form-group">
  172 + <label class="control-label col-xs-12 col-sm-2">{:__('Deduct_stock_type')}:</label>
  173 + <div class="col-xs-12 col-sm-8">
  174 +
  175 + <select id="c-deduct_stock_type" data-rule="required" class="form-control selectpicker" name="row[deduct_stock_type]">
  176 + {foreach name="deductStockTypeList" item="vo"}
  177 + <option value="{$key}" {in name="key" value="$row.deduct_stock_type"}selected{/in}>{$vo}</option>
  178 + {/foreach}
  179 + </select>
  180 +
  181 + </div>
  182 + </div>
  183 +<!-- <div class="form-group">-->
  184 +<!-- <label class="control-label col-xs-12 col-sm-2">{:__('Content')}:</label>-->
  185 +<!-- <div class="col-xs-12 col-sm-8">-->
  186 +<!-- <textarea id="c-content" data-rule="required" class="form-control editor form-control" rows="5" name="row[content]" cols="50">{$row.content}</textarea>-->
  187 +<!-- </div>-->
  188 +<!-- </div>-->
  189 +<!-- <div class="form-group">-->
  190 +<!-- <label class="control-label col-xs-12 col-sm-2">{:__('Sales_initial')}:</label>-->
  191 +<!-- <div class="col-xs-12 col-sm-8">-->
  192 +<!-- <input id="c-sales_initial" data-rule="required" class="form-control form-control" name="row[sales_initial]" type="number" value="{$row.sales_initial}">-->
  193 +<!-- </div>-->
  194 +<!-- </div>-->
  195 +<!-- <div class="form-group">-->
  196 +<!-- <label class="control-label col-xs-12 col-sm-2">{:__('Sales_actual')}:</label>-->
  197 +<!-- <div class="col-xs-12 col-sm-8">-->
  198 +<!-- <input id="c-sales_actual" data-rule="required" class="form-control form-control" name="row[sales_actual]" type="number" value="{$row.sales_actual}">-->
  199 +<!-- </div>-->
  200 +<!-- </div>-->
  201 +<!-- <div class="form-group">-->
  202 +<!-- <label class="control-label col-xs-12 col-sm-2">{:__('Goods_sort')}:</label>-->
  203 +<!-- <div class="col-xs-12 col-sm-8">-->
  204 +<!-- <input id="c-goods_sort" data-rule="required" class="form-control form-control" name="row[goods_sort]" type="number" value="{$row.goods_sort}">-->
  205 +<!-- </div>-->
  206 +<!-- </div>-->
  207 +<!-- <div class="form-group">-->
  208 +<!-- <label class="control-label col-xs-12 col-sm-2">{:__('Delivery_id')}:</label>-->
  209 +<!-- <div class="col-xs-12 col-sm-8">-->
  210 +<!-- <input id="c-delivery_id" data-rule="required" data-source="litestore/litestorefreight/index" class="form-control selectpage form-control" name="row[delivery_id]" type="text" value="{$row.delivery_id}">-->
  211 +<!-- </div>-->
  212 +<!-- </div>-->
  213 + <div class="form-group">
  214 + <label class="control-label col-xs-12 col-sm-2">{:__('Price_description')}:</label>
  215 + <div class="col-xs-12 col-sm-8">
  216 + <textarea id="c-price_description" data-rule="required" class="form-control" name="row[price_description]">{$row.price_description}</textarea>
  217 + </div>
  218 + </div>
  219 + <div class="form-group">
  220 + <label class="control-label col-xs-12 col-sm-2">{:__('Brand')}:</label>
  221 + <div class="col-xs-12 col-sm-8">
  222 + <input id="c-brand" data-rule="required" class="form-control form-control" name="row[brand]" type="text" value="{$row.brand}">
  223 + </div>
  224 + </div>
  225 + <div class="form-group">
  226 + <label class="control-label col-xs-12 col-sm-2">{:__('Makefor')}:</label>
  227 + <div class="col-xs-12 col-sm-8">
  228 + <div class="radio">
  229 + {foreach name="makeforList" item="vo"}
  230 + <label for="row[makefor]-{$key}"><input id="row[makefor]-{$key}" name="row[makefor]" type="radio" value="{$key}" {in name="key" value="$row.makefor"}checked{/in} /> {$vo}</label>
  231 + {/foreach}
  232 + </div>
  233 + </div>
  234 + </div>
  235 + <div class="form-group">
  236 + <label class="control-label col-xs-12 col-sm-2">{:__('Packing')}:</label>
  237 + <div class="col-xs-12 col-sm-8">
  238 + <input id="c-packing" data-rule="required" class="form-control form-control" name="row[packing]" type="text" value="{$row.packing}">
  239 + </div>
  240 + </div>
  241 + <div class="form-group">
  242 + <label class="control-label col-xs-12 col-sm-2">{:__('Keep')}:</label>
  243 + <div class="col-xs-12 col-sm-8">
  244 + <input id="c-keep" data-rule="required" class="form-control form-control" name="row[keep]" type="text" value="{$row.keep}">
  245 + </div>
  246 + </div>
  247 + <div class="form-group">
  248 + <label class="control-label col-xs-12 col-sm-2">{:__('Number')}:</label>
  249 + <div class="col-xs-12 col-sm-8">
  250 + <input id="c-number" data-rule="required" class="form-control form-control" name="row[number]" type="text" value="{$row.number}">
  251 + </div>
  252 + </div>
  253 +<!-- <div class="form-group">-->
  254 +<!-- <label class="control-label col-xs-12 col-sm-2">{:__('Down_image')}:</label>-->
  255 +<!-- <div class="col-xs-12 col-sm-8">-->
  256 +<!-- <div class="input-group">-->
  257 +<!-- <input id="c-down_image" data-rule="required" class="form-control form-control" size="50" name="row[down_image]" type="text" value="{$row.down_image}">-->
  258 +<!-- <div class="input-group-addon no-border no-padding">-->
  259 +<!-- <span><button type="button" id="plupload-down_image" class="btn btn-danger plupload" data-input-id="c-down_image" data-mimetype="image/jpeg,image/png,image/jpg" data-multiple="false" data-preview-id="p-down_image"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>-->
  260 +<!-- <span><button type="button" id="fachoose-down_image" class="btn btn-primary fachoose" data-input-id="c-down_image" data-mimetype="image/jpeg,image/png,image/jpg" data-multiple="false"><i class="fa fa-list"></i> {:__('Choose')}</button></span>-->
  261 +<!-- </div>-->
  262 +<!-- <span class="msg-box n-right" for="c-down_image"></span>-->
  263 +<!-- </div>-->
  264 +<!-- <ul class="row list-inline plupload-preview" id="p-down_image"></ul>-->
  265 +<!-- <span class="help-block">建议尺寸:宽375,高267</span>-->
  266 +<!-- </div>-->
  267 +<!-- </div>-->
  268 +<!-- <div class="form-group">-->
  269 +<!-- <label class="control-label col-xs-12 col-sm-2">{:__('Four_images')}:</label>-->
  270 +<!-- <div class="col-xs-12 col-sm-8">-->
  271 +<!-- <div class="input-group">-->
  272 +<!-- <input id="c-four_images" data-rule="required" class="form-control form-control" size="50" name="row[four_images]" type="text" value="{$row.four_images}">-->
  273 +<!-- <div class="input-group-addon no-border no-padding">-->
  274 +<!-- <span><button type="button" id="plupload-four_images" class="btn btn-danger plupload" data-input-id="c-four_images" data-mimetype="image/jpeg,image/png,image/jpg" data-multiple="true" data-preview-id="p-four_images"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>-->
  275 +<!-- <span><button type="button" id="fachoose-four_images" class="btn btn-primary fachoose" data-input-id="c-four_images" data-mimetype="image/jpeg,image/png,image/jpg" data-multiple="true"><i class="fa fa-list"></i> {:__('Choose')}</button></span>-->
  276 +<!-- </div>-->
  277 +<!-- <span class="msg-box n-right" for="c-four_images"></span>-->
  278 +<!-- </div>-->
  279 +<!-- <ul class="row list-inline plupload-preview" id="p-four_images"></ul>-->
  280 +<!-- <span class="help-block">建议尺寸:宽185,高185</span>-->
  281 +<!-- </div>-->
  282 +<!-- </div>-->
  283 + <div class="form-group">
  284 + <label class="control-label col-xs-12 col-sm-2">{:__('Detail_images')}:</label>
  285 + <div class="col-xs-12 col-sm-8">
  286 + <div class="input-group">
  287 + <input id="c-detail_images" data-rule="required" placeholder="图片最多添加十张" class="form-control form-control" size="50" name="row[detail_images]" type="text" value="{$row.detail_images}">
  288 + <div class="input-group-addon no-border no-padding">
  289 + <span><button type="button" id="plupload-detail_images" class="btn btn-danger plupload" data-input-id="c-detail_images" data-mimetype="image/jpeg,image/png,image/jpg" data-maxcount="10" data-multiple="true" data-preview-id="p-detail_images"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
  290 + <span><button type="button" id="fachoose-detail_images" class="btn btn-primary fachoose" data-input-id="c-detail_images" data-mimetype="image/jpeg,image/png,image/jpg" data-maxcount="10" data-multiple="true"><i class="fa fa-list"></i> {:__('Choose')}</button></span>
  291 + </div>
  292 + <span class="msg-box n-right" for="c-detail_images"></span>
  293 + </div>
  294 + <ul class="row list-inline plupload-preview" id="p-detail_images"></ul>
  295 + <span class="help-block">建议尺寸:宽185,高185</span>
  296 + </div>
  297 + </div>
  298 + <div class="form-group">
  299 + <label class="control-label col-xs-12 col-sm-2">{:__('Goods_status')}:</label>
  300 + <div class="col-xs-12 col-sm-8">
  301 +
  302 + <div class="radio">
  303 + {foreach name="goodsStatusList" item="vo"}
  304 + <label for="row[goods_status]-{$key}"><input id="row[goods_status]-{$key}" name="row[goods_status]" type="radio" value="{$key}" {in name="key" value="$row.goods_status"}checked{/in} /> {$vo}</label>
  305 + {/foreach}
  306 + </div>
  307 +
  308 + </div>
  309 + </div>
  310 + <div class="form-group">
  311 + <label class="control-label col-xs-12 col-sm-2">{:__('Is_delete')}:</label>
  312 + <div class="col-xs-12 col-sm-8">
  313 +
  314 + <select id="c-is_delete" data-rule="required" class="form-control selectpicker" name="row[is_delete]">
  315 + {foreach name="isDeleteList" item="vo"}
  316 + <option value="{$key}" {in name="key" value="$row.is_delete"}selected{/in}>{$vo}</option>
  317 + {/foreach}
  318 + </select>
  319 +
  320 + </div>
  321 + </div>
  322 + <div class="form-group">
  323 + <label class="control-label col-xs-12 col-sm-2">{:__('Is_index')}:</label>
  324 + <div class="col-xs-12 col-sm-8">
  325 +
  326 + <select id="c-is_index" data-rule="required" class="form-control selectpicker" name="row[is_index]">
  327 + {foreach name="isIndexList" item="vo"}
  328 + <option value="{$key}" {in name="key" value="$row.is_index"}selected{/in}>{$vo}</option>
  329 + {/foreach}
  330 + </select>
  331 +
  332 + </div>
  333 + </div>
  334 + <div class="form-group layer-footer">
  335 + <label class="control-label col-xs-12 col-sm-2"></label>
  336 + <div class="col-xs-12 col-sm-8">
  337 + <button type="submit" class="btn btn-success btn-embossed disabled">{:__('OK')}</button>
  338 + <button type="reset" class="btn btn-default btn-embossed">{:__('Reset')}</button>
  339 + </div>
  340 + </div>
  341 +</form>
  342 +
  343 +{include file="litestore/litestoregoods/spec_many_template" /}
  344 +
  345 +<link rel="stylesheet" href="__CDN__/assets/addons/litestore/css/litestoregoods.css">
  346 +
  347 +<script type="text/javascript">
  348 + var from_specData = <?= $row['specData'] ?>;
  349 +</script>
  1 +<div class="panel panel-default panel-intro">
  2 + {:build_heading()}
  3 +
  4 + <div class="panel-body">
  5 + <div id="myTabContent" class="tab-content">
  6 + <div class="tab-pane fade active in" id="one">
  7 + <div class="widget-body no-padding">
  8 + <div id="toolbar" class="toolbar">
  9 + <a href="javascript:;" class="btn btn-primary btn-refresh" title="{:__('Refresh')}"><i
  10 + class="fa fa-refresh"></i> </a>
  11 +<!-- <a href="javascript:;"-->
  12 +<!-- class="btn btn-success btn-add {:$auth->check('litestore/litestoregoods/add')?'':'hide'}"-->
  13 +<!-- title="{:__('Add')}"><i class="fa fa-plus"></i> {:__('Add')}</a>-->
  14 +<!-- <a href="javascript:;"-->
  15 +<!-- class="btn btn-success btn-edit btn-disabled disabled {:$auth->check('litestore/litestoregoods/edit')?'':'hide'}"-->
  16 +<!-- title="{:__('Edit')}"><i class="fa fa-pencil"></i> {:__('Edit')}</a>-->
  17 + <a href="javascript:;"
  18 + class="btn btn-danger btn-del btn-disabled disabled {:$auth->check('litestore/litestoregoods/del')?'':'hide'}"
  19 + title="{:__('Delete')}"><i class="fa fa-trash"></i> {:__('Delete')}</a>
  20 + <div class="dropdown btn-group {:$auth->check('litestore/litestoregoods/multi')?'':'hide'}">
  21 + <a class="btn btn-primary btn-more dropdown-toggle btn-disabled disabled" data-toggle="dropdown"><i class="fa fa-check-square-o"></i> {:__('批量添加活动商品')}</a>
  22 + <ul class="dropdown-menu text-left" role="menu">
  23 + <li><a class="btn btn-link btn-multi btn-disabled disabled" href="javascript:;" data-params="activity_id=1"><i class="fa fa-free-code-camp"></i> {:__('新人用户')}</a></li>
  24 + <li><a class="btn btn-link btn-multi btn-disabled disabled" href="javascript:;" data-params="activity_id=2"><i class="fa fa-clock-o"></i> {:__('限时秒杀')}</a></li>
  25 + <li><a class="btn btn-link btn-multi btn-disabled disabled" href="javascript:;" data-params="activity_id=3"><i class="fa fa-location-arrow"></i> {:__('进口商品')}</a></li>
  26 + <li><a class="btn btn-link btn-multi btn-disabled disabled" href="javascript:;" data-params="activity_id=0"><i class="fa fa-eye-slash"></i> {:__('不参与活动')}</a></li>
  27 + </ul>
  28 + </div>
  29 + </div>
  30 + <table id="table" class="table table-striped table-bordered table-hover table-nowrap"
  31 + data-operate-edit="{:$auth->check('litestore/litestoregoods/edit')}"
  32 + data-operate-del="{:$auth->check('litestore/litestoregoods/del')}"
  33 + width="100%">
  34 + </table>
  35 + </div>
  36 + </div>
  37 +
  38 + </div>
  39 + </div>
  40 +</div>
  1 +<!-- 商品规格属性模板 -->
  2 +<script id="tpl_spec_attr" type="text/template">
  3 + <% for(var j=0;j< spec_attr.length;j++){ %>
  4 + <div class="spec-group-item" data-index="<%=j%>" data-group-id="<%=spec_attr[j].group_id%>">
  5 + <div class="spec-group-name">
  6 + <span><%=spec_attr[j].group_name%></span>
  7 + <i class="spec-group-delete fa fa-trash icon-shanchu1" title="点击删除"></i>
  8 + </div>
  9 + <div class="spec-list am-cf">
  10 + <% for(var k=0;k<spec_attr[j].spec_items.length;k++){ %>
  11 + <div class="spec-item am-fl" data-item-index="<%=k%>">
  12 + <span><%=spec_attr[j].spec_items[k].spec_value%></span>
  13 + <i class="spec-item-delete fa fa-trash icon-shanchu1" title="点击删除"></i>
  14 + </div>
  15 + <% } %>
  16 + <div class="spec-item-add am-cf am-fl">
  17 + <input type="text" class="ipt-specItem am-fl am-field-valid">
  18 + <button type="button" class="btn-addSpecItem btn btn-xs btn-success am-fl">添加</button>
  19 + </div>
  20 + </div>
  21 + </div>
  22 + <% } %>
  23 +</script>
  24 +
  25 +<!-- 商品规格table模板 -->
  26 +<script id="tpl_spec_table" type="text/template">
  27 + <tbody>
  28 + <tr>
  29 + <th>sku隐藏</th>
  30 + <% for(var i=0;i< spec_attr.length;i++){ %>
  31 + <th><%=spec_attr[i].group_name%></th>
  32 + <% } %>
  33 + <th>商品编码</th>
  34 + <th>销售价</th>
  35 + <th>划线价</th>
  36 + <th>库存(-1隐藏)</th>
  37 + <!--<th>重量(kg)</th>-->
  38 + <th>规格封面</th>
  39 + <th>封面编辑</th>
  40 + </tr>
  41 + <% for(var i=0;i<spec_list.length;i++){ %>
  42 + <tr data-index="<%=i%>" data-sku-id="<%=spec_list[i].spec_sku_id %>">
  43 + <td>
  44 + <button type="button" class="am-text-middle btn delsku-bt"><% if(spec_list[i].form.stock_num===-1) {%> 显示 <%}else{%> 隐藏 <%} %></button>
  45 + </td>
  46 + <% for(var k=0;k<spec_list[i].rows.length;k++){ %>
  47 + <td class="td-spec-value am-text-middle" rowspan="<%=spec_list[i].rows[k].rowspan%>">
  48 + <%=spec_list[i].rows[k].spec_value%>
  49 + </td>
  50 + <% } %>
  51 + <td>
  52 + <input <% if(spec_list[i].form.stock_num===-1) {%> disabled <%}else{%> <%} %> type="text" name="goods_no" data-rule="required" value="<%=spec_list[i].form.goods_no%>" class="ipt-goods-no am-field-valid">
  53 + </td>
  54 + <td>
  55 + <input <% if(spec_list[i].form.stock_num===-1) {%> disabled <%}else{%> <%} %> type="number" name="goods_price" data-rule="required" value="<%=spec_list[i].form.goods_price%>" class="am-field-valid ipt-w80"
  56 + required>
  57 + </td>
  58 + <td>
  59 + <input <% if(spec_list[i].form.stock_num===-1) {%> disabled <%}else{%> <%} %> type="number" name="line_price" data-rule="required" value="<%=spec_list[i].form.line_price%>" class="am-field-valid ipt-w80">
  60 + </td>
  61 + <td>
  62 + <input <% if(spec_list[i].form.stock_num===-1) {%>disabled <%}else{%> <%} %> type="number" name="stock_num" data-rule="required" value="<%=spec_list[i].form.stock_num%>" class="am-field-valid ipt-w80"
  63 + required>
  64 + </td>
  65 + <!--<td>
  66 + <input <% if(spec_list[i].form.stock_num===-1) {%>disabled <%}else{%> <%} %> type="number" name="goods_weight" data-rule="required" value="<%=spec_list[i].form.goods_weight%>" class="am-field-valid ipt-w80"
  67 + required>
  68 + </td>-->
  69 + <td>
  70 + <input <% if(spec_list[i].form.stock_num===-1) {%> disabled <%}else{%> <%} %> id="c-image<%=i%>" class="form-control form-control" style="display: none!important;" name="spec_image" type="text" value="<%=spec_list[i].form.spec_image%>">
  71 + <div class="row list-inline plupload-preview spe_img_one" id="p-image<%=i%>"></div>
  72 + </td>
  73 + <td>
  74 + <div class="input-group-addon no-border no-padding">
  75 + <span><button type="button" id="plupload-image<%=i%>" style="display: none!important;" class="btn btn-danger plupload" data-input-id="c-image<%=i%>" data-mimetype="image/gif,image/jpeg,image/png,image/jpg,image/bmp" data-multiple="false" data-preview-id="p-image<%=i%>"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
  76 + <span><button type="button" <% if(spec_list[i].form.stock_num===-1) {%> disabled <%}else{%> <%} %> id="fachoose-image<%=i%>" class="btn btn-primary fachoose" data-input-id="c-image<%=i%>" data-mimetype="image/*" data-preview-id="p-image<%=i%>" data-multiple="false"><i class="fa fa-list"></i> {:__('Choose')}</button></span>
  77 + </div>
  78 + </td>
  79 + </tr>
  80 + <% } %>
  81 + </tbody>
  82 +</script>
  1 +<form id="add-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action="">
  2 +
  3 + <div class="form-group">
  4 + <label class="control-label col-xs-12 col-sm-2">{:__('Goods_name')}:</label>
  5 + <div class="col-xs-12 col-sm-8">
  6 + <input id="c-goods_name" data-rule="required" class="form-control form-control" name="row[goods_name]" type="text" value="">
  7 + </div>
  8 + </div>
  9 + <div class="form-group">
  10 + <label class="control-label col-xs-12 col-sm-2">{:__('Keywords')}:</label>
  11 + <div class="col-xs-12 col-sm-8">
  12 + <input id="c-keywords" data-rule="required" class="form-control form-control" name="row[keywords]" type="text" value="">
  13 + </div>
  14 + </div>
  15 + <div class="form-group">
  16 + <label class="control-label col-xs-12 col-sm-2">{:__('Category_id')}:</label>
  17 + <div class="col-xs-12 col-sm-8">
  18 + <input id="c-category_id" data-rule="required" data-source="litestore/litestorecategory/selectpage" class="form-control selectpage form-control" name="row[category_id]" type="text" value="">
  19 + </div>
  20 + </div>
  21 + <div class="form-group">
  22 + <label class="control-label col-xs-12 col-sm-2">{:__('Activity_id')}:</label>
  23 + <div class="col-xs-12 col-sm-8">
  24 + <input id="c-activity_id" data-source="activity/index" class="form-control selectpage" name="row[activity_id]" type="text" value="">
  25 + </div>
  26 + </div>
  27 + <div class="form-group">
  28 + <label class="control-label col-xs-12 col-sm-2">{:__('Image')}:</label>
  29 + <div class="col-xs-12 col-sm-8">
  30 + <div class="input-group">
  31 + <input id="c-image" data-rule="required" class="form-control form-control" size="50" name="row[image]" type="text">
  32 + <div class="input-group-addon no-border no-padding">
  33 + <span><button type="button" id="plupload-image" class="btn btn-danger plupload" data-input-id="c-image" data-mimetype="image/jpeg,image/png,image/jpg" data-multiple="false" data-preview-id="p-image"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
  34 + <span><button type="button" id="fachoose-image" class="btn btn-primary fachoose" data-input-id="c-image" data-mimetype="image/jpeg,image/png,image/jpg" data-multiple="false"><i class="fa fa-list"></i> {:__('Choose')}</button></span>
  35 + </div>
  36 + <span class="msg-box n-right" for="c-image"></span>
  37 + </div>
  38 + <ul class="row list-inline plupload-preview" id="p-image"></ul>
  39 + <span class="help-block">建议尺寸:宽110,高110</span>
  40 + </div>
  41 + </div>
  42 + <div class="form-group">
  43 + <label class="control-label col-xs-12 col-sm-2">{:__('Images')}:</label>
  44 + <div class="col-xs-12 col-sm-8">
  45 + <div class="input-group">
  46 + <input id="c-images" data-rule="required" class="form-control form-control" size="50" name="row[images]" type="text">
  47 + <div class="input-group-addon no-border no-padding">
  48 + <span><button type="button" id="plupload-images" class="btn btn-danger plupload" data-input-id="c-images" data-mimetype="image/gif,image/jpeg,image/png,image/jpg,image/bmp" data-multiple="true" data-preview-id="p-images"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
  49 + <span><button type="button" id="fachoose-images" class="btn btn-primary fachoose" data-input-id="c-images" data-mimetype="image/*" data-multiple="true"><i class="fa fa-list"></i> {:__('Choose')}</button></span>
  50 + </div>
  51 + <span class="msg-box n-right" for="c-images"></span>
  52 + </div>
  53 + <ul class="row list-inline plupload-preview" id="p-images"></ul>
  54 + <span class="help-block">建议尺寸:宽375,高375</span>
  55 + </div>
  56 + </div>
  57 + <div class="form-group">
  58 + <label class="control-label col-xs-12 col-sm-2">{:__('Spec_type')}:</label>
  59 + <div class="col-xs-12 col-sm-8">
  60 +
  61 + <select id="c-spec_type" data-rule="required" class="form-control selectpicker" name="row[spec_type]">
  62 + {foreach name="specTypeList" item="vo"}
  63 + <option value="{$key}" {in name="key" value="10"}selected{/in}>{$vo}</option>
  64 + {/foreach}
  65 + </select>
  66 +
  67 + </div>
  68 + </div>
  69 +
  70 +<!-- 商品规格属性 start -->
  71 +<div class="goods-spec-many form-group">
  72 + <!-- <label class="control-label col-xs-12 col-sm-2"></label>-->
  73 + <div class="goods-spec-box col-xs-12 col-sm-11" style="background-color: white;">
  74 + <!-- 规格属性 -->
  75 + <div class="spec-attr"></div>
  76 +
  77 + <!-- 添加规格:按钮 -->
  78 + <div class="spec-group-button">
  79 + <button type="button" class="btn-addSpecGroup btn btn-xs btn-success">添加规格</button>
  80 + </div>
  81 +
  82 + <!-- 添加规格:表单 -->
  83 + <div class="spec-group-add">
  84 + <div class="spec-group-add-item form-group">
  85 + <label class="control-label form-require">规格名 </label>
  86 + <input type="text" class="input-specName tpl-form-input"
  87 + placeholder="请输入规格名称">
  88 + </div>
  89 + <div class="spec-group-add-item form-group">
  90 + <label class="control-label form-require">规格值 </label>
  91 + <input type="text" class="input-specValue tpl-form-input"
  92 + placeholder="请输入规格值">
  93 + </div>
  94 + <div class="spec-group-add-item margin-top">
  95 + <button type="button" class="btn-addSpecName btn btn-xs btn-success"> 确定
  96 + </button>
  97 + <button type="button" class="btn-cancleAddSpecName btn btn-xs btn-default"> 取消
  98 + </button>
  99 + </div>
  100 + </div>
  101 + <!-- 商品多规格sku信息 -->
  102 + <div class="goods-sku scrollable-horizontal">
  103 + <!-- 分割线 -->
  104 + <div class="goods-spec-line"></div>
  105 + <!-- sku 批量设置 -->
  106 + <div class="spec-batch form-inline">
  107 + <div class="form-group">
  108 + <label class="control-label">批量设置</label>
  109 + </div>
  110 + <div class="form-group">
  111 + <input type="text" data-type="goods_no" placeholder="商家编码">
  112 + </div>
  113 + <div class="form-group">
  114 + <input type="number" data-type="goods_price" placeholder="销售价">
  115 + </div>
  116 + <div class="form-group">
  117 + <input type="number" data-type="line_price" placeholder="划线价">
  118 + </div>
  119 + <div class="form-group">
  120 + <input type="number" data-type="stock_num" placeholder="库存数量">
  121 + </div>
  122 + <!--<div class="form-group">
  123 + <input type="number" data-type="goods_weight" placeholder="重量">
  124 + </div>-->
  125 + <div class="form-group">
  126 + <button type="button" class="btn-specBatchBtn btn btn-sm btn-secondary
  127 + radius">确定
  128 + </button>
  129 + </div>
  130 + </div>
  131 + <!-- sku table -->
  132 + <table class="spec-sku-tabel table table-bordered table-centered margin-bottom-xs text-nowrap"></table>
  133 + </div>
  134 + </div>
  135 +</div>
  136 +
  137 +<div class="goods-spec-single">
  138 + <div class="form-group">
  139 + <label class="control-label col-xs-12 col-sm-2">商品编码:</label>
  140 + <div class="col-xs-12 col-sm-8">
  141 + <input id="c-goods_no" class="form-control form-control" name="spec[goods_no]" type="text" value="">
  142 + </div>
  143 + </div>
  144 + <div class="form-group">
  145 + <label class="control-label col-xs-12 col-sm-2">商品价格:</label>
  146 + <div class="col-xs-12 col-sm-8">
  147 + <input id="c-goods_price" data-rule="required" class="form-control form-control" name="spec[goods_price]" type="number" value="0">
  148 + </div>
  149 + </div>
  150 + <div class="form-group">
  151 + <label class="control-label col-xs-12 col-sm-2">商品划线价:</label>
  152 + <div class="col-xs-12 col-sm-8">
  153 + <input id="c-line_price" class="form-control form-control" name="spec[line_price]" type="number" value="">
  154 + </div>
  155 + </div>
  156 + <div class="form-group">
  157 + <label class="control-label col-xs-12 col-sm-2">当前库存数量:</label>
  158 + <div class="col-xs-12 col-sm-8">
  159 + <input id="c-stock_num" class="form-control form-control" name="spec[stock_num]" type="number" value="100">
  160 + </div>
  161 + </div>
  162 + <!--<div class="form-group">
  163 + <label class="control-label col-xs-12 col-sm-2">商品重量(Kg):</label>
  164 + <div class="col-xs-12 col-sm-8">
  165 + <input id="c-goods_weight" class="form-control form-control" name="spec[goods_weight]" type="number" value="1">
  166 + </div>
  167 + </div>-->
  168 +</div>
  169 +<!-- 商品规格属性 end -->
  170 +
  171 + <div class="form-group">
  172 + <label class="control-label col-xs-12 col-sm-2">{:__('Deduct_stock_type')}:</label>
  173 + <div class="col-xs-12 col-sm-8">
  174 +
  175 + <select id="c-deduct_stock_type" data-rule="required" class="form-control selectpicker" name="row[deduct_stock_type]">
  176 + {foreach name="deductStockTypeList" item="vo"}
  177 + <option value="{$key}" {in name="key" value="20"}selected{/in}>{$vo}</option>
  178 + {/foreach}
  179 + </select>
  180 +
  181 + </div>
  182 + </div>
  183 +<!-- <div class="form-group">-->
  184 +<!-- <label class="control-label col-xs-12 col-sm-2">{:__('Content')}:</label>-->
  185 +<!-- <div class="col-xs-12 col-sm-8">-->
  186 +<!-- <textarea id="c-content" data-rule="required" class="form-control editor form-control" rows="5" name="row[content]" cols="50"></textarea>-->
  187 +<!-- </div>-->
  188 +<!-- </div>-->
  189 +<!-- <div class="form-group">-->
  190 +<!-- <label class="control-label col-xs-12 col-sm-2">{:__('Sales_initial')}:</label>-->
  191 +<!-- <div class="col-xs-12 col-sm-8">-->
  192 +<!-- <input id="c-sales_initial" data-rule="required" class="form-control form-control" name="row[sales_initial]" type="number" value="0">-->
  193 +<!-- </div>-->
  194 +<!-- </div>-->
  195 +<!-- <div class="form-group">-->
  196 +<!-- <label class="control-label col-xs-12 col-sm-2">{:__('Sales_actual')}:</label>-->
  197 +<!-- <div class="col-xs-12 col-sm-8">-->
  198 +<!-- <input id="c-sales_actual" data-rule="required" class="form-control form-control" name="row[sales_actual]" type="number" value="0">-->
  199 +<!-- </div>-->
  200 +<!-- </div>-->
  201 +<!-- <div class="form-group">-->
  202 +<!-- <label class="control-label col-xs-12 col-sm-2">{:__('Goods_sort')}:</label>-->
  203 +<!-- <div class="col-xs-12 col-sm-8">-->
  204 +<!-- <input id="c-goods_sort" data-rule="required" class="form-control form-control" name="row[goods_sort]" type="number" value="100">-->
  205 +<!-- </div>-->
  206 +<!-- </div>-->
  207 +<!-- <div class="form-group">-->
  208 +<!-- <label class="control-label col-xs-12 col-sm-2">{:__('Delivery_id')}:</label>-->
  209 +<!-- <div class="col-xs-12 col-sm-8">-->
  210 +<!-- <input id="c-delivery_id" data-rule="required" data-source="litestore/litestorefreight/index" class="form-control selectpage form-control" name="row[delivery_id]" type="text" value="">-->
  211 +<!-- </div>-->
  212 +<!-- </div>-->
  213 + <div class="form-group">
  214 + <label class="control-label col-xs-12 col-sm-2">{:__('Price_description')}:</label>
  215 + <div class="col-xs-12 col-sm-8">
  216 + <textarea id="c-price_description" data-rule="required" class="form-control" name="row[price_description]"></textarea>
  217 + </div>
  218 + </div>
  219 + <div class="form-group">
  220 + <label class="control-label col-xs-12 col-sm-2">{:__('Brand')}:</label>
  221 + <div class="col-xs-12 col-sm-8">
  222 + <input id="c-brand" data-rule="required" class="form-control form-control" name="row[brand]" type="text" value="">
  223 + </div>
  224 + </div>
  225 + <div class="form-group">
  226 + <label class="control-label col-xs-12 col-sm-2">{:__('Makefor')}:</label>
  227 + <div class="col-xs-12 col-sm-8">
  228 + <div class="radio">
  229 + {foreach name="makeforList" item="vo"}
  230 + <label for="row[makefor]-{$key}"><input id="row[makefor]-{$key}" name="row[makefor]" type="radio" value="{$key}" {in name="key" value="1"}checked{/in} /> {$vo}</label>
  231 + {/foreach}
  232 + </div>
  233 + </div>
  234 + </div>
  235 + <div class="form-group">
  236 + <label class="control-label col-xs-12 col-sm-2">{:__('Packing')}:</label>
  237 + <div class="col-xs-12 col-sm-8">
  238 + <input id="c-packing" data-rule="required" class="form-control form-control" name="row[packing]" type="text" value="">
  239 + </div>
  240 + </div>
  241 + <div class="form-group">
  242 + <label class="control-label col-xs-12 col-sm-2">{:__('Keep')}:</label>
  243 + <div class="col-xs-12 col-sm-8">
  244 + <input id="c-keep" data-rule="required" class="form-control form-control" name="row[keep]" type="text" value="">
  245 + </div>
  246 + </div>
  247 + <div class="form-group">
  248 + <label class="control-label col-xs-12 col-sm-2">{:__('Number')}:</label>
  249 + <div class="col-xs-12 col-sm-8">
  250 + <input id="c-number" data-rule="required" class="form-control form-control" name="row[number]" type="text" value="">
  251 + </div>
  252 + </div>
  253 +<!-- <div class="form-group">-->
  254 +<!-- <label class="control-label col-xs-12 col-sm-2">{:__('Down_image')}:</label>-->
  255 +<!-- <div class="col-xs-12 col-sm-8">-->
  256 +<!-- <div class="input-group">-->
  257 +<!-- <input id="c-down_image" data-rule="required" class="form-control form-control" size="50" name="row[down_image]" type="text">-->
  258 +<!-- <div class="input-group-addon no-border no-padding">-->
  259 +<!-- <span><button type="button" id="plupload-down_image" class="btn btn-danger plupload" data-input-id="c-down_image" data-mimetype="image/jpeg,image/png,image/jpg" data-multiple="false" data-preview-id="p-down_image"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>-->
  260 +<!-- <span><button type="button" id="fachoose-down_image" class="btn btn-primary fachoose" data-input-id="c-down_image" data-mimetype="image/jpeg,image/png,image/jpg" data-multiple="false"><i class="fa fa-list"></i> {:__('Choose')}</button></span>-->
  261 +<!-- </div>-->
  262 +<!-- <span class="msg-box n-right" for="c-down_image"></span>-->
  263 +<!-- </div>-->
  264 +<!-- <ul class="row list-inline plupload-preview" id="p-down_image"></ul>-->
  265 +<!-- <span class="help-block">建议尺寸:宽375,高267</span>-->
  266 +<!-- </div>-->
  267 +<!-- </div>-->
  268 +<!-- <div class="form-group">-->
  269 +<!-- <label class="control-label col-xs-12 col-sm-2">{:__('Four_images')}:</label>-->
  270 +<!-- <div class="col-xs-12 col-sm-8">-->
  271 +<!-- <div class="input-group">-->
  272 +<!-- <input id="c-four_images" data-rule="required" class="form-control form-control" size="50" name="row[four_images]" type="text">-->
  273 +<!-- <div class="input-group-addon no-border no-padding">-->
  274 +<!-- <span><button type="button" id="plupload-four_images" class="btn btn-danger plupload" data-input-id="c-four_images" data-mimetype="image/jpeg,image/png,image/jpg" data-multiple="true" data-preview-id="p-four_images"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>-->
  275 +<!-- <span><button type="button" id="fachoose-four_images" class="btn btn-primary fachoose" data-input-id="c-four_images" data-mimetype="image/jpeg,image/png,image/jpg" data-multiple="true"><i class="fa fa-list"></i> {:__('Choose')}</button></span>-->
  276 +<!-- </div>-->
  277 +<!-- <span class="msg-box n-right" for="c-four_images"></span>-->
  278 +<!-- </div>-->
  279 +<!-- <ul class="row list-inline plupload-preview" id="p-four_images"></ul>-->
  280 +<!-- <span class="help-block">建议尺寸:宽185,高185</span>-->
  281 +<!-- </div>-->
  282 +<!-- </div>-->
  283 + <div class="form-group">
  284 + <label class="control-label col-xs-12 col-sm-2">{:__('Detail_images')}:</label>
  285 + <div class="col-xs-12 col-sm-8">
  286 + <div class="input-group">
  287 + <input id="c-detail_images" data-rule="required" class="form-control form-control" size="50" name="row[detail_images]" placeholder="图片最多添加十张" type="text">
  288 + <div class="input-group-addon no-border no-padding">
  289 + <span><button type="button" id="plupload-detail_images" data-maxcount="10" class="btn btn-danger plupload" data-input-id="c-detail_images" data-mimetype="image/jpeg,image/png,image/jpg" data-multiple="true" data-preview-id="p-detail_images"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
  290 + <span><button type="button" id="fachoose-detail_images" data-maxcount="10" class="btn btn-primary fachoose" data-input-id="c-detail_images" data-mimetype="image/jpeg,image/png,image/jpg" data-multiple="true"><i class="fa fa-list"></i> {:__('Choose')}</button></span>
  291 + </div>
  292 + <span class="msg-box n-right" for="c-detail_images"></span>
  293 + </div>
  294 + <ul class="row list-inline plupload-preview" id="p-detail_images"></ul>
  295 + <span class="help-block">建议尺寸:宽185,高185</span>
  296 + </div>
  297 + </div>
  298 + <div class="form-group">
  299 + <label class="control-label col-xs-12 col-sm-2">{:__('Goods_status')}:</label>
  300 + <div class="col-xs-12 col-sm-8">
  301 +
  302 + <div class="radio">
  303 + {foreach name="goodsStatusList" item="vo"}
  304 + <label for="row[goods_status]-{$key}"><input id="row[goods_status]-{$key}" name="row[goods_status]" type="radio" value="{$key}" {in name="key" value="10"}checked{/in} /> {$vo}</label>
  305 + {/foreach}
  306 + </div>
  307 +
  308 + </div>
  309 + </div>
  310 + <div class="form-group">
  311 + <label class="control-label col-xs-12 col-sm-2">{:__('Is_delete')}:</label>
  312 + <div class="col-xs-12 col-sm-8">
  313 +
  314 + <select id="c-is_delete" data-rule="required" class="form-control selectpicker" name="row[is_delete]">
  315 + {foreach name="isDeleteList" item="vo"}
  316 + <option value="{$key}" {in name="key" value="0"}selected{/in}>{$vo}</option>
  317 + {/foreach}
  318 + </select>
  319 +
  320 + </div>
  321 + </div>
  322 + <div class="form-group">
  323 + <label class="control-label col-xs-12 col-sm-2">{:__('Is_index')}:</label>
  324 + <div class="col-xs-12 col-sm-8">
  325 +
  326 + <select id="c-is_index" data-rule="required" class="form-control selectpicker" name="row[is_index]">
  327 + {foreach name="isIndexList" item="vo"}
  328 + <option value="{$key}" {in name="key" value="0"}selected{/in}>{$vo}</option>
  329 + {/foreach}
  330 + </select>
  331 +
  332 + </div>
  333 + </div>
  334 + <div class="form-group layer-footer">
  335 + <label class="control-label col-xs-12 col-sm-2"></label>
  336 + <div class="col-xs-12 col-sm-8">
  337 + <button type="submit" class="btn btn-success btn-embossed disabled">{:__('OK')}</button>
  338 + <button type="reset" class="btn btn-default btn-embossed">{:__('Reset')}</button>
  339 + </div>
  340 + </div>
  341 +</form>
  342 +{include file="litestore/litestoregoods/spec_many_template" /}
  343 +
  344 +<link rel="stylesheet" href="__CDN__/assets/addons/litestore/css/litestoregoods.css">
  1 +<form id="edit-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action="">
  2 +
  3 + <div class="form-group">
  4 + <label class="control-label col-xs-12 col-sm-2">{:__('Goods_name')}:</label>
  5 + <div class="col-xs-12 col-sm-8">
  6 + <input id="c-goods_name" data-rule="required" class="form-control form-control" name="row[goods_name]" type="text" value="{$row.goods_name}">
  7 + </div>
  8 + </div>
  9 + <div class="form-group">
  10 + <label class="control-label col-xs-12 col-sm-2">{:__('Keywords')}:</label>
  11 + <div class="col-xs-12 col-sm-8">
  12 + <input id="c-keywords" data-rule="required" class="form-control form-control" name="row[keywords]" type="text" value="{$row.keywords}">
  13 + </div>
  14 + </div>
  15 + <div class="form-group">
  16 + <label class="control-label col-xs-12 col-sm-2">{:__('Category_id')}:</label>
  17 + <div class="col-xs-12 col-sm-8">
  18 + <input id="c-category_id" data-rule="required" data-source="litestore/litestorecategory/selectpage" class="form-control selectpage form-control" name="row[category_id]" type="text" value="{$row.category_id}">
  19 + </div>
  20 + </div>
  21 + <div class="form-group">
  22 + <label class="control-label col-xs-12 col-sm-2">{:__('Activity_id')}:</label>
  23 + <div class="col-xs-12 col-sm-8">
  24 + <input id="c-activity_id" data-source="activity/index" class="form-control selectpage" name="row[activity_id]" type="text" value="{$row.activity_id}">
  25 + </div>
  26 + </div>
  27 + <div class="form-group">
  28 + <label class="control-label col-xs-12 col-sm-2">{:__('Image')}:</label>
  29 + <div class="col-xs-12 col-sm-8">
  30 + <div class="input-group">
  31 + <input id="c-image" data-rule="required" class="form-control form-control" size="50" name="row[image]" type="text" value="{$row.image}">
  32 + <div class="input-group-addon no-border no-padding">
  33 + <span><button type="button" id="plupload-image" class="btn btn-danger plupload" data-input-id="c-image" data-mimetype="image/jpeg,image/png,image/jpg" data-multiple="false" data-preview-id="p-image"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
  34 + <span><button type="button" id="fachoose-image" class="btn btn-primary fachoose" data-input-id="c-image" data-mimetype="image/jpeg,image/png,image/jpg" data-multiple="false"><i class="fa fa-list"></i> {:__('Choose')}</button></span>
  35 + </div>
  36 + <span class="msg-box n-right" for="c-image"></span>
  37 + </div>
  38 + <ul class="row list-inline plupload-preview" id="p-image"></ul>
  39 + <span class="help-block">建议尺寸:宽110,高110</span>
  40 + </div>
  41 + </div>
  42 + <div class="form-group">
  43 + <label class="control-label col-xs-12 col-sm-2">{:__('Images')}:</label>
  44 + <div class="col-xs-12 col-sm-8">
  45 + <div class="input-group">
  46 + <input id="c-images" data-rule="required" class="form-control form-control" size="50" name="row[images]" type="text" value="{$row.images}">
  47 + <div class="input-group-addon no-border no-padding">
  48 + <span><button type="button" id="plupload-images" class="btn btn-danger plupload" data-input-id="c-images" data-mimetype="image/gif,image/jpeg,image/png,image/jpg,image/bmp" data-multiple="true" data-preview-id="p-images"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
  49 + <span><button type="button" id="fachoose-images" class="btn btn-primary fachoose" data-input-id="c-images" data-mimetype="image/*" data-multiple="true"><i class="fa fa-list"></i> {:__('Choose')}</button></span>
  50 + </div>
  51 + <span class="msg-box n-right" for="c-images"></span>
  52 + </div>
  53 + <ul class="row list-inline plupload-preview" id="p-images"></ul>
  54 + <span class="help-block">建议尺寸:宽375,高375</span>
  55 + </div>
  56 + </div>
  57 + <div class="form-group">
  58 + <label class="control-label col-xs-12 col-sm-2">{:__('Spec_type')}:</label>
  59 + <div class="col-xs-12 col-sm-8">
  60 +
  61 + <select id="c-spec_type" data-rule="required" class="form-control selectpicker" name="row[spec_type]">
  62 + {foreach name="specTypeList" item="vo"}
  63 + <option value="{$key}" {in name="key" value="$row.spec_type"}selected{/in}>{$vo}</option>
  64 + {/foreach}
  65 + </select>
  66 +
  67 + </div>
  68 + </div>
  69 +
  70 + <!-- 商品规格属性 start -->
  71 + <div class="goods-spec-many form-group" style="display: <?= $row['spec_type'] === '20' ? 'block' : 'none' ?>;" >
  72 + <!-- <label class="control-label col-xs-12 col-sm-2"></label>-->
  73 + <div class="goods-spec-box col-xs-12 col-sm-11" style="background-color: white;">
  74 + <!-- 规格属性 -->
  75 + <div class="spec-attr"></div>
  76 +
  77 + <!-- 添加规格:按钮 -->
  78 + <div class="spec-group-button">
  79 + <button type="button" class="btn-addSpecGroup btn btn-xs btn-success">添加规格</button>
  80 + </div>
  81 +
  82 + <!-- 添加规格:表单 -->
  83 + <div class="spec-group-add">
  84 + <div class="spec-group-add-item form-group">
  85 + <label class="control-label form-require">规格名 </label>
  86 + <input type="text" class="input-specName tpl-form-input"
  87 + placeholder="请输入规格名称">
  88 + </div>
  89 + <div class="spec-group-add-item form-group">
  90 + <label class="control-label form-require">规格值 </label>
  91 + <input type="text" class="input-specValue tpl-form-input"
  92 + placeholder="请输入规格值">
  93 + </div>
  94 + <div class="spec-group-add-item margin-top">
  95 + <button type="button" class="btn-addSpecName btn btn-xs btn-success"> 确定
  96 + </button>
  97 + <button type="button" class="btn-cancleAddSpecName btn btn-xs btn-default"> 取消
  98 + </button>
  99 + </div>
  100 + </div>
  101 + <!-- 商品多规格sku信息 -->
  102 + <div class="goods-sku scrollable-horizontal">
  103 + <!-- 分割线 -->
  104 + <div class="goods-spec-line"></div>
  105 + <!-- sku 批量设置 -->
  106 + <div class="spec-batch form-inline">
  107 + <div class="form-group">
  108 + <label class="control-label">批量设置</label>
  109 + </div>
  110 + <div class="form-group">
  111 + <input type="text" data-type="goods_no" placeholder="商家编码">
  112 + </div>
  113 + <div class="form-group">
  114 + <input type="number" data-type="goods_price" placeholder="销售价">
  115 + </div>
  116 + <div class="form-group">
  117 + <input type="number" data-type="line_price" placeholder="划线价">
  118 + </div>
  119 + <div class="form-group">
  120 + <input type="number" data-type="stock_num" placeholder="库存数量">
  121 + </div>
  122 + <div class="form-group">
  123 + <input type="number" data-type="goods_weight" placeholder="重量">
  124 + </div>
  125 + <div class="form-group">
  126 + <button type="button" class="btn-specBatchBtn btn btn-sm btn-secondary
  127 + radius">确定
  128 + </button>
  129 + </div>
  130 + </div>
  131 + <!-- sku table -->
  132 + <table class="spec-sku-tabel table table-bordered table-centered margin-bottom-xs text-nowrap"></table>
  133 + </div>
  134 + </div>
  135 + </div>
  136 +
  137 + <div class="goods-spec-single" style="display: <?= $row['spec_type'] === '10' ? 'block' : 'none' ?>;">
  138 + <div class="form-group">
  139 + <label class="control-label col-xs-12 col-sm-2">商品编码:</label>
  140 + <div class="col-xs-12 col-sm-8">
  141 + <input id="c-goods_no" class="form-control form-control" name="spec[goods_no]" type="text" value="{$row.spec.0.goods_no}">
  142 + </div>
  143 + </div>
  144 + <div class="form-group">
  145 + <label class="control-label col-xs-12 col-sm-2">商品价格:</label>
  146 + <div class="col-xs-12 col-sm-8">
  147 + <input id="c-goods_price" data-rule="required" class="form-control form-control" name="spec[goods_price]" type="number" value="{$row.spec.0.goods_price}">
  148 + </div>
  149 + </div>
  150 + <div class="form-group">
  151 + <label class="control-label col-xs-12 col-sm-2">商品划线价:</label>
  152 + <div class="col-xs-12 col-sm-8">
  153 + <input id="c-line_price" class="form-control form-control" name="spec[line_price]" type="number" value="{$row.spec.0.line_price}">
  154 + </div>
  155 + </div>
  156 + <div class="form-group">
  157 + <label class="control-label col-xs-12 col-sm-2">当前库存数量:</label>
  158 + <div class="col-xs-12 col-sm-8">
  159 + <input id="c-stock_num" class="form-control form-control" name="spec[stock_num]" type="number" value="{$row.spec.0.stock_num}">
  160 + </div>
  161 + </div>
  162 + <!--<div class="form-group">
  163 + <label class="control-label col-xs-12 col-sm-2">商品重量(Kg):</label>
  164 + <div class="col-xs-12 col-sm-8">
  165 + <input id="c-goods_weight" class="form-control form-control" name="spec[goods_weight]" type="number" value="{$row.spec.0.goods_weight}">
  166 + </div>
  167 + </div>-->
  168 + </div>
  169 + <!-- 商品规格属性 end -->
  170 +
  171 + <div class="form-group">
  172 + <label class="control-label col-xs-12 col-sm-2">{:__('Deduct_stock_type')}:</label>
  173 + <div class="col-xs-12 col-sm-8">
  174 +
  175 + <select id="c-deduct_stock_type" data-rule="required" class="form-control selectpicker" name="row[deduct_stock_type]">
  176 + {foreach name="deductStockTypeList" item="vo"}
  177 + <option value="{$key}" {in name="key" value="$row.deduct_stock_type"}selected{/in}>{$vo}</option>
  178 + {/foreach}
  179 + </select>
  180 +
  181 + </div>
  182 + </div>
  183 +<!-- <div class="form-group">-->
  184 +<!-- <label class="control-label col-xs-12 col-sm-2">{:__('Content')}:</label>-->
  185 +<!-- <div class="col-xs-12 col-sm-8">-->
  186 +<!-- <textarea id="c-content" data-rule="required" class="form-control editor form-control" rows="5" name="row[content]" cols="50">{$row.content}</textarea>-->
  187 +<!-- </div>-->
  188 +<!-- </div>-->
  189 +<!-- <div class="form-group">-->
  190 +<!-- <label class="control-label col-xs-12 col-sm-2">{:__('Sales_initial')}:</label>-->
  191 +<!-- <div class="col-xs-12 col-sm-8">-->
  192 +<!-- <input id="c-sales_initial" data-rule="required" class="form-control form-control" name="row[sales_initial]" type="number" value="{$row.sales_initial}">-->
  193 +<!-- </div>-->
  194 +<!-- </div>-->
  195 +<!-- <div class="form-group">-->
  196 +<!-- <label class="control-label col-xs-12 col-sm-2">{:__('Sales_actual')}:</label>-->
  197 +<!-- <div class="col-xs-12 col-sm-8">-->
  198 +<!-- <input id="c-sales_actual" data-rule="required" class="form-control form-control" name="row[sales_actual]" type="number" value="{$row.sales_actual}">-->
  199 +<!-- </div>-->
  200 +<!-- </div>-->
  201 +<!-- <div class="form-group">-->
  202 +<!-- <label class="control-label col-xs-12 col-sm-2">{:__('Goods_sort')}:</label>-->
  203 +<!-- <div class="col-xs-12 col-sm-8">-->
  204 +<!-- <input id="c-goods_sort" data-rule="required" class="form-control form-control" name="row[goods_sort]" type="number" value="{$row.goods_sort}">-->
  205 +<!-- </div>-->
  206 +<!-- </div>-->
  207 +<!-- <div class="form-group">-->
  208 +<!-- <label class="control-label col-xs-12 col-sm-2">{:__('Delivery_id')}:</label>-->
  209 +<!-- <div class="col-xs-12 col-sm-8">-->
  210 +<!-- <input id="c-delivery_id" data-rule="required" data-source="litestore/litestorefreight/index" class="form-control selectpage form-control" name="row[delivery_id]" type="text" value="{$row.delivery_id}">-->
  211 +<!-- </div>-->
  212 +<!-- </div>-->
  213 + <div class="form-group">
  214 + <label class="control-label col-xs-12 col-sm-2">{:__('Price_description')}:</label>
  215 + <div class="col-xs-12 col-sm-8">
  216 + <textarea id="c-price_description" data-rule="required" class="form-control" name="row[price_description]">{$row.price_description}</textarea>
  217 + </div>
  218 + </div>
  219 + <div class="form-group">
  220 + <label class="control-label col-xs-12 col-sm-2">{:__('Brand')}:</label>
  221 + <div class="col-xs-12 col-sm-8">
  222 + <input id="c-brand" data-rule="required" class="form-control form-control" name="row[brand]" type="text" value="{$row.brand}">
  223 + </div>
  224 + </div>
  225 + <div class="form-group">
  226 + <label class="control-label col-xs-12 col-sm-2">{:__('Makefor')}:</label>
  227 + <div class="col-xs-12 col-sm-8">
  228 + <div class="radio">
  229 + {foreach name="makeforList" item="vo"}
  230 + <label for="row[makefor]-{$key}"><input id="row[makefor]-{$key}" name="row[makefor]" type="radio" value="{$key}" {in name="key" value="$row.makefor"}checked{/in} /> {$vo}</label>
  231 + {/foreach}
  232 + </div>
  233 + </div>
  234 + </div>
  235 + <div class="form-group">
  236 + <label class="control-label col-xs-12 col-sm-2">{:__('Packing')}:</label>
  237 + <div class="col-xs-12 col-sm-8">
  238 + <input id="c-packing" data-rule="required" class="form-control form-control" name="row[packing]" type="text" value="{$row.packing}">
  239 + </div>
  240 + </div>
  241 + <div class="form-group">
  242 + <label class="control-label col-xs-12 col-sm-2">{:__('Keep')}:</label>
  243 + <div class="col-xs-12 col-sm-8">
  244 + <input id="c-keep" data-rule="required" class="form-control form-control" name="row[keep]" type="text" value="{$row.keep}">
  245 + </div>
  246 + </div>
  247 + <div class="form-group">
  248 + <label class="control-label col-xs-12 col-sm-2">{:__('Number')}:</label>
  249 + <div class="col-xs-12 col-sm-8">
  250 + <input id="c-number" data-rule="required" class="form-control form-control" name="row[number]" type="text" value="{$row.number}">
  251 + </div>
  252 + </div>
  253 +<!-- <div class="form-group">-->
  254 +<!-- <label class="control-label col-xs-12 col-sm-2">{:__('Down_image')}:</label>-->
  255 +<!-- <div class="col-xs-12 col-sm-8">-->
  256 +<!-- <div class="input-group">-->
  257 +<!-- <input id="c-down_image" data-rule="required" class="form-control form-control" size="50" name="row[down_image]" type="text" value="{$row.down_image}">-->
  258 +<!-- <div class="input-group-addon no-border no-padding">-->
  259 +<!-- <span><button type="button" id="plupload-down_image" class="btn btn-danger plupload" data-input-id="c-down_image" data-mimetype="image/jpeg,image/png,image/jpg" data-multiple="false" data-preview-id="p-down_image"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>-->
  260 +<!-- <span><button type="button" id="fachoose-down_image" class="btn btn-primary fachoose" data-input-id="c-down_image" data-mimetype="image/jpeg,image/png,image/jpg" data-multiple="false"><i class="fa fa-list"></i> {:__('Choose')}</button></span>-->
  261 +<!-- </div>-->
  262 +<!-- <span class="msg-box n-right" for="c-down_image"></span>-->
  263 +<!-- </div>-->
  264 +<!-- <ul class="row list-inline plupload-preview" id="p-down_image"></ul>-->
  265 +<!-- <span class="help-block">建议尺寸:宽375,高267</span>-->
  266 +<!-- </div>-->
  267 +<!-- </div>-->
  268 +<!-- <div class="form-group">-->
  269 +<!-- <label class="control-label col-xs-12 col-sm-2">{:__('Four_images')}:</label>-->
  270 +<!-- <div class="col-xs-12 col-sm-8">-->
  271 +<!-- <div class="input-group">-->
  272 +<!-- <input id="c-four_images" data-rule="required" class="form-control form-control" size="50" name="row[four_images]" type="text" value="{$row.four_images}">-->
  273 +<!-- <div class="input-group-addon no-border no-padding">-->
  274 +<!-- <span><button type="button" id="plupload-four_images" class="btn btn-danger plupload" data-input-id="c-four_images" data-mimetype="image/jpeg,image/png,image/jpg" data-multiple="true" data-preview-id="p-four_images"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>-->
  275 +<!-- <span><button type="button" id="fachoose-four_images" class="btn btn-primary fachoose" data-input-id="c-four_images" data-mimetype="image/jpeg,image/png,image/jpg" data-multiple="true"><i class="fa fa-list"></i> {:__('Choose')}</button></span>-->
  276 +<!-- </div>-->
  277 +<!-- <span class="msg-box n-right" for="c-four_images"></span>-->
  278 +<!-- </div>-->
  279 +<!-- <ul class="row list-inline plupload-preview" id="p-four_images"></ul>-->
  280 +<!-- <span class="help-block">建议尺寸:宽185,高185</span>-->
  281 +<!-- </div>-->
  282 +<!-- </div>-->
  283 + <div class="form-group">
  284 + <label class="control-label col-xs-12 col-sm-2">{:__('Detail_images')}:</label>
  285 + <div class="col-xs-12 col-sm-8">
  286 + <div class="input-group">
  287 + <input id="c-detail_images" data-rule="required" placeholder="图片最多添加十张" class="form-control form-control" size="50" name="row[detail_images]" type="text" value="{$row.detail_images}">
  288 + <div class="input-group-addon no-border no-padding">
  289 + <span><button type="button" id="plupload-detail_images" class="btn btn-danger plupload" data-input-id="c-detail_images" data-mimetype="image/jpeg,image/png,image/jpg" data-maxcount="10" data-multiple="true" data-preview-id="p-detail_images"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
  290 + <span><button type="button" id="fachoose-detail_images" class="btn btn-primary fachoose" data-input-id="c-detail_images" data-mimetype="image/jpeg,image/png,image/jpg" data-maxcount="10" data-multiple="true"><i class="fa fa-list"></i> {:__('Choose')}</button></span>
  291 + </div>
  292 + <span class="msg-box n-right" for="c-detail_images"></span>
  293 + </div>
  294 + <ul class="row list-inline plupload-preview" id="p-detail_images"></ul>
  295 + <span class="help-block">建议尺寸:宽185,高185</span>
  296 + </div>
  297 + </div>
  298 + <div class="form-group">
  299 + <label class="control-label col-xs-12 col-sm-2">{:__('Goods_status')}:</label>
  300 + <div class="col-xs-12 col-sm-8">
  301 +
  302 + <div class="radio">
  303 + {foreach name="goodsStatusList" item="vo"}
  304 + <label for="row[goods_status]-{$key}"><input id="row[goods_status]-{$key}" name="row[goods_status]" type="radio" value="{$key}" {in name="key" value="$row.goods_status"}checked{/in} /> {$vo}</label>
  305 + {/foreach}
  306 + </div>
  307 +
  308 + </div>
  309 + </div>
  310 + <div class="form-group">
  311 + <label class="control-label col-xs-12 col-sm-2">{:__('Is_delete')}:</label>
  312 + <div class="col-xs-12 col-sm-8">
  313 +
  314 + <select id="c-is_delete" data-rule="required" class="form-control selectpicker" name="row[is_delete]">
  315 + {foreach name="isDeleteList" item="vo"}
  316 + <option value="{$key}" {in name="key" value="$row.is_delete"}selected{/in}>{$vo}</option>
  317 + {/foreach}
  318 + </select>
  319 +
  320 + </div>
  321 + </div>
  322 + <div class="form-group">
  323 + <label class="control-label col-xs-12 col-sm-2">{:__('Is_index')}:</label>
  324 + <div class="col-xs-12 col-sm-8">
  325 +
  326 + <select id="c-is_index" data-rule="required" class="form-control selectpicker" name="row[is_index]">
  327 + {foreach name="isIndexList" item="vo"}
  328 + <option value="{$key}" {in name="key" value="$row.is_index"}selected{/in}>{$vo}</option>
  329 + {/foreach}
  330 + </select>
  331 +
  332 + </div>
  333 + </div>
  334 + <div class="form-group layer-footer">
  335 + <label class="control-label col-xs-12 col-sm-2"></label>
  336 + <div class="col-xs-12 col-sm-8">
  337 + <button type="submit" class="btn btn-success btn-embossed disabled">{:__('OK')}</button>
  338 + <button type="reset" class="btn btn-default btn-embossed">{:__('Reset')}</button>
  339 + </div>
  340 + </div>
  341 +</form>
  342 +
  343 +{include file="litestore/litestoregoods/spec_many_template" /}
  344 +
  345 +<link rel="stylesheet" href="__CDN__/assets/addons/litestore/css/litestoregoods.css">
  346 +
  347 +<script type="text/javascript">
  348 + var from_specData = <?= $row['specData'] ?>;
  349 +</script>
  1 +<div class="panel panel-default panel-intro">
  2 + {:build_heading()}
  3 +
  4 + <div class="panel-body">
  5 + <div id="myTabContent" class="tab-content">
  6 + <div class="tab-pane fade active in" id="one">
  7 + <div class="widget-body no-padding">
  8 + <div id="toolbar" class="toolbar">
  9 + <a href="javascript:;" class="btn btn-primary btn-refresh" title="{:__('Refresh')}"><i
  10 + class="fa fa-refresh"></i> </a>
  11 +<!-- <a href="javascript:;"-->
  12 +<!-- class="btn btn-success btn-add {:$auth->check('litestore/litestoregoods/add')?'':'hide'}"-->
  13 +<!-- title="{:__('Add')}"><i class="fa fa-plus"></i> {:__('Add')}</a>-->
  14 +<!-- <a href="javascript:;"-->
  15 +<!-- class="btn btn-success btn-edit btn-disabled disabled {:$auth->check('litestore/litestoregoods/edit')?'':'hide'}"-->
  16 +<!-- title="{:__('Edit')}"><i class="fa fa-pencil"></i> {:__('Edit')}</a>-->
  17 + <a href="javascript:;"
  18 + class="btn btn-danger btn-del btn-disabled disabled {:$auth->check('litestore/litestoregoods/del')?'':'hide'}"
  19 + title="{:__('Delete')}"><i class="fa fa-trash"></i> {:__('Delete')}</a>
  20 + <div class="dropdown btn-group {:$auth->check('litestore/litestoregoods/multi')?'':'hide'}">
  21 + <a class="btn btn-primary btn-more dropdown-toggle btn-disabled disabled" data-toggle="dropdown"><i class="fa fa-check-square-o"></i> {:__('批量添加活动商品')}</a>
  22 + <ul class="dropdown-menu text-left" role="menu">
  23 + <li><a class="btn btn-link btn-multi btn-disabled disabled" href="javascript:;" data-params="activity_id=1"><i class="fa fa-free-code-camp"></i> {:__('新人用户')}</a></li>
  24 + <li><a class="btn btn-link btn-multi btn-disabled disabled" href="javascript:;" data-params="activity_id=2"><i class="fa fa-clock-o"></i> {:__('限时秒杀')}</a></li>
  25 + <li><a class="btn btn-link btn-multi btn-disabled disabled" href="javascript:;" data-params="activity_id=3"><i class="fa fa-location-arrow"></i> {:__('进口商品')}</a></li>
  26 + <li><a class="btn btn-link btn-multi btn-disabled disabled" href="javascript:;" data-params="activity_id=0"><i class="fa fa-eye-slash"></i> {:__('不参与活动')}</a></li>
  27 + </ul>
  28 + </div>
  29 + </div>
  30 + <table id="table" class="table table-striped table-bordered table-hover table-nowrap"
  31 + data-operate-edit="{:$auth->check('litestore/litestoregoods/edit')}"
  32 + data-operate-del="{:$auth->check('litestore/litestoregoods/del')}"
  33 + width="100%">
  34 + </table>
  35 + </div>
  36 + </div>
  37 +
  38 + </div>
  39 + </div>
  40 +</div>
  1 +<!-- 商品规格属性模板 -->
  2 +<script id="tpl_spec_attr" type="text/template">
  3 + <% for(var j=0;j< spec_attr.length;j++){ %>
  4 + <div class="spec-group-item" data-index="<%=j%>" data-group-id="<%=spec_attr[j].group_id%>">
  5 + <div class="spec-group-name">
  6 + <span><%=spec_attr[j].group_name%></span>
  7 + <i class="spec-group-delete fa fa-trash icon-shanchu1" title="点击删除"></i>
  8 + </div>
  9 + <div class="spec-list am-cf">
  10 + <% for(var k=0;k<spec_attr[j].spec_items.length;k++){ %>
  11 + <div class="spec-item am-fl" data-item-index="<%=k%>">
  12 + <span><%=spec_attr[j].spec_items[k].spec_value%></span>
  13 + <i class="spec-item-delete fa fa-trash icon-shanchu1" title="点击删除"></i>
  14 + </div>
  15 + <% } %>
  16 + <div class="spec-item-add am-cf am-fl">
  17 + <input type="text" class="ipt-specItem am-fl am-field-valid">
  18 + <button type="button" class="btn-addSpecItem btn btn-xs btn-success am-fl">添加</button>
  19 + </div>
  20 + </div>
  21 + </div>
  22 + <% } %>
  23 +</script>
  24 +
  25 +<!-- 商品规格table模板 -->
  26 +<script id="tpl_spec_table" type="text/template">
  27 + <tbody>
  28 + <tr>
  29 + <th>sku隐藏</th>
  30 + <% for(var i=0;i< spec_attr.length;i++){ %>
  31 + <th><%=spec_attr[i].group_name%></th>
  32 + <% } %>
  33 + <th>商品编码</th>
  34 + <th>销售价</th>
  35 + <th>划线价</th>
  36 + <th>库存(-1隐藏)</th>
  37 + <!--<th>重量(kg)</th>-->
  38 + <th>规格封面</th>
  39 + <th>封面编辑</th>
  40 + </tr>
  41 + <% for(var i=0;i<spec_list.length;i++){ %>
  42 + <tr data-index="<%=i%>" data-sku-id="<%=spec_list[i].spec_sku_id %>">
  43 + <td>
  44 + <button type="button" class="am-text-middle btn delsku-bt"><% if(spec_list[i].form.stock_num===-1) {%> 显示 <%}else{%> 隐藏 <%} %></button>
  45 + </td>
  46 + <% for(var k=0;k<spec_list[i].rows.length;k++){ %>
  47 + <td class="td-spec-value am-text-middle" rowspan="<%=spec_list[i].rows[k].rowspan%>">
  48 + <%=spec_list[i].rows[k].spec_value%>
  49 + </td>
  50 + <% } %>
  51 + <td>
  52 + <input <% if(spec_list[i].form.stock_num===-1) {%> disabled <%}else{%> <%} %> type="text" name="goods_no" data-rule="required" value="<%=spec_list[i].form.goods_no%>" class="ipt-goods-no am-field-valid">
  53 + </td>
  54 + <td>
  55 + <input <% if(spec_list[i].form.stock_num===-1) {%> disabled <%}else{%> <%} %> type="number" name="goods_price" data-rule="required" value="<%=spec_list[i].form.goods_price%>" class="am-field-valid ipt-w80"
  56 + required>
  57 + </td>
  58 + <td>
  59 + <input <% if(spec_list[i].form.stock_num===-1) {%> disabled <%}else{%> <%} %> type="number" name="line_price" data-rule="required" value="<%=spec_list[i].form.line_price%>" class="am-field-valid ipt-w80">
  60 + </td>
  61 + <td>
  62 + <input <% if(spec_list[i].form.stock_num===-1) {%>disabled <%}else{%> <%} %> type="number" name="stock_num" data-rule="required" value="<%=spec_list[i].form.stock_num%>" class="am-field-valid ipt-w80"
  63 + required>
  64 + </td>
  65 + <!--<td>
  66 + <input <% if(spec_list[i].form.stock_num===-1) {%>disabled <%}else{%> <%} %> type="number" name="goods_weight" data-rule="required" value="<%=spec_list[i].form.goods_weight%>" class="am-field-valid ipt-w80"
  67 + required>
  68 + </td>-->
  69 + <td>
  70 + <input <% if(spec_list[i].form.stock_num===-1) {%> disabled <%}else{%> <%} %> id="c-image<%=i%>" class="form-control form-control" style="display: none!important;" name="spec_image" type="text" value="<%=spec_list[i].form.spec_image%>">
  71 + <div class="row list-inline plupload-preview spe_img_one" id="p-image<%=i%>"></div>
  72 + </td>
  73 + <td>
  74 + <div class="input-group-addon no-border no-padding">
  75 + <span><button type="button" id="plupload-image<%=i%>" style="display: none!important;" class="btn btn-danger plupload" data-input-id="c-image<%=i%>" data-mimetype="image/gif,image/jpeg,image/png,image/jpg,image/bmp" data-multiple="false" data-preview-id="p-image<%=i%>"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
  76 + <span><button type="button" <% if(spec_list[i].form.stock_num===-1) {%> disabled <%}else{%> <%} %> id="fachoose-image<%=i%>" class="btn btn-primary fachoose" data-input-id="c-image<%=i%>" data-mimetype="image/*" data-preview-id="p-image<%=i%>" data-multiple="false"><i class="fa fa-list"></i> {:__('Choose')}</button></span>
  77 + </div>
  78 + </td>
  79 + </tr>
  80 + <% } %>
  81 + </tbody>
  82 +</script>
@@ -11,12 +11,15 @@ @@ -11,12 +11,15 @@
11 <a href="javascript:;" 11 <a href="javascript:;"
12 class="btn btn-success btn-add {:$auth->check('litestore/litestoregoods/add')?'':'hide'}" 12 class="btn btn-success btn-add {:$auth->check('litestore/litestoregoods/add')?'':'hide'}"
13 title="{:__('Add')}"><i class="fa fa-plus"></i> {:__('Add')}</a> 13 title="{:__('Add')}"><i class="fa fa-plus"></i> {:__('Add')}</a>
  14 +<!-- <a href="javascript:;"-->
  15 +<!-- class="btn btn-success btn-edit btn-disabled disabled {:$auth->check('litestore/litestoregoods/edit')?'':'hide'}"-->
  16 +<!-- title="{:__('Edit')}"><i class="fa fa-pencil"></i> {:__('Edit')}</a>-->
14 <a href="javascript:;" 17 <a href="javascript:;"
15 - class="btn btn-success btn-edit btn-disabled disabled {:$auth->check('litestore/litestoregoods/edit')?'':'hide'}"  
16 - title="{:__('Edit')}"><i class="fa fa-pencil"></i> {:__('Edit')}</a>  
17 - <a href="javascript:;"  
18 - class="btn btn-danger btn-del btn-disabled disabled {:$auth->check('litestore/litestoregoods/del')?'':'hide'}"  
19 - title="{:__('Delete')}"><i class="fa fa-trash"></i> {:__('Delete')}</a> 18 + class="btn btn-success btn-discount btn-disabled disabled {:$auth->check('litestore/litestoregoods/discount')?'':'hide'}"
  19 + title="{:__('设置折扣')}"><i class="fa fa-pencil"></i> {:__('批量设置折扣')}</a>
  20 +<!-- <a href="javascript:;"-->
  21 +<!-- class="btn btn-danger btn-del btn-disabled disabled {:$auth->check('litestore/litestoregoods/del')?'':'hide'}"-->
  22 +<!-- title="{:__('Delete')}"><i class="fa fa-trash"></i> {:__('Delete')}</a>-->
20 <a href="javascript:;" 23 <a href="javascript:;"
21 class="btn btn-danger btn-import {:$auth->check('litestore/litestoregoods/import')?'':'hide'}" 24 class="btn btn-danger btn-import {:$auth->check('litestore/litestoregoods/import')?'':'hide'}"
22 title="{:__('Import')}" id="btn-import-file" data-url="ajax/upload" 25 title="{:__('Import')}" id="btn-import-file" data-url="ajax/upload"
@@ -26,18 +29,18 @@ @@ -26,18 +29,18 @@
26 <!-- class="btn btn-info btn-change btn-export btn-disable" data-params="action=export"--> 29 <!-- class="btn btn-info btn-change btn-export btn-disable" data-params="action=export"-->
27 <!-- data-url="litestore/litestoregoods/export"--> 30 <!-- data-url="litestore/litestoregoods/export"-->
28 <!-- title="{:__('批量导出')}"><i class="fa fa-download"></i>{:__('批量导出')}</a>--> 31 <!-- title="{:__('批量导出')}"><i class="fa fa-download"></i>{:__('批量导出')}</a>-->
29 - <a href="javascript:;"  
30 - class="btn btn-info btn-export {:$auth->check('litestore/litestoregoods/export')?'':'hide'}"  
31 - title="{:__('Export')}" id="btn-export-file"><i class="fa fa-download"></i> 批量导出</a> 32 + <a href="javascript:;" class="btn btn-info btn-export {:$auth->check('litestore/litestoregoods/export')?'':'hide'}" title="{:__('Export')}" id="btn-export-file"><i class="fa fa-download"></i> 批量导出</a>
32 <a href="{$template}" class="btn btn-info"><i class="fa fa-folder-open"></i> {:__('导入模板下载')}</a> 33 <a href="{$template}" class="btn btn-info"><i class="fa fa-folder-open"></i> {:__('导入模板下载')}</a>
33 34
34 - <!-- <div class="dropdown btn-group {:$auth->check('litestore/litestoregoods/multi')?'':'hide'}">-->  
35 - <!-- <a class="btn btn-primary btn-more dropdown-toggle btn-disabled disabled" data-toggle="dropdown"><i class="fa fa-cog"></i> {:__('More')}</a>-->  
36 - <!-- <ul class="dropdown-menu text-left" role="menu">-->  
37 - <!-- <li><a class="btn btn-link btn-multi btn-disabled disabled" href="javascript:;" data-params="status=normal"><i class="fa fa-eye"></i> {:__('Set to normal')}</a></li>-->  
38 - <!-- <li><a class="btn btn-link btn-multi btn-disabled disabled" href="javascript:;" data-params="status=hidden"><i class="fa fa-eye-slash"></i> {:__('Set to hidden')}</a></li>-->  
39 - <!-- </ul>-->  
40 - <!-- </div>--> 35 + <div class="dropdown btn-group {:$auth->check('litestore/litestoregoods/multi')?'':'hide'}">
  36 + <a class="btn btn-primary btn-more dropdown-toggle btn-disabled disabled" data-toggle="dropdown"><i class="fa fa-check-square-o"></i> {:__('批量添加活动商品')}</a>
  37 + <ul class="dropdown-menu text-left" role="menu">
  38 + <li><a class="btn btn-link btn-multi btn-disabled disabled" href="javascript:;" data-params="activity_id=1"><i class="fa fa-free-code-camp"></i> {:__('新人用户')}</a></li>
  39 + <li><a class="btn btn-link btn-multi btn-disabled disabled" href="javascript:;" data-params="activity_id=2"><i class="fa fa-clock-o"></i> {:__('限时秒杀')}</a></li>
  40 + <li><a class="btn btn-link btn-multi btn-disabled disabled" href="javascript:;" data-params="activity_id=3"><i class="fa fa-location-arrow"></i> {:__('进口商品')}</a></li>
  41 + <li><a class="btn btn-link btn-multi btn-disabled disabled" href="javascript:;" data-params="activity_id=0"><i class="fa fa-eye-slash"></i> {:__('不参与活动')}</a></li>
  42 + </ul>
  43 + </div>
41 </div> 44 </div>
42 <table id="table" class="table table-striped table-bordered table-hover table-nowrap" 45 <table id="table" class="table table-striped table-bordered table-hover table-nowrap"
43 data-operate-edit="{:$auth->check('litestore/litestoregoods/edit')}" 46 data-operate-edit="{:$auth->check('litestore/litestoregoods/edit')}"
@@ -418,7 +418,7 @@ class Classification extends Api @@ -418,7 +418,7 @@ class Classification extends Api
418 $item['line_price'] = round($goods_spec['line_price'], 2); 418 $item['line_price'] = round($goods_spec['line_price'], 2);
419 //判断是否打折 419 //判断是否打折
420 $item['is_discount'] = 'is'; 420 $item['is_discount'] = 'is';
421 - if ($goods_spec['goods_price'] == $goods_spec['line_price']) { 421 + if (empty($goods_spec['discount'])) {
422 $item['is_discount'] = 'no'; 422 $item['is_discount'] = 'no';
423 } 423 }
424 $item['discount'] = $goods_spec['discount']; 424 $item['discount'] = $goods_spec['discount'];
@@ -459,7 +459,7 @@ class Classification extends Api @@ -459,7 +459,7 @@ class Classification extends Api
459 $spec_value['cart_number'] = $number ?? 0; 459 $spec_value['cart_number'] = $number ?? 0;
460 //判断是否打折 460 //判断是否打折
461 $spec_value['is_discount'] = 'is'; 461 $spec_value['is_discount'] = 'is';
462 - if ($spec_value['goods_price'] == $spec_value['line_price']) { 462 + if (empty($spec_value['discount'])) {
463 $spec_value['is_discount'] = 'no'; 463 $spec_value['is_discount'] = 'no';
464 } 464 }
465 } 465 }
@@ -488,7 +488,7 @@ class Classification extends Api @@ -488,7 +488,7 @@ class Classification extends Api
488 $item['line_price'] = round($goods_spec['line_price'], 2); 488 $item['line_price'] = round($goods_spec['line_price'], 2);
489 //判断是否打折 489 //判断是否打折
490 $item['is_discount'] = 'is'; 490 $item['is_discount'] = 'is';
491 - if ($goods_spec['goods_price'] == $goods_spec['line_price']) { 491 + if (empty($goods_spec['discount'])) {
492 $item['is_discount'] = 'no'; 492 $item['is_discount'] = 'no';
493 } 493 }
494 $item['discount'] = $goods_spec['discount']; 494 $item['discount'] = $goods_spec['discount'];
@@ -530,7 +530,7 @@ class Classification extends Api @@ -530,7 +530,7 @@ class Classification extends Api
530 $spec_value['cart_number'] = $number ?? 0; 530 $spec_value['cart_number'] = $number ?? 0;
531 //判断是否打折 531 //判断是否打折
532 $spec_value['is_discount'] = 'is'; 532 $spec_value['is_discount'] = 'is';
533 - if ($spec_value['goods_price'] == $spec_value['line_price']) { 533 + if (empty($spec_value['discount'])) {
534 $spec_value['is_discount'] = 'no'; 534 $spec_value['is_discount'] = 'no';
535 } 535 }
536 } 536 }
@@ -62,7 +62,7 @@ class Goods extends Api @@ -62,7 +62,7 @@ class Goods extends Api
62 $goods['line_price'] = $goods_spec['line_price']; 62 $goods['line_price'] = $goods_spec['line_price'];
63 //判断是否打折 63 //判断是否打折
64 $goods['is_discount'] = 'is'; 64 $goods['is_discount'] = 'is';
65 - if ($goods_spec['goods_price'] == $goods_spec['line_price']) { 65 + if (empty($goods_spec['discount'])) {
66 $goods['is_discount'] = 'no'; 66 $goods['is_discount'] = 'no';
67 } 67 }
68 $goods['discount'] = $goods_spec['discount']; 68 $goods['discount'] = $goods_spec['discount'];
@@ -161,7 +161,7 @@ class Goods extends Api @@ -161,7 +161,7 @@ class Goods extends Api
161 } 161 }
162 //判断是否打折 162 //判断是否打折
163 $value['is_discount'] = 'is'; 163 $value['is_discount'] = 'is';
164 - if ($value['goods_price'] == $value['line_price']) { 164 + if (empty($value['discount'])) {
165 $value['is_discount'] = 'no'; 165 $value['is_discount'] = 'no';
166 } 166 }
167 } 167 }
  1 +define(['jquery', 'bootstrap', 'backend', 'table', 'form', 'template', 'litestoregoods'], function ($, undefined, Backend, Table, Form, Template, litestoregoods) {
  2 +
  3 + var Controller = {
  4 + index: function () {
  5 + $(".btn-add").data("area", ["1000px", "800px"]);
  6 + // 初始化表格参数配置
  7 + Table.api.init({
  8 + extend: {
  9 + index_url: 'activity_goods/import_goods/index',
  10 + add_url: 'litestore/litestoregoods/add',
  11 + edit_url: 'litestore/litestoregoods/edit',
  12 + del_url: 'litestore/litestoregoods/del',
  13 + discount_url: 'litestore/litestoregoods/discount',
  14 + multi_url: 'litestore/litestoregoods/multi',
  15 + import_url: 'litestore/litestoregoods/import',
  16 + table: 'litestore_goods',
  17 + }
  18 + });
  19 +
  20 + var table = $("#table");
  21 +
  22 + // 初始化表格
  23 + table.bootstrapTable({
  24 + url: $.fn.bootstrapTable.defaults.extend.index_url,
  25 + pk: 'goods_id',
  26 + sortName: 'goods_sort',
  27 + search: false,
  28 + showExport: false,
  29 + columns: [
  30 + [
  31 + {checkbox: true},
  32 + {field: 'goods_id', title: __('Goods_id')},
  33 + {field: 'goods_name', title: __('Goods_name'), operate: 'LIKE'},
  34 + {field: 'keywords', title: __('Keywords'), operate: 'LIKE'},
  35 + {field: 'category.name', title: __('Category.name'), operate: 'LIKE'},
  36 + {field: 'activity.name', title: __('Activity.name'), operate: 'LIKE'},
  37 + // {field: 'category_id', visible: false, title: __('Category_id')},
  38 + {field: 'image', title: __('Image'), formatter: Table.api.formatter.image},
  39 + {field: 'images', title: __('Images'), formatter: Table.api.formatter.images},
  40 + {
  41 + field: 'spec_type',
  42 + title: __('Spec_type'),
  43 + searchList: {"10": __('Spec_type 10'), "20": __('Spec_type 20')},
  44 + formatter: Table.api.formatter.normal
  45 + },
  46 + {field: 'stock_num', title: __('库存'), operate: false},
  47 + // {field: 'deduct_stock_type', title: __('Deduct_stock_type'), searchList: {"10":__('Deduct_stock_type 10'),"20":__('Deduct_stock_type 20')}, formatter: Table.api.formatter.normal},
  48 + // {field: 'freight.name', title: __('Freight.name')},
  49 + // {field: 'sales_initial', title: __('Sales_initial')},
  50 + {field: 'sales_actual', title: __('Sales_actual')},
  51 + // {field: 'goods_sort', title: __('Goods_sort')},
  52 + // {field: 'delivery_id', title: __('Delivery_id')},
  53 + {
  54 + field: 'goods_status',
  55 + title: __('Goods_status'),
  56 + searchList: {"10": __('Goods_status 10'), "20": __('Goods_status 20')},
  57 + formatter: Table.api.formatter.status
  58 + },
  59 + {
  60 + field: 'is_delete',
  61 + title: __('Is_delete'),
  62 + searchList: {"0": __('Is_delete 0'), "1": __('Is_delete 1')},
  63 + formatter: Table.api.formatter.normal
  64 + },
  65 + {
  66 + field: 'is_index',
  67 + title: __('Is_index'),
  68 + searchList: {"0": __('Is_index 0'), "1": __('Is_index 1')},
  69 + formatter: Table.api.formatter.normal
  70 + },
  71 + {
  72 + field: 'createtime',
  73 + title: __('Createtime'),
  74 + operate: 'RANGE',
  75 + addclass: 'datetimerange',
  76 + formatter: Table.api.formatter.datetime
  77 + },
  78 + {
  79 + field: 'updatetime',
  80 + title: __('Updatetime'),
  81 + operate: 'RANGE',
  82 + addclass: 'datetimerange',
  83 + formatter: Table.api.formatter.datetime
  84 + },
  85 + {
  86 + field: 'operate',
  87 + title: __('Operate'),
  88 + table: table,
  89 + events: Table.api.events.operate,
  90 + formatter: Table.api.formatter.operate
  91 + }
  92 + ]
  93 + ]
  94 + });
  95 +
  96 +
  97 +
  98 +
  99 +
  100 + table.on('.btn-discount', function (e, settings, json, xhr) {
  101 + Fast.api.open()
  102 + });
  103 + //*************************** 自定义export开始
  104 + var submitForm = function (ids, layero) {
  105 + var options = table.bootstrapTable('getOptions');
  106 + console.log(options);
  107 + var columns = [];
  108 + $.each(options.columns[0], function (i, j) {
  109 + if (j.field && !j.checkbox && j.visible && j.field != 'operate') {
  110 + columns.push(j.field);
  111 + }
  112 + });
  113 + var search = options.queryParams({});
  114 + $("input[name=search]", layero).val(options.searchText);
  115 + $("input[name=ids]", layero).val(ids);
  116 + $("input[name=filter]", layero).val(search.filter);
  117 + $("input[name=op]", layero).val(search.op);
  118 + $("input[name=columns]", layero).val(columns.join(','));
  119 + $("form", layero).submit();
  120 + };
  121 + $(document).on("click", ".btn-export", function () {
  122 + var ids = Table.api.selectedids(table);
  123 + var page = table.bootstrapTable('getData');
  124 + var all = table.bootstrapTable('getOptions').totalRows;
  125 + console.log(ids, page, all);
  126 + Layer.confirm("请选择导出的选项<form action='" + Fast.api.fixurl("litestore/litestoregoods/export") + "' method='post' target='_blank'><input type='hidden' name='ids' value='' /><input type='hidden' name='filter' ><input type='hidden' name='op'><input type='hidden' name='search'><input type='hidden' name='columns'></form>", {
  127 + title: '导出数据',
  128 + btn: ["导出(" + all + "条)"],
  129 + // btn: ["选中项(" + ids.length + "条)"],
  130 + success: function (layero, index) {
  131 + $(".layui-layer-btn a", layero).addClass("layui-layer-btn0");
  132 + }
  133 + , yes: function (index, layero) {
  134 + submitForm(ids.join(","), layero);
  135 + return false;
  136 + }
  137 + ,
  138 + btn2: function (index, layero) {
  139 + var ids = [];
  140 + $.each(page, function (i, j) {
  141 + ids.push(j.id);
  142 + });
  143 + submitForm(ids.join(","), layero);
  144 + return false;
  145 + }
  146 + ,
  147 + btn3: function (index, layero) {
  148 + submitForm("all", layero);
  149 + return false;
  150 + }
  151 + })
  152 + });
  153 + //*************************** 自定义export结束
  154 + // 为表格绑定事件
  155 + Table.api.bindevent(table);
  156 + table.on('load-success.bs.table', function (data) {
  157 + $(".btn-editone").data("area", ["1000px", "800px"]);
  158 + });
  159 +
  160 + },
  161 + add: function () {
  162 + Form.api.bindevent($("form[role=form]"), function (data, ret) {
  163 + Fast.api.close(data);
  164 + Toastr.success("商品提交成功");
  165 + }, function (data, ret) {
  166 + Toastr.success("商品提交失败");
  167 + }, function (success, error) {
  168 + //注意如果我们需要阻止表单,可以在此使用return false;即可
  169 + //如果我们处理完成需要再次提交表单则可以使用submit提交,如下
  170 + console.log(this);
  171 + var form = this;
  172 + if (form.size() === 0) {
  173 + Toastr.error("表单未初始化完成,无法提交");
  174 + return false;
  175 + }
  176 + var type = form.attr("method") ? form.attr("method").toUpperCase() : 'GET';
  177 + type = type && (type === 'GET' || type === 'POST') ? type : 'GET';
  178 + url = form.attr("action");
  179 + url = url ? url : location.href;
  180 + //修复当存在多选项元素时提交的BUG
  181 + var params = {};
  182 + var multipleList = $("[name$='[]']", form);
  183 + if (multipleList.size() > 0) {
  184 + var postFields = form.serializeArray().map(function (obj) {
  185 + return $(obj).prop("name");
  186 + });
  187 + $.each(multipleList, function (i, j) {
  188 + if (postFields.indexOf($(this).prop("name")) < 0) {
  189 + params[$(this).prop("name")] = '';
  190 + }
  191 + });
  192 + }
  193 + var dataParam = {spec_many: specMany.getData()};
  194 + console.log(dataParam);
  195 + Fast.api.ajax({
  196 + type: type,
  197 + url: url,
  198 + data: form.serialize() + (Object.keys(params).length > 0 ? '&' + $.param(params) : '') + (Object.keys(dataParam).length > 0 ? '&' + $.param(dataParam) : ''),
  199 + dataType: 'json',
  200 + complete: function (xhr) {
  201 + var token = xhr.getResponseHeader('__token__');
  202 + if (token) {
  203 + $("input[name='__token__']", form).val(token);
  204 + }
  205 + if (xhr.responseJSON.code == 1) {
  206 + //关闭弹窗
  207 + var index = parent.Layer.getFrameIndex(window.name);
  208 + var callback = parent.$("#layui-layer" + index).data("callback");
  209 + parent.Layer.close(index);
  210 + //刷新列表
  211 + parent.$("#table").bootstrapTable('refresh');
  212 + }
  213 + }
  214 + }, function (data, ret) {
  215 + $('.form-group', form).removeClass('has-feedback has-success has-error');
  216 + if (data && typeof data === 'object') {
  217 + if (typeof data.token !== 'undefined') {
  218 + $("input[name='__token__']", form).val(data.token);
  219 + }
  220 + if (typeof data.callback !== 'undefined' && typeof data.callback === 'function') {
  221 + data.callback.call(form, data);
  222 + }
  223 + }
  224 + }, function (data, ret) {
  225 + if (data && typeof data === 'object' && typeof data.token !== 'undefined') {
  226 + $("input[name='__token__']", form).val(data.token);
  227 + }
  228 + });
  229 + return false;
  230 + });
  231 +
  232 + // 注册商品多规格组件
  233 + var specMany = new GoodsSpec({
  234 + container: '.goods-spec-many',
  235 + OutForm: Form
  236 + });
  237 +
  238 + // 切换单/多规格
  239 + $('select[name="row[spec_type]"').change(function (e) {
  240 + var $goodsSpecMany = $('.goods-spec-many')
  241 + , $goodsSpecSingle = $('.goods-spec-single');
  242 + if (e.currentTarget.value === '10') {
  243 + $goodsSpecMany.hide() && $goodsSpecSingle.show();
  244 + } else {
  245 + $goodsSpecMany.show() && $goodsSpecSingle.hide();
  246 + }
  247 + });
  248 +
  249 +
  250 + },
  251 + edit: function () {
  252 + //Controller.api.bindevent();
  253 +
  254 + Form.api.bindevent($("form[role=form]"), function (data, ret) {
  255 + //Fast.api.close(data);
  256 + Toastr.success("商品提交成功");
  257 + }, function (data, ret) {
  258 + Toastr.success("商品提交失败");
  259 + }, function (success, error) {
  260 + //注意如果我们需要阻止表单,可以在此使用return false;即可
  261 + //如果我们处理完成需要再次提交表单则可以使用submit提交,如下
  262 + console.log(this);
  263 + var form = this;
  264 + if (form.size() === 0) {
  265 + Toastr.error("表单未初始化完成,无法提交");
  266 + return false;
  267 + }
  268 + var type = form.attr("method") ? form.attr("method").toUpperCase() : 'GET';
  269 + type = type && (type === 'GET' || type === 'POST') ? type : 'GET';
  270 + url = form.attr("action");
  271 + url = url ? url : location.href;
  272 + //修复当存在多选项元素时提交的BUG
  273 + var params = {};
  274 + var multipleList = $("[name$='[]']", form);
  275 + if (multipleList.size() > 0) {
  276 + var postFields = form.serializeArray().map(function (obj) {
  277 + return $(obj).prop("name");
  278 + });
  279 + $.each(multipleList, function (i, j) {
  280 + if (postFields.indexOf($(this).prop("name")) < 0) {
  281 + params[$(this).prop("name")] = '';
  282 + }
  283 + });
  284 + }
  285 + var dataParam = {spec_many: specMany.getData()};
  286 + console.log(dataParam);
  287 + Fast.api.ajax({
  288 + type: type,
  289 + url: url,
  290 + data: form.serialize() + (Object.keys(params).length > 0 ? '&' + $.param(params) : '') + (Object.keys(dataParam).length > 0 ? '&' + $.param(dataParam) : ''),
  291 + dataType: 'json',
  292 + complete: function (xhr) {
  293 + var token = xhr.getResponseHeader('__token__');
  294 + if (token) {
  295 + $("input[name='__token__']", form).val(token);
  296 + }
  297 + if (xhr.responseJSON.code == 1) {
  298 + //关闭弹窗
  299 + var index = parent.Layer.getFrameIndex(window.name);
  300 + var callback = parent.$("#layui-layer" + index).data("callback");
  301 + parent.Layer.close(index);
  302 + //刷新列表
  303 + parent.$("#table").bootstrapTable('refresh');
  304 + }
  305 + }
  306 + }, function (data, ret) {
  307 + $('.form-group', form).removeClass('has-feedback has-success has-error');
  308 + if (data && typeof data === 'object') {
  309 + if (typeof data.token !== 'undefined') {
  310 + $("input[name='__token__']", form).val(data.token);
  311 + }
  312 + if (typeof data.callback !== 'undefined' && typeof data.callback === 'function') {
  313 + data.callback.call(form, data);
  314 + }
  315 + }
  316 + }, function (data, ret) {
  317 + if (data && typeof data === 'object' && typeof data.token !== 'undefined') {
  318 + $("input[name='__token__']", form).val(data.token);
  319 + }
  320 + });
  321 + return false;
  322 + });
  323 + // 注册商品多规格组件
  324 + var specMany = new GoodsSpec({
  325 + container: '.goods-spec-many',
  326 + OutForm: Form
  327 + }, from_specData);
  328 +
  329 + // 切换单/多规格
  330 + $('select[name="row[spec_type]"').change(function (e) {
  331 + var $goodsSpecMany = $('.goods-spec-many')
  332 + , $goodsSpecSingle = $('.goods-spec-single');
  333 + if (e.currentTarget.value === '10') {
  334 + $goodsSpecMany.hide() && $goodsSpecSingle.show();
  335 + } else {
  336 + $goodsSpecMany.show() && $goodsSpecSingle.hide();
  337 + }
  338 + });
  339 + },
  340 + api: {
  341 + bindevent: function () {
  342 + Form.api.bindevent($("form[role=form]"));
  343 + }
  344 + }
  345 + };
  346 + return Controller;
  347 +});
  1 +define(['jquery', 'bootstrap', 'backend', 'table', 'form', 'template', 'litestoregoods'], function ($, undefined, Backend, Table, Form, Template, litestoregoods) {
  2 +
  3 + var Controller = {
  4 + index: function () {
  5 + $(".btn-add").data("area", ["1000px", "800px"]);
  6 + // 初始化表格参数配置
  7 + Table.api.init({
  8 + extend: {
  9 + index_url: 'activity_goods/new_goods/index',
  10 + add_url: 'litestore/litestoregoods/add',
  11 + edit_url: 'litestore/litestoregoods/edit',
  12 + del_url: 'litestore/litestoregoods/del',
  13 + discount_url: 'litestore/litestoregoods/discount',
  14 + multi_url: 'litestore/litestoregoods/multi',
  15 + import_url: 'litestore/litestoregoods/import',
  16 + table: 'litestore_goods',
  17 + }
  18 + });
  19 +
  20 + var table = $("#table");
  21 +
  22 + // 初始化表格
  23 + table.bootstrapTable({
  24 + url: $.fn.bootstrapTable.defaults.extend.index_url,
  25 + pk: 'goods_id',
  26 + sortName: 'goods_sort',
  27 + search: false,
  28 + showExport: false,
  29 + columns: [
  30 + [
  31 + {checkbox: true},
  32 + {field: 'goods_id', title: __('Goods_id')},
  33 + {field: 'goods_name', title: __('Goods_name'), operate: 'LIKE'},
  34 + {field: 'keywords', title: __('Keywords'), operate: 'LIKE'},
  35 + {field: 'category.name', title: __('Category.name'), operate: 'LIKE'},
  36 + {field: 'activity.name', title: __('Activity.name'), operate: 'LIKE'},
  37 + // {field: 'category_id', visible: false, title: __('Category_id')},
  38 + {field: 'image', title: __('Image'), formatter: Table.api.formatter.image},
  39 + {field: 'images', title: __('Images'), formatter: Table.api.formatter.images},
  40 + {
  41 + field: 'spec_type',
  42 + title: __('Spec_type'),
  43 + searchList: {"10": __('Spec_type 10'), "20": __('Spec_type 20')},
  44 + formatter: Table.api.formatter.normal
  45 + },
  46 + {field: 'stock_num', title: __('库存'), operate: false},
  47 + // {field: 'deduct_stock_type', title: __('Deduct_stock_type'), searchList: {"10":__('Deduct_stock_type 10'),"20":__('Deduct_stock_type 20')}, formatter: Table.api.formatter.normal},
  48 + // {field: 'freight.name', title: __('Freight.name')},
  49 + // {field: 'sales_initial', title: __('Sales_initial')},
  50 + {field: 'sales_actual', title: __('Sales_actual')},
  51 + // {field: 'goods_sort', title: __('Goods_sort')},
  52 + // {field: 'delivery_id', title: __('Delivery_id')},
  53 + {
  54 + field: 'goods_status',
  55 + title: __('Goods_status'),
  56 + searchList: {"10": __('Goods_status 10'), "20": __('Goods_status 20')},
  57 + formatter: Table.api.formatter.status
  58 + },
  59 + {
  60 + field: 'is_delete',
  61 + title: __('Is_delete'),
  62 + searchList: {"0": __('Is_delete 0'), "1": __('Is_delete 1')},
  63 + formatter: Table.api.formatter.normal
  64 + },
  65 + {
  66 + field: 'is_index',
  67 + title: __('Is_index'),
  68 + searchList: {"0": __('Is_index 0'), "1": __('Is_index 1')},
  69 + formatter: Table.api.formatter.normal
  70 + },
  71 + {
  72 + field: 'createtime',
  73 + title: __('Createtime'),
  74 + operate: 'RANGE',
  75 + addclass: 'datetimerange',
  76 + formatter: Table.api.formatter.datetime
  77 + },
  78 + {
  79 + field: 'updatetime',
  80 + title: __('Updatetime'),
  81 + operate: 'RANGE',
  82 + addclass: 'datetimerange',
  83 + formatter: Table.api.formatter.datetime
  84 + },
  85 + {
  86 + field: 'operate',
  87 + title: __('Operate'),
  88 + table: table,
  89 + events: Table.api.events.operate,
  90 + formatter: Table.api.formatter.operate
  91 + }
  92 + ]
  93 + ]
  94 + });
  95 +
  96 +
  97 +
  98 +
  99 +
  100 + table.on('.btn-discount', function (e, settings, json, xhr) {
  101 + Fast.api.open()
  102 + });
  103 + //*************************** 自定义export开始
  104 + var submitForm = function (ids, layero) {
  105 + var options = table.bootstrapTable('getOptions');
  106 + console.log(options);
  107 + var columns = [];
  108 + $.each(options.columns[0], function (i, j) {
  109 + if (j.field && !j.checkbox && j.visible && j.field != 'operate') {
  110 + columns.push(j.field);
  111 + }
  112 + });
  113 + var search = options.queryParams({});
  114 + $("input[name=search]", layero).val(options.searchText);
  115 + $("input[name=ids]", layero).val(ids);
  116 + $("input[name=filter]", layero).val(search.filter);
  117 + $("input[name=op]", layero).val(search.op);
  118 + $("input[name=columns]", layero).val(columns.join(','));
  119 + $("form", layero).submit();
  120 + };
  121 + $(document).on("click", ".btn-export", function () {
  122 + var ids = Table.api.selectedids(table);
  123 + var page = table.bootstrapTable('getData');
  124 + var all = table.bootstrapTable('getOptions').totalRows;
  125 + console.log(ids, page, all);
  126 + Layer.confirm("请选择导出的选项<form action='" + Fast.api.fixurl("litestore/litestoregoods/export") + "' method='post' target='_blank'><input type='hidden' name='ids' value='' /><input type='hidden' name='filter' ><input type='hidden' name='op'><input type='hidden' name='search'><input type='hidden' name='columns'></form>", {
  127 + title: '导出数据',
  128 + btn: ["导出(" + all + "条)"],
  129 + // btn: ["选中项(" + ids.length + "条)"],
  130 + success: function (layero, index) {
  131 + $(".layui-layer-btn a", layero).addClass("layui-layer-btn0");
  132 + }
  133 + , yes: function (index, layero) {
  134 + submitForm(ids.join(","), layero);
  135 + return false;
  136 + }
  137 + ,
  138 + btn2: function (index, layero) {
  139 + var ids = [];
  140 + $.each(page, function (i, j) {
  141 + ids.push(j.id);
  142 + });
  143 + submitForm(ids.join(","), layero);
  144 + return false;
  145 + }
  146 + ,
  147 + btn3: function (index, layero) {
  148 + submitForm("all", layero);
  149 + return false;
  150 + }
  151 + })
  152 + });
  153 + //*************************** 自定义export结束
  154 + // 为表格绑定事件
  155 + Table.api.bindevent(table);
  156 + table.on('load-success.bs.table', function (data) {
  157 + $(".btn-editone").data("area", ["1000px", "800px"]);
  158 + });
  159 +
  160 + },
  161 + add: function () {
  162 + Form.api.bindevent($("form[role=form]"), function (data, ret) {
  163 + Fast.api.close(data);
  164 + Toastr.success("商品提交成功");
  165 + }, function (data, ret) {
  166 + Toastr.success("商品提交失败");
  167 + }, function (success, error) {
  168 + //注意如果我们需要阻止表单,可以在此使用return false;即可
  169 + //如果我们处理完成需要再次提交表单则可以使用submit提交,如下
  170 + console.log(this);
  171 + var form = this;
  172 + if (form.size() === 0) {
  173 + Toastr.error("表单未初始化完成,无法提交");
  174 + return false;
  175 + }
  176 + var type = form.attr("method") ? form.attr("method").toUpperCase() : 'GET';
  177 + type = type && (type === 'GET' || type === 'POST') ? type : 'GET';
  178 + url = form.attr("action");
  179 + url = url ? url : location.href;
  180 + //修复当存在多选项元素时提交的BUG
  181 + var params = {};
  182 + var multipleList = $("[name$='[]']", form);
  183 + if (multipleList.size() > 0) {
  184 + var postFields = form.serializeArray().map(function (obj) {
  185 + return $(obj).prop("name");
  186 + });
  187 + $.each(multipleList, function (i, j) {
  188 + if (postFields.indexOf($(this).prop("name")) < 0) {
  189 + params[$(this).prop("name")] = '';
  190 + }
  191 + });
  192 + }
  193 + var dataParam = {spec_many: specMany.getData()};
  194 + console.log(dataParam);
  195 + Fast.api.ajax({
  196 + type: type,
  197 + url: url,
  198 + data: form.serialize() + (Object.keys(params).length > 0 ? '&' + $.param(params) : '') + (Object.keys(dataParam).length > 0 ? '&' + $.param(dataParam) : ''),
  199 + dataType: 'json',
  200 + complete: function (xhr) {
  201 + var token = xhr.getResponseHeader('__token__');
  202 + if (token) {
  203 + $("input[name='__token__']", form).val(token);
  204 + }
  205 + if (xhr.responseJSON.code == 1) {
  206 + //关闭弹窗
  207 + var index = parent.Layer.getFrameIndex(window.name);
  208 + var callback = parent.$("#layui-layer" + index).data("callback");
  209 + parent.Layer.close(index);
  210 + //刷新列表
  211 + parent.$("#table").bootstrapTable('refresh');
  212 + }
  213 + }
  214 + }, function (data, ret) {
  215 + $('.form-group', form).removeClass('has-feedback has-success has-error');
  216 + if (data && typeof data === 'object') {
  217 + if (typeof data.token !== 'undefined') {
  218 + $("input[name='__token__']", form).val(data.token);
  219 + }
  220 + if (typeof data.callback !== 'undefined' && typeof data.callback === 'function') {
  221 + data.callback.call(form, data);
  222 + }
  223 + }
  224 + }, function (data, ret) {
  225 + if (data && typeof data === 'object' && typeof data.token !== 'undefined') {
  226 + $("input[name='__token__']", form).val(data.token);
  227 + }
  228 + });
  229 + return false;
  230 + });
  231 +
  232 + // 注册商品多规格组件
  233 + var specMany = new GoodsSpec({
  234 + container: '.goods-spec-many',
  235 + OutForm: Form
  236 + });
  237 +
  238 + // 切换单/多规格
  239 + $('select[name="row[spec_type]"').change(function (e) {
  240 + var $goodsSpecMany = $('.goods-spec-many')
  241 + , $goodsSpecSingle = $('.goods-spec-single');
  242 + if (e.currentTarget.value === '10') {
  243 + $goodsSpecMany.hide() && $goodsSpecSingle.show();
  244 + } else {
  245 + $goodsSpecMany.show() && $goodsSpecSingle.hide();
  246 + }
  247 + });
  248 +
  249 +
  250 + },
  251 + edit: function () {
  252 + //Controller.api.bindevent();
  253 +
  254 + Form.api.bindevent($("form[role=form]"), function (data, ret) {
  255 + //Fast.api.close(data);
  256 + Toastr.success("商品提交成功");
  257 + }, function (data, ret) {
  258 + Toastr.success("商品提交失败");
  259 + }, function (success, error) {
  260 + //注意如果我们需要阻止表单,可以在此使用return false;即可
  261 + //如果我们处理完成需要再次提交表单则可以使用submit提交,如下
  262 + console.log(this);
  263 + var form = this;
  264 + if (form.size() === 0) {
  265 + Toastr.error("表单未初始化完成,无法提交");
  266 + return false;
  267 + }
  268 + var type = form.attr("method") ? form.attr("method").toUpperCase() : 'GET';
  269 + type = type && (type === 'GET' || type === 'POST') ? type : 'GET';
  270 + url = form.attr("action");
  271 + url = url ? url : location.href;
  272 + //修复当存在多选项元素时提交的BUG
  273 + var params = {};
  274 + var multipleList = $("[name$='[]']", form);
  275 + if (multipleList.size() > 0) {
  276 + var postFields = form.serializeArray().map(function (obj) {
  277 + return $(obj).prop("name");
  278 + });
  279 + $.each(multipleList, function (i, j) {
  280 + if (postFields.indexOf($(this).prop("name")) < 0) {
  281 + params[$(this).prop("name")] = '';
  282 + }
  283 + });
  284 + }
  285 + var dataParam = {spec_many: specMany.getData()};
  286 + console.log(dataParam);
  287 + Fast.api.ajax({
  288 + type: type,
  289 + url: url,
  290 + data: form.serialize() + (Object.keys(params).length > 0 ? '&' + $.param(params) : '') + (Object.keys(dataParam).length > 0 ? '&' + $.param(dataParam) : ''),
  291 + dataType: 'json',
  292 + complete: function (xhr) {
  293 + var token = xhr.getResponseHeader('__token__');
  294 + if (token) {
  295 + $("input[name='__token__']", form).val(token);
  296 + }
  297 + if (xhr.responseJSON.code == 1) {
  298 + //关闭弹窗
  299 + var index = parent.Layer.getFrameIndex(window.name);
  300 + var callback = parent.$("#layui-layer" + index).data("callback");
  301 + parent.Layer.close(index);
  302 + //刷新列表
  303 + parent.$("#table").bootstrapTable('refresh');
  304 + }
  305 + }
  306 + }, function (data, ret) {
  307 + $('.form-group', form).removeClass('has-feedback has-success has-error');
  308 + if (data && typeof data === 'object') {
  309 + if (typeof data.token !== 'undefined') {
  310 + $("input[name='__token__']", form).val(data.token);
  311 + }
  312 + if (typeof data.callback !== 'undefined' && typeof data.callback === 'function') {
  313 + data.callback.call(form, data);
  314 + }
  315 + }
  316 + }, function (data, ret) {
  317 + if (data && typeof data === 'object' && typeof data.token !== 'undefined') {
  318 + $("input[name='__token__']", form).val(data.token);
  319 + }
  320 + });
  321 + return false;
  322 + });
  323 + // 注册商品多规格组件
  324 + var specMany = new GoodsSpec({
  325 + container: '.goods-spec-many',
  326 + OutForm: Form
  327 + }, from_specData);
  328 +
  329 + // 切换单/多规格
  330 + $('select[name="row[spec_type]"').change(function (e) {
  331 + var $goodsSpecMany = $('.goods-spec-many')
  332 + , $goodsSpecSingle = $('.goods-spec-single');
  333 + if (e.currentTarget.value === '10') {
  334 + $goodsSpecMany.hide() && $goodsSpecSingle.show();
  335 + } else {
  336 + $goodsSpecMany.show() && $goodsSpecSingle.hide();
  337 + }
  338 + });
  339 + },
  340 + api: {
  341 + bindevent: function () {
  342 + Form.api.bindevent($("form[role=form]"));
  343 + }
  344 + }
  345 + };
  346 + return Controller;
  347 +});