From 69a1b3bf45738f048361ee4ccb6bdc64fce35720 Mon Sep 17 00:00:00 2001
From: MrShi <1878285526@qq.com>
Date: 星期三, 12 三月 2025 11:31:46 +0800
Subject: [PATCH] 更新
---
admin/src/components/business/OperaCarUseBookWindow.vue | 584 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 584 insertions(+), 0 deletions(-)
diff --git a/admin/src/components/business/OperaCarUseBookWindow.vue b/admin/src/components/business/OperaCarUseBookWindow.vue
new file mode 100644
index 0000000..fe82ece
--- /dev/null
+++ b/admin/src/components/business/OperaCarUseBookWindow.vue
@@ -0,0 +1,584 @@
+<template>
+ <GlobalWindow :title="title" :visible.sync="visible" @confirm="confirm">
+ <div class="modal_wrap">
+ <div class="modal_content">
+ <div class="header">
+ <div class="left">
+ <div class="h1">鍏姟杞︾敵璇�</div>
+ <div class="time">鎻愪氦鏃堕棿锛歿{ model.createDate }}</div>
+ </div>
+ <span class="right" v-if="model.status === 0">鐢宠涓�</span>
+ <span class="right" v-if="model.status === 1">瀹℃壒涓�</span>
+ <span class="right" style="background:#53b76f " v-if="model.status === 2">瀹℃壒閫氳繃</span>
+ <span class="right" style="background:#dc362e " v-if="model.status === 3">瀹℃壒涓嶉�氳繃</span>
+ <span class="right" style="background:#B2B2B2; " v-if="model.status === 4">宸叉挙閿�</span>
+ </div>
+ <div class="info">
+ <div class="title">鍏姟杞︾敵璇蜂俊鎭�</div>
+ <div class="list">
+ <div class="item" style="width: 100%">
+ <div class="label">鐢宠浜�</div>
+ <div class="value">{{ model.memberName || '' }} {{ model.memberPhone || '' }} ({{ model.companyName || ''
+ }})
+ </div>
+ </div>
+ <div class="item">
+ <div class="label">鐢宠杞﹁締</div>
+ <div class="value">{{ model.carCode || '' }}</div>
+ </div>
+ <div class="item">
+ <div class="label">鍙告満淇℃伅</div>
+ <div class="value" v-if="model.driverId != null">{{ model.driverName || '' }} {{ model.driverPhone || ''
+ }}
+ </div>
+ <div class="value" v-if="model.driverId == null">鏈寚娲�</div>
+ </div>
+ <div class="item">
+ <div class="label">鐢ㄨ溅浜嬬敱</div>
+ <div class="value">{{ model.content }}</div>
+ </div>
+ <div class="item">
+ <div class="label">涔樿溅浜哄憳</div>
+ <div class="value">{{ model.memberNames || '' }}</div>
+ </div>
+ <div class="item">
+ <div class="label">鐩殑鍦扮被鍒�</div>
+ <div class="value status-green" v-if="model.type == 0">銆愬競鍐呯敤杞︺��</div>
+ <div class="value status-red" v-if="model.type == 1">銆愬競澶栫敤杞︺��</div>
+ </div>
+ <div class="item">
+ <div class="label">鐩殑鍦�</div>
+ <div class="value">{{ model.addr || '' }}</div>
+ </div>
+ <div class="item">
+ <div class="label">棰勮鍑哄彂鏃堕棿</div>
+ <div class="value" v-if="model.planUseDate">{{ model.planUseDate.slice(0,16) }}</div>
+ </div>
+ <div class="item">
+ <div class="label">鐢ㄨ溅鏃舵</div>
+ <div class="value">濮�:<span v-if="model.startTime">{{ model.startTime.slice(0,16) }}</span><br>姝�:<span v-if="model.endTime">{{ model.endTime.slice(0,16) }}</span></div>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="side">
+ <div class="side_title">瀹℃壒娴佺▼</div>
+ <div class="list" v-if="
+ model.approveDateVO != null && model.approveDateVO.approveList != null
+ ">
+ <div class="item" v-for="(item, index) in model.approveDateVO.approveList" :key="item.id">
+ <div class="separate" v-if="index < model.approveDateVO.approveList.length - 1"></div>
+ <div class="info">
+ <img src="@/assets/icons/ic_tongguo.png" class="iconnew" v-if="item.status == 2" />
+ <img src="@/assets/icons/ic_dangqian.png" class="iconnew" v-if="item.status == 1" />
+ <img src="@/assets/icons/ic_jujue.png" class="iconnew" v-if="item.status == 3" />
+ <img src="@/assets/icons/ic_grey.png" class="iconnew" v-if="item.status == null || item.status == 0" />
+ <div style="display: inline" v-if="item.approveType != 1">
+ <img v-if="item.faceImg != null && item.faceImg != ''" :src="item.faceImg" class="avatar" alt="" />
+ <img v-if="item.faceImg == null || item.faceImg == ''" src="@/assets/avatar/man.png" class="avatar"
+ alt="" />
+ </div>
+ <div style="display: inline" v-if="item.approveType == 1">
+ <img v-if="item.type != 1" src="@/assets/icons/ic_duoren.png" class="avatar" alt="" />
+ <img v-if="item.type == 1" src="@/assets/icons/ic_chaosong.png" class="avatar" alt="" />
+ </div>
+ <div class="content">
+ <div class="line">
+ <div class="name">{{ item.title }}</div>
+ <div class="time">{{ item.checkDate }}</div>
+ </div>
+ <div class="line">
+ <div class="company">
+ {{ item.memberName }}
+ <div style="display: inline" v-if="item.statusInfo != null && item.statusInfo != ''">
+ 锛�<span :class="{ padding: item.statusInfo == '澶勭悊涓�' || item.status == '1' }">{{
+ item.statusInfo || ""
+ }}</span>锛�
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div v-if="
+ item.approveType != 1 &&
+ item.checkInfo != null &&
+ item.checkInfo != ''
+ " class="remark">
+ {{ item.checkInfo || "" }}
+ </div>
+ <div v-if="item.approveType == 0 || item.type == 1 || item.approveType == 1" class="childList">
+ <div class="m_content company" v-for="item1 in item.approveList" :key="item1.id">
+ <img v-if="item1.faceImg != null && item1.faceImg != ''" :src="item1.faceImg" class="avatar" alt="" />
+ <img v-if="item1.faceImg == null || item1.faceImg == ''" src="@/assets/avatar/man.png" class="avatar"
+ alt="" />
+ <span> {{ item1.memberName }}</span>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ <!-- -->
+ <template v-slot:footer>
+ <el-button @click="agreeOpen" type="primary"
+ v-if="model.approveDateVO != null && model.approveDateVO.canBeApproved != null && model.approveDateVO.canBeApproved == 1"
+ class="status-red">鍚屾剰</el-button>
+ <el-button @click="jectOpen" type="danger"
+ v-if="model.approveDateVO != null && model.approveDateVO.canBeApproved != null && model.approveDateVO.canBeApproved == 1">鎷掔粷</el-button>
+ <el-button @click="visible = false">杩斿洖</el-button>
+ </template>
+ <el-dialog append-to-body title="鍚屾剰鐢宠" style="text-align: center" class="dialogCl" :visible.sync="isShowProblem"
+ width="480px">
+ <el-form :model="dealForm" :rules="rules" ref="dealForm">
+ <!-- <el-form-item label="娲捐溅鍙告満" prop="driverId" required v-if="model.approveDateVO!=null && model.approveDateVO.driverParam === 1"> -->
+ <el-form-item label="娲捐溅鍙告満" prop="driverId"
+ v-if="model.approveDateVO != null && model.approveDateVO.driverParam == 1">
+ <el-select v-model="dealForm.driverId" style="width: 300px" filterable clearable placeholder="璇烽�夋嫨娲鹃仯鍙告満">
+ <el-option v-for="item in memberList" :key="item.id" :label="item.name + '-' + item.phone" :value="item.id">
+ </el-option>
+ </el-select>
+ </el-form-item>
+ <el-form-item label="鍚屾剰璇存槑">
+ <el-input type="textarea" placeholder="璇峰~鍐欒鏄�" :rows="4" v-model="dealForm.checkInfo" />
+ </el-form-item>
+ </el-form>
+ <span slot="footer" class="dialog-footer">
+ <el-button @click="isShowProblem = false">鍙栨秷</el-button>
+ <el-button type="primary" :loading="dealing" @click="dealDo">纭畾</el-button>
+ </span>
+ </el-dialog>
+ <el-dialog append-to-body title="鎷掔粷鐢宠" style="text-align: center" class="dialogCl" :visible.sync="isBackProblem"
+ width="600px">
+ <el-form :model="backForm" ref="backForm" label-width="100px">
+ <el-form-item label="鎷掔粷璇存槑">
+ <el-input type="textarea" placeholder="璇峰~鍐欒鏄�" :rows="4" v-model="backForm.checkInfo" />
+ </el-form-item>
+ </el-form>
+ <span slot="footer" class="dialog-footer">
+ <el-button @click="isBackProblem = false">鍙栨秷</el-button>
+ <el-button type="primary" :loading="dealing" @click="backDo">纭畾</el-button>
+ </span>
+ </el-dialog>
+ </GlobalWindow>
+</template>
+
+<script>
+import BaseOpera from '@/components/base/BaseOpera'
+import GlobalWindow from '@/components/common/GlobalWindow'
+import { driveList } from '@/api/business/member'
+import { approveDo } from '@/api/business/approve'
+import { mapState } from 'vuex'
+
+export default {
+ name: 'OperaCarUseBookWindow',
+ components: { GlobalWindow },
+ extends: BaseOpera,
+ data() {
+ return {
+ title: '鍏姟杞︾敵璇�',
+ visible: false,
+ dataId: null,
+ model: {},
+ dealing: false,
+ isShowProblem: false,
+ isBackProblem: false,
+ memberList: [],
+ dealForm: {
+ driveId: null,
+ checkInfo: null
+ },
+ backForm: {
+ checkInfo: null
+ },
+ rules: {
+ driverId: [{ required: true, message: '璇烽�夋嫨娲鹃仯鍙告満', trigger: 'blur' }]
+ }
+ }
+ },
+ computed: {
+ ...mapState(['userInfo'])
+ },
+ created() {
+ this.config({
+ api: '/business/carUseBook',
+ 'field.id': 'id'
+ })
+ },
+ methods: {
+ dealDo() {
+ this.$refs.dealForm.validate((valid) => {
+ if (!valid) {
+ return
+ }
+ this.$dialog.actionConfirm('鎿嶄綔纭', '鎮ㄧ‘璁ゅ悓鎰忚鐢宠鍚楋紵')
+ .then(() => {
+ this.dealing = true
+ approveDo({
+ objId: this.dataId,
+ objType: this.model.type == 1 ? 4 : 3,
+ status: 2,
+ driverId: this.dealForm.driverId,
+ checkInfo: this.dealForm.checkInfo
+ })
+ .then(res => {
+ this.$tip.apiSuccess('澶勭悊鎴愬姛')
+ this.getDetail()
+ this.isShowProblem = false
+ })
+ .finally(() => {
+ this.dealing = false
+ })
+ })
+ })
+ },
+ agreeOpen() {
+ this.isShowProblem = true
+ this.$set(this.dealForm, 'driverId', this.model.driverId)
+
+ this.$set(this.dealForm, 'checkInfo', '')
+ this.loadMemberList()
+ },
+ jectOpen() {
+ this.isBackProblem = true
+ this.backForm = {
+ checkInfo: null
+ }
+ },
+ backDo() {
+ this.$refs.backForm.validate((valid) => {
+ if (!valid) {
+ return
+ }
+ approveDo({
+ objId: this.dataId,
+ objType: this.model.type == 1 ? 4 : 3,
+ status: 3,
+ checkInfo: this.backForm.checkInfo
+ }).then(res => {
+ this.$tip.apiSuccess('閫�鍥炴垚鍔�')
+ this.getDetail()
+ this.isBackProblem = false
+ })
+ .catch(e => {
+ })
+ .finally(() => {
+ this.dealing = false
+ })
+ })
+ },
+ open(title, target) {
+ this.title = title
+ this.visible = true
+ this.model = {}
+ this.dataId = target.id
+ this.$nextTick(() => {
+ this.memberList = []
+ this.dealForm = {
+ driveId: null,
+ checkInfo: null
+ }
+ this.backForm = {
+ checkInfo: null
+ }
+ this.getDetail()
+ })
+ },
+ getDetail() {
+ this.api.detail(this.dataId)
+ .then(res => {
+ this.model = res
+ if (this.model.approveDateVO && this.model.approveDateVO.approveList.length > 0) {
+ this.model.approveDateVO.approveList.forEach(item => {
+ if (item.approveList && item.approveList.length == 1 && item.type !== 1) {
+ item.title = item.approveList[0].title
+ item.faceImg = item.approveList[0].faceImg
+ item.memberName = item.approveList[0].memberName
+ item.statusInfo = item.approveList[0].statusInfo
+ item.status = item.approveList[0].status
+ item.approveList = []
+ }
+ })
+ }
+ this.dealForm.driveId = res.driveId
+ })
+ },
+ loadMemberList() {
+ driveList({}).then(res => {
+ this.memberList = res
+ })
+ }
+ }
+}
+</script>
+
+<style lang="scss" scoped>
+@import "@/assets/style/variables.scss";
+
+.upload_box {
+ width: 84px;
+ height: 84px;
+ border-radius: 4px;
+ background-color: #f7f7f7;
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ align-items: center;
+ color: #999999;
+ border: 1px solid #e4e4e4;
+
+ .icon {
+ font-size: 24px;
+ }
+
+ .text {
+ font-size: 12px;
+ }
+}
+
+.side_title {
+ font-weight: 600;
+ font-size: 18px;
+ color: #111111;
+ margin-bottom: 20px;
+ margin-left: 20px;
+ margin-top: 20px;
+}
+
+.modal_wrap {
+ display: flex;
+ height: 100%;
+
+ .modal_content {
+ flex: 1;
+ padding: 0px 30px;
+ border-radius: 8px;
+ overflow: hidden;
+ height: 100%;
+
+ .title {
+ font-weight: 600;
+ font-size: 18px;
+ color: #333333;
+ margin-bottom: 20px;
+ margin-top: 30px;
+ }
+
+ .info {
+ .list {
+ display: flex;
+ flex-wrap: wrap;
+
+ .item {
+ display: flex;
+ width: 40%;
+ margin-bottom: 20px;
+
+ &:nth-of-type(2n) {
+ width: 60%;
+ }
+
+ .label {
+ color: #888888;
+ width: 100px;
+ }
+
+ .value {
+ flex: 1;
+ color: #111111;
+ }
+ }
+ }
+ }
+
+ .header {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ padding: 20px 30px;
+ margin: 0 -30px;
+ border-radius: 8px 8px 0 0;
+ background: linear-gradient(to right, #f2f6fe, #cadffa);
+
+ .h1 {
+ font-weight: 600;
+ font-size: 22px;
+ color: #111111;
+ margin-bottom: 8px;
+ }
+
+ .time {
+ font-size: 14px;
+ color: #999999;
+ }
+
+ .right {
+ height: 40px;
+ font-size: 16px;
+ color: #ffffff;
+ line-height: 40px;
+ padding: 0 20px;
+ background: #207ff7;
+ box-shadow: 4px 4px 0px 0px rgba(32, 127, 247, 0.16);
+ border-radius: 16px 0px 16px 0px;
+ }
+ }
+
+ .table_info {
+ .name_wrap {
+ display: flex;
+ align-items: center;
+
+ .avatar {
+ width: 40px;
+ height: 40px;
+ border-radius: 50%;
+ margin-right: 12px;
+ }
+
+ .content {
+ .line {
+ display: flex;
+ }
+
+ .tag {
+ color: #b2cbf9;
+ border: 1px solid #b2cbf9;
+ padding: 0px 4px;
+ border-radius: 4px;
+ margin-left: 6px;
+ }
+ }
+ }
+ }
+ }
+
+ .side {
+ height: 100%;
+ width: 420px;
+ background: #ffffff;
+ border-left: 20px solid #f7f7f7;
+
+ .list {
+ .item {
+ padding: 8px 0;
+ position: relative;
+
+ .separate {
+ position: absolute;
+ border-left: 2px dashed #cccccc;
+ left: 31px;
+ height: calc(100% - 30px);
+ top: 49px;
+ }
+
+ .avatar {
+ width: 40px;
+ height: 40px;
+ border-radius: 50%;
+ margin: 0 12px 0 16px;
+ //border: 1px solid;
+ }
+
+ .childList {
+ display: flex;
+ flex-wrap: wrap;
+ margin-left: 100px;
+ }
+
+ .company {
+ font-size: 13px;
+ color: #888888;
+
+ .status {
+ color: $primaryColor;
+ }
+ }
+
+ .m_content {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ margin-bottom: 4px;
+ }
+
+ .info {
+ display: flex;
+ align-items: center;
+ margin-left: 20px;
+
+ .icon {
+ position: relative;
+ z-index: 11;
+ color: #53b76f;
+ font-size: 24px;
+ }
+
+ .icon1 {
+ position: relative;
+ z-index: 11;
+ color: deepskyblue;
+ font-size: 24px;
+ }
+
+ .icon2 {
+ position: relative;
+ z-index: 11;
+ color: #dc362e;
+ font-size: 24px;
+ }
+
+ .iconnew {
+ width: 24px;
+ height: 24px;
+ }
+
+ .icon3 {
+ position: relative;
+ z-index: 11;
+ color: gray;
+ font-size: 24px;
+ }
+
+ .content {
+ flex: 1;
+
+ .line {
+ display: flex;
+ justify-content: space-between;
+ align-content: center;
+ margin-bottom: 6px;
+
+ .status {
+ color: #888888;
+ }
+
+ .padding {
+ color: $primaryColor;
+ }
+
+ .name {
+ font-weight: 600;
+ font-size: 16px;
+ color: #111111;
+ }
+
+ .time {
+ color: #888888;
+ }
+ }
+ }
+ }
+
+ .remark {
+ background: #f7f7f7;
+ border-radius: 4px;
+ padding: 13px 15px;
+ color: #666666;
+ margin-left: 100px;
+ }
+ }
+ }
+ }
+}
+</style>
--
Gitblit v1.9.3