From 798dcfbbc3ab2a81d1e873b25e00bf5e4ed03aa7 Mon Sep 17 00:00:00 2001
From: liukangdong <898885815@qq.com>
Date: 星期一, 02 十二月 2024 18:11:54 +0800
Subject: [PATCH] ll

---
 admin/src/api/project/ywRoom.js                                    |    3 
 admin/src/views/Inspection/task.vue                                |   18 +
 admin/src/views/Inspection/dot.vue                                 |   41 +-
 admin/src/views/project/projectList.vue                            |   54 +--
 admin/src/views/workorder/components/detail.vue                    |   36 +-
 admin/src/views/client/components/OperaYwCustomerWindow.vue        |  186 ++++++++----
 admin/src/api/Inspection/ywPatrolTask.js                           |    5 
 admin/src/views/workorder/workorderList.vue                        |   14 
 admin/src/views/operation/components/deviceEdit.vue                |    5 
 admin/src/views/operation/device.vue                               |    3 
 admin/src/views/project/components/floorLevel.vue                  |    7 
 admin/src/views/Inspection/components/OperaYwPatrolPointWindow.vue |   61 +++-
 admin/src/views/project/components/OperaYwRoomWindow.vue           |   40 ++
 admin/src/views/client/clientList.vue                              |   10 
 admin/src/views/client/components/config.js                        |    1 
 admin/src/views/Inspection/plan.vue                                |    8 
 admin/src/views/project/components/OperaYwProjectWindow.vue        |   29 +
 admin/src/views/project/housingList.vue                            |    7 
 admin/src/views/workorder/components/config.js                     |    1 
 admin/src/api/Inspection/ywPatrolLine.js                           |    4 
 admin/src/views/project/components/OperaYwBuildingWindow.vue       |   28 +
 admin/src/views/project/buildingList.vue                           |   13 
 admin/src/views/Inspection/components/OperaYwPatrolLineWindow.vue  |  169 ++++++++---
 admin/src/views/Inspection/path.vue                                |   16 
 admin/src/views/client/components/staffEdit.vue                    |   43 ++
 admin/src/views/workorder/components/OperaYwWorkorderWindow.vue    |    4 
 26 files changed, 552 insertions(+), 254 deletions(-)

diff --git a/admin/src/api/Inspection/ywPatrolLine.js b/admin/src/api/Inspection/ywPatrolLine.js
index b4ebbd5..a595535 100644
--- a/admin/src/api/Inspection/ywPatrolLine.js
+++ b/admin/src/api/Inspection/ywPatrolLine.js
@@ -24,6 +24,10 @@
 export function updateById (data) {
   return request.post('/visitsAdmin/cloudService/business/ywPatrolLine/updateById', data)
 }
+export function updateStatusById (data) {
+  return request.post('/visitsAdmin/cloudService/business/ywPatrolLine/updateStatusById', data)
+}
+
 // 璇︽儏
 export function detailById (id) {
   return request.get(`/visitsAdmin/cloudService/business/ywPatrolLine/${id}`)
diff --git a/admin/src/api/Inspection/ywPatrolTask.js b/admin/src/api/Inspection/ywPatrolTask.js
index 81be50a..f7cb835 100644
--- a/admin/src/api/Inspection/ywPatrolTask.js
+++ b/admin/src/api/Inspection/ywPatrolTask.js
@@ -32,6 +32,11 @@
 export function getDetail (data) {
   return request.post(`/visitsAdmin/cloudService/business/ywPatrolTaskRecord/page`, data)
 }
+export function cancelById (id) {
+  return request.get(`/visitsAdmin/cloudService/business/ywPatrolTask/taskCancel`, {
+    params: {id}
+  })
+}
 
 // 鎵归噺鍒犻櫎
 export function deleteByIdInBatch (ids) {
diff --git a/admin/src/api/project/ywRoom.js b/admin/src/api/project/ywRoom.js
index 1c5ac5d..d46c912 100644
--- a/admin/src/api/project/ywRoom.js
+++ b/admin/src/api/project/ywRoom.js
@@ -33,6 +33,9 @@
 export function deleteById (id) {
   return request.get(`/visitsAdmin/cloudService/business/ywRoom/delete/${id}`)
 }
+export function detailById (id) {
+  return request.get(`/visitsAdmin/cloudService/business/ywRoom/${id}`)
+}
 
 // 鎵归噺鍒犻櫎
 export function deleteByIdInBatch (ids) {
diff --git a/admin/src/views/Inspection/components/OperaYwPatrolLineWindow.vue b/admin/src/views/Inspection/components/OperaYwPatrolLineWindow.vue
index 86de3cb..2d2b991 100644
--- a/admin/src/views/Inspection/components/OperaYwPatrolLineWindow.vue
+++ b/admin/src/views/Inspection/components/OperaYwPatrolLineWindow.vue
@@ -1,5 +1,5 @@
 <template>
-  <GlobalWindow :title="title" :visible.sync="visible" :confirm-working="isWorking" @confirm="confirm">
+  <GlobalWindow width="800px" :title="title" :visible.sync="visible" :confirm-working="isWorking" @confirm="confirm">
     <el-form :model="form" ref="form" :rules="rules">
       <el-form-item label="绾胯矾鍚嶇О" prop="name">
         <el-input v-model="form.name" placeholder="璇疯緭鍏ョ嚎璺悕绉�" v-trim />
@@ -8,13 +8,13 @@
         <div class="title">宸℃鐐�</div>
         <el-button type="primary" @click="openModal">娣诲姞宸℃鐐�</el-button>
       </div>
-      <el-table v-loading="isWorking.search" :data="list" stripe>
+      <el-table :data="list" stripe>
         <el-table-column prop="code" label="宸℃鐐圭紪鐮�" min-width="100px"></el-table-column>
         <el-table-column prop="pointName" label="宸℃鐐瑰悕绉�" min-width="100px"></el-table-column>
         <el-table-column prop="name" label="鎵爜鎵撳崱" min-width="100px">
           <template v-slot="scope">
-            <el-switch v-model="scope.row.needScancode" @change="changeStatus" active-value="0"
-              inactive-value="1"></el-switch>
+            <el-switch v-model="scope.row.needScancode" :disabled="true" @change="changeStatus" :active-value="0"
+              :inactive-value="1"></el-switch>
           </template>
         </el-table-column>
         <el-table-column prop="name" label="鎺掑簭鐮�" min-width="100px">
@@ -32,10 +32,36 @@
 
     </el-form>
     <!--  -->
-    <el-dialog title="娣诲姞宸℃鐐�" :close-on-click-modal="false" append-to-body :visible.sync="isShowModal" width="500px">
-      <el-select class="w400" v-model="selPoint" clearable multiple filterable>
+    <el-dialog title="娣诲姞宸℃鐐�" :close-on-click-modal="false" append-to-body :visible.sync="isShowModal" width="780px">
+      <!-- <el-select class="w400" v-model="selPoint" clearable multiple filterable>
         <el-option v-for="item in pointList" :value="item.id" :label="item.name"></el-option>
-      </el-select>
+      </el-select> -->
+      <el-form ref="searchForm" :model="searchForm" label-width="80px" inline>
+        <el-form-item label="宸℃鐐�" prop="name">
+          <el-input v-model="searchForm.name" placeholder="璇疯緭鍏ュ贰妫�鐐瑰悕绉�/缂栫爜" @keypress.enter.native="search"></el-input>
+        </el-form-item>
+        <el-form-item label="宸℃鍖哄煙">
+          <el-cascader v-model="searchForm.areaIds" @change="changeSel" placeholder="璇烽�夋嫨宸℃鍖哄煙" clearable
+            :options="areaList" :props="{
+              label: 'name',
+              value: 'id',
+              children: 'childCategoryList'
+            }"></el-cascader>
+        </el-form-item>
+        <el-button type="primary" @click="initData">鎼滅储</el-button>
+        <el-button @click="reset">閲嶇疆</el-button>
+      </el-form>
+
+      <el-table @selection-change="handleSelectionChange" v-loading="isWorking.search" :data="pointList" stripe>
+        <el-table-column type="selection" width="55" align="center" />
+        <el-table-column prop="code" label="宸℃鐐圭紪鐮�" min-width="100px"></el-table-column>
+        <el-table-column prop="name" label="宸℃鐐瑰悕绉�" min-width="100px"></el-table-column>
+        <el-table-column prop="deviceName" label="宸℃鐐瑰悕绉�" min-width="100px"></el-table-column>
+        <el-table-column prop="areaName" label="宸℃鐐瑰悕绉�" min-width="100px"></el-table-column>
+      </el-table>
+      <pagination @size-change="handleSizeChange" @current-change="handlePageChange" :pagination="pagination">
+      </pagination>
+
       <span slot="footer" class="dialog-footer">
         <el-button @click="isShowModal = false">鍙� 娑�</el-button>
         <el-button type="primary" @click="subModal">纭� 瀹�</el-button>
@@ -47,13 +73,15 @@
 <script>
 import BaseOpera from '@/components/base/BaseOpera'
 import GlobalWindow from '@/components/common/GlobalWindow'
-import { getFetchList } from '@/api/Inspection/ywPatrolPoint'
-import { create,detailById } from '@/api/Inspection/ywPatrolLine'
+import Pagination from '@/components/common/Pagination'
+import { fetchList as getFetchList } from '@/api/Inspection/ywPatrolPoint'
+import { create,updateById, detailById } from '@/api/Inspection/ywPatrolLine'
 import { Message } from 'element-ui'
+import { fetchList } from '@/api/business/category'
 export default {
   name: 'OperaYwPatrolLineWindow',
   extends: BaseOpera,
-  components: { GlobalWindow },
+  components: { GlobalWindow, Pagination },
   data() {
     return {
       // 琛ㄥ崟鏁版嵁
@@ -61,14 +89,29 @@
         name: '',
       },
       selPoint: [],
+
       pointList: [],
+      selList: [],
+      areaList: [],
+      searchForm: {
+        name: '',
+        areaId: '',
+        areaIds: []
+      },
+      pagination: {
+        pageSize: 10,
+        page: 1,
+        total: 0
+      },
+
       list: [],
+      isWorking: false,
       isShowModal: false,
       // 楠岃瘉瑙勫垯
       rules: {
         name: [{ required: true, message: '璇疯緭鍏�' }],
         selPoint: [{ type: 'array', required: true, message: '璇疯緭鍏�' }],
-      }
+      },
     }
   },
   created() {
@@ -79,14 +122,22 @@
   methods: {
     confirm() {
       const { form, list } = this
-      if (list.length == 0) return Message.warning('璇峰厛閫夋嫨宸℃鐐�')
-      form.linePointList = list
-      create({ ...form }).then(res => {
-        Message.success('淇濆瓨鎴愬姛')
-        this.$emit('success')
-        this.close()
-        
+      this.$refs['form'].validate((valid) => {
+        if (valid) {
+          if (list.length == 0) return Message.warning('璇峰厛閫夋嫨宸℃鐐�')
+          form.linePointList = list
+          this.isWorking = true
+          let  fn = form.id ? updateById : create
+          fn({ ...form }).then(res => {
+            Message.success('淇濆瓨鎴愬姛')
+            this.isWorking = false
+            this.close()
+          }, () => {
+            this.isWorking = false
+          })
+        }
       })
+
     },
     getDetail(row) {
       detailById(row.id).then(res => {
@@ -94,12 +145,45 @@
         this.list = res.linePointList || []
       })
     },
+    getProject() {
+      fetchList({
+        model: { type: 4 },
+        capacity: 1000,
+        page: 1,
+      }).then(res => {
+        this.areaList = res.records || []
+      })
+    },
     initData() {
       this.list = []
-
-      getFetchList({}).then(res => {
-        this.pointList = res || []
+      const { searchForm, pagination } = this
+      getFetchList({
+        page: pagination.page,
+        capacity: pagination.pageSize,
+        model: { ...searchForm }
+      }).then(res => {
+        this.pointList = res.records || []
+        this.pagination.total = res.total
       })
+    },
+    handleSelectionChange(val) {
+      this.selList = val
+    },
+    reset() {
+      this.searchForm = {
+        name: '',
+        areaId: '',
+        areaIds: []
+      }
+      this.initData()
+    },
+    handleSizeChange(val) {
+      this.pagination.pageSize = val
+      this.initData()
+    },
+    handlePageChange(val) {
+      this.pagination.page = val
+      this.initData()
     },
     handleDel(row) {
       this.list.splice(row.$index, 1)
@@ -110,36 +194,25 @@
     },
     openModal() {
       this.selPoint = this.list.map(i => i.id)
+      this.getProject()
       this.isShowModal = true
     },
+    changeSel(e) {
+      if (e && e.length == 1) {
+      } else if (e && e.length == 2) {
+        this.$set(this.searchForm, 'areaId', e[1])
+      } else {
+      }
+      this.initData()
+    },
     subModal() {
-      const { selPoint, pointList, list } = this
-      if (selPoint.length == 0) return Message.warning('璇峰厛閫夋嫨宸℃鐐�')
-      let arr = []
-      // 鍙栧嚭閫変腑鍒楄〃
-      pointList.forEach(item => {
-        selPoint.forEach(item2 => {
-          if (item.id === item2) {
-            arr.push(item)
-          }
-        })
-      })
-      // 鍚宭ist鍘婚噸
-      list.forEach(item => {
-        arr.forEach((item2, i) => {
-          if (item.id === item2.id) {
-            arr.splice(i, 1)
-          }
-        })
-      })
-      // 娣诲姞
-      arr.forEach(i => {
-        this.list.push({
-          needScancode: '1',
-          pointName: i.name,
-          pointId: i.id,
-          code: i.code
-        })
+      this.list = this.selList.map(item => {
+        return {
+          needScancode: 0,
+          pointName: item.name,
+          pointId: item.id,
+          code: item.code
+        }
       })
       this.isShowModal = false
     },
diff --git a/admin/src/views/Inspection/components/OperaYwPatrolPointWindow.vue b/admin/src/views/Inspection/components/OperaYwPatrolPointWindow.vue
index ca12d05..aa26f0f 100644
--- a/admin/src/views/Inspection/components/OperaYwPatrolPointWindow.vue
+++ b/admin/src/views/Inspection/components/OperaYwPatrolPointWindow.vue
@@ -30,7 +30,7 @@
         <el-input type="textarea" :rows="4" v-model="form.content" placeholder="璇疯緭鍏�" />
       </el-form-item>
       <el-form-item label="涓婁紶鍥剧墖" prop="imgurl">
-        <UploadAvatarImage :file="{ 'imgurlfull': form.fileFullUrl, 'imgurl': form.fileurl }"
+        <UploadAvatarImage :file="{ 'imgurlfull': form.fileFullUrl, 'imgurl': form.fileUrl }"
           :uploadData="{ folder: 'ywPatrol/' }" @uploadSuccess="uploadAvatarSuccess" @uploadEnd="isUploading = false"
           @uploadBegin="isUploading = true" />
       </el-form-item>
@@ -83,6 +83,30 @@
       this.title = title
       this.visible = true
       this.initData()
+      if (row == null) {
+        this.$nextTick(() => {
+          this.form = {
+            name: '',
+            code: '',
+            content: '',
+            imgurl: '',
+            areaId: 0,
+            areaIds: [],
+            addr: ''
+          }
+          this.$refs.form.resetFields()
+
+          this.form[this.configData['field.id']] = null
+        })
+        fetchList({
+          model: { type: 4 },
+          capacity: 1000,
+          page: 1,
+        }).then(res => {
+          this.cateList = res.records || []
+        })
+        return
+      }
       if (row && row.id) {
         this.getDetail(row)
       }
@@ -90,34 +114,33 @@
     getDetail(row) {
       detail(row.id).then(res => {
         this.form = { ...res }
-        // this.$set(this.form, 'areaId', res.areaId)
-        // console.log('res', res)
-        // console.log('res', this.form)
-
-      })
-    },
-    initData() {
-      fetchList({
-        model: { type: 4 },
-        capacity: 1000,
-        page: 1,
-      }).then(res => {
-        this.cateList = res.records || []
-        setTimeout(() => {
-          const areaId = this.form.areaId
+        if (res.longitude && res.latitude) {
+          this.$set(this.form, 'lnglat', res.longitude + ',' + res.latitude)
+        }
+        fetchList({
+          model: { type: 4 },
+          capacity: 1000,
+          page: 1,
+        }).then(ress => {
+          this.cateList = ress.records || []
+          const areaId = res.areaId
           if (areaId) {
             this.cateList.forEach(item => {
               if (item.childCategoryList) {
                 item.childCategoryList.forEach(item2 => {
                   if (item2.id == areaId) {
                     this.$set(this.form, 'areaIds', [item.id, item2.id])
+
                   }
                 })
               }
             })
           }
-        }, 1300)
+        })
+
       })
+    },
+    initData() {
       getDeiceList({
         model: {},
         capacity: 1000,
@@ -146,8 +169,8 @@
       }
     },
     uploadAvatarSuccess(file) {
-      this.form.fileurl = file.imgurl
-      this.form.fileFullUrl = file.imgurlfull
+      this.$set(this.form, 'fileUrl', file.imgurl)
+      this.$set(this.form, 'fileFullUrl', file.imgurlfull)
     },
   }
 }
diff --git a/admin/src/views/Inspection/dot.vue b/admin/src/views/Inspection/dot.vue
index d86f690..943bb51 100644
--- a/admin/src/views/Inspection/dot.vue
+++ b/admin/src/views/Inspection/dot.vue
@@ -10,14 +10,11 @@
           :options="areaList" :props="{
             label: 'name',
             value: 'id',
-            children: 'childCategoryList',
-            checkStrictly: true
+            children: 'childCategoryList'
           }"></el-cascader>
       </el-form-item>
       <section>
         <el-button type="primary" @click="search">鎼滅储</el-button>
-        <el-button type="primary" :loading="isWorking.export" v-permissions="['business:ywpatrolline:exportExcel']"
-          @click="exportExcel">瀵煎嚭</el-button>
         <el-button @click="reset">閲嶇疆</el-button>
       </section>
     </el-form>
@@ -26,11 +23,11 @@
       <ul class="toolbar" v-permissions="['business:ywpatrolpoint:create', 'business:ywpatrolpoint:delete']">
         <li><el-button type="primary" @click="editClick()" icon="el-icon-plus"
             v-permissions="['business:ywpatrolpoint:create']">鏂板缓</el-button></li>
-        <li><el-button @click="deleteByIdInBatch" icon="el-icon-delete"
-            v-permissions="['business:ywpatrolpoint:delete']">鍒犻櫎</el-button></li>
+        <!-- <li><el-button @click="deleteByIdInBatch" icon="el-icon-delete"
+            v-permissions="['business:ywpatrolpoint:delete']">鍒犻櫎</el-button></li> -->
       </ul>
       <el-table v-loading="isWorking.search" :data="tableData.list" stripe @selection-change="handleSelectionChange">
-        <el-table-column type="selection" width="55"></el-table-column>
+        <!-- <el-table-column type="selection" width="55"></el-table-column> -->
         <el-table-column prop="code" label="宸℃鐐圭紪鐮�" min-width="100px"></el-table-column>
         <el-table-column prop="name" label="宸℃鐐瑰悕绉�" min-width="100px"></el-table-column>
         <el-table-column prop="deviceName" label="鍏宠仈璁惧" min-width="100px"></el-table-column>
@@ -67,19 +64,9 @@
     return {
       // 鎼滅储
       searchForm: {
-        id: '',
-        creator: '',
-        createDate: '',
-        editor: '',
-        editDate: '',
-        isdeleted: '',
         name: '',
-        remark: '',
-        status: '',
-        sortnum: '',
-        imgurl: '',
         areaId: '',
-        addr: ''
+        areaIds: []
       },
       areaList: []
     }
@@ -95,9 +82,17 @@
     this.getProject()
   },
   methods: {
+    reset() {
+      this.searchForm = {
+        name: '',
+        areaId: '',
+        areaIds: []
+      }
+      this.search()
+    },
     getProject() {
       fetchList({
-        model: {type: 4},
+        model: { type: 4 },
         capacity: 1000,
         page: 1,
       }).then(res => {
@@ -114,14 +109,10 @@
     },
     changeSel(e) {
       if (e && e.length == 1) {
-        this.$set(this.searchForm, 'catePId', e[0])
-        this.$set(this.searchForm, 'cateId', '')
       } else if (e && e.length == 2) {
-        this.$set(this.searchForm, 'catePId', e[0])
-        this.$set(this.searchForm, 'cateId', e[1])
+        this.$set(this.searchForm, 'areaId', e[1])
       } else {
-        this.$set(this.searchForm, 'catePId', '')
-        this.$set(this.searchForm, 'cateId', '')
+
       }
       this.search()
     },
diff --git a/admin/src/views/Inspection/path.vue b/admin/src/views/Inspection/path.vue
index 03e8b95..4bab064 100644
--- a/admin/src/views/Inspection/path.vue
+++ b/admin/src/views/Inspection/path.vue
@@ -26,7 +26,7 @@
         <el-table-column prop="lineAmount" label="宸℃鐐规暟閲�" min-width="100px"></el-table-column>
         <el-table-column prop="status" label="鐘舵��" min-width="100px">
           <template v-slot="scope">
-            <el-switch v-model="scope.row.status" @change="changeStatus" active-value="0" inactive-value="1">
+            <el-switch v-model="scope.row.status" @change="e => changeStatus(scope.row)" :active-value="0" :inactive-value="1">
             </el-switch>
           </template>
         </el-table-column>
@@ -53,6 +53,8 @@
 import TableLayout from '@/layouts/TableLayout'
 import Pagination from '@/components/common/Pagination'
 import OperaYwPatrolLineWindow from './components/OperaYwPatrolLineWindow'
+import { updateStatusById } from '@/api/Inspection/ywPatrolLine'
+import { Message } from 'element-ui'
 export default {
   name: 'YwPatrolLine',
   extends: BaseTable,
@@ -85,8 +87,16 @@
     this.search()
   },
   methods: {
-    changeStatus() {
-
+    changeStatus(row) {
+      updateStatusById({ 
+        id: row.id,
+        status: row.status
+       }).then(res => {
+        Message.success('鏇存柊鎴愬姛')
+        this.search()
+      }, () => {
+        this.search()
+      })
     },
     editClick(row) {
       if (row && row.id) {
diff --git a/admin/src/views/Inspection/plan.vue b/admin/src/views/Inspection/plan.vue
index 2ae79a1..6320d32 100644
--- a/admin/src/views/Inspection/plan.vue
+++ b/admin/src/views/Inspection/plan.vue
@@ -2,8 +2,8 @@
   <TableLayout :permissions="['business:ywpatrolscheme:query']">
     <!-- 鎼滅储琛ㄥ崟 -->
     <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
-      <el-form-item label="璁″垝鏍囬" prop="title">
-        <el-input v-model="searchForm.title" placeholder="璇疯緭鍏ユ爣棰�" @keypress.enter.native="search"></el-input>
+      <el-form-item label="璁″垝鍚嶇О" prop="title">
+        <el-input v-model="searchForm.title" placeholder="璇疯緭鍏ヨ鍒掑悕绉�" @keypress.enter.native="search"></el-input>
       </el-form-item>
       <el-form-item label="璁″垝鏃ユ湡" prop="selDate">
         <el-date-picker type="daterange" v-model="searchForm.selDate" clearable value-format="yyyy-MM-dd"
@@ -22,8 +22,8 @@
       <ul class="toolbar" v-permissions="['business:ywpatrolscheme:create', 'business:ywpatrolscheme:delete']">
         <li><el-button type="primary" @click="editClick()" icon="el-icon-plus"
             v-permissions="['business:ywpatrolscheme:create']">鏂板缓</el-button></li>
-        <li><el-button @click="deleteByIdInBatch" icon="el-icon-delete"
-            v-permissions="['business:ywpatrolscheme:delete']">鍒犻櫎</el-button></li>
+        <!-- <li><el-button @click="deleteByIdInBatch" icon="el-icon-delete"
+            v-permissions="['business:ywpatrolscheme:delete']">鍒犻櫎</el-button></li> -->
       </ul>
       <el-table v-loading="isWorking.search" :data="tableData.list" stripe @selection-change="handleSelectionChange">
         <el-table-column type="selection" width="55"></el-table-column>
diff --git a/admin/src/views/Inspection/task.vue b/admin/src/views/Inspection/task.vue
index e3a57eb..b11267c 100644
--- a/admin/src/views/Inspection/task.vue
+++ b/admin/src/views/Inspection/task.vue
@@ -56,7 +56,7 @@
         >
           <template slot-scope="{row}">
             <el-button type="text" @click="handleDetail(row)">鏌ョ湅璇︽儏</el-button>
-            <el-button type="text" @click="cancelById(row)" v-permissions="['business:ywpatroltask:delete']">鍙栨秷</el-button>
+            <el-button v-if="row.status == 0" type="text" class="red" @click="cancelById(row)" v-permissions="['business:ywpatroltask:delete']">鍙栨秷</el-button>
           </template>
         </el-table-column>
       </el-table>
@@ -77,6 +77,8 @@
 import TableLayout from '@/layouts/TableLayout'
 import Pagination from '@/components/common/Pagination'
 import TaskDetail from './components/taskDetail'
+import { cancelById } from '@/api/Inspection/ywPatrolTask'
+import { Message } from 'element-ui'
 export default {
   name: 'YwPatrolTask',
   extends: BaseTable,
@@ -105,8 +107,18 @@
       this.$refs.TaskDetailRef.id = row.id
       this.$refs.TaskDetailRef.getDetail()
     },
-    cancelById() {
-
+    cancelById(row) {
+      this.$confirm('纭畾鍙栨秷褰撳墠浠诲姟, 鏄惁缁х画?', '鎻愮ず', {
+        confirmButtonText: '纭畾',
+        cancelButtonText: '鍙栨秷',
+        type: 'warning'
+      }).then(() => {
+        cancelById(row.id).then(res => {
+          Message.success('鍙栨秷鎴愬姛')
+          this.search()
+        })
+      })
+      // 
     },
   }
 }
diff --git a/admin/src/views/client/clientList.vue b/admin/src/views/client/clientList.vue
index d6c97b7..22dba3f 100644
--- a/admin/src/views/client/clientList.vue
+++ b/admin/src/views/client/clientList.vue
@@ -7,8 +7,6 @@
       </el-form-item>
       <section>
         <el-button type="primary" @click="search">鎼滅储</el-button>
-        <el-button type="primary" :loading="isWorking.export" v-permissions="['business:ywcustomer:exportExcel']"
-          @click="exportExcel">瀵煎嚭</el-button>
         <el-button @click="reset">閲嶇疆</el-button>
       </section>
     </el-form>
@@ -31,10 +29,14 @@
         <el-table-column prop="memberName" label="鑱旂郴浜�" min-width="100px"></el-table-column>
         <el-table-column prop="memberPhone" label="鑱旂郴鐢佃瘽" min-width="100px"></el-table-column>
         <!-- <el-table-column prop="idcardNo" label="韬唤璇佸彿" min-width="100px"></el-table-column> -->
-        <el-table-column prop="creditCard" label="缁熶竴淇$敤浠g爜" min-width="100px"></el-table-column>
+        <el-table-column prop="" label="缁熶竴淇$敤浠g爜" min-width="100px">
+          <template v-slot="{row}">
+            <span>{{ row.creditCard || '-' }}</span>
+          </template>
+        </el-table-column>
         <el-table-column prop="validity" label="钀ヤ笟鏈熼檺" min-width="100px">
           <template slot-scope="{row}">
-            <span>{{ row.validity == '2099-12-31' ? '闀挎湡' : row.validity }}</span>
+            <span>{{ row.validity == '2099-12-31' ? '闀挎湡' : row.validity ? row.validity : '-' }}</span>
           </template>
         </el-table-column>
         <el-table-column label="榛樿鍙戠エ绫诲瀷" min-width="100px">
diff --git a/admin/src/views/client/components/OperaYwCustomerWindow.vue b/admin/src/views/client/components/OperaYwCustomerWindow.vue
index a7b8bf9..bbfb6b6 100644
--- a/admin/src/views/client/components/OperaYwCustomerWindow.vue
+++ b/admin/src/views/client/components/OperaYwCustomerWindow.vue
@@ -1,81 +1,98 @@
 <template>
-  <GlobalWindow :title="title" width="900px" :visible.sync="visible" :confirm-working="isWorking" @confirm="confirm">
+  <GlobalWindow :title="title" width="800px" :visible.sync="visible" :confirm-working="isWorking" @confirm="confirm">
     <el-form :model="form" ref="form" :rules="rules">
       <div class="list">
         <div class="title">鍩虹淇℃伅</div>
-        <el-form-item label="瀹㈡埛" prop="name">
+        <el-form-item label="瀹㈡埛鍚嶇О" prop="name">
           <div class="df">
             <el-input v-model="form.name" placeholder="璇疯緭鍏ュ鎴�" v-trim />
-            <el-checkbox v-model="form.type" class="ml10" true-label="0" false-label="1">涓汉</el-checkbox>
+            <el-checkbox v-model="form.type" class="ml10" :true-label="0" :false-label="1">涓汉</el-checkbox>
           </div>
         </el-form-item>
         <el-form-item label="琛屼笟鍒嗙被" prop="industryId">
           <el-select v-model="form.industryId" clearable filterable>
             <el-option v-for="item in cateList" :value="item.id" :label="item.name" />
+            <div key="21" class="df_center mt10"><el-button type="primary" plain class="w200"
+                @click="openTrade">娣诲姞</el-button>
+            </div>
           </el-select>
         </el-form-item>
         <el-form-item label="瀹㈡埛缂栧彿" prop="code">
           <el-input v-model="form.code" placeholder="璇疯緭鍏�" v-trim />
         </el-form-item>
-        <div class="title">榛樿鑱旂郴浜�</div>
-        <el-form-item label="濮撳悕" prop="member.name">
-          <el-input v-model="form.member.name" placeholder="璇疯緭鍏�" v-trim />
-        </el-form-item>
-        <el-form-item label="鎵嬫満鍙�" prop="member.phone">
-          <el-input v-model="form.member.phone" placeholder="璇疯緭鍏ユ墜鏈哄彿" v-trim />
-        </el-form-item>
-        <el-form-item label="韬唤">
-          <el-select v-model="form.member.highCheckor" filterable>
-            <el-option :value="0" label="鑰佹澘/瓒呯骇绠$悊鍛�" />
-            <el-option :value="1" label="浜轰簨/绠$悊鍛�" />
-            <el-option :value="2" label="鍛樺伐/鏅�氬憳宸�" />
+        <template v-if="!form.id">
+          <div class="title">榛樿鑱旂郴浜�</div>
+          <el-form-item label="濮撳悕" prop="member.name">
+            <el-input v-model="form.member.name" placeholder="璇疯緭鍏�" v-trim />
+          </el-form-item>
+          <el-form-item label="鎵嬫満鍙�" prop="member.phone">
+            <el-input v-model="form.member.phone" placeholder="璇疯緭鍏ユ墜鏈哄彿" v-trim />
+          </el-form-item>
+          <el-form-item label="韬唤">
+            <el-select v-model="form.member.highCheckor" filterable>
+              <el-option :value="0" label="鑰佹澘/瓒呯骇绠$悊鍛�" />
+              <el-option :value="1" label="浜轰簨/绠$悊鍛�" />
+              <el-option :value="2" label="鍛樺伐/鏅�氬憳宸�" />
+            </el-select>
+          </el-form-item>
+          <el-form-item label="璇佷欢绫诲瀷">
+            <el-select v-model="form.member.idcardType" filterable>
+              <el-option :value="0" label="韬唤璇�" />
+              <el-option :value="1" label="娓境璇佷欢" />
+              <el-option :value="2" label="鎶ょ収" />
+            </el-select>
+          </el-form-item>
+          <el-form-item label="璇佷欢鍙风爜" prop="member.idcardNo">
+            <el-input v-model="form.member.idcardNo" placeholder="璇疯緭鍏�" v-trim />
+          </el-form-item>
+          <el-form-item label="閭" prop="email">
+            <el-input v-model="form.member.email" placeholder="璇疯緭鍏ラ偖绠�" v-trim />
+          </el-form-item>
+        </template>
+        <el-form-item v-else label="榛樿鑱旂郴浜�" prop="memberId">
+          <el-select v-model="form.memberId" clearable filterable>
+            <el-option v-for="item in clientList" :value="item.id" :label="item.name" />
+            <div key="11" class="df_center mt10"><el-button type="primary" plain class="w200"
+                @click="openClient">娣诲姞</el-button>
+            </div>
           </el-select>
         </el-form-item>
-        <el-form-item label="璇佷欢绫诲瀷">
-          <el-select v-model="form.member.idcardType" filterable>
-            <el-option :value="0" label="韬唤璇�" />
-            <el-option :value="1" label="娓境璇佷欢" />
-            <el-option :value="2" label="鎶ょ収" />
-          </el-select>
-        </el-form-item>
-        <el-form-item label="璇佷欢鍙风爜" prop="member.idcardNo">
-          <el-input v-model="form.member.idcardNo" placeholder="璇疯緭鍏�" v-trim />
-        </el-form-item>
-        <el-form-item label="閭" prop="email">
-          <el-input v-model="form.member.email" placeholder="璇疯緭鍏ラ偖绠�" v-trim />
-        </el-form-item>
-
-        <div class="title">璐︽埛淇℃伅</div>
-        <el-form-item label="寮�鎴烽摱琛�" prop="accountBank">
-          <el-input v-model="form.accountBank" placeholder="璇疯緭鍏ュ紑鎴烽摱琛�" v-trim />
-        </el-form-item>
-        <el-form-item label="璐﹀彿" prop="accountNo">
-          <el-input v-model="form.accountNo" placeholder="璇疯緭鍏ヨ处鍙�" v-trim />
-        </el-form-item>
-        <el-form-item label="鐢佃瘽" prop="accountPhone">
-          <el-input v-model="form.accountPhone" placeholder="璇疯緭鍏ヨ处鎴风數璇�" v-trim />
-        </el-form-item>
-        <el-form-item label="缁熶竴淇$敤浠g爜" prop="creditCard">
-          <el-input v-model="form.creditCard" placeholder="璇疯緭鍏ョ粺涓�淇$敤浠g爜" v-trim />
-        </el-form-item>
-        <el-form-item label="榛樿鍙戠エ绫诲瀷" prop="fpType">
-          <el-select v-model="form.fpType" clearable filterable>
-            <el-option :value="0" label="澧炲�肩◣鏅�氬彂绁�" />
-            <el-option :value="1" label="澧炲�肩◣涓撶敤鍙戠エ" />
-          </el-select>
-        </el-form-item>
-        <el-form-item label="娉ㄥ唽鍦板潃" prop="accountAddr">
-          <el-input v-model="form.accountAddr" placeholder="璇疯緭鍏ヨ处鍙锋敞鍐屽湴鍧�" v-trim />
-        </el-form-item>
-        <el-form-item label="钀ヤ笟鏈熼檺">
-          <div class="df">
-            <el-date-picker type="date" v-model="form.validity" value-format="yyyy-MM-dd" placeholder="璇烽�夋嫨" />
-            <el-checkbox v-model="form.selLangTime" @change="changeValid" class="ml10">闀挎湡</el-checkbox>
-          </div>
-        </el-form-item>
+        <template v-if="form.type == 1">
+          <div class="title">璐︽埛淇℃伅</div>
+          <el-form-item label="寮�鎴烽摱琛�" prop="accountBank">
+            <el-input v-model="form.accountBank" placeholder="璇疯緭鍏ュ紑鎴烽摱琛�" v-trim />
+          </el-form-item>
+          <el-form-item label="璐﹀彿" prop="accountNo">
+            <el-input v-model="form.accountNo" placeholder="璇疯緭鍏ヨ处鍙�" v-trim />
+          </el-form-item>
+          <el-form-item label="鐢佃瘽" prop="accountPhone">
+            <el-input v-model="form.accountPhone" placeholder="璇疯緭鍏ヨ处鎴风數璇�" v-trim />
+          </el-form-item>
+          <el-form-item label="缁熶竴淇$敤浠g爜" prop="creditCard">
+            <el-input v-model="form.creditCard" placeholder="璇疯緭鍏ョ粺涓�淇$敤浠g爜" v-trim />
+          </el-form-item>
+          <el-form-item label="榛樿鍙戠エ绫诲瀷" prop="fpType">
+            <el-select v-model="form.fpType" clearable filterable>
+              <el-option :value="0" label="澧炲�肩◣鏅�氬彂绁�" />
+              <el-option :value="1" label="澧炲�肩◣涓撶敤鍙戠エ" />
+            </el-select>
+          </el-form-item>
+          <el-form-item label="娉ㄥ唽鍦板潃" prop="accountAddr">
+            <el-input v-model="form.accountAddr" placeholder="璇疯緭鍏ヨ处鍙锋敞鍐屽湴鍧�" v-trim />
+          </el-form-item>
+          <el-form-item label="钀ヤ笟鏈熼檺">
+            <div class="df">
+              <el-date-picker type="date" v-model="form.validity" value-format="yyyy-MM-dd" placeholder="璇烽�夋嫨" />
+              <el-checkbox v-model="form.selLangTime" @change="changeValid" class="ml10">闀挎湡</el-checkbox>
+            </div>
+          </el-form-item>
+        </template>
 
       </div>
     </el-form>
+    <!--  -->
+    <OperaCategoryWindow ref="OperaCategoryWindowRef" @success="initData" />
+    <StaffEdit ref="StaffEditRef" @success="getClient" />
   </GlobalWindow>
 </template>
 
@@ -85,10 +102,13 @@
 import { fetchCateList } from '@/api/business/category'
 import { rules } from './config'
 import { detailById } from '@/api/client/ywCustomer'
+import { fetchList } from '@/api/client/staff'
+import OperaCategoryWindow from './OperaCategoryWindow.vue'
+import StaffEdit from './staffEdit.vue'
 export default {
   name: 'OperaYwCustomerWindow',
   extends: BaseOpera,
-  components: { GlobalWindow },
+  components: { GlobalWindow, OperaCategoryWindow, StaffEdit },
   data() {
     return {
       // 琛ㄥ崟鏁版嵁
@@ -102,7 +122,7 @@
         isdeleted: '',
         remark: '',
         industryId: '',
-        type: '1',
+        type: 1,
         name: '',
         phone: '',
         idcardNo: '',
@@ -110,11 +130,12 @@
         code: '',
         status: '',
         memberName: '',
-        
+
         lastLoginDate: '',
         loginNum: '',
         userId: '',
-        
+        memberId: '',
+
         accountBank: '',
         accountNo: '',
         accountPhone: '',
@@ -123,7 +144,6 @@
         accountAddr: '',
         // identityType: '0',
         email: '',
-        memberId: '',
         member: {
           name: "",
           phone: "",
@@ -133,6 +153,10 @@
           email: '',
         }
       },
+      title: '鏂板瀹㈡埛',
+      isShowTrade: false,
+
+      clientList: [],
       cateList: [],
       // 楠岃瘉瑙勫垯
       rules
@@ -145,12 +169,25 @@
     })
   },
   methods: {
+    openTrade() {
+      this.$refs.OperaCategoryWindowRef.open('鏂板琛屼笟')
+    },
+    openClient() {
+      this.$refs.StaffEditRef.open('鏂板缓浜哄憳')
+      setTimeout(() => {
+        this.$refs.StaffEditRef.form.customerId = this.form.id
+        console.log('--', this.$refs.StaffEditRef.form);
+        
+        // this.$update
+      }, 1200)
+      this.$refs.StaffEditRef.customerId = this.form.id
+    },
     initData() {
       fetchCateList({ type: 6 }).then(res => {
         this.cateList = res
       })
     },
-    open (title, target) {
+    open(title, target) {
       this.title = title
       this.visible = true
       this.initData()
@@ -158,18 +195,39 @@
       if (target == null) {
         this.$nextTick(() => {
           this.$refs.form.resetFields()
+          this.form.validity = ''
+          this.form.id = ''
+          this.form.member = {
+            name: "",
+            phone: "",
+            highCheckor: 0,
+            idcardType: 0,
+            idcardNo: '',
+            email: '',
+          }
         })
+        this.form.type = 1
         return
       }
       // 缂栬緫
       this.$nextTick(() => {
-        if(title == '缂栬緫瀹㈡埛'){
+        if (title == '缂栬緫瀹㈡埛') {
+          this.getClient()
           detailById(target.id).then(res => {
             this.form = res
           })
         }
       })
     },
+    getClient() {
+      fetchList({
+        capacity: 9999,
+        page: 1,
+        model: {}
+      }).then(res => {
+        this.clientList = res.records
+      })
+    },
     changeValid(e) {
       this.$set(this.form, 'validity', e ? '2099-12-31' : '')
     },
diff --git a/admin/src/views/client/components/config.js b/admin/src/views/client/components/config.js
index 3b5b937..2165ec9 100644
--- a/admin/src/views/client/components/config.js
+++ b/admin/src/views/client/components/config.js
@@ -1,5 +1,6 @@
 export const rules = {
   name: [{ required: true, message: '璇疯緭鍏�' }],
+  memberId: [{ required: true, message: '璇烽�夋嫨',trigger: 'change' }],
   'member.name': [{ required: true, message: '璇疯緭鍏�' }],
   'member.phone': [{ required: true, message: '璇疯緭鍏�' }],
 }
diff --git a/admin/src/views/client/components/staffEdit.vue b/admin/src/views/client/components/staffEdit.vue
index c85f098..e1ce3d3 100644
--- a/admin/src/views/client/components/staffEdit.vue
+++ b/admin/src/views/client/components/staffEdit.vue
@@ -3,7 +3,7 @@
     <el-form :model="form" ref="form" label-position="top" :rules="rules">
       <div class="list">
         <el-form-item label="瀹㈡埛鍚嶇О" prop="customerId">
-          <el-select v-model="form.customerId" clearable filterable>
+          <el-select v-model="form.customerId" :disabled="form.id || customerId != ''" clearable filterable>
             <el-option v-for="item in clientList" :value="item.id" :label="item.name" />
           </el-select>
         </el-form-item>
@@ -98,6 +98,7 @@
         idcardNo: '',
         email: '',
       },
+      customerId: '',
       clientList: [],
       // 楠岃瘉瑙勫垯
       rules: staffRules
@@ -123,12 +124,50 @@
     open(title, target) {
       this.title = title
       this.visible = true
+      this.customerId = ''
+      console.log(this.customerId);
+      console.log(this.form.id);
+      
       this.initData()
       // 鏂板缓
       if (target == null) {
         this.$nextTick(() => {
-          this.$refs.form.resetFields()
+          this.form = {
+            id: null,
+            customerId: '',
+            creator: '',
+            createDate: '',
+            editor: '',
+            editDate: '',
+            isdeleted: '',
+            birthday: '',
+            industryId: '',
+            type: '1',
+            idcardDecode: '',
+            sex: '',
+            status: '',
+            memberName: '',
+
+            lastLoginDate: '',
+            loginNum: '',
+            userId: '',
+
+            accountBank: '',
+            accountNo: '',
+            accountPhone: '',
+            creditCard: '',
+            fpType: '',
+            accountAddr: '',
+            // identityType: '0',
+            name: "",
+            phone: "",
+            highCheckor: 0,
+            idcardType: 0,
+            idcardNo: '',
+            email: '',
+          }
         })
+        // this.$refs.form.resetFields()
         return
       }
       // 缂栬緫
diff --git a/admin/src/views/operation/components/deviceEdit.vue b/admin/src/views/operation/components/deviceEdit.vue
index 129cc6d..016870d 100644
--- a/admin/src/views/operation/components/deviceEdit.vue
+++ b/admin/src/views/operation/components/deviceEdit.vue
@@ -11,7 +11,7 @@
       <el-form-item label="璁惧鍨嬪彿" prop="">
         <el-input v-model="param.modelNo" placeholder="璇疯緭鍏�" v-trim />
       </el-form-item>
-      <el-form-item label="璁惧鍒嗙被" prop="">
+      <el-form-item label="璁惧鍒嗙被" prop="cateId">
         <el-cascader v-model="param.cateIds" @change="changeSel" placeholder="璇烽�夋嫨璁惧鍒嗙被" clearable :options="cateList"
           :props="{
             label: 'name',
@@ -70,7 +70,8 @@
       cateList: [],
       rules: {
         name: [{ required: true, message: '璇疯緭鍏�' }],
-        code: [{ required: true, message: '璇疯緭鍏�' }]
+        code: [{ required: true, message: '璇疯緭鍏�' }],
+        cateId: [{ required: true, message: '璇烽�夋嫨' }],
       },
       staffList: []
 
diff --git a/admin/src/views/operation/device.vue b/admin/src/views/operation/device.vue
index 5c34d4f..da4d4e9 100644
--- a/admin/src/views/operation/device.vue
+++ b/admin/src/views/operation/device.vue
@@ -23,7 +23,7 @@
         <template slot-scope="{row}">
           <el-button type="text" @click="handleEdit(row)" icon="el-icon-edit"
             v-permissions="['business:category:update']">缂栬緫</el-button>
-          <el-button type="text" @click="deleteById(row)" icon="el-icon-delete"
+          <el-button type="text" @click="handleDel(row)" icon="el-icon-delete"
             v-permissions="['business:category:delete']">鍒犻櫎</el-button>
         </template>
       </el-table-column>
@@ -121,7 +121,6 @@
       let message = `纭鍒犻櫎璇ヨ褰曞悧?`
       this.$dialog.deleteConfirm(message)
         .then(() => {
-          this.isWorking.delete = true
           deleteById(row.id)
             .then(() => {
               this.$tip.apiSuccess('鍒犻櫎鎴愬姛')
diff --git a/admin/src/views/project/buildingList.vue b/admin/src/views/project/buildingList.vue
index ad86ed4..cb453d9 100644
--- a/admin/src/views/project/buildingList.vue
+++ b/admin/src/views/project/buildingList.vue
@@ -12,8 +12,8 @@
       </el-form-item>
       <section>
         <el-button type="primary" @click="search">鎼滅储</el-button>
-        <el-button type="primary" :loading="isWorking.export" v-permissions="['business:ywbuilding:exportExcel']"
-          @click="exportExcel">瀵煎嚭</el-button>
+        <!-- <el-button type="primary" :loading="isWorking.export" v-permissions="['business:ywbuilding:exportExcel']"
+          @click="exportExcel">瀵煎嚭</el-button> -->
         <el-button @click="reset">閲嶇疆</el-button>
       </section>
     </el-form>
@@ -22,8 +22,8 @@
       <ul class="toolbar" v-permissions="['business:ywbuilding:create', 'business:ywbuilding:delete']">
         <li><el-button type="primary" @click="editClick()" icon="el-icon-plus"
             v-permissions="['business:ywbuilding:create']">鏂板缓</el-button></li>
-        <li><el-button @click="deleteByIdInBatch" icon="el-icon-delete"
-            v-permissions="['business:ywbuilding:delete']">鍒犻櫎</el-button></li>
+        <!-- <li><el-button @click="deleteByIdInBatch" icon="el-icon-delete"
+            v-permissions="['business:ywbuilding:delete']">鍒犻櫎</el-button></li> -->
       </ul>
       <el-table v-loading="isWorking.search" :data="tableData.list" stripe @selection-change="handleSelectionChange">
         <el-table-column type="selection" width="55"></el-table-column>
@@ -37,7 +37,7 @@
         <el-table-column prop="area" label="寤虹瓚闈㈢Н(m虏)" min-width="80px"></el-table-column>
         <el-table-column prop="cqArea" label="绠$悊闈㈢Н(m虏)" min-width="80px"></el-table-column>
         <el-table-column prop="roomNum" label="鎴块棿鎬绘暟(闂�)" min-width="80px"></el-table-column>
-        <el-table-column prop="roomeRentNum" label="鍙嫑鍟嗘埧婧愭暟閲�(闂�)" min-width="100px"></el-table-column>
+        <el-table-column prop="roomRentNum" label="鍙嫑鍟嗘埧婧愭暟閲�(闂�)" min-width="100px"></el-table-column>
         <el-table-column v-if="containPermissions(['business:ywbuilding:update', 'business:ywbuilding:delete'])"
           label="鎿嶄綔" min-width="120" fixed="right">
           <template slot-scope="{row}">
@@ -100,11 +100,10 @@
     },
     editClick(row) {
       if (row && row.id) {
-        this.$refs.operaYwBuildingWindow.open('缂栬緫妤煎畤')
+        this.$refs.operaYwBuildingWindow.open('缂栬緫妤煎畤', row)
       } else {
         this.$refs.operaYwBuildingWindow.open('鏂板缓妤煎畤')
       }
-      this.$refs.operaYwBuildingWindow.getProject()
     },
     editFloor(row) {
       this.$refs.FloorLevelRef.id = row.id
diff --git a/admin/src/views/project/components/OperaYwBuildingWindow.vue b/admin/src/views/project/components/OperaYwBuildingWindow.vue
index 746d3c6..3a4c986 100644
--- a/admin/src/views/project/components/OperaYwBuildingWindow.vue
+++ b/admin/src/views/project/components/OperaYwBuildingWindow.vue
@@ -1,5 +1,5 @@
 <template>
-  <GlobalWindow width="900px" :title="title" :visible.sync="visible" :confirm-working="isWorking" @confirm="confirm">
+  <GlobalWindow width="720px" :title="title" :visible.sync="visible" :confirm-working="isWorking" @confirm="confirm">
     <el-form :model="form" ref="form" :rules="rules">
       <el-form-item label="鎵�灞為」鐩�" prop="projectId" clearable placeholder="璇烽�夋嫨椤圭洰">
         <el-select v-model="form.projectId" filterable clearable>
@@ -41,6 +41,7 @@
 import BaseOpera from '@/components/base/BaseOpera'
 import GlobalWindow from '@/components/common/GlobalWindow'
 import { getProjectList } from '@/api/project/ywProject'
+import { detailById } from '@/api/project/ywBuilding'
 export default {
   name: 'OperaYwBuildingWindow',
   extends: BaseOpera,
@@ -88,6 +89,31 @@
     })
   },
   methods: {
+    open (title, target,type) {
+      this.title = title
+      this.visible = true
+      this.getProject()
+      // 鏂板缓缁勭粐
+      if (target == null) {
+        this.$nextTick(() => {
+          this.$refs.form.resetFields()
+          this.form[this.configData['field.id']] = null
+          this.form.type=type
+        })
+        return
+      }
+      // 缂栬緫
+      this.$nextTick(() => {
+        console.log('----');
+        
+        this.getDetail(target.id)
+      })
+    },
+    getDetail(id) {
+      detailById(id).then(res => {
+        this.form = res
+      })
+    },
     getProject() {
       getProjectList({}).then(res => {
         this.projectList = res || []
diff --git a/admin/src/views/project/components/OperaYwProjectWindow.vue b/admin/src/views/project/components/OperaYwProjectWindow.vue
index 70ea6e0..e2dd612 100644
--- a/admin/src/views/project/components/OperaYwProjectWindow.vue
+++ b/admin/src/views/project/components/OperaYwProjectWindow.vue
@@ -1,11 +1,11 @@
 <template>
-  <GlobalWindow :title="title" :visible.sync="visible" :confirm-working="isWorking" @confirm="confirm">
+  <GlobalWindow width="600px" :title="title" :visible.sync="visible" :confirm-working="isWorking" @confirm="confirm">
     <el-form :model="form" ref="form" :rules="rules">
 
       <el-form-item label="椤圭洰鍚嶇О" prop="name">
         <el-input v-model="form.name" placeholder="璇疯緭鍏ュ悕绉�" v-trim />
       </el-form-item>
-      <el-form-item label="鎵�灞炲湴鍖�" prop="addr">
+      <el-form-item label="鎵�灞炲湴鍖�" prop="areaId">
         <el-cascader v-model="form.areaIdT" :props="{
           label: 'name',
           value: 'id',
@@ -35,7 +35,7 @@
     return {
       // 琛ㄥ崟鏁版嵁
       form: {
-        id: null,
+        id: '',
         creator: '',
         createDate: '',
         editor: '',
@@ -71,6 +71,29 @@
       this.title = title
       this.visible = true
       this.initData()
+      if (target == null) {
+        this.$nextTick(() => {
+          this.form = {
+            id: '',
+            creator: '',
+            createDate: '',
+            editor: '',
+            editDate: '',
+            isdeleted: '',
+            name: '',
+            remark: '',
+            status: '',
+            sortnum: '',
+            imgurl: '',
+            areaIdT: '',
+            cityId: '',
+            areaId: '',
+            provinceId: '',
+            addr: ''
+          }
+          this.$refs.form.resetFields()
+        })
+      }
       this.$nextTick(() => {
         for (const key in this.form) {
           this.form[key] = target[key]
diff --git a/admin/src/views/project/components/OperaYwRoomWindow.vue b/admin/src/views/project/components/OperaYwRoomWindow.vue
index e810e56..cdfdf2d 100644
--- a/admin/src/views/project/components/OperaYwRoomWindow.vue
+++ b/admin/src/views/project/components/OperaYwRoomWindow.vue
@@ -1,5 +1,5 @@
 <template>
-  <GlobalWindow :title="title" :visible.sync="visible" :confirm-working="isWorking" @confirm="confirm">
+  <GlobalWindow width="720px" :title="title" :visible.sync="visible" :confirm-working="isWorking" @confirm="confirm">
     <el-form :model="form" ref="form" :rules="rules">
       <el-form-item label="鎵�灞為」鐩�" prop="projectId">
         <el-select v-model="form.projectId" @change="changeProject" placeholder="璇烽�夋嫨椤圭洰" clearable>
@@ -45,6 +45,7 @@
 import { getProjectList } from '@/api/project/ywProject'
 import { getBuildList } from '@/api/project/ywBuilding'
 import { getFloorList } from '@/api/project/yeFloor'
+import { detailById } from '@/api/project/ywRoom'
 export default {
   name: 'OperaYwRoomWindow',
   extends: BaseOpera,
@@ -96,6 +97,39 @@
     })
   },
   methods: {
+    open(title, target, type) {
+      this.title = title
+      this.visible = true
+      this.getProject()
+      // 鏂板缓缁勭粐
+      if (target == null) {
+        this.$nextTick(() => {
+          this.$refs.form.resetFields()
+          this.form[this.configData['field.id']] = null
+          this.form.type = type
+        })
+        return
+      }
+      // 缂栬緫
+      this.$nextTick(() => {
+        this.getDetail(target.id)
+      })
+    },
+    getDetail(id) {
+      detailById(id).then(res => {
+        this.form = res || {}
+        if (res.projectId) {
+          getBuildList({ projectId: res.projectId }).then(res => {
+            this.buildList = res || []
+          })
+        }
+        if (res.buildingId) {
+          getFloorList({ buildingId: res.buildingId }).then(res => {
+            this.floorList = res || []
+          })
+        }
+      })
+    },
     getProject() {
       getProjectList({}).then(res => {
         this.projectList = res || []
@@ -104,13 +138,13 @@
     },
     changeProject(e) {
       this.form.buildingId = ''
-      getBuildList({projectId: e}).then(res => {
+      getBuildList({ projectId: e }).then(res => {
         this.buildList = res || []
       })
     },
     changeBuild(e) {
       this.form.floor = ''
-      getFloorList({buildingId: e}).then(res => {
+      getFloorList({ buildingId: e }).then(res => {
         this.floorList = res || []
       })
     },
diff --git a/admin/src/views/project/components/floorLevel.vue b/admin/src/views/project/components/floorLevel.vue
index a8b0ad8..a593b63 100644
--- a/admin/src/views/project/components/floorLevel.vue
+++ b/admin/src/views/project/components/floorLevel.vue
@@ -90,12 +90,12 @@
         }
       })
     },
-    getList(buildingId) {
+    getList(page) {
       const { pagination, id } = this
       // this.buildingId =
       let capacity = pagination.pageSize
-      let page = pagination.page
-      fetchList({ capacity, page, model: { buildingId: id } }).then(res => {
+      let paget = page ||  pagination.page
+      fetchList({ capacity, page: paget, model: { buildingId: id } }).then(res => {
         this.list = res.records
         this.pagination.total = res.total
       })
@@ -127,6 +127,7 @@
     },
     handleSizeChange(capacity) {
       this.pagination.pageSize = capacity
+      this.getList()
     }
   }
 }
diff --git a/admin/src/views/project/housingList.vue b/admin/src/views/project/housingList.vue
index 8b09283..f800cc8 100644
--- a/admin/src/views/project/housingList.vue
+++ b/admin/src/views/project/housingList.vue
@@ -101,6 +101,8 @@
       },
       projectList: [],
       buildList: [],
+      
+      filters: {}
     }
   },
   created() {
@@ -121,17 +123,16 @@
     },
     changeProject(e) {
       this.searchForm.buildingId = ''
-      getBuildList({ id: e }).then(res => {
+      getBuildList({ projectId: e }).then(res => {
         this.buildList = res || []
       })
     },
     editClick(row) {
       if (row && row.id) {
-        this.$refs.operaYwRoomWindow.open('缂栬緫鎴块棿')
+        this.$refs.operaYwRoomWindow.open('缂栬緫鎴块棿', row)
       } else {
         this.$refs.operaYwRoomWindow.open('鏂板缓鎴块棿')
       }
-      this.$refs.operaYwRoomWindow.getProject()
     },
   }
 }
diff --git a/admin/src/views/project/projectList.vue b/admin/src/views/project/projectList.vue
index c816ca7..a150378 100644
--- a/admin/src/views/project/projectList.vue
+++ b/admin/src/views/project/projectList.vue
@@ -2,54 +2,44 @@
   <TableLayout :permissions="['business:ywproject:query']">
     <!-- 鎼滅储琛ㄥ崟 -->
     <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
-      
+
       <el-form-item label="椤圭洰鍚嶇О" prop="name">
         <el-input v-model="searchForm.name" placeholder="璇疯緭鍏ラ」鐩悕绉�" @keypress.enter.native="search"></el-input>
       </el-form-item>
       <section>
         <el-button type="primary" @click="search">鎼滅储</el-button>
-        <el-button type="primary" :loading="isWorking.export" v-permissions="['business:ywproject:exportExcel']" @click="exportExcel">瀵煎嚭</el-button>
+        <!-- <el-button type="primary" :loading="isWorking.export" v-permissions="['business:ywproject:exportExcel']" @click="exportExcel">瀵煎嚭</el-button> -->
         <el-button @click="reset">閲嶇疆</el-button>
       </section>
     </el-form>
     <!-- 琛ㄦ牸鍜屽垎椤� -->
     <template v-slot:table-wrap>
       <ul class="toolbar" v-permissions="['business:ywproject:create', 'business:ywproject:delete']">
-        <li><el-button type="primary" @click="handleEdit()" icon="el-icon-plus" v-permissions="['business:ywproject:create']">鏂板缓</el-button></li>
-        <li><el-button @click="deleteByIdInBatch" icon="el-icon-delete" v-permissions="['business:ywproject:delete']">鍒犻櫎</el-button></li>
+        <li><el-button type="primary" @click="handleEdit()" icon="el-icon-plus"
+            v-permissions="['business:ywproject:create']">鏂板缓</el-button></li>
+        <!-- <li><el-button @click="deleteByIdInBatch" icon="el-icon-delete" v-permissions="['business:ywproject:delete']">鍒犻櫎</el-button></li> -->
       </ul>
-      <el-table
-        v-loading="isWorking.search"
-        :data="tableData.list"
-        stripe
-        @selection-change="handleSelectionChange"
-      >
-      <el-table-column type="selection" width="55"></el-table-column>
+      <el-table v-loading="isWorking.search" :data="tableData.list" stripe @selection-change="handleSelectionChange">
+        <el-table-column type="selection" width="55"></el-table-column>
         <el-table-column prop="name" label="椤圭洰鍚嶇О" min-width="100px"></el-table-column>
-        <el-table-column prop="" label="绠$悊闈㈢Н(m)" min-width="100px"></el-table-column>
+        <el-table-column prop="area" label="绠$悊闈㈢Н(m)" min-width="100px"></el-table-column>
         <el-table-column prop="roomNum" label="鎬绘埧婧愭暟閲�(闂�)" min-width="100px"></el-table-column>
-        <el-table-column prop="roomeRentNum" label="鍙嫑鍟嗘埧婧愭暟閲�(闂�)" min-width="100px"></el-table-column>
-        <el-table-column
-          v-if="containPermissions(['business:ywproject:update', 'business:ywproject:delete'])"
-          label="鎿嶄綔"
-          min-width="80"
-          fixed="right"
-        >
+        <el-table-column prop="roomRentNum" label="鍙嫑鍟嗘埧婧愭暟閲�(闂�)" min-width="100px"></el-table-column>
+        <el-table-column v-if="containPermissions(['business:ywproject:update', 'business:ywproject:delete'])"
+          label="鎿嶄綔" min-width="80" fixed="right">
           <template slot-scope="{row}">
-            <el-button type="text" @click="handleEdit(row)" icon="el-icon-edit" v-permissions="['business:ywproject:update']">缂栬緫</el-button>
-            <el-button type="text" @click="deleteById(row)" icon="el-icon-delete" v-permissions="['business:ywproject:delete']">鍒犻櫎</el-button>
+            <el-button type="text" @click="handleEdit(row)" icon="el-icon-edit"
+              v-permissions="['business:ywproject:update']">缂栬緫</el-button>
+            <el-button type="text" @click="deleteById(row)" icon="el-icon-delete"
+              v-permissions="['business:ywproject:delete']">鍒犻櫎</el-button>
           </template>
         </el-table-column>
       </el-table>
-      <pagination
-        @size-change="handleSizeChange"
-        @current-change="handlePageChange"
-        :pagination="tableData.pagination"
-      >
+      <pagination @size-change="handleSizeChange" @current-change="handlePageChange" :pagination="tableData.pagination">
       </pagination>
     </template>
     <!-- 鏂板缓/淇敼 -->
-    <OperaYwProjectWindow ref="operaYwProjectWindow" @success="handlePageChange"/>
+    <OperaYwProjectWindow ref="operaYwProjectWindow" @success="handlePageChange" />
   </TableLayout>
 </template>
 
@@ -62,7 +52,7 @@
   name: 'YwProject',
   extends: BaseTable,
   components: { TableLayout, Pagination, OperaYwProjectWindow },
-  data () {
+  data() {
     return {
       // 鎼滅储
       searchForm: {
@@ -82,7 +72,7 @@
       }
     }
   },
-  created () {
+  created() {
     this.config({
       module: '杩愮淮椤圭洰淇℃伅琛�',
       api: '/project/ywProject',
@@ -92,10 +82,10 @@
     this.search()
   },
   methods: {
-    handleEdit(row){
-      if(row && row.id){
+    handleEdit(row) {
+      if (row && row.id) {
         this.$refs.operaYwProjectWindow.open('缂栬緫椤圭洰', row)
-      }else{
+      } else {
         this.$refs.operaYwProjectWindow.open('鏂板缓椤圭洰')
         // this.$refs.operaYwProjectWindow.open('鏂板缓椤圭洰')
       }
diff --git a/admin/src/views/workorder/components/OperaYwWorkorderWindow.vue b/admin/src/views/workorder/components/OperaYwWorkorderWindow.vue
index 85d8bee..3b6d4e3 100644
--- a/admin/src/views/workorder/components/OperaYwWorkorderWindow.vue
+++ b/admin/src/views/workorder/components/OperaYwWorkorderWindow.vue
@@ -28,8 +28,8 @@
           <el-option v-for="item in roomList" :label="item.roomNum" :value="item.id" />
         </el-select>
       </el-form-item>
-      <el-form-item label="鍒嗙被" prop="cateId">
-        <el-cascader v-model="form.areaIds" @change="changeSel" placeholder="璇烽�夋嫨宸℃鍖哄煙" clearable :options="cateList"
+      <el-form-item label="宸ュ崟鍒嗙被" prop="cateId">
+        <el-cascader v-model="form.areaIds" @change="changeSel" placeholder="璇烽�夋嫨鍒嗙被" clearable :options="cateList"
           :props="{
             label: 'name',
             value: 'id',
diff --git a/admin/src/views/workorder/components/config.js b/admin/src/views/workorder/components/config.js
index 5985048..f668691 100644
--- a/admin/src/views/workorder/components/config.js
+++ b/admin/src/views/workorder/components/config.js
@@ -6,4 +6,5 @@
   buildingId: [{ required: true, message: '璇烽�夋嫨' }],
   floorId: [{ required: true, message: '璇烽�夋嫨' }],
   roomId: [{ required: true, message: '璇烽�夋嫨' }],
+  cateId: [{ required: true, message: '璇烽�夋嫨' }],
 }
\ No newline at end of file
diff --git a/admin/src/views/workorder/components/detail.vue b/admin/src/views/workorder/components/detail.vue
index 9f020e9..55f1e8d 100644
--- a/admin/src/views/workorder/components/detail.vue
+++ b/admin/src/views/workorder/components/detail.vue
@@ -1,5 +1,5 @@
 <template>
-  <GlobalWindow width="900px" title="宸ュ崟璇︽儏" :visible.sync="visible" :confirm-working="isWorking" @close="close"
+  <GlobalWindow width="920px" title="宸ュ崟璇︽儏" :visible.sync="visible" :confirm-working="isWorking" @close="close"
     @confirm="confirm">
     <div class="main">
       <div class="title">
@@ -18,25 +18,25 @@
           </div>
           <div class="item">
             <div class="la">瀵瑰簲浣嶇疆</div>
-            <div class="val">{{ info.buildingName }} / {{ info.roomNum || info.floorName }}</div>
+            <div class="val">{{ info.projectName }}/{{ info.buildingName }} / {{ info.roomNum || info.floorName }}</div>
           </div>
           <div class="item">
-            <div class="la">宸ュ崟绫诲埆</div>
+            <div class="la">宸ュ崟鍒嗙被</div>
             <div class="val">{{ info.categoryName }}</div>
           </div>
           <div class="item">
             <div class="la">涓婃姤浜�</div>
-            <div class="val">{{ info.creatorName }}</div>
+            <div class="val">{{ info.creatorName }}{{ info.creatorCompany ? "-" + info.creatorCompany : '' }}</div>
           </div>
           <div class="item">
             <div class="la">涓婃姤浜虹數璇�</div>
-            <div class="val">{{ info.creatorPhone }}</div>
+            <div class="val">{{ info.creatorPhone || info.creatorMobile }}</div>
           </div>
           <div class="item">
             <div class="la">涓婃姤鏃堕棿</div>
             <div class="val">{{ info.createDate }}</div>
           </div>
-          <div class="item max">
+          <div class="item max" v-if="info.areaType == 0">
             <div class="la">涓婇棬鏃堕棿</div>
             <div class="val">{{ info.getDate }}</div>
           </div>
@@ -59,7 +59,7 @@
           </div>
         </div>
         <div class="side">
-          <div class="title">宸ュ崟娴佽浆璁板綍鍛�</div>
+          <div class="title">宸ュ崟娴佽浆璁板綍</div>
           <div class="flow_list">
             <div class="item" v-for="item,i in info.logList">
               <div class="icon">
@@ -75,7 +75,7 @@
           </div>
         </div>
       </div>
-      <div class="title">宸ュ崟澶勭悊</div>
+      <div class="title">{{ info.dealStatus == 0 || info.dealStatus == 1 ? '宸ュ崟澶勭悊' : '澶勭悊缁撴灉' }}</div>
       <el-form :model="param" ref="form" :rules="rules">
         <template v-if="info.dealStatus == 0 || info.dealStatus == null">
           <el-form-item label="澶勭悊鏂瑰紡" prop="dealType">
@@ -83,7 +83,7 @@
               <el-radio v-model="param.dealType" :label="0">鎸囨淳</el-radio>
               <el-radio v-model="param.dealType" :label="1">鐩存帴鍥炲</el-radio>
             </div>
-          </el-form-item>
+          </el-form-item> 
           <el-form-item v-if="param.dealType == 0" label="鎸囨淳缁�" prop="dealUserId">
             <el-select v-model="param.dealUserId" clearable filterable class="w400">
               <el-option v-for="item in staffList" :label="item.realname" :value="item.id"></el-option>
@@ -98,12 +98,12 @@
             <el-date-picker type="datetime" class="w400" v-model="param.getDate" format="yyyy-MM-dd HH:mm"
               value-format="yyyy-MM-dd HH:mm:ss" placeholder="璇烽�夋嫨"></el-date-picker>
           </el-form-item>
-          <el-form-item label="鍥炲鍐呭" prop="dealInfo">
+          <el-form-item label="澶勭悊璇存槑" prop="dealInfo">
             <el-input type="textarea" class="w400" :rows="4" v-model="param.dealInfo" placeholder="璇峰~鍐欒鏄�"></el-input>
           </el-form-item>
           <el-form-item label="鐜板満鍥剧墖">
             <div class="file_list">
-              <el-upload class="avatar-uploader" :data="uploadData" multiple :limit="6" :auto-upload="true"
+              <el-upload class="avatar-uploader" :data="uploadData" :auto-upload="true"
                 :action="uploadImgUrl" :show-file-list="false" :on-success="uploadAvatarSuccess" :on-error="uploadError"
                 :before-upload="beforeUpload">
                 <div class="upload_wrap">
@@ -123,14 +123,18 @@
         <template v-if="info.dealStatus == 2">
           <div class="list">
             <div class="item item2">
-              <div class="la">澶勭悊鏃堕棿锛�</div>
-              <div class="val">{{ info.getDate }}</div>
+              <div class="la">{{ info.dispatchUserId ? '澶勭悊浜�' : '鍥炲浜�' }}锛�</div>
+              <div class="val">{{ info.dealUserName }}{{ info.dealUserCompany ? '-' + info.dealUserCompany : '' }}</div>
             </div>
             <div class="item item2">
-              <div class="la">澶勭悊澶囨敞锛�</div>
+              <div class="la">{{ info.dispatchUserId ? '澶勭悊鏃堕棿' : '鍥炲鏃堕棿' }}锛�</div>
+              <div class="val">{{ info.dealDate || info.getDate }}</div>
+            </div>
+            <div class="item item2">
+              <div class="la">{{ info.dispatchUserId ? '澶勭悊璇存槑' : '鍥炲鍐呭' }}锛�</div>
               <div class="val">{{ info.dealInfo }}</div>
             </div>
-            <div class="item item2">
+            <div v-if="info.dealFileList != null && info.dealFileList.length" class="item item2">
               <div class="la">鐜板満鐓х墖锛�</div>
               <div class="value" v-if="info.dealFileList == null || !info.dealFileList.length">鏃�</div>
               <div class="value" v-if="info.dealFileList != null && info.dealFileList.length">
@@ -347,7 +351,7 @@
   .main_content{
     display: flex;
     .side{
-      width: 240px;
+      width: 370px;
       .title{
         font-size: 14px;
       }
diff --git a/admin/src/views/workorder/workorderList.vue b/admin/src/views/workorder/workorderList.vue
index 0936036..bd27db2 100644
--- a/admin/src/views/workorder/workorderList.vue
+++ b/admin/src/views/workorder/workorderList.vue
@@ -18,7 +18,7 @@
           <el-option v-for="item in buildList" :label="item.name" :value="item.id" />
         </el-select>
       </el-form-item>
-      <el-form-item prop="cateId" label="鐗╁搧绫诲埆">
+      <el-form-item prop="cateId" label="宸ュ崟鍒嗙被">
         <el-cascader v-model="searchForm.areaIds" @change="changeSel" placeholder="璇烽�夋嫨宸℃鍖哄煙" clearable
           :options="cateList" :props="{
             label: 'name',
@@ -33,8 +33,6 @@
 
       <section>
         <el-button type="primary" @click="search">鎼滅储</el-button>
-        <el-button type="primary" :loading="isWorking.export" v-permissions="['business:ywworkorder:exportExcel']"
-          @click="exportExcel">瀵煎嚭</el-button>
         <el-button @click="reset">閲嶇疆</el-button>
       </section>
     </el-form>
@@ -43,8 +41,8 @@
       <ul class="toolbar" v-permissions="['business:ywworkorder:create', 'business:ywworkorder:delete']">
         <li><el-button type="primary" @click="$refs.operaYwWorkorderWindow.open('鏂板缓宸ュ崟')" icon="el-icon-plus"
             v-permissions="['business:ywworkorder:create']">鏂板缓</el-button></li>
-        <li><el-button @click="deleteByIdInBatch" icon="el-icon-delete"
-            v-permissions="['business:ywworkorder:delete']">鍒犻櫎</el-button></li>
+        <el-button type="primary" :loading="isWorking.export" v-permissions="['business:ywworkorder:exportExcel']"
+          @click="exportExcel" plain>瀵煎嚭</el-button>
       </ul>
       <el-table v-loading="isWorking.search" :data="tableData.list" stripe>
         <el-table-column prop="areaType" label="浣嶇疆绫诲瀷" min-width="80px">
@@ -63,7 +61,7 @@
         <el-table-column prop="creatorName" label="涓婃姤浜�" min-width="100px"></el-table-column>
         <el-table-column prop="createDate" label="涓婃姤鏃堕棿" min-width="100px"></el-table-column>
         <el-table-column prop="dealUserName" label="澶勭悊浜�" min-width="100px"></el-table-column>
-        <el-table-column label="澶勭悊缁撴灉" min-width="100px">
+        <el-table-column label="宸ュ崟鐘舵��" min-width="100px">
           <template slot-scope="{row}">
             <span v-if="row.dealStatus == 0">寰呮寚娲�</span>
             <span v-if="row.dealStatus == 1">宸叉寚娲�</span>
@@ -98,7 +96,7 @@
 export default {
   name: 'YwWorkorder',
   extends: BaseTable,
-  components: { TableLayout, Pagination,Detail, OperaYwWorkorderWindow },
+  components: { TableLayout, Pagination, Detail, OperaYwWorkorderWindow },
   data() {
     return {
       // 鎼滅储
@@ -133,7 +131,7 @@
         this.$refs.DetailRef.visible = true
         this.$refs.DetailRef.id = row.id
         this.$refs.DetailRef.getDetail()
-        
+
       })
     },
     initData() {

--
Gitblit v1.9.3