From e36eed2cdc9335fc4d1b84c8e4e306422638542f Mon Sep 17 00:00:00 2001
From: liukangdong <898885815@qq.com>
Date: 星期三, 27 十一月 2024 08:53:51 +0800
Subject: [PATCH] ll

---
 admin/src/api/Inspection/ywPatrolScheme.js                          |    8 
 admin/src/views/Inspection/components/OperaYwPatrolSchemeWindow.vue |  196 ++++++++++-
 admin/src/views/Inspection/task.vue                                 |   20 
 admin/src/views/project/projectList.vue                             |   14 
 admin/src/views/workorder/components/detail.vue                     |  154 ++++++---
 admin/src/views/client/staffList.vue                                |   16 
 admin/src/views/operation/components/maintain.vue                   |   55 +-
 admin/src/api/system/common.js                                      |    4 
 admin/src/api/Inspection/ywPatrolTask.js                            |    3 
 admin/src/views/Inspection/components/taskDetail.vue                |   41 +-
 admin/src/views/operation/components/deviceEdit.vue                 |    7 
 admin/src/api/business/member.js                                    |    4 
 admin/src/components/common/QueryForm/queryForm.vue                 |    4 
 admin/src/views/Inspection/components/OperaYwPatrolPointWindow.vue  |   54 +-
 admin/src/api/project/ywProject.js                                  |    4 
 admin/src/views/operation/record.vue                                |   33 +
 admin/src/views/Inspection/plan.vue                                 |   83 ++--
 admin/src/views/project/components/OperaYwProjectWindow.vue         |   73 +++
 admin/src/views/operation/components/maintainDetail.vue             |  104 ++++++
 admin/src/api/Inspection/ywPatrolLine.js                            |    5 
 admin/src/api/business/company.js                                   |    7 
 admin/src/views/finance/components/companyEdit.vue                  |    4 
 admin/src/views/Inspection/components/OperaYwPatrolLineWindow.vue   |   23 
 admin/src/views/Inspection/path.vue                                 |    1 
 admin/src/views/business/internalMember.vue                         |    2 
 admin/src/views/client/components/staffEdit.vue                     |    4 
 26 files changed, 691 insertions(+), 232 deletions(-)

diff --git a/admin/src/api/Inspection/ywPatrolLine.js b/admin/src/api/Inspection/ywPatrolLine.js
index 88ee422..b4ebbd5 100644
--- a/admin/src/api/Inspection/ywPatrolLine.js
+++ b/admin/src/api/Inspection/ywPatrolLine.js
@@ -24,7 +24,10 @@
 export function updateById (data) {
   return request.post('/visitsAdmin/cloudService/business/ywPatrolLine/updateById', data)
 }
-
+// 璇︽儏
+export function detailById (id) {
+  return request.get(`/visitsAdmin/cloudService/business/ywPatrolLine/${id}`)
+}
 // 鍒犻櫎
 export function deleteById (id) {
   return request.get(`/visitsAdmin/cloudService/business/ywPatrolLine/delete/${id}`)
diff --git a/admin/src/api/Inspection/ywPatrolScheme.js b/admin/src/api/Inspection/ywPatrolScheme.js
index e644a9b..4b67ede 100644
--- a/admin/src/api/Inspection/ywPatrolScheme.js
+++ b/admin/src/api/Inspection/ywPatrolScheme.js
@@ -24,11 +24,19 @@
 export function updateById (data) {
   return request.post('/visitsAdmin/cloudService/business/ywPatrolScheme/updateById', data)
 }
+// 淇敼
+export function updateStatusById (data) {
+  return request.post('/visitsAdmin/cloudService/business/ywPatrolScheme/updateStatus', data)
+}
 
 // 鍒犻櫎
 export function deleteById (id) {
   return request.get(`/visitsAdmin/cloudService/business/ywPatrolScheme/delete/${id}`)
 }
+// 鍒犻櫎
+export function detailById (id) {
+  return request.get(`/visitsAdmin/cloudService/business/ywPatrolScheme/${id}`)
+}
 
 // 鎵归噺鍒犻櫎
 export function deleteByIdInBatch (ids) {
diff --git a/admin/src/api/Inspection/ywPatrolTask.js b/admin/src/api/Inspection/ywPatrolTask.js
index d247bf3..81be50a 100644
--- a/admin/src/api/Inspection/ywPatrolTask.js
+++ b/admin/src/api/Inspection/ywPatrolTask.js
@@ -29,6 +29,9 @@
 export function deleteById (id) {
   return request.get(`/visitsAdmin/cloudService/business/ywPatrolTask/delete/${id}`)
 }
+export function getDetail (data) {
+  return request.post(`/visitsAdmin/cloudService/business/ywPatrolTaskRecord/page`, data)
+}
 
 // 鎵归噺鍒犻櫎
 export function deleteByIdInBatch (ids) {
diff --git a/admin/src/api/business/company.js b/admin/src/api/business/company.js
index da1ff1a..0e179b0 100644
--- a/admin/src/api/business/company.js
+++ b/admin/src/api/business/company.js
@@ -24,6 +24,13 @@
 export function create (data) {
   return request.post('/visitsAdmin/cloudService/business/company/create', data)
 }
+// 鍒涘缓璐㈠姟鍏徃
+export function createFinanceCompany (data) {
+  return request.post('/visitsAdmin/cloudService/business/company/createFinanceCompany', data)
+}
+export function updateFinanceCompany (data) {
+  return request.post('/visitsAdmin/cloudService/business/company/updateFinanceCompany', data)
+}
 
 // 淇敼
 export function updateById (data) {
diff --git a/admin/src/api/business/member.js b/admin/src/api/business/member.js
index b83f2b1..1410cc2 100644
--- a/admin/src/api/business/member.js
+++ b/admin/src/api/business/member.js
@@ -46,6 +46,10 @@
 export function updateById (data) {
   return request.post('/visitsAdmin/cloudService/business/member/updateById', data)
 }
+export function updateStatusById (data) {
+  return request.post('/visitsAdmin/cloudService/business/member/updateStatusById', data)
+}
+
 export function updateHead (data) {
   return request.post('/visitsAdmin/cloudService/business/member/updateHead', data)
 }
diff --git a/admin/src/api/project/ywProject.js b/admin/src/api/project/ywProject.js
index bfb6927..e65071f 100644
--- a/admin/src/api/project/ywProject.js
+++ b/admin/src/api/project/ywProject.js
@@ -34,6 +34,10 @@
 export function deleteById (id) {
   return request.get(`/visitsAdmin/cloudService/business/ywProject/delete/${id}`)
 }
+// 鍒犻櫎
+export function detailById (id) {
+  return request.get(`/visitsAdmin/cloudService/business/ywProject/${id}`)
+}
 
 // 鎵归噺鍒犻櫎
 export function deleteByIdInBatch (ids) {
diff --git a/admin/src/api/system/common.js b/admin/src/api/system/common.js
index 0c4b120..0e99bcf 100644
--- a/admin/src/api/system/common.js
+++ b/admin/src/api/system/common.js
@@ -71,3 +71,7 @@
 export function upload (data) {
   return request.post('/visitsAdmin/cloudService/public/upload', data)
 }
+// 鑾峰彇鐪佸競鍖烘爲
+export function getCityTree (data) {
+  return request.post('/visitsAdmin/cloudService/business/areas/treeList', data)
+}
diff --git a/admin/src/components/common/QueryForm/queryForm.vue b/admin/src/components/common/QueryForm/queryForm.vue
index 80e9fc1..a59f002 100644
--- a/admin/src/components/common/QueryForm/queryForm.vue
+++ b/admin/src/components/common/QueryForm/queryForm.vue
@@ -58,8 +58,8 @@
       </template>
       <!-- 鎿嶄綔 -->
       <el-form-item>
-        <el-button type="primary" @click="handleQuery">鎼滅储</el-button>
-        <el-button v-if="showQk" @click="clear">閲嶇疆</el-button>
+        <el-button style="width: 56px" type="primary" @click="handleQuery">鎼滅储</el-button>
+        <el-button style="width: 56px" v-if="showQk" @click="clear">閲嶇疆</el-button>
         <slot name="btns" />
         <template v-if="queryFormConfig.formItems.length > listLength">
           <el-button v-if="!showZk" type="text" @click="zkBtn">灞曞紑<i
diff --git a/admin/src/views/Inspection/components/OperaYwPatrolLineWindow.vue b/admin/src/views/Inspection/components/OperaYwPatrolLineWindow.vue
index d936c67..86de3cb 100644
--- a/admin/src/views/Inspection/components/OperaYwPatrolLineWindow.vue
+++ b/admin/src/views/Inspection/components/OperaYwPatrolLineWindow.vue
@@ -48,7 +48,7 @@
 import BaseOpera from '@/components/base/BaseOpera'
 import GlobalWindow from '@/components/common/GlobalWindow'
 import { getFetchList } from '@/api/Inspection/ywPatrolPoint'
-import { create } from '@/api/Inspection/ywPatrolLine'
+import { create,detailById } from '@/api/Inspection/ywPatrolLine'
 import { Message } from 'element-ui'
 export default {
   name: 'OperaYwPatrolLineWindow',
@@ -82,13 +82,21 @@
       if (list.length == 0) return Message.warning('璇峰厛閫夋嫨宸℃鐐�')
       form.linePointList = list
       create({ ...form }).then(res => {
-        if (res.code == 200) {
-          Message.success('淇濆瓨鎴愬姛')
-          this.close()
-        }
+        Message.success('淇濆瓨鎴愬姛')
+        this.$emit('success')
+        this.close()
+        
+      })
+    },
+    getDetail(row) {
+      detailById(row.id).then(res => {
+        this.form = res
+        this.list = res.linePointList || []
       })
     },
     initData() {
+      this.list = []
+
       getFetchList({}).then(res => {
         this.pointList = res || []
       })
@@ -130,13 +138,12 @@
           needScancode: '1',
           pointName: i.name,
           pointId: i.id,
-          code: i.code,
-          id: i.id
+          code: i.code
         })
       })
       this.isShowModal = false
     },
-    close(){
+    close() {
       this.visible = false
       this.$emit('success')
     }
diff --git a/admin/src/views/Inspection/components/OperaYwPatrolPointWindow.vue b/admin/src/views/Inspection/components/OperaYwPatrolPointWindow.vue
index 00acdd2..ca12d05 100644
--- a/admin/src/views/Inspection/components/OperaYwPatrolPointWindow.vue
+++ b/admin/src/views/Inspection/components/OperaYwPatrolPointWindow.vue
@@ -30,7 +30,7 @@
         <el-input type="textarea" :rows="4" v-model="form.content" placeholder="璇疯緭鍏�" />
       </el-form-item>
       <el-form-item label="涓婁紶鍥剧墖" prop="imgurl">
-        <UploadAvatarImage :file="{ 'imgurlfull': form.imgurlfull, 'imgurl': form.imgurl }"
+        <UploadAvatarImage :file="{ 'imgurlfull': form.fileFullUrl, 'imgurl': form.fileurl }"
           :uploadData="{ folder: 'ywPatrol/' }" @uploadSuccess="uploadAvatarSuccess" @uploadEnd="isUploading = false"
           @uploadBegin="isUploading = true" />
       </el-form-item>
@@ -45,6 +45,7 @@
 import mapDrag from '@/components/common/map/mapDrag.vue'
 import { fetchList } from '@/api/business/category'
 import { detail } from '@/api/Inspection/ywPatrolPoint'
+import { fetchList as getDeiceList } from '@/api/Inspection/device'
 export default {
   name: 'OperaYwPatrolPointWindow',
   extends: BaseOpera,
@@ -81,50 +82,57 @@
     open(title, row) {
       this.title = title
       this.visible = true
+      this.initData()
       if (row && row.id) {
         this.getDetail(row)
       }
     },
     getDetail(row) {
       detail(row.id).then(res => {
-        this.form = { ...res } 
+        this.form = { ...res }
         // this.$set(this.form, 'areaId', res.areaId)
         // console.log('res', res)
         // console.log('res', this.form)
-        this.initData(res.areaId)
+
       })
     },
-    initData(areaId) {
+    initData() {
       fetchList({
         model: { type: 4 },
         capacity: 1000,
         page: 1,
       }).then(res => {
         this.cateList = res.records || []
-        console.log('this.form.areaId', this.form)
-
-        if (areaId) {
-          this.cateList.forEach(item => {
-            if (item.childCategoryList) {
-              item.childCategoryList.forEach(item2 => {
-                if (item2.id == areaId) {
-                  this.$set(this.form, 'areaIds', [item.id, item2.id])
-                  console.log('areaIds', this.form)
-
-                }
-              })
-            }
-          })
-        }
+        setTimeout(() => {
+          const areaId = this.form.areaId
+          if (areaId) {
+            this.cateList.forEach(item => {
+              if (item.childCategoryList) {
+                item.childCategoryList.forEach(item2 => {
+                  if (item2.id == areaId) {
+                    this.$set(this.form, 'areaIds', [item.id, item2.id])
+                  }
+                })
+              }
+            })
+          }
+        }, 1300)
+      })
+      getDeiceList({
+        model: {},
+        capacity: 1000,
+        page: 1,
+      }).then(res => {
+        this.deviceList = res.records
       })
 
     },
     getCenter(data) {
       // console.log(data)
       // this.$set(this.form, 'postion', data.address)
-      if(data.lng){
+      if (data.lng) {
         this.$set(this.form, 'lnglat', data.lng + ',' + data.lat)
-      }else{
+      } else {
         this.$set(this.form, 'lnglat', '')
       }
       this.$set(this.form, 'longitude', data.lng)
@@ -138,8 +146,8 @@
       }
     },
     uploadAvatarSuccess(file) {
-      this.form.imgurl = file.imgurl
-      this.form.imgurlfull = file.imgurlfull
+      this.form.fileurl = file.imgurl
+      this.form.fileFullUrl = file.imgurlfull
     },
   }
 }
diff --git a/admin/src/views/Inspection/components/OperaYwPatrolSchemeWindow.vue b/admin/src/views/Inspection/components/OperaYwPatrolSchemeWindow.vue
index 0f933b6..0e58415 100644
--- a/admin/src/views/Inspection/components/OperaYwPatrolSchemeWindow.vue
+++ b/admin/src/views/Inspection/components/OperaYwPatrolSchemeWindow.vue
@@ -1,38 +1,52 @@
 <template>
-  <GlobalWindow width="520px" :title="title" :visible.sync="visible" :confirm-working="isWorking" @confirm="confirm">
+  <GlobalWindow width="520px" :title="title" @close="close" :visible.sync="visible" :confirm-working="isWorking"
+    @confirm="confirm">
+    <div class="warnning">
+      {{ form.id ? '缂栬緫璁″垝瀵瑰凡鐢熸垚鐨勪换鍔℃棤鏁堬紝浼氬湪涓嬫鐢熸垚浠诲姟鏃剁敓鏁堬紝涓斿綋澶╀笉浼氱敓鎴愪袱涓换鍔�' : '鏂板缓宸℃璁″垝浼氫粠褰撳ぉ寮�濮嬶紝鎸夌収閰嶇疆瑙勫垯浜х敓瀵瑰簲鐨勫贰妫�浠诲姟' }}
+    </div>
     <el-form :model="form" ref="form" :rules="rules">
       <el-form-item label="璁″垝鍚嶇О" prop="title">
         <el-input v-model="form.title" placeholder="璇疯緭鍏ユ爣棰�" v-trim />
       </el-form-item>
-      <el-form-item label="宸℃绾胯矾">
-        <el-select v-model="form.status" filterable clearable>
-          <el-option value="0" label="姣忓ぉ"></el-option>
-          <el-option value="1" label="姣忓懆"></el-option>
-          <el-option value="2" label="姣忔湀"></el-option>
+      <el-form-item label="宸℃绾胯矾" prop="lineId">
+        <el-select v-model="form.lineId" filterable clearable>
+          <el-option v-for="item in lineList" :value="item.id" :label="item.name"></el-option>
         </el-select>
       </el-form-item>
-      <el-form-item label="宸℃璐熻矗浜�">
+      <el-form-item label="宸℃璐熻矗浜�" prop="userIds">
         <el-select v-model="form.userIds" filterable clearable>
-          <el-option value="0" label="姣忓ぉ"></el-option>
-          <el-option value="1" label="姣忓懆"></el-option>
-          <el-option value="2" label="姣忔湀"></el-option>
+          <el-option v-for="item in staffList" :value="item.id" :label="item.realname"></el-option>
         </el-select>
       </el-form-item>
-      <el-form-item label="璁″垝寮�濮嬫棩鏈�-缁撴潫鏃ユ湡">
-        <el-date-picker v-model="form.selDate" is-range range-separator="-" value-format="yyyy-MM-dd" type="daterange"
-          start-placeholder="寮�濮嬫棩鏈�" end-placeholder="缁撴潫鏃ユ湡" class="w400" />
+      <el-form-item label="璁″垝寮�濮嬫棩鏈�-缁撴潫鏃ユ湡" prop="selDate">
+        <el-date-picker v-model="form.selDate" @change="changeDate" is-range range-separator="-"
+          value-format="yyyy-MM-dd" type="daterange" start-placeholder="寮�濮嬫棩鏈�" end-placeholder="缁撴潫鏃ユ湡" />
       </el-form-item>
       <el-form-item label="璁″垝鎵ц鏃堕棿">
-        <el-time-picker v-model="form.selTime" is-range range-separator="-" format="HH:mm" value-format="HH:mm:ss"
-          start-placeholder="寮�濮嬫椂闂�" end-placeholder="缁撴潫鏃堕棿" placeholder="閫夋嫨鏃堕棿鑼冨洿" class="w400" />
+        <el-time-picker v-model="form.selTime" @change="changeTime" is-range range-separator="-" format="HH:mm"
+          value-format="HH:mm:ss" start-placeholder="寮�濮嬫椂闂�" end-placeholder="缁撴潫鏃堕棿" placeholder="閫夋嫨鏃堕棿鑼冨洿" />
       </el-form-item>
-      <el-form-item label="寰幆鍛ㄦ湡">
-        <el-select v-model="form.circleType" filterable clearable>
-          <el-option value="0" label="姣忓ぉ"></el-option>
-          <el-option value="1" label="姣忓懆"></el-option>
-          <el-option value="2" label="姣忔湀"></el-option>
+      <el-form-item label="閲嶅棰戠巼">
+        <el-select v-model="form.circleType" @change="changeType" filterable>
+          <el-option :value="0" label="姣忓ぉ"></el-option>
+          <el-option :value="1" label="姣忓懆"></el-option>
+          <el-option :value="2" label="姣忔湀"></el-option>
         </el-select>
       </el-form-item>
+      <el-form-item v-if="form.circleType == 1" prop="circleDays" label="閲嶅瑙勫垯">
+        <div class="weeks">
+          <div class="week" @click="weekClick(i)" :class="{ active: item.sel }" v-for="item, i in weeks">{{ item.la }}
+          </div>
+        </div>
+      </el-form-item>
+      <el-form-item v-if="form.circleType == 2" prop="circleDays" label="閲嶅瑙勫垯">
+        <div class="weeks">
+          <div class="week" @click="monthClick(i)" :class="{ active: item.sel }" v-for="item, i in monthsList">{{
+            item.la
+            }}</div>
+        </div>
+      </el-form-item>
+
     </el-form>
   </GlobalWindow>
 </template>
@@ -40,6 +54,9 @@
 <script>
 import BaseOpera from '@/components/base/BaseOpera'
 import GlobalWindow from '@/components/common/GlobalWindow'
+import { fetchList as getLineList } from '@/api/Inspection/ywPatrolLine'
+import { detailById } from '@/api/Inspection/ywPatrolScheme'
+import { getUserList } from '@/api/system/user'
 export default {
   name: 'OperaYwPatrolSchemeWindow',
   extends: BaseOpera,
@@ -63,7 +80,7 @@
         dealUserId: '',
         dealDate: '',
         dealInfo: '',
-        circleType: '',
+        circleType: 0,
         circleDays: '',
         startDate: '',
         endDate: '',
@@ -71,10 +88,26 @@
         endTime: '',
         processStatus: '',
         selDate: [],
-        selTime: [],
       },
-      // 楠岃瘉瑙勫垯
+      lineList: [],
+      staffList: [],
+      weeks: [
+        { la: '鍛ㄤ竴', va: 1, sel: false },
+        { la: '鍛ㄤ簩', va: 2, sel: false },
+        { la: '鍛ㄤ笁', va: 3, sel: false },
+        { la: '鍛ㄥ洓', va: 4, sel: false },
+        { la: '鍛ㄤ簲', va: 5, sel: false },
+        { la: '鍛ㄥ叚', va: 6, sel: false },
+        { la: '鍛ㄦ棩', va: 7, sel: false },
+      ],
+      monthsList: [],
+      selCircleDays: [],
       rules: {
+        title: [{ required: true, message: '璇疯緭鍏�' }],
+        lineId: [{ required: true, message: '璇烽�夋嫨' }],
+        userIds: [{ required: true, message: '璇烽�夋嫨' }],
+        selDate: [{ type: 'array', required: true, message: '璇烽�夋嫨' }],
+        circleDays: [{ required: true, message: '璇烽�夋嫨' }],
       }
     }
   },
@@ -85,10 +118,125 @@
     })
   },
   methods: {
+    weekClick(i) {
+      this.weeks.forEach((item, index) => {
+        if (i == index) { item.sel = !item.sel }
+      })
+      this.$set(this.form, 'circleDays', this.weeks.filter(j => j.sel).map(a => a.va).join(','))
+    },
+    monthClick(i) {
+      this.monthsList.forEach((item, index) => {
+        if (i == index) { item.sel = !item.sel }
+      })
+      this.$set(this.form, 'circleDays', this.monthsList.filter(j => j.sel).map(a => a.va).join(','))
+    },
+    changeTime(e) {
+      if (e && e.length > 0) {
+        this.$set(this.form, 'startTime', e[0])
+        this.$set(this.form, 'endTime', e[1])
+      } else {
+        this.$set(this.form, 'startTime', '')
+        this.$set(this.form, 'endTime', '')
+      }
+    },
+    changeDate(e) {
+      if (e && e.length > 0) {
+        this.$set(this.form, 'startDate', e[0])
+        this.$set(this.form, 'endDate', e[1])
+      } else {
+        this.$set(this.form, 'startDate', '')
+        this.$set(this.form, 'endDate', '')
+      }
+    },
+    changeType() {
+      this.$set(this.form, 'circleDays', '')
+    },
+    getDetail(id) {
+      detailById(id).then(res => {
+        this.form = res
+        if (res.userIds) {
+          this.$set(this.form, 'userIds', Number(res.userIds))
+        }
+        if (res.startTime) {
+          this.$set(this.form, 'selTime', [res.startTime, res.endTime])
+        }
+        if (res.circleDays) {
+          const circleDays = res.circleDays.split(',')
+          if (res.circleType == 1) {
+            circleDays.forEach(i => {
+              this.weeks.forEach(j => {
+                if (i == j.va) {
+                  j.sel = true
+                }
+              })
+            })
+          } else {
+            setTimeout(() => {
+              circleDays.forEach(i => {
+                this.monthsList.forEach(j => {
+                  if (i == j.va) {
+                    j.sel = true
+                  }
+                })
+              })
+            }, 500)
+          }
+        }
+        this.$set(this.form, 'selDate', [res.startDate, res.endDate])
+      })
+    },
     initData() {
-
+      getLineList({
+        model: {},
+        capacity: 9999,
+        page: 1,
+      }).then(res => {
+        this.lineList = res.records
+      })
+      getUserList({}).then(res => {
+        this.staffList = res
+      })
+      this.monthsList = []
+      for (let i = 1; i < 32; i++) {
+        this.monthsList.push({ la: i, va: i, sel: false })
+      }
+    },
+    close() {
+      this.$refs.form.resetFields()
+      this.visible = false
     }
   }
 
 }
 </script>
+<style lang="scss" scoped>
+@import '@/assets/style/variables.scss';
+.warnning{
+  padding: 6px 10px;
+  background-color: #fcf3e6;
+  font-size: 12px;
+  color: #333333;
+}
+.weeks {
+  display: flex;
+  align-items: center;
+  flex-wrap: wrap;
+
+  .week {
+    border: 1px solid #999999;
+    width: 40px;
+    height: 18px;
+    text-align: center;
+    line-height: 18px;
+    font-size: 12px;
+    margin-right: 8px;
+    cursor: pointer;
+    margin-bottom: 6px;
+  }
+
+  .active {
+    color: $primary-color;
+    border: 1px solid $primary-color;
+  }
+}
+</style>
\ No newline at end of file
diff --git a/admin/src/views/Inspection/components/taskDetail.vue b/admin/src/views/Inspection/components/taskDetail.vue
index dfe59dc..79fd9ca 100644
--- a/admin/src/views/Inspection/components/taskDetail.vue
+++ b/admin/src/views/Inspection/components/taskDetail.vue
@@ -2,16 +2,22 @@
   <GlobalWindow title="宸℃浠诲姟璇︽儏" :showConfirm="false" :visible.sync="isShowModal">
     <QueryForm v-model="filters" :query-form-config="queryFormConfig" @handleQuery="getList(1)" @clear="clear" />
     <el-table v-loading="loading" :data="list" stripe>
-      <el-table-column prop="" label="宸℃鐐瑰悕绉�" min-width="100" show-overflow-tooltip />
-      <el-table-column prop="" label="鐘舵��" min-width="100" show-overflow-tooltip />
-      <el-table-column prop="" label="宸℃浜�" min-width="100" show-overflow-tooltip />
-      <el-table-column prop="" label="宸℃鏃堕棿" min-width="100" show-overflow-tooltip />
-      <el-table-column prop="" label="宸℃缁撴灉" min-width="100" show-overflow-tooltip />
-      <el-table-column prop="" label="宸℃璇存槑" min-width="100" show-overflow-tooltip>
-        <template v-slot="scope">
-          <span>{{ scope.row.billCode || scope.row.contractNum }}</span>
+      <el-table-column prop="pointName" label="宸℃鐐瑰悕绉�" min-width="100" show-overflow-tooltip />
+      <el-table-column prop="" label="鐘舵��" min-width="100" show-overflow-tooltip>
+        <template v-slot="{ row }">
+          <span v-if="row.status == 0">寰呭紑濮�</span>
+          <span v-if="row.status == 1">宸插贰妫�</span>
         </template>
       </el-table-column>
+      <el-table-column prop="editor" label="宸℃浜�" min-width="100" show-overflow-tooltip />
+      <el-table-column prop="editDate" label="宸℃鏃堕棿" min-width="100" show-overflow-tooltip />
+      <el-table-column prop="" label="宸℃缁撴灉" min-width="100" show-overflow-tooltip>
+        <template v-slot="{ row }">
+          <span class="gray" v-if="row.dealStatus == 0">姝e父</span>
+          <span class="red" v-if="row.dealStatus == 1">寮傚父</span>
+        </template>
+      </el-table-column>
+      <el-table-column prop="dealInfo" label="宸℃璇存槑" min-width="100" show-overflow-tooltip />
     </el-table>
     <div class="mt20">
       <Pagination @size-change="handleSizeChange" @current-change="getDetail" :pagination="pagination" />
@@ -23,11 +29,12 @@
 import GlobalWindow from '@/components/common/GlobalWindow'
 import QueryForm from '@/components/common/QueryForm'
 import Pagination from '@/components/common/Pagination'
+import { getDetail } from '@/api/Inspection/ywPatrolTask'
 export default {
   components: { GlobalWindow, QueryForm, Pagination },
   data() {
     return {
-      isShowModal: true,
+      isShowModal: false,
       id: '',
       pagination: {
         pageSize: 10,
@@ -40,16 +47,19 @@
       queryFormConfig: {
         formItems: [
           {
-            filed: 'name',
+            filed: 'pointName',
             type: 'input',
             label: '宸℃鐐瑰悕绉�'
           },
           {
             filed: 'status',
             type: 'select',
-            label: '鎵ц鐘舵��',
+            label: '鐘舵��',
             placeholder: '鍏ㄩ儴',
-            options: []
+            options: [
+              { label: '寰呭紑濮�', value: 0 },
+              { label: '宸插贰妫�', value: 1 },
+            ]
           },
         ],
         online: true
@@ -60,10 +70,10 @@
     getDetail(page) {
       const { pagination, filters, id } = this
       this.loading = true
-      platformLogPage({
+      getDetail({
         model: {
           ...filters,
-          id,
+          taskId: id,
         },
         sorts: [{ direction: 'DESC', property: 'param1' }],
         capacity: pagination.pageSize,
@@ -71,6 +81,7 @@
       }).then(res => {
         this.loading = false
         this.list = res.records || []
+        this.pagination.total = res.total
         this.list.forEach(item => {
           item.inTypeTemp = item.inType == 0 ? '鏁存墭鐩�' : '浠剁儫'
           item.taskOrigin = 'WMS鑾峰彇'
@@ -94,5 +105,3 @@
   }
 }
 </script>
-
-<style lang="scss" scoped></style>
\ No newline at end of file
diff --git a/admin/src/views/Inspection/path.vue b/admin/src/views/Inspection/path.vue
index 4854c6b..03e8b95 100644
--- a/admin/src/views/Inspection/path.vue
+++ b/admin/src/views/Inspection/path.vue
@@ -91,6 +91,7 @@
     editClick(row) {
       if (row && row.id) {
         this.$refs.operaYwPatrolLineWindow.open('缂栬緫宸℃绾胯矾')
+        this.$refs.operaYwPatrolLineWindow.getDetail(row)
       } else {
         this.$refs.operaYwPatrolLineWindow.open('鏂板缓宸℃绾胯矾')
       }
diff --git a/admin/src/views/Inspection/plan.vue b/admin/src/views/Inspection/plan.vue
index 55fa79a..2ae79a1 100644
--- a/admin/src/views/Inspection/plan.vue
+++ b/admin/src/views/Inspection/plan.vue
@@ -2,16 +2,12 @@
   <TableLayout :permissions="['business:ywpatrolscheme:query']">
     <!-- 鎼滅储琛ㄥ崟 -->
     <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
-
-      <el-form-item label="鏍囬" prop="title">
+      <el-form-item label="璁″垝鏍囬" prop="title">
         <el-input v-model="searchForm.title" placeholder="璇疯緭鍏ユ爣棰�" @keypress.enter.native="search"></el-input>
       </el-form-item>
-      <el-form-item label="寮�濮嬫棩鏈�" prop="startDate">
-        <el-date-picker v-model="searchForm.startDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ュ紑濮嬫棩鏈�"
-          @change="search" />
-      </el-form-item>
-      <el-form-item label="缁撴潫鏃ユ湡" prop="endDate">
-        <el-date-picker v-model="searchForm.endDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ョ粨鏉熸棩鏈�" @change="search" />
+      <el-form-item label="璁″垝鏃ユ湡" prop="selDate">
+        <el-date-picker type="daterange" v-model="searchForm.selDate" clearable value-format="yyyy-MM-dd"
+          @change="changeDate" />
       </el-form-item>
 
       <section>
@@ -24,7 +20,7 @@
     <!-- 琛ㄦ牸鍜屽垎椤� -->
     <template v-slot:table-wrap>
       <ul class="toolbar" v-permissions="['business:ywpatrolscheme:create', 'business:ywpatrolscheme:delete']">
-        <li><el-button type="primary" @click="$refs.operaYwPatrolSchemeWindow.open('鏂板缓宸℃璁″垝')" icon="el-icon-plus"
+        <li><el-button type="primary" @click="editClick()" icon="el-icon-plus"
             v-permissions="['business:ywpatrolscheme:create']">鏂板缓</el-button></li>
         <li><el-button @click="deleteByIdInBatch" icon="el-icon-delete"
             v-permissions="['business:ywpatrolscheme:delete']">鍒犻櫎</el-button></li>
@@ -34,30 +30,36 @@
 
         <el-table-column prop="title" label="璁″垝鍚嶇О" min-width="100px"></el-table-column>
         <el-table-column prop="lineId" label="璁″垝缂栧彿" min-width="100px"></el-table-column>
-        <el-table-column prop="dealDate" label="璐熻矗浜哄憳" min-width="100px"></el-table-column>
+        <el-table-column prop="userName" label="璐熻矗浜哄憳" min-width="100px"></el-table-column>
 
-        <el-table-column prop="startDate" label="璁″垝鏃ユ湡" min-width="100px">
+        <el-table-column prop="startDate" label="璁″垝鏃ユ湡" min-width="150px">
           <template v-slot="scope">
             <span>{{ scope.row.startDate }} - {{ scope.row.endDate }}</span>
           </template>
         </el-table-column>
-        <el-table-column prop="startDate" label="鎵ц鏃堕棿" min-width="100px">
+        <el-table-column prop="startDate" label="鎵ц鏃堕棿" min-width="130px">
           <template v-slot="scope">
             <span>{{ scope.row.startTime }} - {{ scope.row.endTime }}</span>
           </template>
         </el-table-column>
-        <el-table-column prop="" label="鍒涘缓浜�" min-width="100px"></el-table-column>
-        <el-table-column prop="" label="鎵ц缁撴灉" min-width="100px"></el-table-column>
+        <el-table-column prop="createUserName" label="鍒涘缓浜�" min-width="100px"></el-table-column>
+        <el-table-column prop="" label="鎵ц缁撴灉" min-width="100px">
+          <template v-slot="scope">
+            <span v-if="scope.row.schemeStatus == 0">寰呭紑濮�</span>
+            <span v-if="scope.row.schemeStatus == 1">杩涜涓�</span>
+            <span v-if="scope.row.schemeStatus == 2">宸茬粨鏉�</span>
+          </template>
+        </el-table-column>
         <el-table-column label="鐘舵��" min-width="100px">
           <template v-slot="scope">
-            <el-switch v-model="scope.row.status" @change="changeStatus" active-value="0" inactive-value="1">
+            <el-switch v-model="scope.row.status" @change="e => changeStatus(scope.row)" :active-value="0" :inactive-value="1">
             </el-switch>
           </template>
         </el-table-column>
         <el-table-column v-if="containPermissions(['business:ywpatrolscheme:update', 'business:ywpatrolscheme:delete'])"
           label="鎿嶄綔" min-width="120" fixed="right">
           <template slot-scope="{row}">
-            <el-button type="text" @click="$refs.operaYwPatrolSchemeWindow.open('缂栬緫宸℃璁″垝', row)" icon="el-icon-edit"
+            <el-button type="text" @click="editClick(row)" icon="el-icon-edit"
               v-permissions="['business:ywpatrolscheme:update']">缂栬緫</el-button>
             <el-button type="text" @click="deleteById(row)" icon="el-icon-delete"
               v-permissions="['business:ywpatrolscheme:delete']">鍒犻櫎</el-button>
@@ -77,6 +79,8 @@
 import TableLayout from '@/layouts/TableLayout'
 import Pagination from '@/components/common/Pagination'
 import OperaYwPatrolSchemeWindow from './components/OperaYwPatrolSchemeWindow'
+import { updateStatusById } from '@/api/Inspection/ywPatrolScheme'
+import { Message } from 'element-ui'
 export default {
   name: 'YwPatrolScheme',
   extends: BaseTable,
@@ -85,28 +89,7 @@
     return {
       // 鎼滅储
       searchForm: {
-        id: '',
-        creator: '',
-        createDate: '',
-        editor: '',
-        editDate: '',
-        isdeleted: '',
-        title: '',
-        remark: '',
-        status: '',
-        sortnum: '',
-        lineId: '',
-        userIds: '',
-        dealUserId: '',
-        dealDate: '',
-        dealInfo: '',
-        circleType: '',
-        circleDays: '',
-        startDate: '',
-        endDate: '',
-        startTime: '',
-        endTime: '',
-        processStatus: ''
+       title: ''
       }
     }
   },
@@ -120,9 +103,33 @@
     this.search()
   },
   methods: {
+    changeStatus(e) {
+      console.log(e);
+      updateStatusById(e).then(res => {
+        this.search()
+        Message.success('鐘舵�佷慨鏀规垚鍔�')
+      }, () => {
+        this.search()
+      })
+    },
+    changeDate(e) {
+      if(e && e.length > 0){
+        this.$set(this.searchForm, 'startDate', e[0])
+        this.$set(this.searchForm, 'endDate', e[1])
+      }else{
+        this.$set(this.searchForm, 'startDate', '')
+        this.$set(this.searchForm, 'endDate', '')
+      }
+      
+    },
+    reset() {
+      this.searchForm = {}
+      this.search()
+    },
     editClick(row) {
       if (row && row.id) {
         this.$refs.operaYwPatrolSchemeWindow.open('缂栬緫宸℃璁″垝')
+        this.$refs.operaYwPatrolSchemeWindow.getDetail(row.id)
       } else {
         this.$refs.operaYwPatrolSchemeWindow.open('鏂板缓宸℃璁″垝')
       }
diff --git a/admin/src/views/Inspection/task.vue b/admin/src/views/Inspection/task.vue
index 99b3ea0..e3a57eb 100644
--- a/admin/src/views/Inspection/task.vue
+++ b/admin/src/views/Inspection/task.vue
@@ -2,11 +2,11 @@
   <TableLayout :permissions="['business:ywpatroltask:query']">
     <!-- 鎼滅储琛ㄥ崟 -->
     <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
-      <el-form-item label="璁″垝鍚嶇О" prop="title">
-        <el-input v-model="searchForm.title" placeholder="璇疯緭鍏ヨ鍒掑悕绉�" @keypress.enter.native="search"></el-input>
+      <el-form-item label="璁″垝鍚嶇О" prop="planTitle">
+        <el-input v-model="searchForm.planTitle" placeholder="璇疯緭鍏ヨ鍒掑悕绉�" @keypress.enter.native="search"></el-input>
       </el-form-item>
-      <el-form-item >
-        <el-select v-model="searchForm.status" filterable clearable>
+      <el-form-item label="浠诲姟鐘舵��">
+        <el-select v-model="searchForm.status" label="浠诲姟鐘舵��" filterable clearable>
           <el-option value="0" label="寰呭紑濮�"></el-option>
           <el-option value="1" label="杩涜涓�"></el-option>
           <el-option value="2" label="宸茶秴鏈�"></el-option>
@@ -30,11 +30,11 @@
       >
         <el-table-column type="selection" width="55"></el-table-column>
         <el-table-column prop="planTitle" label="璁″垝鍚嶇О" min-width="100px"></el-table-column>
-        <el-table-column prop="schemeId" label="璁″垝缂栧彿" min-width="100px"></el-table-column>
+        <el-table-column prop="planCode" label="璁″垝缂栧彿" min-width="100px"></el-table-column>
         <el-table-column prop="code" label="浠诲姟缂栧彿" min-width="100px"></el-table-column>
-        <el-table-column prop="dealDate" label="浠诲姟鏃堕棿" min-width="100px">
+        <el-table-column prop="dealDate" label="浠诲姟鏃堕棿" min-width="140px">
           <template v-slot="scope">
-            <span>{{ scope.row.startDate }} {{ scope.row.endDate }}</span>
+            <span v-if="scope.row.startDate && scope.row.endDate">{{ scope.row.startDate.slice(0, 16) }} - {{ scope.row.endDate.slice(11, 16) }}</span>
           </template>
         </el-table-column>
         <el-table-column prop="dealDate" label="瀹為檯瀹屾垚鏃堕棿" min-width="100px"></el-table-column>
@@ -55,7 +55,8 @@
           fixed="right"
         >
           <template slot-scope="{row}">
-            <el-button type="text" @click="deleteById(row)" icon="el-icon-delete" v-permissions="['business:ywpatroltask:delete']">鍙栨秷</el-button>
+            <el-button type="text" @click="handleDetail(row)">鏌ョ湅璇︽儏</el-button>
+            <el-button type="text" @click="cancelById(row)" v-permissions="['business:ywpatroltask:delete']">鍙栨秷</el-button>
           </template>
         </el-table-column>
       </el-table>
@@ -104,6 +105,9 @@
       this.$refs.TaskDetailRef.id = row.id
       this.$refs.TaskDetailRef.getDetail()
     },
+    cancelById() {
+
+    },
   }
 }
 </script>
diff --git a/admin/src/views/business/internalMember.vue b/admin/src/views/business/internalMember.vue
index 956a89c..20b95b9 100644
--- a/admin/src/views/business/internalMember.vue
+++ b/admin/src/views/business/internalMember.vue
@@ -171,8 +171,6 @@
           <template slot-scope="{row}">
             <el-button type="text" icon="el-icon-edit" @click="$refs.OperaMemberWindow.open('缂栬緫鍛樺伐淇℃伅', row, department)"
               v-permissions="['business:empower:update']">缂栬緫</el-button>
-            <el-button type="text" icon="el-icon-plus" @click="empower(row.id)"
-              v-permissions="['business:empower:create']">閲嶆柊鎺堟潈</el-button>
             <el-button type="text" :loading="heading" style="color: red" icon="el-icon-delete"
               @click="updateHead(row, 0)" v-if="row.headStatus == 1"
               v-permissions="['business:member:head']">鍙栨秷涓荤</el-button>
diff --git a/admin/src/views/client/components/staffEdit.vue b/admin/src/views/client/components/staffEdit.vue
index f74bff5..c85f098 100644
--- a/admin/src/views/client/components/staffEdit.vue
+++ b/admin/src/views/client/components/staffEdit.vue
@@ -1,6 +1,6 @@
 <template>
-  <GlobalWindow :title="title" width="900px" :visible.sync="visible" :confirm-working="isWorking" @confirm="confirm">
-    <el-form :model="form" ref="form" :rules="rules">
+  <GlobalWindow :title="title" width="820px" :visible.sync="visible" :confirm-working="isWorking" @confirm="confirm">
+    <el-form :model="form" ref="form" label-position="top" :rules="rules">
       <div class="list">
         <el-form-item label="瀹㈡埛鍚嶇О" prop="customerId">
           <el-select v-model="form.customerId" clearable filterable>
diff --git a/admin/src/views/client/staffList.vue b/admin/src/views/client/staffList.vue
index 6117255..e3be587 100644
--- a/admin/src/views/client/staffList.vue
+++ b/admin/src/views/client/staffList.vue
@@ -37,8 +37,12 @@
           </template>
         </el-table-column>
         <el-table-column prop="status" label="鐘舵��" min-width="100px">
+
           <template slot-scope="{row}">
-            <span :class="{ red: row.status == 1 }">{{ row.status == '0' ? '姝e父' : '绂佺敤' }}</span>
+            <el-switch v-model="row.status" @change="e => changeStatus(row)" :active-value="0"
+              :inactive-value="1">
+            </el-switch>
+            <!-- <span :class="{ red: row.status == 1 }">{{ row.status == '0' ? '姝e父' : '绂佺敤' }}</span> -->
           </template>
         </el-table-column>
         <el-table-column v-if="containPermissions(['business:ywcustomer:update', 'business:ywcustomer:delete'])"
@@ -65,6 +69,8 @@
 import Pagination from '@/components/common/Pagination'
 import OperaYwCustomerWindow from './components/staffEdit.vue'
 import { fetchList } from '@/api/client/ywCustomer'
+import { updateStatusById } from '@/api/business/member'
+import { Message } from 'element-ui'
 export default {
   name: 'YwCustomer',
   extends: BaseTable,
@@ -90,6 +96,14 @@
     this.initData()
   },
   methods: {
+    changeStatus(e) {
+      updateStatusById(e).then(res => {
+        this.search()
+        Message.success('鐘舵�佷慨鏀规垚鍔�')
+      }, () => {
+        this.search()
+      })
+    },
     initData() {
       fetchList({
         capacity: 9000,
diff --git a/admin/src/views/finance/components/companyEdit.vue b/admin/src/views/finance/components/companyEdit.vue
index 6c378a8..22c1e7f 100644
--- a/admin/src/views/finance/components/companyEdit.vue
+++ b/admin/src/views/finance/components/companyEdit.vue
@@ -25,7 +25,7 @@
 <script>
 import GlobalWindow from '@/components/common/GlobalWindow'
 import UploadAvatarImage from '@/components/common/UploadAvatarImage'
-import { create, updateById } from '@/api/business/company'
+import { createFinanceCompany, updateFinanceCompany } from '@/api/business/company'
 import { Message } from 'element-ui'
 export default {
   components: { GlobalWindow, UploadAvatarImage },
@@ -52,7 +52,7 @@
       const { param, subLoading } = this
       this.$refs['paramRef'].validate((valid) => {
         if (valid) {
-          let fn = param.id ? updateById : create
+          let fn = param.id ? updateFinanceCompany : createFinanceCompany
           this.subLoading = true
           fn(param).then(res => {
             this.subLoading = false
diff --git a/admin/src/views/operation/components/deviceEdit.vue b/admin/src/views/operation/components/deviceEdit.vue
index 4b24b38..129cc6d 100644
--- a/admin/src/views/operation/components/deviceEdit.vue
+++ b/admin/src/views/operation/components/deviceEdit.vue
@@ -43,7 +43,7 @@
         </el-select>
       </el-form-item>
       <el-form-item label="鐓х墖" prop="">
-        <UploadAvatarImage :file="{ 'imgurlfull': param.imgurlfull, 'imgurl': param.imgurl }"
+        <UploadAvatarImage :file="{ 'imgurlfull': param.fileFullUrl, 'imgurl': param.fileUrl }"
           :uploadData="{ folder: 'ywDevice/' }" @uploadSuccess="uploadAvatarSuccess" @uploadEnd="isUploading = false"
           @uploadBegin="isUploading = true" />
       </el-form-item>
@@ -109,7 +109,6 @@
                   if (item2.id == cateId) {
                     this.$set(this.param, 'cateIds', [item.id, item2.id])
                     console.log('cateId', this.form)
-
                   }
                 })
               }
@@ -141,8 +140,8 @@
       }
     },
     uploadAvatarSuccess(file) {
-      this.$set(this.param, 'imgurl', file.imgurl)
-      this.$set(this.param, 'imgurlfull', file.imgurlfull)
+      this.$set(this.param, 'fileUrl', file.imgurl)
+      this.$set(this.param, 'fileFullUrl', file.imgurlfull)
     },
     close() {
       this.isShowModal = false
diff --git a/admin/src/views/operation/components/maintain.vue b/admin/src/views/operation/components/maintain.vue
index 5ec2b19..a1d0879 100644
--- a/admin/src/views/operation/components/maintain.vue
+++ b/admin/src/views/operation/components/maintain.vue
@@ -2,21 +2,21 @@
   <GlobalWindow :title="param.id ? '缂栬緫杩愮淮璁板綍' : '鏂板缓杩愮淮璁板綍'" :confirmWorking="subLoading" :visible.sync="isShowModal"
     width="600px" @close="close" @confirm="handleSub">
     <el-form :model="param" ref="paramRef" :rules="rules">
-      <el-form-item label="閫夋嫨璁惧" prop="code">
+      <el-form-item label="閫夋嫨璁惧" prop="deviceId">
         <el-select v-model="param.deviceId" filterable clearable>
-          <el-option v-for="item in deviceList" :value="item" :label="item"></el-option>
+          <el-option v-for="item in deviceList" :value="item.id" :label="item.name"></el-option>
         </el-select>
       </el-form-item>
-      <el-form-item label="杩愮淮浜哄憳" prop="code">
-        <el-select v-model="param.realName" filterable clearable>
-          <el-option v-for="item in 10" :value="item" :label="item"></el-option>
+      <el-form-item label="杩愮淮浜哄憳" prop="userId">
+        <el-select v-model="param.userId" filterable clearable>
+          <el-option v-for="item in staffList" :value="item.id" :label="item.realname"></el-option>
         </el-select>
       </el-form-item>
       <el-form-item label="璁惧鐘舵��" prop="">
         <el-select v-model="param.status" filterable clearable>
-          <el-option value="0" label="姝e父"></el-option>
-          <el-option value="1" label="鎹熷潖"></el-option>
-          <el-option value="2" label="鎶ュ簾"></el-option>
+          <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="">
@@ -37,17 +37,13 @@
           </div>
         </div>
       </el-form-item>
-      <el-form-item label="杩愮淮澶囨敞" prop="">
-        <el-input type="textarea" :rows="4" v-model="param.remark" placeholder="璇疯緭鍏�" />
+      <el-form-item label="杩愮淮澶囨敞" prop="content">
+        <el-input type="textarea" :rows="4" v-model="param.content" placeholder="璇疯緭鍏�" />
       </el-form-item>
-      <el-form-item label="杩愮淮鏃堕棿" prop="">
+      <el-form-item label="杩愮淮鏃堕棿" prop="dealDate">
         <el-date-picker v-model="param.dealDate" format="yyyy-MM-dd HH:mm:ss" value-format="yyyy-MM-dd HH:mm:ss"
           type="datetime"></el-date-picker>
       </el-form-item>
-
-
-
-
     </el-form>
   </GlobalWindow>
 </template>
@@ -56,6 +52,8 @@
 import GlobalWindow from '@/components/common/GlobalWindow'
 import UploadAvatarImage from '@/components/common/UploadAvatarImage'
 import { fetchList } from '@/api/Inspection/device'
+import { getUserList } from '@/api/system/user'
+import { create, updateById } from '@/api/Inspection/deviceRecord'
 import { Message, Loading } from 'element-ui'
 export default {
   components: { GlobalWindow, UploadAvatarImage },
@@ -65,9 +63,11 @@
       subLoading: false,
       param: {},
       deviceList: [],
+      staffList: [],
       rules: {
-        name: [{ required: true, message: '璇疯緭鍏�' }],
-        code: [{ required: true, message: '璇疯緭鍏�' }]
+        deviceId: [{ required: true, message: '璇烽�夋嫨' }],
+        content: [{ required: true, message: '璇疯緭鍏�' }],
+        // code: [{ required: true, message: '璇疯緭鍏�' }],
       },
 
       loadingInstance: null,
@@ -84,18 +84,19 @@
   },
   methods: {
     handleSub() {
-      const { param, subLoading } = this
+      const { param, subLoading, fileList } = this
       this.$refs['paramRef'].validate((valid) => {
         if (valid) {
           let fn = param.id ? updateById : create
+          if(fileList && fileList.length > 0){
+            param.multifileList = fileList
+          }
           this.subLoading = true
           fn(param).then(res => {
-            if (res.code == 200) {
-              this.subLoading = false
+            this.subLoading = false
               this.$emit('success')
               Message.success('淇濆瓨鎴愬姛')
               this.close()
-            }
           }).catch(() => {
             this.subLoading = false
           })
@@ -108,9 +109,11 @@
         capacity: 1000,
         page: 1,
       }).then(res => {
-        this.deviceList = res || []
+        this.deviceList = res.records
       })
-
+      getUserList({}).then(res => {
+        this.staffList = res
+      })
     },
     changeSel(e) {
       if (e && e.length == 1) {
@@ -155,12 +158,14 @@
       if (['.mp4', '.avi', '.flv', '.wmv'].some(char => item.imgaddr.includes(char))) {
         this.fileList.push({
           type: 1,
+          objType: 6,
           fileurl: item.imgaddr,
           fileurlFull: item.url
         })
       } else {
         this.fileList.push({
           type: 0,
+          objType: 6,
           fileurl: item.imgaddr,
           fileurlFull: item.url
         })
@@ -184,7 +189,8 @@
 .file_list {
   display: flex;
   flex-wrap: wrap;
-  .avatar-uploader{
+
+  .avatar-uploader {
     width: 92px;
     height: 92px;
     display: flex;
@@ -192,6 +198,7 @@
     align-items: center;
     border: 1px dashed #d9d9d9;
   }
+
   .item {
     width: 92px;
     max-height: 92px;
diff --git a/admin/src/views/operation/components/maintainDetail.vue b/admin/src/views/operation/components/maintainDetail.vue
new file mode 100644
index 0000000..e9d85b1
--- /dev/null
+++ b/admin/src/views/operation/components/maintainDetail.vue
@@ -0,0 +1,104 @@
+<template>
+  <GlobalWindow title="璁惧杩愮淮璇︽儏" :showConfirm="false" :visible.sync="visible" width="800px">
+    <div class="model_wrap">
+      <div class="list">
+        <div class="item">
+          <div class="la">璁惧鍚嶇О</div>
+          <div class="val">{{ info.deviceName }}</div>
+        </div>
+        <div class="item">
+          <div class="la">璁惧缂栧彿</div>
+          <div class="val">{{ info.deviceCode }}</div>
+        </div>
+        <div class="item">
+          <div class="la">璁惧鐘舵��</div>
+          <div class="val" v-if="info.status == 0">姝e父</div>
+          <div class="val" v-if="info.status == 1">鎹熷潖</div>
+          <div class="val" v-if="info.status == 2">鎶ュ簾</div>
+        </div>
+        <div class="item">
+          <div class="la">杩愮淮浜�</div>
+          <div class="val">{{ info.realName }}</div>
+        </div>
+        <div class="item">
+          <div class="la">杩愮淮浜虹數璇�</div>
+          <div class="val">{{ info.mobile }}</div>
+        </div>
+        <div class="item">
+          <div class="la">杩愮淮鏃堕棿</div>
+          <div class="val">{{ info.dealDate }}</div>
+        </div>
+        <div class="item max">
+          <div class="la">杩愮淮澶囨敞</div>
+          <div class="val">{{ info.content }}</div>
+        </div>
+        <div class="item max">
+          <div class="la">鐜板満鐓х墖</div>
+          <div class="value" v-if="info.multifileList == null || !info.multifileList.length">鏃�</div>
+          <div class="value" v-if="info.multifileList != null && info.multifileList.length">
+            <div v-for="item in info.multifileList" :key="item.id" style="display: inline;margin-right: 20px">
+              <video v-if="item.fileurlFull && item.fileurlFull.endsWith('.mp4')" ref="videoRef" controls preload="auto"
+                style="width: 80px;height: 80px;object-fit: contain;" :src="item.fileurlFull" />
+              <el-image v-else-if="item.fileurlFull" style="width:80px; height: 80px" :src="item.fileurlFull"
+                :preview-src-list="[item.fileurlFull]">
+              </el-image>
+            </div>
+          </div>
+        </div>
+      </div>
+    </div>
+  </GlobalWindow>
+</template>
+
+<script>
+import BaseOpera from '@/components/base/BaseOpera'
+import GlobalWindow from '@/components/common/GlobalWindow'
+import { detailById } from '@/api/Inspection/deviceRecord'
+export default {
+  extends: BaseOpera,
+  components: { GlobalWindow },
+  data() {
+    return {
+      // 琛ㄥ崟鏁版嵁
+      info: {},
+    }
+  },
+  created() {
+
+  },
+  methods: {
+    getDetail(id) {
+      detailById(id).then(res => {
+        this.info = res
+      })
+    }
+  }
+}
+</script>
+<style lang="scss" scoped>
+.model_wrap {
+  padding-top: 20px;
+  .title {
+    font-size: 18px;
+    font-weight: 600;
+    margin-bottom: 16px;
+  }
+
+  .list {
+    display: flex;
+    flex-wrap: wrap;
+
+    .item {
+      width: 33.33%;
+      margin-bottom: 8px;
+
+      .la {
+        color: #7f7f7f
+      }
+    }
+    .max{
+      width: 100%;
+    }
+  }
+}
+</style>
\ No newline at end of file
diff --git a/admin/src/views/operation/record.vue b/admin/src/views/operation/record.vue
index 53e95ad..37c421a 100644
--- a/admin/src/views/operation/record.vue
+++ b/admin/src/views/operation/record.vue
@@ -7,16 +7,21 @@
       <el-button type="primary" @click="handleEx" v-permissions="['business:ywpatrolline:create']">瀵煎嚭</el-button>
     </div>
     <el-table v-loading="loading" :data="list" stripe>
-      <el-table-column prop="" label="杩愮淮浜�" min-width="100" show-overflow-tooltip />
-      <el-table-column prop="code" label="璁惧缂栧彿" min-width="100" show-overflow-tooltip />
-      <el-table-column prop="name" label="璁惧鍚嶇О" min-width="100" show-overflow-tooltip />
-      <el-table-column prop="stautsName" label="璁惧鐘舵��" min-width="100" show-overflow-tooltip />
-      <el-table-column prop="remark" label="杩愮淮澶囨敞" min-width="100" show-overflow-tooltip />
-      <el-table-column prop="createTime" label="鍒涘缓鏃堕棿" min-width="100" show-overflow-tooltip />
+      <el-table-column prop="realName" label="杩愮淮浜�" min-width="100" show-overflow-tooltip />
+      <el-table-column prop="deviceCode" label="璁惧缂栧彿" min-width="100" show-overflow-tooltip />
+      <el-table-column prop="deviceName" label="璁惧鍚嶇О" min-width="100" show-overflow-tooltip />
+      <el-table-column prop="status" label="璁惧鐘舵��" min-width="100" show-overflow-tooltip>
+        <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="content" label="杩愮淮澶囨敞" min-width="100" show-overflow-tooltip />
+      <el-table-column prop="createDate" label="鍒涘缓鏃堕棿" min-width="140" show-overflow-tooltip />
       <el-table-column label="鎿嶄綔" min-width="120" fixed="right">
         <template slot-scope="{row}">
-          <el-button type="text" @click="handleDetail(row)" icon="el-icon-edit"
-            v-permissions="['business:category:update']">鏌ョ湅</el-button>
+          <el-button type="text" @click="handleDetail(row)" v-permissions="['business:category:update']">鏌ョ湅</el-button>
         </template>
       </el-table-column>
     </el-table>
@@ -24,6 +29,7 @@
       <Pagination @size-change="handleSizeChange" @current-change="getList" :pagination="pagination" />
     </div>
     <Edit v-if="showEdit" ref="EditRef" @success="getList" @close="showEdit = false" />
+    <Detail ref="DetailRef" />
   </div>
 </template>
 
@@ -31,12 +37,14 @@
 import Pagination from '@/components/common/Pagination'
 import QueryForm from '@/components/common/QueryForm'
 import Edit from './components/maintain.vue'
-import { fetchList, deleteById } from '@/api/Inspection/device'
+import Detail from './components/maintainDetail.vue'
+import { fetchList, deleteById } from '@/api/Inspection/deviceRecord'
 export default {
   components: {
     Pagination,
     QueryForm,
-    Edit
+    Edit,
+    Detail
   },
   data() {
     return {
@@ -105,8 +113,9 @@
       })
 
     },
-    handleDetail() {
-
+    handleDetail(row) {
+      this.$refs.DetailRef.visible = true
+      this.$refs.DetailRef.getDetail(row.id)
     },
     handleDel(row) {
       let message = `纭鍒犻櫎璇ヨ褰曞悧?`
diff --git a/admin/src/views/project/components/OperaYwProjectWindow.vue b/admin/src/views/project/components/OperaYwProjectWindow.vue
index 82aba77..70ea6e0 100644
--- a/admin/src/views/project/components/OperaYwProjectWindow.vue
+++ b/admin/src/views/project/components/OperaYwProjectWindow.vue
@@ -1,23 +1,22 @@
 <template>
-  <GlobalWindow
-    :title="title"
-    :visible.sync="visible"
-    :confirm-working="isWorking"
-    @confirm="confirm"
-  >
+  <GlobalWindow :title="title" :visible.sync="visible" :confirm-working="isWorking" @confirm="confirm">
     <el-form :model="form" ref="form" :rules="rules">
-     
+
       <el-form-item label="椤圭洰鍚嶇О" prop="name">
-        <el-input v-model="form.name" placeholder="璇疯緭鍏ュ悕绉�" v-trim/>
+        <el-input v-model="form.name" placeholder="璇疯緭鍏ュ悕绉�" v-trim />
       </el-form-item>
-      <el-form-item label="鎵�灞炲湴鍧�" prop="addr">
-        <el-input v-model="form.addr" placeholder="璇疯緭鍏ヨ缁嗗湴鍧�"/>
+      <el-form-item label="鎵�灞炲湴鍖�" prop="addr">
+        <el-cascader v-model="form.areaIdT" :props="{
+          label: 'name',
+          value: 'id',
+          children: 'childList'
+        }" :options="treeList" @change="handleChange"></el-cascader>
       </el-form-item>
       <el-form-item label="璇︾粏鍦板潃" prop="addr">
-        <el-input v-model="form.addr" placeholder="璇疯緭鍏ヨ缁嗗湴鍧�"/>
+        <el-input v-model="form.addr" placeholder="璇疯緭鍏ヨ缁嗗湴鍧�" />
       </el-form-item>
       <el-form-item label="椤圭洰绠�浠�" prop="remark">
-        <el-input type="textarea" :rows="4" v-model="form.remark" placeholder="璇疯緭鍏�"/>
+        <el-input type="textarea" :rows="4" v-model="form.remark" placeholder="璇疯緭鍏�" />
       </el-form-item>
     </el-form>
   </GlobalWindow>
@@ -26,11 +25,13 @@
 <script>
 import BaseOpera from '@/components/base/BaseOpera'
 import GlobalWindow from '@/components/common/GlobalWindow'
+import { getCityTree } from '@/api/system/common'
+import { detailById } from '@/api/project/ywProject'
 export default {
   name: 'OperaYwProjectWindow',
   extends: BaseOpera,
   components: { GlobalWindow },
-  data () {
+  data() {
     return {
       // 琛ㄥ崟鏁版嵁
       form: {
@@ -45,23 +46,65 @@
         status: '',
         sortnum: '',
         imgurl: '',
+        areaIdT: '',
+        cityId: '',
         areaId: '',
+        provinceId: '',
         addr: ''
       },
       // 楠岃瘉瑙勫垯
       rules: {
         name: [{ required: true, message: '璇疯緭鍏ラ」鐩悕绉�', trigger: 'blur' }]
       },
-      projectList: []
+      projectList: [],
+      treeList: []
     }
   },
-  created () {
+  created() {
     this.config({
       api: '/project/ywProject',
       'field.id': 'id'
     })
   },
   methods: {
+    open(title, target) {
+      this.title = title
+      this.visible = true
+      this.initData()
+      this.$nextTick(() => {
+        for (const key in this.form) {
+          this.form[key] = target[key]
+        }
+        this.$set(this.form, 'areaIdT', [target.provinceId, target.cityId, target.areaId,])
+        // console.log(this.form)
+      })
+
+
+
+    },
+    handleChange(e) {
+      if (e && e.length > 0) {
+        if (e.length == 3) {
+          this.$set(this.form, 'areaId', e[2])
+        } else if (e.length == 2) {
+          this.$set(this.form, 'areaId', e[1])
+        } else {
+          this.$set(this.form, 'areaId', e[0])
+        }
+      }
+    },
+    getDetail(id) {
+      detailById(id).then(res => {
+        this.form = res
+      })
+    },
+    initData() {
+      getCityTree({
+        "type": 0
+      }).then(res => {
+        this.treeList = res
+      })
+    }
   }
 }
 </script>
diff --git a/admin/src/views/project/projectList.vue b/admin/src/views/project/projectList.vue
index a6c0ba5..c816ca7 100644
--- a/admin/src/views/project/projectList.vue
+++ b/admin/src/views/project/projectList.vue
@@ -15,7 +15,7 @@
     <!-- 琛ㄦ牸鍜屽垎椤� -->
     <template v-slot:table-wrap>
       <ul class="toolbar" v-permissions="['business:ywproject:create', 'business:ywproject:delete']">
-        <li><el-button type="primary" @click="$refs.operaYwProjectWindow.open('鏂板缓椤圭洰')" icon="el-icon-plus" v-permissions="['business:ywproject:create']">鏂板缓</el-button></li>
+        <li><el-button type="primary" @click="handleEdit()" icon="el-icon-plus" v-permissions="['business:ywproject:create']">鏂板缓</el-button></li>
         <li><el-button @click="deleteByIdInBatch" icon="el-icon-delete" v-permissions="['business:ywproject:delete']">鍒犻櫎</el-button></li>
       </ul>
       <el-table
@@ -36,7 +36,7 @@
           fixed="right"
         >
           <template slot-scope="{row}">
-            <el-button type="text" @click="$refs.operaYwProjectWindow.open('缂栬緫椤圭洰', row)" icon="el-icon-edit" v-permissions="['business:ywproject:update']">缂栬緫</el-button>
+            <el-button type="text" @click="handleEdit(row)" icon="el-icon-edit" v-permissions="['business:ywproject:update']">缂栬緫</el-button>
             <el-button type="text" @click="deleteById(row)" icon="el-icon-delete" v-permissions="['business:ywproject:delete']">鍒犻櫎</el-button>
           </template>
         </el-table-column>
@@ -90,6 +90,16 @@
       'field.main': 'id'
     })
     this.search()
+  },
+  methods: {
+    handleEdit(row){
+      if(row && row.id){
+        this.$refs.operaYwProjectWindow.open('缂栬緫椤圭洰', row)
+      }else{
+        this.$refs.operaYwProjectWindow.open('鏂板缓椤圭洰')
+        // this.$refs.operaYwProjectWindow.open('鏂板缓椤圭洰')
+      }
+    }
   }
 }
 </script>
diff --git a/admin/src/views/workorder/components/detail.vue b/admin/src/views/workorder/components/detail.vue
index 7246837..32eea5f 100644
--- a/admin/src/views/workorder/components/detail.vue
+++ b/admin/src/views/workorder/components/detail.vue
@@ -1,5 +1,5 @@
 <template>
-  <GlobalWindow width="820px" title="宸ュ崟璇︽儏" :visible.sync="visible" :confirm-working="isWorking" @close="close"
+  <GlobalWindow width="900px" title="宸ュ崟璇︽儏" :visible.sync="visible" :confirm-working="isWorking" @close="close"
     @confirm="confirm">
     <div class="main">
       <div class="title">
@@ -10,50 +10,68 @@
           <div class="status gray" v-if="info.dealStatus == 2">宸插鐞�</div>
         </div>
       </div>
-      <div class="list">
-        <div class="item">
-          <div class="la">浣嶇疆绫诲瀷</div>
-          <div class="val">{{ info.areaType == 0 ? '瀹ゅ唴缁翠慨' : '鍏叡缁翠慨' }}</div>
-        </div>
-        <div class="item">
-          <div class="la">瀵瑰簲浣嶇疆</div>
-          <div class="val">{{ info.buildingName }} / {{ info.roomNum || info.floorName }}</div>
-        </div>
-        <div class="item">
-          <div class="la">宸ュ崟绫诲埆</div>
-          <div class="val">{{ info.categoryName }}</div>
-        </div>
-        <div class="item">
-          <div class="la">涓婃姤浜�</div>
-          <div class="val">{{ info.creatorName }}</div>
-        </div>
-        <div class="item">
-          <div class="la">涓婃姤浜虹數璇�</div>
-          <div class="val">{{ info.creatorPhone }}</div>
-        </div>
-        <div class="item">
-          <div class="la">涓婃姤鏃堕棿</div>
-          <div class="val">{{ info.createDate }}</div>
-        </div>
-        <div class="item max">
-          <div class="la">涓婇棬鏃堕棿</div>
-          <div class="val">{{ info.getDate }}</div>
-        </div>
-        <div class="item max">
-          <div class="la">闂鎻忚堪</div>
-          <div class="val">{{ info.content }}</div>
-        </div>
-        <div class="item max">
-          <div class="la">闂鍥剧墖</div>
-          <div class="value" v-if="info.fileList == null || !info.fileList.length">鏃�</div>
-          <div class="value" v-if="info.fileList != null && info.fileList.length">
-            <div v-for="item in info.fileList" :key="item.id" style="display: inline;margin-right: 20px">
-              <video v-if="item.fileurlFull && item.fileurlFull.endsWith('.mp4')" ref="videoRef" controls preload="auto"
-                style="width: 80px;height: 80px;object-fit: contain;" :src="item.fileurlFull" />
-              <el-image v-else-if="item.fileurlFull" style="width:80px; height: 80px" :src="item.fileurlFull"
-                :preview-src-list="[item.fileurlFull]">
-              </el-image>
+      <div class="main_content">
+        <div class="list">
+          <div class="item">
+            <div class="la">浣嶇疆绫诲瀷</div>
+            <div class="val">{{ info.areaType == 0 ? '瀹ゅ唴缁翠慨' : '鍏叡缁翠慨' }}</div>
+          </div>
+          <div class="item">
+            <div class="la">瀵瑰簲浣嶇疆</div>
+            <div class="val">{{ info.buildingName }} / {{ info.roomNum || info.floorName }}</div>
+          </div>
+          <div class="item">
+            <div class="la">宸ュ崟绫诲埆</div>
+            <div class="val">{{ info.categoryName }}</div>
+          </div>
+          <div class="item">
+            <div class="la">涓婃姤浜�</div>
+            <div class="val">{{ info.creatorName }}</div>
+          </div>
+          <div class="item">
+            <div class="la">涓婃姤浜虹數璇�</div>
+            <div class="val">{{ info.creatorPhone }}</div>
+          </div>
+          <div class="item">
+            <div class="la">涓婃姤鏃堕棿</div>
+            <div class="val">{{ info.createDate }}</div>
+          </div>
+          <div class="item max">
+            <div class="la">涓婇棬鏃堕棿</div>
+            <div class="val">{{ info.getDate }}</div>
+          </div>
+          <div class="item max">
+            <div class="la">闂鎻忚堪</div>
+            <div class="val">{{ info.content }}</div>
+          </div>
+          <div class="item max">
+            <div class="la">闂鍥剧墖</div>
+            <div class="value" v-if="info.fileList == null || !info.fileList.length">鏃�</div>
+            <div class="value" v-if="info.fileList != null && info.fileList.length">
+              <div v-for="item in info.fileList" :key="item.id" style="display: inline;margin-right: 20px">
+                <video v-if="item.fileurlFull && item.fileurlFull.endsWith('.mp4')" ref="videoRef" controls
+                  preload="auto" style="width: 80px;height: 80px;object-fit: contain;" :src="item.fileurlFull" />
+                <el-image v-else-if="item.fileurlFull" style="width:80px; height: 80px" :src="item.fileurlFull"
+                  :preview-src-list="[item.fileurlFull]">
+                </el-image>
+              </div>
             </div>
+          </div>
+        </div>
+        <div class="side">
+          <div class="title">宸ュ崟娴佽浆璁板綍鍛�</div>
+          <div class="flow_list">
+            <div class="item" v-for="item,i in info.logList">
+              <div class="icon">
+                <div class="dian"></div>
+                <div v-if="i < info.logList.length - 1" class="line"></div>
+              </div>
+              <div class="content">
+                <div class="name">{{ item.title }}</div>
+                <div class="time">鎿嶄綔鏃堕棿锛歿{ item.createDate }}</div>
+                <div class="creator">鎿嶄綔浜猴細{{ item.param1 }}</div>
+              </div>
+            </div>  
           </div>
         </div>
       </div>
@@ -85,8 +103,8 @@
           </el-form-item>
           <el-form-item label="鐜板満鍥剧墖">
             <div class="file_list">
-              <el-upload class="avatar-uploader" :data="uploadData" multiple :limit="6" :auto-upload="true" :action="uploadImgUrl"
-                :show-file-list="false" :on-success="uploadAvatarSuccess" :on-error="uploadError"
+              <el-upload class="avatar-uploader" :data="uploadData" multiple :limit="6" :auto-upload="true"
+                :action="uploadImgUrl" :show-file-list="false" :on-success="uploadAvatarSuccess" :on-error="uploadError"
                 :before-upload="beforeUpload">
                 <div class="upload_wrap">
                   <i class="el-icon-plus avatar-uploader-icon"></i>
@@ -178,9 +196,9 @@
         if (valid) {
           const { param, id, dealFileList, info } = this
           let fn = null
-          if(info.dealStatus == 0 || info.dealStatus == null){
+          if (info.dealStatus == 0 || info.dealStatus == null) {
             fn = param.dealType == 0 ? dispatchOrder : dealOrder
-          }else{
+          } else {
             fn = dealOrder
           }
           fn({
@@ -326,6 +344,46 @@
       width: 100%;
     }
   }
+  .main_content{
+    display: flex;
+    .side{
+      width: 240px;
+      .title{
+        font-size: 14px;
+      }
+      .flow_list{
+        .item{
+          display: flex;
+          .icon{
+            width: 28px;
+            display: flex;
+            flex-direction: column;
+            align-items: center;
+            .dian{
+              width: 12px;
+              height: 12px;
+              border-radius: 50%;
+              background-color: #e89e42;
+            }
+            .line{
+              width: 1px;
+              height: 100%;
+              background-color: #e89e42;
+            }
+          }
+          .content{
+            font-size: 12px;
+            color: #999999;
+            padding-bottom: 12px;
+            .name{
+              font-size: 13px;
+              color: #333333;
+            }
+          }
+        }
+      }
+    }
+  }
 }
 
 .file_list {

--
Gitblit v1.9.3