hrjy 2 年之前
父节点
当前提交
fc09b02e42

+ 111 - 10
app/admin/controller/water/WaterMaterialScience.php

@@ -66,6 +66,18 @@ class WaterMaterialScience extends AuthController
         return $this->fetch();
     }
 
+    public function warm()
+    {
+        $this->assign('role', 'warm');
+        return $this->fetch();
+    }
+
+    public function channel()
+    {
+        $this->assign('role', 'channel');
+        return $this->fetch();
+    }
+
 
     public function list()
     {
@@ -94,8 +106,6 @@ class WaterMaterialScience extends AuthController
             ['value' => 2, 'label' => '侧板'],
             ['value' => 3, 'label' => '拉筋'],
             ['value' => 4, 'label' => '底板'],
-            ['value' => 5, 'label' => '立柱'],
-            ['value' => 6, 'label' => '辅拉'],
         ])->filterable(true);
         $f[] = Form::select('th_id', '选择厚度', '')->options(
             array_merge([['value' => 0, 'label' => '请选择分类']], \app\admin\model\water\WaterThickness::order('id DESC')->field('id as value,name as label')->select()->toArray())
@@ -125,10 +135,6 @@ class WaterMaterialScience extends AuthController
         $f[] = Form::input('name', '名称')->col(12);
         $f[] = Form::select('type', '选择分类', '')->options([
             ['value' => 0, 'label' => '请选择分类'],
-            ['value' => 1, 'label' => '顶板'],
-            ['value' => 2, 'label' => '侧板'],
-            ['value' => 3, 'label' => '拉筋'],
-            ['value' => 4, 'label' => '底板'],
             ['value' => 5, 'label' => '立柱'],
             ['value' => 6, 'label' => '辅拉'],
         ])->filterable(true);
@@ -146,6 +152,51 @@ class WaterMaterialScience extends AuthController
 
     }
 
+    /**
+     * 显示创建资源表单页.
+     *
+     * @return \think\Response
+     */
+    public function create_warm($id = 0)
+    {
+        $f = [];
+        $f[] = Form::input('name', '名称')->col(12);
+        $f[] = Form::select('type', '选择分类', '')->options([
+            ['value' => 7, 'label' => '保温'],
+        ])->filterable(true);
+        $f[] = Form::input('weight', '重量(kg)');
+        $f[] = Form::input('unit_price', '单价');
+        $f[] = Form::input('company', '单位');
+        $f[] = Form::input('long', '长');
+        $f[] = Form::input('wide', '宽');
+        $f[] = Form::radio('is_gc', '公差', 0)->options([['value' => 0, 'label' => '正常'], ['value' => 1, 'label' => '大公差']]);
+        $form = Form::make_post_form('添加', $f, Url::buildUrl('save'));
+        $this->assign(compact('form'));
+        return $this->fetch('public/form-builder');
+    }
+
+
+    /**
+     * 显示创建资源表单页.
+     *
+     * @return \think\Response
+     */
+    public function create_channel($id = 0)
+    {
+        $f = [];
+        $f[] = Form::input('name', '名称')->col(12);
+        $f[] = Form::select('type', '选择分类', '')->options([
+            ['value' => 8, 'label' => '槽钢'],
+        ])->filterable(true);
+        $f[] = Form::input('weight', '重量(kg)');
+        $f[] = Form::input('unit_price', '单价');
+        $f[] = Form::input('company', '单位');
+        $f[] = Form::radio('is_gc', '公差', 0)->options([['value' => 0, 'label' => '正常'], ['value' => 1, 'label' => '大公差']]);
+        $form = Form::make_post_form('添加', $f, Url::buildUrl('save'));
+        $this->assign(compact('form'));
+        return $this->fetch('public/form-builder');
+    }
+
     public function save()
     {
         $model = new model;
@@ -163,7 +214,6 @@ class WaterMaterialScience extends AuthController
         $validate = Validate::rule('name', 'require')->rule([
             'name' => 'require',
             'type' => 'require',
-            'th_id' => 'require',
             'weight' => 'require',
             'unit_price' => 'require',
             'company' => 'require',
@@ -171,7 +221,6 @@ class WaterMaterialScience extends AuthController
         $validate->message([
             'name.require' => '名称不能为空',
             'type.require' => '请选择分类',
-            'th_id.require' => '请选择厚度',
             'weight.require' => '请填写重量',
             'unit_price.require' => '请填写单价',
             'company.require' => '请填写单位',
@@ -203,6 +252,8 @@ class WaterMaterialScience extends AuthController
             ['value' => 4, 'label' => '底板'],
             ['value' => 5, 'label' => '立柱'],
             ['value' => 6, 'label' => '辅拉'],
+            ['value' => 7, 'label' => '保温'],
+            ['value' => 8, 'label' => '槽钢'],
         ])->filterable(true);
         $f[] = Form::select('th_id', '选择厚度', (string)$data['th_id'])->options(
             array_merge([['value' => 0, 'label' => '请选择分类']], \app\admin\model\water\WaterThickness::order('id DESC')->field('id as value,name as label')->select()->toArray())
@@ -237,6 +288,8 @@ class WaterMaterialScience extends AuthController
             ['value' => 4, 'label' => '底板'],
             ['value' => 5, 'label' => '立柱'],
             ['value' => 6, 'label' => '辅拉'],
+            ['value' => 7, 'label' => '保温'],
+            ['value' => 8, 'label' => '槽钢'],
         ])->filterable(true);
         $f[] = Form::select('th_id', '选择厚度', (string)$data['th_id'])->options(
             array_merge([['value' => 0, 'label' => '请选择分类']], \app\admin\model\water\WaterThickness::order('id DESC')->field('id as value,name as label')->select()->toArray())
@@ -251,6 +304,54 @@ class WaterMaterialScience extends AuthController
         return $this->fetch('public/form-builder');
     }
 
+    /**
+     * 显示创建资源表单页.
+     *
+     * @return \think\Response
+     */
+    public function edit_warm($id = 0)
+    {
+        $data = model::find($id);
+        $f = [];
+        $f[] = Form::input('name', '名称', $data['name'])->col(12);
+        $f[] = Form::select('type', '选择分类', (string)$data['type'])->options([
+            ['value' => 7, 'label' => '保温'],
+        ])->filterable(true);
+        $f[] = Form::input('weight', '重量(kg)', $data['weight']);
+        $f[] = Form::input('unit_price', '单价', $data['unit_price']);
+        $f[] = Form::input('company', '单位', $data['company']);
+        $f[] = Form::input('long', '长', $data['long']);
+        $f[] = Form::input('wide', '宽', $data['wide']);
+        $f[] = Form::radio('is_gc', '公差', $data['is_gc'])->options([['value' => 0, 'label' => '正常'], ['value' => 1, 'label' => '大公差']]);
+        $f[] = Form::hidden('id', $id);
+        $form = Form::make_post_form('修改', $f, Url::buildUrl('update'));
+        $this->assign(compact('form'));
+        return $this->fetch('public/form-builder');
+    }
+
+
+    /**
+     * 显示创建资源表单页.
+     *
+     * @return \think\Response
+     */
+    public function edit_channel($id = 0)
+    {
+        $data = model::find($id);
+        $f = [];
+        $f[] = Form::input('name', '名称', $data['name'])->col(12);
+        $f[] = Form::select('type', '选择分类', (string)$data['type'])->options([
+            ['value' => 8, 'label' => '槽钢'],
+        ])->filterable(true);
+        $f[] = Form::input('weight', '重量(kg)', $data['weight']);
+        $f[] = Form::input('unit_price', '单价', $data['unit_price']);
+        $f[] = Form::input('company', '单位', $data['company']);
+        $f[] = Form::radio('is_gc', '公差', $data['is_gc'])->options([['value' => 0, 'label' => '正常'], ['value' => 1, 'label' => '大公差']]);
+        $f[] = Form::hidden('id', $id);
+        $form = Form::make_post_form('修改', $f, Url::buildUrl('update'));
+        $this->assign(compact('form'));
+        return $this->fetch('public/form-builder');
+    }
 
     /**
      * 修改
@@ -277,7 +378,6 @@ class WaterMaterialScience extends AuthController
         $validate = Validate::rule('name', 'require')->rule([
             'name' => 'require',
             'type' => 'require',
-            'th_id' => 'require',
             'weight' => 'require',
             'unit_price' => 'require',
             'company' => 'require',
@@ -285,7 +385,6 @@ class WaterMaterialScience extends AuthController
         $validate->message([
             'name.require' => '名称不能为空',
             'type.require' => '请选择分类',
-            'th_id.require' => '请选择厚度',
             'weight.require' => '请填写重量',
             'unit_price.require' => '请填写单价',
             'company.require' => '请填写单位',
@@ -298,6 +397,8 @@ class WaterMaterialScience extends AuthController
         $details['unit_price'] = $data['unit_price'];
         $details['company'] = $data['company'];
         $details['is_gc'] = $data['is_gc'];
+        $details['long'] = $data['long'];
+        $details['wide'] = $data['wide'];
         $res = $details->save();
         if ($res) return Json::successful('修改成功');
         return Json::fail('修改失败');

+ 10 - 0
app/admin/model/user/User.php

@@ -174,6 +174,16 @@ class User extends BaseModel
                     $item['sex'] = '女';
                 } else $item['sex'] = '保密';
                 $item['vip_name'] = false;
+                if ($item['member'] == 0){
+                    $item['member'] = '普通用户';
+                }else{
+                    $item['member'] = '会员';
+                }
+                if ($item['member_time'] == 0){
+                    $item['member_time'] = '未购买';
+                }else{
+                    $item['member_time'] = date('Y-m-d H:i:s', $item['member_time']);
+                }
                 $levelinfo = UserLevel::where('uid', $item['uid'])->where('is_del', 0)->order('grade desc')->field('level_id,is_forever,valid_time')->find();
                 if ($levelinfo) {
                     if ($levelinfo['is_forever']) $item['vip_name'] = SystemUserLevel::where('id', $levelinfo['level_id'])->value('name');

+ 119 - 0
app/admin/model/water/WaterCardOrder.php

@@ -6,6 +6,11 @@
 
 namespace app\admin\model\water;
 
+use app\models\user\User;
+use app\models\user\UserBill;
+use app\models\user\WechatUser;
+use crmeb\services\MiniProgramService;
+use crmeb\services\WechatService;
 use crmeb\traits\ModelTrait;
 use crmeb\basic\BaseModel;
 use think\model\concern\SoftDelete;
@@ -67,4 +72,118 @@ class WaterCardOrder extends BaseModel
     }
 
 
+    public static function addCard($uid, $card_id, $pay_type)
+    {
+        $order_id = self::getNewOrderId($uid);
+        if (!$order_id) return self::setErrorInfo('订单生成失败!');
+        $card = WaterMembershioCard::find($card_id);
+        if (!$card) return self::setErrorInfo('没有该会员卡');
+        $add_time = time();
+        return self::create([
+            'order_id' => $order_id,
+            'uid' => $uid,
+            'card_id' => $card_id,
+            'time' => $card['time'],
+            'price' => $card['price'],
+            'pay_type' => $pay_type,
+            'create_time' => $add_time
+        ]);
+    }
+
+    /**
+     * 生成充值订单号
+     * @param int $uid
+     * @return bool|string
+     */
+    public static function getNewOrderId($uid = 0)
+    {
+        if (!$uid) return false;
+        $count = (int)self::where('uid', $uid)->where('create_time', '>=', strtotime(date("Y-m-d")))->where('create_time', '<', strtotime(date("Y-m-d", strtotime('+1 day'))))->count();
+        return 'wx' . date('YmdHis', time()) . (10000 + $count + $uid);
+    }
+
+
+
+    /**
+     * 充值js支付
+     * @param $orderInfo
+     * @return array|string
+     * @throws \Exception
+     */
+    public static function jsPay($orderInfo)
+    {
+        return MiniProgramService::jsPay(WechatUser::uidToOpenid($orderInfo['uid']), $orderInfo['order_id'], $orderInfo['price'], 'user_card', '用户购买会员卡');
+    }
+
+    /**
+     * 微信H5支付
+     * @param $orderInfo
+     * @return mixed
+     */
+    public static function wxH5Pay($orderInfo)
+    {
+        return WechatService::paymentPrepare(null, $orderInfo['order_id'], $orderInfo['price'], 'user_card', '用户充值', '', 'MWEB');
+    }
+
+    /**
+     * 公众号支付
+     * @param $orderInfo
+     * @return array|string
+     * @throws \Exception
+     */
+    public static function wxPay($orderInfo)
+    {
+        return WechatService::jsPay(WechatUser::uidToOpenid($orderInfo['uid'], 'openid'), $orderInfo['order_id'], $orderInfo['price'], 'user_card', '用户充值');
+    }
+
+    /**
+     * 会员卡购买成功
+     * @param $orderId
+     * @return bool
+     * @throws \think\db\exception\DataNotFoundException
+     * @throws \think\db\exception\DbException
+     * @throws \think\db\exception\ModelNotFoundException
+     */
+    public static function rechargeSuccess($orderId)
+    {
+        $order = self::where('order_id', $orderId)->where('paid', 0)->find();
+        if (!$order) return false;
+        $user = User::getUserInfo($order['uid']);
+        self::beginTrans();
+        $res1 = self::where('order_id', $order['order_id'])->update(['paid' => 1, 'pay_time' => time()]);
+        $card = WaterMembershioCard::where('id', $order['card_id'])->find();
+        $mark = '成功开通会员'.$card['title'];
+        $res2 = UserBill::income('会员开通', $order['uid'], 'now_money', 'recharge', $order['price'], $order['id'], $user['now_money'], $mark);
+        if ($user['member_time'] < time()){
+            $member_time = time() + ($order['time'] * 86400);
+        }else{
+            $member_time = $user['member_time'] + ($order['time'] * 86400);
+        }
+        $res3 = User::edit(['member' => 1, 'member_time' => $member_time], $order['uid'], 'uid');
+        $res = $res1 && $res2 && $res3;
+        self::checkTrans($res);
+//        event('RechargeSuccess', [$order]);
+        return $res;
+
+    }
+
+
+    /**
+     * 会员到期
+     * @return void
+     * @throws \think\db\exception\DataNotFoundException
+     * @throws \think\db\exception\DbException
+     * @throws \think\db\exception\ModelNotFoundException
+     */
+    public static function expire()
+    {
+        $user = User::where('member', 1)->where('member_time', '<', time())->select();
+        if (count($user) > 0){
+            foreach ($user as $item){
+                User::where('uid', $item['uid'])->update(['member' => 0]);
+            }
+        }
+    }
+
+
 }

+ 4 - 0
app/admin/model/water/WaterMaterialScience.php

@@ -52,6 +52,10 @@ class WaterMaterialScience extends BaseModel
             $model->where('a.type', 5);
         }elseif ($where['role'] == 'fula'){
             $model->where('a.type', 6);
+        }elseif ($where['role'] == 'warm'){
+            $model->where('a.type', 7);
+        }elseif ($where['role'] == 'channel'){
+            $model->where('a.type', 8);
         }
         $data['count'] = $model->count();
         if ($where['page'] && $where['limit']){

+ 4 - 0
app/admin/model/water/WaterMembershioCard.php

@@ -6,6 +6,9 @@
 
 namespace app\admin\model\water;
 
+use app\models\user\WechatUser;
+use crmeb\services\MiniProgramService;
+use crmeb\services\WechatService;
 use crmeb\traits\ModelTrait;
 use crmeb\basic\BaseModel;
 use think\model\concern\SoftDelete;
@@ -52,4 +55,5 @@ class WaterMembershioCard extends BaseModel
     }
 
 
+
 }

+ 5 - 3
app/admin/view/user/user/index.php

@@ -310,10 +310,12 @@
             {field: 'nickname', title: '姓名',templet:'#nickname',align:'center'},
             {field: 'phone', title: '手机号',align:'center',width:'8%'},
             {field: 'now_money', title: '余额',width:'6%',sort:true,event:'now_money',align:'center'},
-            {field: 'pay_count', title: '购买次数',align:'center',width:'6%'},
-            {field: 'extract_count_price', title: '累计提现',align:'center',width:'6%'},
+            // {field: 'pay_count', title: '购买次数',align:'center',width:'6%'},
+            // {field: 'extract_count_price', title: '累计提现',align:'center',width:'6%'},
+            {field: 'member', title: '会员',templet:'#member',align:'center',width:'6%'},
+            {field: 'member_time', title: '到期时间',templet:'#member_time',align:'center',width:'6%'},
             {field: 'integral', title: '积分',width:'6%',sort:true,event:'integral',align:'center'},
-            {field: 'spread_uid_nickname', title: '推荐人',align:'center'},
+            // {field: 'spread_uid_nickname', title: '推荐人',align:'center'},
             {field: 'sex', title: '性别',width:'4%',align:'center'},
             {field: 'data_time', title: '访问日期',align:'center',width:'12%',templet:'#data_time'},
             // {field: 'status', title: '状态',templet:"#checkboxstatus",width:'6%',align:'center'},

+ 21 - 16
app/admin/view/water/water_card_order/index.php

@@ -96,25 +96,29 @@
                         </button>
                         {{#  } }}
                     </script>
-                    <script type="text/html" id="suc">
-                        {{#  if(d.suc == 0){ }}
-                        <button type="button" name="suc" class="layui-btn layui-btn-xs" id="">
-                            正常
+
+                    <script type="text/html" id="status">
+                        {{#  if(d.status == 0){ }}
+                        <button type="button" name="suc" class="layui-btn-disabled layui-btn-xs" id="">
+                            关闭
                         </button>
-                        {{#  } else if(d.suc == 1) { }}
+                        {{#  } else if(d.status == 1) { }}
                         <button type="button" name="suc" class="layui-btn-xs layui-btn" id="">
-                            种植成功
-                        </button>
-                        {{#  } else if(d.suc == 2) { }}
-                        <button type="button" name="suc" class="layui-btn-disabled layui-btn-xs layui-btn-danger" id="">
-                            种植失败
+                            开启
                         </button>
                         {{#  } }}
                     </script>
+                    <script type="text/html" id="paid">
+                        {{#  if(d.paid == 0){ }}
+                            未支付
+                        {{#  } else if(d.suc == 1) { }}
+                            已支付
+                        {{#  } }}
+                    </script>
                     <script type="text/html" id="act">
-                        <button type="button" class="layui-btn layui-btn-xs layui-btn-normal" onclick="$eb.createModalFrame('编辑','{:Url('edit')}?id={{d.id}}',{h:500,w:500})">
-                            编辑
-                        </button>
+<!--                        <button type="button" class="layui-btn layui-btn-xs layui-btn-normal" onclick="$eb.createModalFrame('编辑','{:Url('edit')}?id={{d.id}}',{h:500,w:500})">-->
+<!--                            编辑-->
+<!--                        </button>-->
                         <button type="button" class="layui-btn layui-btn-xs layui-btn-danger" lay-event='delete' id="">
                             删除
                         </button>
@@ -140,9 +144,10 @@
             {field: 'title', title: '会员卡',  align: 'center'},
             {field: 'time', title: '购买天数',  align: 'center'},
             {field: 'price', title: '价格',  align: 'center'},
-            {field: 'pay_type', title: '支付类型',  align: 'center'},
-            {field: 'create_time', title: '时间', align: 'center', width: '8%'},
-            // {field: 'right', title: '操作', align: 'center', toolbar: '#act',width: '15%'},
+            {field: 'paid', title: '支付', templet: '#paid', align: 'center'},
+            {field: 'pay_time', title: '支付类型', align: 'center'},
+            {field: 'create_time', title: '时间', align: 'center'},
+            {field: 'right', title: '操作', align: 'center', toolbar: '#act',width: '15%'},
         ];
     });
 

+ 177 - 0
app/admin/view/water/water_material_science/channel.php

@@ -0,0 +1,177 @@
+{extend name="public/container"}
+{block name="head_top"}
+
+{/block}
+{block name="content"}
+<style>
+    .btn-outline{
+        border:none;
+    }
+    .btn-outline:hover{
+        background-color: #0e9aef;
+        color: #fff;
+    }
+    .layui-form-item .layui-btn {
+        margin-top: 5px;
+        margin-right: 10px;
+    }
+    .layui-btn-primary{
+        margin-right: 10px;
+        margin-left: 0!important;
+    }
+    label{
+        margin-bottom: 0!important;
+        margin-top: 4px;
+    }
+</style>
+<div class="layui-fluid">
+    <div class="layui-row layui-col-space15" id="app">
+        <!--搜索条件-->
+        <div class="layui-col-md12">
+            <div class="layui-card">
+                <div class="layui-card-header">搜索条件</div>
+                <div class="layui-card-body">
+                    <div class="layui-carousel layadmin-carousel layadmin-shortcut" lay-anim="" lay-indicator="inside" lay-arrow="none" style="background:none">
+                        <form class="layui-form layui-form-pane" action="">
+                            <div class="layui-form-item">
+
+                                <div class="layui-col-lg12">
+                                    <label class="layui-form-label" style="top: -5.5px;">搜索条件</label>
+                                    <div class="layui-input-inline">
+                                        <input type="text" id="name" name="name" class="layui-input" placeholder="请输入名称">
+                                    </div>
+                                </div>
+                                <div class="layui-inline">
+                                    <div class="layui-input-inline">
+                                        <button class="layui-btn layui-btn-sm layui-btn-normal" lay-submit="search" lay-filter="search">
+                                            <i class="layui-icon layui-icon-search"></i>搜索</button>
+                                    </div>
+                                </div>
+                            </div>
+                        </form>
+                    </div>
+                </div>
+            </div>
+        </div>
+
+        <!-- 中间详细信息-->
+        <div :class="item.col!=undefined ? 'layui-col-sm'+item.col+' '+'layui-col-md'+item.col:'layui-col-sm6 layui-col-md3'"
+             v-for="item in badge" v-cloak="" v-if="item.count > 0">
+        </div>
+        <!--enb-->
+    </div>
+    <!--列表-->
+    <div class="layui-row layui-col-space15">
+        <div class="layui-col-md12">
+            <div class="layui-card">
+                <div class="layui-card-header">材料列表</div>
+                <div class="layui-card-body">
+
+                    <div class="layui-btn-container" id="container-action">
+                        <a class="layui-btn layui-btn-sm" onclick="$eb.createModalFrame(this.innerText,'{:Url('create_channel')}',{h:900,w:900})">添加材料</a>
+<!--                        <button class="layui-btn layui-btn-sm" data-type="del_auction">批量删除</button>-->
+                    </div>
+                    <table class="layui-hide" id="List" lay-filter="List"></table>
+                    <script type="text/html" id="image">
+                        <img style="cursor: pointer" lay-event="open_image" src="{{d.image}}">
+                    </script>
+                    <script type="text/html" id="type">
+                        槽钢
+                    </script>
+                    <script type="text/html" id="is_gc">
+                        {{#  if(d.is_gc == 0){ }}
+                        正常
+                        {{#  } else if(d.is_gc == 1) { }}
+                        大公差
+                        {{#  } }}
+                    </script>
+
+                    <script type="text/html" id="act">
+                        <button type="button" class="layui-btn layui-btn-xs layui-btn-normal" onclick="$eb.createModalFrame('编辑','{:Url('edit_channel')}?id={{d.id}}',{h:900,w:900})">
+                            编辑
+                        </button>
+                        <button type="button" class="layui-btn layui-btn-xs layui-btn-danger" lay-event='delete' id="">
+                            删除
+                        </button>
+
+                    </script>
+                </div>
+            </div>
+        </div>
+    </div>
+    <!--end-->
+</div>
+<script src="{__ADMIN_PATH}js/layuiList.js"></script>
+{/block}
+{block name="script"}
+<script>
+    var role = '{$role}';
+    layList.tableList('List', "{:Url('list')}?role="+role, function () {
+        return [
+            {type: 'checkbox'},
+            {field: 'id', title: 'ID', sort: true, event: 'id', width: '5%', templet: '#id'},
+            {field: 'name', title: '名称', templet: '#name',  align: 'center'},
+            {field: 'type', title: '材料分类', align: 'center',templet: '#type',},
+            // {field: 'th_name', title: '厚度', align: 'center'},
+            {field: 'weight', title: '重量', align: 'center'},
+            {field: 'unit_price', title: '单价', align: 'center'},
+            {field: 'company', title: '单位', align: 'center'},
+            // {field: 'long', title: '长度', align: 'center'},
+            // {field: 'wide', title: '宽度', align: 'center'},
+            {field: 'is_gc', title: '公差',templet: '#is_gc', align: 'center'},
+            {field: 'right', title: '操作', align: 'center', toolbar: '#act',width: '15%'},
+        ];
+    });
+
+    //查询
+    layList.search('search',function(where){
+        layList.reload(where,true);
+    });
+
+    //点击事件绑定
+    layList.tool(function (event,data,obj) {
+        switch (event) {
+            case 'delete':
+                var url=layList.U({c:'many.many',a:'delete',q:{id:data.id}});
+                var code = {title:"操作提示",text:"确定将该商品移入回收站吗?",type:'info',confirm:'是的,移入回收站'};
+                $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();
+                            location.reload();
+                        }else
+                            return Promise.reject(res.data.msg || '删除失败')
+                    }).catch(function(err){
+                        $eb.$swal('error',err);
+                    });
+                },code)
+                break;
+            case 'open_image':
+                $eb.openImage(data.image);
+                break;
+            case 'edit':
+                location.href = layList.U({a:'edit',q:{id:data.id}});
+                break;
+        }
+    })
+
+
+    //改状态
+    layList.switch('status',function (odj,value) {
+        if(odj.elem.checked==true){
+            layList.baseGet(layList.Url({c:'auction.auction',a:'set_status',p:{status:1,id:value}}),function (res) {
+                layList.msg(res.msg, function () {
+                    layList.reload();
+                });
+            });
+        }else{
+            layList.baseGet(layList.Url({c:'auction.auction',a:'set_status',p:{status:0,id:value}}),function (res) {
+                layList.msg(res.msg, function () {
+                    layList.reload();
+                });
+            });
+        }
+    });
+</script>
+{/block}

+ 1 - 1
app/admin/view/water/water_material_science/floor.php

@@ -95,7 +95,7 @@
                     </script>
 
                     <script type="text/html" id="act">
-                        <button type="button" class="layui-btn layui-btn-xs layui-btn-normal" onclick="$eb.createModalFrame('编辑','{:Url('create')}?id={{d.id}}',{h:900,w:900})">
+                        <button type="button" class="layui-btn layui-btn-xs layui-btn-normal" onclick="$eb.createModalFrame('编辑','{:Url('edit')}?id={{d.id}}',{h:900,w:900})">
                             编辑
                         </button>
                         <button type="button" class="layui-btn layui-btn-xs layui-btn-danger" lay-event='delete' id="">

+ 177 - 0
app/admin/view/water/water_material_science/warm.php

@@ -0,0 +1,177 @@
+{extend name="public/container"}
+{block name="head_top"}
+
+{/block}
+{block name="content"}
+<style>
+    .btn-outline{
+        border:none;
+    }
+    .btn-outline:hover{
+        background-color: #0e9aef;
+        color: #fff;
+    }
+    .layui-form-item .layui-btn {
+        margin-top: 5px;
+        margin-right: 10px;
+    }
+    .layui-btn-primary{
+        margin-right: 10px;
+        margin-left: 0!important;
+    }
+    label{
+        margin-bottom: 0!important;
+        margin-top: 4px;
+    }
+</style>
+<div class="layui-fluid">
+    <div class="layui-row layui-col-space15" id="app">
+        <!--搜索条件-->
+        <div class="layui-col-md12">
+            <div class="layui-card">
+                <div class="layui-card-header">搜索条件</div>
+                <div class="layui-card-body">
+                    <div class="layui-carousel layadmin-carousel layadmin-shortcut" lay-anim="" lay-indicator="inside" lay-arrow="none" style="background:none">
+                        <form class="layui-form layui-form-pane" action="">
+                            <div class="layui-form-item">
+
+                                <div class="layui-col-lg12">
+                                    <label class="layui-form-label" style="top: -5.5px;">搜索条件</label>
+                                    <div class="layui-input-inline">
+                                        <input type="text" id="name" name="name" class="layui-input" placeholder="请输入名称">
+                                    </div>
+                                </div>
+                                <div class="layui-inline">
+                                    <div class="layui-input-inline">
+                                        <button class="layui-btn layui-btn-sm layui-btn-normal" lay-submit="search" lay-filter="search">
+                                            <i class="layui-icon layui-icon-search"></i>搜索</button>
+                                    </div>
+                                </div>
+                            </div>
+                        </form>
+                    </div>
+                </div>
+            </div>
+        </div>
+
+        <!-- 中间详细信息-->
+        <div :class="item.col!=undefined ? 'layui-col-sm'+item.col+' '+'layui-col-md'+item.col:'layui-col-sm6 layui-col-md3'"
+             v-for="item in badge" v-cloak="" v-if="item.count > 0">
+        </div>
+        <!--enb-->
+    </div>
+    <!--列表-->
+    <div class="layui-row layui-col-space15">
+        <div class="layui-col-md12">
+            <div class="layui-card">
+                <div class="layui-card-header">材料列表</div>
+                <div class="layui-card-body">
+
+                    <div class="layui-btn-container" id="container-action">
+                        <a class="layui-btn layui-btn-sm" onclick="$eb.createModalFrame(this.innerText,'{:Url('create_warm')}',{h:900,w:900})">添加材料</a>
+<!--                        <button class="layui-btn layui-btn-sm" data-type="del_auction">批量删除</button>-->
+                    </div>
+                    <table class="layui-hide" id="List" lay-filter="List"></table>
+                    <script type="text/html" id="image">
+                        <img style="cursor: pointer" lay-event="open_image" src="{{d.image}}">
+                    </script>
+                    <script type="text/html" id="type">
+                       保温材料
+                    </script>
+                    <script type="text/html" id="is_gc">
+                        {{#  if(d.is_gc == 0){ }}
+                        正常
+                        {{#  } else if(d.is_gc == 1) { }}
+                        大公差
+                        {{#  } }}
+                    </script>
+
+                    <script type="text/html" id="act">
+                        <button type="button" class="layui-btn layui-btn-xs layui-btn-normal" onclick="$eb.createModalFrame('编辑','{:Url('edit_warm')}?id={{d.id}}',{h:900,w:900})">
+                            编辑
+                        </button>
+                        <button type="button" class="layui-btn layui-btn-xs layui-btn-danger" lay-event='delete' id="">
+                            删除
+                        </button>
+
+                    </script>
+                </div>
+            </div>
+        </div>
+    </div>
+    <!--end-->
+</div>
+<script src="{__ADMIN_PATH}js/layuiList.js"></script>
+{/block}
+{block name="script"}
+<script>
+    var role = '{$role}';
+    layList.tableList('List', "{:Url('list')}?role="+role, function () {
+        return [
+            {type: 'checkbox'},
+            {field: 'id', title: 'ID', sort: true, event: 'id', width: '5%', templet: '#id'},
+            {field: 'name', title: '名称', templet: '#name',  align: 'center'},
+            {field: 'type', title: '材料分类', align: 'center',templet: '#type',},
+            // {field: 'th_name', title: '厚度', align: 'center'},
+            {field: 'weight', title: '重量', align: 'center'},
+            {field: 'unit_price', title: '单价', align: 'center'},
+            {field: 'company', title: '单位', align: 'center'},
+            {field: 'long', title: '长度', align: 'center'},
+            {field: 'wide', title: '宽度', align: 'center'},
+            {field: 'is_gc', title: '公差',templet: '#is_gc', align: 'center'},
+            {field: 'right', title: '操作', align: 'center', toolbar: '#act',width: '15%'},
+        ];
+    });
+
+    //查询
+    layList.search('search',function(where){
+        layList.reload(where,true);
+    });
+
+    //点击事件绑定
+    layList.tool(function (event,data,obj) {
+        switch (event) {
+            case 'delete':
+                var url=layList.U({c:'many.many',a:'delete',q:{id:data.id}});
+                var code = {title:"操作提示",text:"确定将该商品移入回收站吗?",type:'info',confirm:'是的,移入回收站'};
+                $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();
+                            location.reload();
+                        }else
+                            return Promise.reject(res.data.msg || '删除失败')
+                    }).catch(function(err){
+                        $eb.$swal('error',err);
+                    });
+                },code)
+                break;
+            case 'open_image':
+                $eb.openImage(data.image);
+                break;
+            case 'edit':
+                location.href = layList.U({a:'edit',q:{id:data.id}});
+                break;
+        }
+    })
+
+
+    //改状态
+    layList.switch('status',function (odj,value) {
+        if(odj.elem.checked==true){
+            layList.baseGet(layList.Url({c:'auction.auction',a:'set_status',p:{status:1,id:value}}),function (res) {
+                layList.msg(res.msg, function () {
+                    layList.reload();
+                });
+            });
+        }else{
+            layList.baseGet(layList.Url({c:'auction.auction',a:'set_status',p:{status:0,id:value}}),function (res) {
+                layList.msg(res.msg, function () {
+                    layList.reload();
+                });
+            });
+        }
+    });
+</script>
+{/block}

+ 3 - 0
app/admin/view/water/water_query/index.php

@@ -115,6 +115,9 @@
                         <button type="button" class="layui-btn layui-btn-xs layui-btn-normal" onclick="$eb.createModalFrame('编辑','{:Url('details')}?id={{d.id}}',{h:500,w:500})">
                             详情
                         </button>
+                        <button type="button" class="layui-btn layui-btn-xs layui-btn-normal" onclick="$eb.createModalFrame('编辑','{:Url('details')}?id={{d.id}}',{h:500,w:500})">
+                            转为订单
+                        </button>
                         <button type="button" class="layui-btn layui-btn-xs layui-btn-danger" lay-event='delete' id="">
                             删除
                         </button>

+ 4 - 4
app/api/controller/AuthController.php

@@ -198,10 +198,10 @@ class AuthController
         }
         $verifyCode = CacheService::get('code_' . $account);
         if (!$verifyCode)
-            return app('json')->fail('请先获取验证码');
-        $verifyCode = substr($verifyCode, 0, 6);
-        if ($verifyCode != $captcha)
-            return app('json')->fail('验证码错误');
+//            return app('json')->fail('请先获取验证码');
+//        $verifyCode = substr($verifyCode, 0, 6);
+//        if ($verifyCode != $captcha)
+//            return app('json')->fail('验证码错误');
         if (strlen(trim($password)) < 6 || strlen(trim($password)) > 16)
             return app('json')->fail('密码必须是在6到16位之间');
         if ($password == '123456') return app('json')->fail('密码太过简单,请输入较为复杂的密码');

+ 95 - 0
app/api/controller/user/UserCardController.php

@@ -0,0 +1,95 @@
+<?php
+
+namespace app\api\controller\user;
+
+use app\admin\model\user\User;
+use app\admin\model\water\WaterCardOrder;
+use app\admin\model\water\WaterMaterialScience;
+use app\admin\model\water\WaterMembershioCard;
+use app\models\user\UserRecharge;
+use app\Request;
+use crmeb\repositories\PaymentRepositories;
+use crmeb\services\GroupDataService;
+use crmeb\services\QrcodeService;
+use crmeb\services\UtilService;
+use crmeb\utils\Hook;
+
+/**
+ * 秒杀产品类
+ * Class StoreSeckillController
+ * @package app\api\controller\activity
+ */
+class UserCardController
+{
+
+
+    /**
+     * 会员卡
+     * @return mixed
+     * @throws \think\db\exception\DataNotFoundException
+     * @throws \think\db\exception\DbException
+     * @throws \think\db\exception\ModelNotFoundException
+     */
+    public function list()
+    {
+        $card = WaterMembershioCard::select();
+        return app('json')->success($card->toArray());
+    }
+
+    /**
+     * 小程序购买
+     *
+     * @param Request $request
+     * @return mixed
+     */
+    public function routine(Request $request)
+    {
+        list($card_id, $type) = UtilService::postMore([['char_id', 0], ['type', 0]], $request, true);
+        switch ((int)$type) {
+            case 0: //支付购买会员卡
+                $order = WaterCardOrder::addCard($request->uid(), $card_id, 'routine');
+                if (!$order) return app('json')->fail('订单生成失败!');
+                try {
+                    return app('json')->successful(WaterCardOrder::jsPay($order));
+                } catch (\Exception $e) {
+                    return app('json')->fail($e->getMessage());
+                }
+                break;
+            default:
+                return app('json')->fail('缺少参数');
+                break;
+        }
+    }
+
+    /**
+     * 公众号购买
+     *
+     * @param Request $request
+     * @return mixed
+     */
+    public function wechat(Request $request)
+    {
+        list($card_id, $type, $from) = UtilService::postMore([['char_id', 0], ['type', 0]], $request, true);
+        switch ((int)$type) {
+            case 0: //支付充值余额
+                $order = WaterCardOrder::addCard($request->uid(), $card_id, 'routine');
+                if (!$order) return app('json')->fail('订单生成失败!');
+                try {
+                    if ($from == 'weixinh5') {
+                        $recharge = UserRecharge::wxH5Pay($order);
+                    } else {
+                        $recharge = UserRecharge::wxPay($order);
+                    }
+                } catch (\Exception $e) {
+                    return app('json')->fail($e->getMessage());
+                }
+                return app('json')->successful(['type' => $from, 'data' => $recharge]);
+                break;
+            default:
+                return app('json')->fail('缺少参数');
+                break;
+        }
+    }
+
+
+}

+ 82 - 0
app/api/controller/water/WaterQueryController.php

@@ -0,0 +1,82 @@
+<?php
+
+namespace app\api\controller\water;
+
+use app\admin\model\water\WaterMaterialScience;
+use app\Request;
+use crmeb\services\GroupDataService;
+use crmeb\services\QrcodeService;
+use crmeb\services\UtilService;
+
+/**
+ * 秒杀产品类
+ * Class StoreSeckillController
+ * @package app\api\controller\activity
+ */
+class WaterQueryController
+{
+
+    public function calculation(Request $request)
+    {
+        $data = UtilService::postMore([
+            ['long', ''],// 长
+            ['wide', ''],// 宽
+            ['high', ''],// 高
+            ['is_warm', ''], // 是否保温
+            ['is_channel', ''], // 是否需要槽钢
+            ['is_human_ladder', ''] ,// 是否需要人梯
+            ['is_gc', ''] ,// 公差
+            ['floor', ''], // 底板厚度
+            ['side_plate', ''], // 侧板厚度
+            ['roof', ''], // 顶板厚度
+            ['column', ''], // 立柱厚度
+            ['lacing', ''], // 拉筋厚度
+            ['fula', ''], // 辅拉
+        ]);
+        //顶板
+        if ($data['is_gc'] > 0){
+            $where[] = ['is_gc', '=' ,1];
+        }else{
+            $where[] = ['is_gc', '=' ,0];
+        }
+        $roof = WaterMaterialScience::where('id', $data['roof'])->find();
+        $roofs = WaterMaterialScience::where('type', 1)->where('th_id', $roof['th_id'])->where($where)->column('long,wide', 'id');//符合厚度的顶板
+        $area = $data['long'] * $data['wide'];// 面积
+        $roof_number = ($data['long']/1) * intval(($data['wide']/1)); // 顶板使用数量1*1
+
+        halt($roof_number);
+
+
+    }
+
+
+    /**
+     * 材料列表
+     * @return mixed
+     * @throws \think\db\exception\DataNotFoundException
+     * @throws \think\db\exception\DbException
+     * @throws \think\db\exception\ModelNotFoundException
+     */
+    public function list()
+    {
+        $data = UtilService::getMore(['is_gc']);
+        $list = [];
+        if ($data['is_gc'] > 0){
+            $where[] = ['is_gc', '=' ,1];
+        }else{
+            $where[] = ['is_gc', '=' ,0];
+        }
+        $list['warm'] = WaterMaterialScience::field('id,name,unit_price,company')->where('type', 7)->where($where)->select(); // 保温
+        $list['channel'] =  WaterMaterialScience::field('id,name,unit_price,company')->where('type', 8)->where($where)->select(); // 槽钢
+        $list['roof'] =  WaterMaterialScience::field('id,name,unit_price,company')->where('type', 1)->where($where)->select();// 顶板
+        $list['side_plate'] =  WaterMaterialScience::field('id,name,unit_price,company')->where('type', 2)->where($where)->select();// 侧板
+        $list['lacing'] =  WaterMaterialScience::field('id,name,unit_price,company')->where('type', 3)->where($where)->select();// 拉筋
+        $list['floor'] =  WaterMaterialScience::field('id,name,unit_price,company')->where('type', 4)->where($where)->select(); // 底板
+        $list['column'] =  WaterMaterialScience::field('id,name,unit_price,company')->where('type', 5)->where($where)->select(); // 立柱
+        $list['fula'] =  WaterMaterialScience::field('id,name,unit_price,company')->where('type', 6)->where($where)->select(); // 辅拉
+
+        return app('json')->success($list);
+    }
+
+
+}

+ 16 - 0
crmeb/repositories/PaymentRepositories.php

@@ -2,6 +2,7 @@
 
 namespace crmeb\repositories;
 
+use app\admin\model\water\WaterCardOrder;
 use app\models\store\StoreOrder;
 use app\models\user\UserRecharge;
 
@@ -72,4 +73,19 @@ class PaymentRepositories
             return false;
         }
     }
+
+    /**
+     * 充值成功后
+     * @param string|null $order_id 订单id
+     * @return bool
+     */
+    public static function wechatUsercard(string $order_id = null)
+    {
+        try {
+            if (WaterCardOrder::be(['order_id' => $order_id, 'paid' => 1])) return true;
+            return WaterCardOrder::rechargeSuccess($order_id);
+        } catch (\Exception $e) {
+            return false;
+        }
+    }
 }

+ 9 - 0
crmeb/subscribes/TaskSubscribe.php

@@ -3,6 +3,7 @@
 namespace crmeb\subscribes;
 
 use app\admin\model\system\SystemAttachment;
+use app\admin\model\water\WaterCardOrder;
 use app\models\store\StoreBargainUser;
 use app\models\store\StoreOrder;
 use app\models\store\StorePink;
@@ -75,6 +76,14 @@ class TaskSubscribe
         } catch (\Exception $e) {
             Db::rollback();
         }
+
+        try {
+            Db::startTrans();
+            WaterCardOrder::expire();//修改到期会员状态
+            Db::commit();
+        } catch (\Exception $e) {
+            Db::rollback();
+        }
     }
 
     /**

+ 10 - 0
route/api/route.php

@@ -161,6 +161,12 @@ Route::group(function () {
     Route::get('user/level/task/:id', 'user.UserLevelController/task')->name('userLevelTask');//获取等级任务
     //首页获取未支付订单
     Route::get('order/nopay', 'order.StoreOrderController/get_noPay')->name('getNoPay');//获取未支付订单
+
+    //计算
+    Route::post('water/calculation', 'water.WaterQueryController/calculation')->name('waterquery');
+    //充值类
+    Route::post('card/routine', 'user.UserCardController/routine')->name('CardRoutine');//小程序购买会员卡
+    Route::post('card/wechat', 'user.UserCardController/wechat')->name('CardWechat');//公众号购买会员卡
 })->middleware(\app\http\middleware\AllowOriginMiddleware::class)->middleware(\app\http\middleware\AuthTokenMiddleware::class, true);
 //未授权接口
 Route::group(function () {
@@ -228,6 +234,10 @@ Route::group(function () {
     Route::get('store_list', 'PublicController/store_list')->name('storeList');
     //获取城市列表
     Route::get('city_list', 'PublicController/city_list')->name('cityList');
+    // 获取材料
+    Route::get('water/list', 'water.WaterQueryController/list')->name('waterList');
+    //会员卡
+    Route::get('card/list', 'user.UserCardController/list')->name('cardList');
 
 
 })->middleware(\app\http\middleware\AllowOriginMiddleware::class)->middleware(\app\http\middleware\AuthTokenMiddleware::class, false);