From 2288061f2d0afd7bd29660a5b724d8c69cb844a9 Mon Sep 17 00:00:00 2001
From: MrShi <1878285526@qq.com>
Date: 星期二, 04 三月 2025 09:11:51 +0800
Subject: [PATCH] 改bug
---
admin/src/views/operation/components/deviceEdit.vue | 416 ++++++++++++++++++++++++++++++++++++++++++++++++----------
1 files changed, 340 insertions(+), 76 deletions(-)
diff --git a/admin/src/views/operation/components/deviceEdit.vue b/admin/src/views/operation/components/deviceEdit.vue
index 185fbdc..f727966 100644
--- a/admin/src/views/operation/components/deviceEdit.vue
+++ b/admin/src/views/operation/components/deviceEdit.vue
@@ -1,57 +1,170 @@
<template>
- <GlobalWindow :title="param.id ? '缂栬緫璁惧' : '鏂板缓璁惧'" :confirmWorking="subLoading" :visible.sync="isShowModal" width="600px" @close="close"
- @confirm="handleSub">
+ <GlobalWindow :title="param.id ? '缂栬緫璁惧' : '鏂板缓璁惧'" :confirmWorking="subLoading" :visible.sync="isShowModal"
+ 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="">
- <el-cascader v-model="param.areaIds" @change="changeSel" placeholder="璇烽�夋嫨宸℃鍖哄煙" clearable :options="cateList"
- :props="{
- label: 'name',
- value: 'id',
- children: 'childCategoryList',
- checkStrictly: true
- }"></el-cascader>
- </el-form-item>
- <el-form-item label="璁惧绠$悊鍛�" prop="">
- <el-select v-model="param.realName" filterable clearable>
- <el-option value="0" label="xxx"></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.company" 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 clearable>
- <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.imgurlfull, 'imgurl': param.imgurl }"
- :uploadData="{ folder: 'projects' }" @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>
@@ -59,27 +172,138 @@
import GlobalWindow from '@/components/common/GlobalWindow'
import UploadAvatarImage from '@/components/common/UploadAvatarImage'
import { fetchList } from '@/api/business/category'
-import { create, updateById } from '@/api/Inspection/device'
-import { Message } from 'element-ui'
+import { create, updateById, detailById } from '@/api/Inspection/device'
+import { getUserList } from '@/api/system/user'
+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() {
return {
isShowModal: false,
subLoading: false,
- param: {},
- cateList: [],
- rules: {
- name: [{ required: true, message: '璇疯緭鍏�' }],
- code: [{ required: true, message: '璇疯緭鍏�' }]
+ param: {
+ code: '',
+ name: '',
+ modelNo: '',
+ cateIds: '',
+ userId: '',
+ addr: '',
+ projectId: '',
+ rooms: [],
+ buildingId: '',
+ floorId: '',
+ roomId: '',
+
+ supplier: '',
+ buyDate: '',
+ content: '',
+ supplierLinker: '',
+ supplierPhone: '',
+ maintenanceUserId: '',
+ maintenanceOverDate: '',
+ maintenanceContent: '',
+ status: 0,
+ multifileList: []
},
-
+ rules: {
+ 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' }]
+ },
+ loadings: false,
+ cateList: [],
+ houseList: [],
+ staffList: [],
+ projectList: []
}
+ },
+ computed: {
+ ...mapState(['userInfo'])
},
created() {
this.initData()
+ this.getProjectLists()
},
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) => {
@@ -87,16 +311,51 @@
let fn = param.id ? updateById : create
this.subLoading = true
fn(param).then(res => {
- if (res.code == 200) {
- this.subLoading = false
- this.$emit('success')
- Message.success('淇濆瓨鎴愬姛')
- this.close()
- }
+ this.subLoading = false
+ this.$emit('success')
+ Message.success('淇濆瓨鎴愬姛')
+ this.close()
}).catch(() => {
this.subLoading = false
})
}
+ })
+ },
+ getDetail(id) {
+ detailById(id).then(res => {
+ this.param = res
+ this.param.rooms = [res.projectId, res.buildingId, res.floorId, res.roomId]
+ console.log(this.param.rooms)
+ if (res.multifileList && res.multifileList.length > 0) {
+ this.param.multifileList = res.multifileList.map(item => {
+ return {
+ ...item,
+ createUserName: item.userName,
+ createTime: item.createDate
+ }
+ })
+ }
+ this.changeProject()
+ this.getHouseTree()
+ const cateId = this.param.cateId || ''
+ setTimeout(() => {
+ if (cateId) {
+ this.cateList.forEach(item => {
+ if (item.childCategoryList) {
+ item.childCategoryList.forEach(item2 => {
+ if (item2.id == cateId) {
+ this.$set(this.param, 'cateIds', [item.id, item2.id])
+ }
+ })
+ }
+ })
+ }
+ },1000)
+ })
+ },
+ getStaff() {
+ getUserList({}).then(res => {
+ this.staffList = res
})
},
initData() {
@@ -107,24 +366,18 @@
}).then(res => {
this.cateList = res.records || []
})
-
+ this.getStaff()
},
changeSel(e) {
- if (e && e.length == 1) {
- this.$set(this.param, 'catePId', e[0])
- this.$set(this.param, 'cateId', '')
- } else if (e && e.length == 2) {
- this.$set(this.param, 'catePId', e[0])
+ if (e && e.length == 2) {
this.$set(this.param, 'cateId', e[1])
} else {
- this.$set(this.param, 'catePId', '')
this.$set(this.param, 'cateId', '')
}
- this.search()
},
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
@@ -134,4 +387,15 @@
}
</script>
-<style lang="scss" scoped></style>
\ No newline at end of file
+<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