| | |
| | | export function taskCenterPage (data) { |
| | | return request.post('/visitsAdmin/cloudService/business/staging/taskPage', data) |
| | | } |
| | | // 访客记å½è¯¦æ
|
| | | export function getVisitedDetail (data) { |
| | | return request.get('/visitsAdmin/cloudService/web/visitor/detail', { |
| | | params: { ...data } |
| | | }) |
| | | } |
| | | // 访客æ¥å¤è¯¦æ
|
| | | export function getVisitedReDetail (data) { |
| | | return request.get('visitsAdmin/cloudService/business/visits/' + data.id) |
| | | } |
| | | // éæ£è¯¦æ
|
| | | export function hiddenDangerDetail (id) { |
| | | return request.get('/visitsAdmin/cloudService/business/hiddenDanger/' + id) |
| | | } |
| | | // ä»»å¡ä¸å¿ éæ£è½¬äº¤ |
| | | export function transferHiddenDanger (data) { |
| | | return request.post('/visitsAdmin/cloudService/business/hiddenDanger/transferHiddenDanger', data) |
| | | } |
| | | // ä»»å¡ä¸å¿ å¤ç |
| | | export function dealHiddenDanger (data) { |
| | | return request.post('/visitsAdmin/cloudService/business/hiddenDanger/dealHiddenDanger', data) |
| | | } |
| | |
| | | export function approveTemplByType (type) { |
| | | return request.get(`/visitsAdmin/cloudService/business/approveTempl/${type}`) |
| | | } |
| | | export const uploadUrl = 'visitsAdmin/cloudService/public/upload' |
¶Ô±ÈÐÂÎļþ |
| | |
| | | import request from '@/utils/request' |
| | | |
| | | // æå°å表 |
| | | export function getPlatform (data) { |
| | | return request.post('/visitsAdmin/cloudService/business/platform/page', data, { |
| | | trim: true |
| | | }) |
| | | } |
| | | // æå°è°åº¦ä¸å¿ å表 |
| | | export function getPlatformJob (data) { |
| | | return request.post('/visitsAdmin/cloudService/business/platformJob/page', data, { |
| | | trim: true |
| | | }) |
| | | } |
| | |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | .side_title{ |
| | | font-weight: 600; |
| | | font-size: 18px; |
| | | color: #111111; |
| | | margin-bottom: 20px; |
| | | margin-left: 20px; |
| | | margin-top: 20px; |
| | | } |
| | | .upload_box { |
| | | width: 84px; |
| | | height: 84px; |
| | |
| | | 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%; |
| | |
| | | <template> |
| | | <div class="main_app"> |
| | | <QueryForm v-model="filters" :query-form-config="queryFormConfig" @handleQuery="getList(1)" @clear="clear" /> |
| | | <el-table v-loading="loading" :data="list" stripe row-key="id" default-expand-all> |
| | | <el-table-column prop="" label="å
¥å车è¾" min-width="100" show-overflow-tooltip></el-table-column> |
| | | <el-table-column prop="" label="å
¬å¸åç§°" min-width="120" show-overflow-tooltip></el-table-column> |
| | | <el-table-column prop="" label="è系人信æ¯" min-width="100" show-overflow-tooltip></el-table-column> |
| | | <el-table-column prop="" label="ææºå·" min-width="120" show-overflow-tooltip></el-table-column> |
| | | <el-table-column prop="" label="被访人" min-width="120" show-overflow-tooltip></el-table-column> |
| | | <el-table-column prop="" label="æè®¿æ¶é´" min-width="120" show-overflow-tooltip></el-table-column> |
| | | <el-table-column prop="" label="æè®¿äºç±" min-width="80" show-overflow-tooltip></el-table-column> |
| | | <el-table-column prop="" fixed="right" label="ç¶æ" min-width="100"></el-table-column> |
| | | <QueryForm |
| | | v-model="filters" |
| | | :query-form-config="queryFormConfig" |
| | | @handleQuery="getList(1)" |
| | | @clear="clear" |
| | | /> |
| | | <el-table |
| | | v-loading="loading" |
| | | :data="dataList" |
| | | stripe |
| | | row-key="id" |
| | | default-expand-all |
| | | > |
| | | <el-table-column |
| | | prop="carNos" |
| | | label="å
¥å车è¾" |
| | | min-width="100px" |
| | | ></el-table-column> |
| | | <el-table-column |
| | | prop="companyName" |
| | | label="å
¬å¸åç§°" |
| | | min-width="100px" |
| | | ></el-table-column> |
| | | <el-table-column |
| | | prop="name" |
| | | label="è系人信æ¯" |
| | | min-width="100px" |
| | | ></el-table-column> |
| | | <el-table-column |
| | | prop="phone" |
| | | label="ææºå·" |
| | | min-width="100px" |
| | | ></el-table-column> |
| | | <el-table-column |
| | | prop="receptMemberName" |
| | | label="被访人" |
| | | min-width="100px" |
| | | ></el-table-column> |
| | | <el-table-column label="æè®¿æ¶é´" min-width="170px"> |
| | | <template slot-scope="{ row }"> |
| | | <span>èµ·ï¼{{ row.starttime }}</span |
| | | ><br /> |
| | | <span>æ¢ï¼{{ row.endtime }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="reason" |
| | | label="æè®¿äºç±" |
| | | min-width="100px" |
| | | ></el-table-column> |
| | | <el-table-column |
| | | prop="status" |
| | | fixed="right" |
| | | label="ç¶æ" |
| | | min-width="100px" |
| | | > |
| | | <template slot-scope="{ row }"> |
| | | <span style="color: rgba(245, 154, 35, 0.996)" v-if="row.status === 0" |
| | | >å¾
æäº¤å®¡æ¹</span |
| | | > |
| | | <span v-if="row.status === 1" style="color: rgba(245, 154, 35, 0.996)" |
| | | >审æ¹ä¸</span |
| | | > |
| | | <span v-if="row.status === 2" style="color: rgba(245, 154, 35, 0.996)" |
| | | >å®¡æ ¸éè¿</span |
| | | > |
| | | <span style="color: gray" v-if="row.status === 3">å®¡æ ¸ä¸éè¿</span> |
| | | <span v-if="row.status === 4" style="color: gray">åæ¶</span> |
| | | <span v-if="row.status === 5" style="color: green">é¢çº¦æå</span> |
| | | <span v-if="row.status === 6" style="color: gray">é¢çº¦å¤±è´¥</span> |
| | | <span v-if="row.status === 7" style="color: green">æè®¿ä¸</span> |
| | | <span v-if="row.status === 8" style="color: red">å·²ç¾ç¦»</span> |
| | | <span v-if="row.status === 9" style="color: gray">已失æ</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="æä½" width="230" fixed="right"> |
| | | <template slot-scope="{row}"> |
| | | <el-button type="text" @click="handleDetail(row)" v-permissions="['business:company:update']">æ¥ç详æ
</el-button> |
| | | <template slot-scope="{ row }"> |
| | | <el-button |
| | | type="text" |
| | | @click="handleDetail(row)" |
| | | v-permissions="['business:company:update']" |
| | | >æ¥ç详æ
</el-button |
| | | > |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | <pagination @size-change="handleSizeChange" @current-change="getList" :pagination="pagination" /> |
| | | <ReportDetail v-if="isShowDetail" ref="DetailRef" /> |
| | | <pagination |
| | | @size-change="handleSizeChange" |
| | | @current-change="getList" |
| | | :pagination="pagination" |
| | | /> |
| | | <ReportDetail v-if="isShowReport" ref="VisReportDetailRef" /> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import Pagination from '@/components/common/Pagination' |
| | | import QueryForm from '@/components/common/QueryForm' |
| | | import ReportDetail from './page-components/ReportDetail.vue' |
| | | // import ReportDetail from './page-components/ReportDetail.vue' |
| | | import ReportDetail from '@/views/task/visReportDetail.vue' |
| | | import { fetchList } from '@/api/business/visits' |
| | | export default { |
| | | components: { |
| | | ReportDetail, |
| | |
| | | }, |
| | | data () { |
| | | return { |
| | | isShowDetail: false, |
| | | isShowReport: false, |
| | | activeTab: '0', |
| | | filters: {}, |
| | | dataList: [], |
| | | queryFormConfig: { |
| | | formItems: [ |
| | | { |
| | | filed: 'idCard', |
| | | filed: 'carNos', |
| | | type: 'input', |
| | | label: '车çå·' |
| | | }, |
| | | { |
| | | filed: 'name', |
| | | filed: 'companyName', |
| | | type: 'input', |
| | | label: 'å
¬å¸åç§°' |
| | | } |
| | |
| | | capacity: 10, |
| | | page: 1 |
| | | }, |
| | | list: [{}], |
| | | total: 0 |
| | | } |
| | | }, |
| | | created () { |
| | | this.getList() |
| | | }, |
| | | methods: { |
| | | handleDetail () { |
| | | this.isShowDetail = true |
| | | handleDetail (row) { |
| | | this.isShowReport = true |
| | | this.$nextTick(() => { |
| | | this.$refs.DetailRef.isShowModal = true |
| | | this.$nextTick(() => { |
| | | this.$refs.VisReportDetailRef.id = row.id |
| | | this.$refs.VisReportDetailRef.type = 1 |
| | | this.$refs.VisReportDetailRef.getDetail() |
| | | this.$refs.VisReportDetailRef.isShowModal = true |
| | | }) |
| | | }) |
| | | }, |
| | | getList (page) {}, |
| | | clear () { }, |
| | | getList (page) { |
| | | const { pagination, filters } = this |
| | | pagination.page = page || pagination.page |
| | | fetchList({ |
| | | model: { ...filters, type: 2 }, |
| | | ...pagination |
| | | }).then(res => { |
| | | this.dataList = res.records || [] |
| | | }) |
| | | }, |
| | | clear () { |
| | | this.filters = {} |
| | | this.getList(0) |
| | | }, |
| | | handleSizeChange (capacity) { |
| | | this.pagination.capacity = capacity |
| | | } |
| | |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <GlobalWindow :title="title" :visible.sync="isShowModal" @confirm="confirm"> |
| | | <div class="modal_wrap"> |
| | | <div class="modal_content"> |
| | | <div class="header"> |
| | | <div class="left"> |
| | | <div class="h1">{{ cateList[type] }}</div> |
| | | <div class="time">æäº¤æ¶é´ï¼{{ info.createDate }}</div> |
| | | </div> |
| | | <div class="right">{{ statusMap[info.status] }}</div> |
| | | </div> |
| | | <div class="info"> |
| | | <div class="title">éæ£éææä¿¡æ¯</div> |
| | | <div class="list"> |
| | | <div class="item"> |
| | | <div class="label">ææ¥äºº</div> |
| | | <div class="value"> |
| | | {{ info.memberName }} {{ info.memberPhone }} |
| | | </div> |
| | | </div> |
| | | <div class="item"> |
| | | <div class="label">鿣åºå</div> |
| | | <div class="value">{{ info.areaName }}</div> |
| | | </div> |
| | | <div class="item"> |
| | | <div class="label">éæ£ç±»å</div> |
| | | <div class="value">{{ info.categoryName }}</div> |
| | | </div> |
| | | <div class="item"> |
| | | <div class="label">鿣æè¿°</div> |
| | | <div class="value">{{ info.content }}</div> |
| | | </div> |
| | | <div class="item file"> |
| | | <div class="label">ç°åºæ
åµ</div> |
| | | <div class="value"> |
| | | <div class="file_list"> |
| | | <template v-for="item in info.submitFileList"> |
| | | <img |
| | | v-if="item.type == 0" |
| | | :key="item.id" |
| | | :src="item.fileurlFull" |
| | | mode="widthFix" |
| | | class="img" |
| | | /> |
| | | <video |
| | | v-if="item.type == 1" |
| | | :key="item.id" |
| | | :src="item.fileurlFull" |
| | | class="img" |
| | | controls |
| | | /> |
| | | </template> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div class="side"> |
| | | <div class="side_title">å®¡æ¹æµç¨</div> |
| | | <div |
| | | class="list" |
| | | v-if=" |
| | | info.approveDateVO != null && info.approveDateVO.approveList != null |
| | | " |
| | | > |
| | | <div |
| | | class="item" |
| | | v-for="(item, index) in info.approveDateVO.approveList" |
| | | :key="item.id" |
| | | > |
| | | <div |
| | | class="separate" |
| | | v-if="index < info.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="status-green">{{ |
| | | 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 == 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="handleAppr" type="primary" class="status-red" |
| | | >å¤ç</el-button |
| | | > |
| | | <el-button @click="isShowTransfer = true" type="primary" plain |
| | | >转交</el-button |
| | | > |
| | | <el-button @click="isShowBack = true" type="danger" plain>éå</el-button> |
| | | <el-button @click="isShowModal = false">è¿å</el-button> |
| | | </template> |
| | | <!-- åæ/æç» --> |
| | | <el-dialog |
| | | append-to-body |
| | | title="éæ£è½¬äº¤" |
| | | :visible.sync="isShowTransfer" |
| | | width="600px" |
| | | > |
| | | <el-form |
| | | :model="transferForm" |
| | | :rules="handleRules" |
| | | ref="transferForm" |
| | | label-width="100px" |
| | | class="demo-ruleForm" |
| | | > |
| | | <el-form-item label="éæ£è½¬äº¤äºº" prop="checkUserId"> |
| | | <el-select |
| | | v-model="transferForm.checkUserId" |
| | | filterable |
| | | placeholder="è¯·éæ© åé" |
| | | > |
| | | <el-option |
| | | v-for="item in memberList" |
| | | :key="item.id" |
| | | :label="item.name" |
| | | :value="item.id" |
| | | > |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-form> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="isShowTransfer = false">åæ¶</el-button> |
| | | <el-button :loading="subLoading" type="primary" @click="onTransfer" |
| | | >ç¡®å®</el-button |
| | | > |
| | | </span> |
| | | </el-dialog> |
| | | <!-- 鿣 --> |
| | | <el-dialog |
| | | append-to-body |
| | | title="éæ£æ´æ¹" |
| | | :visible.sync="isShowProblem" |
| | | width="600px" |
| | | > |
| | | <el-form |
| | | :model="handleParam" |
| | | :rules="handleRules" |
| | | ref="handleForm" |
| | | label-width="100px" |
| | | > |
| | | <el-form-item label="æ´æ¹æ¶é´" prop="dealTime"> |
| | | <el-date-picker |
| | | class="w300" |
| | | value-format="yyyy-MM-dd hh:mm:ss" |
| | | type="datetime" |
| | | placeholder="éæ©æ¥æ" |
| | | v-model="handleParam.dealTime" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="æ´æ¹å" prop="dealBeforeFileList"> |
| | | <div class="upload_wrap"> |
| | | <el-upload |
| | | class="avatar-uploader" |
| | | :action="uploadUrl" |
| | | :show-file-list="false" |
| | | :on-success="handleAvatarSuccess" |
| | | :before-upload="beforeAvatarUpload" |
| | | > |
| | | <img v-if="param.url" :src="param.url" class="avatar" /> |
| | | <div v-else class="upload_box"> |
| | | <el-icon class="el-icon-plus icon" /> |
| | | <div class="text">å¾ç/è§é¢</div> |
| | | </div> |
| | | </el-upload> |
| | | <template v-if="handleParam.dealBeforeFileList"> |
| | | <div |
| | | class="img_wrap" |
| | | v-for="(img, i) in handleParam.dealBeforeFileList" |
| | | :key="i" |
| | | > |
| | | <img v-if="img.type == 0" :src="img.fileurlFull" alt="" /> |
| | | <video |
| | | v-if="img.type == 1" |
| | | :src="img.fileurlFull" |
| | | controls |
| | | alt="" |
| | | /> |
| | | </div> |
| | | </template> |
| | | </div> |
| | | </el-form-item> |
| | | <el-form-item label="æ´æ¹å" prop="dealAfterFileList"> |
| | | <div class="upload_wrap"> |
| | | <el-upload |
| | | class="avatar-uploader" |
| | | :action="uploadUrl" |
| | | :show-file-list="false" |
| | | :on-success="handleAfterSuccess" |
| | | :before-upload="beforeAvatarUpload" |
| | | > |
| | | <img v-if="param.url" :src="param.url" class="avatar" /> |
| | | <div v-else class="upload_box"> |
| | | <el-icon class="el-icon-plus icon" /> |
| | | <div class="text">å¾ç/è§é¢</div> |
| | | </div> |
| | | </el-upload> |
| | | <template v-if="handleParam.dealAfterFileList"> |
| | | <div |
| | | class="img_wrap" |
| | | v-for="(img, i) in handleParam.dealAfterFileList" |
| | | :key="i" |
| | | > |
| | | <img v-if="img.type == 0" :src="img.fileurlFull" alt="" /> |
| | | <video |
| | | v-if="img.type == 1" |
| | | :src="img.fileurlFull" |
| | | controls |
| | | alt="" |
| | | /> |
| | | </div> |
| | | </template> |
| | | </div> |
| | | </el-form-item> |
| | | <el-form-item label="æ´æ¹è¯´æ"> |
| | | <el-input |
| | | type="textarea" |
| | | placeholder="请填å说æ" |
| | | :rows="4" |
| | | v-model="handleParam.checkInfo" |
| | | /> |
| | | </el-form-item> |
| | | </el-form> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="isShowProblem = false">åæ¶</el-button> |
| | | <el-button type="primary" :loading="subLoading" @click="onSubAppr" |
| | | >ç¡®å®</el-button |
| | | > |
| | | </span> |
| | | </el-dialog> |
| | | <el-dialog |
| | | append-to-body |
| | | title="鿣éå" |
| | | :visible.sync="isShowBack" |
| | | width="600px" |
| | | > |
| | | <el-form |
| | | :model="backForm" |
| | | :rules="handleRules" |
| | | ref="backForm" |
| | | label-width="100px" |
| | | > |
| | | <el-form-item label="æ´æ¹æ¶é´" prop="dealTime"> |
| | | <el-date-picker |
| | | class="w300" |
| | | value-format="yyyy-MM-dd hh:mm:ss" |
| | | type="datetime" |
| | | placeholder="éæ©æ¥æ" |
| | | v-model="backForm.dealTime" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="æ´æ¹å"> |
| | | <div class="upload_wrap"> |
| | | <el-upload |
| | | class="avatar-uploader" |
| | | :action="uploadUrl" |
| | | :show-file-list="false" |
| | | :on-success="handleBackSuccess" |
| | | :before-upload="beforeAvatarUpload" |
| | | > |
| | | <div class="upload_box"> |
| | | <el-icon class="el-icon-plus icon" /> |
| | | <div class="text">å¾ç/è§é¢</div> |
| | | </div> |
| | | </el-upload> |
| | | <template v-if="backForm.dealBeforeFileList"> |
| | | <div |
| | | class="img_wrap" |
| | | v-for="(img, i) in backForm.dealBeforeFileList" |
| | | :key="i" |
| | | > |
| | | <img v-if="img.type == 0" :src="img.fileurlFull" alt="" /> |
| | | <video |
| | | v-if="img.type == 1" |
| | | :src="img.fileurlFull" |
| | | controls |
| | | alt="" |
| | | /> |
| | | </div> |
| | | </template> |
| | | </div> |
| | | </el-form-item> |
| | | <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="isShowBack = false">åæ¶</el-button> |
| | | <el-button type="primary" :loading="subLoading" @click="onSubBack" |
| | | >ç¡®å®</el-button |
| | | > |
| | | </span> |
| | | </el-dialog> |
| | | </GlobalWindow> |
| | | </template> |
| | | |
| | | <script> |
| | | import GlobalWindow from '@/components/common/GlobalWindow' |
| | | import { memberList } from '@/api/business/hiddenDangerParam' |
| | | import { |
| | | uploadFile, |
| | | hiddenDangerDetail, |
| | | dealHiddenDanger, |
| | | transferHiddenDanger |
| | | } from '@/api/index' |
| | | |
| | | export default { |
| | | components: { GlobalWindow }, |
| | | data () { |
| | | return { |
| | | id: '', |
| | | type: '', |
| | | uploadUrl: uploadFile, |
| | | |
| | | title: '访客é¢çº¦è¯¦æ
', |
| | | isShowModal: false, |
| | | info: {}, |
| | | isShowAppr: false, |
| | | apprTitle: 'åæ', |
| | | subLoading: false, |
| | | param: {}, |
| | | handleParam: {}, |
| | | backForm: {}, |
| | | isShowBack: false, |
| | | isShowTransfer: false, |
| | | transferForm: {}, |
| | | memberList: [], |
| | | isShowProblem: false, |
| | | rules: { |
| | | checkInfo: [{ required: true, message: '请è¾å
¥', trigger: 'blur' }] |
| | | }, |
| | | handleRules: { |
| | | dealTime: [{ required: true, message: 'è¯·éæ©', trigger: 'change' }], |
| | | dealBeforeFileList: [{ type: 'array', required: true, message: 'è¯·éæ©', trigger: 'change' }], |
| | | checkUserId: [{ required: true, message: 'è¯·éæ©', trigger: 'change' }], |
| | | dealAfterFileList: [{ type: 'array', required: true, message: 'è¯·éæ©', trigger: 'change' }] |
| | | }, |
| | | statusMap: { |
| | | 0: 'å¾
审æ¹', |
| | | 1: '审æ¹ä¸', |
| | | 2: '审æ¹éè¿', |
| | | 3: 'å®¡æ¹æªéè¿', |
| | | 4: '已忶', |
| | | 5: 'ä»äººæç¾', |
| | | 6: 'ä»äººæç»' |
| | | }, |
| | | cateList: { |
| | | 0: '访客ç³è¯·', |
| | | 1: '访客æ¥å¤', |
| | | 2: 'ç¨è½¦ç³è¯·', |
| | | 3: '鿣鿿', |
| | | 4: 'ç©æµè½¦ç³è¯·' |
| | | } |
| | | } |
| | | }, |
| | | created() { |
| | | this.getMemberList() |
| | | }, |
| | | methods: { |
| | | onSubAppr () { |
| | | this.$refs.handleForm.validate((valid) => { |
| | | if (!valid) { |
| | | return |
| | | } |
| | | this.subLoading = true |
| | | dealHiddenDanger({ |
| | | ...this.handleParam, |
| | | status: 1, |
| | | id: this.id |
| | | }) |
| | | .then(res => { |
| | | this.subLoading = false |
| | | this.$tip.apiSuccess('å¤çæå') |
| | | this.getDetail() |
| | | this.isShowProblem = false |
| | | }) |
| | | .finally(() => { |
| | | this.subLoading = false |
| | | }) |
| | | }) |
| | | }, |
| | | onSubBack () { |
| | | this.$refs.backForm.validate((valid) => { |
| | | if (!valid) { |
| | | return |
| | | } |
| | | this.subLoading = true |
| | | dealHiddenDanger({ |
| | | ...this.backForm, |
| | | status: 2, |
| | | id: this.id |
| | | }) |
| | | .then(res => { |
| | | this.subLoading = false |
| | | this.$tip.apiSuccess('éåæå') |
| | | this.getDetail() |
| | | this.isShowProblem = false |
| | | }) |
| | | .finally(() => { |
| | | this.subLoading = false |
| | | }) |
| | | }) |
| | | }, |
| | | onTransfer () { |
| | | this.$refs.transferForm.validate((valid) => { |
| | | if (!valid) { |
| | | return |
| | | } |
| | | this.subLoading = true |
| | | transferHiddenDanger({ |
| | | ...this.transferForm, |
| | | id: this.id |
| | | }) |
| | | .then(res => { |
| | | this.subLoading = false |
| | | if (res.code !== 200) return |
| | | this.$tip.apiSuccess('转交æå') |
| | | this.getDetail() |
| | | this.isShowTransfer = false |
| | | }) |
| | | .finally(() => { |
| | | this.subLoading = false |
| | | }) |
| | | }) |
| | | }, |
| | | getMemberList () { |
| | | memberList({}).then(res => { |
| | | this.memberList = res || [] |
| | | }) |
| | | }, |
| | | getDetail () { |
| | | const { id } = this |
| | | hiddenDangerDetail(id).then(res => { |
| | | this.info = res |
| | | }) |
| | | }, |
| | | handleAppr (val) { |
| | | this.isShowProblem = true |
| | | }, |
| | | confirm () { |
| | | console.log('--') |
| | | }, |
| | | handleTransfer () { |
| | | this.isShowProblem = true |
| | | }, |
| | | reject () { }, |
| | | handleAvatarSuccess (res) { |
| | | if (res.code === 200) { |
| | | const str = res.data.url.indexOf('png') > 0 || res.data.url.indexOf('jpg') > 0 |
| | | const arr = this.handleParam.dealBeforeFileList || [] |
| | | arr.push({ |
| | | type: str ? 0 : 1, |
| | | fileurl: res.data.imgaddr, |
| | | fileurlFull: res.data.url |
| | | }) |
| | | this.$set(this.handleParam, 'dealBeforeFileList', arr) |
| | | } |
| | | }, |
| | | handleAfterSuccess (res) { |
| | | if (res.code === 200) { |
| | | const str = res.data.url.indexOf('png') > 0 || res.data.url.indexOf('jpg') > 0 |
| | | const arr = this.handleParam.dealAfterFileList || [] |
| | | arr.push({ |
| | | type: str ? 0 : 1, |
| | | fileurl: res.data.imgaddr, |
| | | fileurlFull: res.data.url |
| | | }) |
| | | this.$set(this.handleParam, 'dealAfterFileList', arr) |
| | | } |
| | | }, |
| | | handleBackSuccess (res) { |
| | | if (res.code === 200) { |
| | | const str = res.data.url.indexOf('png') > 0 || res.data.url.indexOf('jpg') > 0 |
| | | const arr = this.backForm.dealBeforeFileList || [] |
| | | arr.push({ |
| | | type: str ? 0 : 1, |
| | | fileurl: res.data.imgaddr, |
| | | fileurlFull: res.data.url |
| | | }) |
| | | this.$set(this.backForm, 'dealBeforeFileList', arr) |
| | | } |
| | | }, |
| | | beforeAvatarUpload () { } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | .upload_wrap { |
| | | display: flex; |
| | | flex-wrap: wrap; |
| | | .img_wrap { |
| | | width: 85px; |
| | | margin-right: 10px; |
| | | margin-bottom: 10px; |
| | | img, |
| | | video { |
| | | width: 100%; |
| | | } |
| | | } |
| | | } |
| | | .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; |
| | | } |
| | | .file_list { |
| | | display: flex; |
| | | .img { |
| | | width: 200px; |
| | | margin-right: 12px; |
| | | margin-bottom: 12px; |
| | | } |
| | | } |
| | | .value { |
| | | color: #111111; |
| | | } |
| | | } |
| | | .file { |
| | | width: 100%; |
| | | } |
| | | } |
| | | } |
| | | |
| | | .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% - 36px); |
| | | 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: #00ba67; |
| | | } |
| | | } |
| | | .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; |
| | | .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> |
| | |
| | | @clear="clear" |
| | | /> |
| | | <!-- --> |
| | | <el-tabs v-model="filters.queryType"> |
| | | <el-tabs v-model="filters.queryType" @tab-click="(e) => getList(1)"> |
| | | <el-tab-pane label="å¾
å¤ç" name="0"> |
| | | <template #label> |
| | | <span |
| | | >å¾
å¤ç |
| | | <el-badge |
| | | v-if="headData.noticeWaitNum" |
| | | :value="headData.noticeWaitNum" |
| | | class="item" |
| | | type="danger" |
| | |
| | | </span> |
| | | </template> |
| | | </el-tab-pane> |
| | | <el-tab-pane |
| | | :value="headData.noticeDealNum" |
| | | label="å·²å¤ç" |
| | | name="1" |
| | | ></el-tab-pane> |
| | | <el-tab-pane |
| | | :value="headData.noticeCreateNum" |
| | | label="æåèµ·ç" |
| | | name="2" |
| | | ></el-tab-pane> |
| | | <el-tab-pane |
| | | :value="headData.noticeCopyNum" |
| | | label="æéæç" |
| | | name="3" |
| | | ></el-tab-pane> |
| | | <el-tab-pane :value="headData.noticeDealNum" label="å·²å¤ç" name="1"> |
| | | <template #label> |
| | | <span |
| | | >å·²å¤ç |
| | | <el-badge |
| | | v-if="headData.noticeDealNum" |
| | | :value="headData.noticeDealNum" |
| | | class="item" |
| | | type="danger" |
| | | > |
| | | </el-badge> |
| | | </span> |
| | | </template> |
| | | </el-tab-pane> |
| | | <el-tab-pane :value="headData.noticeCreateNum" label="æåèµ·ç" name="2"> |
| | | <template #label> |
| | | <span |
| | | >æåèµ·ç |
| | | <el-badge |
| | | v-if="headData.noticeCreateNum" |
| | | :value="headData.noticeCreateNum" |
| | | class="item" |
| | | type="danger" |
| | | > |
| | | </el-badge> |
| | | </span> |
| | | </template> |
| | | </el-tab-pane> |
| | | <el-tab-pane :value="headData.noticeCopyNum" label="æéæç" name="3"> |
| | | <template #label> |
| | | <span |
| | | >æéæç |
| | | <el-badge |
| | | v-if="headData.noticeCopyNum" |
| | | :value="headData.noticeCopyNum" |
| | | class="item" |
| | | type="danger" |
| | | > |
| | | </el-badge> |
| | | </span> |
| | | </template> |
| | | </el-tab-pane> |
| | | </el-tabs> |
| | | <el-table |
| | | v-loading="loading" |
| | |
| | | > |
| | | <el-table-column prop="name" label="ä»»å¡ç±»å" min-width="100"> |
| | | <template v-slot="scope"> |
| | | <span>{{ cateList[scope.row.objType].name }}</span> |
| | | <span |
| | | v-if=" |
| | | (scope.row.objType || scope.row.objType == 0) && |
| | | cateList[scope.row.objType].name |
| | | " |
| | | >{{ cateList[scope.row.objType].name }}</span |
| | | > |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="name" |
| | | label="æäº¤äºº" |
| | | min-width="80" |
| | | ></el-table-column> |
| | | <el-table-column |
| | | prop="createDate" |
| | | label="æäº¤æ¶é´" |
| | | min-width="100" |
| | | ></el-table-column> |
| | | <el-table-column label="æäº¤äºº" min-width="80"> |
| | | <template v-slot="scope"> |
| | | <span v-if="scope.row.title">{{ |
| | | scope.row.title.split(" - ")[1] |
| | | }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="createDate" label="æäº¤æ¶é´" min-width="100"> |
| | | </el-table-column> |
| | | <el-table-column label="æä½" width="230" fixed="right"> |
| | | <template slot-scope="{ row }"> |
| | | <el-button |
| | |
| | | :pagination="pagination" |
| | | /> |
| | | <TaskDetail v-if="isShowDetail" ref="DetailRef" /> |
| | | <VisReportDetail v-if="isShowReport" ref="VisReportDetailRef" /> |
| | | <DangetDetail v-if="isShowDanger" ref="DangetDetailRef" /> |
| | | <!-- ç¨è½¦ç³è¯· --> |
| | | <OperaCarUseBookWindow ref="OperaDetailsWindow" @success="getList"/> |
| | | <!-- 鿣 --> |
| | | <OperaHiddenDangerWindow ref="OperaHiddenDangerWindow" @success="getList"/> |
| | | <!-- é¢çº¦è¯¦æ
--> |
| | | <OperaVisitsDesWindow ref="OperaVisitsDesWindow" /> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import Pagination from '@/components/common/Pagination' |
| | | import QueryForm from '@/components/common/QueryForm' |
| | | import TaskDetail from './taskDetail.vue' |
| | | import TaskDetail from './visSubDetail.vue' |
| | | import VisReportDetail from './visReportDetail.vue' |
| | | import DangetDetail from './dangetDetail.vue' |
| | | import OperaCarUseBookWindow from '@/components/business/OperaCarUseBookWindow' |
| | | import OperaHiddenDangerWindow from '@/components/business/OperaHiddenDangerWindow' |
| | | import OperaVisitsDesWindow from '@/components/business/OperaVisitsDesWindow' |
| | | import { |
| | | taskCenterHead, |
| | | taskCenterPage |
| | |
| | | export default { |
| | | components: { |
| | | TaskDetail, |
| | | VisReportDetail, |
| | | DangetDetail, |
| | | QueryForm, |
| | | Pagination |
| | | Pagination, |
| | | OperaCarUseBookWindow, |
| | | OperaHiddenDangerWindow, |
| | | OperaVisitsDesWindow |
| | | }, |
| | | data () { |
| | | return { |
| | | isShowDetail: false, |
| | | isShowReport: false, |
| | | isShowDanger: false, |
| | | filters: { |
| | | queryType: 0 |
| | | queryType: '0' |
| | | }, |
| | | queryFormConfig: { |
| | | formItems: [ |
| | |
| | | filed: 'type', |
| | | type: 'select', |
| | | label: 'ä»»å¡ç±»å', |
| | | clearable: false, |
| | | options: [ |
| | | { label: '访客ç³è¯·', value: 0 }, |
| | | { label: '访客æ¥å¤', value: 1 }, |
| | | { label: 'ç¨è½¦ç³è¯·', value: 2 }, |
| | | { label: '鿣鿿', value: 3 }, |
| | | { label: 'ç©æµè½¦ç³è¯·', value: 4 } |
| | | { label: '访客ç³è¯·', value: '0' }, |
| | | { label: '访客æ¥å¤', value: '1' }, |
| | | { label: 'ç¨è½¦ç³è¯·', value: '2' }, |
| | | { label: '鿣鿿', value: '3' }, |
| | | { label: 'ç©æµè½¦ç³è¯·', value: '4' } |
| | | ] |
| | | }, |
| | | { |
| | |
| | | ], |
| | | online: true |
| | | }, |
| | | loading: false, |
| | | sorting: false, |
| | | searchForm: { |
| | | // type: 1 |
| | | }, |
| | | pagination: { |
| | | capacity: 10, |
| | | page: 1 |
| | | }, |
| | | loading: false, |
| | | dataList: [], |
| | | headData: {}, |
| | | total: 0, |
| | |
| | | this.getList() |
| | | }, |
| | | methods: { |
| | | handleDetail () { |
| | | this.isShowDetail = true |
| | | this.$nextTick(() => { |
| | | this.$refs.DetailRef.isShowModal = true |
| | | }) |
| | | handleDetail (row) { |
| | | if (row.objType === 2) { |
| | | this.$refs.OperaDetailsWindow.open('å
¬å¡è½¦ç³è¯·è¯¦æ
', row) |
| | | return |
| | | } |
| | | if (row.objType === 1) { |
| | | this.isShowReport = true |
| | | this.$nextTick(() => { |
| | | this.$refs.VisReportDetailRef.id = row.objId |
| | | this.$refs.VisReportDetailRef.type = row.objType |
| | | this.$refs.VisReportDetailRef.getDetail() |
| | | this.$refs.VisReportDetailRef.isShowModal = true |
| | | }) |
| | | return |
| | | } |
| | | if (row.objType === 3) { |
| | | const obj = { ...row, id: row.objId } |
| | | this.$refs.OperaHiddenDangerWindow.open('éæ£éææè¯¦æ
', obj) |
| | | return |
| | | } |
| | | if (row.objType === 0) { |
| | | this.isShowDetail = true |
| | | this.$nextTick(() => { |
| | | this.$refs.DetailRef.id = row.objId |
| | | this.$refs.DetailRef.type = row.objType |
| | | this.$refs.DetailRef.getDetail() |
| | | this.$refs.DetailRef.isShowModal = true |
| | | }) |
| | | } |
| | | }, |
| | | getList (page) { |
| | | console.log(this.filters) |
| | | const { filters, pagination } = this |
| | | if (filters.selDate && filters.length > 0) { |
| | | if (filters.selDate && filters.selDate.length > 0) { |
| | | filters.startDate = filters.selDate[0] |
| | | filters.endDate = filters.selDate[1] |
| | | } else { |
| | | filters.startDate = null |
| | | filters.endDate = null |
| | | } |
| | | pagination.page = page || pagination.page |
| | | taskCenterPage({ |
| | | model: { ...filters }, |
| | | model: { ...filters, queryType: Number(filters.queryType) }, |
| | | ...pagination |
| | | }).then(res => { |
| | | console.log('res', res) |
| | |
| | | this.headData = res |
| | | }) |
| | | }, |
| | | clear () { }, |
| | | clear () { |
| | | this.filters = { |
| | | queryType: '0' |
| | | } |
| | | this.getList(0) |
| | | }, |
| | | handleSizeChange (capacity) { |
| | | this.pagination.capacity = capacity |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <GlobalWindow :title="title" :visible.sync="isShowModal" @confirm="confirm"> |
| | | <div class="modal_wrap"> |
| | | <div class="modal_content"> |
| | | <div class="header"> |
| | | <div class="left"> |
| | | <div class="h1">{{ cateList[type] }}</div> |
| | | <div class="time">æäº¤æ¶é´ï¼{{ info.createDate }}</div> |
| | | </div> |
| | | <div class="right">{{ statusMap[info.status] }}</div> |
| | | </div> |
| | | <div class="info"> |
| | | <div class="title">访客æ¥å¤ä¿¡æ¯</div> |
| | | <div class="list"> |
| | | <div class="item"> |
| | | <div class="label">被访人</div> |
| | | <div class="value">{{ info.receptMemberName }} {{ info.receptMemberDepartment }}</div> |
| | | </div> |
| | | <div class="item"> |
| | | <div class="label">æ¥è®¿æ¶é´</div> |
| | | <div class="value">{{ info.starttime }}è³{{ info.endtime }}</div> |
| | | </div> |
| | | <div class="item"> |
| | | <div class="label">æ¥è®¿åä½</div> |
| | | <div class="value">{{ info.companyName }}</div> |
| | | </div> |
| | | <div class="item"> |
| | | <div class="label">æ¥è®¿äºç±</div> |
| | | <div class="value">{{ info.reason }}</div> |
| | | </div> |
| | | <div class="item"> |
| | | <div class="label">è系人</div> |
| | | <div class="value">{{ info.name }} {{ info.phone }}</div> |
| | | </div> |
| | | <div class="item"> |
| | | <div class="label">å
¥å车è¾</div> |
| | | <div class="value">{{ info.carNos }}</div> |
| | | </div> |
| | | <div class="item"> |
| | | <div class="label">é车人æ°</div> |
| | | <div class="value">{{ info.memberNum || 0 }}人</div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div class="side"> |
| | | <div class="side_title">å®¡æ¹æµç¨</div> |
| | | <div |
| | | class="list" |
| | | v-if=" |
| | | info.approveDateVO != null && info.approveDateVO.approveList != null |
| | | " |
| | | > |
| | | <div |
| | | class="item" |
| | | v-for="(item, index) in info.approveDateVO.approveList" |
| | | :key="item.id" |
| | | > |
| | | <div |
| | | class="separate" |
| | | v-if="index < info.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="status-green">{{ |
| | | 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 == 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="handleAppr(2)" |
| | | type="primary" |
| | | class="status-red" |
| | | v-if=" |
| | | info.approveDateVO != null && |
| | | info.approveDateVO.canBeApproved != null && |
| | | info.approveDateVO.canBeApproved == 1 |
| | | " |
| | | >åæ</el-button |
| | | > |
| | | <el-button |
| | | @click="handleAppr(3)" |
| | | type="danger" |
| | | v-if=" |
| | | info.approveDateVO != null && |
| | | info.approveDateVO.canBeApproved != null && |
| | | info.approveDateVO.canBeApproved == 1 |
| | | " |
| | | >æç»</el-button |
| | | > |
| | | <el-button @click="isShowModal = false">è¿å</el-button> |
| | | </template> |
| | | <!-- åæ/æç» --> |
| | | <el-dialog |
| | | append-to-body |
| | | :title="apprTitle" |
| | | :visible.sync="isShowAppr" |
| | | width="480px" |
| | | > |
| | | <el-form :model="param" :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm"> |
| | | <el-form-item :prop="param.status == 3 ? 'checkInfo' : ''" :label="param.status == 2 ? 'åæè¯´æ' : 'æç»è¯´æ'"> |
| | | <el-input |
| | | type="textarea" |
| | | :placeholder=" |
| | | param.status == 2 ? 'åæè¯´æï¼éå¿
å¡«' : 'æç»è¯´æå¿
å¡«' |
| | | " |
| | | :rows="4" |
| | | v-model="param.checkInfo" |
| | | /> |
| | | </el-form-item> |
| | | </el-form> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="isShowAppr = false">åæ¶</el-button> |
| | | <el-button :loading="subLoading" type="primary" @click="onSubAppr">ç¡®å®</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | <!-- 鿣 --> |
| | | <el-dialog |
| | | append-to-body |
| | | title="鿣" |
| | | :visible.sync="isShowProblem" |
| | | width="480px" |
| | | > |
| | | <el-form :model="param" :rules="rules" ref="ruleForm" label-width="100px"> |
| | | <el-form-item label="éåæ¶é´"> |
| | | <el-date-picker |
| | | class="w300" |
| | | value-format="yyyy-MM-dd" |
| | | type="date" |
| | | placeholder="éæ©æ¥æ" |
| | | v-model="param.date" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="æ´æ¹å"> |
| | | <div class="df_ac"> |
| | | <img src="@/assets/avatar/man.png" /> |
| | | <el-upload |
| | | class="avatar-uploader" |
| | | action="https://jsonplaceholder.typicode.com/posts/" |
| | | :show-file-list="false" |
| | | :on-success="handleAvatarSuccess" |
| | | :before-upload="beforeAvatarUpload" |
| | | > |
| | | <img v-if="param.url" :src="param.url" class="avatar" /> |
| | | <div v-else class="upload_box"> |
| | | <el-icon class="el-icon-plus icon" /> |
| | | <div class="text">å¾ç/è§é¢</div> |
| | | </div> |
| | | </el-upload> |
| | | </div> |
| | | </el-form-item> |
| | | <el-form-item label="éå说æ"> |
| | | <el-input |
| | | type="textarea" |
| | | placeholder="请填å说æ" |
| | | :rows="4" |
| | | v-model="param.explain" |
| | | /> |
| | | </el-form-item> |
| | | </el-form> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="isShowProblem = false">åæ¶</el-button> |
| | | <el-button type="primary" @click="isShowProblem = false" |
| | | >ç¡®å®</el-button |
| | | > |
| | | </span> |
| | | </el-dialog> |
| | | </GlobalWindow> |
| | | </template> |
| | | |
| | | <script> |
| | | import GlobalWindow from '@/components/common/GlobalWindow' |
| | | import { |
| | | getVisitedReDetail, |
| | | approveDo |
| | | } from '@/api' |
| | | export default { |
| | | components: { GlobalWindow }, |
| | | data () { |
| | | return { |
| | | id: '', |
| | | type: '', |
| | | |
| | | title: '访客é¢çº¦è¯¦æ
', |
| | | isShowModal: false, |
| | | info: {}, |
| | | isShowAppr: false, |
| | | apprTitle: 'åæ', |
| | | subLoading: false, |
| | | param: {}, |
| | | |
| | | isShowProblem: false, |
| | | rules: { |
| | | checkInfo: [{ required: true, message: '请è¾å
¥', trigger: 'blur' }] |
| | | }, |
| | | statusMap: { |
| | | 0: 'å¾
审æ¹', |
| | | 1: '审æ¹ä¸', |
| | | 2: '审æ¹éè¿', |
| | | 3: 'å®¡æ¹æªéè¿', |
| | | 4: '已忶', |
| | | 5: 'ä»äººæç¾', |
| | | 6: 'ä»äººæç»' |
| | | }, |
| | | cateList: { |
| | | 0: '访客ç³è¯·', |
| | | 1: '访客æ¥å¤', |
| | | 2: 'ç¨è½¦ç³è¯·', |
| | | 3: '鿣鿿', |
| | | 4: 'ç©æµè½¦ç³è¯·' |
| | | } |
| | | } |
| | | }, |
| | | methods: { |
| | | onSubAppr () { |
| | | this.$refs.ruleForm.validate((valid) => { |
| | | if (!valid) { |
| | | return |
| | | } |
| | | this.$dialog.actionConfirm('æä½ç¡®è®¤', this.param.status === 2 ? 'æ¨ç¡®è®¤åæè¯¥ç³è¯·åï¼' : 'æ¨ç¡®è®¤æç»è¯¥ç³è¯·åï¼') |
| | | .then(() => { |
| | | this.subLoading = true |
| | | approveDo({ |
| | | objId: this.id, |
| | | objType: 2, |
| | | status: this.param.status, |
| | | checkInfo: this.param.checkInfo |
| | | }) |
| | | .then(res => { |
| | | this.subLoading = false |
| | | this.$tip.apiSuccess('å¤çæå') |
| | | this.getDetail() |
| | | this.isShowAppr = false |
| | | }) |
| | | .finally(() => { |
| | | this.subLoading = false |
| | | }) |
| | | }) |
| | | }) |
| | | }, |
| | | getDetail () { |
| | | const { id } = this |
| | | getVisitedReDetail({ id }).then(res => { |
| | | this.info = res |
| | | }) |
| | | }, |
| | | handleAppr (val) { |
| | | this.$set(this.param, 'status', val) |
| | | this.isShowAppr = true |
| | | }, |
| | | confirm () { |
| | | console.log('--') |
| | | }, |
| | | handleTransfer () { |
| | | this.isShowProblem = true |
| | | }, |
| | | reject () { }, |
| | | handleAvatarSuccess () { }, |
| | | beforeAvatarUpload () { } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | .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 { |
| | | 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% - 36px); |
| | | 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: #00ba67; |
| | | } |
| | | } |
| | | .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; |
| | | .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> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <GlobalWindow :title="title" :visible.sync="isShowModal" @confirm="confirm"> |
| | | <div class="modal_wrap"> |
| | | <div class="modal_content"> |
| | | <div class="header"> |
| | | <div class="left"> |
| | | <div class="h1">{{ cateList[type] }}</div> |
| | | <div class="time">æäº¤æ¶é´ï¼{{ info.createDate }}</div> |
| | | </div> |
| | | <div class="right">{{ statusMap[info.status] }}</div> |
| | | </div> |
| | | <div class="info"> |
| | | <div class="title">访客é¢çº¦ä¿¡æ¯</div> |
| | | <div class="list"> |
| | | <div class="item"> |
| | | <div class="label">被访人</div> |
| | | <div class="value">{{ info.visitUserName }}</div> |
| | | </div> |
| | | <div class="item"> |
| | | <div class="label">æ¥è®¿æ¶é´</div> |
| | | <div class="value">{{ info.visitTime }}</div> |
| | | </div> |
| | | <div class="item"> |
| | | <div class="label">æ¥è®¿äºç±</div> |
| | | <div class="value">{{ info.visitReason }}</div> |
| | | </div> |
| | | <div class="item"> |
| | | <div class="label">éè¡è½¦è¾</div> |
| | | <div class="value">{{ info.carNos }}</div> |
| | | </div> |
| | | <div class="item"> |
| | | <div class="label">æ½å·¥äººå</div> |
| | | <div class="value">{{ info.type == "0" ? "å¦" : "æ¯" }}</div> |
| | | </div> |
| | | <div class="item"> |
| | | <div class="label">æ½å·¥å
容</div> |
| | | <div class="value">{{ info.constructionReason }}</div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div class="table_info"> |
| | | <div class="title">访客信æ¯</div> |
| | | <el-table :data="[info]" border fit> |
| | | <el-table-column label="å§å" prop="" min-width="150"> |
| | | <template slot-scope="{ row }"> |
| | | <div class="name_wrap"> |
| | | <image |
| | | :src=" |
| | | row.prefix |
| | | ? row.prefix |
| | | : require('@/assets/avatar/man.png') |
| | | " |
| | | class="avatar" |
| | | mode="" |
| | | /> |
| | | <div class="content"> |
| | | <div class="line"> |
| | | <div class="name">{{ row.name }}</div> |
| | | <div class="tag">ç³è¯·äºº</div> |
| | | </div> |
| | | <div class="line placeholder9">{{ row.phone }}</div> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | </el-table-column> |
| | | <!-- <el-table-column label="æ§å«" prop="" min-width="40" /> --> |
| | | <el-table-column |
| | | label="è¯ä»¶ç±»å" |
| | | prop="idcardTypeName" |
| | | min-width="80" |
| | | /> |
| | | <el-table-column |
| | | label="è¯ä»¶å·ç " |
| | | prop="idCardDecode" |
| | | min-width="120" |
| | | /> |
| | | <el-table-column |
| | | label="å
¬å¸åç§°" |
| | | prop="companyName" |
| | | min-width="120" |
| | | /> |
| | | <el-table-column label="人è¸ç
§ç" prop="" min-width="80"> |
| | | <template slot-scope="{ row }"> |
| | | <el-image :src="row.prefix" :preview-src-list="[row.prefix]"> |
| | | </el-image> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </div> |
| | | </div> |
| | | <div class="side"> |
| | | <div class="side_title">å®¡æ¹æµç¨</div> |
| | | <div |
| | | class="list" |
| | | v-if=" |
| | | info.approveDateVO != null && info.approveDateVO.approveList != null |
| | | " |
| | | > |
| | | <div |
| | | class="item" |
| | | v-for="(item, index) in info.approveDateVO.approveList" |
| | | :key="item.id" |
| | | > |
| | | <div |
| | | class="separate" |
| | | v-if="index < info.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="status-green">{{ |
| | | 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 == 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="handleAppr(2)" |
| | | type="primary" |
| | | class="status-red" |
| | | v-if=" |
| | | info.approveDateVO != null && |
| | | info.approveDateVO.canBeApproved != null && |
| | | info.approveDateVO.canBeApproved == 1 |
| | | " |
| | | >åæ</el-button |
| | | > |
| | | <el-button |
| | | @click="handleAppr(3)" |
| | | type="danger" |
| | | v-if=" |
| | | info.approveDateVO != null && |
| | | info.approveDateVO.canBeApproved != null && |
| | | info.approveDateVO.canBeApproved == 1 |
| | | " |
| | | >æç»</el-button |
| | | > |
| | | <el-button @click="isShowModal = false">è¿å</el-button> |
| | | </template> |
| | | <!-- åæ/æç» --> |
| | | <el-dialog |
| | | append-to-body |
| | | :title="apprTitle" |
| | | :visible.sync="isShowAppr" |
| | | width="480px" |
| | | > |
| | | <el-form :model="param" :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm"> |
| | | <el-form-item :prop="param.status == 3 ? 'checkInfo' : ''" :label="param.status == 2 ? 'åæè¯´æ' : 'æç»è¯´æ'"> |
| | | <el-input |
| | | type="textarea" |
| | | :placeholder=" |
| | | param.status == 2 ? 'åæè¯´æï¼éå¿
å¡«' : 'æç»è¯´æå¿
å¡«' |
| | | " |
| | | :rows="4" |
| | | v-model="param.checkInfo" |
| | | /> |
| | | </el-form-item> |
| | | </el-form> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="isShowAppr = false">åæ¶</el-button> |
| | | <el-button :loading="subLoading" type="primary" @click="onSubAppr">ç¡®å®</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | <!-- 鿣 --> |
| | | <el-dialog |
| | | append-to-body |
| | | title="鿣" |
| | | :visible.sync="isShowProblem" |
| | | width="480px" |
| | | > |
| | | <el-form :model="param" :rules="rules" ref="ruleForm" label-width="100px"> |
| | | <el-form-item label="éåæ¶é´"> |
| | | <el-date-picker |
| | | class="w300" |
| | | value-format="yyyy-MM-dd" |
| | | type="date" |
| | | placeholder="éæ©æ¥æ" |
| | | v-model="param.date" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="æ´æ¹å"> |
| | | <div class="df_ac"> |
| | | <img src="@/assets/avatar/man.png" /> |
| | | <el-upload |
| | | class="avatar-uploader" |
| | | action="https://jsonplaceholder.typicode.com/posts/" |
| | | :show-file-list="false" |
| | | :on-success="handleAvatarSuccess" |
| | | :before-upload="beforeAvatarUpload" |
| | | > |
| | | <img v-if="param.url" :src="param.url" class="avatar" /> |
| | | <div v-else class="upload_box"> |
| | | <el-icon class="el-icon-plus icon" /> |
| | | <div class="text">å¾ç/è§é¢</div> |
| | | </div> |
| | | </el-upload> |
| | | </div> |
| | | </el-form-item> |
| | | <el-form-item label="éå说æ"> |
| | | <el-input |
| | | type="textarea" |
| | | placeholder="请填å说æ" |
| | | :rows="4" |
| | | v-model="param.explain" |
| | | /> |
| | | </el-form-item> |
| | | </el-form> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="isShowProblem = false">åæ¶</el-button> |
| | | <el-button type="primary" @click="isShowProblem = false" |
| | | >ç¡®å®</el-button |
| | | > |
| | | </span> |
| | | </el-dialog> |
| | | </GlobalWindow> |
| | | </template> |
| | | |
| | | <script> |
| | | import GlobalWindow from '@/components/common/GlobalWindow' |
| | | import { |
| | | getVisitedDetail, |
| | | approveDo |
| | | } from '@/api' |
| | | export default { |
| | | components: { GlobalWindow }, |
| | | data () { |
| | | return { |
| | | id: '', |
| | | type: '', |
| | | |
| | | title: '访客é¢çº¦è¯¦æ
', |
| | | isShowModal: false, |
| | | info: {}, |
| | | isShowAppr: false, |
| | | apprTitle: 'åæ', |
| | | subLoading: false, |
| | | param: {}, |
| | | |
| | | isShowProblem: false, |
| | | rules: { |
| | | checkInfo: [{ required: true, message: '请è¾å
¥', trigger: 'blur' }] |
| | | }, |
| | | statusMap: { |
| | | 0: 'å¾
审æ¹', |
| | | 1: '审æ¹ä¸', |
| | | 2: '审æ¹éè¿', |
| | | 3: 'å®¡æ¹æªéè¿', |
| | | 4: '已忶', |
| | | 5: 'ä»äººæç¾', |
| | | 6: 'ä»äººæç»' |
| | | }, |
| | | cateList: { |
| | | 0: '访客ç³è¯·', |
| | | 1: '访客æ¥å¤', |
| | | 2: 'ç¨è½¦ç³è¯·', |
| | | 3: '鿣鿿', |
| | | 4: 'ç©æµè½¦ç³è¯·' |
| | | } |
| | | } |
| | | }, |
| | | methods: { |
| | | onSubAppr () { |
| | | this.$refs.ruleForm.validate((valid) => { |
| | | if (!valid) { |
| | | return |
| | | } |
| | | this.$dialog.actionConfirm('æä½ç¡®è®¤', this.param.status === 2 ? 'æ¨ç¡®è®¤åæè¯¥ç³è¯·åï¼' : 'æ¨ç¡®è®¤æç»è¯¥ç³è¯·åï¼') |
| | | .then(() => { |
| | | this.subLoading = true |
| | | approveDo({ |
| | | objId: this.id, |
| | | objType: this.info.type, |
| | | status: this.param.status, |
| | | checkInfo: this.param.checkInfo |
| | | }) |
| | | .then(res => { |
| | | this.subLoading = false |
| | | this.$tip.apiSuccess('å¤çæå') |
| | | this.getDetail() |
| | | this.isShowAppr = false |
| | | }) |
| | | .finally(() => { |
| | | this.subLoading = false |
| | | }) |
| | | }) |
| | | }) |
| | | }, |
| | | getDetail () { |
| | | const { id, type } = this |
| | | console.log(id, type) |
| | | switch (type) { |
| | | case 0: |
| | | getVisitedDetail({ id }).then(res => { |
| | | this.info = res |
| | | }) |
| | | break |
| | | |
| | | default: |
| | | break |
| | | } |
| | | }, |
| | | handleAppr (val) { |
| | | this.$set(this.param, 'status', val) |
| | | this.isShowAppr = true |
| | | }, |
| | | confirm () { |
| | | console.log('--') |
| | | }, |
| | | handleTransfer () { |
| | | this.isShowProblem = true |
| | | }, |
| | | reject () { }, |
| | | handleAvatarSuccess () { }, |
| | | beforeAvatarUpload () { } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | .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 { |
| | | 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% - 36px); |
| | | 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: #00ba67; |
| | | } |
| | | } |
| | | .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; |
| | | .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> |