From d492850f1cc64ddcfaf43798af9c76c2505414fd Mon Sep 17 00:00:00 2001
From: renkang <8417338+k94314517@user.noreply.gitee.com>
Date: 星期五, 24 一月 2025 18:24:31 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/2.0.1' into 2.0.1

---
 admin/src/views/workorder/components/handleProblem.vue |  338 +++++++++++++++++++++++++++++++++++++++++++-------------
 1 files changed, 259 insertions(+), 79 deletions(-)

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>

--
Gitblit v1.9.3