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