@@ -0,0 +1,225 @@ | |||
<template> | |||
<!-- 设备更换 --> | |||
<el-dialog v-model="exchangeInformationDialog" width="40%" title="设备更换" @close="exchangeInformationClose"> | |||
<el-form ref="exchangeInformationRef" :rules="{ | |||
damageMode: [{ required: true, message: '不能为空', trigger: 'change' }], | |||
fileUrl: [{ required: true, message: '不能为空', trigger: 'change' }], | |||
reason: [{ required: true, message: '不能为空', trigger: 'blur' }], | |||
applyType: [{ required: true, message: '不能为空', trigger: 'change' }] | |||
}" :model="exchangeInformationForm" | |||
label-width="120px"> | |||
<el-form-item label="换货类型" prop="applyType"> | |||
<el-select clearable v-model="exchangeInformationForm.applyType" placeholder="请选择换货类型"> | |||
<el-option :label="item.label" :key="item.value" :value="item.value" v-for="item in applyTypeList" /> | |||
</el-select></el-form-item> | |||
<el-form-item label="损坏方式" prop="damageMode"> | |||
<el-radio-group v-model="exchangeInformationForm.damageMode"> | |||
<el-radio label="NATURAL">自然损坏</el-radio> | |||
<el-radio label="ARTIFICIAL">人为损坏</el-radio> | |||
</el-radio-group> | |||
</el-form-item> | |||
<el-form-item label="图片" prop="fileUrl"> | |||
<el-upload | |||
class="avatar-uploader" | |||
action="/minIo/upload" | |||
:show-file-list="false" | |||
:on-success="handleAvatarSuccess" | |||
:before-upload="beforeAvatarUpload" | |||
> | |||
<img v-if="exchangeInformationForm.fileUrl" :src="exchangeInformationForm.fileUrl" class="avatar" /> | |||
<el-icon v-else class="avatar-uploader-icon"><Plus /></el-icon> | |||
</el-upload> | |||
</el-form-item> | |||
<el-form-item label="更换原因" prop="reason"> | |||
<el-input v-trim clearable type="textarea" maxlength="100" show-word-limit | |||
v-model="exchangeInformationForm.reason" placeholder="请输入更换原因"></el-input> | |||
</el-form-item> | |||
</el-form> | |||
<template #footer> | |||
<el-button @click="exchangeInformationDialog = false">取 消</el-button> | |||
<el-button type="primary" @click="exchangeInformationsubmitForm(exchangeInformationRef)">确 定</el-button> | |||
</template> | |||
</el-dialog> | |||
</template> | |||
<script setup lang="ts"> | |||
// @ts-ignore crudFrom模板 | |||
import { computed, reactive, ref } from 'vue' | |||
import { ElMessage, type FormInstance, type FormRules } from 'element-plus' | |||
import infoDialog from '@/components/approvalProcessDetail/index.vue' | |||
// @ts-ignore | |||
import BaseService from '@/utils/baseService' | |||
// @ts-ignore | |||
const props = defineProps({ | |||
dataList: { | |||
type: Object, | |||
default: () => ({}), | |||
}, | |||
modelValue: { | |||
type: Boolean, | |||
default: false, | |||
}, | |||
field: { | |||
type: Object, | |||
default: () => ({}), | |||
}, | |||
}) | |||
const emit = defineEmits(['update:modelValue', 'closeExamine']) | |||
const isShow = computed({ | |||
get: function () { | |||
return props.modelValue | |||
}, | |||
set: function (newValue) { | |||
emit('update:modelValue', newValue) | |||
}, | |||
}) | |||
const ruleForm = reactive({ | |||
reject: '', | |||
comment: '', | |||
}) | |||
const redioChange = (key) => { | |||
if (key) { | |||
ruleForm.comment = '通过' | |||
} else { | |||
ruleForm.comment = '拒绝' | |||
} | |||
} | |||
const ruleFormRef = ref<FormInstance>() | |||
const rules = reactive<FormRules<typeof ruleForm>>({ | |||
reject: [{ required: true, message: '请选择审批意见', trigger: 'blur' }], | |||
comment: [{ required: true, message: '请填写审批原因', trigger: 'blur' }], | |||
}) | |||
const submitForm = (formEl: FormInstance | undefined) => { | |||
if (!formEl) return | |||
formEl.validate((valid) => { | |||
if (valid) { | |||
let params = { | |||
...ruleForm, | |||
processId: props.dataList.id, | |||
} | |||
BaseService.post('/settlew/processweb/completeprocess', params).then( | |||
(res: any) => { | |||
if (res && res.code === 0) { | |||
ElMessage.success('审批成功') | |||
// 关闭页面 | |||
ruleForm.reject = '' | |||
ruleForm.comment = '' | |||
isShow.value = false | |||
emit('closeExamine') | |||
formEl.resetFields() | |||
} else { | |||
ElMessage.error(res.message) | |||
} | |||
} | |||
) | |||
// .finally(() => { | |||
// isLoading.value = false | |||
// }) | |||
} else { | |||
console.log('error submit!') | |||
return false | |||
} | |||
}) | |||
} | |||
const resetForm = (formEl: FormInstance | undefined) => { | |||
if (!formEl) return | |||
formEl.resetFields() | |||
} | |||
const fields = ref({ | |||
tabSize: 'small', //Table 的尺寸 large / default /small (默认default) | |||
searchShow: false, //是否显示搜索模块(默认false) | |||
border: false, //是否添加边框(默认false) | |||
dialogCustom: true, //自定义Dialog (默认false),配合查看使用 | |||
dialogFooter: true, //隐藏弹窗页脚显示 (默认false) | |||
dialogWidth: '50%', //dialog宽度 (默认40%) | |||
crudChildShow: true, //是否显示CURD子操作栏 (默认true) | |||
paginStart: false, //是否显示分页查询 (默认false) | |||
isPageSizes: false, | |||
pageLayout: 'total, prev, pager, next, jumper', | |||
titleDialog: '', //table 标题 | |||
tableMaxHeight: '180px', | |||
crudShow: false, //是否显示CURD操作栏 (默认true) | |||
searchOperation: { | |||
isDownload: false, //开启下载 | |||
isAdd: false, | |||
isTransferMachine: false, | |||
isToLead: false, //导入 | |||
}, | |||
tableSize: -1, | |||
operateShow: true, //是否为表格添加操作栏(默认true) | |||
operateTitle: '操作', //操作栏标题(默认为"") | |||
operateFixed: false, //操作栏是否固定(默认false) | |||
operateWidth: '100', //操作栏宽度 | |||
operate: { | |||
edit: false, //是否编辑(默认true) | |||
delete: false, //是否删除(默认true) | |||
announcement: false, // 公告 | |||
remark: false, // 查看 | |||
info: false, //详情 | |||
forbidden: false, // 禁用 | |||
enable: false, // 启用 | |||
authorization: false, // 授权 | |||
cancel: false, // 取消订单 | |||
writeOff: false, // 注销 | |||
make: false, // 补缴 | |||
}, | |||
extend: [ | |||
{ | |||
type: 'index', | |||
label: '序号', | |||
}, | |||
], | |||
field: [ | |||
{ | |||
prop: 'dataReport', | |||
label: '数据报表', | |||
}, | |||
{ | |||
prop: 'fileName', | |||
label: '文件名', | |||
}, | |||
{ | |||
label: '上传时间', | |||
prop: 'insertTime', | |||
funRuleStarts: true, | |||
funRule: (val) => { | |||
if (val) { | |||
return val.replaceAll('T', ' ') | |||
} | |||
return val | |||
}, | |||
}, | |||
], | |||
}) | |||
</script> | |||
<style scoped lang="less"> | |||
.desc-content { | |||
border: 1px solid #ebeef5; | |||
.desc-item { | |||
padding: 8px 11px; | |||
box-sizing: border-box; | |||
} | |||
.desc-flex { | |||
display: flex; | |||
padding: 8px 11px; | |||
box-sizing: border-box; | |||
} | |||
.title-txt { | |||
font-weight: 700; | |||
color: #606266; | |||
background: #f5f7fa; | |||
box-sizing: border-box; | |||
text-align: left; | |||
line-height: 23px; | |||
font-size: 14px; | |||
} | |||
} | |||
</style> |
@@ -156,6 +156,19 @@ | |||
<!-- 设备更换 --> | |||
<el-dialog v-model="exchangeInformationDialog" width="40%" title="设备更换" @close="exchangeInformationClose"> | |||
<el-form ref="exchangeInformationRef" :rules="{ | |||
sendStatus: [{ required: true, message: '不能为空', trigger: 'change' }], | |||
consignee: [{ required: true, message: '不能为空', trigger: 'blur' }], | |||
consigneeTel: [{ required: true, message: '不能为空', trigger: 'blur' }, { | |||
pattern: | |||
/^1(3[0-9]|4[01456879]|5[0-35-9]|6[2567]|7[0-8]|8[0-9]|9[0-35-9])\d{8}$/, //正则校验不用字符串 | |||
message: '请填写正确的手机号码', | |||
trigger: 'blur', | |||
},], | |||
region: [{ required: true, message: '不能为空', trigger: 'blur' }], | |||
address: [{ required: true, message: '不能为空', trigger: 'blur' }], | |||
receiveMethod: [{ required: true, message: '不能为空', trigger: 'change' }], | |||
courierCompany: [{ required: true, message: '不能为空', trigger: 'blur' }], | |||
courierOrderId: [{ required: true, message: '不能为空', trigger: 'blur' }], | |||
damageMode: [{ required: true, message: '不能为空', trigger: 'change' }], | |||
fileUrl: [{ required: true, message: '不能为空', trigger: 'change' }], | |||
reason: [{ required: true, message: '不能为空', trigger: 'blur' }], | |||
@@ -179,11 +192,58 @@ | |||
:show-file-list="false" | |||
:on-success="handleAvatarSuccess" | |||
:before-upload="beforeAvatarUpload" | |||
ref="applyUploadImg" | |||
> | |||
<img v-if="exchangeInformationForm.fileUrl" :src="exchangeInformationForm.fileUrl" class="avatar" /> | |||
<el-icon v-else class="avatar-uploader-icon"><Plus /></el-icon> | |||
</el-upload> | |||
</el-form-item> | |||
<el-form-item style="font-weight: 900;" label="邮寄方式"></el-form-item> | |||
<el-form-item label="是否需要邮寄" prop="sendStatus"> | |||
<el-radio-group v-model="exchangeInformationForm.sendStatus"> | |||
<el-radio label="1">邮寄</el-radio> | |||
<el-radio label="0">不邮寄</el-radio> | |||
</el-radio-group> | |||
</el-form-item> | |||
<div v-if="exchangeInformationForm.sendStatus == '1'"> | |||
<el-form-item label="收件人姓名" prop="consignee"> | |||
<el-input maxlength="60" v-trim clearable v-model="exchangeInformationForm.consignee" | |||
placeholder="请输入收件人姓名"></el-input> | |||
</el-form-item> | |||
<el-form-item label="收件人电话" prop="consigneeTel"> | |||
<el-input maxlength="60" v-trim clearable v-model="exchangeInformationForm.consigneeTel" | |||
placeholder="请输入收件人电话"></el-input> | |||
</el-form-item> | |||
<el-form-item label="收货地区" prop="region"> | |||
<el-cascader v-model="exchangeInformationForm.region" placeholder="请选择收货地址" :options="pcaText" /> | |||
</el-form-item> | |||
<el-form-item label="详细地址" prop="address"> | |||
<el-input maxlength="60" v-trim clearable v-model="exchangeInformationForm.address" | |||
placeholder="请输入详细地址"></el-input> | |||
</el-form-item> | |||
<el-form-item label="邮政编码" prop="postalCode"> | |||
<el-input maxlength="60" v-trim clearable v-model="exchangeInformationForm.postalCode" | |||
placeholder="请输入邮政编码"></el-input> | |||
</el-form-item> | |||
</div> | |||
<el-form-item style="font-weight: 900;" label="收货方式"></el-form-item> | |||
<el-form-item label="收货方式" prop="receiveMethod"> | |||
<el-radio-group v-model="exchangeInformationForm.receiveMethod"> | |||
<el-radio label="1">线上</el-radio> | |||
<el-radio label="0">线下</el-radio> | |||
</el-radio-group> | |||
</el-form-item> | |||
<div v-if="exchangeInformationForm.receiveMethod == '1'"> | |||
<el-form-item label="物流公司" prop="courierCompany"> | |||
<el-select clearable v-model="exchangeInformationForm.courierCompany" placeholder="请选择物流公司"> | |||
<el-option :label="item" :key="item" :value="item" v-for="item in logisticsCompanyList" /> | |||
</el-select> | |||
</el-form-item> | |||
<el-form-item label="物流单号" prop="courierOrderId"> | |||
<el-input maxlength="60" v-trim clearable v-model="exchangeInformationForm.courierOrderId" | |||
placeholder="请输入物流单号"></el-input> | |||
</el-form-item> | |||
</div> | |||
<el-form-item label="更换原因" prop="reason"> | |||
<el-input v-trim clearable type="textarea" maxlength="100" show-word-limit | |||
v-model="exchangeInformationForm.reason" placeholder="请输入更换原因"></el-input> | |||
@@ -288,6 +348,7 @@ | |||
onMounted(() => { | |||
getList(); | |||
getLogisticsCompanyList() | |||
}) | |||
// 搜索按钮 | |||
function btnSearch() { | |||
@@ -295,6 +356,19 @@ | |||
getList(); | |||
} | |||
// 设备更换******************************************** | |||
import { pcaTextArr } from 'element-china-area-data' | |||
const pcaText: any = pcaTextArr | |||
const logisticsCompanyList = ref([]) | |||
function getLogisticsCompanyList() { | |||
BaseService.post('/managew/order/couriercompanyselect', {}).then((res: any) => { | |||
if (res && res.statusCode === 0) { | |||
logisticsCompanyList.value = res?.data ? res.data : [] | |||
} else { | |||
ElMessage.error(res.message) | |||
} | |||
}) | |||
} | |||
const applyUploadImg = ref() | |||
const applyTypeList = [ | |||
{ | |||
label: '换卡', | |||
@@ -318,14 +392,33 @@ | |||
oldCardId: '', | |||
oldObuId: '', | |||
vehicleId: '', | |||
fileUrl: '' | |||
fileUrl: '', | |||
sendStatus: '1', | |||
consignee: '', | |||
consigneeTel: '', | |||
region: '', | |||
address: '', | |||
postalCode: '', | |||
receiveMethod: '1', | |||
courierCompany: '', | |||
courierOrderId: '', | |||
}) | |||
function exchangeInformationClose() { | |||
if (exchangeInformationRef.value) exchangeInformationRef.value.resetFields() | |||
if (uploadImg.value) uploadImg.value.clearFiles() | |||
if (applyUploadImg.value) applyUploadImg.value.clearFiles() | |||
exchangeInformationForm.fileUrl = '' | |||
exchangeInformationForm.reason = '', | |||
exchangeInformationForm.applyType = '', | |||
exchangeInformationForm.damageMode = 'NATURAL' | |||
exchangeInformationForm.damageMode = 'NATURAL', | |||
exchangeInformationForm.sendStatus = '1', | |||
exchangeInformationForm.consignee = '', | |||
exchangeInformationForm.consigneeTel = '', | |||
exchangeInformationForm.region = '', | |||
exchangeInformationForm.address = '', | |||
exchangeInformationForm.postalCode = '', | |||
exchangeInformationForm.receiveMethod = '1', | |||
exchangeInformationForm.courierCompany = '', | |||
exchangeInformationForm.courierOrderId = '' | |||
} | |||
function handleEquipmentReplacement(row){ | |||
exchangeInformationDialog.value = true | |||
@@ -339,8 +432,38 @@ | |||
if (valid) { | |||
BaseService.postN('/iaw/api/afterSale/changeCardObu/apply', exchangeInformationForm).then((res: any) => { | |||
if (res && res.statusCode === 0) { | |||
ElMessage.success('申请成功') | |||
exchangeInformationDialog.value = false | |||
const data = res.data | |||
exchangeInformationForm.id = data | |||
if (exchangeInformationForm.sendStatus == '0') { | |||
exchangeInformationForm.consignee = '' | |||
exchangeInformationForm.consigneeTel = '' | |||
exchangeInformationForm.region = '' | |||
exchangeInformationForm.address = '' | |||
exchangeInformationForm.postalCode = '' | |||
} | |||
if (exchangeInformationForm.receiveMethod == '0') { | |||
exchangeInformationForm.courierCompany = '' | |||
exchangeInformationForm.courierOrderId = '' | |||
} | |||
if (exchangeInformationForm.region && exchangeInformationForm.region.length !== 0) { | |||
exchangeInformationForm.region = exchangeInformationForm.region.join('') | |||
} | |||
let params = {} | |||
let searchFormList = { ...exchangeInformationForm } | |||
for (let key in searchFormList) { | |||
if (searchFormList[key]) { | |||
params[key] = searchFormList[key] | |||
} | |||
} | |||
BaseService.post('/iaw/api/afterSale/changeCardObu/fill', searchFormList).then((res: any) => { | |||
if (res && res.statusCode === 0) { | |||
ElMessage.success('申请成功') | |||
exchangeInformationDialog.value = false | |||
getList() //页面数据刷新 | |||
} else { | |||
ElMessage.error(res.message) | |||
} | |||
}) | |||
} else { | |||
ElMessage.error(res.message) | |||
} |
@@ -134,7 +134,7 @@ | |||
//数据转换 | |||
let bizContent = res.data | |||
console.log(bizContent, 'bizContentbizContent') | |||
let data = bizContent.data || []; | |||
let data = bizContent.result || []; | |||
//数据渲染 | |||
tableData.value = data; | |||
crudRef.value.tableLoding = false; |
@@ -279,7 +279,7 @@ | |||
<el-select clearable v-model="exchangeInformationForm.applyType" placeholder="请选择换货类型"> | |||
<el-option :label="item.label" :key="item.value" :value="item.value" v-for="item in applyTypeList" /> | |||
</el-select></el-form-item> | |||
<el-form-item label="损坏方式"> | |||
<!-- <el-form-item label="损坏方式"> | |||
<el-radio-group v-model="exchangeInformationForm.damageMode"> | |||
<el-radio label="1">自然损坏</el-radio> | |||
<el-radio label="0">人为损坏</el-radio> | |||
@@ -292,7 +292,7 @@ | |||
<Plus /> | |||
</el-icon> | |||
</el-upload> | |||
</el-form-item> | |||
</el-form-item> --> | |||
<el-form-item style="font-weight: 900;" label="邮寄方式"></el-form-item> | |||
<el-form-item label="是否需要邮寄" prop="sendStatus"> | |||
<el-radio-group v-model="exchangeInformationForm.sendStatus"> | |||
@@ -483,7 +483,7 @@ | |||
courierOrderId: '', | |||
applyRes: '', | |||
applyType: '', | |||
damageMode: '1' | |||
// damageMode: '1' | |||
}) | |||
const artificialStatusList = [ | |||
{ | |||
@@ -564,7 +564,7 @@ | |||
function getLogisticsCompanyList() { | |||
BaseService.post('/managew/order/couriercompanyselect', {}).then((res: any) => { | |||
if (res && res.statusCode === 0) { | |||
logisticsCompanyList.value = res?.bizContent ? res.data : [] | |||
logisticsCompanyList.value = res?.data ? res.data : [] | |||
} else { | |||
ElMessage.error(res.message) | |||
} | |||
@@ -774,8 +774,8 @@ | |||
exchangeInformationForm.courierCompany = '', | |||
exchangeInformationForm.courierOrderId = '', | |||
exchangeInformationForm.applyRes = '', | |||
exchangeInformationForm.applyType = '', | |||
exchangeInformationForm.damageMode = '1' | |||
exchangeInformationForm.applyType = '' | |||
// exchangeInformationForm.damageMode = '1' | |||
} | |||
//订单发货 | |||
@@ -815,23 +815,14 @@ | |||
orderId: beanData.orderId, | |||
applyType: exchangeInformationForm.applyType, | |||
returnReason: exchangeInformationForm.applyRes, | |||
damageMode: exchangeInformationForm.damageMode | |||
// damageMode: exchangeInformationForm.damageMode | |||
} | |||
params.fileUrl = fileList.value.map((item: any) => { | |||
return '/default-bucket/' + item?.response?.data?.ossFilePath | |||
}).join() | |||
// params.fileUrl = fileList.value.map((item: any) => { | |||
// return '/default-bucket/' + item?.response?.data?.ossFilePath | |||
// }).join() | |||
timerExchange = setTimeout(() => { | |||
// 获取888接口后的id在调887填写信息接口 | |||
exchangeInformationRef.validate((valid: any, fields: any) => { | |||
if (valid) { | |||
BaseService.post(exchangeGoods, params).then((res: any) => { | |||
if (res && res.statusCode === 0) { | |||
const data = JSON.parse(res.bizContent) | |||
exchangeInformationForm.configId = '6a9a54bc01f6443faea7ffeb8b5b19f6' | |||
exchangeInformationForm.id = data?.id ?? '' | |||
if (exchangeInformationForm.region && exchangeInformationForm.region.length !== 0) { | |||
exchangeInformationForm.region = exchangeInformationForm.region.join('') | |||
} | |||
if (exchangeInformationForm.sendStatus == '0') { | |||
exchangeInformationForm.consignee = '' | |||
exchangeInformationForm.consigneeTel = '' | |||
@@ -843,21 +834,19 @@ | |||
exchangeInformationForm.courierCompany = '' | |||
exchangeInformationForm.courierOrderId = '' | |||
} | |||
if (exchangeInformationForm.region && exchangeInformationForm.region.length !== 0) { | |||
exchangeInformationForm.region = exchangeInformationForm.region.join('') | |||
} | |||
let searchFormList = { ...exchangeInformationForm } | |||
for (let key in searchFormList) { | |||
if (searchFormList[key]) { | |||
params[key] = searchFormList[key] | |||
} | |||
} | |||
BaseService.post('887', searchFormList).then((res: any) => { | |||
if (res && res.statusCode === 0) { | |||
BaseService.post('/iaw/issue/order/replaceGoodsFill', params).then((res: any) => { | |||
if (res && res.statusCode === 0) { | |||
exchangeInformationDialog.value = false | |||
ElMessage.success(res.message) | |||
getList() //页面数据刷新 | |||
} else { | |||
ElMessage.error(res.message) | |||
} | |||
}) | |||
} else { | |||
ElMessage.error(res.message) | |||
} |