From 9cb4948789032208966736a02074076956d96f2d Mon Sep 17 00:00:00 2001
From: jiangping <jp@doumee.com>
Date: 星期二, 26 十一月 2024 10:23:55 +0800
Subject: [PATCH] 开发更新

---
 admin/src/api/business/areas.js                    |   43 ++++++++
 admin/src/components/business/OperaAreasWindow.vue |   94 ++++++++++++++++++
 admin/src/views/business/areas.vue                 |  160 ++++++++++++++++++++++++++++++++
 3 files changed, 297 insertions(+), 0 deletions(-)

diff --git a/admin/src/api/business/areas.js b/admin/src/api/business/areas.js
new file mode 100644
index 0000000..803018f
--- /dev/null
+++ b/admin/src/api/business/areas.js
@@ -0,0 +1,43 @@
+import request from '../../utils/request'
+
+// 鏌ヨ
+export function fetchList (data) {
+  // return request.post('/visitsAdmin/cloudService/business/areas/treeList', data, {
+  //   trim: true
+  // })
+  return request.post('/visitsAdmin/cloudService/business/areas/page', data, {
+    trim: true
+  })
+}
+export function listByParentId (data) {
+  return request.post('/visitsAdmin/cloudService/business/areas/listByParentId', data)
+}
+
+// 鍒涘缓
+export function create (data) {
+  return request.post('/visitsAdmin/cloudService/business/areas/create', data)
+}
+
+// 淇敼
+export function updateById (data) {
+  return request.post('/visitsAdmin/cloudService/business/areas/updateById', data)
+}
+
+// 鏍戝舰
+export function treeList (data) {
+  return request.post('/visitsAdmin/cloudService/business/areas/listByParentId', data)
+}
+
+// 鍒犻櫎
+export function deleteById (id) {
+  return request.get(`/visitsAdmin/cloudService/business/areas/delete/${id}`)
+}
+
+// 鎵归噺鍒犻櫎
+export function deleteByIdInBatch (ids) {
+  return request.get('/visitsAdmin/cloudService/business/areas/delete/batch', {
+    params: {
+      ids
+    }
+  })
+}
diff --git a/admin/src/components/business/OperaAreasWindow.vue b/admin/src/components/business/OperaAreasWindow.vue
new file mode 100644
index 0000000..fea3c84
--- /dev/null
+++ b/admin/src/components/business/OperaAreasWindow.vue
@@ -0,0 +1,94 @@
+<template>
+  <GlobalAlertWindow
+    :title="title"
+    :visible.sync="visible"
+    :confirm-working="isWorking"
+    @confirm="confirm"
+  >
+    <el-form :model="form" ref="form" label-width="100px" label-suffix="锛�" :rules="rules">
+      <el-form-item :label="form.type==0?'甯傚悕绉�':'鍘垮尯鍚嶇О'" prop="name">
+        <el-input v-model="form.name" :placeholder="form.type==0?'杈撳叆甯傚悕绉�':'杈撳叆鍘垮尯鍚嶇О'" v-trim/>
+      </el-form-item>
+      <el-form-item label="鎺掑簭鐮�" prop="sortnum">
+        <el-input v-model="form.sortnum" placeholder="璇疯緭鍏ユ帓搴忕爜" v-trim/>
+      </el-form-item>
+    </el-form>
+  </GlobalAlertWindow>
+</template>
+
+<script>
+import BaseOpera from '@/components/base/BaseOpera'
+import GlobalAlertWindow from '@/components/common/GlobalAlertWindow'
+export default {
+  name: 'OperaAreasWindow',
+  extends: BaseOpera,
+  components: { GlobalAlertWindow },
+  data () {
+    return {
+      // 琛ㄥ崟鏁版嵁
+      form: {
+        id: null,
+        parentId: null,
+        name: null,
+        sortnum: '0',
+        type: '',
+      },
+      // 楠岃瘉瑙勫垯
+      rules: {
+      }
+    }
+  },
+  created () {
+    this.config({
+      api: '/business/areas',
+      'field.id': 'id'
+    })
+  },
+  methods: {
+    // 纭鏂板缓
+    __confirmCreate () {
+      this.$refs.form.validate((valid) => {
+        if (!valid) {
+          return
+        }
+        // 璋冪敤鏂板缓鎺ュ彛
+        this.isWorking = true
+        this.api.create(this.form)
+          .then(() => {
+            this.visible = false
+            this.$message.success('鏂板缓鎴愬姛')
+            this.$emit('success', this.form.parentId)
+          })
+          .catch(e => {
+            this.$message.error(e)
+          })
+          .finally(() => {
+            this.isWorking = false
+          })
+      })
+    },
+    // 纭淇敼
+    __confirmEdit () {
+      this.$refs.form.validate((valid) => {
+        if (!valid) {
+          return
+        }
+        // 璋冪敤鏂板缓鎺ュ彛
+        this.isWorking = true
+        this.api.updateById(this.form)
+          .then(() => {
+            this.visible = false
+            this.$message.success('淇敼鎴愬姛')
+            this.$emit('success', this.form.parentId)
+          })
+          .catch(e => {
+            this.$message.error(e)
+          })
+          .finally(() => {
+            this.isWorking = false
+          })
+      })
+    }
+  },
+}
+</script>
diff --git a/admin/src/views/business/areas.vue b/admin/src/views/business/areas.vue
new file mode 100644
index 0000000..3d05d52
--- /dev/null
+++ b/admin/src/views/business/areas.vue
@@ -0,0 +1,160 @@
+<template>
+  <TableLayout :permissions="['business:areas:query']">
+    <!-- 琛ㄦ牸鍜屽垎椤� -->
+    <template v-slot:table-wrap>
+      <el-table
+        ref="table"
+        v-loading="isWorking.search"
+        :data="tableData.list"
+        lazy
+        :load="load"
+        :tree-props="{ children: 'childList', hasChildren: 'hasChildren' }"
+        row-key="id"
+        stripe
+        border
+        :header-row-class-name="'table-header'"
+        class="doumee-element-table"
+        @selection-change="handleSelectionChange"
+      >
+        <el-table-column prop="name" label="鍦板尯鍚嶇О" min-width="100px"></el-table-column>
+        <el-table-column prop="createDate" label="鍒涘缓鏃堕棿" align="center" min-width="140px"></el-table-column>
+        <el-table-column prop="sortnum" label="鎺掑簭鐮�" align="center" min-width="140px"></el-table-column>
+        <el-table-column
+          v-if="containPermissions(['business:areas:update', 'business:areas:create', 'business:areas:delete'])"
+          label="鎿嶄綔"
+          align="center"
+          min-width="220"
+          fixed="right"
+        >
+          <template slot-scope="{ row }">
+            <el-button type="text" @click="edit(row)" v-permissions="['business:areas:update']">缂栬緫</el-button>
+            <el-button v-if="row.type!=2" type="text" @click="createChild(row)" v-permissions="['business:areas:create']">鏂板缓{{ row.type==0 ? '甯�' : '鍖哄幙' }}</el-button>
+            <el-button type="text" @click="deleteById(row)" v-permissions="['business:areas:delete']">鍒犻櫎</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+    </template>
+    <!-- 鏂板缓/淇敼 -->
+    <OperaAreasWindow ref="operaAreasWindow" @success="update"/>
+  </TableLayout>
+</template>
+
+<script>
+import BaseTable from '@/components/base/BaseTable'
+import TableLayout from '@/layouts/TableLayout'
+import Pagination from '@/components/common/Pagination'
+import OperaAreasWindow from '@/components/business/OperaAreasWindow'
+import { listByParentId } from '@/api/business/areas'
+export default {
+  name: 'Areas',
+  extends: BaseTable,
+  components: { TableLayout, Pagination, OperaAreasWindow },
+  data () {
+    return {
+      // 鎼滅储
+      searchForm: {
+        type: 0,
+        parentId: ''
+      },
+      treeMaps: new Map(),
+      parentId: null
+    }
+  },
+  created () {
+    this.config({
+      module: '鐪佸競鍖轰俊鎭〃',
+      api: '/business/areas',
+      'field.id': 'id',
+      'field.main': 'id'
+    })
+    this.search()
+  },
+  methods: {
+
+    // 椤电爜鍙樻洿澶勭悊
+    handlePageChange (pageIndex) {
+
+      this.isWorking.search = true
+      listByParentId(this.searchForm)
+        .then(data => {
+          this.tableData.list = this.dataAddBool(data)
+        })
+        .catch(e => {
+          this.$message.error(e)
+        })
+        .finally(() => {
+          this.isWorking.search = false
+        })
+    },
+    dataAddBool(array) {
+      array.forEach(item => {
+        item.hasChildren = item.type != 2
+        // item.childList = item.childList && this.dataAddBool(item.childList)
+      })
+      return array
+    },
+    load(tree, treeNode, resolve) {
+      this.treeMaps.set(tree.id, { tree, treeNode, resolve })
+      listByParentId({ parentId: tree.id, type: tree.type + 1 })
+        .then(data => {
+          resolve(this.dataAddBool(data||[]))
+        })
+        .catch(e => {
+          this.$message.error(e)
+        })
+        .finally(() => {
+          this.isWorking.search = false
+        })
+    },
+    refreshLoadTree(parentId) {
+      if (this.treeMaps.get(parentId)) {
+        const { tree, treeNode, resolve } = this.treeMaps.get(parentId)
+        this.$set(this.$refs.table.store.states.lazyTreeNodeMap, parentId, [])
+        if (tree) { // 閲嶆柊鎵ц鐖惰妭鐐瑰姞杞藉瓙绾ф搷浣�
+          this.load(tree, treeNode, resolve)
+          if (tree.parentId) { // 鑻ュ瓨鍦ㄧ埛鐖风粨鐐癸紝鍒欐墽琛岀埛鐖疯妭鐐瑰姞杞藉瓙绾ф搷浣滐紝闃叉鏈�鍚庝竴涓瓙鑺傜偣琚垹闄ゅ悗鐖惰妭鐐逛笉鏄剧ず鍒犻櫎鎸夐挳
+            const a = this.treeMaps.get(tree.parentId)
+            this.load(a.tree, a.treeNode, a.resolve)
+          }
+        }
+      } else {
+        this.handlePageChange()
+      }
+    },
+    deleteById (row, childConfirm = true) {
+      // let message = `纭鍒犻櫎${this.module}銆�${row[this.configData['field.main']]}銆戝悧?`
+      let message = `纭鍒犻櫎璇ヨ褰曞悧?`
+      if (childConfirm && row.childList != null && row.childList.length > 0) {
+        // message = `纭鍒犻櫎${this.module}銆�${row[this.configData['field.main']]}銆戝強鍏跺瓙${this.module}鍚�?`
+        message = `纭鍒犻櫎璇ヨ褰曞強鍏跺瓙鏁版嵁鍚�?`
+      }
+      this.$dialog.deleteConfirm(message)
+        .then(() => {
+          this.isWorking.delete = true
+          this.api.deleteById(row[this.configData['field.id']])
+            .then(() => {
+              this.$message.success('鍒犻櫎鎴愬姛')
+              this.refreshLoadTree(row.parentId)
+            })
+            .catch(e => {
+              this.$message.error(e)
+            })
+            .finally(() => {
+              this.isWorking.delete = false
+            })
+        })
+        .catch(() => {})
+    },
+    edit(row) {
+      // this.parentId = row.type==0 ? null : row.type==1 ? '缂栬緫甯�' : '缂栬緫鍖哄幙'
+      this.$refs.operaAreasWindow.open(row.type==0 ? '缂栬緫鐪�' : row.type==1 ? '缂栬緫甯�' : '缂栬緫鍖哄幙', row)
+    },
+    createChild(row) {
+      this.$refs.operaAreasWindow.open(row.type == 0 ? '鏂板缓甯�' : '鏂板缓鍘垮尯', { parentId: row.id, name: '', type: row.type + 1 })
+    },
+    update(parentId) {
+      this.refreshLoadTree(parentId)
+    }
+  }
+}
+</script>

--
Gitblit v1.9.3