维修业务库init

This commit is contained in:
xiao-fajia 2024-09-13 18:31:13 +08:00
parent cea123e213
commit 0f8ceb083f
23 changed files with 368 additions and 51 deletions

View File

@ -67,3 +67,11 @@ export function exportCustomerMainExcel(params) {
responseType: 'blob'
})
}
// 用户列表
export function getCustomerList(){
return request({
url: "/base/custom/list",
method: "get"
})
}

View File

@ -0,0 +1 @@
import request from '@/utils/request'

View File

@ -0,0 +1 @@
import request from '@/utils/request'

View File

@ -0,0 +1 @@
import request from '@/utils/request'

View File

@ -0,0 +1 @@
import request from '@/utils/request'

View File

@ -51,3 +51,11 @@ export function exportBaseSupplierExcel(params) {
responseType: 'blob'
})
}
// 获得所有供应商
export function getBaseSupplierList(){
return request({
url: '/supplier/baseSupplier/list',
method: 'get'
})
}

View File

@ -0,0 +1 @@
import request from '@/utils/request'

View File

@ -0,0 +1 @@
import request from '@/utils/request'

View File

@ -1,10 +1,13 @@
<template>
<el-select v-model="corpSelected" clearable filterable>
<el-option v-for="staff in corpList" :key="staff.id" :label="staff.name" :value="staff.id"/>
<el-option v-for="staff in corpList" :key="staff.id" :label="staff.corpName" :value="staff.id"/>
</el-select>
</template>
<script>
import {getCompanyList} from "@/api/base/company";
export default {
name: "",
data() {
@ -13,7 +16,21 @@ export default {
corpList: null
}
},
methods: {}
watch:{
corpSelected(val) {
const company = this.corpList.find(item => item.id === val);
this.$emit("selected", company);
}
},
mounted() {
this.listCompany()
},
methods: {
async listCompany(){
const res = await getCompanyList();
this.corpList = res.data
}
}
}
</script>

View File

@ -1,6 +1,21 @@
<template>
<el-select v-model="partSelected" clearable filterable style="width: 45rem">
<el-option v-for="part in partList" :key="part.id" :label="part.name" :value="part.id"/>
<el-select v-model="partSelected" ref="selectTable" clearable style="width: 45rem">
<el-option style="display: none" v-for="part in partList" :key="part.id" :label="part.name" :value="part.id"/>
<el-table :data="partList" style="width: 100%" @row-click="handleSelectionChange">
<el-table-column label="序号" align="center">
<template scope="scope">
<span>{{ scope.$index + 1 }}</span>
</template>
</el-table-column>
<el-table-column label="商品名称" prop="name" />
<el-table-column label="规格" prop="name" />
<el-table-column label="商品编码" prop="name" />
<el-table-column label="可用库存" prop="name" />
<el-table-column label="成本" prop="name" />
<el-table-column label="仓库" prop="name" />
</el-table>
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize"
/>
</el-select>
</template>
@ -9,8 +24,16 @@ export default {
name: "PartChoose",
data(){
return{
partSelected: undefined,
partList: null,
partSelected: null,
partList: [
{id: 1, name: '张胜男', age:20, gender: 1},
{id: 2, name: '张胜妇', age:20, gender: 1}
],
queryParams:{
pageNo: 1,
pageSize: 10
},
total: 2
}
},
mounted() {
@ -20,11 +43,18 @@ export default {
// TODO
async listPart(){
},
handleSelectionChange(data){
this.$emit("selected", data)
this.$refs.selectTable.blur()
}
}
}
</script>
<style scoped lang="scss">
.pagination-container{
margin: 0 auto !important;
padding: 0 !important;
}
</style>

View File

@ -0,0 +1,41 @@
<template>
<div>
<el-select v-model="repairSelected">
<el-option v-for="repair in repairList" :key="repair.id" :label="repair.name" :value="repair.id" />
</el-select>
</div>
</template>
<script>
import {getBaseTypeList} from "@/api/base/type";
export default {
name: "RepairTypeChoose",
data() {
return {
repairList: [],
repairSelected: undefined,
}
},
watch:{
repairSelected(val){
const repair = this.repairList.find(item => item.id === val)
this.$emit('selected', repair)
}
},
mounted() {
this.listRepair()
},
methods: {
async listRepair(){
const res = await getBaseTypeList({type: "03"})
this.repairList = res.data
}
}
}
</script>
<style scoped lang="scss">
</style>

View File

@ -1,20 +1,37 @@
<template>
<el-select v-model="supplierSelected">
<el-select v-model="supplierSelected" clearable filterable>
<el-option v-for="supplier in supplierList" :key="supplier.id" :label="supplier.name"
:value="supplier.id"/>
</el-select>
</template>
<script>
import {getBaseSupplierList} from "@/api/repair/supplier";
export default {
name: "",
name: "SupplierChoose",
data() {
return {
supplierSelected: undefined,
supplierList: null
}
},
methods: {}
watch:{
supplierSelected(val) {
const supplier = this.supplierList.find(item => item.id === val);
this.$emit("selected", supplier);
}
},
mounted() {
this.listSupplier()
},
methods: {
async listSupplier() {
const res = await getBaseSupplierList();
this.supplierList = res.data
}
}
}
</script>

View File

@ -1,19 +1,36 @@
<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 v-model="userSelected" clearable filterable >
<el-option v-for="user in userList" :key="user.id" :label="user.cusName" :value="user.id" />
</el-select>
</template>
<script>
import {getCustomerList} from "@/api/base/customer";
export default {
name: "UserChoose",
data() {
return {
userList: [],
selected: undefined,
userSelected: undefined,
}
},
methods: {}
watch:{
userSelected(val){
const user = this.userList.find(item => item.id === val)
this.$emit("selected", user)
}
},
mounted() {
this.listCustomer()
},
methods: {
async listCustomer(){
const res = await getCustomerList()
this.userList = res.data
}
}
}
</script>

View File

@ -0,0 +1,64 @@
<template>
<div>
<el-select class="main-select-tree" clearable ref="selectTree" v-model="warehouseSelected">
<el-option v-for="warehouse in optionData(warehouseList)"
:key="warehouse.value"
:label="warehouse.label"
:value="warehouse.value" style="display: none"/>
<el-tree class="main-select-el-tree" ref="selectedTree"
:data="warehouseList"
:props="treeProps"
highlight-current
@node-click="handleNodeClick"
:expand-on-click-node="expandOnClickNode"
default-expand-all />
</el-select>
</div>
</template>
<script>
import {getBaseWarehouseList} from "@/api/base/warehouse";
export default {
name: "WarehouseChoose",
data() {
return {
warehouseSelected: undefined,
expandOnClickNode: true,
warehouseList: [],
treeProps:{
label: "name",
children: "children"
}
}
},
created() {
this.listWarehouse()
},
methods: {
async listWarehouse(){
const res = await getBaseWarehouseList()
this.warehouseList = this.handleTree(res.data, 'id', 'parentId',"children","0")
},
optionData(array, result=[]){
array.forEach(item => {
result.push({label: item.name, value: item.id})
if (item.children && item.children.length !== 0){
this.optionData(item.children, result)
}
})
return JSON.parse(JSON.stringify(result))
},
handleNodeClick(node){
this.$emit("selected", node)
this.warehouseSelected = node.name
this.$refs.selectTree.blur()
}
}
}
</script>
<style scoped lang="scss">
</style>

View File

@ -21,14 +21,18 @@
<el-input v-model="queryParams.soNo" style="width: 18rem" placeholder="请输入单号、备注"/>
</el-form-item>
<el-form-item v-if="soByType" label="状态" prop="soStatus">
<el-select v-model="queryParams.soStatus">
<el-select v-model="queryParams.soStatus" clearable>
<el-option v-for="item in getStatus"
:key="item.value"
:label="item.label"
:value="item.value" />
</el-select>
</el-form-item>
<el-form-item v-if="!soByType" label="领料人" prop="userId">
<StaffChoose @selected="getStaff"/>
</el-form-item>
<el-form-item :label="soByType ? '采购门店' : '领料门店'" prop="corpId">
<CorpChoose />
<CorpChoose @selected="getCompany"/>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
@ -112,9 +116,16 @@
import SupplierChoose from "@/views/repair/Components/SupplierChoose.vue";
import CorpChoose from "@/views/repair/Components/CorpChoose.vue";
import StaffChoose from "@/views/repair/Components/StaffChoose.vue";
import {DICT_TYPE} from "@/utils/dict";
export default {
name: "SoIndex",
computed: {
getStatus(){
const data = this.getDictDatas(DICT_TYPE.REPAIR_SO_STATUS)
return data.filter(item => item.label.toString().indexOf("领料") === -1)
}
},
components:{
StaffChoose,
SupplierChoose,
@ -164,6 +175,10 @@ export default {
getStaff(data){
this.queryParams.userId = data.id
this.queryParams.userName = data.name
},
//
getCompany(data){
console.log(data)
}
}
}

View File

@ -5,7 +5,7 @@
<el-col :span="24">
<!-- 供应商 组件 -->
<el-form-item v-if="soByType" label="供应商" prop="supplierId">
<SupplierChoose />
<SupplierChoose @selected="getSupplier"/>
</el-form-item>
<!-- 日期 内嵌 -->
<el-form-item label="日期" prop="soTime">
@ -29,14 +29,14 @@
<!-- 选择商品 组件 -->
<el-col :span="12">
<el-form-item label="选择商品">
<PartChoose />
<PartChoose @selected="getPart"/>
</el-form-item>
</el-col>
</el-row>
<!-- 商品表格 组件 -->
<el-row :gutter="20">
<el-col :span="24">
<SoTable :so-by-type="soByType"/>
<SoTable :part-list="partList" :so-by-type="soByType" @deleteItem="deleteItem"/>
</el-col>
</el-row>
<el-row :gutter="2" style="margin-top: 1rem">
@ -90,7 +90,8 @@ export default {
userName: null,
partList: []
},
staffRole: "采购员"
staffRole: "采购员",
partList: [],
}
},
mounted() {
@ -98,10 +99,31 @@ export default {
this.staffRole = this.soByType ? this.staffRole : "领料人"
},
methods: {
//
//
getStaff(data) {
this.formData.userId = data.id
this.formData.userName = data.name
},
//
getSupplier(data) {
console.log(data)
},
//
async getPart(data) {
const flag = this.partList.find(item => item.id === data.id)
if (flag) {
try {
await this.$modal.confirm(`${data.name}已存在,确定要重复添加?`)
this.partList.push(data)
} catch {
}
} else {
this.partList.push(data)
}
},
//
deleteItem(index) {
this.partList.splice(index, 1)
}
}
}

View File

@ -1,11 +1,11 @@
<template>
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
<el-table v-loading="loading" :data="partList" :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" width="200"/>
<el-table-column label="商品名称" align="center" prop="name" width="200"/>
<el-table-column label="规格" align="center" width="180"/>
<el-table-column label="商品编码" align="center" width="180"/>
<el-table-column label="仓库" align="center" width="150"/>
@ -18,7 +18,7 @@
<el-table-column label="备注" align="center" width="180"/>
<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 size="mini" type="text" icon="el-icon-delete" @click="deleteItem(scope.$index)"
>删除
</el-button>
</template>
@ -34,6 +34,11 @@ export default {
type: Boolean,
defaultValue: true,
required: true
},
partList:{
type: Array,
defaultValue: false,
required: true
}
},
data() {
@ -43,7 +48,10 @@ export default {
}
},
methods: {
//
deleteItem(index){
this.$emit("deleteItem", index)
}
}
}
</script>

View File

@ -21,7 +21,7 @@
<CorpChoose />
</el-form-item>
<el-form-item v-if="soByType" label="所属库位" prop="corpId">
<CorpChoose />
<WarehouseChoose @selected="getWarehouse"/>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search">搜索</el-button>
@ -67,10 +67,11 @@
<script>
import CorpChoose from "@/views/repair/Components/CorpChoose.vue";
import WarehouseChoose from "@/views/repair/Components/WarehouseChoose.vue";
export default {
name: "SoiTable",
components: {CorpChoose},
components: {WarehouseChoose, CorpChoose},
props: {
soByType: {
type: Boolean,
@ -93,7 +94,11 @@ export default {
total: 0,
}
},
methods: {}
methods: {
//
getWarehouse(data){
},
}
}
</script>

View File

@ -19,8 +19,9 @@
<el-form-item label="调入门店" prop="corpId">
<CorpChoose />
</el-form-item>
<el-form-item label="审核状态">
<el-select v-model="queryParams.is">
<el-form-item label="审核状态" prop="">
<el-select v-model="queryParams.stStatus">
<el-option v-for="item in this.getDictDatas(DICT_TYPE.REPAIR_ST_STATUS)" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</el-form-item>
<el-form-item>
@ -92,7 +93,9 @@ export default {
},
data() {
return {
queryParams:{},
queryParams:{
stStatus: null
},
showSearch: true,
loading: false,
list: [],

View File

@ -23,13 +23,13 @@
<StaffChoose @selected="getStaff"/>
</el-form-item>
<el-form-item label="选择商品">
<PartChoose/>
<PartChoose @selected="getPart"/>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="24">
<StTable/>
<StTable :part-list="partList" @deleteItem="deleteItem"/>
</el-col>
</el-row>
<el-row :gutter="20" style="margin-top: 1rem">
@ -82,14 +82,33 @@ export default {
formData: {
stNo: null,
},
partList: []
}
},
mounted() {
this.formData.stNo = createUniqueCodeByHead("DB")
},
methods: {
//
getStaff(data) {
},
//
async getPart(data){
const flag = this.partList.find(item => item.id === data.id)
if (flag) {
try {
await this.$modal.confirm(`${data.name}已存在,确定要重复添加?`)
this.partList.push(data)
} catch {
}
} else {
this.partList.push(data)
}
},
//
deleteItem(index){
this.partList.splice(index, 1)
}
}
}

View File

@ -1,11 +1,11 @@
<template>
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
<el-table v-loading="loading" :data="partList" :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" width="200"/>
<el-table-column label="商品名称" align="center" prop="name" width="200"/>
<el-table-column label="规格" align="center" width="180"/>
<el-table-column label="单位" align="center" width="150"/>
<el-table-column label="原库位" align="center" width="150"/>
@ -17,7 +17,7 @@
<el-table-column label="备注" align="center" width="180"/>
<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 size="mini" type="text" icon="el-icon-delete" @click="deleteItem(scope.$index)"
>删除
</el-button>
</template>
@ -28,13 +28,25 @@
<script>
export default {
name: "StTable",
props:{
partList:{
type: Array,
defaultValue: false,
required: true
}
},
data() {
return {
loading: false,
list: [],
}
},
methods: {}
methods: {
//
deleteItem(index){
this.$emit("deleteItem", index)
}
}
}
</script>

View File

@ -16,8 +16,13 @@
<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 v-if="TicketType === 'tu'" label="维修类别" prop="repairType">
<el-select v-model="queryParams.repairType" size="small">
<el-option v-for="item in this.getDictDatas(DICT_TYPE.REPAIR_TYPE)" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</el-form-item>
<el-form-item v-if="TicketType === 'tp'" label="类型" prop="repairType">
<RepairTypeChoose @selected="getRepairType" />
</el-form-item>
<el-form-item label="门店" prop="userId">
<SupplierChoose />
@ -45,13 +50,15 @@
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";
import RepairTypeChoose from "@/views/repair/Components/RepairTypeChoose.vue";
export default {
name: "TicketSearch",
components: {
TicketTable,
StaffChoose,
SupplierChoose
SupplierChoose,
RepairTypeChoose
},
props:{
TicketType:{
@ -67,7 +74,12 @@ export default {
total: 0,
}
},
methods: {}
methods: {
//
getRepairType(data){
console.log(data)
}
}
}
</script>

View File

@ -10,7 +10,7 @@
<template slot="label">
用户选择
</template>
<UserChoose />
<UserChoose @selected="getUser"/>
</el-descriptions-item>
<el-descriptions-item>
<template slot="label">
@ -99,14 +99,17 @@
<el-button size="small">质保说明</el-button>
</el-col>
<el-col :span="4.8">
<el-button size="small">终检</el-button>
<el-button size="small" v-if="formData.endCheck" @click="formData.endCheck = 0">终检</el-button>
<el-button size="small" v-if="!formData.endCheck" @click="formData.endCheck = 1">不终检</el-button>
</el-col>
<el-col :span="4.8">
<el-select size="small">
<el-select v-model="formData.partDisposal" size="small">
<el-option v-for="item in this.getDictDatas(DICT_TYPE.REPAIR_PART_DISPOSAL)" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</el-col>
<el-col :span="4.8">
<el-select size="small">
<el-select v-model="formData.repairType" size="small">
<el-option v-for="item in this.getDictDatas(DICT_TYPE.REPAIR_TYPE)" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</el-col>
</el-row>
@ -190,12 +193,22 @@ export default {
}
},
data() {
return {}
return {
formData:{
endCheck: 1,
partDisposal:'01',
repairType: '01',
}
}
},
methods: {}
methods: {
//
getUser(data){
console.log(data)
}
}
}
</script>
<style scoped lang="scss">
</style>