@@ -0,0 +1,2 @@ | |||
[0117/185843.375:ERROR:registration_protocol_win.cc(108)] CreateFile: 系统找不到指定的文件。 (0x2) | |||
[0119/225829.539:ERROR:registration_protocol_win.cc(108)] CreateFile: 系统找不到指定的文件。 (0x2) |
@@ -1,62 +1,43 @@ | |||
<template> | |||
<el-dialog | |||
v-model="isShow" | |||
width="50%" | |||
:title="conditionStatus === 1 ? '移入状态名单' : '移出状态名单'" | |||
@closed="closedHandle" | |||
> | |||
<el-form | |||
ref="ruleFormRef" | |||
:model="ruleForm" | |||
:rules="rules" | |||
label-width="auto" | |||
status-icon | |||
> | |||
<el-dialog v-model="isShow" width="50%" :title="conditionStatus === 1 ? '移入状态名单' : '移出状态名单'" @closed="closedHandle"> | |||
<el-form ref="ruleFormRef" :model="ruleForm" :rules="rules" label-width="auto" status-icon> | |||
<template v-if="conditionStatus === 1"> | |||
<el-form-item label="下黑原因" prop="businessType"> | |||
<el-select | |||
clearable | |||
v-model="ruleForm.businessType" | |||
placeholder="请选择下黑原因" | |||
filterable | |||
> | |||
<el-option | |||
v-for="item in businessTypeList" | |||
:key="item.value" | |||
:label="item.label" | |||
:value="item.value" | |||
/> | |||
<el-form-item label="下黑原因" prop="reason"> | |||
<el-select clearable v-model="ruleForm.reason" placeholder="请选择下黑原因" filterable> | |||
<el-option v-for="item in BLACKLIST_VEHICLE_RESON" :key="item.value" :label="item.label" | |||
:value="item.value" /> | |||
</el-select> | |||
</el-form-item> | |||
</template> | |||
<template v-else> | |||
<el-form-item label="反白原因" prop="businessType"> | |||
<el-select | |||
clearable | |||
v-model="ruleForm.businessType" | |||
placeholder="请选择反白原因" | |||
filterable | |||
> | |||
<el-option | |||
v-for="item in businessTypeList" | |||
:key="item.value" | |||
:label="item.label" | |||
:value="item.value" | |||
/> | |||
<el-form-item label="反白原因" prop="reason"> | |||
<el-select clearable v-model="ruleForm.reason" placeholder="请选择反白原因" filterable> | |||
<el-option v-for="item in BLACKLIST_VEHICLE_RESON" :key="item.value" :label="item.label" | |||
:value="item.value" /> | |||
</el-select> | |||
</el-form-item> | |||
<el-form-item label="请上传佐证材料" prop="reason"> | |||
<div style="width: 100%"> | |||
<el-upload :file-list="fileList" | |||
action="/uploadEtcFile?accountNum=xzxt&secretKey=15d217c-9c03-12ec-ca76-0242ac110321" | |||
list-type="picture-card" :on-preview="handlePictureCardPreview" :limit="5" :multiple="true" :on-exceed="handleExceed" | |||
:on-remove="(el) => onRemove(el)" @success="onSuccess"> | |||
<!-- <i class="el-icon-plus"></i> --> | |||
<el-icon> | |||
<Plus /> | |||
</el-icon> | |||
</el-upload> | |||
<el-dialog :visible.sync="dialogVisible"> | |||
<img width="100%" :src="dialogImageUrl" alt=""> | |||
</el-dialog> | |||
</div> | |||
</el-form-item> | |||
</template> | |||
<el-form-item label="备注" prop="category"> | |||
<el-input | |||
maxlength="60" | |||
v-trim | |||
clearable | |||
v-model="ruleForm.category" | |||
placeholder="请输入备注" | |||
/> | |||
</el-form-item> | |||
<el-form-item label="备注" prop="msg"> | |||
<el-input maxlength="60" v-trim clearable v-model="ruleForm.msg" placeholder="请输入备注" /> | |||
</el-form-item> | |||
</el-form> | |||
<template #footer> | |||
@@ -69,23 +50,60 @@ | |||
</template> | |||
<!-- web端信息推送 --> | |||
<script setup lang="ts"> | |||
import { ElMessage } from 'element-plus' | |||
import { UploadInstance, ElMessage, UploadProps, UploadRawFile, genFileId } from 'element-plus' | |||
// 请求函数 | |||
// @ts-ignore | |||
import BaseService from '@/utils/baseService' | |||
import { computed, ref } from 'vue' | |||
import { computed, ref, toRaw, nextTick } from 'vue' | |||
import type { FormInstance } from 'element-plus' | |||
import $storeinitData from '@/store/initData' //引入tab vuex | |||
import { AnyAaaaRecord } from 'dns' | |||
const crudRef = ref() | |||
interface Props { | |||
modelValue: any | |||
conditionStatus: any //1表示当前正常 0下黑 | |||
dataList: any | |||
businessTypeList: any | |||
dataList: any, | |||
form: [] | |||
} | |||
const dialogImageUrl = ref('') | |||
const dialogVisible = ref(false) | |||
function handlePictureCardPreview(file) { | |||
dialogImageUrl.value = file.url; | |||
dialogVisible.value = true; | |||
} | |||
function handleExceed() { | |||
ElMessage.error("目前限制最多上传5张图片") | |||
} | |||
const upload = ref<UploadInstance>() | |||
const uploadImg = ref<UploadInstance>() | |||
// 选装黑名单原因 | |||
const BLACKLIST_VEHICLE_RESON = computed(() => { | |||
return $storeinitData.state.dictData['BLACKLIST_VEHICLE_RESON'] || [] | |||
}) | |||
//文件上传成功 | |||
const fileList = ref<any>([]) | |||
function onSuccess(response: any) { | |||
// import.meta.env.VITE_APP_UPLOAD_URL + | |||
// const url = '/default-bucket/' + response.data.ossFilePath | |||
fileList.value.push(response.data.fileUrl) | |||
// props.form[item.prop] = fileList.value.join(';') | |||
// emit('uploadSuccess', response, item) | |||
} | |||
function onRemove(response) { | |||
const index = fileList.value.indexOf(response.data.fileUrl) | |||
if (index !== -1) { | |||
fileList.value.splice(index, 1) | |||
} | |||
} | |||
const ruleFormRef = ref() | |||
const props = defineProps<Props>() | |||
const isLoading = ref(false) //加载效果 | |||
const emit = defineEmits(['update:modelValue', 'handleSubmit']) | |||
const emit = defineEmits(['update:modelValue', 'handleSubmit', 'uploadSuccess']) | |||
const isShow = computed({ | |||
get: function () { | |||
return props.modelValue | |||
@@ -111,15 +129,21 @@ const rules = ref({ | |||
], | |||
}) | |||
const ruleForm = ref<any>({ | |||
serviceType: '', //客服类别 | |||
key: '', //关键字 | |||
category: '', //类别 | |||
businessType: '', //业务类型 | |||
solution: '', //反馈内容 | |||
agentId: '', //渠道编号 | |||
vehicleId: '', //车辆编号 | |||
type: '', //状态名单类型 | |||
reason: '', //状态名单类型 | |||
operator: '', //操作人 | |||
msg: '', //备注 | |||
enclosureUrl: [], //反白图片附件 | |||
}) | |||
const closedHandle=()=>{ | |||
const closedHandle = () => { | |||
ruleFormRef.value.resetFields() | |||
} | |||
const username = computed(() => { | |||
return $storeinitData.getters.userName || '' | |||
}) | |||
//编辑与添加提交 | |||
function submit(formEl: FormInstance | undefined) { | |||
if (!formEl) return | |||
@@ -135,8 +159,16 @@ function submit(formEl: FormInstance | undefined) { | |||
} | |||
// 提交 | |||
function toSubmit(data: any) { | |||
BaseService.post('IF01001202502071286', data).then((res: any) => { | |||
let datas = JSON.parse(JSON.stringify(toRaw(data))); | |||
datas.operator = username.value | |||
datas.agentId = '52010188931' | |||
datas.type = props.conditionStatus == 1 ? 1 : 2 | |||
datas.vehicleId = props.dataList.vehicleId | |||
datas.reason = parseInt(datas.reason) | |||
datas.enclosureUrl = fileList.value; | |||
BaseService.post('IF01001202502071286', datas).then((res: any) => { | |||
if (res && res.statusCode === 0) { | |||
isShow.value = false | |||
ElMessage.success('操作成功') | |||
emit('handleSubmit') | |||
} else { |
@@ -1,13 +1,17 @@ | |||
<template> | |||
<el-dialog v-model="isShow" width="70%" title="详情"> | |||
<el-dialog v-model="isShow" width="50%"> | |||
<div class="title-header">车辆详情</div> | |||
<div class="info-header"> | |||
<div class="status-con"> | |||
<div class="l-txt"> | |||
<span class="txt">状态名单:</span> | |||
<div class="l-txt" style="display: flex;flex-direction: row;"> | |||
<span class="txt" style="margin-left: 5px;font-weight:bold">状态名单:</span> | |||
<span class="info"> | |||
{{ conditionStatus === 1 ? '正常' : '已进入状态名单' }} | |||
</span> | |||
<div v-if="conditionStatus === 0" style="margin-left: 50px;"> | |||
<span style="font-weight:bold">原因:</span> | |||
<span>{{ handleReson() }}</span> | |||
</div> | |||
</div> | |||
<div class="r-btn"> | |||
<el-button type="primary" @click="changeStatus"> | |||
@@ -15,12 +19,6 @@ | |||
</el-button> | |||
</div> | |||
</div> | |||
<div class="reson-con"> | |||
<div v-if="conditionStatus === 0"> | |||
<span>原因:</span> | |||
<span>{{ handleReson() }}</span> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="info-con"> | |||
<div class="item-box" v-for="item in userOptions"> | |||
@@ -30,7 +28,7 @@ | |||
<template v-else> | |||
<div class="item-con border-br" v-for="ele in item.children"> | |||
<div class="item-title">{{ ele.label }}</div> | |||
<div class="item-info">{{ handleData(ele, dataList) }}</div> | |||
<div class="item-info">{{ handleData(ele, dataList.aflCenterUserInfoVo) }}</div> | |||
</div> | |||
</template> | |||
</div> | |||
@@ -81,12 +79,8 @@ | |||
</div> | |||
</div> | |||
</el-dialog> | |||
<blacklistDialog | |||
v-model="blackListShow" | |||
:conditionStatus="conditionStatus" | |||
:dataList="dataList" | |||
@handleSubmit="emit('handleSubmit', dataList.id, false)" | |||
/> | |||
<blacklistDialog v-model="blackListShow" :conditionStatus="conditionStatus" :dataList="dataList" | |||
@handleSubmit="emit('handleSubmit', dataList.id, false)" /> | |||
</template> | |||
<!-- web端信息推送 --> | |||
<script setup lang="ts"> | |||
@@ -98,6 +92,7 @@ import BaseService from '@/utils/baseService' | |||
import blacklistDialog from './blacklistDialog.vue' | |||
import { computed, ref } from 'vue' | |||
import type { FormInstance } from 'element-plus' | |||
import $storeinitData from '@/store/initData' //引入tab vuex | |||
const crudRef = ref() | |||
interface Props { | |||
modelValue: any | |||
@@ -105,6 +100,9 @@ interface Props { | |||
VEHICLE_COLOR_TYPE: any | |||
VEHICLE_MODEL_TYPE: any | |||
REGISTRATION_TYPE: any | |||
XZ_OBU_STATUS: any | |||
XZ_INSTALL_TYPE: any | |||
XZ_ACCOUNT_TYPE: any | |||
useStatus: any | |||
auditStatus: any | |||
CARD_STATE_TYPE: any | |||
@@ -144,14 +142,23 @@ const conditionStatus = computed(() => { | |||
return txt | |||
}) | |||
const handleData = (itemData, datasList = {}) => { | |||
let datas = datasList[itemData.prop] | |||
let datas: any = null | |||
if (datasList) { | |||
datas = datasList[itemData.prop] | |||
if (itemData.type == 'select') { | |||
datas = itemData.listData.find((item) => item.value == datas)?.label | |||
} | |||
if (itemData.isTime) { | |||
datas = datas ? datas.replace('T', ' ') : '' | |||
if (itemData.type == 'select') { | |||
console.log(itemData.listData, itemData.label); | |||
datas = itemData.listData.find((item) => item.value == datas)?.label | |||
} | |||
if (itemData.type == 'data' && datas && datas.length > 5) { | |||
datas = datas.match(/\d{4}-\d{2}-\d{2}/)[0]; | |||
} | |||
if (itemData.type == 'menu' && datas) { | |||
datas = datas + ''.startsWith("1") ? '记账卡' : '储值卡' | |||
} | |||
} | |||
return datas || '--' | |||
} | |||
const blackListShow = ref(false) | |||
@@ -167,17 +174,38 @@ const userOptions = [ | |||
isinfo: true, | |||
children: [ | |||
{ | |||
label: '用户编号', | |||
prop: 'accountId', | |||
label: '用户名称', | |||
prop: 'name', | |||
}, | |||
{ | |||
label: '用户名称', | |||
prop: 'ownerName', | |||
label: '用户类型', | |||
prop: 'accountType', | |||
type: 'select', | |||
listData: props.XZ_ACCOUNT_TYPE, | |||
}, | |||
{ | |||
label: '创建时间', | |||
prop: 'insertTime', | |||
isTime: true, | |||
label: '证件类型', | |||
prop: 'idType', | |||
}, | |||
{ | |||
label: '证件号码', | |||
prop: 'idNum', | |||
}, | |||
{ | |||
label: '手机号码', | |||
prop: 'mobile', | |||
}, | |||
{ | |||
label: '经办人姓名', | |||
prop: 'agentName', | |||
}, | |||
{ | |||
label: '经办人证件类型', | |||
prop: 'agentIdType', | |||
}, | |||
{ | |||
label: '经办人证件号', | |||
prop: 'agentIdNum', | |||
}, | |||
], | |||
}, | |||
@@ -218,10 +246,6 @@ const carOptions = [ | |||
label: '车主姓名', | |||
prop: 'ownerName', | |||
}, | |||
{ | |||
label: '注册日期', | |||
prop: 'registerDate', | |||
}, | |||
{ | |||
label: '发证日期', | |||
prop: 'issueDate', | |||
@@ -276,34 +300,7 @@ const carOptions = [ | |||
label: '轴距', | |||
prop: 'axleDistance', | |||
}, | |||
{ | |||
label: '变更后发动机号', | |||
prop: 'newEngineNo', | |||
}, | |||
{ | |||
label: '变更后发证日期', | |||
prop: 'newIssueDate', | |||
}, | |||
{ | |||
label: '变更后注册日期', | |||
prop: 'newRegisterDate', | |||
}, | |||
{ | |||
label: '变更后检测记录', | |||
prop: 'newTestRecord', | |||
}, | |||
{ | |||
label: '变更后轴型', | |||
prop: 'newAxisType', | |||
}, | |||
{ | |||
label: '变更后档案编号', | |||
prop: 'newFileNum', | |||
}, | |||
{ | |||
label: '变更后行驶证品牌型号', | |||
prop: 'newVehicleModel', | |||
}, | |||
], | |||
}, | |||
] | |||
@@ -321,32 +318,30 @@ const obuOptions = [ | |||
}, | |||
{ | |||
label: 'OBU状态', | |||
prop: 'OBU编号', | |||
}, | |||
{ | |||
label: '主机厂', | |||
prop: 'OBU编号', | |||
prop: 'status', | |||
listData: props.XZ_OBU_STATUS, | |||
type: 'select', | |||
}, | |||
{ | |||
label: 'OBU厂家', | |||
prop: 'OBU编号', | |||
}, | |||
{ | |||
label: 'OBU一发时间', | |||
prop: 'OBU编号', | |||
prop: 'model', | |||
}, | |||
{ | |||
label: 'OBU二发时间', | |||
prop: 'OBU编号', | |||
label: 'OBU安装方式', | |||
prop: 'installType', | |||
listData: props.XZ_INSTALL_TYPE, | |||
type: 'select', | |||
}, | |||
{ | |||
label: '开始日期', | |||
prop: 'enableTime', | |||
type: 'data', | |||
isTime: true, | |||
}, | |||
{ | |||
label: '结束日期', | |||
prop: 'OBU编号', | |||
prop: 'expireTime', | |||
type: 'data' | |||
}, | |||
], | |||
}, | |||
@@ -370,31 +365,29 @@ const cpuOptions = [ | |||
listData: props.CARD_STATE_TYPE, | |||
}, | |||
{ | |||
label: '主机厂', | |||
prop: '主机厂', | |||
label: 'CPU卡类型', | |||
prop: 'cardType', | |||
type: 'menu' | |||
}, | |||
// { | |||
// label: 'CPU卡品牌', | |||
// prop: 'brand', | |||
// }, | |||
{ | |||
label: '芯片厂家', | |||
label: 'CPU卡型号', | |||
prop: 'model', | |||
}, | |||
{ | |||
label: 'CPU一发时间', | |||
prop: 'OBU编号', | |||
}, | |||
{ | |||
label: 'CPU二发时间', | |||
prop: 'OBU编号', | |||
}, | |||
{ | |||
label: '开始日期', | |||
prop: 'enableTime', | |||
isTime: true, | |||
type: 'data' | |||
}, | |||
{ | |||
label: '结束日期', | |||
prop: 'expireTime', | |||
isTime: true, | |||
type: 'data' | |||
}, | |||
], | |||
}, | |||
] | |||
@@ -404,16 +397,19 @@ const cpuOptions = [ | |||
margin-top: 20px; | |||
border-left: 1px solid #ddd; | |||
border-top: 1px solid #ddd; | |||
.item-box { | |||
display: flex; | |||
align-items: center; | |||
width: 100%; | |||
align-items: stretch; | |||
flex-wrap: wrap; | |||
.border-br { | |||
border-right: 1px solid #ddd; | |||
border-bottom: 1px solid #ddd; | |||
} | |||
.con-title { | |||
width: 100%; | |||
text-align: center; | |||
@@ -422,12 +418,14 @@ const cpuOptions = [ | |||
color: #666; | |||
padding: 10px 0; | |||
} | |||
.item-con { | |||
display: flex; | |||
align-items: center; | |||
min-width: 50%; | |||
box-sizing: border-box; | |||
flex-grow: 1; | |||
.item-title { | |||
width: 200px; | |||
font-size: 15px; | |||
@@ -440,6 +438,7 @@ const cpuOptions = [ | |||
display: flex; | |||
align-items: center; | |||
} | |||
.item-info { | |||
// flex: 1 1 auto; | |||
width: calc(100% - 200px); | |||
@@ -453,26 +452,23 @@ const cpuOptions = [ | |||
} | |||
} | |||
} | |||
.title-header { | |||
font-size: 22px; | |||
text-align: center; | |||
padding-bottom: 20px; | |||
} | |||
.info-header { | |||
.status-con { | |||
display: flex; | |||
justify-content: space-between; | |||
align-items: center; | |||
.l-txt { | |||
font-size: 14px; | |||
color: #666; | |||
} | |||
} | |||
} | |||
.reson-con { | |||
display: flex; | |||
& > div { | |||
margin-right: 10px; | |||
} | |||
} | |||
</style> |
@@ -153,6 +153,9 @@ | |||
:dataList="crudRef.form" | |||
:VEHICLE_COLOR_TYPE="VEHICLE_COLOR_TYPE" | |||
:REGISTRATION_TYPE="REGISTRATION_TYPE" | |||
:XZ_INSTALL_TYPE="XZ_INSTALL_TYPE" | |||
:XZ_OBU_STATUS="XZ_OBU_STATUS" | |||
:XZ_ACCOUNT_TYPE="XZ_ACCOUNT_TYPE" | |||
:VEHICLE_MODEL_TYPE="VEHICLE_MODEL_TYPE" | |||
:useStatus="useStatus" | |||
:auditStatus="auditStatus" | |||
@@ -199,6 +202,17 @@ const VEHICLE_MODEL_TYPE = computed(() => { | |||
const REGISTRATION_TYPE = computed(() => { | |||
return $storeinitData.state.dictData['REGISTRATION_TYPE'] || [] | |||
}) | |||
// OBU安装方式原因 | |||
const XZ_INSTALL_TYPE = computed(() => { | |||
return $storeinitData.state.dictData['XZ_INSTALL_TYPE'] || [] | |||
}) | |||
// 选装-OBU状态 | |||
const XZ_OBU_STATUS = computed(() => { | |||
return $storeinitData.state.dictData['XZ_OBU_STATUS'] || [] | |||
}) | |||
const XZ_ACCOUNT_TYPE = computed(() => { | |||
return $storeinitData.state.dictData['XZ_ACCOUNT_TYPE'] || [] | |||
}) | |||
const auditStatus = [ | |||
{ | |||
label: '待审核', |
@@ -94,6 +94,10 @@ export default defineConfig(({ command, mode }) => { | |||
target: env.VITE_APP_UPLOAD_URL, | |||
changeOrigin: true, | |||
}, | |||
'/uploadEtcFile': { | |||
target: 'http://100.65.11.2:8086', | |||
changeOrigin: true, | |||
}, | |||
'/sett-minio': { | |||
target: env.VITE_APP_UPLOAD_URL, | |||
changeOrigin: true, |