rabin 3 lat temu
rodzic
commit
1fa21d8d30

+ 1 - 1
assets/layadmin/html/inc/script.html

@@ -39,4 +39,4 @@
 <script type="text/javascript" src="../script/lib/excel/excel.js?v16"></script>
 
 <!-- 加载主要js,很乱,后续优化 -->
-<script type="text/javascript" src="../script/lib/manage/main.js?v212"></script>
+<script type="text/javascript" src="../script/lib/manage/main.js?v213"></script>

+ 2 - 1
assets/layadmin/html/project/database/list.html

@@ -183,6 +183,7 @@
     config.table.data = [];
   </script>
   <script>
+    var form; 
   layui.config({
     base: '../script/lib/layui/admin/' //静态资源所在路径
     ,version:true
@@ -191,7 +192,7 @@
     index: 'lib/index' //主入口模块
   }).use(['index', 'contlist', 'table', 'form', 'formSelects', 'console'], function(){
     var table = layui.table;
-    var form = layui.form; 
+    form = layui.form; 
     var formSelects = layui.formSelects;
 
     if ($('#content_2').css('display') != 'none') {

+ 146 - 4
assets/layadmin/html/project/database/update.html

@@ -56,7 +56,7 @@
 <div id="content_2">
   <div class="layui-fluid">
     <div style="display:none;"><span id="list-name">网站设置</span> > <span id="list-project"></span></div>
-    <form method="post" target="f1" class="form1" role="form" autocomplete="off">
+    <form method="post" class="layui-form form1" target="f1" role="form" autocomplete="off">
     <input type="hidden" name="function" id="function" value="msg"/>
     <input type="hidden" name="url" id="url" />
     <input type="hidden" name="project" id="project" />
@@ -78,15 +78,21 @@
   
   <script class="include" system="" path="inc/" file="script">include()</script>
   <script id="update_script">
+  var skuTable;
+  var form;
   layui.config({
     base: '../script/lib/layui/admin/' //静态资源所在路径
+    ,version:true
   }).extend({
     index: 'lib/index', //主入口模块
-    formSelects: 'plugin/formselects/formselects'
-  }).use(['index', 'contlist', 'table', 'form', 'formSelects'], function(){
+    formSelects: 'plugin/formselects/formselects',
+    skuTable: 'plugin/skuTable',
+    sortable: 'plugin/sortable'
+  }).use(['index', 'contlist', 'table', 'form', 'formSelects', 'skuTable'], function(){
     var table = layui.table;
-    var form = layui.form; 
+    form = layui.form; 
     var formSelects = layui.formSelects;
+    skuTable = layui.skuTable;
 
     /*
     $('select').each(function() {
@@ -95,6 +101,142 @@
         }
     });
     */
+    /*
+    var obj = skuTable.render({
+            //规格类型 0统一规格 1多规格
+            isAttributeValue: 0,
+            //规格类型容器id
+            isAttributeElemId: 'fairy-is-attribute',
+            //规格表容器id
+            specTableElemId: 'fairy-spec-table',
+            //sku表容器id
+            skuTableElemId: 'fairy-sku-table',
+            //规格拖拽排序
+            sortable: false,
+            //sku表相同属性值是否合并行
+            rowspan: true,
+            //请求成功返回状态码值
+            requestSuccessCode: 200,
+            //上传接口地址
+            //接口要求返回格式参考 upload.json
+            uploadUrl: './json/upload.json',
+            //统一规格配置项
+            singleSkuTableConfig: {
+                thead: [
+                    {title: '销售价(元)', icon: 'layui-icon-cols'},
+                    {title: '市场价(元)', icon: 'layui-icon-cols'},
+                    {title: '成本价(元)', icon: 'layui-icon-cols'},
+                    {title: '库存', icon: 'layui-icon-cols'},
+                    {title: '状态', icon: ''},
+                ],
+                tbody: [
+                    {type: 'input', field: 'price', value: '', verify: 'required|number', reqtext: '销售价不能为空'},
+                    {type: 'input', field: 'market_price', value: '0', verify: 'required|number', reqtext: '市场价不能为空'},
+                    {type: 'input', field: 'cost_price', value: '0', verify: 'required|number', reqtext: '成本价不能为空'},
+                    {type: 'input', field: 'stock', value: '0', verify: 'required|number', reqtext: '库存不能为空'},
+                    {type: 'select', field: 'status', option: [{key: '启用', value: '1'}, {key: '禁用', value: '0'}], verify: 'required', reqtext: '状态不能为空'},
+                ]
+            },
+            //多规格配置项
+            multipleSkuTableConfig: {
+                thead: [
+                    {title: '图片', icon: ''},
+                    {title: '销售价(元)', icon: 'layui-icon-cols'},
+                    {title: '市场价(元)', icon: 'layui-icon-cols'},
+                    {title: '成本价(元)', icon: 'layui-icon-cols'},
+                    {title: '库存', icon: 'layui-icon-cols'},
+                    {title: '状态', icon: ''},
+                ],
+                tbody: [
+                    {type: 'image', field: 'picture', value: '', verify: '', reqtext: ''},
+                    {type: 'input', field: 'price', value: '', verify: 'required|number', reqtext: '销售价不能为空'},
+                    {type: 'input', field: 'market_price', value: '0', verify: 'required|number', reqtext: '市场价不能为空'},
+                    {type: 'input', field: 'cost_price', value: '0', verify: 'required|number', reqtext: '成本价不能为空'},
+                    {type: 'input', field: 'stock', value: '0', verify: 'required|number', reqtext: '库存不能为空'},
+                    {
+                        type: 'select',
+                        field: 'status',
+                        option: [{key: '启用', value: '1'}, {key: '禁用', value: '0'}],
+                        verify: '',
+                        reqtext: ''
+                    },
+                ]
+            },
+            //商品id 配合specDataUrl和skuDataUrl使用
+            productId: '11',
+            //规格数据, 一般从后台获取
+            specData: [
+                {
+                    id: "1",
+                    title: "颜色",
+                    child: [
+                        {id: "1", title: "红", checked: true},
+                        {id: "2", title: "黄", checked: false},
+                        {id: "3", title: "蓝", checked: false}
+                    ]
+                }, {
+                    id: "2",
+                    title: "尺码",
+                    child: [
+                        {id: "4", title: "S", checked: true},
+                        {id: "5", title: "M", checked: true},
+                        {id: "6", title: "L", checked: false},
+                        {id: "7", title: "XL", checked: false}
+                    ]
+                }, {
+                    id: "3",
+                    title: "款式",
+                    child: [
+                        {id: "8", title: "男款", checked: true},
+                        {id: "9", title: "女款", checked: true}
+                    ]
+                }
+            ],
+            //获取规格数据接口地址,如果为空或者不配置则使用 specData 参数配置
+            //接口要求返回格式参考 specData.json
+            // specDataUrl: './json/specData.json',
+            //sku数据
+            //新增的时候为空对象
+            //编辑的时候可以从后台接收,会自动填充sku表,可以去掉注释看效果
+            //多规格格式
+            // skuData: {
+            //     "skus[1-4-8][picture]": "https://www.baidu.com/img/flexible/logo/pc/result.png",
+            //     "skus[1-4-8][price]": "100",
+            //     "skus[1-4-8][market_price]": "200",
+            //     "skus[1-4-8][cost_price]": "50",
+            //     "skus[1-4-8][stock]": "18",
+            //     "skus[1-4-8][status]": "0",
+            //     "skus[1-4-9][picture]": "",
+            //     "skus[1-4-9][price]": "0",
+            //     "skus[1-4-9][market_price]": "0",
+            //     "skus[1-4-9][cost_price]": "0",
+            //     "skus[1-4-9][stock]": "0",
+            //     "skus[1-4-9][status]": "1",
+            //     "skus[1-5-8][picture]": "",
+            //     "skus[1-5-8][price]": "0",
+            //     "skus[1-5-8][market_price]": "0",
+            //     "skus[1-5-8][cost_price]": "0",
+            //     "skus[1-5-8][stock]": "0",
+            //     "skus[1-5-8][status]": "1",
+            //     "skus[1-5-9][picture]": "",
+            //     "skus[1-5-9][price]": "0",
+            //     "skus[1-5-9][market_price]": "0",
+            //     "skus[1-5-9][cost_price]": "0",
+            //     "skus[1-5-9][stock]": "0",
+            //     "skus[1-5-9][status]": "1"
+            // },
+            //统一规格格式
+            // skuData: {
+            //     'price': '80',
+            //     'market_price': '100',
+            //     'cost_price': '60',
+            //     'stock': '999',
+            //     'status': '0',
+            // }
+            //获取SKU数据接口地址,如果为空或者不配置则使用skuData配置
+            //接口要求返回格式参考 skuData.json
+            // skuDataUrl: './json/skuData.json',
+        });*/
 
     init();
   });

+ 6 - 1
src/Database.php

@@ -4366,8 +4366,13 @@ class Database
                     $function = $v[1];
                     $v[1] = $function();
                 }
+                $link = '';
+                if (isset($v[2]) && $v[2]) {
+                    $link = 'project/database/list?project=' . $this->project . '&table=' . $this->table . '&' . $v[2];
+                    $link = 'href="' . Dever::url($link, 'manage') . '"';
+                }
                 $data[] = '<li class="layui-col-xs3">
-                <a class="layadmin-backlog-body"><h3>'.$v[0].'</h3>
+                <a class="layadmin-backlog-body" '.$link.'><h3>'.$v[0].'</h3>
                   <p><cite>'.$v[1].'</cite></p></a></li>';
             }
         }

+ 35 - 10
src/Lib/Input.php

@@ -663,9 +663,9 @@ class Input
                         }
 
                         $name = $name . '['.$v['id'].']';
-                        $html .= '<input type="hidden" name="'.$name.'[]" value="-1" /><input update_type="checked" class="update_value checkbox-checkall ' . (isset($param['valid']) ? $param['valid'] : '') . '" type="' . $input_type . '" name="temp[]" value="'.$param['name'] . '-' . $k . '" ' . $parent_check . '/> -----【' . $v['name'] . '】-----&nbsp;&nbsp;<br />';
+                        $html .= '<input type="hidden" name="'.$name.'[]" value="-1" /><input update_type="checked" class="update_value checkbox-checkall ' . (isset($param['valid']) ? $param['valid'] : '') . '" type="' . $input_type . '" name="temp[]" value="'.$param['name'] . '-' . $k . '" ' . $parent_check . ' title="【' . $v['name'] . '】" lay-skin="primary"/><br />';
                     } else {
-                        $html .= '<input update_type="checked" class="update_value checkbox-checkall ' . (isset($param['valid']) ? $param['valid'] : '') . '" type="' . $input_type . '" name="temp[]" value="'.$param['name'] . '-' . $k . '"/> -----【' . $v['name'] . '】-----&nbsp;&nbsp;<br />';
+                        $html .= '<input update_type="checked" class="update_value checkbox-checkall ' . (isset($param['valid']) ? $param['valid'] : '') . '" type="' . $input_type . '" name="temp[]" value="'.$param['name'] . '-' . $k . '" title="【' . $v['name'] . '】" lay-skin="primary"/><br />';
                     }
 
                     $span = array('', '');
@@ -673,7 +673,7 @@ class Input
                     if (isset($v['child']) && $v['child']) {
                         //$i = 1;
                         
-                        $html .= '<ul style="list-style:none;margin:0px;display:;" class="">';
+                        $html .= '<ul style="list-style:none;margin:0px;display:;margin-left: 26px;" class="">';
                         foreach ($v['child'] as $ki => $vi) {
                             if (!is_array($vi)) {
                                 $temp = $vi;
@@ -705,16 +705,18 @@ class Input
                             $input = $input_value = '';
 
                             if (isset($vi['func']) && $vi['func']) {
-                                $input .= '[';
+                                $input .= '<ul style="margin-left: 26px;">';
                                 foreach ($vi['func'] as $vf) {
                                     $fcheck = '';
                                     if (isset($param['value']) && in_array('f_' . $vf['id'], $param['value'])) {
                                         $fcheck = 'checked';
                                     }
-                                    $input .= '&nbsp;&nbsp;<input update_type="checked" class="update_value checkbox-checkall-' . $param['name'] . '-'. $k . ' ' . (isset($param['valid']) ? $param['valid'] : '') . '" data-state="'.$state.'" type="' . $param['update'] . '" name="' . $name . '[]" value="f_' . $vf['id'] . '" ' . $fcheck . '/> ' . $span[0] . $vf['name'] . $span[1] . '&nbsp;&nbsp;';
+                                    $input .= '<li style="display:inline"><input update_type="checked" class="update_value checkbox-checkall-' . $param['name'] . '-'. $k . ' ' . (isset($param['valid']) ? $param['valid'] : '') . '" data-state="'.$state.'" type="' . $param['update'] . '" name="' . $name . '[]" value="f_' . $vf['id'] . '" ' . $fcheck . ' lay-skin="primary" title="'.$vf['name'].'"  lay-filter="'.$param['name'].'_'.$k.'_'.$vf['id'].'"/></li>';
+                                    // ' . $span[0] . $vf['name'] . $span[1] . '&nbsp;&nbsp;
                                 }
-                                $input .= ']';
-                            } elseif (isset($param['update_input'])) {
+                                $input .= '</ul>';
+                                $vi['name'] .= '('.count($vi['func']).')';
+                            } elseif (isset($param['update_input']) && $param['update_input']) {
                                 if (isset($param['update_input_data']) && isset($param['update_input_data'][$j])) {
                                     $input_value = $param['update_input_data'][$j];
                                     if ($disabled) {
@@ -731,7 +733,14 @@ class Input
                                 $input = $input . ': <input class="form-control" name="' . $param['name'] . '_input[]" type="text" value="' . $input_value . '" style="width:20%;margin:5px;display:inline" placeholder="' . $param['update_input'] . '" ' . $disabled . '/>';
                             }
 
-                            $html .= '<li><input update_type="checked" class="update_value checkbox-checkall-' . $param['name'] . '-'. $k . ' ' . (isset($param['valid']) ? $param['valid'] : '') . '" data-state="'.$state.'" type="' . $param['update'] . '" name="' . $name . '[]" value="' . $vi['id'] . '" ' . $check . '/> ' . $span[0] . $vi['name'] . $span[1] . '&nbsp;&nbsp;' . $input . '</li>';
+                            //$html .= '<li><input update_type="checked" class="update_value checkbox-checkall-' . $param['name'] . '-'. $k . ' ' . (isset($param['valid']) ? $param['valid'] : '') . '" data-state="'.$state.'" type="' . $param['update'] . '" name="' . $name . '[]" value="' . $vi['id'] . '" ' . $check . ' lay-skin="primary"/> ' . $span[0] . $vi['name'] . $span[1] . '&nbsp;&nbsp;' . $input . '</li>';
+
+                            if (!$input) {
+                                $s = 'style="display:inline"';
+                            } else {
+                                $s = '';
+                            }
+                            $html .= '<li '.$s.'><input update_type="checked" class="update_value checkbox-checkall-' . $param['name'] . '-'. $k . ' ' . (isset($param['valid']) ? $param['valid'] : '') . '" data-state="'.$state.'" type="' . $param['update'] . '" name="' . $name . '[]" value="' . $vi['id'] . '" ' . $check . ' lay-skin="primary" title="'.$vi['name'].'" lay-filter="'.$param['name'].'_'.$k.'"/>' . $input . '</li>';
 
                             //++$i;
                         }
@@ -759,7 +768,7 @@ class Input
                 $param['parent'] .= '_' . $param['name'];
 
                 if ($param['update'] == 'checkbox' && empty($param['checkall'])) {
-                    $html .= '<input update_type="checked" class="checkbox-checkall ' . $param['name'] . ' update_value" type="' . $param['update'] . '" name="temp_' . $param['name'] . '[]" value="' . $param['parent'] . '"/> 全选 &nbsp;&nbsp;';
+                    $html .= '<input update_type="checked" class="checkbox-checkall ' . $param['name'] . ' update_value" type="' . $param['update'] . '" name="temp_' . $param['name'] . '[]" value="' . $param['parent'] . '" lay-skin="primary" title="全选" lay-filter="'.$param['name'].'_all"/>';
                 }
 
                 $i = 0;
@@ -800,7 +809,7 @@ class Input
                     if (isset($param['disabled'])) {
                         $disabled = 'disabled="true"';
                     }
-                    $html .= '<input update_type="checked" class="autoload checkbox-checkall-' . $param['parent'] . ' ' . $param['name'] . ' update_value ' . (isset($param['valid']) ? $param['valid'] : '') . '" type="' . $param['update'] . '" name="' . $param['name'] . '[]" value="' . $k . '" ' . $check . ' ' . $cjs . ' ' . $disabled . '/> ' . $value . ' &nbsp;&nbsp;';
+                    $html .= '<input update_type="checked" class="autoload checkbox-checkall-' . $param['parent'] . ' ' . $param['name'] . ' update_value ' . (isset($param['valid']) ? $param['valid'] : '') . '" type="' . $param['update'] . '" name="' . $param['name'] . '[]" value="' . $k . '" ' . $check . ' ' . $cjs . ' ' . $disabled . ' title="'.$value.'"  lay-skin="primary" lay-filter="'.$param['name'].'_'.$k.'"/>';
 
                     if (isset($param['bind'])) {
                         //$html .= '<script>$(document).ready(function(){$(".checkbox-checkall-'.$param['parent'].'").click();})</script>';
@@ -1400,4 +1409,20 @@ class Input
         $html = '<div class="update_load" id="'.$param['name'].'" data-load="'.Dever::url($load).'" data-cate="'.$cate.'" data-id="'.$param['where_id'].'"></div>';
         return $html;
     }
+
+    /**
+     * 规格设置
+     *
+     * @return string
+     */
+    public static function _sku($param)
+    {
+        $html = '<!-- 规格类型 -->
+        <div id="fairy-is-attribute"></div>
+        <!--商品规格表-->
+        <div id="fairy-spec-table"></div>
+        <!--商品库存表-->
+        <div id="fairy-sku-table"></div>';
+        return $html;
+    }
 }