1557492053 3 gadi atpakaļ
vecāks
revīzija
24bdc3bcae

+ 124 - 2
app/admin/controller/Activity.php

@@ -4,11 +4,133 @@
 namespace app\admin\controller;
 
 use \app\BaseController;
+use app\common\model\ActivityModel;
+use app\common\model\ActivityProductModel;
+use think\App;
+use think\facade\View;
 
 class Activity extends BaseController
 {
 
+    private $activityModel;
+    private $activityProductModel;
+
+    public function __construct(App $app)
+    {
+        $this->activityModel = new ActivityModel();
+        $this->activityProductModel = new ActivityProductModel();
+        parent::__construct($app);
+    }
+
+    /**
+     * @return \think\response\View
+     * @throws \think\db\exception\DbException
+     */
     public function index() {
-        return '活动管理';
+        $list = $this->activityModel->findByPaginate($this->request->param());
+        View::assign([
+            'list' => $list
+        ]);
+        return view();
+    }
+
+    public function add() {
+        $params = $this->request->param();
+        if ($this->request->isAjax()) {
+            $activity_id =$this->activityModel->insert([
+                'title'  =>  $params['title'],
+                'start_time'  => strtotime($params['start_time']),
+                'end_time'  =>  strtotime($params['end_time']),
+            ],true);
+
+            $save = [];
+            if(isset($params['product_ids'])) {
+                for ($i = 0; $i < count($params['product_ids']);$i++) {
+                    array_push($save, [
+                        'activity_id' => $activity_id,
+                        'product_id' => $params['product_ids'][$i],
+                        'type' => $params['types'][$i],
+                        'discount' => $params['discounts'][$i],
+                        'reduced_price' => $params['reduced_prices'][$i],
+                    ]);
+                }
+            }
+            if(count($save) > 0) {
+                $this->activityProductModel->saveAll($save);
+            }
+            return $activity_id ? $this->ok(true) : $this->fail(false);
+        }
+        return view();
+    }
+
+    public function edit() {
+        $params = $this->request->param();
+        if(isset($params['id'])) {
+            $activity = $this->activityModel->findById($params['id']);
+               if ($this->request->isAjax()) {
+                   if ($activity) {
+                       $this->activityModel->where('id', $activity->id)->update([
+                           'title'  =>  $params['title'],
+                           'start_time'  => strtotime($params['start_time']),
+                           'end_time'  =>  strtotime($params['end_time']),
+                       ]);
+                       return $this->ok(true);
+                   }
+                   return $this->fail(lang("Fail"));
+               }
+            View::assign([
+                'activity' => $activity,
+            ]);
+           return \view();
+        }
+        return $this->fail(lang("Fail"));
+    }
+
+    public function delete_relation() {
+        $params = $this->request->param();
+        if(isset($params['id'])) {
+            $this->activityProductModel->deleteByIds([$params['id']]);
+        }
+        return $this->ok(true);
+    }
+
+    public function add_relation() {
+        $params = $this->request->param();
+        if(isset($params['id'])) {
+            $relation = $this->activityProductModel->doesItExist($params['product_id']);
+            if($relation && $relation->id != $params['id'])
+                return $this->fail("Fail to add. Data duplication");
+            $this->activityProductModel->save([
+                'activity_id' => $relation->id,
+                'product_id' => $params['product_id'],
+                'type' => $params['type'],
+                'discount' => $params['discount'],
+                'reduced_price' => $params['reduced_price'],
+            ]);
+        }
+        return $this->ok(true);
+    }
+
+    public function add_product($activity_product_id = null) {
+        $relation = [];
+        if($activity_product_id > 0) {
+            $relation = $this->activityProductModel->findById($activity_product_id);
+        }
+        View::assign('relation', $relation);
+        return view();
     }
-}
+
+}
+
+
+
+
+
+
+
+
+
+
+
+
+

+ 2 - 2
app/admin/controller/Admin.php

@@ -57,11 +57,11 @@ class Admin extends BaseController
     public function index(Request $request)
     {
         $params = $request->param();
-        $list = $this->model->findByPaginate();
-        $all_groups = $this->authGroupModel->fetchAllGroups();
         $format_params = [
             'group_id' => format_string($params['group_id'] ?? null),
         ];
+        $list = $this->model->findByPaginate($format_params);
+        $all_groups = $this->authGroupModel->fetchAllGroups();
         View::assign([
             'rules' => $this->rules,
             'list' => $list,

+ 27 - 8
app/admin/controller/Product.php

@@ -6,6 +6,7 @@ namespace app\admin\controller;
 use app\BaseController;
 use app\common\model\ProductCategoryModel;
 use app\common\model\ProductModel;
+use app\common\model\SupplierModel;
 use think\App;
 use think\facade\View;
 use think\Request;
@@ -15,12 +16,14 @@ class Product extends BaseController
 
     private $productModel;
     private $categoryModel;
+    private $supplierModel;
 
     public function __construct(App $app)
     {
         parent::__construct($app);
         $this->productModel = new ProductModel();
         $this->categoryModel = new ProductCategoryModel();
+        $this->supplierModel = new SupplierModel();
     }
 
     /**
@@ -52,20 +55,28 @@ class Product extends BaseController
             $category = $this->categoryModel->findById($params['category_id']);
             if(!$category)
                 return $this->fail(lang('Category does not exist'));
+            $supplier = $this->supplierModel->findById($params['supplier_id']);
+            if(!$supplier)
+                return $this->fail(lang('Company does not exist'));
             $res = $this->productModel->save([
                 'bar_code'  =>  $params['bar_code'],
                 'name'      =>  $params['name'] ?? null,
                 'image'     =>  $params['image'] ?? null,
                 'category_id'   =>  $params['category_id'] ?? null,
-                'category_name' =>  $category->name,
+                'supplier_id' =>  $supplier->id,
                 'is_serve'      =>  $params['is_serve'],
                 'purchase_price'=>  $params['purchase_price'],
-                'selling_price' =>  $params['selling_price']
+                'real_price' =>  $params['real_price'],
+                'lineate_price' => $params['lineate_price'],
+                'is_upload_numerology'  =>  $params['is_upload_numerology'],
+                'is_gather_annuity' =>  $params["is_gather_annuity"],
+                'annuity'   =>  $params["annuity"]
             ]);
             return $this->ok($res);
         }
         View::assign([
             'all_category' => recursion($this->categoryModel->findAll(),0),
+            "all_supplier" => $this->supplierModel->findAll()
         ]);
         return view();
     }
@@ -79,15 +90,22 @@ class Product extends BaseController
             $category = $this->categoryModel->findById($params['category_id']);
             if(!$category)
                 return $this->fail(lang('Category does not exist'));
+            $supplier = $this->supplierModel->findById($params['supplier_id'] ?? 0);
+            if(!$supplier)
+                return $this->fail(lang('Company does not exist'));
             $res = $this->productModel->where('id',$params['id'])->update([
                 'bar_code'  =>  $params['bar_code'],
-                'name'      =>  $params['name'] ?? null,
-                'image'     =>  $params['image'] ?? null,
-                'category_id'   =>  $params['category_id'] ?? null,
-                'category_name' =>  $category->name,
+                'name'      =>  isset($params['name']) ? $params['name'] : $product->name,
+                'image'     =>  isset($params['image']) ? $params['image'] : $product->image,
+                'category_id'   =>  $category->id,
+                'supplier_id' =>  $supplier->id,
                 'is_serve'      =>  (int)$params['is_serve'],
-                'purchase_price'=>  $params['purchase_price'],
-                'selling_price' =>  $params['selling_price'],
+                'purchase_price'=>  isset($params['purchase_price']) ? $params['purchase_price'] : $product->purchase_price,
+                'real_price' =>  isset($params['real_price']) && $params['real_price'] > 0 ? $params['real_price'] : $product->real_price,
+                'lineate_price' => isset($params['lineate_price']) && $params['lineate_price'] > 0 ? $params['lineate_price'] : $product->lineate_price,
+                'is_upload_numerology'  =>  $params['is_upload_numerology'],
+                'is_gather_annuity' =>  $params["is_gather_annuity"],
+                'annuity'   =>  $params["annuity"],
                 'update_time' => time()
             ]);
             return $this->ok($res);
@@ -95,6 +113,7 @@ class Product extends BaseController
         View::assign([
             'product'   =>  $product,
             'all_category' => recursion($this->categoryModel->findAll(),0),
+            'all_supplier' => $this->supplierModel->findAll()
         ]);
         return view();
     }

+ 69 - 0
app/admin/controller/Supplier.php

@@ -0,0 +1,69 @@
+<?php
+
+
+namespace app\admin\controller;
+
+use app\BaseController;
+use app\common\model\SupplierModel;
+use think\App;
+use think\facade\View;
+use think\Request;
+
+class Supplier extends BaseController
+{
+
+    private $model;
+
+
+    public function __construct(App $app)
+    {
+        $this->model = new SupplierModel();
+        parent::__construct($app);
+    }
+
+    public function index() {
+        View::assign([
+            "list" => $this->model->findByPaginate($this->request->param())
+        ]);
+        return view();
+    }
+
+    public function add() {
+        $params = $this->request->param();
+        if ($this->request->isAjax()) {
+            $res = $this->model->save([
+                'name'  =>  $params['name'],
+                'introduce'  =>  $params['introduce']
+            ]);
+            return $res ? $this->ok(true) : $this->fail(false);
+        }
+        return view();
+    }
+
+    public function edit() {
+        $params = $this->request->param();
+        $supplier = $this->model->findById($params['id']);
+        if($this->request->isAjax()) {
+            $res = $this->model->where('id', $params['id'])->update([
+                'name'  =>  $params['name'],
+                'introduce'  =>  $params['introduce'],
+                'update_time'   => time()
+            ]);
+            return $res ? $this->ok(true) : $this->fail(false);
+        }
+        View::assign('supplier',$supplier);
+        return view();
+    }
+
+    public function delete(Request $request) {
+        $params = $request->param();
+        if(!isset($params['ids']))
+            return $this->fail(lang("Please select the data you want to delete"));
+        $this->model->deleteByIds(explode(',', $params['ids']));
+        return $this->ok(true);
+    }
+
+
+
+
+}

+ 18 - 2
app/admin/lang/zh-cn.php

@@ -134,8 +134,24 @@ return [
     "Department"    =>  "部门",
     "Is login backstage" => "是否允许登录后台",
     "Not available" =>  "暂无",
-
-
+    "Real price"    =>  "真实卖价",
+    "Lineate price" =>  "划线价",
+    "Is upload numerology" => "是否需要上传命理报告",
+    "Is gather annuity" =>  "是否收取年费",
+    "Annuity"   =>  "年费",
+    "Company Name"  =>  "公司名称",
+    "Company"  =>   "公司",
+    "Company does not exist" => "公司不存在!",
+    "company_management"    => "公司管理",
+    "Introduce" =>  "介绍",
+    "Title" =>  "标题",
+    "Start Time" => "开始时间",
+    "End Time" => "结束时间",
+    "Bind product"  =>  "绑定商品",
+    "Checked"   =>  "选中",
+    "Discount"  =>  "折扣",
+    "Reduced price" =>  "减免价",
+    "Enter the product name or number and press Enter to select the product" => "输入商品名称或者编号后按回车选择商品"
 
 ];
 

+ 131 - 0
app/admin/view/activity/add.html

@@ -0,0 +1,131 @@
+{include file='common/_js_css'}
+
+
+<div class="lyear-layout-web">
+    <div class="lyear-layout-container">
+        <!--页面主要内容-->
+        <main>
+            <div class="container-fluid">
+                <div class="row">
+                    <div class="col-lg-12">
+                        <div class="card">
+                            <div class="card-body">
+                                <form class="layui-form">
+
+                                    <div class="layui-form-item">
+                                        <label class="layui-form-label">{:lang("Title")}</label>
+                                        <div class="layui-input-block">
+                                            <input type="text" name="title" lay-verify="required" lay-reqtext="{:lang('Please fill in')}" autocomplete="off" class="layui-input">
+                                        </div>
+                                    </div>
+
+                                    <div class="layui-form-item">
+                                        <label class="layui-form-label">{:lang("Start Time")}</label>
+                                        <div class="layui-input-block">
+                                            <input type="text" name="start_time" id="start_time" lay-verify="datetime" placeholder="yyyy-MM-dd" autocomplete="off" class="layui-input" lay-key="1">
+                                        </div>
+                                    </div>
+
+                                    <div class="layui-form-item">
+                                        <label class="layui-form-label">{:lang("end Time")}</label>
+                                        <div class="layui-input-block">
+                                            <input type="text" name="end_time" id="end_time" lay-verify="datetime" placeholder="yyyy-MM-dd" autocomplete="off" class="layui-input" lay-key="1">
+                                        </div>
+                                    </div>
+
+                                    <div class="layui-form-item">
+                                        <label class="layui-form-label">{:lang('Product')}</label>
+                                        <div class="layui-input-block">
+                                            <a class="btn btn-primary m-r-5" href="#!" onclick="add('{:url(\'admin/activity/add_product\')}')"><i class="mdi mdi-plus"></i> {:lang('add')}{:lang("Product")}</a>
+                                        </div>
+                                    </div>
+
+                                    <div class="layui-form-item">
+                                        <label class="layui-form-label">{:lang("Checked")}{:lang("Product")}</label>
+                                        <div class="layui-input-block">
+                                            <div class="table-responsive">
+                                                <table class="table table-bordered">
+                                                    <thead>
+                                                    <tr>
+                                                        <th>{:lang("Product")} {:lang("ID")}</th>
+                                                        <th>{:lang("Product")}</th>
+                                                        <th>{:lang('Type')}</th>
+                                                        <th>{:lang('Discount')}(1~100)</th>
+                                                        <th>{:lang('Reduced price')}</th>
+                                                        <th>{:lang('operation')}</th>
+                                                    </tr>
+                                                    </thead>
+                                                    <tbody id="product_table">
+                                                    </tbody>
+                                                </table>
+                                            </div>
+                                        </div>
+                                    </div>
+
+                                    <div class="layui-form-item">
+                                        <div class="layui-input-block">
+                                            <button type="button" class="layui-btn" lay-submit="" lay-filter="caviar_submit_btn">{:lang('Submit')}</button>
+                                            <button type="reset" class="layui-btn layui-btn-primary">{:lang("Reset")}</button>
+                                        </div>
+                                    </div>
+                                </form>
+
+                            </div>
+                        </div>
+                    </div>
+
+                </div>
+
+            </div>
+        </main>
+        <!--End 页面主要内容-->
+    </div>
+</div>
+
+
+<script>
+
+    function advanced(data) {
+        $("#product_table").append(`<tr id="${data.product_id}"><td><input type="text" class="layui-input"  name="product_ids[]" value="${data.product_id}" disabled> <span hidden><input type="text" class="layui-input" name="types[]" value="${data.type}" hidden></span></td>
+                                                        <td>${data.product_name}</td>
+                                                        <td><input disabled type="text" class="layui-input" value=${data.type ? '{:lang("Discount")}':'{:lang("Reduced price")}'}></td>
+                                                        <td><input disabled type="text" class="layui-input" name="discounts[]" value=${data.discount}></td>
+                                                        <td><input disabled type="text" class="layui-input" name="reduced_prices[]" value=${data.reduced_price}></td>
+                                                        <td>
+                                                            <div class="btn-group">
+                                                                <a class="btn btn-xs btn-default" href="#!" title="{:lang('delete')}" data-toggle="tooltip" onclick="del(${data.product_id})"><i class="mdi mdi-window-close"></i></a>
+                                                            </div>
+                                                        </td>
+                                                    </tr>`)
+
+    }
+    window.advanced = advanced;
+
+    function del(id) {
+        $(`#${id}`).remove();
+    }
+
+
+    layui.use(['laydate','form'], () => {
+
+        const form = layui.form;
+        const laydate = layui.laydate;
+        form.on('submit(caviar_submit_btn)', (data) =>{
+            const response = request('/admin/activity/add',data.field)
+            response.then((res) => {
+                res.code === 200 ? layer.msg("{:lang('Succeed')}", {icon: 1,time:500},() => {
+                    parent.location.reload();
+                }) : layer.msg(res.message,{icon: 5})
+            })
+            return false;
+        });
+        laydate.render({
+            elem: '#start_time',
+            type: 'datetime'
+        });
+        laydate.render({
+            elem: '#end_time',
+            type: 'datetime'
+        });
+    });
+</script>

+ 152 - 0
app/admin/view/activity/add_product.html

@@ -0,0 +1,152 @@
+{include file='common/_js_css'}
+
+<div class="lyear-layout-web">
+    <div class="lyear-layout-container">
+        <!--页面主要内容-->
+        <main>
+            <div class="container-fluid">
+                <div class="row">
+                    <div class="col-lg-12">
+                        <div class="card">
+                            <div class="card-body">
+                                <form class="layui-form">
+
+                                    <div class="layui-form-item">
+                                        <label class="layui-form-label">{:lang('Product')}</label>
+                                        <div class="layui-input-block unfold_product">
+                                            <input type="text" id="product_id" class="layui-input"
+                                                   placeholder="{:lang('Enter the product name or number and press Enter to select the product')}" style="position:absolute;z-index:2;width:88%;" value="" autocomplete="off">
+                                            <select id="product_select" placeholder="1" name="product_id" lay-verify="required" lay-filter="product_select" >
+                                                <option value="">{:lang('Enter the product name or number and press Enter to select the product')}</option>
+                                            </select>
+                                        </div>
+                                    </div>
+                                    <input type="text" id="product_name" name="product_name" hidden>
+
+                                    <div class="layui-form-item">
+                                        <label class="layui-form-label">{:lang("Type")}</label>
+                                        <div class="layui-input-block">
+                                            <input type="radio" name="type" value="1" title="{:lang('Reduced price')}" >
+                                            <input type="radio" name="type" value="2" title="{:lang('Discount')}" checked>
+                                        </div>
+                                    </div>
+                                    <div class="layui-form-item">
+                                        <label class="layui-form-label">{:lang("Discount")}</label>
+                                        <div class="layui-input-block">
+                                            <input type="number" name="discount" value="0" lay-verify="required" lay-reqtext="{:lang('Please fill in')}" autocomplete="off" class="layui-input">
+                                        </div>
+                                    </div>
+                                    <div class="layui-form-item">
+                                        <label class="layui-form-label">{:lang("Reduced price")}</label>
+                                        <div class="layui-input-block">
+                                            <input type="number" value="0" name="reduced_price" lay-verify="required" lay-reqtext="{:lang('Please fill in')}" autocomplete="off" class="layui-input">
+                                        </div>
+                                    </div>
+                                    <div class="layui-form-item">
+                                        <div class="layui-input-block">
+                                            <button type="button" class="layui-btn" lay-submit="" lay-filter="caviar_submit_btn">{:lang('Submit')}</button>
+                                            <button type="reset" class="layui-btn layui-btn-primary">{:lang("Reset")}</button>
+                                        </div>
+                                    </div>
+                                </form>
+
+                            </div>
+                        </div>
+                    </div>
+
+                </div>
+
+            </div>
+        </main>
+    </div>
+</div>
+<script>
+
+    // 用于缓存下拉获取的数据
+    let dropData
+
+    // 请求返回数据
+    function getData(str){
+        return new Promise(resolve=>{
+            request("{:url('admin/product/findProducts')}", {"text": str}).then((data) => {
+                if (data.code === 200) {
+                    resolve(data.data.map(v => {
+                        return {
+                            value: v.id,
+                            text: `【${v.bar_code}】 ${v.name}`
+                        }
+                    }))
+                }
+            })
+        })
+    }
+
+    $("#product_id").on("keyup", async function(e){
+        if(e.which=='13'){
+            dropData=await getData($(this).val())
+            innitSelect("#product_select", dropData)
+            let form = layui.form;
+            form.render()
+            $(".layui-form-select").addClass("layui-form-selected")
+        }
+    })
+
+    // 渲染下拉框的数据
+    function innitSelect(name,data){
+        let html=''
+        if(data && data instanceof Array){
+            data.forEach(item=>{
+                html+="<option value="+item.value+">"+item.text+"</option>"
+            })
+        }
+        $(name).html(html)
+    }
+    var index = parent.layer.getFrameIndex(window.name);
+
+    layui.use(['form'], () => {
+        const form = layui.form;
+        // 监听下拉框改变事件,修改输入框中的内容
+        form.on("select(product_select)",function(data){
+            let value = data.value
+            let selectObj=dropData.filter(item=> {
+                return item.value == value
+            })
+            $("#product_id").val(selectObj[0].text);
+            $("#product_name").val(selectObj[0].text);
+        })
+
+        form.on('submit(caviar_submit_btn)', (data) =>{
+            //获取父类函数
+            parent.advanced(data.field);
+            parent.layer.close(index);//关闭当前页
+            return false;
+        });
+    });
+</script>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

+ 153 - 0
app/admin/view/activity/edit.html

@@ -0,0 +1,153 @@
+{include file='common/_js_css'}
+
+
+<div class="lyear-layout-web">
+    <div class="lyear-layout-container">
+        <!--页面主要内容-->
+        <main>
+            <div class="container-fluid">
+                <div class="row">
+                    <div class="col-lg-12">
+                        <div class="card">
+                            <div class="card-body">
+                                <form class="layui-form">
+                                    <input name="id" value="{$activity.id}" hidden>
+                                    <div class="layui-form-item">
+                                        <label class="layui-form-label">{:lang("Title")}</label>
+                                        <div class="layui-input-block">
+                                            <input type="text" name="title" value="{$activity.title}" lay-verify="required" lay-reqtext="{:lang('Please fill in')}" autocomplete="off" class="layui-input">
+                                        </div>
+                                    </div>
+
+                                    <div class="layui-form-item">
+                                        <label class="layui-form-label">{:lang("Start Time")}</label>
+                                        <div class="layui-input-block">
+                                            <input type="text" name="start_time" value="{:date('Y-m-d H:i:s',$activity.start_time)}" id="start_time" lay-verify="datetime" placeholder="yyyy-MM-dd" autocomplete="off" class="layui-input" lay-key="1">
+                                        </div>
+                                    </div>
+
+                                    <div class="layui-form-item">
+                                        <label class="layui-form-label">{:lang("end Time")}</label>
+                                        <div class="layui-input-block">
+                                            <input type="text" name="end_time" id="end_time" value="{:date('Y-m-d H:i:s',$activity.end_time)}" lay-verify="datetime" placeholder="yyyy-MM-dd" autocomplete="off" class="layui-input" lay-key="1">
+                                        </div>
+                                    </div>
+
+                                    <div class="layui-form-item">
+                                        <label class="layui-form-label">{:lang('Product')}</label>
+                                        <div class="layui-input-block">
+                                            <a class="btn btn-primary m-r-5" href="#!" onclick="add('{:url(\'admin/activity/add_product\')}')"><i class="mdi mdi-plus"></i> {:lang('add')}{:lang("Product")}</a>
+                                        </div>
+                                    </div>
+
+                                    <div class="layui-form-item">
+                                        <label class="layui-form-label">{:lang("Checked")}{:lang("Product")}</label>
+                                        <div class="layui-input-block">
+                                            <div class="table-responsive">
+                                                <table class="table table-bordered">
+                                                    <thead>
+                                                    <tr>
+                                                        <th>{:lang("Product")} {:lang("ID")}</th>
+                                                        <th>{:lang("Product")}</th>
+                                                        <th>{:lang('Type')}</th>
+                                                        <th>{:lang('Discount')}(1~100)</th>
+                                                        <th>{:lang('Reduced price')}</th>
+                                                        <th>{:lang('operation')}</th>
+                                                    </tr>
+                                                    </thead>
+                                                    <tbody id="product_table">
+                                                    {volist name="$activity.relation" id="data"}
+                                                    <tr id="{$data.id}">
+                                                        <input type="text" name="product_ids[]" value="{$data.product_id}" hidden>
+                                                        <input type="text" name="types[]" value="{$data.type}" hidden>
+                                                        <td>{$data.product_id}</td>
+                                                        <td>【{$data.product.bar_code}】{$data.product.name}</td>
+                                                        <td><input disabled type="text" class="layui-input" name="" value={if $data.type == 1} {:lang("Discount")} {else /} {:lang("Reduced price")}{/if}></td>
+                                                        <td><input disabled type="text" class="layui-input" name="discounts[]" value={$data.discount}></td>
+                                                        <td><input disabled type="text" class="layui-input" name="reduced_prices[]" value={$data.reduced_price}></td>
+                                                        <td>
+                                                            <div class="btn-group">
+                                                                <a class="btn btn-xs btn-default" href="#!" title="{:lang('delete')}" data-toggle="tooltip" onclick="del({$data.id})"><i class="mdi mdi-window-close"></i></a>
+                                                            </div>
+                                                        </td>
+                                                    </tr>
+                                                    {/volist}
+                                                    </tbody>
+                                                </table>
+                                            </div>
+                                        </div>
+                                    </div>
+
+                                    <div class="layui-form-item">
+                                        <div class="layui-input-block">
+                                            <button type="button" class="layui-btn" lay-submit="" lay-filter="caviar_submit_btn">{:lang('Submit')}</button>
+                                            <button type="reset" class="layui-btn layui-btn-primary">{:lang("Reset")}</button>
+                                        </div>
+                                    </div>
+                                </form>
+
+                            </div>
+                        </div>
+                    </div>
+
+                </div>
+
+            </div>
+        </main>
+        <!--End 页面主要内容-->
+    </div>
+</div>
+
+
+<script>
+
+    function advanced(data) {
+        $("#product_table").append(`<tr id="${data.product_id}">
+                                                        <td hidden><input type="text" class="layui-input" name="product_ids[]" value="${data.product_id}"></td>
+                                                        <td>${data.product_name}</td>
+                                                        <td><input disabled type="text" class="layui-input" name="types[]" value=${data.type ? '{:lang("Discount")}':'{:lang("Reduced price")}'}></td>
+                                                        <td><input disabled type="text" class="layui-input" name="discounts[]" value=${data.discount}></td>
+                                                        <td><input disabled type="text" class="layui-input" name="reduced_prices[]" value=${data.reduced_price}></td>
+                                                        <td>
+                                                            <div class="btn-group">
+                                                                <a class="btn btn-xs btn-default" href="#!" title="{:lang('delete')}" data-toggle="tooltip" onclick="del(${data.product_id})"><i class="mdi mdi-window-close"></i></a>
+                                                            </div>
+                                                        </td>
+                                                    </tr>`)
+
+    }
+    window.advanced = advanced;
+    var index = parent.layer.getFrameIndex(window.name); //先得到当前iframe层的索引
+    function del(id) {
+        const response = request('/admin/activity/delete_relation',{id})
+        response.then((res) => {
+            res.code === 200 ? layer.msg("{:lang('Succeed')}", {icon: 1,time:500},() => {
+                $(`#${id}`).remove();
+                parent.layer.close(index); //再执行关闭
+            }) : layer.msg(res.message,{icon: 5})
+        })
+
+    }
+
+    layui.use(['laydate','form'], () => {
+        const form = layui.form;
+        const laydate = layui.laydate;
+        form.on('submit(caviar_submit_btn)', (data) =>{
+            const response = request('/admin/activity/add',data.field)
+            response.then((res) => {
+                res.code === 200 ? layer.msg("{:lang('Succeed')}", {icon: 1,time:500},() => {
+                    parent.location.reload();
+                }) : layer.msg(res.message,{icon: 5})
+            })
+            return false;
+        });
+        laydate.render({
+            elem: '#start_time',
+            type: 'datetime'
+        });
+        laydate.render({
+            elem: '#end_time',
+            type: 'datetime'
+        });
+    });
+</script>

+ 113 - 0
app/admin/view/activity/index.html

@@ -0,0 +1,113 @@
+{include file='common/_js_css'}
+
+<link href="__CSS__/common.css" rel="stylesheet">
+<div class="container-fluid">
+    <div class="row">
+        <div class="col-lg-12">
+            <!--            <div class="card" id="select_card_caviar"  style="display: none">-->
+            <!--                <div class="card-header">{$Think.lang.condition}</div>-->
+            <!--                <div class="card-body">-->
+            <!--                    <form action="{:url('admin/activity/index')}" method="post" class="form-horizontal form-search">-->
+            <!--                        <div class="row">-->
+            <!--                            <div class="col-md-4">-->
+            <!--                                <div class="form-group">-->
+            <!--                                    <label class="w-120 pull-left control-label">{:lang("Store")}</label>-->
+            <!--                                    <div class="pull-left w-120-calc">-->
+            <!--                                        <select class="form-control pull-left" name="store_id">-->
+            <!--                                            <option value="0" selected>{:lang("Unknown")}</option>-->
+            <!--                                        </select>-->
+            <!--                                    </div>-->
+            <!--                                </div>-->
+            <!--                            </div>-->
+            <!--                            <div class="col-md-4">-->
+            <!--                                <div class="form-group">-->
+            <!--                                    <label class="w-120 pull-left control-label"></label>-->
+            <!--                                    <div class="pull-left w-120-calc">-->
+            <!--                                        <button class="btn btn-success m-r-5" id="caviar_send_btn" type="submit" href="#">{:lang('search')}</button>-->
+            <!--                                    </div>-->
+            <!--                                </div>-->
+            <!--                            </div>-->
+            <!--                        </div>-->
+
+            <!--                    </form>-->
+            <!--                </div>-->
+            <!--            </div>-->
+            <div class="card">
+                <div class="card-toolbar clearfix">
+                    <div class="toolbar-btn-action">
+                        <!--                        <a class="btn btn-success m-r-5" id="caviar_search_btn" href="#!" onclick="select_card_switch()">{$Think.lang.unfold_search}</a>-->
+                        <a class="btn btn-primary m-r-5" href="#!" onclick="add('{:url(\'admin/activity/add\')}')"><i class="mdi mdi-plus"></i> {:lang('add')}</a>
+                        <a class="btn btn-danger" href="#!" onclick="
+                            caviar_checkbox_delete('{:url(\'admin/activity/delete\')}', ['{:lang(\'Check at least one box\')}','{:lang(\'Succeed\')}'],'{:lang(\'Warn\')}','{:lang(\'Are you sure you want to delete the selected data\')}',['{:lang(\'Confirm\')}'])"
+                        ><i class="mdi mdi-window-close"></i> {:lang('delete')}</a>
+                    </div>
+                </div>
+                <div class="card-body">
+                    <div class="table-responsive">
+                        <table class="table table-bordered">
+                            <thead>
+                            <tr>
+                                <th>
+                                    <label class="lyear-checkbox checkbox-primary">
+                                        <input type="checkbox" id="check-all" onclick="checkbox()"><span></span>
+                                    </label>
+                                </th>
+                                <th>{:lang("ID")}</th>
+                                <th>{:lang('Title')}</th>
+                                <th>{:lang('Start Time')}</th>
+                                <th>{:lang('End Time')}</th>
+                                <th>{:lang('Bind product')}</th>
+                                <th>{:lang('update_time')}</th>
+                                <th>{:lang('operation')}</th>
+                            </tr>
+                            </thead>
+                            <tbody>
+                            {volist name="list" id="item"}
+                            <tr>
+                                <td>
+                                    <label class="lyear-checkbox checkbox-primary">
+                                        <input class="checkbox_caviar" type="checkbox" name="ids[]" value="{$item.id}"><span></span>
+                                    </label>
+                                </td>
+                                <td>{$item.id}</td>
+                                <td>{$item.title}</td>
+                                <td>{:date('Y-m-d H:i:s', $item.start_time)}</td>
+                                <td>{:date('Y-m-d H:i:s', $item.end_time)}</td>
+                                <td>
+                                    {volist name="$item.relation" id="relation"}
+                                    <span>
+                                        {$relation.product.bar_code} - {$relation.product.name} <br/>
+                                    </span>
+                                    {/volist}
+                                </td>
+                                <td>{$item.update_time}</td>
+                                <td>
+                                    <div class="btn-group">
+                                        <a class="btn btn-xs btn-default" href="#!" title="{:lang('select')}" data-toggle="tooltip" onclick='view("/admin/activity/edit?id={$item.id}","{:lang(\"Info\")}")'><i class="mdi mdi-eye"></i></a>
+                                        <a class="btn btn-xs btn-default" href="#!" title="{:lang('delete')}" data-toggle="tooltip" onclick='
+                                           deletingASingle("{:url(\"admin/activity/delete\")}","{$item.id}",["{:lang(\"Succeed\")}"],"{:lang(\"Warn\")}","{:lang(\"Are you sure you want to delete the selected data\")}",["{:lang(\"Confirm\")}"])'
+                                        ><i class="mdi mdi-window-close"></i></a>
+                                    </div>
+                                </td>
+                            </tr>
+                            {/volist}
+                            </tbody>
+                        </table>
+                    </div>
+                    {$list|raw}
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+
+<style>
+
+</style>
+
+<script type="text/javascript">
+    // if(check_params([]))
+    //     $('#select_card_caviar').css('display','block');
+</script>
+
+

+ 44 - 4
app/admin/view/product/add.html

@@ -67,16 +67,57 @@
                   </div>
 
                   <div class="layui-form-item">
+                    <label class="layui-form-label">{:lang('Company')}</label>
+                    <div class="layui-input-block">
+                      <select name="supplier_id" lay-filter="required">
+                        {volist name="all_supplier" id="item"}
+                        <option value="{$item.id}" >{$item.name}</option>
+                        {/volist}
+                      </select>
+                    </div>
+                  </div>
+
+                  <div class="layui-form-item">
                     <label class="layui-form-label">{:lang("Purchase price")}</label>
                     <div class="layui-input-block">
-                      <input type="number" name="purchase_price" lay-verify="required" lay-reqtext="{:lang('Please fill in')}" autocomplete="off" class="layui-input">
+                      <input type="number" name="purchase_price" value="0.00" lay-verify="required|Min:0" lay-reqtext="{:lang('Please fill in')}" autocomplete="off" class="layui-input">
+                    </div>
+                  </div>
+
+                  <div class="layui-form-item">
+                    <label class="layui-form-label">{:lang("Real price")}</label>
+                    <div class="layui-input-block">
+                      <input type="number" name="real_price" value="0.00" lay-verify="required" lay-reqtext="{:lang('Please fill in')}" autocomplete="off" class="layui-input">
+                    </div>
+                  </div>
+
+                  <div class="layui-form-item">
+                    <label class="layui-form-label">{:lang("Lineate price")}</label>
+                    <div class="layui-input-block">
+                      <input type="number" value="0.00" name="lineate_price" lay-verify="required" lay-reqtext="{:lang('Please fill in')}" autocomplete="off" class="layui-input">
+                    </div>
+                  </div>
+
+                  <div class="layui-form-item">
+                    <label class="layui-form-label">{:lang("Is upload numerology")}</label>
+                    <div class="layui-input-block">
+                      <input type="radio" name="is_upload_numerology" value="0" title="{:lang('No')}" checked>
+                      <input type="radio" name="is_upload_numerology" value="1" title="{:lang('Yes')}">
+                    </div>
+                  </div>
+
+                  <div class="layui-form-item">
+                    <label class="layui-form-label">{:lang("Is gather annuity")}</label>
+                    <div class="layui-input-block">
+                      <input type="radio" name="is_gather_annuity" value="0" title="{:lang('No')}" checked>
+                      <input type="radio" name="is_gather_annuity" value="1" title="{:lang('Yes')}">
                     </div>
                   </div>
 
                   <div class="layui-form-item">
-                    <label class="layui-form-label">{:lang("Selling price")}</label>
+                    <label class="layui-form-label">{:lang("Annuity")}</label>
                     <div class="layui-input-block">
-                      <input type="number" name="selling_price" lay-verify="required" lay-reqtext="{:lang('Please fill in')}" autocomplete="off" class="layui-input">
+                      <input type="number" name="annuity" value="0" lay-verify="required" lay-reqtext="{:lang('Please fill in')}" autocomplete="off" class="layui-input">
                     </div>
                   </div>
 
@@ -96,7 +137,6 @@
 
       </div>
     </main>
-    <!--End 页面主要内容-->
   </div>
 </div>
 <script>

+ 41 - 7
app/admin/view/product/edit.html

@@ -69,6 +69,17 @@
                   </div>
 
                   <div class="layui-form-item">
+                      <label class="layui-form-label">{:lang('Company')}</label>
+                      <div class="layui-input-block">
+                          <select name="supplier_id" lay-filter="required">
+                              {volist name="all_supplier" id="item"}
+                              <option value="{$item.id}" {if $product.supplier_id == $item.id} selected {/if} >{$item.name}</option>
+                              {/volist}
+                          </select>
+                      </div>
+                  </div>
+
+                  <div class="layui-form-item">
                     <label class="layui-form-label">{:lang("Purchase price")}</label>
                     <div class="layui-input-block">
                       <input type="number" name="purchase_price" value="{$product.purchase_price ?? 0}" lay-verify="required" lay-reqtext="{:lang('Please fill in')}" autocomplete="off" class="layui-input">
@@ -76,17 +87,40 @@
                   </div>
 
                   <div class="layui-form-item">
-                    <label class="layui-form-label">{:lang("Selling price")}</label>
-                    <div class="layui-input-block">
-                      <input type="number" name="selling_price" value="{$product.selling_price ?? 0}" lay-verify="required" lay-reqtext="{:lang('Please fill in')}" autocomplete="off" class="layui-input">
+                      <label class="layui-form-label">{:lang("Real price")}</label>
+                      <div class="layui-input-block">
+                      <input type="number" name="real_price" value="{$product.real_price ?? 0}" lay-verify="required" lay-reqtext="{:lang('Please fill in')}" autocomplete="off" class="layui-input">
                     </div>
                   </div>
 
                   <div class="layui-form-item">
-                    <label class="layui-form-label">{:lang("Now total stock")}</label>
-                    <div class="layui-input-block">
-                      <input type="number" disabled value="{$product.now_total_stock ?? 0}" class="layui-input">
-                    </div>
+                      <label class="layui-form-label">{:lang("Lineate price")}</label>
+                      <div class="layui-input-block">
+                          <input type="number" value="{$product.lineate_price}" name="lineate_price" lay-verify="required" lay-reqtext="{:lang('Please fill in')}" autocomplete="off" class="layui-input">
+                      </div>
+                  </div>
+
+                  <div class="layui-form-item">
+                      <label class="layui-form-label">{:lang("Is upload numerology")}</label>
+                      <div class="layui-input-block">
+                          <input type="radio" name="is_upload_numerology" value="0" title="{:lang('No')}" {if $product.is_upload_numerology == 0} checked {/}>
+                          <input type="radio" name="is_upload_numerology" value="1" title="{:lang('Yes')}" {if $product.is_upload_numerology == 1} checked {/}>
+                      </div>
+                  </div>
+
+                  <div class="layui-form-item">
+                      <label class="layui-form-label">{:lang("Is gather annuity")}</label>
+                      <div class="layui-input-block">
+                          <input type="radio" name="is_gather_annuity" value="0" title="{:lang('No')}" {if $product.is_gather_annuity == 0} checked {/}>
+                          <input type="radio" name="is_gather_annuity" value="1" title="{:lang('Yes')}" {if $product.is_gather_annuity == 0} checked {/}>
+                      </div>
+                  </div>
+
+                  <div class="layui-form-item">
+                      <label class="layui-form-label">{:lang("Annuity")}</label>
+                      <div class="layui-input-block">
+                          <input type="number" name="annuity" value="{$product.annuity}" lay-verify="required" lay-reqtext="{:lang('Please fill in')}" autocomplete="off" class="layui-input">
+                      </div>
                   </div>
 
                   <div class="layui-form-item">

+ 13 - 5
app/admin/view/product/index.html

@@ -85,10 +85,14 @@
                                 <th>{:lang('Name')}</th>
                                 <th>{:lang('Image')}</th>
                                 <th>{:lang('Category Name')}</th>
+                                <th>{:lang('Company Name')}</th>
                                 <th>{:lang('Is Serve')}</th>
                                 <th>{:lang('Purchase Price')}</th>
-                                <th>{:lang('Selling Price')}</th>
-                                <th>{:lang('Now Total Stock')}</th>
+                                <th>{:lang('Real price')}</th>
+                                <th>{:lang('Lineate price')}</th>
+                                <th>{:lang('Is upload numerology')}</th>
+                                <th>{:lang('Is gather annuity')}</th>
+                                <th>{:lang('Annuity')}</th>
                                 <th>{:lang('create_time')}</th>
                                 <th>{:lang('operation')}</th>
                             </tr>
@@ -105,11 +109,15 @@
                                 <td>{$item.bar_code}</td>
                                 <td>{$item.name}</td>
                                 <td><img class="small-img" src="{$item.image}" onclick="image_magnify()" ></td>
-                                <td>{$item.category_name}</td>
+                                <td>{$item.category.name}</td>
+                                <td>{$item.supplier.name}</td>
                                 <td>{if $item.is_serve == 1}{:lang("Yes")}{else /}{:lang("No")}{/if}</td>
                                 <td>{$item.purchase_price}</td>
-                                <td>{$item.selling_price}</td>
-                                <td>{$item.now_total_stock}</td>
+                                <td>{$item.real_price}</td>
+                                <td>{$item.lineate_price}</td>
+                                <td>{if $item.is_upload_numerology == 1} {:lang("Yes")}{else /}{:lang("No")}{/if}</td>
+                                <td>{if $item.is_gather_annuity == 1} {:lang("Yes")}{else /}{:lang("No")}{/if}</td>
+                                <td>{if $item.is_gather_annuity == 1}{$item.annuity}{else /}/{/if}</td>
                                 <td>{$item.create_time}</td>
                                 <td>
                                     <div class="btn-group">

+ 2 - 2
app/admin/view/stock/add.html

@@ -26,9 +26,9 @@
                                         <label class="layui-form-label">{:lang('Product')}</label>
                                         <div class="layui-input-block unfold_product">
                                             <input type="text" name="product_id" id="product_id" class="layui-input"
-                                                   placeholder="搜索" style="position:absolute;z-index:2;width:88%;" value="" autocomplete="off">
+                                                   placeholder="{:lang('Enter the product name or number and press Enter to select the product')}" style="position:absolute;z-index:2;width:88%;" value="" autocomplete="off">
                                             <select id="product_select" placeholder="1" name="product_id" lay-verify="required" lay-filter="product_select" >
-                                                <option value="">请输入名称搜索</option>
+                                                <option value="">{:lang('Enter the product name or number and press Enter to select the product')}</option>
                                             </select>
                                         </div>
                                     </div>

+ 1 - 1
app/admin/view/stock/edit.html

@@ -26,7 +26,7 @@
                                         <label class="layui-form-label">{:lang('Product')}</label>
                                         <div class="layui-input-block unfold_product">
                                             <input disabled type="text" name="product_id" id="product_id" class="layui-input"
-                                                   placeholder="{:lang('Search')}" style="position:absolute;z-index:2;width:88%;" value="{$relation.product_name}" autocomplete="off">
+                                                   placeholder="{:lang('Enter the product name or number and press Enter to select the product')}" style="position:absolute;z-index:2;width:88%;" value="{$relation.product_name}" autocomplete="off">
                                             <select id="product_select" placeholder="1" name="product_id" lay-verify="required" lay-filter="product_select" >
                                                 <option value="{$relation.product_id}" selected>【{$relation.product_id}】 {$relation.product_name}</option>
                                             </select>

+ 59 - 0
app/admin/view/supplier/add.html

@@ -0,0 +1,59 @@
+{include file='common/_js_css'}
+
+<div class="lyear-layout-web">
+    <div class="lyear-layout-container">
+        <!--页面主要内容-->
+        <main>
+            <div class="container-fluid">
+                <div class="row">
+                    <div class="col-lg-12">
+                        <div class="card">
+                            <div class="card-body">
+                                <form class="layui-form">
+                                    <div class="layui-form-item">
+                                        <label class="layui-form-label">{:lang("Name")}</label>
+                                        <div class="layui-input-block">
+                                            <input type="text" name="name" lay-verify="required" placeholder="{:lang('Please fill in')}" lay-reqtext="{:lang('Please fill in')}" autocomplete="off" class="layui-input">
+                                        </div>
+                                    </div>
+                                    <div class="layui-form-item layui-form-text">
+                                        <label class="layui-form-label">{:lang('Introduce')}</label>
+                                        <div class="layui-input-block">
+                                            <textarea name="introduce" placeholder="{:lang('Please fill in')}" class="layui-textarea"></textarea>
+                                        </div>
+                                    </div>
+                                    <div class="layui-form-item">
+                                        <div class="layui-input-block">
+                                            <button type="button" class="layui-btn" lay-submit="" lay-filter="caviar_submit_btn">{:lang('Submit')}</button>
+                                            <button type="reset" class="layui-btn layui-btn-primary">{:lang("Reset")}</button>
+                                        </div>
+                                    </div>
+                                </form>
+
+                            </div>
+                        </div>
+                    </div>
+
+                </div>
+
+            </div>
+        </main>
+        <!--End 页面主要内容-->
+    </div>
+</div>
+<script>
+    layui.use(['laydate','form','upload'], () => {
+        const form = layui.form;
+
+        form.on('submit(caviar_submit_btn)', (data) =>{
+            const response = request('{:url("admin/supplier/add")}',data.field)
+            response.then((res) => {
+                console.log(res);
+                res.code === 200 ? layer.msg("{:lang('Succeed')}", {icon: 1,time:500},() => {
+                    parent.location.reload();
+                }) : layer.msg(res.message,{icon: 5})
+            })
+            return false;
+        });
+    });
+</script>

+ 59 - 0
app/admin/view/supplier/edit.html

@@ -0,0 +1,59 @@
+{include file='common/_js_css'}
+
+<div class="lyear-layout-web">
+    <div class="lyear-layout-container">
+        <!--页面主要内容-->
+        <main>
+            <div class="container-fluid">
+                <div class="row">
+                    <div class="col-lg-12">
+                        <div class="card">
+                            <div class="card-body">
+                                <form class="layui-form">
+                                    <div class="layui-form-item">
+                                        <label class="layui-form-label">{:lang("Name")}</label>
+                                        <div class="layui-input-block">
+                                            <input name="id" value="{$supplier.id}" hidden>
+                                            <input type="text" value="{$supplier.name}" name="name" lay-verify="required" lay-reqtext="{:lang('Please fill in')}" autocomplete="off" class="layui-input">
+                                        </div>
+                                    </div>
+                                    <div class="layui-form-item layui-form-text">
+                                        <label class="layui-form-label">{:lang('Introduce')}</label>
+                                        <div class="layui-input-block">
+                                            <textarea name="introduce" placeholder="{:lang('Please fill in')}" class="layui-textarea">{$supplier.introduce}</textarea>
+                                        </div>
+                                    </div>
+                                    <div class="layui-form-item">
+                                        <div class="layui-input-block">
+                                            <button type="button" class="layui-btn" lay-submit="" lay-filter="caviar_submit_btn">{:lang('Submit')}</button>
+                                            <button type="reset" class="layui-btn layui-btn-primary">{:lang("Reset")}</button>
+                                        </div>
+                                    </div>
+                                </form>
+
+                            </div>
+                        </div>
+                    </div>
+
+                </div>
+
+            </div>
+        </main>
+        <!--End 页面主要内容-->
+    </div>
+</div>
+<script>
+    layui.use(['laydate','form','upload'], () => {
+        const form = layui.form;
+        form.on('submit(caviar_submit_btn)', (data) =>{
+            const response = request('{:url("admin/supplier/edit")}',data.field)
+            response.then((res) => {
+                console.log(res);
+                res.code === 200 ? layer.msg("{:lang('Succeed')}", {icon: 1,time:500},() => {
+                    parent.location.reload();
+                }) : layer.msg(res.message,{icon: 5})
+            })
+            return false;
+        });
+    });
+</script>

+ 103 - 0
app/admin/view/supplier/index.html

@@ -0,0 +1,103 @@
+{include file='common/_js_css'}
+
+<link href="__CSS__/common.css" rel="stylesheet">
+<div class="container-fluid">
+    <div class="row">
+        <div class="col-lg-12">
+<!--            <div class="card" id="select_card_caviar"  style="display: none">-->
+<!--                <div class="card-header">{$Think.lang.condition}</div>-->
+<!--                <div class="card-body">-->
+<!--                    <form action="{:url('admin/supplier/index')}" method="post" class="form-horizontal form-search">-->
+<!--                        <div class="row">-->
+<!--                            <div class="col-md-4">-->
+<!--                                <div class="form-group">-->
+<!--                                    <label class="w-120 pull-left control-label">{:lang("Store")}</label>-->
+<!--                                    <div class="pull-left w-120-calc">-->
+<!--                                        <select class="form-control pull-left" name="store_id">-->
+<!--                                            <option value="0" selected>{:lang("Unknown")}</option>-->
+<!--                                        </select>-->
+<!--                                    </div>-->
+<!--                                </div>-->
+<!--                            </div>-->
+<!--                            <div class="col-md-4">-->
+<!--                                <div class="form-group">-->
+<!--                                    <label class="w-120 pull-left control-label"></label>-->
+<!--                                    <div class="pull-left w-120-calc">-->
+<!--                                        <button class="btn btn-success m-r-5" id="caviar_send_btn" type="submit" href="#">{:lang('search')}</button>-->
+<!--                                    </div>-->
+<!--                                </div>-->
+<!--                            </div>-->
+<!--                        </div>-->
+
+<!--                    </form>-->
+<!--                </div>-->
+<!--            </div>-->
+            <div class="card">
+                <div class="card-toolbar clearfix">
+                    <div class="toolbar-btn-action">
+<!--                        <a class="btn btn-success m-r-5" id="caviar_search_btn" href="#!" onclick="select_card_switch()">{$Think.lang.unfold_search}</a>-->
+                        <a class="btn btn-primary m-r-5" href="#!" onclick="add('{:url(\'admin/supplier/add\')}')"><i class="mdi mdi-plus"></i> {:lang('add')}</a>
+                        <a class="btn btn-danger" href="#!" onclick="
+                            caviar_checkbox_delete('{:url(\'admin/supplier/delete\')}', ['{:lang(\'Check at least one box\')}','{:lang(\'Succeed\')}'],'{:lang(\'Warn\')}','{:lang(\'Are you sure you want to delete the selected data\')}',['{:lang(\'Confirm\')}'])"
+                        ><i class="mdi mdi-window-close"></i> {:lang('delete')}</a>
+                    </div>
+                </div>
+                <div class="card-body">
+                    <div class="table-responsive">
+                        <table class="table table-bordered">
+                            <thead>
+                            <tr>
+                                <th>
+                                    <label class="lyear-checkbox checkbox-primary">
+                                        <input type="checkbox" id="check-all" onclick="checkbox()"><span></span>
+                                    </label>
+                                </th>
+                                <th>{:lang("ID")}</th>
+                                <th>{:lang('Name')}</th>
+                                <th>{:lang('Introduce')}</th>
+                                <th>{:lang('update_time')}</th>
+                                <th>{:lang('operation')}</th>
+                            </tr>
+                            </thead>
+                            <tbody>
+                            {volist name="list" id="item"}
+                            <tr>
+                                <td>
+                                    <label class="lyear-checkbox checkbox-primary">
+                                        <input class="checkbox_caviar" type="checkbox" name="ids[]" value="{$item.id}"><span></span>
+                                    </label>
+                                </td>
+                                <td>{$item.id}</td>
+                                <td>{$item.name}</td>
+                                <td>{$item.introduce}</td>
+                                <td>{$item.update_time}</td>
+                                <td>
+                                    <div class="btn-group">
+                                        <a class="btn btn-xs btn-default" href="#!" title="{:lang('select')}" data-toggle="tooltip" onclick='view("/admin/supplier/edit?id={$item.id}","{:lang(\"Info\")}")'><i class="mdi mdi-eye"></i></a>
+                                        <a class="btn btn-xs btn-default" href="#!" title="{:lang('delete')}" data-toggle="tooltip" onclick='
+                                           deletingASingle("{:url(\"admin/supplier/delete\")}","{$item.id}",["{:lang(\"Succeed\")}"],"{:lang(\"Warn\")}","{:lang(\"Are you sure you want to delete the selected data\")}",["{:lang(\"Confirm\")}"])'
+                                        ><i class="mdi mdi-window-close"></i></a>
+                                    </div>
+                                </td>
+                            </tr>
+                            {/volist}
+                            </tbody>
+                        </table>
+                    </div>
+                    {$list|raw}
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+
+<style>
+
+</style>
+
+<script type="text/javascript">
+    // if(check_params([]))
+    //     $('#select_card_caviar').css('display','block');
+</script>
+
+

+ 0 - 1
app/admin/view/user/index.html

@@ -1,6 +1,5 @@
 {include file='common/_js_css'}
 
-{include file='common/_js_css'}
 <link href="__CSS__/common.css" rel="stylesheet">
 <div class="container-fluid">
     <div class="row">

+ 42 - 1
app/common.php

@@ -40,4 +40,45 @@ function recursion($array, $id = 0)
         }
     }
     return array_merge($resArray);
-}
+}
+
+function traverse(array $array, $id = 0) {
+    $resArray = [];
+    $queues = $key = array_search($id,array_column($array,'id'));
+    return $queues;
+
+
+//    while ()
+
+
+
+}
+
+function seek($array, $id) {
+    $return = [];
+    foreach ($array as $item) {
+        if($item['pid'] == $id)
+            array_push($return, $item);
+    }
+    return $return;
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

+ 40 - 0
app/common/model/ActivityModel.php

@@ -0,0 +1,40 @@
+<?php
+
+
+namespace app\common\model;
+
+
+class ActivityModel extends BaseModel
+{
+
+    protected $table = 'erp_activity';
+
+    protected function genSchema(array $schema)
+    {
+        // TODO: Implement genSchema() method.
+    }
+
+    protected function relation() {
+        return $this->hasMany(ActivityProductModel::class,'activity_id', 'id')->where('is_delete',0);
+    }
+
+    public function findByPaginate(array $params) {
+        $where = [
+            ['is_delete', '=', 0]
+        ];
+        return $this->where($where)
+            ->with(['relation','relation.product'])
+            ->order('update_time','desc')
+            ->paginate(['list_rows'=>10, "query" => $params]);
+    }
+
+    public function findById($id) {
+        return $this->where([
+            ['id','=',$id],
+            ['is_delete','=', 0]
+        ])->with(['relation','relation.product'])->find();
+    }
+
+
+
+}

+ 30 - 0
app/common/model/ActivityProductModel.php

@@ -0,0 +1,30 @@
+<?php
+
+
+namespace app\common\model;
+
+
+
+class ActivityProductModel extends BaseModel
+{
+
+    protected $table = 'erp_activity_product';
+
+    protected function genSchema(array $schema)
+    {
+        // TODO: Implement genSchema() method.
+    }
+
+    public function product() {
+        return $this->hasOne(ProductModel::class,'id','product_id');
+    }
+
+    public function doesItExist($product_id) {
+        return $this->where([
+            ["product_id", '=', $product_id],
+            ["is_delete", '=', 0]
+        ])->find();
+    }
+
+
+}

+ 12 - 2
app/common/model/AdminModel.php

@@ -44,11 +44,21 @@ class AdminModel extends BaseModel
     }
 
     /**
+     * @param array $params
      * @return \think\Paginator
      * @throws \think\db\exception\DbException
      */
-    public function findByPaginate() {
-        return $this->where('is_delete',0)->with(['access','access.group'])->paginate(10);
+    public function findByPaginate(array $params) {
+        $where = [
+            ['is_delete', '=', 0]
+        ];
+        if(isset($params['group_id']))
+            array_push($where,['group_id', 'like', "%".$params['group_id']."%"]);
+        return $this->where('erp_admin.is_delete', 0)
+            ->with(['access','access.group'])
+            ->hasWhere('access', $where)
+            ->order('create_time','desc')
+            ->paginate(['list_rows'=>10, "query" => $params]);
     }
 
     public function doesItExist($account) {

+ 16 - 5
app/common/model/ProductModel.php

@@ -13,6 +13,14 @@ class ProductModel extends BaseModel
         // TODO: Implement genSchema() method.
     }
 
+    public function category() {
+        return self::hasOne(ProductCategoryModel::class,'id','category_id');
+    }
+
+    public function supplier() {
+        return self::hasOne(SupplierModel::class,'id','supplier_id');
+    }
+
     /**
      * @param array $params
      * @return \think\Paginator
@@ -20,16 +28,19 @@ class ProductModel extends BaseModel
      */
     public function findByPaginate(array $params) {
         $where = [
-            ['is_delete', '=', 0]
+            ['erp_product.is_delete', '=', 0]
         ];
         if(!is_null($params['bar_code']))
-            array_push($where,['bar_code', 'like', "%".$params['bar_code']."%"]);
+            array_push($where,['erp_product.bar_code', 'like', "%".$params['bar_code']."%"]);
         if(!is_null($params['category_id']) && $params['category_id'] > 0)
-            array_push($where,['category_id', '=', $params['category_id']]);
+            array_push($where,['erp_product.category_id', '=', $params['category_id']]);
         if(!is_null($params['is_serve']))
-            array_push($where,['is_serve', '=', $params['is_serve']]);
+            array_push($where,['erp_product.is_serve', '=', $params['is_serve']]);
 
-        return $this->where($where)->order('create_time','desc')->paginate(['list_rows'=>10, "query" => $params]);
+        return $this->with(['category', 'supplier'])
+            ->where($where)
+            ->order('create_time','desc')
+            ->paginate(['list_rows'=>10, "query" => $params]);
     }
 
     public function findProducts($text = null) {

+ 66 - 0
app/common/model/SupplierModel.php

@@ -0,0 +1,66 @@
+<?php
+
+
+namespace app\common\model;
+
+
+class SupplierModel extends BaseModel
+{
+
+    protected $table = 'erp_supplier';
+
+    protected function genSchema(array $schema)
+    {
+        // TODO: Implement genSchema() method.
+    }
+
+    public function findAll() {
+        return $this->where('is_delete', 0)->select();
+    }
+
+
+    public function findByPaginate(array $params) {
+        $where = [
+            ['is_delete', '=', 0]
+        ];
+        return $this->where($where)
+            ->order('create_time','desc')
+            ->paginate(['list_rows'=>10, "query" => $params]);
+    }
+
+
+
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

+ 2 - 2
public/.htaccess

@@ -4,5 +4,5 @@
 
   RewriteCond %{REQUEST_FILENAME} !-d
   RewriteCond %{REQUEST_FILENAME} !-f
-  RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
-</IfModule>
+  RewriteRule ^(.*)$ index.php [L,E=PATH_INFO:$1]
+</IfModule>

+ 0 - 0
public/nginx.htaccess


BIN
public/storage/product/20221216/0466840eebd4a6d9b581f359960ff721.jpg


BIN
public/storage/product/20221216/2c3939a9e722a3d6ea2269493d89c1d8.jpg


BIN
public/storage/product/20221216/3984dd30085159740d201876ab1fc47b.jpg


BIN
public/storage/product/20221216/885a9347d9e6f84bc5b79aa6f4a914b7.jpg