工单管理1/2

This commit is contained in:
xiao-fajia 2024-09-12 18:29:04 +08:00
parent 631f4aa18a
commit 38031ad305
14 changed files with 619 additions and 3 deletions

View File

@ -0,0 +1,22 @@
<template>
<el-select v-model="selected" clearable filterable >
<el-option v-for="user in userList" :key="user.id" :label="user.name" :value="user.id" />
</el-select>
</template>
<script>
export default {
name: "UserChoose",
data() {
return {
userList: [],
selected: undefined,
}
},
methods: {}
}
</script>
<style scoped lang="scss">
</style>

View File

@ -109,7 +109,7 @@
<script>
import SupplierChoose from "@/views/repair/stockOperate/Components/SupplierChoose.vue";
import SupplierChoose from "@/views/repair/Components/SupplierChoose.vue";
import CorpChoose from "@/views/repair/Components/CorpChoose.vue";
import StaffChoose from "@/views/repair/Components/StaffChoose.vue";

View File

@ -61,7 +61,7 @@
import StaffChoose from "@/views/repair/Components/StaffChoose.vue";
import PartChoose from "@/views/repair/Components/PartChoose.vue";
import SoTable from "@/views/repair/stockOperate/Components/SoTable.vue";
import SupplierChoose from "@/views/repair/stockOperate/Components/SupplierChoose.vue";
import SupplierChoose from "@/views/repair/Components/SupplierChoose.vue";
import {createUniqueCodeByHead} from "@/utils/createUniqueCode";
export default {

View File

@ -58,7 +58,7 @@
<script>
import CorpChoose from "@/views/repair/Components/CorpChoose.vue";
import SupplierChoose from "@/views/repair/stockOperate/Components/SupplierChoose.vue";
import SupplierChoose from "@/views/repair/Components/SupplierChoose.vue";
import StaffChoose from "@/views/repair/Components/StaffChoose.vue";
export default {

View File

@ -0,0 +1,77 @@
<template>
<div>
<el-table v-loading="loading" :data="list" :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="getLabelName">
<PartChoose />
</el-table-column>
<el-table-column label="规格" />
<el-table-column label="编码" />
<el-table-column label="数量" />
<el-table-column label="单位" />
<el-table-column label="折扣" />
<el-table-column label="金额" />
<el-table-column label="施工人员" />
<el-table-column label="销售人员" />
<el-table-column label="类型" />
<el-table-column label="账类" />
<el-table-column label="状态" />
<el-table-column label="备注" />
<el-table-column label="操作" fixed="right" align="center" width="150">
<template v-slot="scope">
<el-button size="mini" type="text" icon="el-icon-delete"
>新增
</el-button>
<el-button size="mini" type="text" icon="el-icon-delete"
>删除
</el-button>
</template>
</el-table-column>
</el-table>
</div>
</template>
<script>
import PartChoose from "@/views/repair/Components/PartChoose.vue";
export default {
name: "TicketItem",
components: {PartChoose},
props:{
itemType:{
type: String,
defaultValue: 'project',
required: true
}
},
data() {
return {
loading: false,
list: []
}
},
computed:{
getLabelName(){
switch (this.itemType){
case "project":
return "维修项目";
case "part":
return "维修配件";
case "other":
return "附加费用";
default:
return '';
}
}
},
methods: {}
}
</script>
<style scoped lang="scss">
</style>

View File

@ -0,0 +1,76 @@
<template>
<div>
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="90px">
<el-form-item label="关键字" prop="soNo">
<el-input v-model="queryParams.soNo" style="width: 18rem" placeholder="请输入单号、备注"/>
</el-form-item>
<el-form-item label="日期" prop="searchTimeArray">
<el-date-picker
v-model="queryParams.searchTimeArray"
type="daterange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期">
</el-date-picker>
</el-form-item>
<el-form-item v-if="TicketType === 'tp'" label="服务顾问" prop="userId">
<StaffChoose />
</el-form-item>
<el-form-item v-if="!(TicketType === 'tv')" label="维修类别" prop="userId">
<StaffChoose />
</el-form-item>
<el-form-item label="门店" prop="userId">
<SupplierChoose />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" >搜索</el-button>
<el-button icon="el-icon-refresh" >重置</el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5" v-if="!(TicketType === 'tv')">
<el-button type="primary" plain icon="el-icon-download" size="mini"
>导出
</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch"></right-toolbar>
</el-row>
<TicketTable :ticket-type="TicketType"/>
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize"
/>
</div>
</template>
<script>
import StaffChoose from "@/views/repair/Components/StaffChoose.vue";
import SupplierChoose from "@/views/repair/Components/SupplierChoose.vue";
import TicketTable from "@/views/repair/tickets/Components/TicketTable.vue";
export default {
name: "TicketSearch",
components: {
TicketTable,
StaffChoose,
SupplierChoose
},
props:{
TicketType:{
type: String,
defaultValue: 'tp',
required: true
}
},
data() {
return {
queryParams:{},
showSearch: true,
total: 0,
}
},
methods: {}
}
</script>
<style scoped lang="scss">
</style>

View File

@ -0,0 +1,128 @@
<template>
<div>
<el-table v-if="TicketType === 'tp'" v-loading="loading" :data="list" :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="soNo" width="180" />
<el-table-column label="单号" align="center" prop="soNo" width="180" />
<el-table-column label="车牌号" align="center" prop="soNo" width="180" />
<el-table-column label="姓名" align="center" prop="soNo" width="180" />
<el-table-column label="车系" align="center" prop="soNo" width="180" />
<el-table-column label="手机号" align="center" prop="soNo" width="180" />
<el-table-column label="消费项目" align="center" prop="soNo" width="180" />
<el-table-column label="编码" align="center" prop="soNo" width="180" />
<el-table-column label="规格" align="center" prop="soNo" width="180" />
<el-table-column label="类型" align="center" prop="soNo" width="180" />
<el-table-column label="数量" align="center" prop="soNo" width="180" />
<el-table-column label="金额" align="center" prop="soNo" width="180" />
<el-table-column label="合计" align="center" prop="soNo" width="180" />
<el-table-column label="成本" align="center" prop="soNo" width="180" />
<el-table-column label="毛利" align="center" prop="soNo" width="180" />
<el-table-column label="支付金额" align="center" prop="soNo" width="180" />
<el-table-column label="优惠" align="center" prop="soNo" width="180" />
<el-table-column label="本次里程" align="center" prop="soNo" width="180" />
<el-table-column label="销售人员" align="center" prop="soNo" width="180" />
<el-table-column label="施工人员" align="center" prop="soNo" width="180" />
<el-table-column label="备注" align="center" prop="soNo" width="180" />
<el-table-column label="结算时间" align="center" prop="soNo" width="180" />
<el-table-column label="创建时间" align="center" prop="soNo" width="180" />
<el-table-column label="业务来源" align="center" prop="soNo" width="180" />
<el-table-column label="门店" align="center" prop="soNo" width="180" />
<el-table-column label="结算人" align="center" prop="soNo" width="180" />
<el-table-column label="操作" fixed="right" align="center" width="180">
<template v-slot="scope">
<el-button size="mini" type="text" icon="el-icon-delete"
>查看
</el-button>
<el-button size="mini" type="text" icon="el-icon-delete"
>返结
</el-button>
<el-button size="mini" type="text" icon="el-icon-delete"
>作废
</el-button>
</template>
</el-table-column>
</el-table>
<el-table v-if="TicketType === 'tu'" v-loading="loading" :data="list" :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="soNo" width="180" />
<el-table-column label="维修类别" align="center" prop="soNo" width="180" />
<el-table-column label="状态" align="center" prop="soNo" width="180" />
<el-table-column label="客户名称" align="center" prop="soNo" width="180" />
<el-table-column label="车牌号" align="center" prop="soNo" width="180" />
<el-table-column label="车系" align="center" prop="soNo" width="180" />
<el-table-column label="手机号" align="center" prop="soNo" width="180" />
<el-table-column label="创建时间" align="center" prop="soNo" width="180" />
<el-table-column label="预计完工" align="center" prop="soNo" width="180" />
<el-table-column label="合计金额" align="center" prop="soNo" width="180" />
<el-table-column label="参考成本" align="center" prop="soNo" width="180" />
<el-table-column label="参考毛利" align="center" prop="soNo" width="180" />
<el-table-column label="领料状态" align="center" prop="soNo" width="180" />
<el-table-column label="服务顾问" align="center" prop="soNo" width="180" />
<el-table-column label="备注" align="center" prop="soNo" width="180" />
<el-table-column label="所属门店" align="center" prop="soNo" width="180" />
<el-table-column label="操作" fixed="right" align="center" width="180">
<template v-slot="scope">
<el-button size="mini" type="text" icon="el-icon-delete"
>查看
</el-button>
<el-button size="mini" type="text" icon="el-icon-delete"
>结算
</el-button>
</template>
</el-table-column>
</el-table>
<el-table v-if="TicketType === 'tv'" v-loading="loading" :data="list" :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="soNo" width="180" />
<el-table-column label="车牌" align="center" prop="soNo" width="180" />
<el-table-column label="客户" align="center" prop="soNo" width="180" />
<el-table-column label="数量" align="center" prop="soNo" width="180" />
<el-table-column label="应收" align="center" prop="soNo" width="180" />
<el-table-column label="现金" align="center" prop="soNo" width="180" />
<el-table-column label="刷银行卡" align="center" prop="soNo" width="180" />
<el-table-column label="挂账金额" align="center" prop="soNo" width="180" />
<el-table-column label="优惠" align="center" prop="soNo" width="180" />
<el-table-column label="折扣" align="center" prop="soNo" width="180" />
<el-table-column label="实收" align="center" prop="soNo" width="180" />
<el-table-column label="作废时间" align="center" prop="soNo" width="180" />
<el-table-column label="作废人" align="center" prop="soNo" width="180" />
<el-table-column label="作废备注" align="center" prop="soNo" width="180" />
</el-table>
</div>
</template>
<script>
export default {
name: "TicketTable",
props:{
TicketType: {
type: String,
defaultValue: 'tp',
required: true
}
},
data() {
return {
loading: false,
list: [],
}
},
methods: {}
}
</script>
<style scoped lang="scss">
</style>

View File

@ -0,0 +1,201 @@
<template>
<div>
<el-descriptions class="margin-top" :column="4" :size="'medium'" border style="margin-bottom: 1rem">
<template slot="extra">
<el-button v-if="createTicketType" type="success" size="small">新增客户信息</el-button>
<el-button v-if="createTicketType" type="primary" size="small">完善更多客户信息</el-button>
<el-button type="primary" size="small">选择业务</el-button>
</template>
<el-descriptions-item>
<template slot="label">
用户选择
</template>
<UserChoose />
</el-descriptions-item>
<el-descriptions-item>
<template slot="label">
姓名
</template>
<el-input disabled />
</el-descriptions-item>
<el-descriptions-item>
<template slot="label">
手机
</template>
<el-input disabled />
</el-descriptions-item>
<el-descriptions-item>
<template slot="label">
车架号
</template>
<el-input disabled />
</el-descriptions-item>
<el-descriptions-item>
<template slot="label">
车牌
</template>
<el-input disabled />
</el-descriptions-item>
<el-descriptions-item>
<template slot="label">
品牌车系
</template>
<el-input disabled />
</el-descriptions-item>
<el-descriptions-item>
<template slot="label">
保险到期
</template>
<el-input disabled />
</el-descriptions-item>
<el-descriptions-item>
<template slot="label">
年检到期
</template>
<el-input disabled />
</el-descriptions-item>
<el-descriptions-item>
<template slot="label">
进厂时间
</template>
<el-input disabled />
</el-descriptions-item>
<el-descriptions-item>
<template slot="label">
预计完工
</template>
<el-input disabled />
</el-descriptions-item>
<el-descriptions-item>
<template slot="label">
上次里程
</template>
<el-input disabled />
</el-descriptions-item>
<el-descriptions-item>
<template slot="label">
本次里程
</template>
<el-input disabled />
</el-descriptions-item>
<el-descriptions-item :span="3">
<template slot="label">
备注
</template>
<el-input disabled />
</el-descriptions-item>
<el-descriptions-item>
<template slot="label">
服务顾问
</template>
<StaffChoose />
</el-descriptions-item>
</el-descriptions>
<el-row v-if="createTicketType" :gutter="5" style="margin-bottom: 1rem">
<el-col :span="4.8">
<el-button size="small">维修建议</el-button>
</el-col>
<el-col :span="4.8">
<el-button size="small">质保说明</el-button>
</el-col>
<el-col :span="4.8">
<el-button size="small">终检</el-button>
</el-col>
<el-col :span="4.8">
<el-select size="small">
</el-select>
</el-col>
<el-col :span="4.8">
<el-select size="small">
</el-select>
</el-col>
</el-row>
<TicketItem item-type="project" />
<TicketItem v-if="createTicketType" item-type="part" />
<TicketItem v-if="createTicketType" item-type="other" />
<el-row :gutter="createTicketType ? 2 : 3" style="margin-top: 1rem">
<el-col :span="createTicketType ? 12 : 16">
<el-descriptions class="margin-top" :column="createTicketType ? 2 : 3" border :size="'medium'" style="margin-bottom: 1rem">
<el-descriptions-item>
<template slot="label">
工单号
</template>
<el-select size="small" >
</el-select>
</el-descriptions-item>
<el-descriptions-item>
<template slot="label">
时间
</template>
<el-input size="small" />
</el-descriptions-item>
<el-descriptions-item v-if="!createTicketType">
<template slot="label">
备注
</template>
<el-input />
</el-descriptions-item>
</el-descriptions>
</el-col>
<el-col v-if="createTicketType" :span="12">
<el-descriptions class="margin-top" :column="5" :size="'medium'"
style="margin-left: 1rem;margin-top: 1rem">
<el-descriptions-item label="数量">0</el-descriptions-item>
<el-descriptions-item label="项目">0</el-descriptions-item>
<el-descriptions-item label="配件">0</el-descriptions-item>
<el-descriptions-item label="附加">0</el-descriptions-item>
<el-descriptions-item label="合计">0</el-descriptions-item>
</el-descriptions>
</el-col>
<el-col v-else :span="8" style="margin-top:1rem;display: flex;justify-content: right">
<el-button type="danger">结算</el-button>
<el-button type="warning">挂单</el-button>
</el-col>
</el-row>
<el-row v-if="createTicketType" :gutter="2">
<el-col :span="12">
<el-descriptions border class="margin-top" :column="1" :size="'medium'">
<el-descriptions-item>
<template slot="label">
备注
</template>
<el-input />
</el-descriptions-item>
</el-descriptions>
</el-col>
<el-col :span="12" style="margin-top:1rem;display: flex;justify-content: right">
<el-button type="danger">结算</el-button>
<el-button type="success">完成</el-button>
<el-button type="primary">通知施工</el-button>
<el-button type="primary">领料</el-button>
<el-button type="primary">退料</el-button>
</el-col>
</el-row>
</div>
</template>
<script>
import UserChoose from "@/views/repair/Components/UserChoose.vue";
import StaffChoose from "@/views/repair/Components/StaffChoose.vue";
import TicketItem from "@/views/repair/tickets/Components/TicketItem.vue";
export default {
name: "UserInfo",
components: {TicketItem, StaffChoose, UserChoose},
props:{
createTicketType:{
type: Boolean,
defaultValue: true,
required: true,
}
},
data() {
return {}
},
methods: {}
}
</script>
<style scoped lang="scss">
</style>

View File

@ -0,0 +1,23 @@
<template>
<div class="app-container">
<UserInfo :create-ticket-type="true"/>
</div>
</template>
<script>
import UserInfo from "@/views/repair/tickets/Components/UserInfo.vue";
import TicketItem from "@/views/repair/tickets/Components/TicketItem.vue";
export default {
name: "CreateTicket",
components: {TicketItem, UserInfo},
data() {
return {}
},
methods: {}
}
</script>
<style scoped lang="scss">
</style>

View File

@ -0,0 +1,22 @@
<template>
<div class="app-container">
<TicketSearch :ticket-type="'tp'"/>
</div>
</template>
<script>
import TicketSearch from "@/views/repair/tickets/Components/TicketSearch.vue";
export default {
name: "PaidTicket",
components: {TicketSearch},
data() {
return {}
},
methods: {}
}
</script>
<style scoped lang="scss">
</style>

View File

@ -0,0 +1,23 @@
<template>
<div class="app-container">
<UserInfo :create-ticket-type="false" />
</div>
</template>
<script>
import UserInfo from "@/views/repair/tickets/Components/UserInfo.vue";
import TicketItem from "@/views/repair/tickets/Components/TicketItem.vue";
export default {
name: "QuickCreateTicket",
components: {TicketItem, UserInfo},
data() {
return {}
},
methods: {}
}
</script>
<style scoped lang="scss">
</style>

View File

@ -0,0 +1,22 @@
<template>
<div class="app-container">
<TicketSearch :ticket-type="'tu'"/>
</div>
</template>
<script>
import TicketSearch from "@/views/repair/tickets/Components/TicketSearch.vue";
export default {
name: "UnpaidTicket",
components: {TicketSearch},
data() {
return {}
},
methods: {}
}
</script>
<style scoped lang="scss">
</style>

View File

@ -0,0 +1,22 @@
<template>
<div class="app-container">
<TicketSearch :ticket-type="'tv'"/>
</div>
</template>
<script>
import TicketSearch from "@/views/repair/tickets/Components/TicketSearch.vue";
export default {
name: "VoidTicket",
components: {TicketSearch},
data() {
return {}
},
methods: {}
}
</script>
<style scoped lang="scss">
</style>