From a2299a6d4a6f99e9c11132138f5d3e9ec68f03ea Mon Sep 17 00:00:00 2001 From: jiangping <jp@doumee.com> Date: 星期五, 06 六月 2025 19:19:34 +0800 Subject: [PATCH] 开发更新 --- admin/src/views/workorder/components/detail.vue | 187 ++++++++++++++++++++++++++++++++++------------ 1 files changed, 137 insertions(+), 50 deletions(-) diff --git a/admin/src/views/workorder/components/detail.vue b/admin/src/views/workorder/components/detail.vue index d5337ea..039bad0 100644 --- a/admin/src/views/workorder/components/detail.vue +++ b/admin/src/views/workorder/components/detail.vue @@ -1,14 +1,17 @@ <template> - <GlobalWindow width="920px" title="宸ュ崟璇︽儏" :visible.sync="visible" :confirm-working="isWorking" @close="close" - @confirm="confirm"> + <GlobalWindow width="100%" title="宸ュ崟璇︽儏" :withFooter="withFooter" :visible.sync="visible" :confirm-working="isWorking" + @confirm="confirm" @close="closeView"> <div class="main"> <div class="title"> - <span>宸ュ崟璇︽儏</span> - <div> - <div class="status primaryColor" v-if="info.dealStatus == 0 || info.dealStatus == null">寰呮寚娲�</div> - <div class="status" v-if="info.dealStatus == 1">宸叉寚娲�</div> - <div class="status gray" v-if="info.dealStatus == 2">宸插鐞�</div> + <div class="title_left"> + <span>宸ュ崟璇︽儏</span> + <div> + <div class="status primaryColor" v-if="info.dealStatus == 0 || info.dealStatus == null">寰呮寚娲�</div> + <div class="status green" v-if="info.dealStatus == 1">宸叉寚娲�</div> + <div class="status gray" v-if="info.dealStatus == 2">宸插鐞�</div> + </div> </div> + <el-button v-if="info.origin === 1 && isShow" @click="openWT">鏌ョ湅闂涓婃姤</el-button> </div> <div class="main_content"> <div class="list"> @@ -23,6 +26,11 @@ <div class="item"> <div class="la">宸ュ崟鍒嗙被</div> <div class="val">{{ info.categoryName }}</div> + </div> + <div class="item"> + <div class="la">鏉ユ簮</div> + <div class="val" v-if="info.origin === 0">鑷缓</div> + <div class="val" v-if="info.origin === 1">闂杞伐鍗�</div> </div> <div class="item"> <div class="la">涓婃姤浜�</div> @@ -49,11 +57,21 @@ <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" + <!-- <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-if="item.type == 0" style="width:80px; height: 80px" :src="item.fileurlFull" :preview-src-list="[item.fileurlFull]"> </el-image> + </div> + </div> + </div> + <div v-if="info.fileList && info.fileList.length > 0 && info.fileList.filter(i => i.type == 1).length > 0" + class="item max"> + <div class="la">闂瑙嗛</div> + <div class="value"> + <div v-for="item in info.fileList" :key="item.id" style="display: inline;margin-right: 20px"> + <video v-if="item.type == 1" ref="videoRef" controls preload="auto" + style="width: 240px;height: 160px;object-fit: contain;" :src="item.fileurlFull" /> </div> </div> </div> @@ -61,7 +79,7 @@ <div class="side"> <div class="title">宸ュ崟娴佽浆璁板綍</div> <div class="flow_list"> - <div class="item" v-for="item,i in info.logList"> + <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> @@ -76,7 +94,9 @@ </div> </div> </div> - <div class="title">{{ info.dealStatus == 0 || info.dealStatus == 1 ? '宸ュ崟澶勭悊' : '澶勭悊缁撴灉' }}</div> + <div class="title" + v-if="info.dealStatus == 2 || info.dealStatus == 0 || (info.dealStatus == 1 && info.dealUserId === userInfo.id)"> + {{ info.dealStatus == 0 || info.dealStatus == 1 ? '宸ュ崟澶勭悊' : '澶勭悊缁撴灉' }}</div> <el-form :model="param" ref="form" :rules="rules"> <template v-if="info.dealStatus == 0 || info.dealStatus == null"> <el-form-item label="澶勭悊鏂瑰紡" prop="dealType"> @@ -84,7 +104,7 @@ <el-radio v-model="param.dealType" :label="0">鎸囨淳</el-radio> <el-radio v-model="param.dealType" :label="1">鐩存帴鍥炲</el-radio> </div> - </el-form-item> + </el-form-item> <el-form-item v-if="param.dealType == 0" label="鎸囨淳缁�" prop="dealUserId"> <el-select v-model="param.dealUserId" clearable filterable class="w400"> <el-option v-for="item in staffList" :label="item.realname" :value="item.id"></el-option> @@ -104,8 +124,8 @@ </el-form-item> <el-form-item label="鐜板満鍥剧墖"> <div class="file_list"> - <el-upload class="avatar-uploader" :data="uploadData" :auto-upload="true" - :action="uploadImgUrl" :show-file-list="false" :on-success="uploadAvatarSuccess" :on-error="uploadError" + <el-upload class="avatar-uploader" :data="uploadData" :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> @@ -151,6 +171,8 @@ </div> </template> </el-form> + <!-- 闂涓婃姤璇︽儏 --> + <ProblemReportingDetails ref="problem_Reporting_Details" @close="closeDetails" /> </div> </GlobalWindow> </template> @@ -158,18 +180,24 @@ <script> import GlobalWindow from '@/components/common/GlobalWindow' import BaseOpera from '@/components/base/BaseOpera' +// import ProblemReportingDetails from './problemReportingDetails' +// import ProblemReportingDetails from '@/views/workorder/components/problemReportingDetails' import { detailById, dispatchOrder, dealOrder } from '@/api/workorder/ywWorkorder' +import { getByWorkorderId } from '@/api/ywProblem' import { getUserList } from '@/api/system/user' import { Message, Loading } from 'element-ui' +import { mapState } from 'vuex' +import dayjs from 'dayjs' export default { + name: 'detail', components: { - GlobalWindow + GlobalWindow, + ProblemReportingDetails: () => import('./problemReportingDetails') }, extends: BaseOpera, data() { return { id: '', - visible: false, param: { dealType: 0 }, @@ -185,17 +213,49 @@ uploadData: { folder: 'YW_WORKORDER_FILE' }, + isShow: true, + test: false } }, computed: { userInfo() { return this.$store.state.userInfo + }, + withFooter() { + if (this.info) { + return this.info.dealStatus === 0 || (this.info.dealStatus === 1 && (this.userInfo.id === this.info.dealUserId)); + } else { + return false; + } } }, created() { this.getStaff() }, methods: { + closeDetails() { + console.log('1') + this.test = false + }, + closeView() { + this.$emit('close') + this.visible = false + }, + open (title, target, show) { + this.title = title + this.isShow = show + this.id = target.workorderId + this.getDetail() + }, + openWT() { + getByWorkorderId(this.id) + .then(res => { + this.test = true + this.$nextTick(() => { + this.$refs.problem_Reporting_Details.open('闂涓婃姤璇︽儏', res, false) + }) + }) + }, confirm() { this.$refs['form'].validate((valid) => { if (valid) { @@ -222,6 +282,10 @@ const { id } = this detailById(id).then(res => { this.info = res + if (this.info.dealStatus == 1) { + this.$set(this.param, 'getDate', dayjs().format('YYYY-MM-DD HH:mm:ss')) + } + this.visible = true }) }, getStaff() { @@ -292,32 +356,41 @@ padding-top: 20px; .title { - font-weight: 500; - font-size: 18px; - color: $primary-color; + margin-bottom: 10px; display: flex; align-items: center; - - .status { - padding: 0 6px; - height: 22px; - line-height: 22px; - border-radius: 2px; - border: 1px solid #00BA92; - color: #00BA92; - font-weight: 400; - font-size: 12px; - margin-left: 10px; - } - - .primaryColor { - border: 1px solid $primary-color; - } - - .gray { - color: gray; - border: 1px solid gray; + justify-content: space-between; + .title_left { + display: flex; + align-items: center; + font-weight: 500; + font-size: 18px; + color: $primary-color; + .status { + padding: 0 12px; + height: 24px; + line-height: 24px; + border-radius: 2px; + border: 1px solid #00BA92; + color: #00BA92; + font-weight: 400; + font-size: 12px; + margin-left: 10px; + } + .primaryColor { + border: 1px solid rgba(63, 126, 239, .2); + background-color: rgba(63, 126, 239, .2); + } + .green { + background-color: rgba(83, 183, 148, .2); + border: 1px solid rgba(83, 183, 148, .2); + } + .gray { + color: #333333; + background-color: rgba(128, 128, 128, .2); + border: 1px solid rgba(128, 128, 128, .2); + } } } @@ -343,44 +416,58 @@ width: 100%; display: flex; align-items: center; + + .la { + margin-bottom: 0; + width: 72px; + } } .max { width: 100%; } } - .main_content{ + + .main_content { display: flex; - .side{ + + .side { width: 370px; - .title{ + + .title { font-size: 14px; } - .flow_list{ - .item{ + + .flow_list { + .item { display: flex; - .icon{ + + .icon { width: 28px; display: flex; flex-direction: column; align-items: center; - .dian{ + + .dian { width: 12px; height: 12px; border-radius: 50%; background-color: #e89e42; } - .line{ + + .line { width: 1px; height: 100%; background-color: #e89e42; } } - .content{ + + .content { font-size: 12px; color: #999999; padding-bottom: 12px; - .name{ + + .name { font-size: 13px; color: #333333; } -- Gitblit v1.9.3