Compare commits

...

4 Commits

Author SHA1 Message Date
xiaofajia
320b51067d 新增维修进度查看 2024-11-05 17:10:50 +08:00
xiaofajia
04881395b4 修改按钮权限和展示 2024-11-05 16:37:37 +08:00
xiaofajia
091f3f7665 修改按钮权限和展示 2024-11-05 14:58:55 +08:00
xiaofajia
3115710fcb 修改重新派工逻辑 2024-11-05 11:18:36 +08:00
6 changed files with 249 additions and 92 deletions

View File

@ -43,3 +43,11 @@ export function removeItemById(id){
method: 'delete'
})
}
// 查某工单维修项目进度
export function getProjList(ticketId){
return request({
url: preUrl + "/getProjList?ticketId=" + ticketId,
method: 'get'
})
}

View File

@ -41,78 +41,64 @@
<el-table-column label="手机号" align="center" prop="userMobile" width="180"/>
<el-table-column label="操作" fixed="right" align="center" width="200">
<template slot-scope="scope">
<!-- 都有 -->
<el-button size="mini" type="text" icon="el-icon-view" @click="handleShow(scope.row)"
>查看
</el-button>
<el-button v-hasPermi="['repair:tkm:edit']" size="mini" type="text" icon="el-icon-setting"
@click="handleEditTicket(scope.row)">
编辑工单
</el-button>
<el-button v-hasPermi="['repair:tkm:remove']" size="mini" type="text" icon="el-icon-remove"
@click="handleRemove(scope.row)">
删除
</el-button>
<el-button v-hasPermi="['repair:tkm:void']" size="mini" type="text" icon="el-icon-delete"
@click="handleVoid(scope.row)">
作废
</el-button>
<el-button size="mini" type="text" icon="el-icon-refresh" v-hasPermi="['repair:tkm:editRecord']"
@click="handleEditRecord(scope.row)">
维修记录设置
</el-button>
<!-- 维修工才有 -->
<el-button
v-if="(scope.row.ticketsWorkStatus === '01' && userRole === 'repair_staff') && nowUser.id === scope.row.nowRepairId"
size="mini" type="text" icon="el-icon-check" @click="handleTake(scope.row)">
接单
</el-button>
<!-- 服务顾问才有 -->
<el-button v-if="userRole === 'service_advisor' && scope.row.ticketsWorkStatus === '01'" size="mini"
type="text" icon="el-icon-check" @click="handleNotify(scope.row)">
通知施工
</el-button>
<el-button size="mini"
v-if="scope.row.ticketsWorkStatus !== '01' &&userRole === 'repair_staff' && !isFinish && nowUser.id === scope.row.nowRepairId"
type="text" icon="el-icon-monitor" @click="handleRecord(scope.row, 'kssg')">
开始施工
</el-button>
<el-button size="mini"
v-if=" scope.row.ticketsWorkStatus !== '01' && userRole === 'repair_staff' && !isFinish && nowUser.id === scope.row.nowRepairId"
type="text" icon="el-icon-monitor" @click="handleRecord(scope.row, 'sgz')">
过程记录
</el-button>
<el-button size="mini"
v-if="scope.row.ticketsWorkStatus !== '01' && userRole === 'repair_staff' && !isFinish && nowUser.id === scope.row.nowRepairId"
type="text" icon="el-icon-monitor" @click="handleRecord(scope.row, 'sgwczj')">
施工完成
</el-button>
<!-- <el-button @click="handleRecord(scope.row, 'zj')" size="mini" type="text" icon="el-icon-monitor" v-if="userRole === 'general_inspection' && scope.row.ticketsWorkStatus === '05'">-->
<!-- 终检-->
<!-- </el-button>-->
<el-button @click="handleReTake(scope.row)" size="mini" type="text" icon="el-icon-refresh"
v-if="(userRole === 'repair_staff' ? (leader ? !isFinish : false) : false) && !(scope.row.ticketsWorkStatus !== '01' && userRole === 'repair_staff' && !isFinish)">
重新指派
</el-button>
<el-button
v-if="userRole === 'repair_staff' && !isFinish && scope.row.ticketsWorkStatus === '01' && !(nowUser.id === scope.row.nowRepairId)"
@click="handleGet(scope.row)" size="mini" type="text" icon="el-icon-document-add">
申请配件
<!-- 服务顾问总检班组长才有 -->
<el-button v-if="(userRole !== 'repair_staff' && scope.row.ticketsWorkStatus !== '01') || (userRole === 'repair_staff' && leader && nowUser.id === scope.row.nowRepairId && scope.row.ticketsWorkStatus !== '04')" @click="handleReTake(scope.row)" size="mini" type="text" icon="el-icon-refresh"
>{{ userRole === 'general_inspection' ? "内返派工" : "修改派工" }}
</el-button>
<el-dropdown
v-if="(scope.row.ticketsWorkStatus !== '01' && ((userRole === 'service_advisor' || userRole === 'general_inspection') && !isFinish)) || (userRole === 'repair_staff' && !isFinish && scope.row.ticketsWorkStatus !== '01')"
@command="(command) => handleCommand(command, scope.$index, scope.row)">
<el-button size="mini" type="text" icon="el-icon-d-arrow-right">更多</el-button>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item v-if="!isFinish && scope.row.ticketsWorkStatus !== '01' && userRole === 'repair_staff'"
command="handleGet" size="mini" type="text" icon="el-icon-document-add"
>申请配件
<!-- 权限控制 -->
<el-dropdown-item command="handleRemove" size="mini" type="text" icon="el-icon-remove" v-hasPermi="['repair:tkm:remove']">
删除
</el-dropdown-item>
<!-- <el-dropdown-item v-if="scope.row.ticketsWorkStatus !== '01' && userRole === 'repair_staff'" command="handleBack" size="mini" type="text" icon="el-icon-document-delete"-->
<!-- >申请退料-->
<!-- </el-dropdown-item>-->
<!-- 还要判断是不是员工 -->
<el-dropdown-item
v-if="userRole !== 'repair_staff' && !isFinish && scope.row.ticketsWorkStatus !== '01'"
command="handleReTake" size="mini" type="text" icon="el-icon-refresh"
>重新指派
<!-- 权限控制 -->
<el-dropdown-item command="handleVoid" v-hasPermi="['repair:tkm:void']" size="mini" type="text" icon="el-icon-delete">
作废
</el-dropdown-item>
<!-- 权限控制 -->
<el-dropdown-item command="handleEditTicket" v-hasPermi="['repair:tkm:edit']" size="mini" type="text" icon="el-icon-setting">
编辑工单
</el-dropdown-item>
<!-- 权限控制 -->
<el-dropdown-item command="handleEditRecord" size="mini" type="text" icon="el-icon-refresh" v-hasPermi="['repair:tkm:editRecord']">
维修记录设置
</el-dropdown-item>
<!-- 权限控制 -->
<el-dropdown-item command="handleProgress" size="mini" type="text" icon="el-icon-s-operation" v-hasPermi="['repair:tkm:progress']">
维修项目进度
</el-dropdown-item>
<!-- 维修工才有 -->
<el-dropdown-item command="handleGet" size="mini" type="text" icon="el-icon-document-add" v-if="userRole === 'repair_staff'">
申请配件
</el-dropdown-item>
<!-- 维修工才有 -->
<el-dropdown-item command="handleRecordOne" size="mini" type="text" icon="el-icon-monitor" v-if="userRole === 'repair_staff' && nowUser.id === scope.row.nowRepairId && scope.row.ticketsWorkStatus !== '01'">
开始施工
</el-dropdown-item>
<!-- 维修工才有 -->
<el-dropdown-item command="handleRecordTwo" size="mini" type="text" icon="el-icon-monitor" v-if="userRole === 'repair_staff' && nowUser.id === scope.row.nowRepairId && scope.row.ticketsWorkStatus !== '01'">
过程记录
</el-dropdown-item>
<!-- 维修工才有 -->
<el-dropdown-item command="handleRecordThree" size="mini" type="text" icon="el-icon-monitor" v-if="userRole === 'repair_staff' && nowUser.id === scope.row.nowRepairId && scope.row.ticketsWorkStatus !== '01'">
施工完成
</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
@ -124,7 +110,7 @@
@pagination="listTickets"
/>
<TicketsShow ref="ticketsShow" :user-role="userRole"/>
<UpdateRepair ref="updateRepair" @success="listTickets"/>
<UpdateRepair :user-role="userRole" ref="updateRepair" @success="listTickets"/>
<TWOperate ref="twOperate" @success="listTickets"/>
<UpdateRecord ref="updateRecord" @success="listTickets"/>
@ -184,6 +170,8 @@
</el-button>
</div>
</el-dialog>
<TicketProgress ref="ticketProgress" />
</div>
</template>
@ -199,14 +187,12 @@ import UpdateRecord from "@/views/repair/tickets/form/UpdateRecord.vue";
import {getUserProfile} from "@/api/system/user";
import RecordSetting from "@/views/repair/tickets/form/RecordSetting.vue";
import EditTickets from "@/views/repair/tickets/form/EditTickets.vue";
import TicketProgress from "@/views/repair/tickets/Components/TicketProgress.vue";
export default {
name: "TicketManagerItem",
components: {EditTickets, RecordSetting, UpdateRecord, TWOperate, UpdateRepair, TicketsShow},
components: {TicketProgress, EditTickets, RecordSetting, UpdateRecord, TWOperate, UpdateRepair, TicketsShow},
props: {
isFinish: {
type: Boolean,
},
userRole: {
type: String,
default: '',
@ -223,7 +209,7 @@ export default {
pageSize: 10,
ticketNo: null,
searchTimeArray: [],
isFinish: this.isFinish ? "1" : "0",
selectType: this.isType
},
showSearch: true,
loading: false,
@ -356,17 +342,32 @@ export default {
//
handleCommand(command, index, row) {
switch (command) {
case 'handleReTake':
this.handleReTake(row)
case 'handleRemove':
this.handleRemove(row)
break
case 'handleVoid':
this.handleVoid(row)
break
case 'handleEditTicket':
this.handleEditTicket(row)
break
case 'handleEditRecord':
this.handleEditRecord(row)
break
case 'handleGet':
this.handleGet(row)
break
case 'handleBack':
this.handleBack(row)
case 'handleRecordOne':
this.handleRecord(row, 'kssg')
break
case 'handleEditRecord':
this.handleEditRecord(row)
case 'handleRecordTwo':
this.handleRecord(row, 'sgz')
break
case 'handleRecordThree':
this.handleRecord(row, 'sgwczj')
break
case 'handleProgress':
this.handleProgress(row)
break
default:
break
@ -495,6 +496,9 @@ export default {
} catch {
}
},
handleProgress(row){
this.$refs.ticketProgress.open(row.id)
}
}
}
</script>

View File

@ -0,0 +1,73 @@
<template>
<div>
<el-dialog title="维修项目进度" :visible.sync="dialogVisible" width="60%" v-dialogDrag append-to-body>
<el-table :data="list" v-loading="tableLoading" :stripe="true" :show-overflow-tooltip="true">
<el-table-column label="序号" align="center">
<template scope="scope">
<span>{{ scope.$index + 1 }}</span>
</template>
</el-table-column>
<el-table-column label="维修项目" align="center" prop="itemName" />
<el-table-column label="维修状态" align="center">
<el-table-column label="待维修" align="center">
<template slot-scope="scope">
<span style="font-size: 20px">{{scope.row.itemStatus === "01" ? getStatus(scope.row.itemStatus) : ""}}</span>
</template>
</el-table-column>
<el-table-column label="维修中" align="center">
<template slot-scope="scope">
<span style="font-size: 20px;color: #ffd51c">{{scope.row.itemStatus === "02" ? getStatus(scope.row.itemStatus) : ""}}</span>
</template>
</el-table-column>
<el-table-column label="已完成" align="center">
<template slot-scope="scope">
<span style="font-size: 20px;color: #3aff70">{{scope.row.itemStatus === "03" ? getStatus(scope.row.itemStatus) : ""}}</span>
</template>
</el-table-column>
</el-table-column>
</el-table>
</el-dialog>
</div>
</template>
<script>
import {getProjectList} from "@/api/repair/tickets/TicketsItem";
export default {
name: "TicketProgress",
data() {
return {
dialogVisible: false,
list: [],
tableLoading: false
}
},
methods: {
async open(id) {
try {
this.dialogVisible = true
this.tableLoading = true
const res = await getProjectList(id)
this.list = res.data
} finally {
this.tableLoading = false
}
},
getStatus(data){
switch (data){
case '01':
return '-'
case '02':
return '°'
case '03':
return '√'
}
}
}
}
</script>
<style scoped lang="scss">
</style>

View File

@ -1,11 +1,14 @@
<template>
<div class="app-container">
<el-tabs v-model="activeTab">
<el-tab-pane label="待完成工单" name="unFinish">
<TicketManagerItem :is-finish="false" :user-role="userRole"/>
<el-tab-pane label="全部工单" name="finish">
<TicketManagerItem :is-type="'all'" :user-role="userRole"/>
</el-tab-pane>
<el-tab-pane label="已完成工单" name="finish">
<TicketManagerItem :is-finish="true" :user-role="userRole"/>
<el-tab-pane label="待处理工单" name="unFinish" v-if="userRole === 'repair_staff'">
<TicketManagerItem :is-type="'waiting'" :user-role="userRole"/>
</el-tab-pane>
<el-tab-pane label="待处理工单" name="unInspection" v-if="userRole !== 'repair_staff'">
<TicketFinishManager :user-role="userRole" />
</el-tab-pane>
<el-tab-pane label="配件申请单" name="getApply" v-if="userRole !== 'repair_staff'">
<TicketWares :type="true" :user-role="userRole"/>
@ -16,12 +19,6 @@
<el-tab-pane label="退料确认" name="finishBackWares" v-if="userRole === 'repair_staff'">
<GetAndBackWares :type="false" />
</el-tab-pane>
<el-tab-pane :label="userRole === 'service_advisor' ? '可交车工单' : '待总检工单'" name="unInspection" v-if="userRole !== 'repair_staff'">
<TicketFinishManager :user-role="userRole" />
</el-tab-pane>
<!-- <el-tab-pane label="退料申请单" name="backApply">-->
<!-- <TicketWares :type="false" :user-role="userRole"/>-->
<!-- </el-tab-pane>-->
</el-tabs>
</div>
</template>
@ -38,7 +35,7 @@ export default {
components: {TicketFinishManager, GetAndBackWares, TicketWares, TicketManagerItem},
data() {
return {
activeTab: 'unFinish',
activeTab: 'finish',
userRole: "",
exportRole:[3, 4]
}

View File

@ -41,24 +41,36 @@
<el-table-column label="手机号" align="center" prop="userMobile" width="180"/>
<el-table-column label="操作" fixed="right" align="center" width="200">
<template slot-scope="scope">
<!-- 都有 -->
<el-button size="mini" type="text" icon="el-icon-view" @click="handleShow(scope.row)"
>查看
</el-button>
<el-button @click="handleEdit(scope.row)" v-if="userRole === 'service_advisor'" size="mini" type="text" icon="el-icon-setting">
编辑工单
</el-button>
<el-button v-if="userRole === 'service_advisor'" size="mini" type="text" icon="el-icon-refresh" @click="handleEditRecord(scope.row)">
维修记录设置
</el-button>
<el-button v-if="!(userRole === 'service_advisor' && scope.row.ticketsWorkStatus === '03')" size="mini" type="text" icon="el-icon-edit-outline" @click="handleDispose(scope.row)">
<!-- 能查到数据就能处理 -->
<el-button v-if="scope.row.ticketsWorkStatus !== '03'" size="mini" type="text" icon="el-icon-edit-outline" @click="handleDispose(scope.row)">
处理
</el-button>
<el-button size="mini" type="text" icon="el-icon-refresh" v-if="scope.row.ticketsWorkStatus !== '03'" @click="handleReTake(scope.row)">
重新指派
</el-button>
<el-button size="mini" @click="noticeCus(scope.row)" type="text" icon="el-icon-finished" v-if="userRole === 'service_advisor' && scope.row.ticketsWorkStatus === '03'">
通知客户取车
</el-button>
<el-dropdown
@command="(command) => handleCommand(command, scope.$index, scope.row)">
<el-button size="mini" type="text" icon="el-icon-d-arrow-right">更多</el-button>
<el-dropdown-menu slot="dropdown">
<!-- 能查到就可以操作 -->
<el-dropdown-item command="handleReTake" size="mini" type="text" icon="el-icon-refresh">
{{userRole === 'service_advisor' ? "修改派工" : "内返派工"}}
</el-dropdown-item>
<!-- 权限控制 -->
<el-dropdown-item command="handleEdit" size="mini" type="text" icon="el-icon-setting" v-hasPermi="['repair:tkm:edit']">
编辑工单
</el-dropdown-item>
<!-- 权限控制 -->
<el-dropdown-item command="handleEditRecord" size="mini" type="text" icon="el-icon-refresh" v-hasPermi="['repair:tkm:editRecord']">
维修记录设置
</el-dropdown-item>
<!-- 服务顾问才有 -->
<el-dropdown-item command="noticeCus" type="text" icon="el-icon-finished" v-if="userRole === 'service_advisor' && scope.row.ticketsWorkStatus === '03'">
通知客户取车
</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</template>
</el-table-column>
</el-table>
@ -128,7 +140,7 @@
</div>
</el-dialog>
<UpdateRepair ref="updateRepair" @success="getList"/>
<UpdateRepair ref="updateRepair" @success="getList" :user-role="userRole"/>
<EditTickets ref="editTickets" @success="getList"/>
<RecordSetting ref="recordSet" />
</div>
@ -296,6 +308,22 @@ export default {
handleEditRecord(row){
this.$refs.recordSet.open(row.id)
},
handleCommand(command, index, row){
switch (command){
case 'handleReTake':
this.handleReTake(row)
break
case 'handleEdit':
this.handleEdit(row)
break
case 'handleEditRecord':
this.handleEditRecord(row)
break
case 'noticeCus':
this.noticeCus(row)
break
}
}
}
}
</script>

View File

@ -115,6 +115,35 @@
</el-descriptions>
</div>
</el-card>
<el-card class="box-card" v-if="userRole === 'general_inspection'">
<!-- 卡片头 -->
<div slot="header" class="clearfix">
<i class="el-icon-plus"/>
<span>内返信息</span>
</div>
<!-- 卡片内容 -->
<div>
<el-form :inline="true" label-width="30rem" v-model="formData" ref="formRef">
<el-row :gutter="1">
<el-col :span="24">
<el-form-item label="图片">
<ImageUpload v-model="formData.image"/>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="1">
<el-col :span="24">
<el-form-item label="原因">
<el-input style="width: 30rem" type="textarea" v-model="formData.remark"
:autosize="{ minRows: 4, maxRows: 8}"/>
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
</el-card>
<el-card class="box-card">
<!-- 卡片头 -->
<div slot="header" class="clearfix">
@ -164,6 +193,9 @@ import {updateRepair} from "@/api/repair/tickets/Tickets";
export default {
name: "UpdateRepair",
props:{
userRole: String
},
data() {
return {
dialogVisible: false,
@ -176,11 +208,20 @@ export default {
id: null,
nowRepairId: null,
nowRepairName: null,
}
image: null,
remark: null
},
}
},
methods: {
async open(row) {
this.formData = {
id: null,
nowRepairId: null,
nowRepairName: null,
image: null,
remark: null
}
this.dialogVisible = true
if (row) {
try {
@ -204,6 +245,12 @@ export default {
this.$modal.msgError("没有指派员工")
return
}
if (this.formData.image){
const data = this.formData.image.split(",")
this.formData.image = data.map(item => {
return item.replace(process.env.VUE_APP_FILE_API, "")
}).join(",")
}
this.initFormData()
await updateRepair(this.formData)
this.$modal.msgSuccess("指派成功")