| | |
| | | <template> |
| | | <GlobalWindow |
| | | :title="title" |
| | | :visible.sync="visible" |
| | | @confirm="confirm" |
| | | > |
| | | <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 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" 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 class="list"> |
| | | <div class="item" style="width: 100%"> |
| | | <div class="label">申请人</div> |
| | | <div class="value">{{model.memberName || ''}} {{model.memberPhone || ''}} ({{model.companyName || ''}})</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 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 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.content }}</div> |
| | | </div> |
| | | <div class="item"> |
| | | <div class="label">乘车人员</div> |
| | | <div class="value">{{model.memberNames || ''}}</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 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 class="value">{{ model.addr || '' }}</div> |
| | | </div> |
| | | <div class="item"> |
| | | <div class="label">预计出发时间</div> |
| | | <div class="value">{{model.planUseDate || ''}}</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">始:{{model.startTime || ''}}<br>止:{{model.endTime || ''}}</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="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="" /> |
| | | <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 == 4 || 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 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="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="status-green">{{item.statusInfo ||''}}</span>) |
| | | <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 v-if=" |
| | | item.approveType != 1 && |
| | | item.checkInfo != null && |
| | | item.checkInfo != '' |
| | | " class="remark"> |
| | | {{ item.checkInfo || "" }} |
| | | </div> |
| | | <div v-if="item.approveType == 1 " class="childList"> |
| | | <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> |
| | | <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> |
| | | <!-- --> |
| | | <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 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-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-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-input type="textarea" placeholder="请填写说明" :rows="4" v-model="dealForm.checkInfo" /> |
| | | </el-form-item> |
| | | </el-form> |
| | | <span slot="footer" class="dialog-footer"> |
| | |
| | | <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-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-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 @click="isBackProblem = false">取消</el-button> |
| | | <el-button type="primary" :loading="dealing" @click="backDo">确定</el-button> |
| | | </span> |
| | | </el-dialog> |
| | |
| | | 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 () { |
| | | data() { |
| | | return { |
| | | title: '公务车申请', |
| | | visible: false, |
| | | dataId: null, |
| | | model: { }, |
| | | model: {}, |
| | | dealing: false, |
| | | isShowProblem: false, |
| | | isBackProblem: false, |
| | |
| | | computed: { |
| | | ...mapState(['userInfo']) |
| | | }, |
| | | created () { |
| | | created() { |
| | | this.config({ |
| | | api: '/business/carUseBook', |
| | | 'field.id': 'id' |
| | | }) |
| | | }, |
| | | methods: { |
| | | dealDo () { |
| | | dealDo() { |
| | | this.$refs.dealForm.validate((valid) => { |
| | | if (!valid) { |
| | | return |
| | |
| | | }) |
| | | }) |
| | | }, |
| | | agreeOpen () { |
| | | agreeOpen() { |
| | | this.isShowProblem = true |
| | | this.$set(this.dealForm, 'driverId', this.model.driverId) |
| | | |
| | | this.$set(this.dealForm, 'checkInfo', '') |
| | | this.loadMemberList() |
| | | }, |
| | | jectOpen () { |
| | | jectOpen() { |
| | | this.isBackProblem = true |
| | | this.backForm = { |
| | | checkInfo: null |
| | | } |
| | | }, |
| | | backDo () { |
| | | backDo() { |
| | | this.$refs.backForm.validate((valid) => { |
| | | if (!valid) { |
| | | return |
| | |
| | | }) |
| | | }) |
| | | }, |
| | | open (title, target) { |
| | | open(title, target) { |
| | | this.title = title |
| | | this.visible = true |
| | | this.model = {} |
| | |
| | | this.getDetail() |
| | | }) |
| | | }, |
| | | 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 () { |
| | | loadMemberList() { |
| | | driveList({}).then(res => { |
| | | this.memberList = res |
| | | }) |
| | |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | @import "@/assets/style/variables.scss"; |
| | | |
| | | .upload_box { |
| | | width: 84px; |
| | | height: 84px; |
| | |
| | | align-items: center; |
| | | color: #999999; |
| | | border: 1px solid #e4e4e4; |
| | | |
| | | .icon { |
| | | font-size: 24px; |
| | | } |
| | | |
| | | .text { |
| | | font-size: 12px; |
| | | } |
| | | } |
| | | .side_title{ |
| | | |
| | | .side_title { |
| | | font-weight: 600; |
| | | font-size: 18px; |
| | | color: #111111; |
| | |
| | | margin-left: 20px; |
| | | margin-top: 20px; |
| | | } |
| | | |
| | | .modal_wrap { |
| | | display: flex; |
| | | height: 100%; |
| | | |
| | | .modal_content { |
| | | flex: 1; |
| | | padding: 0px 30px; |
| | |
| | | margin-bottom: 20px; |
| | | margin-top: 30px; |
| | | } |
| | | |
| | | .info { |
| | | .list { |
| | | display: flex; |
| | |
| | | display: flex; |
| | | width: 40%; |
| | | margin-bottom: 20px; |
| | | |
| | | &:nth-of-type(2n) { |
| | | width: 60%; |
| | | } |
| | |
| | | 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; |
| | |
| | | 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% - 36px); |
| | | height: calc(100% - 30px); |
| | | top: 49px; |
| | | } |
| | | |
| | | .avatar { |
| | | width: 40px; |
| | | height: 40px; |
| | |
| | | margin: 0 12px 0 16px; |
| | | //border: 1px solid; |
| | | } |
| | | .childList{ |
| | | |
| | | .childList { |
| | | display: flex; |
| | | flex-wrap: wrap; |
| | | margin-left: 100px; |
| | | } |
| | | |
| | | .company { |
| | | font-size: 13px; |
| | | color: #888888; |
| | | |
| | | .status { |
| | | color: #00ba67; |
| | | color: $primaryColor; |
| | | } |
| | | } |
| | | .m_content{ |
| | | |
| | | .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{ |
| | | |
| | | .iconnew { |
| | | width: 24px; |
| | | height: 24px; |
| | | } |
| | | |
| | | .icon3 { |
| | | position: relative; |
| | | z-index: 11; |
| | | color:gray; |
| | | 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; |
| | |
| | | color: #666666; |
| | | margin-left: 100px; |
| | | } |
| | | |
| | | } |
| | | } |
| | | } |