linwu 1 жил өмнө
parent
commit
bfbce17be4

+ 51 - 0
app/admin/controller/Out.php

@@ -4,6 +4,7 @@ namespace app\admin\controller;
 
 use app\admin\BaseController;
 use app\common\model\Config as ConfigModel;
+use app\common\model\UserParam as UserParamModel;
 
 class Out extends BaseController
 {
@@ -27,4 +28,54 @@ class Out extends BaseController
             'msg'  => "",
         ]));
     }
+
+    // 提现设置
+    public function getmoney()
+    {
+        $param = UserParamModel::where(1)->findOrEmpty();
+        $out_getmoney = empty($param['out_getmoney']) ? [] : $param['out_getmoney'];
+        return view('out/getmoney', [
+            'out_getmoney' => $out_getmoney,
+        ]);
+    }
+
+    public function editGetmoney()
+    {
+        $param = UserParamModel::where(1)->findOrEmpty();
+        $data  = [
+            'out_getmoney' => input('out_getmoney/a', []),
+        ];
+        $odds_total = 0;
+        foreach ($data['out_getmoney'] as $v) {
+            if ($v['money'] < 0.3) {
+                exit(json_encode([
+                    'code' => 1,
+                    'msg'  => "金额必须大于等于0.3",
+                ]));
+            }
+            if ($v['odds'] <= 0) {
+                exit(json_encode([
+                    'code' => 1,
+                    'msg'  => "中奖概率必须大于等于0",
+                ]));
+            }
+            $odds_total += $v['odds'];
+        }
+        if ($odds_total != 100) {
+            exit(json_encode([
+                'code' => 1,
+                'msg'  => "总概率必须为100%",
+            ]));
+        }
+        if ($param->isEmpty()) {
+            UserParamModel::create($data);
+        } else {
+            $param->out_getmoney = $data['out_getmoney'];
+            $param->save();
+        }
+        exit(json_encode([
+            'code' => 0,
+            'msg'  => "",
+        ]));
+    }
 }

+ 90 - 0
app/admin/view/out/getmoney.html

@@ -0,0 +1,90 @@
+<div class="layui-fluid">
+	<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" pad15>
+					<div class="layui-form layui-form-pane">
+						<button type="button" id="add" class="layui-btn layui-btn-normal">添加</button>
+						<table class="layui-table" id="table">
+							<tr>
+								<th>金额(最低0.3)</th>
+								<th>概率%</th>
+								<th>操作</th>
+							</tr>
+							{volist name="out_getmoney" id="vo"}
+								<tr class="form-tr">
+									<td><input type="text" name="money{$key}" class="layui-input" value="{$vo.money}"></td>
+									<td><input type="text" name="odds{$key}" class="layui-input" value="{$vo.odds}"></td>
+									<td>
+										<button type="button" class="layui-btn layui-btn-danger btn-del">删除</button>
+									</td>
+								</tr>
+							{/volist}
+						</table>
+						<div class="layui-input-block" style="text-align:center;margin-top:20px;">
+							<button class="layui-btn" id="submit">确认修改</button>
+						</div>
+					</div>
+				</div>
+			</div>
+		</div>
+	</div>
+</div>
+
+<script>
+	layui.config({
+		base: '/static/echoui/' //静态资源所在路径
+	}).extend({
+		index: 'lib/index' //主入口模块
+	}).use(['index', 'set'], function() {
+		var $ = layui.$,
+			setter = layui.setter,
+			form = layui.form,
+			admin = layui.admin;
+
+		var index = {:count($out_getmoney)};
+		$('#add').click(function(){
+			$('#table').append(gettr(index));
+			index++;
+			form.render();
+		});
+
+		function gettr(index) {
+			var tr = '<tr class="form-tr">' +
+					'<td><input type="text" name="money' + index + '" class="layui-input" value="0"></td>' +
+					'<td><input type="text" name="odds' + index + '" class="layui-input" value="0"></td>' +
+					'<td><button type="button" class="layui-btn layui-btn-danger btn-del">删除</button></td>' +
+					'</tr>';
+			return tr;
+		}
+
+		$('#table').on('click','.btn-del',function(){
+			$(this).parent().parent().remove();
+		});
+
+		$('#submit').click(function(){
+			var form = $('.form-tr');
+			var data = [];
+			if (form.length === 0) {
+				layer.msg("请添加数据", { icon: 2 });
+				return false;
+			}
+
+			$.each(form,function(k,v){
+				var item = {};
+				item.money = $(v).find('input')[0].value;
+				item.odds = $(v).find('input')[1].value;
+				data.push(item);
+			});
+
+			admin.req({
+				url: setter.baseAdminUrl + 'out/editGetmoney',
+				data: {out_getmoney:data},
+				done: function(res) {
+					layer.msg("提交成功", { icon: 1 });
+				}
+			});
+		});
+	});
+</script>

+ 36 - 0
app/agent/controller/Outjob.php

@@ -0,0 +1,36 @@
+<?php
+
+namespace app\agent\controller;
+
+use app\agent\BaseController;
+use app\common\model\OutCode as OutCodeModel;
+
+class Outjob extends BaseController
+{
+    public function print()
+    {
+        return view('outjob/print');
+    }
+
+    /**
+     * 推广码
+     */
+    public function qrcode()
+    {
+        error_reporting(E_ERROR);
+        $code = uniqid();
+        $url  = 'https://linggong.jinjianghc.com/applet/outactivity/index?code=' . $code;
+        OutCodeModel::create([
+            'code'        => $code,
+            'create_time' => time(),
+            'agentid'    => $this->access_agent['id'],
+            'workerid'    => $this->access_agent['workerid'],
+        ]);
+        header('Content-Type: image/png');
+        ob_clean();
+        $errorCorrectionLevel = "L"; // 纠错级别:L、M、Q、H
+        $matrixPointSize      = "4"; //生成图片大小 :1到10
+        \phpqrcode\QRcode::png($url, false, $errorCorrectionLevel, $matrixPointSize);
+        exit();
+    }
+}

+ 6 - 0
app/agent/view/index.html

@@ -163,6 +163,12 @@
 							<cite>辅导培训</cite>
 						</a>
 					</li>
+					<li data-name="coach" class="layui-nav-item">
+						<a lay-href="{:url('/outjob/print')}" lay-tips="省外活动码">
+							<i class="layui-icon layui-icon-engine"></i>
+							<cite>省外活动码</cite>
+						</a>
+					</li>
 					<li data-name="agent" class="layui-nav-item">
 						<a lay-href="{:url('/agent/agentform')}" lay-tips="代理门店信息">
 							<i class="layui-icon layui-icon-set"></i>

+ 140 - 0
app/agent/view/outjob/print.html

@@ -0,0 +1,140 @@
+<div class="layui-fluid">
+	<div class="layui-card">
+		<div class="layui-form layui-form-pane layui-card-header layuiadmin-card-header-auto" lay-filter="LAY-outjob-print-search">
+			<div class="layui-form-item">
+				<div class="layui-inline">
+					<label class="layui-form-label">大小</label>
+					<div class="layui-input-block">
+						<select name="size">
+							<option value="box-2cm">2cm</option>
+							<option value="box-3cm">3cm</option>
+							<option value="box-5cm">5cm</option>
+						</select>
+					</div>
+				</div>
+				<div class="layui-inline">
+					<button class="layui-btn" lay-submit lay-filter="LAY-outjob-print-btn">
+						确定
+					</button>
+					<button class="layui-btn print-btn" onclick="print_page()">
+						打印
+					</button>
+				</div>
+			</div>
+		</div>
+
+		<div class="layui-card-body" id="print_view">
+			<style>
+				@page{  margin:0  }
+				.print-body .print-item {margin-top:20px;display:flex;justify-content:space-around;align-items:center;}
+				.print-body .box-2cm {width:76px;height:76px;}
+				.print-body .box-3cm {width:114px;height:114px;}
+				.print-body .box-5cm {width:190px;height:190px;}
+				.print-body .print-item img {width:100%;}
+			</style>
+			<div class="print-body" style="width:794px;height:1123px;border:1px solid #000000;">
+				<div class="print-item">
+					<div class="box-2cm">
+						<img class="qrcode" src="/static/images/qrcode_test.jpg" alt="">
+					</div>
+					<div class="box-2cm">
+						<img class="qrcode" src="/static/images/qrcode_test.jpg" alt="">
+					</div>
+					<div class="box-2cm">
+						<img class="qrcode" src="/static/images/qrcode_test.jpg" alt="">
+					</div>
+					<div class="box-2cm">
+						<img class="qrcode" src="/static/images/qrcode_test.jpg" alt="">
+					</div>
+				</div>
+				<div class="print-item">
+					<div class="box-2cm">
+						<img class="qrcode" src="/static/images/qrcode_test.jpg" alt="">
+					</div>
+					<div class="box-2cm">
+						<img class="qrcode" src="/static/images/qrcode_test.jpg" alt="">
+					</div>
+					<div class="box-2cm">
+						<img class="qrcode" src="/static/images/qrcode_test.jpg" alt="">
+					</div>
+					<div class="box-2cm">
+						<img class="qrcode" src="/static/images/qrcode_test.jpg" alt="">
+					</div>
+				</div>
+				<div class="print-item">
+					<div class="box-2cm">
+						<img class="qrcode" src="/static/images/qrcode_test.jpg" alt="">
+					</div>
+					<div class="box-2cm">
+						<img class="qrcode" src="/static/images/qrcode_test.jpg" alt="">
+					</div>
+					<div class="box-2cm">
+						<img class="qrcode" src="/static/images/qrcode_test.jpg" alt="">
+					</div>
+					<div class="box-2cm">
+						<img class="qrcode" src="/static/images/qrcode_test.jpg" alt="">
+					</div>
+				</div>
+				<div class="print-item">
+					<div class="box-2cm">
+						<img class="qrcode" src="/static/images/qrcode_test.jpg" alt="">
+					</div>
+					<div class="box-2cm">
+						<img class="qrcode" src="/static/images/qrcode_test.jpg" alt="">
+					</div>
+					<div class="box-2cm">
+						<img class="qrcode" src="/static/images/qrcode_test.jpg" alt="">
+					</div>
+					<div class="box-2cm">
+						<img class="qrcode" src="/static/images/qrcode_test.jpg" alt="">
+					</div>
+				</div>
+				<div class="print-item">
+					<div class="box-2cm">
+						<img class="qrcode" src="/static/images/qrcode_test.jpg" alt="">
+					</div>
+					<div class="box-2cm">
+						<img class="qrcode" src="/static/images/qrcode_test.jpg" alt="">
+					</div>
+					<div class="box-2cm">
+						<img class="qrcode" src="/static/images/qrcode_test.jpg" alt="">
+					</div>
+					<div class="box-2cm">
+						<img class="qrcode" src="/static/images/qrcode_test.jpg" alt="">
+					</div>
+				</div>
+			</div>
+		</div>
+	</div>
+</div>
+
+<script>
+	layui.config({
+		base: '/static/echoui/' //静态资源所在路径
+	}).extend({
+		index: 'lib/index' //主入口模块
+	}).use(['index', 'set'], function() {
+		var $ = layui.$,
+			form = layui.form;
+
+		form.on('submit(LAY-outjob-print-btn)', function(data) {
+			$('.print-item div').attr('class',data.field.size)
+		});
+
+	});
+
+	function print_page(){
+		const $ = layui.$;
+		$('.qrcode').each(function(k,v) {
+			$(v).attr('src',layui.setter.baseAgentUrl + 'outjob/qrcode?v='+k);
+		});
+		layui.layer.load();
+		setTimeout(function(){
+			layui.layer.closeAll();
+			document.body.innerHTML = document.getElementById('print_view').innerHTML;
+			window.print();
+			window.close();
+			location.reload();
+		},2000);
+	}
+</script>

+ 28 - 0
app/common/model/OutCode.php

@@ -0,0 +1,28 @@
+<?php
+
+namespace app\common\model;
+
+use think\Model;
+
+class OutCode extends Model
+{
+    // 设置字段信息
+    protected $schema = [
+        'id'          => 'int',
+        'code'        => 'string',
+        'status'      => 'int',
+        'userid'      => 'int',
+        'money'       => 'float',
+        'create_time' => 'int',
+        'use_time'    => 'int',
+        'workerid'    => 'int',
+        'agentid'     => 'int',
+    ];
+
+    // 设置字段自动转换类型
+    protected $type = [
+        'create_time' => 'timestamp:Y-m-d H:i:s',
+        'use_time'    => 'timestamp:Y-m-d H:i:s',
+    ];
+
+}

+ 24 - 22
app/common/model/UserParam.php

@@ -8,30 +8,32 @@ class UserParam extends Model
 {
     // 设置字段信息
     protected $schema = [
-        'id'            => 'int',
-        'redmoney'      => 'int',
-        'usernumber'    => 'int',
-        'shareintegral' => 'int',
-        'postintegral'  => 'int',
-        'inttomoney'    => 'int',
-        'minintegral'   => 'int',
-        'intrecharge'   => 'int',
-        'picregworker'  => 'string',
-        'intregworker'  => 'int',
-        'register'      => 'int',
-        'improveresume' => 'int',
-        'certification' => 'int',
-        'entry'         => 'int',
-        'signin'        => 'int',
-        'sharejob'      => 'int',
-        'sharejobnum'   => 'int',
-        'taskimage'     => 'string',
-        'getmoney'      => 'string',
-        'commission'    => 'string',
+        'id'                 => 'int',
+        'redmoney'           => 'int',
+        'usernumber'         => 'int',
+        'shareintegral'      => 'int',
+        'postintegral'       => 'int',
+        'inttomoney'         => 'int',
+        'minintegral'        => 'int',
+        'intrecharge'        => 'int',
+        'picregworker'       => 'string',
+        'intregworker'       => 'int',
+        'register'           => 'int',
+        'improveresume'      => 'int',
+        'certification'      => 'int',
+        'entry'              => 'int',
+        'signin'             => 'int',
+        'sharejob'           => 'int',
+        'sharejobnum'        => 'int',
+        'taskimage'          => 'string',
+        'getmoney'           => 'string',
+        'commission'         => 'string',
+        'out_getmoney'       => 'string',
     ];
 
     protected $type = [
-        'getmoney'   => 'json',
-        'commission' => 'json',
+        'getmoney'     => 'json',
+        'commission'   => 'json',
+        'out_getmoney' => 'json',
     ];
 }

+ 6 - 3
app/mainapp/controller/Login.php

@@ -95,13 +95,16 @@ class Login
             }
             $authsarr = [
                 'mobile' => $mobile,
-                'weixin' => $unionid,
+                'weixin_unionid' => $unionid,
             ];
             $user     = $this->userRegister($userdata, input('parentid/d', 0), $authsarr);
+            $password = md5(time() . mt_rand(100000, 999999));
+            $this->authsRegister($user->id, "weixin", $openid, $password);
         } else {
             $password = md5(time() . mt_rand(100000, 999999));
             $this->authsRegister($user->id, "mobile", $mobile, $password);
-            $this->authsRegister($user->id, "weixin", $unionid, $password);
+            $this->authsRegister($user->id, "weixin_unionid", $unionid, $password);
+            $this->authsRegister($user->id, "weixin", $openid, $password);
         }
         page_result(0, "", ['userinfo' => $user]);
     }
@@ -112,7 +115,7 @@ class Login
         $code      = input('code/s', "");
         $wxprogram = new WxProgram();
         $resdata   = $wxprogram->auth_code2_session($code);
-        $userauths = UserAuthsModel::with('user')->where(['identifier' => $resdata['unionid'], 'identitytype' => "weixin"])->findOrEmpty();
+        $userauths = UserAuthsModel::with('user')->where(['identifier' => $resdata['unionid'], 'identitytype' => "weixin_unionid"])->findOrEmpty();
         if ($userauths->isEmpty()) {
             $user = null;
         } else {

+ 3 - 0
app/mainapp/controller/My.php

@@ -692,6 +692,9 @@ class My extends BaseController
         $batch_name   = '晋江人力小程序用户提现';//转账的名称
         $out_trade_no = 'jfhd' . getUniId();//单号
         $openid       = UserAuthsModel::where('userid', $userid)->where('identitytype', 'weixin')->value('identifier');//用户openid
+        if (empty($openid)) {
+            page_result(1, "登录信息有误,请重新登录");
+        }
         $detail       = [];
         $transfers    = new WechatTransfers();
         $detail[]     = $transfers->getDetailList($out_trade_no, $cash['money'], $batch_name, $openid);

+ 169 - 0
app/mainapp/controller/Outactivity.php

@@ -0,0 +1,169 @@
+<?php
+namespace app\mainapp\controller;
+
+use app\common\model\Config;
+use app\common\model\OutRecruitReport;
+use app\common\model\UserGetmoneyLog;
+use app\mainapp\BaseController;
+use app\common\model\OutCode as OutCodeModel;
+use app\common\model\Broker as BrokerModel;
+use app\common\model\UserAuths as UserAuthsModel;
+use app\common\model\OutRecruit as OutRecruitModel;
+use app\common\model\UserParam as UserParamModel;
+use app\mainapp\validate\WorkerReportValidate;
+use payment\wechat\WechatTransfers;
+use think\exception\ValidateException;
+use think\facade\Log;
+
+class Outactivity extends BaseController
+{
+
+    public function checkCode()
+    {
+        $code = input('code/s','');
+        if (empty($code)) {
+            page_result(1, "该二维码已失效");
+        }
+
+        $info = OutCodeModel::where('code',$code)->find();
+        if (empty($info)) {
+            page_result(1, "该二维码已失效");
+        }
+        if ($info['status'] == 1) {
+            page_result(1, "该二维码已被使用");
+        }
+
+        page_result(0);
+    }
+
+    public function listrecruit()
+    {
+        $ppage     = input('ppage/d', 1);
+        $psize     = input('psize/d', 20);
+        $map = [
+            ['status', '=', 1]
+        ];
+        $orderby = ['priority' => 'desc', 'id' => 'desc'];
+        $plist   = OutRecruitModel::where($map)->order($orderby)->page($ppage)->limit($psize)->select();
+
+        page_result(0, "", [
+            'plist'   => $plist,
+            'pstatus' => $psize > count($plist) ? 'noMore' : 'more',
+        ]);
+    }
+
+    public function detailrecruit()
+    {
+        $id = input('id/d', 0);
+        if (empty($id)) {
+            page_result(1,'招聘不存在');
+        }
+
+        $info = OutRecruitModel::find($id);
+        if (empty($info) || $info['status'] != 1) {
+            page_result(1,'该信息不存在或已下架');
+        }
+
+        page_result(0,'',$info);
+    }
+
+    public function apply()
+    {
+        $data  = input('param.');
+        try {
+            validate(WorkerReportValidate::class)->check($data);
+        } catch (ValidateException $e) {
+            page_result(1, $e->getError());
+        }
+
+        //报备记录
+        $report = OutRecruitReport::with(['broker'])->where('mobile', $data['mobile'])->where('recruit_id', $data['recruit_id'])->find();
+        $report && page_result(1, '请不要重复提交,等待对方联系');
+
+        //添加报备信息
+        $data['brokerid'] = Config::getConfigValue('default_broker');
+        $broker = BrokerModel::find($data['brokerid']);
+
+        $data['workerid']   = $broker['workerid'];
+        $data['agentid']    = $broker['agentid'];
+        $data['createtime'] = time();
+        OutRecruitReport::create($data);
+
+        page_result(0);
+    }
+
+    public function getmoney()
+    {
+        $code  = input('code/s', '');
+        $userid = input('userid/d', 0);
+
+        $info = OutCodeModel::where('code',$code)->find();
+        if (empty($info)) {
+            page_result(1, "该二维码已失效");
+        }
+        if ($info['status'] == 1) {
+            page_result(1, "该二维码已被使用");
+        }
+
+        //获取金额
+        $param = UserParamModel::where(1)->findOrEmpty();
+        if (empty($param['out_getmoney'])) {
+            page_result(1,'活动有误,请联系管理员确认!');
+        }
+        $money = $this->probabilityPick($param['out_getmoney']);
+
+        //提现
+        $batch_name   = '晋江人力小程序用户提现';//转账的名称
+        $out_trade_no = 'outa' . getUniId();//单号
+        $openid       = UserAuthsModel::where('userid', $userid)->where('identitytype', 'weixin')->value('identifier');//用户openid
+        if (empty($openid)) {
+            page_result(1, "登录信息有误,请重新登录");
+        }
+        $detail       = [];
+        $transfers    = new WechatTransfers();
+        $detail[]     = $transfers->getDetailList($out_trade_no, $money, $batch_name, $openid);
+        $res          = $transfers->transfers($batch_name, $detail);
+        Log::record('用户提现:' . json_encode($res));
+
+        //记录
+        if (!empty($res['batch_id'])) {
+            UserGetmoneyLog::create([
+                'userid'       => $userid,
+                'out_trade_no' => $out_trade_no,
+                'money'        => $money,
+                'remark'       => '招聘广告宣传奖励提现',
+                'createtime'   => time(),
+            ]);
+
+            //更改二维码状态
+            $info->status = 1;
+            $info->use_time = time();
+            $info->userid = $userid;
+            $info->money = $money;
+            $info->save();
+
+            page_result(0, "恭喜您,获得现金奖励{$money}元。已直接发放至微信零钱,请注意查收!",['money'=>$money]);
+        } else {
+            page_result(1,'活动有误,请联系管理员确认!');
+        }
+    }
+
+    private function probabilityPick($data) {
+        //计算概率总和
+        $total = 0;
+        foreach ($data as $k => $v) {
+            $data[$k]['odds'] *= 100;
+            $total += $data[$k]['odds'];
+        }
+        $random = mt_rand(1, $total);
+        $current = 0;
+        $count = count($data);
+
+        for ($i = 0; $i < $count; $i++) {
+            $current += $data[$i]['odds']; // 累计当前概率
+            if ($random <= $current) {
+                return $data[$i]['money']; // 如果随机数在当前概率范围内,返回索引
+            }
+        }
+    }
+}

+ 20 - 0
app/mainapp/validate/WorkerReportValidate.php

@@ -0,0 +1,20 @@
+<?php
+
+namespace app\mainapp\validate;
+
+use think\Validate;
+
+class WorkerReportValidate extends Validate
+{
+    protected $rule = [
+        'recruit_id' => 'require',
+        'realname'   => 'require',
+        'mobile'     => 'require|mobile',
+    ];
+
+    protected $message = [
+        'recruit_id' => '数据异常,请重试',
+        'realname'   => '请填写姓名',
+        'mobile'     => '手机号格式不对',
+    ];
+}

+ 27 - 0
app/worker/controller/Outjob.php

@@ -6,6 +6,7 @@ use app\worker\BaseController;
 use app\common\model\AgentMarket as AgentMarketModel;
 use app\common\model\OutRecruit as OutRecruitModel;
 use app\common\model\OutRecruitReport as OutRecruitReportModel;
+use app\common\model\OutCode as OutCodeModel;
 
 use think\facade\Request;
 
@@ -156,4 +157,30 @@ class Outjob extends BaseController
             return view('outjob/market');
         }
     }
+
+    public function print()
+    {
+        return view('outjob/print');
+    }
+
+    /**
+     * 推广码
+     */
+    public function qrcode()
+    {
+        error_reporting(E_ERROR);
+        $code = uniqid();
+        $url  = 'https://linggong.jinjianghc.com/applet/outactivity/index?code=' . $code;
+        OutCodeModel::create([
+            'code'        => $code,
+            'create_time' => time(),
+            'workerid'    => $this->access_worker['id'],
+        ]);
+        header('Content-Type: image/png');
+        ob_clean();
+        $errorCorrectionLevel = "L"; // 纠错级别:L、M、Q、H
+        $matrixPointSize      = "4"; //生成图片大小 :1到10
+        \phpqrcode\QRcode::png($url, false, $errorCorrectionLevel, $matrixPointSize);
+        exit();
+    }
 }

+ 3 - 0
app/worker/view/index.html

@@ -173,6 +173,9 @@
 							<dd>
 								<a lay-href="{:url('/outjob/index')}" lay-text="招聘信息">招聘信息</a>
 							</dd>
+							<dd>
+								<a lay-href="{:url('/outjob/print')}" lay-text="二维码打印">二维码打印</a>
+							</dd>
 						</dl>
 					</li>
 					{/eq}

+ 140 - 0
app/worker/view/outjob/print.html

@@ -0,0 +1,140 @@
+<div class="layui-fluid">
+	<div class="layui-card">
+		<div class="layui-form layui-form-pane layui-card-header layuiadmin-card-header-auto" lay-filter="LAY-outjob-print-search">
+			<div class="layui-form-item">
+				<div class="layui-inline">
+					<label class="layui-form-label">大小</label>
+					<div class="layui-input-block">
+						<select name="size">
+							<option value="box-2cm">2cm</option>
+							<option value="box-3cm">3cm</option>
+							<option value="box-5cm">5cm</option>
+						</select>
+					</div>
+				</div>
+				<div class="layui-inline">
+					<button class="layui-btn" lay-submit lay-filter="LAY-outjob-print-btn">
+						确定
+					</button>
+					<button class="layui-btn print-btn" onclick="print_page()">
+						打印
+					</button>
+				</div>
+			</div>
+		</div>
+
+		<div class="layui-card-body" id="print_view">
+			<style>
+				@page{  margin:0  }
+				.print-body .print-item {margin-top:20px;display:flex;justify-content:space-around;align-items:center;}
+				.print-body .box-2cm {width:76px;height:76px;}
+				.print-body .box-3cm {width:114px;height:114px;}
+				.print-body .box-5cm {width:190px;height:190px;}
+				.print-body .print-item img {width:100%;}
+			</style>
+			<div class="print-body" style="width:794px;height:1123px;border:1px solid #000000;">
+				<div class="print-item">
+					<div class="box-2cm">
+						<img class="qrcode" src="/static/images/qrcode_test.jpg" alt="">
+					</div>
+					<div class="box-2cm">
+						<img class="qrcode" src="/static/images/qrcode_test.jpg" alt="">
+					</div>
+					<div class="box-2cm">
+						<img class="qrcode" src="/static/images/qrcode_test.jpg" alt="">
+					</div>
+					<div class="box-2cm">
+						<img class="qrcode" src="/static/images/qrcode_test.jpg" alt="">
+					</div>
+				</div>
+				<div class="print-item">
+					<div class="box-2cm">
+						<img class="qrcode" src="/static/images/qrcode_test.jpg" alt="">
+					</div>
+					<div class="box-2cm">
+						<img class="qrcode" src="/static/images/qrcode_test.jpg" alt="">
+					</div>
+					<div class="box-2cm">
+						<img class="qrcode" src="/static/images/qrcode_test.jpg" alt="">
+					</div>
+					<div class="box-2cm">
+						<img class="qrcode" src="/static/images/qrcode_test.jpg" alt="">
+					</div>
+				</div>
+				<div class="print-item">
+					<div class="box-2cm">
+						<img class="qrcode" src="/static/images/qrcode_test.jpg" alt="">
+					</div>
+					<div class="box-2cm">
+						<img class="qrcode" src="/static/images/qrcode_test.jpg" alt="">
+					</div>
+					<div class="box-2cm">
+						<img class="qrcode" src="/static/images/qrcode_test.jpg" alt="">
+					</div>
+					<div class="box-2cm">
+						<img class="qrcode" src="/static/images/qrcode_test.jpg" alt="">
+					</div>
+				</div>
+				<div class="print-item">
+					<div class="box-2cm">
+						<img class="qrcode" src="/static/images/qrcode_test.jpg" alt="">
+					</div>
+					<div class="box-2cm">
+						<img class="qrcode" src="/static/images/qrcode_test.jpg" alt="">
+					</div>
+					<div class="box-2cm">
+						<img class="qrcode" src="/static/images/qrcode_test.jpg" alt="">
+					</div>
+					<div class="box-2cm">
+						<img class="qrcode" src="/static/images/qrcode_test.jpg" alt="">
+					</div>
+				</div>
+				<div class="print-item">
+					<div class="box-2cm">
+						<img class="qrcode" src="/static/images/qrcode_test.jpg" alt="">
+					</div>
+					<div class="box-2cm">
+						<img class="qrcode" src="/static/images/qrcode_test.jpg" alt="">
+					</div>
+					<div class="box-2cm">
+						<img class="qrcode" src="/static/images/qrcode_test.jpg" alt="">
+					</div>
+					<div class="box-2cm">
+						<img class="qrcode" src="/static/images/qrcode_test.jpg" alt="">
+					</div>
+				</div>
+			</div>
+		</div>
+	</div>
+</div>
+
+<script>
+	layui.config({
+		base: '/static/echoui/' //静态资源所在路径
+	}).extend({
+		index: 'lib/index' //主入口模块
+	}).use(['index', 'set'], function() {
+		var $ = layui.$,
+			form = layui.form;
+
+		form.on('submit(LAY-outjob-print-btn)', function(data) {
+			$('.print-item div').attr('class',data.field.size)
+		});
+
+	});
+
+	function print_page(){
+		const $ = layui.$;
+		$('.qrcode').each(function(k,v) {
+			$(v).attr('src',layui.setter.baseWorkerUrl + 'outjob/qrcode?v='+k);
+		});
+		layui.layer.load();
+		setTimeout(function(){
+			layui.layer.closeAll();
+			document.body.innerHTML = document.getElementById('print_view').innerHTML;
+			window.print();
+			window.close();
+			location.reload();
+		},2000);
+	}
+</script>

BIN
public/static/images/qrcode_test.jpg