afa 10 сар өмнө
parent
commit
cbb61ada0e

+ 20 - 13
application/admin/controller/product/Lists.php

@@ -71,8 +71,6 @@ class Lists extends Backend
     public function add()
     {
         if (false === $this->request->isPost()) {
-
-        
             $this->assignconfig('areaCode', []);
             return $this->view->fetch();
         }
@@ -97,7 +95,6 @@ class Lists extends Backend
             $areaArrTxt = json_decode($params['product_area_txt'], true);
             if(empty($areaArr) || empty($areaArrTxt)) throw new ValidateException('请添加商品关联地区');
             unset($params['product_area'], $params['product_area_txt']);
-       
             //商品
             $add   = $this->model->create($params);
             $result= $this->setEqualArea($add->id, $areaArr, $areaArrTxt);
@@ -132,20 +129,32 @@ class Lists extends Backend
         }
         if (false === $this->request->isPost()) {
             $area = $this->productArea::where('product_id', $ids)->where('status', 1)->select();
+            $areaData = array();
             $areaCode = array();
-            $areaTxt = array();
+            $areaTxt  = array();
             foreach ($area as $key =>$item) {
-                if($item->province > 0) $areaCode[$key][0] = $item->province;
-                if($item->city > 0)     $areaCode[$key][1] = $item->city;
-                if($item->area > 0)     $areaCode[$key][2] = $item->area;
-                if($item->county > 0)   $areaCode[$key][3] = $item->county;
+                if($item->province > 0){
+                    $areaData[]        = $item->province;
+                    $areaCode[$key][0] = $item->province;
+                } 
+                if($item->city > 0){
+                    $areaData[]        = $item->city;
+                    $areaCode[$key][1] = $item->city;
+                }
+                if($item->area > 0) {
+                    $areaData[]        = $item->area;
+                    $areaCode[$key][2] = $item->area;
+                }
+                if($item->county > 0)  {
+                    $areaData[]        = $item->county;
+                    $areaCode[$key][3] = $item->county;
+                }
                 $areaTxt[]  = [$item->address];
             }
-            $areaCode = json_encode($areaCode);
-            $this->assignconfig('areaCode', $areaCode);
+            $this->assignconfig('areaData', json_encode($areaData));
             $this->view->assign('row', $row);
             $this->view->assign('areaTxt', json_encode($areaTxt, JSON_UNESCAPED_UNICODE));
-            $this->view->assign('areaCode', $areaCode);
+            $this->view->assign('areaCode', json_encode($areaCode));
             return $this->view->fetch();
         }
         $params = $this->request->post('row/a');
@@ -167,10 +176,8 @@ class Lists extends Backend
             $areaArrTxt = json_decode($params['product_area_txt'], true);
             if(empty($areaArr) || empty($areaArrTxt)) throw new ValidateException('请添加商品关联地区');
             unset($params['product_area'], $params['product_area_txt']);
-
             $row->allowField(true)->save($params);
             $this->productArea::where('product_id', $ids)->where('status', 1)->delete();
-           
             $result= $this->setEqualArea($ids, $areaArr, $areaArrTxt);
             Db::commit();
         } catch (ValidateException|PDOException|Exception $e) {

+ 5 - 32
application/admin/view/product/lists/add.html

@@ -56,25 +56,7 @@
         <label class="control-label col-xs-12 col-sm-2">{:__('关联地区')}:</label>
         <div class="col-xs-12 col-sm-8">
             <div class="block">
-                <!-- <el-cascader-panel
-                :options="options"
-                :props="{ multiple: true, checkStrictly: true }"
-                v-model="data"
-                @change="handleChange"
-                ref="ca"
-                clearable></el-cascader-panel> -->
-                <!-- <treeselect
-                :multiple="true"
-                :options="options"
-                :flat="true"
-                placeholder="Select your favourite(s)..."
-                v-model="data"
-                @input="handleChange"
-                ref="treeselect"
-                :limit="3"
-                />
-              <treeselect-value :value="data" /> -->
-              <treeselect
+            <treeselect
             valueFormat="value"
             :multiple="true"
             :options="options"
@@ -84,9 +66,7 @@
             placeholder="选择关联地区"
             v-model="data"
             @input="handleChange"
-            ref="treeselect"
-            :limit="3"
-          />
+            ref="treeselect"/>
             <template v-slot:value-label="{ node }">
               <span>{{ getNode(node) }}</span>
             </template>
@@ -97,7 +77,6 @@
         </div>    
     </div>
 
-    
     <div class="form-group">
         <label class="control-label col-xs-12 col-sm-2">{:__('Details')}:</label>
         <div class="col-xs-12 col-sm-8">
@@ -114,13 +93,7 @@
     </div>
 </div>
 </form>
-<script src="https://cdn.jsdelivr.net/npm/vue@^2"></script>
-<!-- include vue-treeselect & its styles. you can change the version tag to better suit your needs. -->
-<script src="https://cdn.jsdelivr.net/npm/@riophae/vue-treeselect@^0.4.0/dist/vue-treeselect.umd.min.js"></script>
-<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@riophae/vue-treeselect@^0.4.0/dist/vue-treeselect.min.css">
-<script>
-    // register the component
-   
-  </script>
-
+<script src="__CDN__/assets/libs/vue/vue.js"></script>
+<script src="__CDN__/assets/libs/treeselect/treeselect.js"></script>
+<link href="__CDN__/assets/libs/treeselect/treeselect.css" rel="stylesheet">
 

+ 16 - 5
application/admin/view/product/lists/edit.html

@@ -55,13 +55,21 @@
         <label class="control-label col-xs-12 col-sm-2">{:__('关联地区')}:</label>
         <div class="col-xs-12 col-sm-8">
             <div class="block">
-                <el-cascader-panel
+                <treeselect
+                valueFormat="value"
+                :multiple="true"
                 :options="options"
-                :props="{ multiple: true, checkStrictly: true }"
+                :flat="true"
+                :default-expand-level="1"
+                :sort-value-by="sortValueBy"
+                placeholder="选择关联地区"
                 v-model="data"
-                @change="handleChange"
-                ref="ca"
-                clearable></el-cascader-panel>
+                @input="handleChange"
+                ref="treeselect"/>
+                <template v-slot:value-label="{ node }">
+                  <span>{{ getNode(node) }}</span>
+                </template>
+              </treeselect>
                 <input id="c-product_area" class="form-control" name="row[product_area]" type="hidden" value="{$areaCode|htmlentities}">
                 <input id="c-product_area_txt" class="form-control" name="row[product_area_txt]" type="hidden" value="{$areaTxt|htmlentities}">
             </div>
@@ -84,3 +92,6 @@
     </div>
 </div>
 </form>
+<script src="__CDN__/assets/libs/vue/vue.js"></script>
+<script src="__CDN__/assets/libs/treeselect/treeselect.js"></script>
+<link href="__CDN__/assets/libs/treeselect/treeselect.css" rel="stylesheet">

+ 1 - 1
application/api/controller/Product.php

@@ -23,7 +23,7 @@ class Product extends Api
 
 
     /**
-     * 热销列表   2222
+     * 热销列表
      */
     public function getPopularList(ProductsModel $productsModel, ProductPopular $productPopular, ProductLists $productLists)
     {

+ 67 - 121
public/assets/js/backend/product/lists.js

@@ -74,73 +74,13 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form', 'area','vue', 'ELEMEN
             // 为表格绑定事件
             Table.api.bindevent(table);
             // 修改添加窗口的大小
-            $(".btn-add").data("area", ["60%", "80%"]);
+            $(".btn-add").data("area", ["80%", "80%"]);
             table.on('post-body.bs.table',function () {
-                $('.btn-editone').data("area",["80%","100%"]);
+                $('.btn-editone').data("area",["80%","80%"]);
             });
         },
         add: function () {
-
-                let dataCode = [];
-                if((Config.areaCode).length > 0) dataCode = JSON.parse(Config.areaCode);
-            Vue.component('treeselect', VueTreeselect.Treeselect)
-
-            new Vue({
-              el: '#app',
-              data(){
-                return {
-                  data: [],
-                  options: area,
-                  sortValueBy: "ORDER_SELECTED",
-                  selectedNodes: [],
-                }
-              },
-              methods:{
-                //         handleChange(e){
-                //             let txt = this.$refs.ca.getCheckedNodes(),txtArr = Array();
-                //             txt.forEach(vv => {
-                //                 txtArr.push($.makeArray((vv.pathLabels).join('-')) );
-                //             });
-                //             $('#c-product_area').val(JSON.stringify(this.data))
-                //             $('#c-product_area_txt').val(JSON.stringify(txtArr))
-                            
-                //         }
-                handleChange(selectedValues) {
-              
-                    console.log(selectedValues, "selectedValues==========");
-                    console.log(this.data, "data==========");
-                    this.selectedNodes = this.data.map((item) => {
-                    //   console.log(this.getNode(this.$refs.treeselect.getNode(item.id)),"label=========");
-                      
-                      return { id: item, label: this.getNode(this.$refs.treeselect.getNode(item)) };
-                    });
-                    console.log(this.selectedNodes,"this.selectedNodes============");
-                    
-                },
-                getNode(e1) {
-                  console.log(e1);
-                  let labels = [];
-            
-                  // 递归获取 label
-                  function recurse(node) {
-                    if (node && node.label) {
-                      labels.push(node.label);
-                      if (node.parentNode) {
-                        recurse(node.parentNode); // 继续向上递归
-                      }
-                    }
-                  }
-            
-                  recurse(e1);
-                  // console.log(labels.reverse().join("/"));
-                  
-            
-                  // 返回拼接的 label 路径
-                  return labels.reverse().join("/");
-                },
-              }
-            })
-            // Controller.api.bindevent();
+            Controller.api.bindevent();
         },
         edit: function () {
             Controller.api.bindevent();
@@ -148,68 +88,74 @@ define(['jquery', 'bootstrap', 'backend', 'table', 'form', 'area','vue', 'ELEMEN
         api: {
             bindevent: function () {
                 Form.api.bindevent($("form[role=form]"));
-                let dataCode = [];
-                if((Config.areaCode).length > 0) dataCode = JSON.parse(Config.areaCode);
+                Vue.component('treeselect', VueTreeselect.Treeselect)
+                let areaData = [];
+                if((Config.areaData).length > 0) areaData = JSON.parse(Config.areaData);
+
+                console.log("dataCode", areaData)
                 new Vue({
-                    el: '#app',
-                    data() {
-                        return {
-                            // data: dataCode,
-                            // props: { multiple: true },
-                            // options:area
-                            data: dataCode,
-                            options: area,
-                            sortValueBy: "ORDER_SELECTED",
-                            selectedNodes: [],
-                  };
-                },
-                // components: {
-                //     Treeselect: window.VueTreeselect.treeselect
-                //   },
-                methods:{
-            //         handleChange(e){
-            //             let txt = this.$refs.ca.getCheckedNodes(),txtArr = Array();
-            //             txt.forEach(vv => {
-            //                 txtArr.push($.makeArray((vv.pathLabels).join('-')) );
-            //             });
-            //             $('#c-product_area').val(JSON.stringify(this.data))
-            //             $('#c-product_area_txt').val(JSON.stringify(txtArr))
-                        
-            //         }
-            handleChange(selectedValues) {
-                // console.log(this.$refs.treeselect, "e================");
-          
-                console.log(selectedValues, "selectedValues==========");
-                console.log(this.data, "data==========");
-                this.selectedNodes = this.data.map((item) => {
-                  console.log(this.getNode(this.$refs.treeselect.getNode(item.id)),"=========");
-                  
-                  return { id: item.id, label: this.getNode(this.$refs.treeselect.getNode(item.id)) };
-                });
-              },
-              getNode(e1) {
-                console.log(e1);
-                let labels = [];
-          
-                // 递归获取 label
-                function recurse(node) {
-                  if (node && node.label) {
-                    labels.push(node.label);
-                    if (node.parentNode) {
-                      recurse(node.parentNode); // 继续向上递归
+                  el: '#app',
+                  data(){
+                    return {
+                      data: areaData,
+                      options: area,
+                      sortValueBy: "ORDER_SELECTED",
+                      selectedNodes: [],
                     }
-                  }
-                }
-          
-                recurse(e1);
-                // console.log(labels.reverse().join("/"));
+                  },
+                  methods:{
+                    handleChange(selectedValues) {
+                        let ids= []
+                        let labels= []
+                        this.selectedNodes = this.data.map((item) => {
+                          let obj = this.getNode1(this.$refs.treeselect.getNode(item))
+                          ids.push(obj.result)
+                          labels.push(obj.labels)
+                          return { label: obj.labels,result: obj.result};
+                        });
+                        //console.log(JSON.stringify(ids),JSON.stringify(labels));
+                        $('#c-product_area').val(JSON.stringify(ids))
+                        $('#c-product_area_txt').val(JSON.stringify(labels))
+    
+                    },
+                    getNode(e1) {
+                      let labels = [];
+                      // 递归获取 label
+                      function recurse(node) {
+                        if (node && node.label) {
+                          labels.push(node.label);
+                          if (node.parentNode) {
+                            recurse(node.parentNode); // 继续向上递归
+                          }
+                        }
+                      }
                 
-          
-                // 返回拼接的 label 路径
-                return labels.reverse().join("/");
-              },
-            }
+                      recurse(e1);
+                      // console.log(labels.reverse().join("/"));
+                      // 返回拼接的 label 路径
+                      return labels.reverse().join("-");
+                    },
+    
+                    getNode1(e1) {
+                        let labels = [];
+                        let result = [];
+                        // 递归获取 label
+                        function recurse(node) {
+                          if (node && node.label) {
+                            labels.push(node.label);
+                            result.push(node.id);
+                            if (node.parentNode) {
+                              recurse(node.parentNode); // 继续向上递归
+                            }
+                          }
+                        }
+                        recurse(e1);
+                        // 返回拼接的 label 路径
+                        return {labels:[labels.reverse().join("-")], result:result.reverse()};
+                      },
+                  }
                 })
+                
             },
         }
     };