Browse Source

分区设置

lilei 4 năm trước cách đây
mục cha
commit
c6f0c05419

+ 87 - 58
src/views/dealerManagement/marketingDivisionSet/editModal.vue

@@ -41,7 +41,7 @@
               <!-- 子级 -->
               <div v-show="item.isOpen==1" class="tree-child">
                 <div v-for="child in item.children" :key="child.id">
-                  <a-checkbox v-model="child.checked" style="width: 100%;" @change="onChange(child,$event)">
+                  <a-checkbox v-model="child.checked" style="width: 100%;" @change="onChange(child,$event,item)">
                     {{ child.checked }}{{ child.name }}
                   </a-checkbox>
                 </div>
@@ -62,6 +62,7 @@
 import { STable, Upload } from '@/components'
 import Editor from '@/components/WEeditor'
 import { getArea } from '@/api/data'
+import { subareaSaveSubareaArea, subareaFindBySn } from '@/api/subarea'
 export default {
   name: 'MarketingDivisionSetEditModal',
   components: { STable, Upload, Editor },
@@ -104,60 +105,24 @@ export default {
     }
   },
   methods: {
-    onChange (item, e) {
+    onChange (item, e, parent) {
       console.log(item, `checked = ${e.target.checked}`)
       item.checked = e.target.checked
-      const hasItemIndex = this.subareaAreaList.findIndex(d => d.areaSn == item.areaSn)
-      // 已存在,则删除
-      if (hasItemIndex >= 0) {
-        this.subareaAreaList.splice(hasItemIndex, 1)
-      } else {
-        // 不存在,添加
-        this.subareaAreaList.push({
-          areaSn: item.areaSn,
-          areaName: item.name,
-          areaType: item.type,
-          areaParentSn: item.parentId
-        })
-      }
-      console.log(this.subareaAreaList)
-
-      // 判断是否存在父级
-      if (item.type == 3) {
-        // 如何子级全部勾选
-        const parent = this.addrProvinceList.find(d => d.areaSn == item.parentId)
-        const plen = parent.children.length
-        const tjNode = this.subareaAreaList.filter(d => d.areaParentSn == item.parentId)
-        console.log(tjNode.length == plen)
-        if (tjNode.length == plen) {
-          console.log(1)
-          // 保存父级
-          this.subareaAreaList.push({
-            areaSn: parent.areaSn,
-            areaName: parent.name,
-            areaType: parent.type,
-            areaParentSn: parent.parentId
-          })
-          // 删除所有子级
-          this.subareaAreaList = this.subareaAreaList.filter(d => d.areaParentSn != item.parentId)
-          parent.checked = true
-        } else {
-          const hasPIndex = this.subareaAreaList.findIndex(d => d.areaSn == item.parentId)
-          // 存在则删除父级
-          if (hasPIndex >= 0) {
-            this.subareaAreaList.splice(hasPIndex, 1)
-          }
-          parent.checked = false
-        }
-      } else {
-        console.log(item.checked)
-        // 父级操作
+      item.noSave = false
+      // 父级
+      if (item.type == 2) {
         item.children && item.children.map(d => {
-          d.disabled = item.checked
           d.checked = item.checked
         })
       }
-
+      // 子级
+      if (item.type == 3) {
+        // 父级节点
+        const hasCheckd = parent.children.filter(k => k.checked)
+        // 是否全选
+        parent.checked = hasCheckd.length == parent.children.length
+        parent.children.map(d => d.noSave = parent.checked)
+      }
       this.addrProvinceList = JSON.parse(JSON.stringify(this.addrProvinceList))
     },
     // 展开收起
@@ -182,14 +147,25 @@ export default {
           if (leve == 'province') {
             this.addrProvinceList = res.data || []
             this.addrProvinceList.map(item => {
+              item.noSave = true
               item.checked = false
               item.children = []
             })
+            // 编辑时获取已选数据
+            if (this.itemId) {
+              this.getChecked()
+            }
           } else if (leve == 'city') {
             item.children = res.data || []
             item.children.map(d => {
-              d.disabled = false
-              d.checked = item.checked
+              // 编辑时回显
+              if (this.itemId) {
+                d.checked = !!this.subareaAreaList.find(o => o.areaSn == d.areaSn)
+                d.noSave = false
+              } else {
+                d.checked = item.checked
+                d.noSave = true
+              }
             })
             this.addrProvinceList = JSON.parse(JSON.stringify(this.addrProvinceList))
           }
@@ -203,24 +179,77 @@ export default {
         }
       })
     },
+    // 过滤数据
+    filterData (list) {
+      list.map(item => {
+        if (item.checked && !item.noSave) {
+          this.subareaAreaList.push({
+            areaSn: item.areaSn,
+            areaName: item.name,
+            areaType: item.type,
+            areaParentSn: item.parentId
+          })
+        } else {
+          if (item.children && item.children.length) {
+            this.filterData(item.children)
+          }
+        }
+      })
+    },
     //  保存
     handleSave () {
       const _this = this
       _this.$refs.ruleForm.validate(valid => {
         if (valid) {
           const formData = JSON.parse(JSON.stringify(_this.form))
+          this.subareaAreaList = []
+          this.filterData(this.addrProvinceList)
           console.log(this.subareaAreaList)
-          // dealerProductBrandSave(formData).then(res => {
-          //   if (res.status == 200) {
-          //     _this.$message.success(res.message)
-          //     _this.$emit('ok')
-          //     _this.isShow = false
-          //   }
-          // })
+          // 编辑
+          if (this.itemId) {
+            formData.subareaSn = this.itemId
+          }
+          formData.subareaAreaList = this.subareaAreaList
+          console.log(formData, 'formData')
+          subareaSaveSubareaArea(formData).then(res => {
+            if (res.status == 200) {
+              _this.$message.success(res.message)
+              _this.$emit('ok')
+              _this.isShow = false
+            }
+          })
         } else {
           return false
         }
       })
+    },
+    // 编辑
+    getChecked () {
+      subareaFindBySn({ sn: this.itemId }).then(res => {
+        console.log(res.data)
+        this.form.subareaName = res.data.subareaName
+        this.subareaAreaList = res.data.subareaAreaList
+        this.form.subareaSn = res.data.subareaSn
+        this.form.id = res.data.id
+        // 回显数据
+        this.showChecked()
+      })
+    },
+    showChecked () {
+      // 省回显
+      this.addrProvinceList.map(item => {
+        item.checked = !!this.subareaAreaList.find(d => d.areaSn == item.areaSn)
+        item.noSave = false
+      })
+      // 市回显
+      const hasCity = this.nowData.subareaAreaList.filter(item => item.citySubareaAreaList && item.citySubareaAreaList.length)
+      console.log(hasCity, 'hasCity.nowData')
+      hasCity.map(item => {
+        // 省
+        const pre = this.addrProvinceList.find(k => k.areaSn == item.areaSn)
+        // 获取子级
+        this.expend(pre)
+      })
     }
   },
   watch: {

+ 7 - 9
src/views/dealerManagement/marketingDivisionSet/list.vue

@@ -32,7 +32,7 @@
       </template>
     </s-table>
     <!-- 编辑分区 -->
-    <marketing-division-set-edit-modal :openModal="openModal" :itemId="itemId" @close="closeModal" />
+    <marketing-division-set-edit-modal :nowData="nowData" :openModal="openModal" :itemId="itemId" @ok="$refs.table.refresh()" @close="closeModal" />
   </a-card>
 </template>
 
@@ -65,7 +65,8 @@ export default {
         })
       },
       openModal: false, //  编辑  弹框
-      itemId: '' //  当前产品id
+      nowData: null,
+      itemId: null //  当前产品id
     }
   },
   methods: {
@@ -92,18 +93,15 @@ export default {
     },
     //  编辑
     handleEdit (row) {
-      this.itemId = row && row.id ? row.id : null
+      this.itemId = row && row.subareaSn ? row.subareaSn : null
+      this.nowData = row
       this.openModal = true
     },
     //  关闭弹框
     closeModal () {
-      this.itemId = ''
+      this.itemId = null
+      this.nowData = null
       this.openModal = false
-    },
-    //  关闭审核弹框
-    closeAuditModal () {
-      this.itemId = ''
-      this.openAuditModal = false
     }
   },
   beforeRouteEnter (to, from, next) {