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/operation/components/deviceEdit.vue | 356 ++++++++++++++++++++++++++++++++++++++++++++++++++--------- 1 files changed, 301 insertions(+), 55 deletions(-) diff --git a/admin/src/views/operation/components/deviceEdit.vue b/admin/src/views/operation/components/deviceEdit.vue index 4c5c8f7..1b125ed 100644 --- a/admin/src/views/operation/components/deviceEdit.vue +++ b/admin/src/views/operation/components/deviceEdit.vue @@ -1,52 +1,170 @@ <template> <GlobalWindow :title="param.id ? '缂栬緫璁惧' : '鏂板缓璁惧'" :confirmWorking="subLoading" :visible.sync="isShowModal" - width="600px" @close="close" @confirm="handleSub"> + width="100%" @close="close" @confirm="handleSub"> <el-form :model="param" ref="paramRef" :rules="rules"> - <el-form-item label="璁惧缂栫爜" prop="code"> - <el-input v-model="param.code" placeholder="璇疯緭鍏�" v-trim /> - </el-form-item> - <el-form-item label="璁惧鍚嶇О" prop="name"> - <el-input v-model="param.name" placeholder="璇疯緭鍏�" v-trim /> - </el-form-item> - <el-form-item label="璁惧鍨嬪彿" prop=""> - <el-input v-model="param.modelNo" placeholder="璇疯緭鍏�" v-trim /> - </el-form-item> - <el-form-item label="璁惧鍒嗙被" prop="cateId"> - <el-cascader v-model="param.cateIds" @change="changeSel" placeholder="璇烽�夋嫨璁惧鍒嗙被" clearable :options="cateList" - :props="{ - label: 'name', - value: 'id', - children: 'childCategoryList' - }"></el-cascader> - </el-form-item> - <el-form-item label="璁惧绠$悊鍛�" prop=""> - <el-select v-model="param.userId" clearable filterable> - <el-option v-for="item in staffList" :label="item.realname" :value="item.id"></el-option> - </el-select> - </el-form-item> - <el-form-item label="鎵�鍦ㄤ綅缃�" prop=""> - <el-input v-model="param.addr" placeholder="璇疯緭鍏�" v-trim /> - - </el-form-item> - <el-form-item label="渚涘簲鍟�" prop=""> - <el-input v-model="param.supplier" placeholder="璇疯緭鍏�" v-trim /> - </el-form-item> - <el-form-item label="杩愮淮鍐呭" prop=""> - <el-input type="textarea" :rows="4" v-model="param.content" placeholder="璇疯緭鍏�" /> - </el-form-item> - <el-form-item label="璁惧鐘舵��" prop=""> - <el-select v-model="param.status" filterable> - <el-option :value="0" label="姝e父"></el-option> - <el-option :value="1" label="鎹熷潖"></el-option> - <el-option :value="2" label="鎶ュ簾"></el-option> - </el-select> - </el-form-item> - <el-form-item label="鐓х墖" prop=""> - <UploadAvatarImage :file="{ 'imgurlfull': param.fileFullUrl, 'imgurl': param.fileUrl }" - :uploadData="{ folder: 'ywDevice/' }" @uploadSuccess="uploadAvatarSuccess" @uploadEnd="isUploading = false" - @uploadBegin="isUploading = true" /> - </el-form-item> + <div style="width: 100%; display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; padding-top: 20px; box-sizing: border-box;"> + <div class="title">鍩虹淇℃伅</div> + <div style="width: 31%;"> + <el-form-item label="璁惧缂栫爜" prop="code"> + <el-input v-model="param.code" placeholder="璇疯緭鍏�" v-trim /> + </el-form-item> + </div> + <div style="width: 31%;"> + <el-form-item label="璁惧鍚嶇О" prop="name"> + <el-input v-model="param.name" placeholder="璇疯緭鍏�" v-trim /> + </el-form-item> + </div> + <div style="width: 31%;"> + <el-form-item label="璁惧鍨嬪彿" prop="modelNo"> + <el-input v-model="param.modelNo" placeholder="璇疯緭鍏�" v-trim /> + </el-form-item> + </div> + <div style="width: 31%;"> + <el-form-item label="璁惧鍒嗙被" prop="cateIds"> + <el-cascader v-model="param.cateIds" @change="changeSel" placeholder="璇烽�夋嫨璁惧鍒嗙被" clearable :options="cateList" + :props="{ + label: 'name', + value: 'id', + children: 'childCategoryList' + }"></el-cascader> + </el-form-item> + </div> + <div style="width: 31%;"> + <el-form-item label="璁惧绠$悊鍛�" prop="userId"> + <el-select v-model="param.userId" clearable filterable> + <el-option v-for="item in staffList" :label="item.realname" :value="item.id"></el-option> + </el-select> + </el-form-item> + </div> + <div style="width: 31%;"> + <el-form-item label="鎵�鍦ㄤ綅缃�" prop="addr"> + <el-input v-model="param.addr" placeholder="璇疯緭鍏�" v-trim /> + </el-form-item> + </div> + <div style="width: 31%;"> + <el-form-item label="鎵�灞為」鐩�" prop="projectId"> + <el-select v-model="param.projectId" @change="changeProject" filterable> + <el-option v-for="item in projectList" :label="item.name" :value="item.id"></el-option> + </el-select> + </el-form-item> + </div> + <div style="width: 31%;"> + <el-form-item label="鍏宠仈鎴挎簮" prop="rooms"> + <el-cascader v-model="param.rooms" :disabled="!param.projectId" ref="cascader" @change="getHouseVal" placeholder="璇烽�夋嫨鍏宠仈鎴挎簮" :options="houseList" + :props="{ + label: 'name', + value: 'id', + children: 'projectDataVOList' + }"></el-cascader> + </el-form-item> + </div> + <div style="width: 31%;"> + <el-form-item label="璐叆鏃堕棿" prop="buyDate"> + <el-date-picker + v-model="param.buyDate" + type="date" + value-format="yyyy-MM-dd" + placeholder="閫夋嫨鏃ユ湡"> + </el-date-picker> + </el-form-item> + </div> + <div style="width: 31%;"> + <el-form-item label="璁惧鐘舵��" prop="status"> + <el-select v-model="param.status" filterable> + <el-option :value="0" label="姝e父"></el-option> + <el-option :value="1" label="鎹熷潖"></el-option> + <el-option :value="2" label="鎶ュ簾"></el-option> + </el-select> + </el-form-item> + </div> + <div style="width: 100%;"> + <el-form-item label="杩愮淮鍐呭" prop="content"> + <el-input type="textarea" :rows="4" v-model="param.content" placeholder="璇疯緭鍏�" /> + </el-form-item> + </div> + <div style="width: 100%;"> + <el-form-item label="鐓х墖" prop=""> + <UploadAvatarImage :file="{ 'imgurlfull': param.fileFullUrl, 'imgurl': param.fileUrl }" + :uploadData="{ folder: 'ywDevice/' }" @uploadSuccess="uploadAvatarSuccess" @uploadEnd="isUploading = false" + @uploadBegin="isUploading = true" /> + <div style="width: 100%; height: 40px;"></div> + </el-form-item> + </div> + <div style="width: 100%;"> + <el-form-item label="闄勪欢" prop="multifileList"> + <div style="display: flex; flex-direction: column; align-items: flex-start;"> + <el-button type="text" @click="$refs.uploadFile.click()">+娣诲姞闄勪欢</el-button> + <el-table + :data="param.multifileList" + border + style="width: 100%"> + <el-table-column + prop="name" + label="闄勪欢鍚嶇О"> + </el-table-column> + <el-table-column + prop="createUserName" + label="鎿嶄綔浜�"> + </el-table-column> + <el-table-column + prop="createTime" + label="鎿嶄綔鏃堕棿"> + </el-table-column> + <el-table-column + label="鎿嶄綔"> + <template slot-scope="scope"> + <el-button type="text" @click="deleFile(scope.$index)">鍒犻櫎</el-button> + </template> + </el-table-column> + </el-table> + </div> + </el-form-item> + </div> + + <div class="title">渚涘簲鍟嗕俊鎭�</div> + <div style="width: 31%;"> + <el-form-item label="渚涘簲鍟�" prop="supplier"> + <el-input v-model="param.supplier" placeholder="璇疯緭鍏�" v-trim /> + </el-form-item> + </div> + <div style="width: 31%;"> + <el-form-item label="鑱旂郴浜�" prop="supplierLinker"> + <el-input v-model="param.supplierLinker" placeholder="璇疯緭鍏�" v-trim /> + </el-form-item> + </div> + <div style="width: 31%;"> + <el-form-item label="鑱旂郴鏂瑰紡" prop="supplierPhone"> + <el-input v-model="param.supplierPhone" placeholder="璇疯緭鍏�" v-trim /> + </el-form-item> + </div> + + <div class="title">缁翠繚淇℃伅</div> + <div style="width: 31%;"> + <el-form-item label="缁翠繚璐熻矗浜�" prop="maintenanceUserId"> + <el-select v-model="param.maintenanceUserId" clearable filterable> + <el-option v-for="item in staffList" :label="item.realname" :value="item.id"></el-option> + </el-select> + </el-form-item> + </div> + <div style="width: 31%;"> + <el-form-item label="缁翠繚鍒版湡鏃�" prop="maintenanceOverDate"> + <el-date-picker + v-model="param.maintenanceOverDate" + type="date" + value-format="yyyy-MM-dd" + placeholder="閫夋嫨鏃ユ湡"> + </el-date-picker> + </el-form-item> + </div> + <div style="width: 31%;"></div> + <div style="width: 100%;"> + <el-form-item label="缁翠繚璇存槑" prop="maintenanceContent"> + <el-input v-model="param.maintenanceContent" type="textarea" placeholder="璇疯緭鍏�" v-trim /> + </el-form-item> + </div> + </div> </el-form> + <input type="file" ref="uploadFile" style="position: fixed; top: -20px; left: 0;" @change="getFile" /> </GlobalWindow> </template> @@ -56,7 +174,10 @@ import { fetchList } from '@/api/business/category' import { create, updateById, detailById } from '@/api/Inspection/device' import { getUserList } from '@/api/system/user' -import { Message } from 'element-ui' +import { uploadBatch } from '@/api/system/common' +import { getProjectList, tree } from '@/api/project/ywProject' +import { Loading, Message } from 'element-ui' +import { mapState } from 'vuex' export default { components: { GlobalWindow, UploadAvatarImage }, data() { @@ -64,22 +185,126 @@ isShowModal: false, subLoading: false, param: { - status: 0 + code: '', + name: '', + modelNo: '', + cateIds: '', + userId: '', + addr: '', + projectId: '', + rooms: [], + buildingId: '', + floorId: '', + roomId: '', + + supplier: [], + buyDate: '', + content: '', + supplierLinker: '', + supplierPhone: '', + maintenanceUserId: '', + maintenanceOverDate: '', + maintenanceContent: '', + status: 0, + multifileList: [] }, - cateList: [], rules: { - name: [{ required: true, message: '璇疯緭鍏�' }], - code: [{ required: true, message: '璇疯緭鍏�' }], - cateId: [{ required: true, message: '璇烽�夋嫨' }], + name: [{ required: true, message: '璇疯緭鍏�', trigger: 'blur' }], + code: [{ required: true, message: '璇疯緭鍏�', trigger: 'blur' }], + cateId: [{ required: true, message: '璇烽�夋嫨', trigger: 'blur' }], + projectId: [{ required: true, message: '璇烽�夋嫨', trigger: 'blur' }], + rooms: [{ required: true, message: '璇烽�夋嫨', trigger: 'blur' }] }, - staffList: [] - + loadings: false, + cateList: [], + houseList: [], + staffList: [], + projectList: [] } + }, + computed: { + ...mapState(['userInfo']) }, created() { this.initData() + this.getProjectLists() + console.log(this.userInfo) }, methods: { + getHouseVal(e) { + this.param.buildingId = e[1] + this.param.floorId = e[2] + this.param.roomId = e[3] + }, + changeProject(e) { + this.getHouseTree() + }, + getHouseTree() { + tree({ + projectId: this.param.projectId + }).then(res => { + this.addParamToArray(res) + this.houseList = res + }) + }, + addParamToArray(arr) { + for (let i = 0; i < arr.length; i++) { + const currentItem = arr[i].projectDataVOList + if (currentItem && currentItem.length >= 0) { + currentItem.forEach(item => { + if (item.lv === 3) { + delete item.projectDataVOList + } + }) + } + if (currentItem && currentItem.length > 0) { + this.addParamToArray(currentItem) + } + } + }, + deleFile(index) { + this.param.multifileList.splice(index, 1) + }, + // 鑾峰彇椤圭洰 + getProjectLists() { + getProjectList({}) + .then(res => { + this.projectList = res + }) + }, + // 涓婁紶闄勪欢 + getFile(e) { + this.loadings = Loading.service({ + lock: true, + text: 'Loading', + spinner: 'el-icon-loading', + background: 'rgba(0, 0, 0, 0.7)' + }) + let formDate = new FormData() + formDate.append('folder', 'YW_DEVICE') + formDate.append('file', e.target.files[0]) + uploadBatch(formDate) + .then(res => { + this.param.multifileList.push({ ...res[0], fileurl: res[0].imgaddr, name: res[0].originname, createUserName: this.userInfo.realname, createTime: this.getDate() }) + }) + .finally(() => { + e.target.files = null + this.loadings.close() + }) + }, + getDate() { + const currentDate = new Date(); + + const year = currentDate.getFullYear(); // 鑾峰彇褰撳墠骞翠唤 + const month = currentDate.getMonth() + 1; // 鑾峰彇褰撳墠鏈堜唤 (0-11锛屾墍浠ラ渶瑕� +1) + const day = currentDate.getDate(); // 鑾峰彇褰撳墠鏃ユ湡 + const hours = currentDate.getHours(); // 鑾峰彇褰撳墠灏忔椂 + const minutes = currentDate.getMinutes(); // 鑾峰彇褰撳墠鍒嗛挓 + const seconds = currentDate.getSeconds(); // 鑾峰彇褰撳墠绉掗挓 + + return `${year}-${month < 10 ? '0' + month : month}-${day < 10 ? '0' + day : day} ` + + `${hours < 10 ? '0' + hours : hours}:${minutes < 10 ? '0' + minutes : minutes}:${seconds < 10 ? '0' + seconds : seconds}`; + }, handleSub() { const { param, subLoading } = this this.$refs['paramRef'].validate((valid) => { @@ -100,6 +325,15 @@ getDetail(id) { detailById(id).then(res => { this.param = res + this.param.rooms = [res.projectId, res.buildingId, res.floorId, res.roomId] + this.param.multifileList = res.multifileList.map(item => { + return { + ...item, + createUserName: item.userName, + createTime: item.createDate + } + }) + this.getHouseTree() const cateId = this.param.cateId || '' setTimeout(() => { if (cateId) { @@ -108,7 +342,6 @@ item.childCategoryList.forEach(item2 => { if (item2.id == cateId) { this.$set(this.param, 'cateIds', [item.id, item2.id]) - console.log('cateId', this.form) } }) } @@ -149,4 +382,17 @@ } } } -</script> \ No newline at end of file +</script> + +<style lang="scss" scoped> + @import '@/assets/style/variables.scss'; + .title { + width: 100%; + font-weight: 500; + font-size: 18px; + color: $primary-color; + margin-bottom: 10px; + display: flex; + align-items: center; + } +</style> -- Gitblit v1.9.3