Kirin 3 سال پیش
والد
کامیت
7bea971c22
3فایلهای تغییر یافته به همراه161 افزوده شده و 470 حذف شده
  1. 23 413
      app/admin/controller/ump/StoreCard.php
  2. 63 57
      app/admin/view/ump/store_card/index.php
  3. 75 0
      app/models/store/Card.php

+ 23 - 413
app/admin/controller/ump/StoreCard.php

@@ -50,7 +50,7 @@ class StoreCard extends AuthController
             ['status', ''],
             ['name', '']
         ]);
-        \app\admin\model\ump\StoreExchange::SaveExcel($where);
+        Card::SaveExcel($where);
     }
 
     /**
@@ -64,17 +64,12 @@ class StoreCard extends AuthController
             ['status', ''],
             ['name', '']
         ]);
-        $seckillList = \app\admin\model\ump\StoreExchange::systemPage($where);
+        $seckillList = Card::systemPage($where);
         if (is_object($seckillList['list'])) $seckillList['list'] = $seckillList['list']->toArray();
         $data = $seckillList['list']['data'];
         return Json::successlayui(['count' => $seckillList['list']['total'], 'data' => $data]);
     }
 
-    public function get_seckill_id()
-    {
-        return Json::successlayui(\app\admin\model\ump\StoreExchange::getSeckillIdAll());
-    }
-
     /**
      * 添加秒杀商品
      * @return form-builder
@@ -82,27 +77,11 @@ class StoreCard extends AuthController
     public function create()
     {
         $f = array();
-        $f[] = Form::frameImageOne('product', '选择商品', Url::buildUrl('productList', array('fodder' => 'product')))->icon('plus')->width('100%')->height('500px');
-        $f[] = Form::hidden('product_id', '');
-        $f[] = Form::hidden('description', '');
-        $f[] = Form::input('title', '商品标题');
-        $f[] = Form::input('info', '活动简介')->type('textarea');
-        $f[] = Form::input('unit_name', '单位')->placeholder('个、位');
-        $f[] = Form::select('temp_id', '运费模板')->setOptions(function () {
-            $list = ShippingTemplates::getList(['page' => 1, 'limit' => 20]);
-            $menus = [];
-            foreach ($list['data'] as $menu) {
-                $menus[] = ['value' => $menu['id'], 'label' => $menu['name']];
-            }
-            return $menus;
-        })->filterable(1)->col(12);
-        $f[] = Form::frameImageOne('image', '商品主图片(305*305px)', Url::buildUrl('admin/widget.images/index', array('fodder' => 'image')))->icon('image')->width('100%')->height('500px');
-        $f[] = Form::frameImages('images', '商品轮播图(640*640px)', Url::buildUrl('admin/widget.images/index', array('fodder' => 'images')))->maxLength(5)->icon('images')->width('100%')->height('500px');
-        $f[] = Form::number('sort', '排序')->col(12);
-        $f[] = Form::number('num', '单次购买商品个数')->precision(0)->col(12);
-        $f[] = Form::number('give_integral', '赠送积分')->min(0)->precision(0)->col(12);
-        $f[] = Form::radio('is_hot', '热门推荐', 1)->options([['label' => '开启', 'value' => 1], ['label' => '关闭', 'value' => 0]])->col(12);
-        $form = Form::make_post_form('添加用户通知', $f, Url::buildUrl('save'));
+        $f[] = Form::input('name', '标题')->required('请输入礼品卡标题');
+        $f[] = Form::number('price', '价格')->step(0.01)->required();
+        $f[] = Form::number('store_award', '奖金')->step(0.01)->required();
+        $f[] = Form::number('num', '数量')->step(1)->required()->min(1);
+        $form = Form::make_post_form('添加礼品卡', $f, Url::buildUrl('save_cards'));
         $this->assign(compact('form'));
         return $this->fetch('public/form-builder');
     }
@@ -111,395 +90,26 @@ class StoreCard extends AuthController
      * 保存秒杀商品
      * @param int $id
      */
-    public function save($id = 0)
-    {
-        $data = Util::postMore([
-            'title',
-            'product_id',
-            'info',
-            'unit_name',
-            ['image', ''],
-            ['images', []],
-            ['price', 0],
-            ['ot_price', 0],
-            ['cost', 0],
-            ['sales', 0],
-            ['stock', 0],
-            ['sort', 0],
-            ['give_integral', 0],
-            ['postage', 0],
-            ['is_postage', 0],
-            ['cost', 0],
-            ['is_hot', 0],
-            ['status', 0],
-            ['num', 0],
-            'temp_id',
-            ['weight', 0],
-            ['volume', 0],
-        ]);
-        $data['description'] = StoreDescription::getDescription($data['product_id']);
-        if (!$data['title']) return Json::fail('请输入商品标题');
-        if (!$data['unit_name']) return Json::fail('请输入商品单位');
-        if (!$data['product_id']) return Json::fail('商品ID不能为空');
-        if (!$data['image']) return Json::fail('请选择推荐图');
-        if (count($data['images']) < 1) return Json::fail('请选择轮播图');
-        $data['images'] = json_encode($data['images']);
-        if ($data['num'] < 1) return Json::fail('请输入单次购买个数');
-        if ($id) {
-            unset($data['description']);
-            $product = \app\admin\model\ump\StoreExchange::get($id);
-            if (!$product) return Json::fail('数据不存在!');
-            \app\admin\model\ump\StoreExchange::edit($data, $id);
-            return Json::successful('编辑成功!');
-        } else {
-            $data['add_time'] = time();
-            $res = \app\admin\model\ump\StoreExchange::create($data);
-            $description['product_id'] = $res['id'];
-            $description['description'] = htmlspecialchars_decode($data['description']);
-            $description['type'] = 5;
-            StoreDescription::create($description);
-            return Json::successful('添加成功!');
-        }
-
-    }
-
-    /**
-     * 显示编辑资源表单页.
-     *
-     * @param int $id
-     * @return \think\Response
-     */
-    public function edit($id)
-    {
-        if (!$id) return $this->failed('数据不存在');
-        $product = \app\admin\model\ump\StoreExchange::get($id);
-//        $time = StoreSeckillTime::getSeckillTime($id);
-        if (!$product) return Json::fail('数据不存在!');
-        $f = array();
-        $f[] = Form::input('product_id', '产品ID', $product->getData('product_id'))->disabled(true);
-        $f[] = Form::input('title', '商品标题', $product->getData('title'));
-        $f[] = Form::input('info', '活动简介', $product->getData('info'))->type('textarea');
-        $f[] = Form::input('unit_name', '单位', $product->getData('unit_name'))->placeholder('个、位');
-        $f[] = Form::select('temp_id', '运费模板', (string)$product->getData('temp_id'))->setOptions(function () {
-            $list = ShippingTemplates::getList(['page' => 1, 'limit' => 20]);
-            $menus = [];
-            foreach ($list['data'] as $menu) {
-                $menus[] = ['value' => $menu['id'], 'label' => $menu['name']];
-            }
-            return $menus;
-        })->filterable(1)->col(12);
-        $f[] = Form::frameImageOne('image', '商品主图片(305*305px)', Url::buildUrl('admin/widget.images/index', array('fodder' => 'image')), $product->getData('image'))->icon('image')->width('100%')->height('500px');
-        $f[] = Form::frameImages('images', '商品轮播图(640*640px)', Url::buildUrl('admin/widget.images/index', array('fodder' => 'images')), json_decode($product->getData('images')))->maxLength(5)->icon('images')->width('100%')->height('500px');
-        $f[] = Form::number('sort', '排序', $product->getData('sort'))->col(12);
-        $f[] = Form::hidden('stock', $product->getData('stock'));
-        $f[] = Form::hidden('price', $product->getData('price'));
-        $f[] = Form::hidden('ot_price', $product->getData('ot_price'));
-        $f[] = Form::hidden('sales', $product->getData('sales'));
-        $f[] = Form::number('num', '单次购买商品个数', $product->getData('num'))->precision(0)->col(12);
-        $f[] = Form::number('give_integral', '赠送积分', $product->getData('give_integral'))->min(0)->precision(0)->col(12);
-        $f[] = Form::radio('is_hot', '热门推荐', $product->getData('is_hot'))->options([['label' => '开启', 'value' => 1], ['label' => '关闭', 'value' => 0]])->col(12);
-        $f[] = Form::hidden('status', $product->getData('status'));
-        $form = Form::make_post_form('添加用户通知', $f, Url::buildUrl('save', compact('id')));
-        $this->assign(compact('form'));
-        return $this->fetch('public/form-builder');
-    }
-
-    /**
-     * 删除指定资源
-     *
-     * @param int $id
-     * @return \think\Response
-     */
-    public function delete($id)
-    {
-        if (!$id) return $this->failed('数据不存在');
-        $product = \app\admin\model\ump\StoreExchange::get($id);
-        if (!$product) return Json::fail('数据不存在!');
-        if ($product['is_del']) return Json::fail('已删除!');
-        $data['is_del'] = 1;
-        if (!\app\admin\model\ump\StoreExchange::edit($data, $id))
-            return Json::fail(\app\admin\model\ump\StoreExchange::getErrorInfo('删除失败,请稍候再试!'));
-        else
-            return Json::successful('删除成功!');
-    }
-
-    public function edit_content($id)
-    {
-        if (!$id) return $this->failed('数据不存在');
-        $seckill = \app\admin\model\ump\StoreExchange::get($id);
-        if (!$seckill) return Json::fail('数据不存在!');
-        $this->assign([
-            'content' => htmlspecialchars_decode(StoreDescription::getDescription($id, 5)),
-            'field' => 'description',
-            'action' => Url::buildUrl('change_field', ['id' => $id, 'field' => 'description'])
-        ]);
-        return $this->fetch('public/edit_content');
-    }
-
-    public function change_field($id)
-    {
-        if (!$id) return $this->failed('数据不存在');
-        $seckill = \app\admin\model\ump\StoreExchange::get($id);
-        if (!$seckill) return Json::fail('数据不存在!');
-        $data['description'] = request()->post('description');
-        StoreDescription::saveDescription($data['description'], $id, 5);
-        $res = \app\admin\model\ump\StoreExchange::edit($data, $id);
-        if ($res)
-            return Json::successful('添加成功');
-        else
-            return Json::fail('添加失败');
-    }
-
-    /**
-     * 属性页面
-     * @param $id
-     * @return mixed|void
-     */
-    public function attr($id)
-    {
-        if (!$id) return $this->failed('数据不存在!');
-        $result = StoreProductAttrResult::getResult($id, 5);
-        $image = \app\admin\model\ump\StoreExchange::where('id', $id)->value('image');
-        $this->assign(compact('id', 'result', 'image'));
-        return $this->fetch();
-    }
-
-    /**
-     * 秒杀属性选择页面
-     * @param $id
-     * @return string|void
-     * @throws \think\db\exception\DataNotFoundException
-     * @throws \think\db\exception\DbException
-     * @throws \think\db\exception\ModelNotFoundException
-     */
-    public function attr_list($id)
-    {
-        if (!$id) return $this->failed('数据不存在!');
-        $seckillInfo = \app\admin\model\ump\StoreExchange::where('id', $id)->find();
-        $seckillResult = StoreProductAttrResult::where('product_id', $id)->where('type', 5)->value('result');
-        $productResult = StoreProductAttrResult::where('product_id', $seckillInfo['product_id'])->where('type', 0)->value('result');
-        if ($productResult) {
-            $attr = json_decode($productResult, true)['attr'];
-            $productAttr = $this->get_attr($attr, $seckillInfo['product_id'], 0);
-            $seckillAttr = $this->get_attr($attr, $id, 5);
-            foreach ($productAttr as $pk => $pv) {
-                foreach ($seckillAttr as $sv) {
-                    if ($pv['detail'] == $sv['detail']) {
-                        $productAttr[$pk] = $sv;
-                    }
-                }
-            }
-        } else {
-            if ($seckillResult) {
-                $attr = json_decode($seckillResult, true)['attr'];
-                $productAttr = $this->get_attr($attr, $id, 5);
-            } else {
-                $attr[0]['value'] = '默认';
-                $attr[0]['detailValue'] = '';
-                $attr[0]['attrHidden'] = '';
-                $attr[0]['detail'][0] = '默认';
-                $productAttr[0]['value1'] = '默认';
-                $productAttr[0]['detail'] = json_encode(['默认' => '默认']);
-                $productAttr[0]['pic'] = $seckillInfo['image'];
-                $productAttr[0]['price'] = $seckillInfo['price'];
-                $productAttr[0]['cost'] = $seckillInfo['cost'];
-                $productAttr[0]['ot_price'] = $seckillInfo['ot_price'];
-                $productAttr[0]['stock'] = $seckillInfo['stock'];
-                $productAttr[0]['quota'] = 0;
-                $productAttr[0]['bar_code'] = $seckillInfo['bar_code'];
-                $productAttr[0]['weight'] = 0;
-                $productAttr[0]['volume'] = 0;
-                $productAttr[0]['deposit'] = 0;
-                $productAttr[0]['brokerage'] = 0;
-                $productAttr[0]['brokerage_two'] = 0;
-                $productAttr[0]['check'] = 0;
-            }
-        }
-        $attrs['attr'] = $attr;
-        $attrs['value'] = $productAttr;
-        $this->assign('attr', $attrs);
-        $this->assign('id', $id);
-        return $this->fetch();
-    }
-
-    /**
-     * 秒杀属性保存页面
-     * @throws \think\db\exception\DataNotFoundException
-     * @throws \think\db\exception\DbException
-     * @throws \think\db\exception\ModelNotFoundException
-     */
-    public function save_attr()
+    public function save_cards()
     {
         $data = Util::postMore([
-            ['attr', []],
-            ['ids', []],
-            ['id', 0],
+            'name',
+            'price',
+            'store_award',
+            'num',
         ]);
-        if (!$data['id']) return Json::fail('数据不存在!');
-        if (!$data['ids']) return Json::fail('你没有选择任何规格!');
-        $productId = \app\admin\model\ump\StoreExchange::where('id', $data['id'])->value('product_id');
-        $attr = json_decode(StoreProductAttrResult::where('product_id', $productId)->where('type', 0)->value('result'), true)['attr'];
-        foreach ($data['attr'] as $k => $v) {
-            if (in_array($k, $data['ids'])) {
-                $v['detail'] = json_decode(htmlspecialchars_decode($v['detail']), true);
-                $detail[$k] = $v;
-            }
-        }
-        if (min(array_column($detail, 'quota')) == 0) return Json::fail('限购不能为0');
-        $price = min(array_column($detail, 'price'));
-        $otPrice = min(array_column($detail, 'ot_price'));
-        $quota = array_sum(array_column($detail, 'quota'));
-        $stock = array_sum(array_column($detail, 'stock'));
-        $deposit = min(array_column($detail, 'deposit'));
-        if (!$attr) {
-            $attr[0]['value'] = '默认';
-            $attr[0]['detailValue'] = '';
-            $attr[0]['attrHidden'] = '';
-            $attr[0]['detail'][0] = '默认';
-        }
-        StoreProductAttr::createProductAttr($attr, $detail, $data['id'], 5);
-        \app\admin\model\ump\StoreExchange::where('id', $data['id'])->update(['deposit' => $deposit, 'stock' => $stock, 'quota' => $quota, 'quota_show' => $quota, 'price' => $price, 'ot_price' => $otPrice]);
-        return Json::successful('修改成功!');
-    }
 
-    /**
-     * 生成属性
-     * @param int $id
-     */
-    public function is_format_attr($id = 0)
-    {
-        if (!$id) return Json::fail('商品不存在');
-        list($attr, $detail) = Util::postMore([
-            ['items', []],
-            ['attrs', []]
-        ], $this->request, true);
-        $product = \app\admin\model\ump\StoreExchange::get($id);
-        if (!$product) return Json::fail('商品不存在');
-        $attrFormat = attr_format($attr)[1];
-        if (count($detail)) {
-            foreach ($attrFormat as $k => $v) {
-                foreach ($detail as $kk => $vv) {
-                    if ($v['detail'] == $vv['detail']) {
-                        $attrFormat[$k]['price'] = $vv['price'];
-                        $attrFormat[$k]['sales'] = $vv['sales'];
-                        $attrFormat[$k]['pic'] = $vv['pic'];
-                        $attrFormat[$k]['check'] = false;
-                        break;
-                    } else {
-                        $attrFormat[$k]['price'] = '';
-                        $attrFormat[$k]['sales'] = '';
-                        $attrFormat[$k]['pic'] = $product['image'];
-                        $attrFormat[$k]['check'] = true;
-                    }
-                }
-            }
-        } else {
-            foreach ($attrFormat as $k => $v) {
-                $attrFormat[$k]['price'] = $product['price'];
-                $attrFormat[$k]['sales'] = $product['stock'];
-                $attrFormat[$k]['pic'] = $product['image'];
-                $attrFormat[$k]['check'] = false;
-            }
-        }
-        return Json::successful($attrFormat);
-    }
-
-    /**
-     * 添加 修改属性
-     * @param $id
-     */
-    public function set_attr($id)
-    {
-        if (!$id) return $this->failed('商品不存在!');
-        list($attr, $detail) = Util::postMore([
-            ['items', []],
-            ['attrs', []]
-        ], $this->request, true);
-        $res = StoreProductAttr::createProductAttr($attr, $detail, $id, 5);
-        if ($res)
-            return $this->successful('编辑属性成功!');
-        else
-            return $this->failed(StoreProductAttr::getErrorInfo());
-    }
-
-    /**
-     * 清除属性
-     * @param $id
-     */
-    public function clear_attr($id)
-    {
-        if (!$id) return $this->failed('商品不存在!');
-        if (false !== StoreProductAttr::clearProductAttr($id, 5) && false !== StoreProductAttrResult::clearResult($id))
-            return $this->successful('清空商品属性成功!');
-        else
-            return $this->failed(StoreProductAttr::getErrorInfo('清空商品属性失败!'));
-    }
-
-    /**
-     * 修改秒杀商品状态
-     * @param $status
-     * @param int $id
-     */
-    public function set_seckill_status($status, $id = 0)
-    {
-        if (!$id) return Json::fail('参数错误');
-        $res = StoreProductAttrValue::where('product_id', $id)->where('type', 5)->find();
-        if (!$res) return Json::fail('请先配置规格');
-        $res = \app\admin\model\ump\StoreExchange::edit(['status' => $status], $id);
-        if ($res) return Json::successful('修改成功');
-        else return Json::fail('修改失败');
-    }
-
-    /**
-     * 秒杀获取商品列表
-     * @return string
-     * @throws \Exception
-     */
-    public function productList()
-    {
-        $cate = StoreCategory::getTierList(null, 1);
-        $this->assign('cate', $cate);
-        return $this->fetch();
-    }
-
-    /**
-     * 获取秒杀商品规格
-     * @param $attr
-     * @param $id
-     * @param $type
-     * @return array
-     */
-    public function get_attr($attr, $id, $type)
-    {
-        $value = attr_format($attr)[1];
-        $valueNew = [];
-        $count = 0;
-        foreach ($value as $key => $item) {
-            $detail = $item['detail'];
-//            sort($item['detail'], SORT_STRING);
-            $suk = implode(',', $item['detail']);
-            $sukValue = StoreProductAttrValue::where('product_id', $id)->where('type', $type)->where('suk', $suk)->column('bar_code,cost,price,ot_price,stock,image as pic,weight,volume,deposit,brokerage,brokerage_two,quota', 'suk');
-            if (count($sukValue)) {
-                foreach (array_values($detail) as $k => $v) {
-                    $valueNew[$count]['value' . ($k + 1)] = $v;
-                }
-                $valueNew[$count]['detail'] = json_encode($detail);
-                $valueNew[$count]['pic'] = $sukValue[$suk]['pic'] ?? '';
-                $valueNew[$count]['price'] = $sukValue[$suk]['price'] ? floatval($sukValue[$suk]['price']) : 0;
-                $valueNew[$count]['cost'] = $sukValue[$suk]['cost'] ? floatval($sukValue[$suk]['cost']) : 0;
-                $valueNew[$count]['ot_price'] = isset($sukValue[$suk]['ot_price']) ? floatval($sukValue[$suk]['ot_price']) : 0;
-                $valueNew[$count]['stock'] = $sukValue[$suk]['stock'] ? intval($sukValue[$suk]['stock']) : 0;
-                $valueNew[$count]['quota'] = $sukValue[$suk]['quota'] ? intval($sukValue[$suk]['quota']) : 0;
-                $valueNew[$count]['bar_code'] = $sukValue[$suk]['bar_code'] ?? '';
-                $valueNew[$count]['weight'] = $sukValue[$suk]['weight'] ?? 0;
-                $valueNew[$count]['volume'] = $sukValue[$suk]['volume'] ?? 0;
-                $valueNew[$count]['deposit'] = $sukValue[$suk]['deposit'] ?? 0;
-                $valueNew[$count]['brokerage'] = $sukValue[$suk]['brokerage'] ?? 0;
-                $valueNew[$count]['brokerage_two'] = $sukValue[$suk]['brokerage_two'] ?? 0;
-                $valueNew[$count]['check'] = $type != 0 ? 1 : 0;
-                $count++;
-            }
+        for ($i = 0; $i < $data['num']; $i++) {
+            $item = [
+                'add_time' => time(),
+                'name' => $data['name'],
+                'code' => Card::createCode(),
+                'password' => Card::createPassword(),
+                'price' => $data['price'],
+                'store_award' => $data['store_award'],
+            ];
+            Card::create($item);
         }
-        return $valueNew;
+        return Json::successful('添加成功!');
     }
 }

+ 63 - 57
app/admin/view/ump/store_card/index.php

@@ -4,7 +4,7 @@
 {/block}
 {block name="content"}
 <div class="layui-fluid">
-    <div class="layui-row layui-col-space15"  id="app">
+    <div class="layui-row layui-col-space15" id="app">
         <div class="layui-col-md12">
             <div class="layui-card">
                 <div class="layui-card-header">礼品卡搜索</div>
@@ -18,7 +18,8 @@
                             <div class="layui-inline">
                                 <label class="layui-form-label">搜  索:</label>
                                 <div class="layui-input-inline">
-                                    <input type="text" name="name" lay-verify="name" style="width: 100%" autocomplete="off" placeholder="请输入名称,卡号" class="layui-input">
+                                    <input type="text" name="name" lay-verify="name" style="width: 100%"
+                                           autocomplete="off" placeholder="请输入名称,卡号" class="layui-input">
                                 </div>
                             </div>
                             <div class="layui-inline">
@@ -35,10 +36,14 @@
                         </div>
                         <div class="layui-form-item">
                             <label class="layui-form-label">
-                                <button class="layui-btn layui-btn-sm" lay-submit="" lay-filter="search" style="font-size:14px;line-height: 9px;">
-                                    <i class="layui-icon layui-icon-search layuiadmin-button-btn"></i>搜索</button>
-                                <button lay-submit="export" lay-filter="export" class="layui-btn layui-btn-primary layui-btn-sm">
-                                    <i class="layui-icon layui-icon-delete layuiadmin-button-btn" ></i> Excel导出</button>
+                                <button class="layui-btn layui-btn-sm" lay-submit="" lay-filter="search"
+                                        style="font-size:14px;line-height: 9px;">
+                                    <i class="layui-icon layui-icon-search layuiadmin-button-btn"></i>搜索
+                                </button>
+                                <button lay-submit="export" lay-filter="export"
+                                        class="layui-btn layui-btn-primary layui-btn-sm">
+                                    <i class="layui-icon layui-icon-delete layuiadmin-button-btn"></i> Excel导出
+                                </button>
                             </label>
                         </div>
                     </form>
@@ -50,19 +55,18 @@
                 <div class="layui-card-header">礼品卡列表</div>
                 <div class="layui-card-body">
                     <div class="layui-btn-container">
-                        <a class="layui-btn layui-btn-sm" onclick="$eb.createModalFrame(this.innerText,'{:Url('create')}',{h:700,w:1100});">添加礼品卡</a>
+                        <a class="layui-btn layui-btn-sm"
+                           onclick="$eb.createModalFrame(this.innerText,'{:Url('create')}',{h:700,w:1100});">添加礼品卡</a>
                     </div>
                     <table class="layui-hide" id="List" lay-filter="List"></table>
-                    <script type="text/html" id="barDemo">
-                        <button type="button" class="layui-btn layui-btn-xs" onclick="dropdown(this)">操作<span class="caret"></span></button>
-                        <ul class="layui-nav-child layui-anim layui-anim-upbit">
-                            <li>
-                                <a href="javascript:void(0);" onclick="$eb.createModalFrame('{{d.name}}-编辑','{:Url('edit')}?id={{d.id}}')"><i class="layui-icon layui-icon-edit"></i> 编辑</a>
-                            </li>
-                            <li>
-                                <a href="javascript:void(0);" class="delstor" lay-event='delstor'><i class="layui-icon layui-icon-delete"></i> 删除</a>
-                            </li>
-                        </ul>
+                    <script id="store" type="text/html">
+                        送出门店:{{d.store}}<br/>
+                        核销门店:{{d.check_store}}
+                    </script>
+                    <script id="time" type="text/html">
+                        添加时间:{{d.add_time_text}}<br/>
+                        送出时间:{{d.send_time_text}}<br/>
+                        核销时间:{{d.check_time_text}}
                     </script>
                 </div>
             </div>
@@ -75,32 +79,32 @@
 <script src="{__FRAME_PATH}js/content.min.js?v=1.0.0"></script>
 <script>
     layList.form.render();
-    layList.tableList('List',"{:Url('get_list')}",function () {
+    layList.tableList('List', "{:Url('get_list')}", function () {
         return [
-            {field: 'id', title: 'ID', sort: true,width:'6%',event:'id'},
+            {field: 'id', title: 'ID', sort: true, width: '6%', event: 'id'},
             {field: 'name', title: '礼品卡标题'},
-            {field: 'code', title: '卡号',width:'20%'},
-            {field: 'price', title: '礼品卡价格',width:'6%'},
-            {field: 'store_award', title: '礼品卡奖金',width:'6%'},
-            {field: 'store', title: '门店',width:'10%'},
-            {field: 'time', title: '时间',width:'10%'},
-            {field: 'status', title: '状态',width:'6%',toolbar:"#status"},
-            {field: 'right', title: '操作',width:'10%', align: 'center', toolbar: '#barDemo'}
+            {field: 'code', title: '卡号', width: '20%'},
+            {field: 'price', title: '礼品卡价格', width: '6%'},
+            {field: 'store_award', title: '礼品卡奖金', width: '6%'},
+            {field: 'store', title: '门店', width: '10%', toolbar: "#store"},
+            {field: 'time', title: '时间', width: '10%', toolbar: "#time"},
+            {field: 'start_name', title: '状态', width: '6%'},
+            // {field: 'right', title: '操作',width:'10%', align: 'center', toolbar: '#barDemo'}
         ]
     });
-    layList.tool(function (event,data,obj) {
+    layList.tool(function (event, data, obj) {
         switch (event) {
             case 'delstor':
-                var url=layList.U({c:'ump.store_card',a:'delete',q:{id:data.id}});
-                $eb.$swal('delete',function(){
-                    $eb.axios.get(url).then(function(res){
-                        if(res.status == 200 && res.data.code == 200) {
-                            $eb.$swal('success',res.data.msg);
+                var url = layList.U({c: 'ump.store_card', a: 'delete', q: {id: data.id}});
+                $eb.$swal('delete', function () {
+                    $eb.axios.get(url).then(function (res) {
+                        if (res.status == 200 && res.data.code == 200) {
+                            $eb.$swal('success', res.data.msg);
                             obj.del();
-                        }else
+                        } else
                             return Promise.reject(res.data.msg || '删除失败')
-                    }).catch(function(err){
-                        $eb.$swal('error',err);
+                    }).catch(function (err) {
+                        $eb.$swal('error', err);
                     });
                 })
                 break;
@@ -109,61 +113,63 @@
     $(document).click(function (e) {
         $('.layui-nav-child').hide();
     })
-    function dropdown(that){
+
+    function dropdown(that) {
         var oEvent = arguments.callee.caller.arguments[0] || event;
         oEvent.stopPropagation();
         var offset = $(that).offset();
-        var top=offset.top-$(window).scrollTop();
+        var top = offset.top - $(window).scrollTop();
         var index = $(that).parents('tr').data('index');
         $('.layui-nav-child').each(function (key) {
             if (key != index) {
                 $(this).hide();
             }
         })
-        if($(document).height() < top+$(that).next('ul').height()){
+        if ($(document).height() < top + $(that).next('ul').height()) {
             $(that).next('ul').css({
                 'padding': 10,
-                'top': - ($(that).parent('td').height() / 2 + $(that).height() + $(that).next('ul').height()/2),
+                'top': -($(that).parent('td').height() / 2 + $(that).height() + $(that).next('ul').height() / 2),
                 'min-width': 'inherit',
                 'position': 'absolute'
             }).toggle();
-        }else{
+        } else {
             $(that).next('ul').css({
                 'padding': 10,
-                'top':$(that).parent('td').height() / 2 + $(that).height(),
+                'top': $(that).parent('td').height() / 2 + $(that).height(),
                 'min-width': 'inherit',
                 'position': 'absolute'
             }).toggle();
         }
     }
-    layList.search('search',function(where){
+
+    layList.search('search', function (where) {
         layList.reload(where);
         setTime();
     });
-    layList.search('export',function(where){
-        location.href=layList.U({c:'ump.store_card',a:'save_excel',q:{status:where.status,name:where.name}});
+    layList.search('export', function (where) {
+        location.href = layList.U({c: 'ump.store_card', a: 'save_excel', q: {status: where.status, name: where.name}});
     })
-    $('.js-group-btn').on('click',function(){
-        $('.js-group-btn').css({zIndex:1});
-        $(this).css({zIndex:2});
+    $('.js-group-btn').on('click', function () {
+        $('.js-group-btn').css({zIndex: 1});
+        $(this).css({zIndex: 2});
     });
-    $('#delstor').on('click',function(){
+    $('#delstor').on('click', function () {
         window.t = $(this);
-        var _this = $(this),url =_this.data('url');
-        $eb.$swal('delete',function(){
-            $eb.axios.get(url).then(function(res){
+        var _this = $(this), url = _this.data('url');
+        $eb.$swal('delete', function () {
+            $eb.axios.get(url).then(function (res) {
                 console.log(res);
-                if(res.status == 200 && res.data.code == 200) {
-                    $eb.$swal('success',res.data.msg);
+                if (res.status == 200 && res.data.code == 200) {
+                    $eb.$swal('success', res.data.msg);
                     _this.parents('tr').remove();
-                }else
+                } else
                     return Promise.reject(res.data.msg || '删除失败')
-            }).catch(function(err){
-                $eb.$swal('error',err);
+            }).catch(function (err) {
+                $eb.$swal('error', err);
             });
         })
     });
-    $(document).on('click',".open_image",function (e) {
+    $(document).on('click', ".open_image", function (e) {
         var image = $(this).data('image');
         $eb.openImage(image);
     });

+ 75 - 0
app/models/store/Card.php

@@ -6,6 +6,8 @@
 
 namespace app\models\store;
 
+use app\models\system\SystemStore;
+use crmeb\services\PHPExcelService;
 use crmeb\traits\ModelTrait;
 use crmeb\basic\BaseModel;
 
@@ -29,4 +31,77 @@ class Card extends BaseModel
     protected $name = 'card';
 
     use ModelTrait;
+
+    /**
+     * @param $where
+     * @return array
+     */
+    public static function systemPage($where)
+    {
+        $model = new self;
+        $model = $model->alias('s');
+        if ($where['status'] != '') $model = $model->where('s.status', $where['status']);
+        if ($where['name'] != '') $model = $model->where('s.name|s.code', 'LIKE', "%$where[name]%");
+        $model = $model->page(bcmul($where['page'], $where['limit'], 0), $where['limit']);
+        $model = $model->order('s.id desc');
+        return self::page($model, function ($item) {
+            if ($item['status'] == 0) {
+                $item['start_name'] = '待赠送';
+            } else if ($item['status'] == 1) {
+                $item['start_name'] = '待核销';
+            } else $item['start_name'] = '已使用';
+
+            $item['store'] = $item['store_id'] ? SystemStore::where('id', $item['store_id'])->value('name') . '/' . $item['store_id'] : '--';
+            $item['check_store'] = $item['check_store_id'] ? SystemStore::where('id', $item['check_store_id'])->value('name') . '/' . $item['check_store_id'] : '--';
+
+            $item['add_time_text'] = $item['add_time'] ? date('Y-m-d H:i:s', $item['add_time']) : '--';
+            $item['send_time_text'] = $item['send_time'] ? date('Y-m-d H:i:s', $item['send_time']) : '--';
+            $item['check_time_text'] = $item['check_time'] ? date('Y-m-d H:i:s', $item['check_time']) : '--';
+
+        }, $where, $where['limit']);
+    }
+
+    public static function SaveExcel($where)
+    {
+        $model = new self;
+        if ($where['status'] != '') $model = $model->where('s.status', $where['status']);
+        if ($where['name'] != '') $model = $model->where('s.name|s.code', 'LIKE', "%$where[name]%");
+        $list = $model->order('id desc')->select();
+        count($list) && $list = $list->toArray();
+        $excel = [];
+        foreach ($list as $item) {
+            if ($item['status'] == 0) {
+                $item['start_name'] = '待赠送';
+            } else if ($item['status'] == 1) {
+                $item['start_name'] = '待核销';
+            } else $item['start_name'] = '已使用';
+            $excel[] = [
+                $item['id'],
+                $item['name'],
+                $item['code'],
+                $item['password'],
+                $item['price'],
+                $item['store_award'],
+                $item['start_name'],
+            ];
+        }
+        PHPExcelService::setExcelHeader(['编号', '标题', '卡号', '密码', '价格', '奖金', '状态'])
+            ->setExcelTile('礼品卡导出', ' ', ' 生成时间:' . date('Y-m-d H:i:s', time()))
+            ->setExcelContent($excel)
+            ->ExcelSave();
+    }
+
+    public static function createCode()
+    {
+        do {
+            $str = date('Y') . '-' . substr(time(), 6, 4) . rand(1000, 9999) . rand(1000, 9999);
+        } while (self::be(['code' => $str]));
+        return $str;
+    }
+
+
+    public static function createPassword()
+    {
+        return substr(md5(md5('lpk.zccy.rand' . rand(100000, 999999)) . rand(0, 100000)), 0, 16);
+    }
 }