|
|
@@ -162,13 +162,23 @@
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
<el-col :span="6">
|
|
|
- <el-form-item label="业务员:" prop="salesmanName">
|
|
|
- <personSelect
|
|
|
- ref="directorRef"
|
|
|
- v-model="form.salesmanName"
|
|
|
- @selfChange="changeUserInfo"
|
|
|
+ <el-form-item label="业务员:" prop="salespersonName">
|
|
|
+ <el-select
|
|
|
+ style="width: 100%"
|
|
|
+ v-model="form.salespersonId"
|
|
|
+ placeholder="请选择业务员"
|
|
|
+ filterable
|
|
|
+ clearable
|
|
|
:disabled="type == 'view'"
|
|
|
- />
|
|
|
+ @change="changeUserInfo"
|
|
|
+ >
|
|
|
+ <el-option
|
|
|
+ v-for="item in userList"
|
|
|
+ :key="item.id"
|
|
|
+ :label="item.name"
|
|
|
+ :value="item.id"
|
|
|
+ ></el-option>
|
|
|
+ </el-select>
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
<el-col :span="6">
|
|
|
@@ -210,7 +220,6 @@
|
|
|
></el-date-picker>
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
-
|
|
|
<el-col :span="6">
|
|
|
<el-form-item
|
|
|
label="售后类型:"
|
|
|
@@ -225,6 +234,7 @@
|
|
|
style="width: 100%"
|
|
|
v-model="form.aftertype"
|
|
|
placeholder="请选择"
|
|
|
+ @change="selectaftertype"
|
|
|
:disabled="type == 'view'"
|
|
|
>
|
|
|
<el-option
|
|
|
@@ -362,7 +372,6 @@
|
|
|
</el-select>
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
-
|
|
|
<el-col :span="6" v-if="form.isOutsource == 1">
|
|
|
<el-form-item
|
|
|
label="供应商名称:"
|
|
|
@@ -399,6 +408,42 @@
|
|
|
</el-select>
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
+ <el-col :span="6">
|
|
|
+ <el-form-item
|
|
|
+ label="涉及事业部门:"
|
|
|
+ prop="involveDeptId"
|
|
|
+ :rules="{
|
|
|
+ required: true,
|
|
|
+ message: '请选择涉及事业部门',
|
|
|
+ trigger: 'change'
|
|
|
+ }"
|
|
|
+ >
|
|
|
+ <ele-tree-select
|
|
|
+ v-model="form.involveDeptId"
|
|
|
+ :data="deptTreeData"
|
|
|
+ label-key="name"
|
|
|
+ value-key="id"
|
|
|
+ clearable
|
|
|
+ default-expand-all
|
|
|
+ placeholder="请选择"
|
|
|
+ ref="deptTreeSelect"
|
|
|
+ :disabled="type == 'view'"
|
|
|
+ @node-click="handleDeptNodeClick"
|
|
|
+ @change="handleDeptChange"
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="6">
|
|
|
+ <el-form-item label="备注说明:" prop="remark" class="remark-input">
|
|
|
+ <el-input
|
|
|
+ :disabled="type == 'view'"
|
|
|
+ v-model="form.remark"
|
|
|
+ type="textarea"
|
|
|
+ rows="2"
|
|
|
+ placeholder="请输入备注信息(选填)"
|
|
|
+ ></el-input>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
</el-row>
|
|
|
|
|
|
<headerTitle
|
|
|
@@ -485,17 +530,26 @@
|
|
|
:prop="`tableList.${$index}.faultDetails.${idx}.type`"
|
|
|
:rules="{
|
|
|
required: true,
|
|
|
- message: '请选择故障类型',
|
|
|
+ message:
|
|
|
+ form.aftertype === '3'
|
|
|
+ ? '请选择质量类型'
|
|
|
+ : '请选择故障类型',
|
|
|
trigger: 'change'
|
|
|
}"
|
|
|
>
|
|
|
<el-select
|
|
|
v-model="row.type"
|
|
|
:disabled="change_permission"
|
|
|
- :placeholder="`请选择`"
|
|
|
+ :placeholder="
|
|
|
+ form.aftertype === '3'
|
|
|
+ ? '请选择质量类型'
|
|
|
+ : '请选择故障类型'
|
|
|
+ "
|
|
|
>
|
|
|
<el-option
|
|
|
- v-for="item in typeOptions"
|
|
|
+ v-for="item in form.aftertype === '3'
|
|
|
+ ? qualityTypeOptions
|
|
|
+ : typeOptions"
|
|
|
:key="item.value"
|
|
|
:label="item.label"
|
|
|
:value="item.value"
|
|
|
@@ -508,7 +562,10 @@
|
|
|
:prop="`tableList.${$index}.faultDetails.${idx}.faultPhenomenon`"
|
|
|
:rules="{
|
|
|
required: true,
|
|
|
- message: '请输入故障现象',
|
|
|
+ message:
|
|
|
+ form.aftertype === '3'
|
|
|
+ ? '请输入质量问题反馈'
|
|
|
+ : '请输入故障现象',
|
|
|
trigger: 'change'
|
|
|
}"
|
|
|
>
|
|
|
@@ -527,7 +584,10 @@
|
|
|
:prop="`tableList.${$index}.faultDetails.${idx}.faultReason`"
|
|
|
:rules="{
|
|
|
required: true,
|
|
|
- message: '请输入故障原因',
|
|
|
+ message:
|
|
|
+ form.aftertype === '3'
|
|
|
+ ? '请输入质量问题分析'
|
|
|
+ : '请输入故障原因',
|
|
|
trigger: 'change'
|
|
|
}"
|
|
|
>
|
|
|
@@ -553,7 +613,10 @@
|
|
|
:prop="`tableList.${$index}.faultDetails.${idx}.maintenanceProcess`"
|
|
|
:rules="{
|
|
|
required: true,
|
|
|
- message: '请输入维修过程',
|
|
|
+ message:
|
|
|
+ form.aftertype === '3'
|
|
|
+ ? '请输入质量处理方式'
|
|
|
+ : '请输入维修过程',
|
|
|
trigger: 'change'
|
|
|
}"
|
|
|
>
|
|
|
@@ -582,7 +645,7 @@
|
|
|
<template v-slot:action="{ row: data, $index }">
|
|
|
<el-popconfirm
|
|
|
class="ele-action"
|
|
|
- title="确定要删除当前故障吗?"
|
|
|
+ title="确定要删除当前记录吗?"
|
|
|
@confirm="delSon(row, $index)"
|
|
|
>
|
|
|
<template v-slot:reference>
|
|
|
@@ -598,22 +661,30 @@
|
|
|
</template>
|
|
|
|
|
|
<template v-slot:headerType="{ column }">
|
|
|
- <span class="is-required">{{ column.label }}</span>
|
|
|
+ <span class="is-required">{{
|
|
|
+ form.aftertype === '3' ? '质量类型' : column.label
|
|
|
+ }}</span>
|
|
|
</template>
|
|
|
<template v-slot:headerPhenomenon="{ column }">
|
|
|
- <span class="is-required">{{ column.label }}</span>
|
|
|
+ <span class="is-required">{{
|
|
|
+ form.aftertype === '3' ? '质量问题反馈' : column.label
|
|
|
+ }}</span>
|
|
|
</template>
|
|
|
<template
|
|
|
v-slot:headerMaintenance="{ column }"
|
|
|
v-if="source == '报工信息'"
|
|
|
>
|
|
|
- <span class="is-required">{{ column.label }}</span>
|
|
|
+ <span class="is-required">{{
|
|
|
+ form.aftertype === '3' ? '质量处理方式' : column.label
|
|
|
+ }}</span>
|
|
|
</template>
|
|
|
<template
|
|
|
v-slot:headerFaultReason="{ column }"
|
|
|
v-if="source == '报工信息'"
|
|
|
>
|
|
|
- <span class="is-required">{{ column.label }}</span>
|
|
|
+ <span class="is-required">{{
|
|
|
+ form.aftertype === '3' ? '质量问题分析' : column.label
|
|
|
+ }}</span>
|
|
|
</template>
|
|
|
</ele-pro-table>
|
|
|
</div>
|
|
|
@@ -630,10 +701,17 @@
|
|
|
<el-link
|
|
|
type="primary"
|
|
|
:underline="false"
|
|
|
- v-if="tableOperate"
|
|
|
+ v-if="tableOperate && form.aftertype !== '3'"
|
|
|
@click="addProblem(row)"
|
|
|
>添加故障</el-link
|
|
|
>
|
|
|
+ <el-link
|
|
|
+ type="primary"
|
|
|
+ :underline="false"
|
|
|
+ v-if="form.aftertype === '3'"
|
|
|
+ @click="addProblem(row)"
|
|
|
+ >添加质量反馈</el-link
|
|
|
+ >
|
|
|
<el-link
|
|
|
type="danger"
|
|
|
:underline="false"
|
|
|
@@ -646,7 +724,16 @@
|
|
|
</ele-pro-table>
|
|
|
</div>
|
|
|
<div class="fault_infor" v-else>
|
|
|
- <headerTitle title="故障信息" style="margin-top: 10px"></headerTitle>
|
|
|
+ <headerTitle
|
|
|
+ title="故障信息"
|
|
|
+ style="margin-top: 10px"
|
|
|
+ v-if="form.aftertype !== '3'"
|
|
|
+ ></headerTitle>
|
|
|
+ <headerTitle
|
|
|
+ title="质量反馈信息"
|
|
|
+ style="margin-top: 10px"
|
|
|
+ v-if="form.aftertype === '3'"
|
|
|
+ ></headerTitle>
|
|
|
|
|
|
<ele-pro-table
|
|
|
:columns="faultList"
|
|
|
@@ -657,26 +744,40 @@
|
|
|
:toolkit="[]"
|
|
|
>
|
|
|
<template v-slot:toolbar>
|
|
|
- <el-button type="primary" v-if="tableOperate" @click="addFaults"
|
|
|
+ <el-button
|
|
|
+ type="primary"
|
|
|
+ v-if="tableOperate && form.aftertype !== '3'"
|
|
|
+ @click="addFaults"
|
|
|
>添加故障</el-button
|
|
|
>
|
|
|
+ <el-button
|
|
|
+ type="primary"
|
|
|
+ v-if="tableOperate && form.aftertype === '3'"
|
|
|
+ @click="addFaults"
|
|
|
+ >添加质量反馈</el-button
|
|
|
+ >
|
|
|
</template>
|
|
|
<template v-slot:type="{ row, $index: idx }">
|
|
|
<el-form-item
|
|
|
:prop="`faultDetailList.${idx}.type`"
|
|
|
:rules="{
|
|
|
required: true,
|
|
|
- message: '请选择故障类型',
|
|
|
+ message:
|
|
|
+ form.aftertype === '3' ? '请选择质量类型' : '请选择故障类型',
|
|
|
trigger: 'change'
|
|
|
}"
|
|
|
>
|
|
|
<el-select
|
|
|
v-model="row.type"
|
|
|
:disabled="change_permission"
|
|
|
- :placeholder="`请选择`"
|
|
|
+ :placeholder="
|
|
|
+ form.aftertype === '3' ? '请选择质量类型' : '请选择故障类型'
|
|
|
+ "
|
|
|
>
|
|
|
<el-option
|
|
|
- v-for="item in typeOptions"
|
|
|
+ v-for="item in form.aftertype === '3'
|
|
|
+ ? qualityTypeOptions
|
|
|
+ : typeOptions"
|
|
|
:key="item.value"
|
|
|
:label="item.label"
|
|
|
:value="item.value"
|
|
|
@@ -689,7 +790,10 @@
|
|
|
:prop="`faultDetailList.${idx}.faultPhenomenon`"
|
|
|
:rules="{
|
|
|
required: true,
|
|
|
- message: '请输入故障现象',
|
|
|
+ message:
|
|
|
+ form.aftertype === '3'
|
|
|
+ ? '请输入质量问题反馈'
|
|
|
+ : '请输入故障现象',
|
|
|
trigger: 'change'
|
|
|
}"
|
|
|
>
|
|
|
@@ -708,7 +812,10 @@
|
|
|
:prop="`faultDetailList.${idx}.faultReason`"
|
|
|
:rules="{
|
|
|
required: true,
|
|
|
- message: '请输入故障原因',
|
|
|
+ message:
|
|
|
+ form.aftertype === '3'
|
|
|
+ ? '请输入质量问题分析'
|
|
|
+ : '请输入故障原因',
|
|
|
trigger: 'change'
|
|
|
}"
|
|
|
>
|
|
|
@@ -734,7 +841,10 @@
|
|
|
:prop="`faultDetailList.${idx}.maintenanceProcess`"
|
|
|
:rules="{
|
|
|
required: true,
|
|
|
- message: '请输入维修过程',
|
|
|
+ message:
|
|
|
+ form.aftertype === '3'
|
|
|
+ ? '请输入质量处理方式'
|
|
|
+ : '请输入维修过程',
|
|
|
trigger: 'change'
|
|
|
}"
|
|
|
>
|
|
|
@@ -763,7 +873,7 @@
|
|
|
<template v-slot:action="{ row: data, $index }">
|
|
|
<el-popconfirm
|
|
|
class="ele-action"
|
|
|
- title="确定要删除当前故障吗?"
|
|
|
+ title="确定要删除当前记录吗?"
|
|
|
@confirm="faultDel($index)"
|
|
|
>
|
|
|
<template v-slot:reference>
|
|
|
@@ -775,22 +885,30 @@
|
|
|
</template>
|
|
|
|
|
|
<template v-slot:headerType="{ column }">
|
|
|
- <span class="is-required">{{ column.label }}</span>
|
|
|
+ <span class="is-required">{{
|
|
|
+ form.aftertype === '3' ? '质量类型' : column.label
|
|
|
+ }}</span>
|
|
|
</template>
|
|
|
<template v-slot:headerPhenomenon="{ column }">
|
|
|
- <span class="is-required">{{ column.label }}</span>
|
|
|
+ <span class="is-required">{{
|
|
|
+ form.aftertype === '3' ? '质量问题反馈' : column.label
|
|
|
+ }}</span>
|
|
|
</template>
|
|
|
<template
|
|
|
v-slot:headerMaintenance="{ column }"
|
|
|
v-if="source == '报工信息'"
|
|
|
>
|
|
|
- <span class="is-required">{{ column.label }}</span>
|
|
|
+ <span class="is-required">{{
|
|
|
+ form.aftertype === '3' ? '质量处理方式' : column.label
|
|
|
+ }}</span>
|
|
|
</template>
|
|
|
<template
|
|
|
v-slot:headerFaultReason="{ column }"
|
|
|
v-if="source == '报工信息'"
|
|
|
>
|
|
|
- <span class="is-required">{{ column.label }}</span>
|
|
|
+ <span class="is-required">{{
|
|
|
+ form.aftertype === '3' ? '质量问题分析' : column.label
|
|
|
+ }}</span>
|
|
|
</template>
|
|
|
</ele-pro-table>
|
|
|
</div>
|
|
|
@@ -915,13 +1033,6 @@
|
|
|
></invoiceDialog>
|
|
|
<SaleorderDialog ref="saleorderDialogRef" @changeParent="saleorderChange" />
|
|
|
<ProductDialog ref="productDialogRef" @changeParent="productChange" />
|
|
|
- <process-submit-dialog
|
|
|
- :process-submit-dialog-flag="processSubmitDialogFlag"
|
|
|
- :form-schema="formSchema"
|
|
|
- :carByTemplate="carByTemplate"
|
|
|
- @update:processSubmitDialogFlag="(val) => (processSubmitDialogFlag = val)"
|
|
|
- @formSubmit="handleFormSubmit"
|
|
|
- ></process-submit-dialog>
|
|
|
<GYSparentList
|
|
|
ref="GYSparentRef"
|
|
|
@changeParent="GYSchangeParent"
|
|
|
@@ -942,10 +1053,9 @@ import SaleorderDialog from './saleorderDialog.vue';
|
|
|
import ProductDialog from './productDialog.vue';
|
|
|
import spareParts from '@/views/salesServiceManagement/components/sparePartsList.vue';
|
|
|
import { getToken } from '@/utils/token-util';
|
|
|
-import processSubmitDialog from '@/views/salesServiceManagement/components/processSubmitDialog/processSubmitDialog.vue';
|
|
|
-import { getByCode } from '@/api/system/dictionary-data';
|
|
|
-
|
|
|
-import personSelect from '@/components/CommomSelect/person-select.vue';
|
|
|
+import { getByCode } from '@/api/system/dictionary-data'; // 字典接口
|
|
|
+import { listOrganizations } from '@/api/system/organization';
|
|
|
+import { getUserPage } from '@/api/system/organization';
|
|
|
import GYSparentList from '@/views/purchasingManage/supplierManage/components/parentList.vue';
|
|
|
export default {
|
|
|
mixins: [dictMixins],
|
|
|
@@ -956,10 +1066,8 @@ export default {
|
|
|
SaleorderDialog,
|
|
|
fileMain,
|
|
|
ProductDialog,
|
|
|
- processSubmitDialog,
|
|
|
spareParts,
|
|
|
- GYSparentList,
|
|
|
- personSelect
|
|
|
+ GYSparentList
|
|
|
},
|
|
|
computed: {
|
|
|
...mapGetters(['getDictValue']),
|
|
|
@@ -1159,7 +1267,7 @@ export default {
|
|
|
{
|
|
|
columnKey: 'action',
|
|
|
label: '操作',
|
|
|
- width: 150,
|
|
|
+ minWidth: 180,
|
|
|
align: 'center',
|
|
|
resizable: false,
|
|
|
slot: 'action',
|
|
|
@@ -1168,6 +1276,7 @@ export default {
|
|
|
];
|
|
|
},
|
|
|
faultList() {
|
|
|
+ const isQualityScene = this.form.aftertype === '3';
|
|
|
return [
|
|
|
{
|
|
|
type: 'index',
|
|
|
@@ -1178,7 +1287,7 @@ export default {
|
|
|
{
|
|
|
prop: 'type',
|
|
|
slot: 'type',
|
|
|
- label: '故障类型',
|
|
|
+ label: isQualityScene ? '质量类型' : '故障类型',
|
|
|
align: 'center',
|
|
|
headerSlot: 'headerType',
|
|
|
showOverflowTooltip: true,
|
|
|
@@ -1188,7 +1297,7 @@ export default {
|
|
|
prop: 'faultPhenomenon',
|
|
|
slot: 'faultPhenomenon',
|
|
|
headerSlot: 'headerPhenomenon',
|
|
|
- label: '故障现象',
|
|
|
+ label: isQualityScene ? '质量问题反馈' : '故障现象',
|
|
|
align: 'center',
|
|
|
minWidth: 240
|
|
|
},
|
|
|
@@ -1196,7 +1305,7 @@ export default {
|
|
|
prop: 'faultReason',
|
|
|
slot: 'faultReason',
|
|
|
headerSlot: 'headerFaultReason',
|
|
|
- label: '故障原因',
|
|
|
+ label: isQualityScene ? '质量问题分析' : '故障原因',
|
|
|
align: 'center',
|
|
|
minWidth: 340
|
|
|
},
|
|
|
@@ -1204,7 +1313,7 @@ export default {
|
|
|
prop: 'maintenanceProcess',
|
|
|
slot: 'maintenanceProcess',
|
|
|
headerSlot: 'headerMaintenance',
|
|
|
- label: '维修过程',
|
|
|
+ label: isQualityScene ? '质量处理方式' : '维修过程',
|
|
|
align: 'center',
|
|
|
width: 340
|
|
|
},
|
|
|
@@ -1298,7 +1407,6 @@ export default {
|
|
|
}
|
|
|
},
|
|
|
watch: {
|
|
|
- // 仅监听需求名称列表
|
|
|
demandList: {
|
|
|
handler(val) {
|
|
|
this.demandList = val;
|
|
|
@@ -1309,6 +1417,7 @@ export default {
|
|
|
},
|
|
|
data() {
|
|
|
return {
|
|
|
+ userList: [],
|
|
|
tableList: [],
|
|
|
selection: [],
|
|
|
pickerOptions: {
|
|
|
@@ -1316,7 +1425,7 @@ export default {
|
|
|
return time.getTime() < new Date().setHours(0, 0, 0, 0);
|
|
|
}
|
|
|
},
|
|
|
- detailList: [], // 配件数据列表
|
|
|
+ detailList: [],
|
|
|
chargeList: [
|
|
|
{ label: '是', value: 1 },
|
|
|
{ label: '否', value: 0 }
|
|
|
@@ -1334,6 +1443,8 @@ export default {
|
|
|
{ label: '保养', value: '2' },
|
|
|
{ label: '安装', value: '3' }
|
|
|
],
|
|
|
+ // 质量类型选项
|
|
|
+ qualityTypeOptions: [],
|
|
|
outsourceList: [
|
|
|
{ label: '是', value: 1 },
|
|
|
{ label: '否', value: 0 }
|
|
|
@@ -1343,22 +1454,10 @@ export default {
|
|
|
{ label: '否', value: 0 }
|
|
|
],
|
|
|
sxtList: [
|
|
|
- {
|
|
|
- label: '自制件',
|
|
|
- value: 1
|
|
|
- },
|
|
|
- {
|
|
|
- label: '采购件',
|
|
|
- value: 2
|
|
|
- },
|
|
|
- {
|
|
|
- label: '外协件',
|
|
|
- value: 3
|
|
|
- },
|
|
|
- {
|
|
|
- label: '受托件',
|
|
|
- value: 4
|
|
|
- }
|
|
|
+ { label: '自制件', value: 1 },
|
|
|
+ { label: '采购件', value: 2 },
|
|
|
+ { label: '外协件', value: 3 },
|
|
|
+ { label: '受托件', value: 4 }
|
|
|
],
|
|
|
form: {
|
|
|
contractInfo: {},
|
|
|
@@ -1367,7 +1466,8 @@ export default {
|
|
|
faultDetailList: [],
|
|
|
associationType: '1',
|
|
|
aftertype: '',
|
|
|
- salesmanName:'',
|
|
|
+ salespersonName: '',
|
|
|
+ salespersonId: '',
|
|
|
charge: '',
|
|
|
part: '',
|
|
|
car: '',
|
|
|
@@ -1376,7 +1476,10 @@ export default {
|
|
|
isCreatePurchaseOrder: 0,
|
|
|
supplierName: '',
|
|
|
supplierId: '',
|
|
|
- supplierCode: ''
|
|
|
+ supplierCode: '',
|
|
|
+ involveDeptId: '',
|
|
|
+ involveDeptName: '',
|
|
|
+ remark: ''
|
|
|
},
|
|
|
rules: {},
|
|
|
radio: null,
|
|
|
@@ -1388,27 +1491,109 @@ export default {
|
|
|
{ value: '3', label: '客户' }
|
|
|
],
|
|
|
isOrder: false,
|
|
|
- defaultTemplateList: [],
|
|
|
- jsonData: {},
|
|
|
- carByTemplate: {},
|
|
|
- processSubmitDialogFlag: false,
|
|
|
- formSchema: {},
|
|
|
- carFormData: {},
|
|
|
- // 自行维护售后类型和派车类型列表
|
|
|
aftertypeList: [],
|
|
|
- pietypeList: []
|
|
|
+ pietypeList: [],
|
|
|
+ deptTreeData: []
|
|
|
};
|
|
|
},
|
|
|
created() {
|
|
|
- // 页面创建时主动获取售后类型和派车类型
|
|
|
this.getAftertypeCode('after_sales_type');
|
|
|
this.getPietypeCode('pie_car_type');
|
|
|
+ this.getQualityTypeCode('after_sale_quality_type');
|
|
|
+ this.getUserList();
|
|
|
+ this.getDeptTreeData();
|
|
|
},
|
|
|
methods: {
|
|
|
- changeUserInfo(val, info) {
|
|
|
- this.form.salesmanName = info.name;
|
|
|
+ async getQualityTypeCode(code) {
|
|
|
+ try {
|
|
|
+ const res = await getByCode(code);
|
|
|
+ if (res.code == 0) {
|
|
|
+ this.qualityTypeOptions = Object.values(res.data).map((el) => {
|
|
|
+ const key = Object.keys(el)[0];
|
|
|
+ const value = Object.values(el)[0];
|
|
|
+ return { label: value, value: key };
|
|
|
+ });
|
|
|
+ }
|
|
|
+ } catch (err) {
|
|
|
+ this.$message.error(`获取质量类型字典失败:${err.message}`);
|
|
|
+ }
|
|
|
+ },
|
|
|
+
|
|
|
+ async getDeptTreeData() {
|
|
|
+ try {
|
|
|
+ const deptRes = await listOrganizations();
|
|
|
+ this.deptTreeData = this.$util.toTreeData({
|
|
|
+ data: deptRes || [],
|
|
|
+ idField: 'id',
|
|
|
+ parentIdField: 'parentId'
|
|
|
+ });
|
|
|
+ } catch (error) {
|
|
|
+ console.error('获取涉及事业部门数据失败:', error);
|
|
|
+ this.$message.error('获取涉及事业部门数据失败');
|
|
|
+ }
|
|
|
+ },
|
|
|
+
|
|
|
+ handleDeptNodeClick(node) {
|
|
|
+ if (node && node.id) {
|
|
|
+ this.form.involveDeptId = node.id;
|
|
|
+ this.form.involveDeptName = node.name;
|
|
|
+ }
|
|
|
+ },
|
|
|
+
|
|
|
+ handleDeptChange(val) {
|
|
|
+ if (!val) {
|
|
|
+ this.form.involveDeptName = '';
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!this.deptTreeData || this.deptTreeData.length === 0) {
|
|
|
+ console.warn('部门树数据未加载');
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ const findDeptName = (treeData, deptId) => {
|
|
|
+ for (const node of treeData) {
|
|
|
+ if (node.id === deptId) {
|
|
|
+ return node.name;
|
|
|
+ }
|
|
|
+ if (node.children && node.children.length > 0) {
|
|
|
+ const found = findDeptName(node.children, deptId);
|
|
|
+ if (found) return found;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return '';
|
|
|
+ };
|
|
|
+
|
|
|
+ const deptName = findDeptName(this.deptTreeData, val);
|
|
|
+ this.form.involveDeptName = deptName;
|
|
|
+ },
|
|
|
+ async getUserList() {
|
|
|
+ try {
|
|
|
+ const res = await getUserPage({
|
|
|
+ pageNum: 1,
|
|
|
+ pageSize: -1
|
|
|
+ });
|
|
|
+ this.userList = res?.list || [];
|
|
|
+ } catch (error) {
|
|
|
+ console.error('获取用户列表失败:', error);
|
|
|
+ this.$message.error('获取用户列表失败');
|
|
|
+ }
|
|
|
+ },
|
|
|
+ changeUserInfo(userId) {
|
|
|
+ if (userId) {
|
|
|
+ const selectedUser = this.userList.find((user) => user.id === userId);
|
|
|
+ if (selectedUser) {
|
|
|
+ this.form.salespersonName = selectedUser.name;
|
|
|
+ this.form.salespersonId = userId;
|
|
|
+ } else {
|
|
|
+ console.warn('未找到对应的用户信息,ID:', userId);
|
|
|
+ this.form.salespersonName = '';
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ this.form.salespersonName = '';
|
|
|
+ this.form.salespersonId = '';
|
|
|
+ }
|
|
|
},
|
|
|
- // 获取售后类型字典
|
|
|
async getAftertypeCode(code) {
|
|
|
try {
|
|
|
const res = await getByCode(code);
|
|
|
@@ -1424,7 +1609,6 @@ export default {
|
|
|
this.$message.error(err.message);
|
|
|
}
|
|
|
},
|
|
|
- // 获取派车类型字典
|
|
|
async getPietypeCode(code) {
|
|
|
try {
|
|
|
const res = await getByCode(code);
|
|
|
@@ -1441,14 +1625,12 @@ export default {
|
|
|
}
|
|
|
},
|
|
|
|
|
|
- // 获取配件信息
|
|
|
getSpareInfoData() {
|
|
|
if (this.$refs.sparePartsRef) {
|
|
|
return this.$refs.sparePartsRef.getTableValue() || [];
|
|
|
}
|
|
|
return [];
|
|
|
},
|
|
|
- // 初始化数据
|
|
|
async init(res) {
|
|
|
let productDetail = res.productDetail ? res.productDetail : [];
|
|
|
this.$set(this.form, 'tableList', productDetail);
|
|
|
@@ -1479,8 +1661,7 @@ export default {
|
|
|
res.afterSalesType ? String(res.afterSalesType) : ''
|
|
|
);
|
|
|
this.$set(this.form, 'charge', res.isFee ?? '');
|
|
|
-
|
|
|
- this.$set(this.form, 'salesmanName', res.salesmanName ?? '');
|
|
|
+
|
|
|
this.$set(this.form, 'part', res.isWithAccessories ?? '');
|
|
|
this.$set(this.form, 'car', res.isPieCar ?? '');
|
|
|
this.$set(
|
|
|
@@ -1488,12 +1669,17 @@ export default {
|
|
|
'pietype',
|
|
|
res.pieCarType ? String(res.pieCarType) : ''
|
|
|
);
|
|
|
- this.$set(this.form, 'isOutsource', res.isOutsource ?? '');
|
|
|
+ this.$set(this.form, 'salespersonName', res.salespersonName || '');
|
|
|
+ this.$set(this.form, 'salespersonId', res.salespersonId || '');
|
|
|
this.$set(
|
|
|
this.form,
|
|
|
'isCreatePurchaseOrder',
|
|
|
res.isCreatePurchaseOrder ?? ''
|
|
|
);
|
|
|
+
|
|
|
+ this.$set(this.form, 'remark', res.remark || '');
|
|
|
+ this.$set(this.form, 'involveDeptId', res.involveDeptId ?? '');
|
|
|
+ this.$set(this.form, 'involveDeptName', res.involveDeptName ?? '');
|
|
|
this.$set(this.form, 'supplierId', res.supplierId ?? '');
|
|
|
this.$set(this.form, 'supplierName', res.supplierName ?? '');
|
|
|
this.$set(this.form, 'supplierCode', res.supplierCode ?? '');
|
|
|
@@ -1504,27 +1690,22 @@ export default {
|
|
|
}
|
|
|
});
|
|
|
},
|
|
|
- // 获取表单值
|
|
|
getValue() {
|
|
|
return this.form;
|
|
|
},
|
|
|
- // 查看图片
|
|
|
seeImage(row) {
|
|
|
this.phoneList = row.imageUrl || [];
|
|
|
this.phoneVisible = true;
|
|
|
},
|
|
|
- // 关闭图片预览
|
|
|
closePhone() {
|
|
|
this.phoneList = [];
|
|
|
this.phoneVisible = false;
|
|
|
},
|
|
|
- // 选择客户
|
|
|
handHead() {
|
|
|
if (this.type != 'view') {
|
|
|
this.$refs.parentRef.open();
|
|
|
}
|
|
|
},
|
|
|
- // 客户选择回调
|
|
|
changeParent(res) {
|
|
|
this.contactDetail(res.id);
|
|
|
},
|
|
|
@@ -1543,7 +1724,6 @@ export default {
|
|
|
this.$refs.form.validateField('supplierName');
|
|
|
});
|
|
|
},
|
|
|
- // 获取客户详情
|
|
|
async contactDetail(id, type) {
|
|
|
if (!id) {
|
|
|
this.contractInfo = {};
|
|
|
@@ -1578,7 +1758,6 @@ export default {
|
|
|
}
|
|
|
}
|
|
|
},
|
|
|
- // 发货单选择回调
|
|
|
invoiceChange(data) {
|
|
|
this.$set(this.form, 'orderCode', data.orderCode);
|
|
|
this.$set(this.form, 'orderId', data.orderId);
|
|
|
@@ -1589,7 +1768,6 @@ export default {
|
|
|
);
|
|
|
this.$set(this.form, 'tableList', list);
|
|
|
},
|
|
|
- // 打开发货单选择弹窗
|
|
|
invoiceDialogOpen() {
|
|
|
if (!this.form?.contractInfo?.id) {
|
|
|
this.$message.warning('请先选择客户名称!');
|
|
|
@@ -1605,11 +1783,9 @@ export default {
|
|
|
this.$refs.invoiceDialogRef.open(this.form.contractInfo.id, obj);
|
|
|
}
|
|
|
},
|
|
|
- // 数量输入处理
|
|
|
totalCountChange(data, name) {
|
|
|
data[name] = data[name].replace(/[^\d]/g, '').replace(/^0+/, '') || '1';
|
|
|
},
|
|
|
- // 添加联系人
|
|
|
addBank() {
|
|
|
this.form.contactInfoVOS.push({
|
|
|
contactName: '',
|
|
|
@@ -1617,7 +1793,6 @@ export default {
|
|
|
remark: ''
|
|
|
});
|
|
|
},
|
|
|
- // 添加故障
|
|
|
addProblem(row) {
|
|
|
if (!row.faultDetails) this.$set(row, 'faultDetails', []);
|
|
|
let len = row.faultDetails.length;
|
|
|
@@ -1627,16 +1802,13 @@ export default {
|
|
|
faultPhenomenon: ''
|
|
|
});
|
|
|
},
|
|
|
- // 删除子故障
|
|
|
delSon(row, idx) {
|
|
|
row.faultDetails.splice(idx, 1);
|
|
|
this.$forceUpdate();
|
|
|
},
|
|
|
- // 联系人选择回调
|
|
|
handleSelectionChange(rows) {
|
|
|
this.selection = rows;
|
|
|
},
|
|
|
- // 批量删除联系人
|
|
|
delContact() {
|
|
|
if (this.selection.length == 0) {
|
|
|
this.$message.warning('请至少选择一条联系人信息');
|
|
|
@@ -1646,15 +1818,12 @@ export default {
|
|
|
(row) => !this.selection.includes(row)
|
|
|
);
|
|
|
},
|
|
|
- // 删除单个联系人
|
|
|
handleBankDel(row, index) {
|
|
|
this.form.contactInfoVOS.splice(index, 1);
|
|
|
},
|
|
|
- // 删除售后对象
|
|
|
del(row, index) {
|
|
|
this.form.tableList.splice(index, 1);
|
|
|
},
|
|
|
- // 表单验证
|
|
|
getValidate() {
|
|
|
return new Promise((resolve, reject) => {
|
|
|
this.$refs.form.validate((valid, obj) => {
|
|
|
@@ -1672,7 +1841,6 @@ export default {
|
|
|
});
|
|
|
});
|
|
|
},
|
|
|
- // 重置表单
|
|
|
catch() {
|
|
|
this.form = {
|
|
|
tableList: [],
|
|
|
@@ -1683,7 +1851,10 @@ export default {
|
|
|
orderId: '',
|
|
|
associationType: '1',
|
|
|
aftertype: '',
|
|
|
- salesmanName:'',
|
|
|
+ salespersonName: '',
|
|
|
+ salespersonId: '',
|
|
|
+ involveDeptId: '',
|
|
|
+ involveDeptName: '',
|
|
|
charge: '',
|
|
|
part: '',
|
|
|
car: '',
|
|
|
@@ -1692,14 +1863,14 @@ export default {
|
|
|
isCreatePurchaseOrder: 0,
|
|
|
supplierName: '',
|
|
|
supplierId: '',
|
|
|
- supplierCode: ''
|
|
|
+ supplierCode: '',
|
|
|
+ remark: ''
|
|
|
};
|
|
|
if (this.$refs.sparePartsRef) {
|
|
|
this.$refs.sparePartsRef.clearList();
|
|
|
}
|
|
|
this.$refs.form.resetFields();
|
|
|
},
|
|
|
- // 打开销售订单选择弹窗
|
|
|
saleorderDialogOpen() {
|
|
|
if (!this.form?.contractInfo?.id) {
|
|
|
this.$message.warning('请先选择客户名称!');
|
|
|
@@ -1715,7 +1886,6 @@ export default {
|
|
|
this.$refs.saleorderDialogRef.open(this.form.contractInfo.id, obj);
|
|
|
}
|
|
|
},
|
|
|
- // 销售订单选择回调
|
|
|
saleorderChange(data) {
|
|
|
this.$set(this.form, 'orderCode', data.orderCode);
|
|
|
this.$set(this.form, 'orderId', data.orderId);
|
|
|
@@ -1731,11 +1901,9 @@ export default {
|
|
|
this.$set(this.form, 'faultDetailList', []);
|
|
|
}
|
|
|
},
|
|
|
- // 打开产品选择弹窗
|
|
|
customersDialogOpen() {
|
|
|
this.$refs.productDialogRef.open();
|
|
|
},
|
|
|
- // 产品选择回调
|
|
|
productChange(data) {
|
|
|
this.$set(this.form, 'faultDetailList', []);
|
|
|
this.$set(this.form, 'orderCode', data.orderCode);
|
|
|
@@ -1747,7 +1915,6 @@ export default {
|
|
|
);
|
|
|
this.$set(this.form, 'tableList', list);
|
|
|
},
|
|
|
- // 添加故障
|
|
|
addFaults() {
|
|
|
this.form.faultDetailList.push({
|
|
|
maintenanceProcess: '',
|
|
|
@@ -1755,11 +1922,9 @@ export default {
|
|
|
faultPhenomenon: ''
|
|
|
});
|
|
|
},
|
|
|
- // 删除故障
|
|
|
faultDel(index) {
|
|
|
this.form.faultDetailList.splice(index, 1);
|
|
|
},
|
|
|
- // 关联类型选择回调
|
|
|
selectType(e) {
|
|
|
this.$set(this.form, 'tableList', []);
|
|
|
this.$set(this.form, 'faultDetailList', []);
|
|
|
@@ -1769,30 +1934,11 @@ export default {
|
|
|
this.isOrder = false;
|
|
|
}
|
|
|
},
|
|
|
- // 派车类型选择回调
|
|
|
- async selectpietype(e) {
|
|
|
- if (e == '1' || e == '2') {
|
|
|
- this.defaultTemplateList = await getBpmCustomFormList({ status: 1 });
|
|
|
- this.carByTemplate = this.defaultTemplateList.find(
|
|
|
- (item) => item?.code === 'carBy'
|
|
|
- );
|
|
|
- if (this.carByTemplate && this.carByTemplate.formJson?.makingJson) {
|
|
|
- this.formSchema = JSON.parse(this.carByTemplate.formJson.makingJson);
|
|
|
- this.formSchema.config.dataSource &&
|
|
|
- this.formSchema.config.dataSource.forEach((item) => {
|
|
|
- item.headers = {
|
|
|
- Authorization: getToken()
|
|
|
- };
|
|
|
- });
|
|
|
- } else {
|
|
|
- this.formSchema = {};
|
|
|
- }
|
|
|
- this.processSubmitDialogFlag = true;
|
|
|
- }
|
|
|
+ selectaftertype(e) {
|
|
|
+ console.log(e);
|
|
|
},
|
|
|
- // 流程表单提交回调
|
|
|
- handleFormSubmit(data) {
|
|
|
- this.carFormData = data;
|
|
|
+ async selectpietype(e) {
|
|
|
+ console.log(this.form.pietype);
|
|
|
}
|
|
|
}
|
|
|
};
|
|
|
@@ -1809,4 +1955,15 @@ export default {
|
|
|
margin-left: 16px;
|
|
|
color: #e6a23c;
|
|
|
}
|
|
|
+:deep(.el-row) {
|
|
|
+ display: flex;
|
|
|
+ flex-wrap: wrap; /* 确保列超出时换行,而非错位 */
|
|
|
+}
|
|
|
+:deep(.remark-input .el-textarea__inner) {
|
|
|
+ color: #f56c6c !important;
|
|
|
+}
|
|
|
+
|
|
|
+:deep(.remark-input .el-textarea.is-disabled .el-textarea__inner) {
|
|
|
+ color: #f56c6c !important;
|
|
|
+}
|
|
|
</style>
|