From a7b60ffdfa197c457a3118424337a95594d62239 Mon Sep 17 00:00:00 2001
From: liukangdong <898885815@qq.com>
Date: 星期三, 22 一月 2025 15:06:39 +0800
Subject: [PATCH] Merge branch '2.0.1' of http://139.186.142.91:10010/r/productDev/funingyunwei into 2.0.1

---
 admin/src/api/workorder/ywWorkorder.js                           |    5 
 admin/src/views/project/components/houseDetails.vue              |  641 +++++++++++++-----
 admin/src/views/workorder/components/problemReportingDetails.vue |   89 ++
 admin/src/api/ywProblem.js                                       |   15 
 admin/src/views/workorder/components/detail.vue                  |   23 
 admin/src/views/workorder/components/handleProblem.vue           |  338 +++++++--
 admin/src/views/workorder/problemReporting.vue                   |   52 +
 admin/src/views/project/housingList.vue                          |    2 
 admin/src/views/operation/components/deviceDetail.vue            |  281 ++++++++
 admin/src/api/system/common.js                                   |    4 
 admin/src/api/Inspection/device.js                               |   10 
 admin/src/views/operation/components/deviceEdit.vue              |  356 +++++++++-
 admin/src/views/operation/device.vue                             |    2 
 admin/src/views/workorder/components/OperaYwWorkorderWindow.vue  |  137 +++
 14 files changed, 1,555 insertions(+), 400 deletions(-)

diff --git a/admin/src/api/Inspection/device.js b/admin/src/api/Inspection/device.js
index ec4923a..d565e90 100644
--- a/admin/src/api/Inspection/device.js
+++ b/admin/src/api/Inspection/device.js
@@ -42,3 +42,13 @@
     }
   })
 }
+
+// 璁惧鐘舵�佺粺璁�
+export function getDeviceStatus (data) {
+  return request.post('/visitsAdmin/cloudService/business/ywDevice/getDeviceStatus', data)
+}
+
+// 璁惧鏁伴噺鍒嗙被缁熻
+export function getDeviceCateData (data) {
+  return request.post('/visitsAdmin/cloudService/business/ywDevice/getDeviceCateData', data)
+}
diff --git a/admin/src/api/system/common.js b/admin/src/api/system/common.js
index 0e99bcf..d0b2af7 100644
--- a/admin/src/api/system/common.js
+++ b/admin/src/api/system/common.js
@@ -71,6 +71,10 @@
 export function upload (data) {
   return request.post('/visitsAdmin/cloudService/public/upload', data)
 }
+// 鎵归噺涓婁紶鏂囦欢鍒癋TP
+export function uploadBatch (data) {
+  return request.post('/visitsAdmin/cloudService/public/uploadBatch', data)
+}
 // 鑾峰彇鐪佸競鍖烘爲
 export function getCityTree (data) {
   return request.post('/visitsAdmin/cloudService/business/areas/treeList', data)
diff --git a/admin/src/api/workorder/ywWorkorder.js b/admin/src/api/workorder/ywWorkorder.js
index fc54054..7513175 100644
--- a/admin/src/api/workorder/ywWorkorder.js
+++ b/admin/src/api/workorder/ywWorkorder.js
@@ -32,6 +32,11 @@
   return request.post('/visitsAdmin/cloudService/business/ywWorkorder/updateById', data)
 }
 
+// 鑾峰彇宸ュ崟鏁伴噺淇℃伅
+export function getDataVO (data) {
+  return request.post('/visitsAdmin/cloudService/business/ywWorkorder/getDataVO', data)
+}
+
 // 鍒犻櫎
 export function deleteById (id) {
   return request.get(`/visitsAdmin/cloudService/business/ywWorkorder/delete/${id}`)
diff --git a/admin/src/api/ywProblem.js b/admin/src/api/ywProblem.js
index 52c9a57..ad11b9d 100644
--- a/admin/src/api/ywProblem.js
+++ b/admin/src/api/ywProblem.js
@@ -13,11 +13,26 @@
 }
 
 // 鏍规嵁ID淇敼
+export function editProblem (data) {
+  return request.post('/visitsAdmin/cloudService/business/ywProblem/editProblem', data)
+}
+
+// 鏍规嵁ID淇敼
 export function updateById (data) {
   return request.post('/visitsAdmin/cloudService/business/ywProblem/updateById', data)
+}
+
+// 鏍规嵁ID鏌ヨ
+export function getById (id) {
+  return request.get(`/visitsAdmin/cloudService/business/ywProblem/${id}`)
 }
 
 // 鍒犻櫎
 export function deleteById (id) {
   return request.get(`/visitsAdmin/cloudService/business/ywProblem/delete/${id}`)
 }
+
+// 鏍规嵁宸ュ崟鏌ヨ
+export function getByWorkorderId (workorderId) {
+  return request.get(`/visitsAdmin/cloudService/business/ywProblem/getByWorkorderId?workorderId=${workorderId}`)
+}
diff --git a/admin/src/views/operation/components/deviceDetail.vue b/admin/src/views/operation/components/deviceDetail.vue
index f3181aa..02633b3 100644
--- a/admin/src/views/operation/components/deviceDetail.vue
+++ b/admin/src/views/operation/components/deviceDetail.vue
@@ -1,7 +1,14 @@
 <template>
-  <GlobalWindow width="720px" title="璁惧璇︽儏" :visible.sync="visible" :confirm-working="isWorking" @close="close"
+  <GlobalWindow width="100%" title="璁惧璇︽儏" :withFooter="false" :visible.sync="visible" :confirm-working="isWorking" @close="close"
     @confirm="confirm">
-    <div class="main">
+    <div style="width: 100%; position: sticky; top: 0; left: 0; z-index: 999; background: #ffffff;">
+      <div class="tabs">
+        <div class="tab" :class="{ active: activeTabs === 0 }" @click="tabsClick(0)">璁惧淇℃伅</div>
+        <div class="tab" :class="{ active: activeTabs === 1 }" @click="tabsClick(1)">杩愮淮璁板綍</div>
+        <div class="tab" :class="{ active: activeTabs === 2 }" @click="tabsClick(2)">宸℃璁板綍</div>
+      </div>
+    </div>
+    <div class="main" v-if="activeTabs === 0">
       <div class="title">
         <span>鍩虹淇℃伅</span>
       </div>
@@ -32,6 +39,18 @@
             <div class="val">{{ info.addr }}</div>
           </div>
           <div class="item">
+            <div class="la">鎵�灞為」鐩�</div>
+            <div class="val">{{ info.projectName }}</div>
+          </div>
+          <div class="item">
+            <div class="la">鍏宠仈鎴挎簮</div>
+            <div class="val">{{ info.buildingName }} / {{ info.floorName }} / {{info.roomName}}</div>
+          </div>
+          <div class="item">
+            <div class="la">璐叆鏃堕棿</div>
+            <div class="val">{{ info.buyDate }}</div>
+          </div>
+          <div class="item">
             <div class="la">璁惧鐘舵��</div>
             <spa class="val" v-if="info.status == 0">姝e父</spa>
             <spa class="val" v-if="info.status == 1">鎹熷潖</spa>
@@ -48,24 +67,189 @@
           <div v-if="info.fileFullUrl" class="item" style="width: 100%;">
             <div class="la">鐓х墖</div>
             <div class="val">
-              <img class="photo" :src="info.fileFullUrl" alt="">
+              <el-image
+                style="width: 100px; height: 100px"
+                :src="info.fileFullUrl"
+                :preview-src-list="[info.fileFullUrl]">
+              </el-image>
+            </div>
+          </div>
+          <div class="item" style="width: 100%;">
+            <div class="la">闄勪欢</div>
+            <div class="val">
+              <el-table
+                :data="info.multifileList ? info.multifileList : []"
+                border
+                style="width: 100%">
+                <el-table-column
+                  prop="name"
+                  label="闄勪欢鍚嶇О">
+                </el-table-column>
+                <el-table-column
+                  prop="userName"
+                  label="鎿嶄綔浜�">
+                </el-table-column>
+                <el-table-column
+                  prop="createDate"
+                  label="鎿嶄綔鏃堕棿">
+                </el-table-column>
+              </el-table>
             </div>
           </div>
         </div>
       </div>
+      <div class="title">
+        <span>渚涘簲鍟嗕俊鎭�</span>
+      </div>
+      <div class="main_content">
+        <div class="list">
+          <div class="item">
+            <div class="la">渚涘簲鍟�</div>
+            <div class="val">{{info.supplier}}</div>
+          </div>
+          <div class="item">
+            <div class="la">鑱旂郴浜�</div>
+            <div class="val">{{info.supplierLinker}}</div>
+          </div>
+          <div class="item">
+            <div class="la">鑱旂郴鏂瑰紡</div>
+            <div class="val">{{info.supplierPhone}}</div>
+          </div>
+        </div>
+      </div>
+      <div class="title">
+        <span>缁翠繚淇℃伅</span>
+      </div>
+      <div class="main_content">
+        <div class="list">
+          <div class="item">
+            <div class="la">缁翠繚璐熻矗浜�</div>
+            <div class="val">{{info.maintenanceUserName}}</div>
+          </div>
+          <div class="item">
+            <div class="la">缁翠繚鍒版湡鏃�</div>
+            <div class="val">{{info.maintenanceOverDate}}</div>
+          </div>
+          <div class="item" style="width: 100%;">
+            <div class="la">缁翠繚璇存槑</div>
+            <div class="val">{{info.maintenanceContent}}</div>
+          </div>
+        </div>
+      </div>
     </div>
+    <div class="main" v-if="activeTabs === 1">
+      <el-table
+        :data="infoList"
+        border
+        style="width: 100%">
+        <el-table-column
+          prop="realName"
+          label="杩愮淮浜哄憳">
+        </el-table-column>
+        <el-table-column
+          label="璁惧鐘舵��">
+          <template slot-scope="{row}">
+            <span v-if="row.status === 0">姝e父</span>
+            <span v-if="row.status === 1">鎹熷潖</span>
+            <span v-if="row.status === 2">鎶ュ簾</span>
+          </template>
+        </el-table-column>
+        <el-table-column
+          prop="remark"
+          label="杩愮淮澶囨敞">
+        </el-table-column>
+        <el-table-column
+          prop="dealDate"
+          label="杩愮淮鏃堕棿">
+        </el-table-column>
+        <el-table-column
+          label="鎿嶄綔">
+          <template slot-scope="{row}">
+            <el-button type="text" @click="handleDetail(row)">鏌ョ湅璇︽儏</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <el-pagination
+        @size-change="handleSizeChange"
+        @current-change="handleCurrentChange"
+        :current-page="page"
+        :page-sizes="[10, 20, 30, 40]"
+        :page-size="pageSize"
+        layout="total, sizes, prev, pager, next, jumper"
+        :total="total">
+      </el-pagination>
+    </div>
+    <div class="main" v-if="activeTabs === 2">
+      <el-table
+        :data="infoList"
+        border
+        style="width: 100%">
+        <el-table-column
+          prop="schemeTitle"
+          label="璁″垝鍚嶇О">
+        </el-table-column>
+        <el-table-column
+          prop="taskCode"
+          label="浠诲姟缂栧彿">
+        </el-table-column>
+        <el-table-column
+          label="浠诲姟鏃堕棿">
+          <template slot-scope="{row}">
+            {{row.startDate}} ~ {{row.endDate}}
+          </template>
+        </el-table-column>
+        <el-table-column
+          prop="realname"
+          label="宸℃浜�">
+        </el-table-column>
+        <el-table-column
+          label="宸℃缁撴灉">
+          <template slot-scope="{row}">
+            <span v-if="row.dealStatus === 0">姝e父</span>
+            <span v-if="row.dealStatus === 1">寮傚父</span>
+          </template>
+        </el-table-column>
+        <el-table-column
+          label="宸℃闄勪欢">
+          <template slot-scope="{row}">
+            <el-image
+              v-if="row.multifileList && row.multifileList.length > 0"
+              style="width: 100px; height: 100px"
+              :src="row.multifileList[0].fileurlFull"
+              :preview-src-list="[row.multifileList[0].fileurlFull]">
+            </el-image>
+          </template>
+        </el-table-column>
+        <el-table-column
+          prop="content"
+          label="宸℃璇存槑">
+        </el-table-column>
+      </el-table>
+      <el-pagination
+        @size-change="handleSizeChange"
+        @current-change="handleCurrentChange"
+        :current-page="page"
+        :page-sizes="[10, 20, 30, 40]"
+        :page-size="pageSize"
+        layout="total, sizes, prev, pager, next, jumper"
+        :total="total">
+      </el-pagination>
+    </div>
+    <Detail ref="DetailRef" />
   </GlobalWindow>
 </template>
 
 <script>
 import GlobalWindow from '@/components/common/GlobalWindow'
 import BaseOpera from '@/components/base/BaseOpera'
+import Detail from './maintainDetail'
 import { detailById } from '@/api/Inspection/device.js'
-import { getUserList } from '@/api/system/user'
-import { Message, Loading } from 'element-ui'
+import { fetchList } from '@/api/Inspection/deviceRecord.js'
+import { getDetail } from '@/api/Inspection/ywPatrolTask.js'
 export default {
   components: {
-    GlobalWindow
+    GlobalWindow,
+    Detail
   },
   extends: BaseOpera,
   data() {
@@ -73,19 +257,83 @@
       id: '',
       visible: false,
       info: {},
-
+      activeTabs: 0,
+      fileList: [],
+  
+      infoList: [],
+      total: 0,
+      pageSize: 10,
+      page: 1
     }
   },
   methods: {
+    handleSizeChange(e) {
+      this.pageSize = e
+      if (this.activeTabs === 1) {
+        this.getyunwei()
+      } else if (this.activeTabs === 2) {
+        this.getXunJian()
+      }
+    },
+    handleCurrentChange(e) {
+      this.page = e
+      if (this.activeTabs === 1) {
+        this.getyunwei()
+      } else if (this.activeTabs === 2) {
+        this.getXunJian()
+      }
+    },
     getDetail() {
+      this.this.activeTabs = 0
       const { id } = this
       detailById(id).then(res => {
         this.info = res
       })
     },
+    handleDetail(row) {
+      this.$refs.DetailRef.visible = true
+      this.$refs.DetailRef.getDetail(row.id)
+    },
     close() {
       this.visible = false
       this.$emit('close')
+    },
+    tabsClick(val) {
+      this.activeTabs = val
+      this.pageSize = 10
+      this.page = 1
+      this.infoList = []
+      if (val === 1) {
+        this.getyunwei()
+      } else if (val === 2) {
+        this.getXunJian()
+      }
+    },
+    // 鑾峰彇璁惧杩愮淮璁板綍
+    getyunwei() {
+      fetchList({
+        capacity: this.pageSize,
+        page: this.page,
+        model: {
+          deviceId: this.id
+        }
+      }).then(res => {
+        this.infoList = res.records
+        this.total = res.total
+      })
+    },
+    // 宸℃璁板綍
+    getXunJian() {
+      getDetail({
+        capacity: this.pageSize,
+        page: this.page,
+        model: {
+          deviceId: this.id
+        }
+      }).then(res => {
+        this.infoList = res.records
+        this.total = res.total
+      })
     }
   }
 }
@@ -93,7 +341,24 @@
 
 <style lang="scss" scoped>
 @import '@/assets/style/variables.scss';
-
+.tabs {
+  border-bottom: 1px solid #DFE2E8;
+  display: flex;
+  .tab {
+    height: 58px;
+    line-height: 58px;
+    font-size: 16px;
+    color: #666666;
+    margin-right: 30px;
+    cursor: pointer;
+  }
+  
+  .active {
+    font-weight: 500;
+    color: $primary-color;
+    border-bottom: 2px solid $primary-color;
+  }
+}
 .main {
   padding-top: 20px;
 
diff --git a/admin/src/views/operation/components/deviceEdit.vue b/admin/src/views/operation/components/deviceEdit.vue
index 4c5c8f7..1b125ed 100644
--- a/admin/src/views/operation/components/deviceEdit.vue
+++ b/admin/src/views/operation/components/deviceEdit.vue
@@ -1,52 +1,170 @@
 <template>
   <GlobalWindow :title="param.id ? '缂栬緫璁惧' : '鏂板缓璁惧'" :confirmWorking="subLoading" :visible.sync="isShowModal"
-    width="600px" @close="close" @confirm="handleSub">
+    width="100%" @close="close" @confirm="handleSub">
     <el-form :model="param" ref="paramRef" :rules="rules">
-      <el-form-item label="璁惧缂栫爜" prop="code">
-        <el-input v-model="param.code" placeholder="璇疯緭鍏�" v-trim />
-      </el-form-item>
-      <el-form-item label="璁惧鍚嶇О" prop="name">
-        <el-input v-model="param.name" placeholder="璇疯緭鍏�" v-trim />
-      </el-form-item>
-      <el-form-item label="璁惧鍨嬪彿" prop="">
-        <el-input v-model="param.modelNo" placeholder="璇疯緭鍏�" v-trim />
-      </el-form-item>
-      <el-form-item label="璁惧鍒嗙被" prop="cateId">
-        <el-cascader v-model="param.cateIds" @change="changeSel" placeholder="璇烽�夋嫨璁惧鍒嗙被" clearable :options="cateList"
-          :props="{
-            label: 'name',
-            value: 'id',
-            children: 'childCategoryList'
-          }"></el-cascader>
-      </el-form-item>
-      <el-form-item label="璁惧绠$悊鍛�" prop="">
-        <el-select v-model="param.userId" clearable filterable>
-          <el-option v-for="item in staffList" :label="item.realname" :value="item.id"></el-option>
-        </el-select>
-      </el-form-item>
-      <el-form-item label="鎵�鍦ㄤ綅缃�" prop="">
-        <el-input v-model="param.addr" placeholder="璇疯緭鍏�" v-trim />
-
-      </el-form-item>
-      <el-form-item label="渚涘簲鍟�" prop="">
-        <el-input v-model="param.supplier" placeholder="璇疯緭鍏�" v-trim />
-      </el-form-item>
-      <el-form-item label="杩愮淮鍐呭" prop="">
-        <el-input type="textarea" :rows="4" v-model="param.content" placeholder="璇疯緭鍏�" />
-      </el-form-item>
-      <el-form-item label="璁惧鐘舵��" prop="">
-        <el-select v-model="param.status" filterable>
-          <el-option :value="0" label="姝e父"></el-option>
-          <el-option :value="1" label="鎹熷潖"></el-option>
-          <el-option :value="2" label="鎶ュ簾"></el-option>
-        </el-select>
-      </el-form-item>
-      <el-form-item label="鐓х墖" prop="">
-        <UploadAvatarImage :file="{ 'imgurlfull': param.fileFullUrl, 'imgurl': param.fileUrl }"
-          :uploadData="{ folder: 'ywDevice/' }" @uploadSuccess="uploadAvatarSuccess" @uploadEnd="isUploading = false"
-          @uploadBegin="isUploading = true" />
-      </el-form-item>
+      <div style="width: 100%; display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; padding-top: 20px; box-sizing: border-box;">
+        <div class="title">鍩虹淇℃伅</div>
+        <div style="width: 31%;">
+          <el-form-item label="璁惧缂栫爜" prop="code">
+            <el-input v-model="param.code" placeholder="璇疯緭鍏�" v-trim />
+          </el-form-item>
+        </div>
+        <div style="width: 31%;">
+          <el-form-item label="璁惧鍚嶇О" prop="name">
+            <el-input v-model="param.name" placeholder="璇疯緭鍏�" v-trim />
+          </el-form-item>
+        </div>
+        <div style="width: 31%;">
+          <el-form-item label="璁惧鍨嬪彿" prop="modelNo">
+            <el-input v-model="param.modelNo" placeholder="璇疯緭鍏�" v-trim />
+          </el-form-item>
+        </div>
+        <div style="width: 31%;">
+          <el-form-item label="璁惧鍒嗙被" prop="cateIds">
+            <el-cascader v-model="param.cateIds" @change="changeSel" placeholder="璇烽�夋嫨璁惧鍒嗙被" clearable :options="cateList"
+             :props="{
+              label: 'name',
+              value: 'id',
+              children: 'childCategoryList'
+            }"></el-cascader>
+          </el-form-item>
+        </div>
+        <div style="width: 31%;">
+          <el-form-item label="璁惧绠$悊鍛�" prop="userId">
+            <el-select v-model="param.userId" clearable filterable>
+              <el-option v-for="item in staffList" :label="item.realname" :value="item.id"></el-option>
+            </el-select>
+          </el-form-item>
+        </div>
+        <div style="width: 31%;">
+          <el-form-item label="鎵�鍦ㄤ綅缃�" prop="addr">
+            <el-input v-model="param.addr" placeholder="璇疯緭鍏�" v-trim />
+          </el-form-item>
+        </div>
+        <div style="width: 31%;">
+          <el-form-item label="鎵�灞為」鐩�" prop="projectId">
+            <el-select v-model="param.projectId" @change="changeProject" filterable>
+              <el-option v-for="item in projectList" :label="item.name" :value="item.id"></el-option>
+            </el-select>
+          </el-form-item>
+        </div>
+        <div style="width: 31%;">
+          <el-form-item label="鍏宠仈鎴挎簮" prop="rooms">
+            <el-cascader v-model="param.rooms" :disabled="!param.projectId" ref="cascader" @change="getHouseVal" placeholder="璇烽�夋嫨鍏宠仈鎴挎簮" :options="houseList"
+             :props="{
+              label: 'name',
+              value: 'id',
+              children: 'projectDataVOList'
+            }"></el-cascader>
+          </el-form-item>
+        </div>
+        <div style="width: 31%;">
+          <el-form-item label="璐叆鏃堕棿" prop="buyDate">
+            <el-date-picker
+              v-model="param.buyDate"
+              type="date"
+              value-format="yyyy-MM-dd"
+              placeholder="閫夋嫨鏃ユ湡">
+            </el-date-picker>
+          </el-form-item>
+        </div>
+        <div style="width: 31%;">
+          <el-form-item label="璁惧鐘舵��" prop="status">
+            <el-select v-model="param.status" filterable>
+              <el-option :value="0" label="姝e父"></el-option>
+              <el-option :value="1" label="鎹熷潖"></el-option>
+              <el-option :value="2" label="鎶ュ簾"></el-option>
+            </el-select>
+          </el-form-item>
+        </div>
+        <div style="width: 100%;">
+          <el-form-item label="杩愮淮鍐呭" prop="content">
+            <el-input type="textarea" :rows="4" v-model="param.content" placeholder="璇疯緭鍏�" />
+          </el-form-item>
+        </div>
+        <div style="width: 100%;">
+          <el-form-item label="鐓х墖" prop="">
+            <UploadAvatarImage :file="{ 'imgurlfull': param.fileFullUrl, 'imgurl': param.fileUrl }"
+             :uploadData="{ folder: 'ywDevice/' }" @uploadSuccess="uploadAvatarSuccess" @uploadEnd="isUploading = false"
+             @uploadBegin="isUploading = true" />
+            <div style="width: 100%; height: 40px;"></div>
+          </el-form-item>
+        </div>
+        <div style="width: 100%;">
+          <el-form-item label="闄勪欢" prop="multifileList">
+            <div style="display: flex; flex-direction: column; align-items: flex-start;">
+              <el-button type="text" @click="$refs.uploadFile.click()">+娣诲姞闄勪欢</el-button>
+              <el-table
+                :data="param.multifileList"
+                border
+                style="width: 100%">
+                <el-table-column
+                  prop="name"
+                  label="闄勪欢鍚嶇О">
+                </el-table-column>
+                <el-table-column
+                  prop="createUserName"
+                  label="鎿嶄綔浜�">
+                </el-table-column>
+                <el-table-column
+                  prop="createTime"
+                  label="鎿嶄綔鏃堕棿">
+                </el-table-column>
+                <el-table-column
+                  label="鎿嶄綔">
+                  <template slot-scope="scope">
+                    <el-button type="text" @click="deleFile(scope.$index)">鍒犻櫎</el-button>
+                  </template>
+                </el-table-column>
+              </el-table>
+            </div>
+          </el-form-item>
+        </div>
+  
+        <div class="title">渚涘簲鍟嗕俊鎭�</div>
+        <div style="width: 31%;">
+          <el-form-item label="渚涘簲鍟�" prop="supplier">
+            <el-input v-model="param.supplier" placeholder="璇疯緭鍏�" v-trim />
+          </el-form-item>
+        </div>
+        <div style="width: 31%;">
+          <el-form-item label="鑱旂郴浜�" prop="supplierLinker">
+            <el-input v-model="param.supplierLinker" placeholder="璇疯緭鍏�" v-trim />
+          </el-form-item>
+        </div>
+        <div style="width: 31%;">
+          <el-form-item label="鑱旂郴鏂瑰紡" prop="supplierPhone">
+            <el-input v-model="param.supplierPhone" placeholder="璇疯緭鍏�" v-trim />
+          </el-form-item>
+        </div>
+  
+        <div class="title">缁翠繚淇℃伅</div>
+        <div style="width: 31%;">
+          <el-form-item label="缁翠繚璐熻矗浜�" prop="maintenanceUserId">
+            <el-select v-model="param.maintenanceUserId" clearable filterable>
+              <el-option v-for="item in staffList" :label="item.realname" :value="item.id"></el-option>
+            </el-select>
+          </el-form-item>
+        </div>
+        <div style="width: 31%;">
+          <el-form-item label="缁翠繚鍒版湡鏃�" prop="maintenanceOverDate">
+            <el-date-picker
+              v-model="param.maintenanceOverDate"
+              type="date"
+              value-format="yyyy-MM-dd"
+              placeholder="閫夋嫨鏃ユ湡">
+            </el-date-picker>
+          </el-form-item>
+        </div>
+        <div style="width: 31%;"></div>
+        <div style="width: 100%;">
+          <el-form-item label="缁翠繚璇存槑" prop="maintenanceContent">
+            <el-input v-model="param.maintenanceContent" type="textarea" placeholder="璇疯緭鍏�" v-trim />
+          </el-form-item>
+        </div>
+      </div>
     </el-form>
+    <input type="file" ref="uploadFile" style="position: fixed; top: -20px; left: 0;" @change="getFile" />
   </GlobalWindow>
 </template>
 
@@ -56,7 +174,10 @@
 import { fetchList } from '@/api/business/category'
 import { create, updateById, detailById } from '@/api/Inspection/device'
 import { getUserList } from '@/api/system/user'
-import { Message } from 'element-ui'
+import { uploadBatch } from '@/api/system/common'
+import { getProjectList, tree } from '@/api/project/ywProject'
+import { Loading, Message } from 'element-ui'
+import { mapState } from 'vuex'
 export default {
   components: { GlobalWindow, UploadAvatarImage },
   data() {
@@ -64,22 +185,126 @@
       isShowModal: false,
       subLoading: false,
       param: {
-        status: 0
+        code: '',
+        name: '',
+        modelNo: '',
+        cateIds: '',
+        userId: '',
+        addr: '',
+        projectId: '',
+        rooms: [],
+        buildingId: '',
+        floorId: '',
+        roomId: '',
+        
+        supplier: [],
+        buyDate: '',
+        content: '',
+        supplierLinker: '',
+        supplierPhone: '',
+        maintenanceUserId: '',
+        maintenanceOverDate: '',
+        maintenanceContent: '',
+        status: 0,
+        multifileList: []
       },
-      cateList: [],
       rules: {
-        name: [{ required: true, message: '璇疯緭鍏�' }],
-        code: [{ required: true, message: '璇疯緭鍏�' }],
-        cateId: [{ required: true, message: '璇烽�夋嫨' }],
+        name: [{ required: true, message: '璇疯緭鍏�', trigger: 'blur' }],
+        code: [{ required: true, message: '璇疯緭鍏�', trigger: 'blur' }],
+        cateId: [{ required: true, message: '璇烽�夋嫨', trigger: 'blur' }],
+        projectId: [{ required: true, message: '璇烽�夋嫨', trigger: 'blur' }],
+        rooms: [{ required: true, message: '璇烽�夋嫨', trigger: 'blur' }]
       },
-      staffList: []
-
+      loadings: false,
+      cateList: [],
+      houseList: [],
+      staffList: [],
+      projectList: []
     }
+  },
+  computed: {
+    ...mapState(['userInfo'])
   },
   created() {
     this.initData()
+    this.getProjectLists()
+    console.log(this.userInfo)
   },
   methods: {
+    getHouseVal(e) {
+      this.param.buildingId = e[1]
+      this.param.floorId = e[2]
+      this.param.roomId = e[3]
+    },
+    changeProject(e) {
+      this.getHouseTree()
+    },
+    getHouseTree() {
+      tree({
+        projectId: this.param.projectId
+      }).then(res => {
+        this.addParamToArray(res)
+        this.houseList = res
+      })
+    },
+    addParamToArray(arr) {
+      for (let i = 0; i < arr.length; i++) {
+        const currentItem = arr[i].projectDataVOList
+        if (currentItem && currentItem.length >= 0) {
+          currentItem.forEach(item => {
+            if (item.lv === 3) {
+              delete item.projectDataVOList
+            }
+          })
+        }
+        if (currentItem && currentItem.length > 0) {
+          this.addParamToArray(currentItem)
+        }
+      }
+    },
+    deleFile(index) {
+      this.param.multifileList.splice(index, 1)
+    },
+    // 鑾峰彇椤圭洰
+    getProjectLists() {
+      getProjectList({})
+        .then(res => {
+          this.projectList = res
+        })
+    },
+    // 涓婁紶闄勪欢
+    getFile(e) {
+      this.loadings = Loading.service({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      })
+      let formDate = new FormData()
+      formDate.append('folder', 'YW_DEVICE')
+      formDate.append('file', e.target.files[0])
+      uploadBatch(formDate)
+        .then(res => {
+          this.param.multifileList.push({ ...res[0], fileurl: res[0].imgaddr, name: res[0].originname, createUserName: this.userInfo.realname, createTime: this.getDate() })
+        })
+        .finally(() => {
+          e.target.files = null
+          this.loadings.close()
+        })
+    },
+    getDate() {
+      const currentDate = new Date();
+
+      const year = currentDate.getFullYear(); // 鑾峰彇褰撳墠骞翠唤
+      const month = currentDate.getMonth() + 1; // 鑾峰彇褰撳墠鏈堜唤 (0-11锛屾墍浠ラ渶瑕� +1)
+      const day = currentDate.getDate(); // 鑾峰彇褰撳墠鏃ユ湡
+      const hours = currentDate.getHours(); // 鑾峰彇褰撳墠灏忔椂
+      const minutes = currentDate.getMinutes(); // 鑾峰彇褰撳墠鍒嗛挓
+      const seconds = currentDate.getSeconds(); // 鑾峰彇褰撳墠绉掗挓
+      
+      return `${year}-${month < 10 ? '0' + month : month}-${day < 10 ? '0' + day : day} `
+              + `${hours < 10 ? '0' + hours : hours}:${minutes < 10 ? '0' + minutes : minutes}:${seconds < 10 ? '0' + seconds : seconds}`;
+    },
     handleSub() {
       const { param, subLoading } = this
       this.$refs['paramRef'].validate((valid) => {
@@ -100,6 +325,15 @@
     getDetail(id) {
       detailById(id).then(res => {
         this.param = res
+        this.param.rooms = [res.projectId, res.buildingId, res.floorId, res.roomId]
+        this.param.multifileList = res.multifileList.map(item => {
+          return {
+            ...item,
+            createUserName: item.userName,
+            createTime: item.createDate
+          }
+        })
+        this.getHouseTree()
         const cateId = this.param.cateId || ''
         setTimeout(() => {
           if (cateId) {
@@ -108,7 +342,6 @@
                 item.childCategoryList.forEach(item2 => {
                   if (item2.id == cateId) {
                     this.$set(this.param, 'cateIds', [item.id, item2.id])
-                    console.log('cateId', this.form)
                   }
                 })
               }
@@ -149,4 +382,17 @@
     }
   }
 }
-</script>
\ No newline at end of file
+</script>
+
+<style lang="scss" scoped>
+  @import '@/assets/style/variables.scss';
+  .title {
+    width: 100%;
+    font-weight: 500;
+    font-size: 18px;
+    color: $primary-color;
+    margin-bottom: 10px;
+    display: flex;
+    align-items: center;
+  }
+</style>
diff --git a/admin/src/views/operation/device.vue b/admin/src/views/operation/device.vue
index 770219c..43a7339 100644
--- a/admin/src/views/operation/device.vue
+++ b/admin/src/views/operation/device.vue
@@ -120,8 +120,6 @@
       this.$nextTick(() => {
         this.$refs.EditRef.isShowModal = true
         if (row && row.id) {
-          console.log('---')
-
           this.$refs.EditRef.getDetail(row.id)
         }
       })
diff --git a/admin/src/views/project/components/houseDetails.vue b/admin/src/views/project/components/houseDetails.vue
index 5e61c5c..394d64a 100644
--- a/admin/src/views/project/components/houseDetails.vue
+++ b/admin/src/views/project/components/houseDetails.vue
@@ -1,11 +1,16 @@
 <template>
     <GlobalWindow
-        title="妤煎畤璇︽儏"
+        :title="title"
         :showConfirm="false"
         :visible.sync="visible"
-        width="800px">
+        width="100%">
         <div class="right">
-            <div class="right_head">椤圭洰鍚嶇О</div>
+            <div class="right_head">
+                <span>{{info.roomNum}}</span>
+                <el-tag type="success" v-if="info.leaseStatus === 0">寰呯璧�</el-tag>
+                <el-tag type="success" v-if="info.leaseStatus === 1">宸茬璧�</el-tag>
+                <el-tag type="success" v-if="info.leaseStatus === 2">鏈紑鍚璧�</el-tag>
+            </div>
             <div class="right_cate">
                 <el-tabs v-model="activeName" @tab-click="handleClick">
                     <el-tab-pane label="鎴挎簮淇℃伅" name="houseinfo">
@@ -17,39 +22,40 @@
                                 <div class="xm_info">
                                     <div class="xm_info_row" style="width: 25%;">
                                         <span>鎵�灞為」鐩�</span>
-                                        <span>XXXXXXXXXX</span>
+                                        <span>{{info.projectName}}</span>
                                     </div>
                                     <div class="xm_info_row" style="width: 25%;">
                                         <span>妤煎畤</span>
-                                        <span>缁煎悎妤�</span>
+                                        <span>{{info.buildingName}}</span>
                                     </div>
                                     <div class="xm_info_row" style="width: 25%;">
                                         <span>妤煎眰</span>
-                                        <span>1</span>
+                                        <span>{{info.floorName}}</span>
                                     </div>
                                     <div class="xm_info_row" style="width: 25%;">
                                         <span>鎴垮彿</span>
-                                        <span>101娲诲姩瀹�</span>
+                                        <span>{{info.roomNum}}</span>
                                     </div>
                                     <div class="xm_info_row" style="width: 25%; margin-top: 15px;">
                                         <span>鎴块棿缂栧彿</span>
-                                        <span>101</span>
+                                        <span>{{info.code}}</span>
                                     </div>
                                     <div class="xm_info_row" style="width: 25%; margin-top: 15px;">
                                         <span>鏄惁鎷涘晢</span>
-                                        <span>鍚�</span>
+                                        <span v-if="info.isInvestment === 0">鍚�</span>
+                                        <span v-if="info.isInvestment === 1">鏄�</span>
                                     </div>
                                     <div class="xm_info_row" style="width: 25%; margin-top: 15px;">
                                         <span>寤虹瓚闈㈢Н</span>
-                                        <span>50銕�</span>
+                                        <span>{{info.area}}銕�</span>
                                     </div>
                                     <div class="xm_info_row" style="width: 25%; margin-top: 15px;">
                                         <span>璁$闈㈢Н</span>
-                                        <span>50銕�</span>
+                                        <span>{{info.rentArea}}銕�</span>
                                     </div>
                                     <div class="xm_info_row" style="width: 25%; margin-top: 15px;">
                                         <span>璁¤垂闈㈢Н</span>
-                                        <span>45銕�</span>
+                                        <span>{{info.feeArea}}銕�</span>
                                     </div>
                                 </div>
                             </el-card>
@@ -62,37 +68,51 @@
                                     <span>褰撳墠鍦ㄧ鍚堝悓</span>
                                 </div>
                                 <div class="xm_table">
-                                    <el-input v-model="input" style="width: 300px; margin-bottom: 15px;" placeholder="璇疯緭鍏ュ悎鍚岀紪鍙�"></el-input>
+                                    <div style="width: 100%; display: flex; align-items: center; margin-bottom: 15px;">
+                                        <el-input v-model="form.code" style="width: 300px;" placeholder="璇疯緭鍏ュ悎鍚岀紪鍙�"></el-input>
+                                        <el-button type="primary" style="margin-left: 15px;" @click="getTenantContract()">鎼滅储</el-button>
+                                    </div>
                                     <el-table
                                         :data="tableData"
                                         border
+                                        v-loading="loading"
                                         style="width: 100%">
                                         <el-table-column
-                                            prop="date"
                                             label="鍚堝悓缂栧彿">
+                                            <template slot-scope="{row}">
+                                                <el-button type="text" @click="$refs.ContractDetailRef.open('鍚堝悓璇︽儏', row.id)" v-if="row.status === 1">{{row.code}}</el-button>
+                                                <el-button type="text" v-else>{{row.code}}</el-button>
+                                            </template>
                                         </el-table-column>
                                         <el-table-column
-                                            prop="name"
+                                            prop="renterName"
                                             label="瀹㈡埛鍚嶇О">
                                         </el-table-column>
                                         <el-table-column
-                                            prop="address"
+                                            prop="startDate"
                                             label="寮�濮嬫棩鏈�">
                                         </el-table-column>
                                         <el-table-column
-                                            prop="address"
+                                            prop="endDate"
                                             label="缁撴潫鏃ユ湡">
                                         </el-table-column>
                                         <el-table-column
-                                            prop="address"
                                             label="绉熻祦鍗曚环">
+                                            <template slot-scope="{row}">
+                                                <div style="display: flex; align-items: center;">
+                                                    <span>{{row.zlFirstPrice || row.wyFirstPrice}}</span>
+                                                    <span>{{row.zlFirstCircleStr || row.wyFirstCircleStr}}</span>
+                                                </div>
+                                            </template>
                                         </el-table-column>
                                         <el-table-column
-                                            prop="address"
                                             label="绉熻祦闈㈢Н锛堛帯锛�">
+                                            <template slot-scope="{row}">
+                                                {{row.totalArea}}銕�
+                                            </template>
                                         </el-table-column>
                                         <el-table-column
-                                            prop="address"
+                                            prop="signDate"
                                             label="绛捐鏃�">
                                         </el-table-column>
                                         <el-table-column
@@ -100,8 +120,14 @@
                                             label="鍚堝悓鏉ユ簮">
                                         </el-table-column>
                                         <el-table-column
-                                            prop="address"
                                             label="鍚堝悓鐘舵��">
+                                            <template slot-scope="{row}">
+                                                <span class="primaryColor" v-if="row.status === 0">寰呮墽琛�</span>
+                                                <span class="green" v-if="row.status === 1">姝e父鎵ц涓�</span>
+                                                <span class="gary" v-if="row.status === 2">宸插埌鏈�</span>
+                                                <span class="gary" v-if="row.status === 3">閫�绉熺粨绠椾腑</span>
+                                                <span class="gary" v-if="row.status === 4">宸查��绉�</span>
+                                            </template>
                                         </el-table-column>
                                     </el-table>
                                     <div class="xm_table_f">
@@ -125,84 +151,93 @@
                                 <div class="xm_one1">
                                     <div class="xm_one_row">
                                         <span>寰呮寚娲炬暟閲�</span>
-                                        <span>15</span>
+                                        <span>{{numObj.waitAssignAmount || 0}}</span>
                                     </div>
                                     <div class="xm_one_row">
                                         <span>寰呭鐞嗘暟閲�</span>
-                                        <span>15</span>
+                                        <span>{{numObj.waitDealAmount || 0}}</span>
                                     </div>
                                     <div class="xm_one_row">
                                         <span>鏈湀宸ュ崟鏁�</span>
-                                        <span>15</span>
+                                        <span>{{numObj.monthAmount || 0}}</span>
                                     </div>
                                     <div class="xm_one_row">
                                         <span>绱宸ュ崟鏁�</span>
-                                        <span>15</span>
+                                        <span>{{numObj.amount || 0}}</span>
                                     </div>
                                 </div>
                             </el-card>
                             <el-card style="margin-top: 20px;">
                                 <div class="xm_table">
                                     <div class="xm_table_search">
-                                        <el-select v-model="value" style="width: 300px; margin-right: 15px;" placeholder="浣嶇疆绫诲瀷">
-                                            <el-option
-                                                    v-for="item in options"
-                                                    :key="item.value"
-                                                    :label="item.label"
-                                                    :value="item.value">
-                                            </el-option>
-                                        </el-select>
-                                        <el-select v-model="value" style="width: 300px;" placeholder="宸ュ崟鍒嗙被">
-                                            <el-option
-                                                    v-for="item in options"
-                                                    :key="item.value"
-                                                    :label="item.label"
-                                                    :value="item.value">
-                                            </el-option>
-                                        </el-select>
+                                        <div>
+                                            <el-cascader style="width: 150px; margin-right: 15px;" v-model="form.areaIds" @change="changeSel" placeholder="璇烽�夋嫨宸ュ崟鍒嗙被" clearable
+                                                :options="cateList" :props="{
+                                                    label: 'name',
+                                                    value: 'id',
+                                                    children: 'childCategoryList'
+                                                }" />
+                                            <el-select v-model="form.status" style="width: 150px; margin-right: 15px;" placeholder="宸ュ崟鐘舵��">
+                                                <el-option label="鍚敤" :value="0"></el-option>
+                                                <el-option label="绂佺敤" :value="1"></el-option>
+                                            </el-select>
+                                            <el-button type="primary" @click="getFetchList">鏌ヨ</el-button>
+                                            <el-button @click="clear">娓呯┖</el-button>
+                                        </div>
+                                        <el-button type="primary" @click="$refs.operaYwWorkorderWindow.open('鏂板缓宸ュ崟')">鏂板宸ュ崟</el-button>
                                     </div>
                                     <el-table
-                                            :data="tableData"
-                                            border
-                                            style="width: 100%">
+                                        :data="tableData"
+                                        border
+                                        v-loading="loading"
+                                        style="width: 100%">
                                         <el-table-column
-                                                prop="date"
-                                                label="宸ュ崟鍒嗙被">
+                                            prop="categoryName"
+                                            label="宸ュ崟鍒嗙被">
                                         </el-table-column>
                                         <el-table-column
-                                                prop="name"
-                                                label="鎶ヤ慨鍖哄煙">
+                                            label="鎶ヤ慨鍖哄煙">
+                                            <template v-slot="scope">
+                                                <span>{{ scope.row.buildingName }} / {{ scope.row.areaType == 0 ? scope.row.roomNum : scope.row.floorName
+                                                  }}</span>
+                                            </template>
                                         </el-table-column>
                                         <el-table-column
-                                                prop="address"
-                                                label="涓婃姤浜�">
+                                            prop="creatorName"
+                                            label="涓婃姤浜�">
                                         </el-table-column>
                                         <el-table-column
-                                                prop="address"
-                                                label="涓婃姤鏃堕棿">
+                                            prop="createDate"
+                                            label="涓婃姤鏃堕棿">
                                         </el-table-column>
                                         <el-table-column
-                                                prop="address"
-                                                label="澶勭悊浜�">
+                                            prop="dealUserName"
+                                            label="澶勭悊浜�">
                                         </el-table-column>
                                         <el-table-column
-                                                prop="address"
-                                                label="宸ュ崟鐘舵��">
+                                            label="宸ュ崟鐘舵��">
+                                            <template slot-scope="{row}">
+                                                <span v-if="row.dealStatus === 0">寰呮寚娲�</span>
+                                                <span v-if="row.dealStatus === 1">宸叉寚娲�</span>
+                                                <span v-if="row.dealStatus === 2">宸插鐞�</span>
+                                            </template>
                                         </el-table-column>
                                         <el-table-column
-                                                prop="address"
-                                                label="鎿嶄綔">
+                                            label="鎿嶄綔">
+                                            <template slot-scope="{row}">
+                                                <el-button type="text" @click="handleDetail(row)">鏌ョ湅璇︽儏</el-button>
+                                            </template>
                                         </el-table-column>
                                     </el-table>
                                     <div class="xm_table_f">
                                         <el-pagination
-                                                @size-change="handleSizeChange"
-                                                @current-change="handleCurrentChange"
-                                                :current-page="page"
-                                                :page-sizes="[10, 20, 30, 40]"
-                                                :page-size="pageTotal"
-                                                layout="total, sizes, prev, pager, next, jumper"
-                                                :total="total">
+                                            @size-change="handleSizeChange"
+                                            @current-change="handleCurrentChange"
+                                            :current-page="page"
+                                            :page-sizes="[10, 20, 30, 40]"
+                                            :page-size="pageTotal"
+                                            layout="total, sizes, prev, pager, next, jumper"
+                                            :total="total">
                                         </el-pagination>
                                     </div>
                                 </div>
@@ -223,62 +258,64 @@
                                 <div class="xm_table">
                                     <div class="xm_table_search">
                                         <div class="xm_table_search_left">
-                                            <el-input v-model="input" placeholder="璇疯緭鍏ヨ澶囧悕绉�/缂栫爜" style="width: 200px; margin-right: 15px;"></el-input>
-                                            <el-select v-model="value" style="width: 200px; margin-right: 15px;" placeholder="璁惧鐘舵��">
-                                                <el-option
-                                                        v-for="item in options"
-                                                        :key="item.value"
-                                                        :label="item.label"
-                                                        :value="item.value">
-                                                </el-option>
+                                            <el-input v-model="form.name" placeholder="璇疯緭鍏ヨ澶囧悕绉�/缂栫爜" style="width: 200px; margin-right: 15px;"></el-input>
+                                            <el-select v-model="form.status" style="width: 150px; margin-right: 15px;" placeholder="璁惧鐘舵��">
+                                                <el-option label="姝e父" :value="0"></el-option>
+                                                <el-option label="鎹熷潖" :value="1"></el-option>
+                                                <el-option label="鎶ュ簾" :value="2"></el-option>
                                             </el-select>
-                                            <el-button type="primary">鏌ヨ</el-button>
-                                            <el-button>娓呯┖</el-button>
+                                            <el-button type="primary" @click="getDevicePage">鏌ヨ</el-button>
+                                            <el-button @click="clear">娓呯┖</el-button>
                                         </div>
-                                        <el-button type="primary">鏂板</el-button>
+                                        <el-button type="primary" @click="handleEdit">鏂板</el-button>
                                     </div>
                                     <el-table
-                                            :data="tableData"
-                                            border
-                                            style="width: 100%">
+                                        :data="tableData"
+                                        border
+                                        v-loading="loading"
+                                        style="width: 100%">
                                         <el-table-column
-                                                prop="date"
-                                                label="宸ュ崟鍒嗙被">
+                                            prop="code"
+                                            label="璁惧缂栫爜">
                                         </el-table-column>
                                         <el-table-column
-                                                prop="name"
-                                                label="鎶ヤ慨鍖哄煙">
+                                            prop="name"
+                                            label="璁惧鍚嶇О">
                                         </el-table-column>
                                         <el-table-column
-                                                prop="address"
-                                                label="涓婃姤浜�">
+                                            prop="categoryName"
+                                            label="璁惧鍒嗙被">
                                         </el-table-column>
                                         <el-table-column
-                                                prop="address"
-                                                label="涓婃姤鏃堕棿">
+                                            prop="modelNo"
+                                            label="璁惧鍨嬪彿">
                                         </el-table-column>
                                         <el-table-column
-                                                prop="address"
-                                                label="澶勭悊浜�">
+                                            prop="realName"
+                                            label="璁惧绠$悊鍛�">
                                         </el-table-column>
                                         <el-table-column
-                                                prop="address"
-                                                label="宸ュ崟鐘舵��">
+                                            prop="supplier"
+                                            label="璁惧渚涘簲鍟�">
                                         </el-table-column>
                                         <el-table-column
-                                                prop="address"
-                                                label="鎿嶄綔">
+                                            label="璁惧鐘舵��">
+                                            <template slot-scope="{row}">
+                                                <span v-if="row.status === 0">姝e父</span>
+                                                <span v-if="row.status === 1">鎹熷潖</span>
+                                                <span v-if="row.status === 2">鎶ュ簾</span>
+                                            </template>
                                         </el-table-column>
                                     </el-table>
                                     <div class="xm_table_f">
                                         <el-pagination
-                                                @size-change="handleSizeChange"
-                                                @current-change="handleCurrentChange"
-                                                :current-page="page"
-                                                :page-sizes="[10, 20, 30, 40]"
-                                                :page-size="pageTotal"
-                                                layout="total, sizes, prev, pager, next, jumper"
-                                                :total="total">
+                                            @size-change="handleSizeChange"
+                                            @current-change="handleCurrentChange"
+                                            :current-page="page"
+                                            :page-sizes="[10, 20, 30, 40]"
+                                            :page-size="pageTotal"
+                                            layout="total, sizes, prev, pager, next, jumper"
+                                            :total="total">
                                         </el-pagination>
                                     </div>
                                 </div>
@@ -294,62 +331,65 @@
                                 <div class="xm_table">
                                     <div class="xm_table_search">
                                         <div class="xm_table_search_left">
-                                            <el-input v-model="input" placeholder="璇疯緭鍏ヨ祫浜у悕绉�/缂栫爜" style="width: 200px; margin-right: 15px;"></el-input>
+                                            <el-input v-model="form.code" placeholder="璇疯緭鍏ヨ祫浜у悕绉�/缂栫爜" style="width: 200px; margin-right: 15px;"></el-input>
                                             <el-select v-model="value" style="width: 200px; margin-right: 15px;" placeholder="璧勪骇鍒嗙被">
                                                 <el-option
-                                                        v-for="item in options"
-                                                        :key="item.value"
-                                                        :label="item.label"
-                                                        :value="item.value">
+                                                    v-for="item in options"
+                                                    :key="item.value"
+                                                    :label="item.label"
+                                                    :value="item.value">
                                                 </el-option>
                                             </el-select>
-                                            <el-button type="primary">鏌ヨ</el-button>
-                                            <el-button>娓呯┖</el-button>
+                                            <el-button type="primary" @click="getPropertyLists">鏌ヨ</el-button>
+                                            <el-button @click="clear">娓呯┖</el-button>
                                         </div>
-                                        <el-button type="primary">鏂板</el-button>
+                                        <el-button type="primary" @click="$refs.newMaterial.open('鏂板缓鐗╂枡')">鏂板</el-button>
                                     </div>
                                     <el-table
-                                            :data="tableData"
-                                            border
-                                            style="width: 100%">
+                                        :data="tableData"
+                                        border
+                                        v-loading="loading"
+                                        style="width: 100%">
                                         <el-table-column
-                                                prop="date"
-                                                label="璧勪骇缂栫爜">
+                                            prop="code"
+                                            label="璧勪骇缂栫爜">
                                         </el-table-column>
                                         <el-table-column
-                                                prop="name"
-                                                label="璧勪骇鍚嶇О">
+                                            prop="name"
+                                            label="璧勪骇鍚嶇О">
                                         </el-table-column>
                                         <el-table-column
-                                                prop="address"
-                                                label="鏉$爜">
+                                            prop="qrcode"
+                                            label="鏉$爜">
                                         </el-table-column>
                                         <el-table-column
-                                                prop="address"
-                                                label="鍝佺墝">
+                                            prop="brand"
+                                            label="鍝佺墝">
                                         </el-table-column>
                                         <el-table-column
-                                                prop="address"
-                                                label="瑙勬牸鍨嬪彿">
+                                            prop="attr"
+                                            label="瑙勬牸鍨嬪彿">
                                         </el-table-column>
                                         <el-table-column
-                                                prop="address"
-                                                label="鍗曚綅">
+                                            prop="unitName"
+                                            label="鍗曚綅">
                                         </el-table-column>
                                         <el-table-column
-                                                prop="address"
-                                                label="搴撳瓨鏁伴噺">
+                                            label="搴撳瓨鏁伴噺">
+                                            <template v-slot="scope">
+                                                <span>{{ scope.row.maxStock }} ~ {{ scope.row.minStock }}</span>
+                                            </template>
                                         </el-table-column>
                                     </el-table>
                                     <div class="xm_table_f">
                                         <el-pagination
-                                                @size-change="handleSizeChange"
-                                                @current-change="handleCurrentChange"
-                                                :current-page="page"
-                                                :page-sizes="[10, 20, 30, 40]"
-                                                :page-size="pageTotal"
-                                                layout="total, sizes, prev, pager, next, jumper"
-                                                :total="total">
+                                            @size-change="handleSizeChange"
+                                            @current-change="handleCurrentChange"
+                                            :current-page="page"
+                                            :page-sizes="[10, 20, 30, 40]"
+                                            :page-size="pageTotal"
+                                            layout="total, sizes, prev, pager, next, jumper"
+                                            :total="total">
                                         </el-pagination>
                                     </div>
                                 </div>
@@ -359,34 +399,222 @@
                 </el-tabs>
             </div>
         </div>
+        <!--    鍚堝悓璇︽儏    -->
+        <ContractDetail ref="ContractDetailRef" />
+        <!--    宸ュ崟璇︽儏    -->
+        <Detail v-if="showDetail" ref="DetailRef" @close="showDetail = false" />
+        <!--    鏂板缓宸ュ崟    -->
+        <OperaYwWorkorderWindow ref="operaYwWorkorderWindow" @success="getFetchList" />
+        <!--    鏂板缓璁惧    -->
+        <Edit v-if="showEdit1" ref="EditRef" @success="getDevicePage" @close="showEdit1 = false" />
+        <!--    鏂板缓璧勪骇    -->
+        <newMaterial ref="newMaterial" @success="getPropertyLists" />
     </GlobalWindow>
 </template>
 
 <script>
   import BaseOpera from '@/components/base/BaseOpera'
   import GlobalWindow from '@/components/common/GlobalWindow'
+  import newMaterial from '../../stock/components/newMaterial'
   import * as echarts from 'echarts';
+  import { detailById } from '@/api/project/ywRoom'
+  import { fetchList as TenantContract } from '@/api/contract'
+  import { getDataVO, fetchList } from '@/api/workorder/ywWorkorder'
+  import ContractDetail from '../../contract/components/contractDetail'
+  import { fetchList as getCateList } from '@/api/business/category.js'
+  import { fetchList as getPropertyList } from '@/api/ywMaterial'
+  import { getDeviceStatus, getDeviceCateData, fetchList as devicePage } from '@/api/Inspection/device'
+  import Detail from '../../workorder/components/detail'
+  import OperaYwWorkorderWindow from '../../workorder/components/OperaYwWorkorderWindow'
+  import Edit from '../../operation/components/deviceEdit'
   export default {
     name: "houseDetails",
     extends: BaseOpera,
-    components: { GlobalWindow },
+    components: { GlobalWindow, ContractDetail, Detail, OperaYwWorkorderWindow, Edit, newMaterial },
     data() {
       return {
         info: {},
+        houseId: '',
+        propsName: '',
         activeName: 'houseinfo',
         total: 0,
         pageTotal: 10,
         page: 1,
-        tableData: []
+        numObj: {},
+        tableData: [],
+        loading: false,
+        form: {
+          code: '',
+          areaIds: [],
+          cateId: '',
+          status: '',
+          name: ''
+        },
+        cateList: [],
+        categaryList: [],
+        deviceList: [],
+        showDetail: false,
+        showEdit1: false
       }
     },
     methods: {
-      open (title, target) {
+      open (title, id) {
         this.title = title
-        this.visible = true
+        this.houseId = id
+        detailById(id)
+          .then(res => {
+            this.info = res
+            this.visible = true
+          })
+      },
+      handleEdit(row) {
+        this.showEdit1 = true
         this.$nextTick(() => {
-          this.reand()
-          this.reand1()
+          this.$refs.EditRef.isShowModal = true
+        })
+      },
+      handleDetail(row) {
+        this.showDetail = true
+        this.$nextTick(() => {
+          this.$refs.DetailRef.visible = true
+          this.$refs.DetailRef.id = row.id
+          this.$refs.DetailRef.getDetail()
+        })
+      },
+      // 鑾峰彇璁惧鐘舵��
+      getDevice() {
+        getDeviceStatus({ roomId: this.houseId })
+            .then(res => {
+              this.$nextTick(() => {
+                this.deviceList = [
+                  { value: res.workAmount || 0, name: '姝e父' },
+                  { value: res.exceptionAmount || 0, name: '寮傚父' },
+                  { value: res.errAmount || 0, name: '鎶ュ簾' }
+                ]
+                this.reand()
+              })
+            })
+      },
+      // 璁惧鏁伴噺鍒嗗竷缁熻
+      getDeviceCateDatas() {
+        getDeviceCateData({
+          roomId: this.houseId
+        }).then(res => {
+          this.categaryList = res
+          this.$nextTick(() => {
+            this.reand1()
+          })
+        })
+      },
+      // 鑾峰彇璁惧鍒嗛〉
+      getDevicePage() {
+        this.loading = true
+        devicePage({
+          capacity: this.pageTotal,
+          page: this.page,
+          model: {
+            roomId: this.houseId,
+            status: this.form.status,
+            name: this.form.name
+          }
+        }).then(res => {
+          this.tableData = res.records
+          this.total = res.total
+        }).finally(() => {
+          this.loading = false
+        })
+      },
+      // 鑾峰彇璧勪骇鍒楄〃
+      getPropertyLists() {
+        this.loading = true
+        getPropertyList({
+          capacity: this.pageTotal,
+          page: this.page,
+          model: {
+            roomId: this.houseId,
+            name: this.form.name
+          }
+        }).then(res => {
+          this.tableData = res.records
+          this.total = res.total
+        }).finally(() => {
+          this.loading = false
+        })
+      },
+      getCate() {
+        getCateList({
+          model: { type: 3 },
+          capacity: 1000,
+          page: 1,
+        }).then(res => {
+          this.cateList = res.records || []
+        })
+      },
+      changeSel(e) {
+        if (e && e.length == 2) {
+          this.$set(this.form, 'cateId', e[1])
+        } else {
+          this.$set(this.form, 'cateId', '')
+        }
+      },
+      clear() {
+        this.page = 1
+        this.form.status = ''
+        this.form.areaIds = []
+        this.form.cateId = ''
+        this.form.name = ''
+        if (this.propsName === 'project') {
+          this.getTenantContract()
+        } else if (this.propsName === 'second') {
+          this.getFetchList()
+        } else if (this.propsName === 'third') {
+          this.getDevicePage()
+        } else if (this.propsName === 'fourth') {
+          this.getPropertyLists()
+        }
+      },
+      // 鑾峰彇宸ュ崟鏁�
+      getDataVOs() {
+        getDataVO({
+          queryId: this.houseId,
+          queryType: 3
+        }).then(res => {
+          this.numObj = res
+        })
+      },
+      // 鑾峰彇宸ュ崟鍒楄〃
+      getFetchList() {
+        this.loading = true
+        fetchList({
+          capacity: 10,
+          page: 1,
+          model: {
+            roomId: this.houseId,
+            status: this.form.status,
+            cateId: this.form.cateId
+          }
+        }).then(res => {
+          this.tableData = res.records
+          this.total = res.total
+        }).finally(() => {
+          this.loading = false
+        })
+      },
+      // 鑾峰彇鍚堝悓鍒嗛〉
+      getTenantContract() {
+        this.loading = true
+        TenantContract({
+          capacity: this.pageTotal,
+          page: this.page,
+          model: {
+            roomIds: [this.houseId],
+            code: this.form.code
+          }
+        }).then(res => {
+          this.tableData = res.records
+          this.total = res.total
+        }).finally(() => {
+          this.loading = false
         })
       },
       reand() {
@@ -394,38 +622,29 @@
         var myChart = echarts.init(chartDom);
         var option;
         option = {
+          title: {
+            text: '璁惧鐘舵��'
+          },
           tooltip: {
             trigger: 'item'
           },
           legend: {
-            top: '5%',
-            left: 'center'
+            left: 'right',
+            top: 'middle',
+            width: '80'
           },
           series: [
             {
-              name: 'Access From',
+              name: '璁惧鐘舵��',
               type: 'pie',
               radius: ['40%', '80%'],
-              avoidLabelOverlap: false,
               label: {
-                show: false,
-                position: 'center'
+                show: true,
+                position: 'center',
+                fontWeight: 'bold',
+                fontSize: 22
               },
-              emphasis: {
-                label: {
-                  show: true,
-                  fontSize: 40,
-                  fontWeight: 'bold'
-                }
-              },
-              labelLine: {
-                show: false
-              },
-              data: [
-                { value: 1048, name: '姝e父' },
-                { value: 735, name: '寮傚父' },
-                { value: 580, name: '鎶ュ簾' }
-              ]
+              data: this.deviceList
             }
           ]
         };
@@ -435,7 +654,6 @@
         var chartDom = document.getElementById('chat2');
         var myChart = echarts.init(chartDom);
         var option;
-        // There should not be negative values in rawData
         const rawData = [
           [100, 302, 301, 334, 390, 330, 320],
           [320, 132, 101, 134, 90, 230, 210],
@@ -451,12 +669,6 @@
           }
           totalData.push(sum);
         }
-        const grid = {
-          left: 100,
-          right: 100,
-          top: 50,
-          bottom: 50
-        };
         const series = [
           'Direct',
           'Mail Ad',
@@ -469,41 +681,103 @@
             type: 'bar',
             stack: 'total',
             barWidth: '60%',
-            label: {
-              show: true,
-              formatter: (params) => Math.round(params.value * 1000) / 10 + '%'
-            },
             data: rawData[sid].map((d, did) =>
               totalData[did] <= 0 ? 0 : d / totalData[did]
             )
           };
         });
+        let seriesArr = this.categaryList.map(item => {
+          return {
+            name: item.cateName,
+            type: 'bar',
+            stack: 'total',
+            barWidth: '60%',
+            data: item.ywDeviceCateDataVOList.map((child) =>
+              child.deviceAmount
+            )
+          }
+        })
+        let xAxisData = this.categaryList.map(item => item.cateName)
+        console.log(series)
+        console.log(seriesArr)
+        console.log(xAxisData)
         option = {
-          legend: {
-            selectedMode: false
+          title: {
+            text: '璁惧鏁伴噺鍒嗙被缁熻'
           },
-          grid,
+          grid: {
+            left: 50,
+            right: 50,
+            top: 50,
+            bottom: 50
+          },
+          tooltip: {
+            trigger: 'axis',
+            axisPointer: {
+              type: 'shadow'
+            }
+          },
           yAxis: {
             type: 'value'
           },
           xAxis: {
             type: 'category',
-            data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
+            data: xAxisData
           },
-          series
+          series: seriesArr
         };
 
         option && myChart.setOption(option);
       },
-      handleClick(tab, event) {
-        console.log(tab, event);
+      handleClick(tab) {
+        this.page = 1
+        this.pageTotal = 10
+        this.tableData = []
+        this.total = 0
+        this.form.code = ''
+        this.form.areaIds = []
+        this.form.cateId = ''
+        this.form.status = ''
+        this.form.name = ''
+        this.propsName = tab._props.name
+        if (tab._props.name === 'project') {
+          this.getTenantContract()
+        } else if (tab._props.name === 'second') {
+          this.getDataVOs()
+          this.getCate()
+          this.getFetchList()
+        } else if (tab._props.name === 'third') {
+          this.getDevice()
+          this.getDeviceCateDatas()
+          this.getDevicePage()
+        } else if (this.propsName === 'fourth') {
+          this.getPropertyLists()
+        }
       },
       handleCurrentChange(page) {
         this.page = page
+        if (this.propsName === 'project') {
+          this.getTenantContract()
+        } else if (this.propsName === 'second') {
+          this.getFetchList()
+        } else if (tab._props.name === 'third') {
+          this.getDevicePage()
+        } else if (this.propsName === 'fourth') {
+          this.getPropertyLists()
+        }
       },
       handleSizeChange(pageTotal) {
         this.pageTotal = pageTotal
-      },
+        if (this.propsName === 'project') {
+          this.getTenantContract()
+        } else if (this.propsName === 'second') {
+          this.getFetchList()
+        } else if (tab._props.name === 'third') {
+          this.getDevicePage()
+        } else if (this.propsName === 'fourth') {
+          this.getPropertyLists()
+        }
+      }
     }
   }
 </script>
@@ -517,10 +791,13 @@
             width: 100%;
             padding: 20px;
             box-sizing: border-box;
-            font-size: 16px;
-            font-weight: bold;
-            color: black;
-            background: #ffffff;
+            span {
+                font-size: 16px;
+                font-weight: bold;
+                color: black;
+                background: #ffffff;
+                margin-right: 10px;
+            }
         }
         .right_cate {
             width: 100%;
diff --git a/admin/src/views/project/housingList.vue b/admin/src/views/project/housingList.vue
index fabf9e7..7d0d874 100644
--- a/admin/src/views/project/housingList.vue
+++ b/admin/src/views/project/housingList.vue
@@ -54,7 +54,7 @@
         <el-table-column v-if="containPermissions(['business:ywroom:update', 'business:ywroom:delete'])" label="鎿嶄綔"
           min-width="140" fixed="right">
           <template slot-scope="{row}">
-            <el-button type="text" @click="$refs.houseDetails.open('鎴挎簮璇︽儏')">鏌ョ湅璇︽儏</el-button>
+            <el-button type="text" @click="$refs.houseDetails.open('鎴挎簮璇︽儏', row.id)">鏌ョ湅璇︽儏</el-button>
             <el-button type="text" @click="editClick(row)" icon="el-icon-edit"
               v-permissions="['business:ywroom:update']">缂栬緫</el-button>
             <el-button type="text" @click="deleteById(row)" icon="el-icon-delete"
diff --git a/admin/src/views/workorder/components/OperaYwWorkorderWindow.vue b/admin/src/views/workorder/components/OperaYwWorkorderWindow.vue
index c97fbf4..f3c7e3a 100644
--- a/admin/src/views/workorder/components/OperaYwWorkorderWindow.vue
+++ b/admin/src/views/workorder/components/OperaYwWorkorderWindow.vue
@@ -3,32 +3,48 @@
     @confirm="confirm">
     <el-form :model="form" ref="form" :rules="rules">
       <el-form-item label="浣嶇疆绫诲瀷" prop="areaType">
-        <el-select v-model="form.areaType">
-          <el-option label="瀹ゅ唴缁翠慨" value="0"></el-option>
-          <el-option label="鍏叡缁翠慨" value="1"></el-option>
+        <el-select v-model="form.areaType" @change="changeType">
+          <el-option label="瀹ゅ唴缁翠慨" :value="0"></el-option>
+          <el-option label="鍏叡缁翠慨" :value="1"></el-option>
         </el-select>
       </el-form-item>
-      <el-form-item label="閫夋嫨椤圭洰" prop="projectId">
-        <el-select v-model="form.projectId" clearable filterable @change="getBuild">
-          <el-option v-for="item in projectList" :label="item.name" :value="item.id" />
-        </el-select>
+  
+      <el-form-item label="鎶ヤ慨鍖哄煙" prop="rooms">
+        <el-cascader
+          v-model="form.rooms"
+          :disabled="![0,1].includes(form.areaType)"
+          ref="cascader"
+          @change="getHouseVal"
+          placeholder="璇烽�夋嫨鎶ヤ慨鍖哄煙"
+          :options="form.areaType === 0 ? houseList : houseList1"
+          :props="{
+              label: 'name',
+              value: 'id',
+              children: 'projectDataVOList'
+          }" />
       </el-form-item>
-      <el-form-item label="閫夋嫨妤煎畤" prop="buildingId">
-        <el-select v-model="form.buildingId" clearable filterable @change="changeBuild">
-          <el-option v-for="item in buildList" :label="item.name" :value="item.id" />
-        </el-select>
-      </el-form-item>
+      
+<!--      <el-form-item label="閫夋嫨椤圭洰" prop="projectId">-->
+<!--        <el-select v-model="form.projectId" clearable filterable @change="getBuild">-->
+<!--          <el-option v-for="item in projectList" :label="item.name" :value="item.id" />-->
+<!--        </el-select>-->
+<!--      </el-form-item>-->
+<!--      <el-form-item label="閫夋嫨妤煎畤" prop="buildingId">-->
+<!--        <el-select v-model="form.buildingId" clearable filterable @change="changeBuild">-->
+<!--          <el-option v-for="item in buildList" :label="item.name" :value="item.id" />-->
+<!--        </el-select>-->
+<!--      </el-form-item>-->
 
-      <el-form-item v-if="form.areaType == 1" label="閫夋嫨妤煎眰" prop="floorId">
-        <el-select v-model="form.floorId">
-          <el-option v-for="item in levelList" clearable filterable :label="item.name" :value="item.id" />
-        </el-select>
-      </el-form-item>
-      <el-form-item v-if="form.areaType == 0" label="閫夋嫨鎴块棿" prop="roomId">
-        <el-select v-model="form.roomId" clearable filterable>
-          <el-option v-for="item in roomList" :label="item.roomNum" :value="item.id" />
-        </el-select>
-      </el-form-item>
+<!--      <el-form-item v-if="form.areaType == 1" label="閫夋嫨妤煎眰" prop="floorId">-->
+<!--        <el-select v-model="form.floorId">-->
+<!--          <el-option v-for="item in levelList" clearable filterable :label="item.name" :value="item.id" />-->
+<!--        </el-select>-->
+<!--      </el-form-item>-->
+<!--      <el-form-item v-if="form.areaType == 0" label="閫夋嫨鎴块棿" prop="roomId">-->
+<!--        <el-select v-model="form.roomId" clearable filterable>-->
+<!--          <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"
           :props="{
@@ -63,8 +79,6 @@
         <el-input type="textarea" :rows="4" v-model="form.content" placeholder="璇疯緭鍏�" :maxlength="300" v-trim />
       </el-form-item>
     </el-form>
-    <!--  -->
-
   </GlobalWindow>
 </template>
 
@@ -72,7 +86,7 @@
 import BaseOpera from '@/components/base/BaseOpera'
 import GlobalWindow from '@/components/common/GlobalWindow'
 import { Loading, Message } from 'element-ui'
-import { getProjectList } from '@/api/project/ywProject'
+import { getProjectList, tree } from '@/api/project/ywProject'
 import { getBuildList } from '@/api/project/ywBuilding'
 import { getRoomList } from '@/api/project/ywRoom'
 import { getFloorList } from '@/api/project/yeFloor'
@@ -87,6 +101,9 @@
       // 琛ㄥ崟鏁版嵁
       form: {
         id: null,
+  
+        rooms: [],
+        
         editDate: '',
         floor: '',
         title: '',
@@ -102,7 +119,7 @@
         userId: '',
         submitDate: '',
         cateId: '',
-        areaType: '0',
+        areaType: 0,
         code: '',
         dealStatus: '',
         dispatchUserId: '',
@@ -113,6 +130,8 @@
         dealInfo: '',
         dealType: ''
       },
+      houseList: [],
+      houseList1: [],
       loadingInstance: null,
       // 楠岃瘉瑙勫垯
       rules,
@@ -140,7 +159,8 @@
       this.visible = true
       this.getProject()
       this.getCate()
-      // 鏂板缓 
+      this.getHouseTree()
+      // 鏂板缓
       if (target == null) {
         this.form = {
           id: null,
@@ -159,7 +179,7 @@
           userId: '',
           submitDate: '',
           cateId: '',
-          areaType: '0',
+          areaType: 0,
           code: '',
           dealStatus: '',
           dispatchUserId: '',
@@ -185,6 +205,65 @@
           this.form[key] = target[key]
         }
       })
+    },
+    changeType(e) {
+      this.form.rooms = []
+      this.form.projectId = ''
+      this.form.buildingId = ''
+      this.form.levelList = ''
+      this.form.roomId = ''
+    },
+    getHouseVal(e) {
+      if (this.form.areaType === 0) {
+        this.form.projectId = e[0]
+        this.form.buildingId = e[1]
+        this.form.floorId = e[2]
+        this.form.roomId = e[3]
+      } else {
+        this.form.projectId = e[0]
+        this.form.buildingId = e[1]
+        this.form.floorId = e[2]
+      }
+    },
+    getHouseTree() {
+      tree({}).then(res => {
+        let arr1 = JSON.parse(JSON.stringify(res))
+        let arr2 = JSON.parse(JSON.stringify(res))
+        this.addParamToArray(arr1)
+        this.addParamToArray1(arr2)
+        this.houseList = arr1
+        this.houseList1 = arr2
+      })
+    },
+    addParamToArray(arr) {
+      for (let i = 0; i < arr.length; i++) {
+        const currentItem = arr[i].projectDataVOList
+        if (currentItem && currentItem.length >= 0) {
+          currentItem.forEach(item => {
+            if (item.lv === 3) {
+              delete item.projectDataVOList
+            }
+          })
+        }
+        if (currentItem && currentItem.length > 0) {
+          this.addParamToArray(currentItem)
+        }
+      }
+    },
+    addParamToArray1(arr) {
+      for (let i = 0; i < arr.length; i++) {
+        const currentItem = arr[i].projectDataVOList
+        if (currentItem && currentItem.length >= 0) {
+          currentItem.forEach(item => {
+            if (item.lv === 2) {
+              delete item.projectDataVOList
+            }
+          })
+        }
+        if (currentItem && currentItem.length > 0) {
+          this.addParamToArray1(currentItem)
+        }
+      }
     },
     close() {
       this.visible = false
@@ -347,4 +426,4 @@
     }
   }
 }
-</style>
\ No newline at end of file
+</style>
diff --git a/admin/src/views/workorder/components/detail.vue b/admin/src/views/workorder/components/detail.vue
index 5b4caa0..0743cfa 100644
--- a/admin/src/views/workorder/components/detail.vue
+++ b/admin/src/views/workorder/components/detail.vue
@@ -1,5 +1,5 @@
 <template>
-  <GlobalWindow width="960px" title="宸ュ崟璇︽儏" :visible.sync="visible" :confirm-working="isWorking" @close="close"
+  <GlobalWindow width="100%" title="宸ュ崟璇︽儏" :visible.sync="visible" :confirm-working="isWorking" @close="close"
     @confirm="confirm">
     <div class="main">
       <div class="title">
@@ -11,7 +11,7 @@
             <div class="status gray" v-if="info.dealStatus == 2">宸插鐞�</div>
           </div>
         </div>
-        <el-button>鏌ョ湅闂涓婃姤</el-button>
+        <el-button v-if="info.origin === 1" @click="openWT">鏌ョ湅闂涓婃姤</el-button>
       </div>
       <div class="main_content">
         <div class="list">
@@ -26,6 +26,11 @@
           <div class="item">
             <div class="la">宸ュ崟鍒嗙被</div>
             <div class="val">{{ info.categoryName }}</div>
+          </div>
+          <div class="item">
+            <div class="la">鏉ユ簮</div>
+            <div class="val" v-if="info.origin === 0">鑷缓</div>
+            <div class="val" v-if="info.origin === 1">闂杞伐鍗�</div>
           </div>
           <div class="item">
             <div class="la">涓婃姤浜�</div>
@@ -167,19 +172,24 @@
         </template>
       </el-form>
     </div>
+    <!--  闂涓婃姤璇︽儏  -->
+    <problemReportingDetails ref="problemReportingDetails" />
   </GlobalWindow>
 </template>
 
 <script>
 import GlobalWindow from '@/components/common/GlobalWindow'
 import BaseOpera from '@/components/base/BaseOpera'
+import problemReportingDetails from './problemReportingDetails'
 import { detailById, dispatchOrder, dealOrder } from '@/api/workorder/ywWorkorder'
+import { getByWorkorderId } from '@/api/ywProblem'
 import { getUserList } from '@/api/system/user'
 import { Message, Loading } from 'element-ui'
 import dayjs from 'dayjs'
 export default {
   components: {
-    GlobalWindow
+    GlobalWindow,
+    problemReportingDetails
   },
   extends: BaseOpera,
   data() {
@@ -212,6 +222,13 @@
     this.getStaff()
   },
   methods: {
+    openWT() {
+      getByWorkorderId(this.id)
+        .then(res => {
+          console.log(res)
+          this.$refs.problemReportingDetails.open('闂涓婃姤璇︽儏', res)
+        })
+    },
     confirm() {
       this.$refs['form'].validate((valid) => {
         if (valid) {
diff --git a/admin/src/views/workorder/components/handleProblem.vue b/admin/src/views/workorder/components/handleProblem.vue
index 47a1896..6560bc3 100644
--- a/admin/src/views/workorder/components/handleProblem.vue
+++ b/admin/src/views/workorder/components/handleProblem.vue
@@ -1,95 +1,122 @@
 <template>
     <GlobalWindow
-        title="闂涓婃姤"
-        :showConfirm="false"
+        :title="title"
         :visible.sync="visible"
-        width="100%">
+        width="100%"
+        @confirm="confirm">
         <div class="wt">
             <div class="wt_head">
                 <div class="wt_head_title">
-                    闂璇︽儏
-                    <el-tag style="margin-left: 10px;">杞伐鍗�</el-tag>
+                    <div class="title">闂璇︽儏</div>
+                    <el-tag style="margin-left: 10px;" v-if="info.dealStatus === 0">寰呭鐞�</el-tag>
+                    <el-tag style="margin-left: 10px;" v-if="info.dealStatus === 1">宸茶浆宸ュ崟</el-tag>
+                    <el-tag style="margin-left: 10px;" v-if="info.dealStatus === 2">宸插叧闂�</el-tag>
                 </div>
-                <el-button>鏌ョ湅宸ュ崟</el-button>
             </div>
             <div class="wt_content">
                 <div class="wt_content_row" style="width: 25%;">
-                    浣嶇疆锛�-
+                    浣嶇疆锛歿{info.position || '-'}}
                 </div>
                 <div class="wt_content_row" style="width: 25%;">
-                    涓婃姤浜猴細寮犱笁涓�
+                    涓婃姤浜猴細{{info.name || '-'}}
                 </div>
                 <div class="wt_content_row" style="width: 50%;">
-                    涓婃姤浜虹數璇濓細180553847234
+                    涓婃姤浜虹數璇濓細{{info.phone || '-'}}
                 </div>
                 <div class="wt_content_row" style="width: 100%; margin-top: 15px;">
-                    涓婃姤鏃堕棿锛�2024-11-21 12:00:23
+                    涓婃姤鏃堕棿锛歿{info.submitDate || '-'}}
                 </div>
                 <div class="wt_content_row" style="width: 100%; margin-top: 15px;">
-                    闂鎻忚堪锛氳繖鏄棶棰樻弿杩拌繖鏄棶棰樻弿杩拌繖鏄棶棰樻弿杩拌繖鏄棶棰樻弿杩拌繖鏄棶棰樻弿杩拌繖鏄棶棰樻弿杩拌繖鏄棶棰樻弿杩拌繖鏄棶棰樻弿杩�
+                    闂鎻忚堪锛歿{info.content || '-'}}
                 </div>
-                <div class="wt_content_row" style="width: 100%; margin-top: 15px;">
+                <div class="wt_content_row" style="width: 100%; margin-top: 15px; margin-bottom: 20px;">
                     <div class="wt_content_row_label">闂鍥剧墖锛�</div>
-                    <div class="wt_content_row_list">
-                        <div class="wt_content_row_list_img">
-                            <img src="" alt="" />
+                    <div class="wt_content_row_list" v-if="info.fileList && info.fileList.length >= 0">
+                        <div class="wt_content_row_list_img" v-for="(item, index) in info.fileList" :key="index">
+                            <el-image
+                                style="width: 100px; height: 100px"
+                                :src="item.fileurlFull"
+                                :preview-src-list="info.fileList.map(item => item.fileurlFull)">
+                            </el-image>
                         </div>
                     </div>
                 </div>
             </div>
-            <el-form :model="form" :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm">
-                <el-form-item label="澶勭悊鏂瑰紡" prop="resource">
-                    <el-radio-group v-model="form.resource">
-                        <el-radio :label="0">杞伐鍗�</el-radio>
-                        <el-radio :label="1">鍏抽棴闂</el-radio>
+            <el-form :model="form" :rules="rules" ref="form" label-width="100px" class="demo-ruleForm">
+                <el-form-item label="澶勭悊鏂瑰紡" prop="dealStatus">
+                    <el-radio-group v-model="form.dealStatus">
+                        <el-radio :label="1">杞伐鍗�</el-radio>
+                        <el-radio :label="2">鍏抽棴闂</el-radio>
                     </el-radio-group>
                 </el-form-item>
-                <div style="display: flex; align-items: center;">
-                    <el-form-item label="浣嶇疆绫诲瀷" prop="region">
-                        <el-select v-model="form.resource" placeholder="璇烽�夋嫨浣嶇疆绫诲瀷">
-                            <el-option label="鍖哄煙涓�" value="shanghai"></el-option>
-                            <el-option label="鍖哄煙浜�" value="beijing"></el-option>
-                        </el-select>
+                <template v-if="form.dealStatus === 1">
+                    <div style="width: 100%; display: flex; align-items: center;">
+                        <el-form-item label="浣嶇疆绫诲瀷" prop="workOrderAreaType">
+                            <el-select v-model="form.workOrderAreaType" @change="changeType" placeholder="璇烽�夋嫨浣嶇疆绫诲瀷">
+                                <el-option label="瀹ゅ唴缁翠慨" :value="0"></el-option>
+                                <el-option label="鍏叡鍖哄煙" :value="1"></el-option>
+                            </el-select>
+                        </el-form-item>
+                        <el-form-item label="鎶ヤ慨鍖哄煙" prop="rooms">
+                            <el-cascader
+                                v-model="form.rooms"
+                                :disabled="![0,1].includes(form.workOrderAreaType)"
+                                ref="cascader"
+                                @change="getHouseVal"
+                                placeholder="璇烽�夋嫨鎶ヤ慨鍖哄煙"
+                                :options="form.workOrderAreaType === 0 ? houseList : houseList1"
+                                :props="{
+                                    label: 'name',
+                                    value: 'id',
+                                    children: 'projectDataVOList'
+                                }" />
+                        </el-form-item>
+                    </div>
+                    <div style="width: 100%; display: flex; align-items: center;">
+                        <el-form-item label="宸ュ崟鍒嗙被" prop="workOrderCateId">
+                            <el-cascader v-model="form.workOrderCateId" @change="changeSel" placeholder="璇烽�夋嫨鍒嗙被" clearable :options="cateList"
+                            :props="{
+                            label: 'name',
+                            value: 'id',
+                            children: 'childCategoryList'
+                          }"></el-cascader>
+                        </el-form-item>
+                        <el-form-item label="涓婇棬鏃堕棿" prop="workOrderGetDate" v-if="form.workOrderAreaType === 0">
+                            <el-date-picker
+                                v-model="form.workOrderGetDate"
+                                type="datetime"
+                                value-format="yyyy-MM-dd HH:mm:ss"
+                                placeholder="閫夋嫨涓婇棬鏃堕棿">
+                            </el-date-picker>
+                        </el-form-item>
+                    </div>
+                    <el-form-item label="鎻忚堪" prop="dealInfo">
+                        <el-input
+                            type="textarea"
+                            :rows="5"
+                            placeholder="璇疯緭鍏ユ弿杩�"
+                            v-model="form.dealInfo">
+                        </el-input>
                     </el-form-item>
-                    <el-form-item label="鎶ヤ慨鍖哄煙" prop="resource">
-                        <el-select v-model="form.resource" placeholder="璇烽�夋嫨鎶ヤ慨鍖哄煙">
-                            <el-option label="鍖哄煙涓�" value="shanghai"></el-option>
-                            <el-option label="鍖哄煙浜�" value="beijing"></el-option>
-                        </el-select>
+                    <el-form-item label="闂鍥剧墖" prop="resource">
+                        <el-upload
+                            :action="base"
+                            :file-list="form.workOrderFileList"
+                            accept=".png,.jpg,.jpeg,.PNG,.JPG"
+                            :on-success="getFile"
+                            :data="{ folder: 'YW_PROBLEM' }"
+                            list-type="picture-card">
+                            <i class="el-icon-plus"></i>
+                        </el-upload>
                     </el-form-item>
-                </div>
-                <div style="display: flex; align-items: center;">
-                    <el-form-item label="宸ュ崟鍒嗙被" prop="resource">
-                        <el-select v-model="form.resource" placeholder="璇烽�夋嫨宸ュ崟鍒嗙被">
-                            <el-option label="鍖哄煙涓�" value="shanghai"></el-option>
-                            <el-option label="鍖哄煙浜�" value="beijing"></el-option>
-                        </el-select>
-                    </el-form-item>
-                    <el-form-item label="涓婇棬鏃堕棿" prop="resource">
-                        <el-date-picker v-model="form.resource" type="date" placeholder="閫夋嫨涓婇棬鏃堕棿"></el-date-picker>
-                    </el-form-item>
-                </div>
-                <el-form-item label="鎻忚堪" prop="resource">
+                </template>
+                <el-form-item label="鍏抽棴璇存槑" prop="dealInfo" v-if="form.dealStatus === 2">
                     <el-input
                         type="textarea"
                         :rows="5"
-                        placeholder="璇疯緭鍏ユ弿杩�"
-                        v-model="form.resource">
-                    </el-input>
-                </el-form-item>
-                <el-form-item label="闂鍥剧墖" prop="resource">
-                    <el-upload
-                        action="https://jsonplaceholder.typicode.com/posts/"
-                        list-type="picture-card">
-                        <i class="el-icon-plus"></i>
-                    </el-upload>
-                </el-form-item>
-                <el-form-item label="鍏抽棴闂" prop="resource">
-                    <el-input
-                        type="textarea"
-                        :rows="5"
+                        maxlength="300"
                         placeholder="璇疯緭鍏ュ叧闂棶棰�"
-                        v-model="form.resource">
+                        v-model="form.dealInfo">
                     </el-input>
                 </el-form-item>
             </el-form>
@@ -100,6 +127,9 @@
 <script>
   import BaseOpera from '@/components/base/BaseOpera'
   import GlobalWindow from '@/components/common/GlobalWindow'
+  import { fetchList as getCateList } from '@/api/business/category.js'
+  import { tree } from '@/api/project/ywProject'
+  import { editProblem } from '@/api/ywProblem'
   export default {
     name: "handleProblem",
     extends: BaseOpera,
@@ -107,61 +137,184 @@
     data() {
       return {
         info: {},
+        cateList: [],
+        base: process.env.VUE_APP_API_PREFIX + '/visitsAdmin/cloudService/public/uploadBatch',
         form: {
-          resource: 0
+          dealStatus: 1,
+          workOrderAreaType: '',
+          workOrderCateId: '',
+          workOrderGetDate: '',
+          dealInfo: '',
+          workOrderFileList: [],
+          rooms: [],
+          
+          workOrderProjectId: '',
+          workOrderBuildId: '',
+          workOrderFloorId: '',
+          workOrderRoomId: ''
         },
+        houseList: [],
+        houseList1: [],
         rules: {
-          resource: [
-            { required: true, message: '璇烽�夋嫨', trigger: 'change' }
+          dealStatus: [
+            { required: true, message: '璇烽�夋嫨', trigger: 'blur' }
+          ],
+          workOrderAreaType: [
+            { required: true, message: '璇烽�夋嫨', trigger: 'blur' }
+          ],
+          workOrderCateId: [
+            { required: true, message: '璇烽�夋嫨', trigger: 'blur' }
+          ],
+          dealInfo: [
+            { required: true, message: '璇疯緭鍏�', trigger: 'blur' }
+          ],
+          rooms: [
+            { required: true, message: '璇烽�夋嫨', trigger: 'blur' }
           ]
         }
       }
     },
     methods: {
-
+      open (title, target) {
+        this.title = title
+        this.info = target
+        this.getCate()
+        this.getHouseTree()
+        this.visible = true
+      },
+      getHouseVal(e) {
+        if (this.form.workOrderAreaType === 0) {
+          this.form.workOrderProjectId = e[0]
+          this.form.workOrderBuildId = e[1]
+          this.form.workOrderFloorId = e[2]
+          this.form.workOrderRoomId = e[3]
+        } else {
+          this.form.workOrderProjectId = e[0]
+          this.form.workOrderBuildId = e[1]
+          this.form.workOrderFloorId = e[2]
+        }
+      },
+      changeType(e) {
+        this.form.rooms = []
+        this.form.workOrderProjectId = ''
+        this.form.workOrderBuildId = ''
+        this.form.workOrderFloorId = ''
+        this.form.workOrderRoomId = ''
+      },
+      getHouseTree() {
+        tree({}).then(res => {
+          let arr1 = JSON.parse(JSON.stringify(res))
+          let arr2 = JSON.parse(JSON.stringify(res))
+          this.addParamToArray(arr1)
+          this.addParamToArray1(arr2)
+          this.houseList = arr1
+          this.houseList1 = arr2
+        })
+      },
+      addParamToArray(arr) {
+        for (let i = 0; i < arr.length; i++) {
+          const currentItem = arr[i].projectDataVOList
+          if (currentItem && currentItem.length >= 0) {
+            currentItem.forEach(item => {
+              if (item.lv === 3) {
+                delete item.projectDataVOList
+              }
+            })
+          }
+          if (currentItem && currentItem.length > 0) {
+            this.addParamToArray(currentItem)
+          }
+        }
+      },
+      addParamToArray1(arr) {
+        for (let i = 0; i < arr.length; i++) {
+          const currentItem = arr[i].projectDataVOList
+          if (currentItem && currentItem.length >= 0) {
+            currentItem.forEach(item => {
+              if (item.lv === 2) {
+                delete item.projectDataVOList
+              }
+            })
+          }
+          if (currentItem && currentItem.length > 0) {
+            this.addParamToArray1(currentItem)
+          }
+        }
+      },
+      getFile(e) {
+        console.log(e)
+        this.form.workOrderFileList.push({ ...e })
+      },
+      changeSel(e) {
+        if (e && e.length == 2) {
+          this.$set(this.form, 'workOrderCateId', e[1])
+        } else {
+          this.$set(this.form, 'workOrderCateId', '')
+        }
+      },
+      getCate() {
+        getCateList({
+          model: { type: 3 },
+          capacity: 1000,
+          page: 1,
+        }).then(res => {
+          this.cateList = res.records || []
+        })
+      },
+      confirm() {
+        this.$refs.form.validate((valid) => {
+          if (!valid) {
+            return
+          }
+          this.isWorking = true
+          editProblem({
+            ...this.form,
+            id: this.info.id
+          })
+            .then(() => {
+              this.visible = false
+              this.$tip.apiSuccess('鎿嶄綔鎴愬姛')
+              this.$emit('success')
+            })
+            .finally(() => {
+              this.isWorking = false
+            })
+        })
+      }
     }
   }
 </script>
 
 <style lang="scss" scoped>
+    @import '@/assets/style/variables.scss';
     .wt {
         width: 100%;
         display: flex;
         flex-direction: column;
-        .wt_head {
-            width: 100%;
-            padding: 20px 0;
-            box-sizing: border-box;
-            display: flex;
-            align-items: center;
-            justify-content: space-between;
-            .wt_head_title {
-                display: flex;
-                align-items: center;
-                font-size: 16px;
-                color: black;
-                margin-right: 10px;
-            }
-        }
+    
         .wt_content {
             width: 100%;
             display: flex;
             align-items: center;
             flex-wrap: wrap;
+        
             .wt_content_row {
                 font-size: 14px;
                 color: rgb(51, 51, 51);
                 display: flex;
                 align-items: self-start;
+            
                 .wt_content_row_label {
                     flex-shrink: 0;
                     font-size: 14px;
                     color: rgb(51, 51, 51);
                 }
+            
                 .wt_content_row_list {
                     flex: 1;
                     display: flex;
                     align-items: center;
+                
                     .wt_content_row_list_img {
                         width: 106px;
                         height: 93px;
@@ -170,9 +323,11 @@
                         justify-content: center;
                         overflow-x: hidden;
                         margin-right: 15px;
+                    
                         &:last-child {
                             margin: 0 !important;
                         }
+                    
                         img {
                             width: 100%;
                         }
@@ -180,5 +335,30 @@
                 }
             }
         }
+    
+        .wt_head {
+            width: 100%;
+            padding: 20px 0;
+            box-sizing: border-box;
+            display: flex;
+            align-items: center;
+            justify-content: space-between;
+        
+            .wt_head_title {
+                display: flex;
+                align-items: center;
+                font-size: 16px;
+                color: black;
+                margin-right: 10px;
+            
+                .title {
+                    font-weight: 500;
+                    font-size: 18px;
+                    color: $primary-color;
+                    display: flex;
+                    align-items: center;
+                }
+            }
+        }
     }
 </style>
diff --git a/admin/src/views/workorder/components/problemReportingDetails.vue b/admin/src/views/workorder/components/problemReportingDetails.vue
index 213c8d9..cbdcbbb 100644
--- a/admin/src/views/workorder/components/problemReportingDetails.vue
+++ b/admin/src/views/workorder/components/problemReportingDetails.vue
@@ -1,83 +1,128 @@
 <template>
     <GlobalWindow
-        title="闂涓婃姤璇︽儏"
+        :title="title"
         :showConfirm="false"
         :visible.sync="visible"
         width="100%">
         <div class="wt">
             <div class="wt_head">
                 <div class="wt_head_title">
-                    闂璇︽儏
-                    <el-tag style="margin-left: 10px;">杞伐鍗�</el-tag>
+                    <div class="title">闂璇︽儏</div>
+                    <el-tag style="margin-left: 10px;" v-if="form.dealStatus === 0">寰呭鐞�</el-tag>
+                    <el-tag style="margin-left: 10px;" v-if="form.dealStatus === 1">宸茶浆宸ュ崟</el-tag>
+                    <el-tag style="margin-left: 10px;" v-if="form.dealStatus === 2">宸插叧闂�</el-tag>
                 </div>
-                <el-button>鏌ョ湅宸ュ崟</el-button>
+                <el-button @click="handleDetail" v-if="form.dealStatus === 1">鏌ョ湅宸ュ崟</el-button>
             </div>
             <div class="wt_content">
                 <div class="wt_content_row" style="width: 25%;">
-                    浣嶇疆锛�-
+                    浣嶇疆锛歿{form.position || '-'}}
                 </div>
                 <div class="wt_content_row" style="width: 25%;">
-                    涓婃姤浜猴細寮犱笁涓�
+                    涓婃姤浜猴細{{form.name || '-'}}
                 </div>
                 <div class="wt_content_row" style="width: 50%;">
-                    涓婃姤浜虹數璇濓細180553847234
+                    涓婃姤浜虹數璇濓細{{form.phone || '-'}}
                 </div>
                 <div class="wt_content_row" style="width: 100%; margin-top: 15px;">
-                    涓婃姤鏃堕棿锛�2024-11-21 12:00:23
+                    涓婃姤鏃堕棿锛歿{form.submitDate || '-'}}
                 </div>
                 <div class="wt_content_row" style="width: 100%; margin-top: 15px;">
-                    闂鎻忚堪锛氳繖鏄棶棰樻弿杩拌繖鏄棶棰樻弿杩拌繖鏄棶棰樻弿杩拌繖鏄棶棰樻弿杩拌繖鏄棶棰樻弿杩拌繖鏄棶棰樻弿杩拌繖鏄棶棰樻弿杩拌繖鏄棶棰樻弿杩�
+                    闂鎻忚堪锛歿{form.content || '-'}}
                 </div>
                 <div class="wt_content_row" style="width: 100%; margin-top: 15px;">
                     <div class="wt_content_row_label">闂鍥剧墖锛�</div>
-                    <div class="wt_content_row_list">
-                        <div class="wt_content_row_list_img">
-                            <img src="" alt="" />
+                    <div class="wt_content_row_list" v-if="form.fileList && form.fileList.length >= 0">
+                        <div class="wt_content_row_list_img" v-for="(item, index) in form.fileList" :key="index">
+                            <el-image
+                                style="width: 80px; height: 80px"
+                                :src="item.fileurlFull"
+                                :preview-src-list="form.fileList.map(item => item.fileurlFull)">
+                            </el-image>
                         </div>
                     </div>
                 </div>
             </div>
             <div class="wt_head">
                 <div class="wt_head_title">
-                    澶勭悊缁撴灉
+                    <div class="title">闂璇︽儏</div>
                 </div>
             </div>
             <div class="wt_content">
                 <div class="wt_content_row" style="width: 100%;">
-                    澶勭悊浜猴細寮犱笁-琛屾斂閮�
+                    澶勭悊浜猴細{{form.dealUserName}}-{{form.dealUserCompanyName}}
                 </div>
                 <div class="wt_content_row" style="width: 100%; margin-top: 15px;">
-                    澶勭悊鏃堕棿锛�2024-11-21 12:00:23
+                    澶勭悊鏃堕棿锛歿{form.dealDate || '-'}}
                 </div>
                 <div class="wt_content_row" style="width: 100%; margin-top: 15px;">
-                    澶勭悊缁撴灉锛氳浆宸ュ崟
+                    澶勭悊缁撴灉锛歿{returnText(form.dealStatus)}}
                 </div>
-                <div class="wt_content_row" style="width: 100%; margin-top: 15px;">
-                    鍏抽棴璇存槑锛氳鏄庤鏄庤鏄庤鏄庤鏄庤鏄庤鏄庤鏄庤鏄庤鏄庤鏄庤鏄庤鏄庤鏄庤鏄庤鏄庤鏄�
+                <div class="wt_content_row" style="width: 100%; margin-top: 15px;" v-if="form.dealStatus === 2">
+                    鍏抽棴璇存槑锛歿{form.dealInfo}}
                 </div>
             </div>
         </div>
+        <!--    宸ュ崟璇︽儏    -->
+        <Detail v-if="showDetail" ref="DetailRef" @close="showDetail = false" />
     </GlobalWindow>
 </template>
 
 <script>
   import BaseOpera from '@/components/base/BaseOpera'
   import GlobalWindow from '@/components/common/GlobalWindow'
+  import Detail from './detail'
+  import { getById } from '@/api/ywProblem'
   export default {
     name: "problemReportingDetails",
     extends: BaseOpera,
-    components: { GlobalWindow },
+    components: { GlobalWindow, Detail },
     data() {
       return {
-        info: {}
+        form: {},
+        showDetail: false,
       }
     },
     methods: {
-    
+      open (title, target) {
+        this.title = title
+        this.form = target
+        getById(target.id)
+            .then(res => {
+              this.form = res
+              this.visible = true
+            })
+      },
+      handleDetail() {
+        this.showDetail = true
+        this.$nextTick(() => {
+          this.$refs.DetailRef.visible = true
+          this.$refs.DetailRef.id = this.form.workorderId
+          this.$refs.DetailRef.getDetail()
+        })
+      },
+      returnText(status) {
+        if (status === 0) {
+          return '寰呭鐞�'
+        } else if (status === 1) {
+          return '宸茶浆宸ュ崟'
+        } else if (status === 2) {
+          return '宸插叧闂�'
+        } else {
+          return ''
+        }
+      }
     }
   }
 </script>
-
+<style lang="scss" scoped>
+    @import '@/assets/style/variables.scss';
+    .title {
+        font-weight: 500;
+        font-size: 18px;
+        color: $primary-color;
+    }
+</style>
 <style lang="scss" scoped>
     .wt {
         width: 100%;
diff --git a/admin/src/views/workorder/problemReporting.vue b/admin/src/views/workorder/problemReporting.vue
index 814bd32..1de3fb4 100644
--- a/admin/src/views/workorder/problemReporting.vue
+++ b/admin/src/views/workorder/problemReporting.vue
@@ -2,14 +2,14 @@
     <TableLayout :permissions="['business:ywworkorder:query']">
         <!-- 鎼滅储琛ㄥ崟 -->
         <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
-            <el-form-item label="鎻忚堪" prop="roomNum">
-                <el-input v-model="searchForm.roomNum" placeholder="璇疯緭鍏ユ弿杩�" @keypress.enter.native="search"></el-input>
+            <el-form-item label="鎻忚堪" prop="content">
+                <el-input v-model="searchForm.content" placeholder="璇疯緭鍏ユ弿杩�" @keypress.enter.native="search"></el-input>
             </el-form-item>
-            <el-form-item prop="areaType" label="澶勭悊鐘舵��">
-                <el-select v-model="searchForm.areaType">
-                    <el-option label="鏈鐞�" value="0"></el-option>
-                    <el-option label="鐢熸垚宸ュ崟" value="1"></el-option>
-                    <el-option label="鍏抽棴淇濅慨" value="1"></el-option>
+            <el-form-item prop="dealStatus" label="澶勭悊鐘舵��">
+                <el-select v-model="searchForm.dealStatus">
+                    <el-option label="鏈鐞�" :value="0"></el-option>
+                    <el-option label="宸茶浆宸ュ崟" :value="1"></el-option>
+                    <el-option label="宸插叧闂�" :value="2"></el-option>
                 </el-select>
             </el-form-item>
             <el-form-item label="涓婃姤鏃堕棿">
@@ -18,7 +18,7 @@
                     @change="changeSelDate"
                     format="yyyy-MM-dd"
                     value-format="yyyy-MM-dd"
-                    type="daterange"></el-date-picker>
+                    type="daterange" />
             </el-form-item>
             <section>
                 <el-button type="primary" @click="search">鎼滅储</el-button>
@@ -30,15 +30,19 @@
             <el-table v-loading="isWorking.search" :data="tableData.list" stripe>
                 <el-table-column prop="remark" label="鎻忚堪" min-width="70px"></el-table-column>
                 <el-table-column prop="position" label="浣嶇疆" min-width="100px"></el-table-column>
-                <el-table-column prop="categoryName" label="鐜板満鍥剧墖" min-width="100px"></el-table-column>
+                <el-table-column label="鐜板満鍥剧墖" min-width="100px">
+                    <template slot-scope="{row}">
+                        {{row.fileList ? row.fileList.length : 0}}寮�
+                    </template>`
+                </el-table-column>
                 <el-table-column prop="name" label="涓婃姤浜�" min-width="80px"></el-table-column>
                 <el-table-column prop="phone" label="涓婃姤浜虹數璇�" min-width="100px"></el-table-column>
                 <el-table-column prop="submitDate" label="涓婃姤鏃堕棿" min-width="80px"></el-table-column>
                 <el-table-column label="澶勭悊鐘舵��" min-width="70px">
                     <template slot-scope="{row}">
-                        <span v-if="row.dealStatus == 0">寰呮寚娲�</span>
-                        <span v-if="row.dealStatus == 1">宸叉寚娲�</span>
-                        <span v-if="row.dealStatus == 2">宸插鐞�</span>
+                        <span v-if="row.dealStatus === 0">寰呭鐞�</span>
+                        <span v-if="row.dealStatus === 1">宸茶浆宸ュ崟</span>
+                        <span v-if="row.dealStatus === 2">宸插叧闂�</span>
                     </template>`
                 </el-table-column>
                 <el-table-column prop="dealUserName" label="澶勭悊浜�" min-width="80px"></el-table-column>
@@ -48,8 +52,8 @@
                     width="130"
                     fixed="right">
                     <template slot-scope="{row}">
-                        <el-button type="text" @click="$refs.handleProblem.open()">澶勭悊</el-button>
-                        <el-button type="text" @click="$refs.problemReportingDetails.open()">鏌ョ湅璇︽儏</el-button>
+                        <el-button type="text" v-if="row.dealStatus === 0" @click="$refs.handleProblem.open('闂涓婃姤', row)">澶勭悊</el-button>
+                        <el-button type="text" @click="$refs.problemReportingDetails.open('闂涓婃姤璇︽儏', row)">鏌ョ湅璇︽儏</el-button>
                     </template>
                 </el-table-column>
             </el-table>
@@ -79,10 +83,10 @@
         showDetail: false,
         searchForm: {
           selDate: [],
-          areaIds: '',
-          projectId: '',
-          buildingId: '',
-          cateId: '',
+          dealDateStart: '',
+          dealDateEnd: '',
+          content: '',
+          dealStatus: ''
         },
         projectList: [],
         buildList: [],
@@ -99,7 +103,17 @@
       this.search()
     },
     methods: {
-    
+      // 鎼滅储妗嗛噸缃�
+      reset () {
+        this.$refs.searchForm.resetFields()
+        this.searchForm.dealDateStart = ''
+        this.searchForm.dealDateEnd = ''
+        this.search()
+      },
+      changeSelDate(e) {
+        this.searchForm.dealDateStart = e[0]
+        this.searchForm.dealDateEnd = e[1]
+      }
     }
   }
 </script>

--
Gitblit v1.9.3