You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1082 lines
34 KiB
1082 lines
34 KiB
<template> |
|
<basic-container v-loading="PageLoading" element-loading-text="数据正在加载中..."> |
|
<!-- 首页表格 --> |
|
<div class="avue-crud"> |
|
<!-- 搜索模块 --> |
|
<div v-h5uShow="search"> |
|
<!-- 查询模块 --> |
|
<el-form :inline="true" :model="query" class="el-fr-d"> |
|
<!-- 查询按钮 --> |
|
<el-form-item class="el-btn"> |
|
<el-button type="primary" icon="el-icon-search" @click="searchChange">搜 索</el-button> |
|
<el-button icon="el-icon-delete" @click="searchReset()">清 空</el-button> |
|
</el-form-item> |
|
<el-form-item label="配送日期"> |
|
<el-date-picker |
|
v-model="TopQuery.time" |
|
type="datetimerange" |
|
unlink-panels |
|
range-separator="至" |
|
start-placeholder="开始时间" |
|
end-placeholder="结束时间" |
|
:shortcuts="shortcuts" |
|
:default-time="defaultTime2" |
|
/> |
|
</el-form-item> |
|
</el-form> |
|
</div> |
|
<el-tabs type="border-card" v-model="tabValue" @tab-change="tabChenge" class="el_tabs"> |
|
<div></div> |
|
<template v-for="item in TabList"> |
|
<el-tab-pane v-if="item.state" :name="item.name" :label="item.label" :key="item.name"> |
|
</el-tab-pane> |
|
</template> |
|
</el-tabs> |
|
<!-- 控件模块 --> |
|
<el-row> |
|
<div class="avue-crud__header"> |
|
<!-- 头部左侧按钮模块 --> |
|
<div class="avue-crud__left"> |
|
<el-button type="primary" icon="Edit" v-if="ButtonPermissions.add">创建工单</el-button> |
|
<el-button type="primary" icon="Download" v-if="ButtonPermissions.export_Report" |
|
>Excel导出</el-button |
|
> |
|
<el-button type="primary" icon="Download" v-if="ButtonPermissions.Timed_outexport" |
|
>Excel超时导出</el-button |
|
> |
|
<el-button type="primary" icon="Avatar" v-if="ButtonPermissions.defaultassignments" |
|
>默认指派</el-button |
|
> |
|
<el-button type="primary" icon="CloseBold" v-if="ButtonPermissions.batchReject" |
|
>结果批量打回</el-button |
|
> |
|
<el-button type="primary" icon="FolderChecked" v-if="ButtonPermissions.ManagerConfirmed" |
|
>完结批量审核</el-button |
|
> |
|
<el-button type="primary" icon="Select" v-if="ButtonPermissions.Batchdetermination" |
|
>批量确定</el-button |
|
> |
|
<el-button type="primary" icon="Stamp" v-if="ButtonPermissions.Result_review" |
|
>结果批量审核</el-button |
|
> |
|
<el-button type="primary" icon="Pointer" v-if="ButtonPermissions.assignment" |
|
>工单指派</el-button |
|
> |
|
<el-button type="primary" icon="User" v-if="ButtonPermissions.applyArbitration" |
|
>客服介入</el-button |
|
> |
|
<el-button type="primary" icon="EditPen" v-if="ButtonPermissions.DingTalkNumber" |
|
>钉钉号填写</el-button |
|
> |
|
<el-button type="primary" icon="Stamp" v-if="ButtonPermissions.batchFinish" |
|
>批量完结</el-button |
|
> |
|
<el-button type="primary" icon="Stamp" v-if="ButtonPermissions.ArbitrationDetermination" |
|
>批量完结审核</el-button |
|
> |
|
<el-button type="primary" icon="Coin" v-if="ButtonPermissions.Financial_accounting" |
|
>财务入账</el-button |
|
> |
|
</div> |
|
<!-- 头部右侧按钮模块 --> |
|
<div class="avue-crud__right"> |
|
<el-button icon="el-icon-refresh" @click="searchChangeS" circle></el-button> |
|
<el-button icon="Operation" @click="showdrawer(true)" circle></el-button> |
|
<el-button icon="Search" @click="searchHide" circle></el-button> |
|
</div> |
|
</div> |
|
</el-row> |
|
|
|
<!-- 首页表格 --> |
|
<el-row> |
|
<!-- 列表模块 --> |
|
<tablecmt |
|
class="tableNode" |
|
:columnList="details.columnListPublic" |
|
:tableData="data" |
|
:loading="loadingObj.list" |
|
@inputTxt="inputsc" |
|
@timeCheck="timesc" |
|
@selectCheck="selectsc" |
|
@selection="selectionChange" |
|
> |
|
<template #default="slotProps"> |
|
<template v-if="slotProps.scope.column.label === '异常工单号'"> |
|
<el-text class="el_textBtn" @click="InformationViewing(slotProps.scope)"> |
|
{{ |
|
slotProps.scope.column.label === '异常工单号' |
|
? slotProps.scope.row.workOrderNumber |
|
: '' |
|
}} |
|
</el-text> |
|
</template> |
|
|
|
<template v-if="slotProps.scope.column.label === '操作'"> |
|
<el-text>查看</el-text> |
|
</template> |
|
</template> |
|
</tablecmt> |
|
</el-row> |
|
|
|
<!-- 分页模块 --> |
|
<el-row class="el-fy"> |
|
<div class="avue-crud__pagination flex-c-sb" style="width: 100%"> |
|
<div></div> |
|
<el-pagination |
|
align="right" |
|
background |
|
@size-change="sizeChange" |
|
@current-change="currentChange" |
|
:current-page="page.currentPage" |
|
:page-sizes="[30, 50, 80, 120]" |
|
:page-size="page.pageSize" |
|
layout="total, sizes, prev, pager, next, jumper" |
|
:total="page.total" |
|
> |
|
</el-pagination> |
|
</div> |
|
</el-row> |
|
</div> |
|
</basic-container> |
|
<!-- 列表配置显示 --> |
|
<edittablehead |
|
@closce="showdrawer" |
|
:drawerShow="drawerShow" |
|
:columnList="details.columnListPublic" |
|
v-model="details.columnListPublic" |
|
:columnListName="columnListName" |
|
></edittablehead> |
|
</template> |
|
|
|
<script setup> |
|
import { ref, reactive, toRefs, computed, onMounted, nextTick, watch } from 'vue'; |
|
import { useStore } from 'vuex'; |
|
import { |
|
processRowPropertyName, |
|
setNodeHeight, |
|
downloadXls, |
|
handleClearTableQuery, |
|
deepClone, |
|
} from '@/utils/util'; |
|
import { ElMessageBox, ElMessage } from 'element-plus'; |
|
import { getDictionaryBiz } from '@/api/system/dict'; |
|
import dayjs from 'dayjs'; |
|
import { |
|
$_getList, |
|
$_submit, |
|
$_getDetail, |
|
$_remove, |
|
$_getProcessor, |
|
$_AddReply, |
|
$_getExchangeList, |
|
$_getInfo, |
|
$_batchReturn, |
|
$_assignCustomerService, |
|
$_getCustomerServicePersonnel, |
|
$_arbitrate, |
|
$_addCompletionEnd, |
|
$_appealSubmit, |
|
$_listSettlement, |
|
$_listAppeal, |
|
$_listOwn, |
|
$_moneyUpdate, |
|
$_updateWorkList, |
|
$_updateManagerConfirmed, |
|
$_updateWorkOrderStatus, |
|
$_AppealDetails, |
|
$_Cancelappeal, |
|
$_getDetails, |
|
$_settlementUpdate, |
|
$_updateArbitrateStatu, |
|
$_exportAftersalesWorkOrder, |
|
$_aftersalesCustomerMall, |
|
$_aftersalesCustomerMallremove, |
|
$_aftersalesCustomerMallsave, |
|
$_aftersalesCustomerMallsetDefault, |
|
$_updateFinanceTime, |
|
$_basicdataTripartiteMall, |
|
$_aftersalesCustomerMallgetByClientId, |
|
$_exportaftersalesOvertimeFine, |
|
} from '@/api/aftersales/aftersalesWorkOrder'; |
|
import { |
|
columnList, |
|
columnList1, |
|
columnList2, |
|
columnList3, |
|
columnList4, |
|
columnList5, |
|
columnList6, |
|
columnList7, |
|
columnList8, |
|
columnList9, |
|
columnList10, |
|
recordList, |
|
Claimsfield, |
|
AppealList, |
|
timeoutList, |
|
CustomerColumnList, |
|
MallassignmentColumnList, |
|
customerserviceColumnList, |
|
} from '@/option/aftersales/vueTvemp.js'; |
|
// (0, '全部'), |
|
// (8, '待回复'), |
|
// (3, '待处理(新建)'), |
|
// (1, '处理中'), |
|
// (4, '理赔金额未出'), |
|
// (2, '处理完毕'), |
|
// (5, '客服介入'), |
|
// (9, '待审核'), |
|
// (6, '完结'), |
|
// (10, '申诉列表'), |
|
// (7, '超时未处理'), |
|
|
|
const $router = useRouter(); //跳转 |
|
const $useStore = useStore(); //权限 |
|
const $route = useRoute(); //获取地址栏参数 |
|
const tabValue = ref(0); //菜单激活 |
|
const UserPermissions = ref(''); //当前人身份 |
|
const workOrderStatus = ref(30); //工单状态 |
|
const PageLoading = ref(false); //页面loading |
|
const columnListName = ref('columnList'); |
|
/** |
|
* 人身份 |
|
* Warehouse_customer_service 仓库客服 |
|
* Headquarters_customer_service 总部客服 |
|
* Headquarters_Manager 总部客服经理 |
|
*/ |
|
const Useridentity = { |
|
Warehouse_customer_service: '仓库客服', |
|
Headquarters_customer_service: '总部客服', |
|
Headquarters_Manager: '总部客服经理', |
|
}; |
|
const TabPermissions = ref(0); //记录的菜单编号 |
|
const TopQuery = ref({ |
|
time: [], |
|
}); |
|
// 必要初始化字典 |
|
const dictionaries = { |
|
pc_work_order: ref([]), ////异常类型 |
|
pc_discovery_node: ref([]), //发现环节 |
|
work_order_status: ref([]), //工单状态 |
|
after_sales_visits: ref([]), //角色部门 |
|
}; |
|
// 菜单标签 |
|
const createTabItem = (name, label) => ({ |
|
name, |
|
label, |
|
state: true, |
|
DataList: [], |
|
total: 0, |
|
request: true, //是否请求 |
|
currentPage: 1, |
|
pageSize: 50, |
|
}); |
|
|
|
const TabList = ref([ |
|
createTabItem(0, '全部'), |
|
createTabItem(8, '待回复'), |
|
createTabItem(3, '待处理(新建)'), |
|
createTabItem(1, '处理中'), |
|
createTabItem(4, '理赔金额未出'), |
|
createTabItem(2, '处理完毕'), |
|
createTabItem(5, '客服介入'), |
|
createTabItem(9, '待审核'), |
|
createTabItem(6, '完结'), |
|
createTabItem(10, '申诉列表'), |
|
createTabItem(7, '超时未处理'), |
|
]); |
|
|
|
const ButtonPermissions = computed(() => { |
|
// 根据 TabPermissions 的状态,决定每个按钮的显示隐藏逻辑 |
|
switch (TabPermissions.value) { |
|
case 0: //全部 |
|
return { |
|
add: true, //新增按钮 |
|
batchReject: false, //批量打回 |
|
assignment: false, //工单指派 |
|
applyArbitration: false, //客服介入 |
|
DingTalkNumber: false, //钉钉号填写 |
|
batchFinish: false, //批量完结 |
|
Batchdetermination: false, //批量确定 |
|
ManagerConfirmed: false, //处理完毕下面的客服经理批量确定 |
|
ArbitrationDetermination: false, //批量完结确定 |
|
Result_review: false, //结果审核(总部审核处理结果) |
|
Financial_accounting: false, //财务入账 |
|
defaultassignments: UserPermissions.value != Useridentity.Warehouse_customer_service, //默认指派 |
|
export_Report: true, //导出报表 |
|
Timed_outexport: false, //超时导出 |
|
}; |
|
case 1: //处理中 |
|
return { |
|
add: false, //新增按钮 |
|
batchReject: false, //批量打回 |
|
assignment: UserPermissions.value != Useridentity.Warehouse_customer_service, //工单指派 |
|
applyArbitration: UserPermissions.value == Useridentity.Warehouse_customer_service, //客服介入 |
|
DingTalkNumber: false, //钉钉号填写 |
|
batchFinish: false, //批量完结 |
|
Batchdetermination: false, //处理结果批量确定 |
|
ManagerConfirmed: false, //处理完毕下面的客服经理批量确定 |
|
ArbitrationDetermination: false, //批量完结确定 |
|
Financial_accounting: false, //财务入账 |
|
Result_review: UserPermissions.value == Useridentity.Headquarters_customer_service, //结果审核(总部审核处理结果) |
|
defaultassignments: false, //默认指派 |
|
export_Report: false, //导出报表 |
|
Timed_outexport: false, //超时导出 |
|
}; |
|
case 2: //处理完毕 |
|
return { |
|
add: false, //新增按钮 |
|
batchReject: UserPermissions.value == Useridentity.Headquarters_customer_service, //批量打回 |
|
assignment: false, //工单指派 |
|
applyArbitration: false, //客服介入 |
|
DingTalkNumber: false, //钉钉号填 |
|
batchFinish: UserPermissions.value != Useridentity.Warehouse_customer_service, //批量完结 |
|
Batchdetermination: false, //批量确定 |
|
ManagerConfirmed: false, //处理完毕下面的客服经理批量确定 |
|
ArbitrationDetermination: false, //批量完结确定 |
|
Result_review: false, //结果审核(总部审核处理结果) |
|
Financial_accounting: false, //财务入账 |
|
defaultassignments: false, //默认指派 |
|
export_Report: false, //导出报表 |
|
Timed_outexport: false, //超时导出 |
|
}; |
|
case 3: //待处理 |
|
return { |
|
add: false, //新增按钮 |
|
batchReject: false, //批量打回 |
|
assignment: false, //工单指派 |
|
applyArbitration: false, //客服介入 |
|
batchFinish: false, //批量完结 |
|
Batchdetermination: false, //批量确定 |
|
DingTalkNumber: false, //钉钉号填写 |
|
ManagerConfirmed: false, //处理完毕下面的客服经理批量确定 |
|
ArbitrationDetermination: false, //批量完结确定 |
|
Result_review: false, //结果审核(总部审核处理结果) |
|
Financial_accounting: false, //财务入账 |
|
defaultassignments: false, //默认指派 |
|
export_Report: false, //导出报表 |
|
Timed_outexport: false, //超时导出 |
|
}; |
|
case 4: //理赔金额未出 |
|
return { |
|
add: false, //新增按钮 |
|
batchReject: false, //批量打回 |
|
assignment: false, //工单指派 |
|
applyArbitration: false, //客服介入 |
|
batchFinish: false, //批量完结 |
|
DingTalkNumber: false, //钉钉号填写 |
|
Batchdetermination: UserPermissions.value == Useridentity.Warehouse_customer_service, //批量确定 |
|
ManagerConfirmed: false, //处理完毕下面的客服经理批量确定 |
|
ArbitrationDetermination: false, //批量完结确定 |
|
Financial_accounting: false, //财务入账 |
|
Result_review: false, //结果审核(总部审核处理结果) |
|
defaultassignments: false, //默认指派 |
|
export_Report: false, //导出报表 |
|
Timed_outexport: false, //超时导出 |
|
}; |
|
case 5: //客服介入 |
|
return { |
|
add: false, //新增按钮 |
|
batchReject: false, //批量打回 |
|
assignment: false, //工单指派 |
|
applyArbitration: false, //客服介入 |
|
batchFinish: false, //批量完结 |
|
DingTalkNumber: false, //钉钉号填写 |
|
Batchdetermination: false, //批量确定 |
|
ManagerConfirmed: false, //处理完毕下面的客服经理批量确定 |
|
ArbitrationDetermination: UserPermissions.value != Useridentity.Warehouse_customer_service, //批量总裁完结确定 |
|
Financial_accounting: false, //财务入账 |
|
Result_review: false, //结果审核(总部审核处理结果) |
|
defaultassignments: false, //默认指派 |
|
export_Report: false, //导出报表 |
|
Timed_outexport: false, //超时导出 |
|
}; |
|
case 6: //完结 |
|
return { |
|
add: false, //新增按钮 |
|
batchReject: false, //批量打回 |
|
assignment: false, //工单指派 |
|
applyArbitration: false, //客服介入 |
|
batchFinish: false, //批量完结 |
|
DingTalkNumber: UserPermissions.value != Useridentity.Warehouse_customer_service, //钉钉号填写, //钉钉号填写 |
|
Batchdetermination: false, //批量确定 |
|
ManagerConfirmed: false, //处理完毕下面的客服经理批量确定 |
|
ArbitrationDetermination: false, //批量完结确定 |
|
Financial_accounting: UserPermissions.value != Useridentity.Warehouse_customer_service, //财务入账 |
|
defaultassignments: false, //默认指派 |
|
Result_review: false, //结果审核(总部审核处理结果) |
|
export_Report: false, //导出报表 |
|
Timed_outexport: false, //超时导出 |
|
}; |
|
case 7: //超时未处理 |
|
return { |
|
add: false, //新增按钮 |
|
batchReject: false, //批量打回 |
|
assignment: false, //工单指派 |
|
applyArbitration: false, //客服介入 |
|
batchFinish: false, //批量完结 |
|
Batchdetermination: false, //批量确定 |
|
ManagerConfirmed: false, //处理完毕下面的客服经理批量确定 |
|
ArbitrationDetermination: false, //批量完结确定 |
|
Financial_accounting: false, //财务入账 |
|
defaultassignments: false, //默认指派 |
|
export_Report: false, //导出报表 |
|
Result_review: false, //结果审核(总部审核处理结果) |
|
Timed_outexport: true, //超时导出 |
|
}; |
|
case 8: //待回复 |
|
return { |
|
add: false, //新增按钮 |
|
batchReject: false, //批量打回 |
|
assignment: false, //工单指派 |
|
applyArbitration: true, //客服介入 |
|
batchFinish: false, //批量完结 |
|
Batchdetermination: false, //批量确定 |
|
ManagerConfirmed: false, //处理完毕下面的客服经理批量确定 |
|
ArbitrationDetermination: false, //批量完结确定 |
|
Financial_accounting: false, //财务入账 |
|
defaultassignments: false, //默认指派 |
|
export_Report: false, //导出报表 |
|
Result_review: false, //结果审核(总部审核处理结果) |
|
Timed_outexport: false, //超时导出 |
|
}; |
|
case 9: //待审核 |
|
return { |
|
add: false, //新增按钮 |
|
batchReject: false, //批量打回 |
|
assignment: false, //工单指派 |
|
applyArbitration: false, //客服介入 |
|
batchFinish: false, //批量完结 |
|
Batchdetermination: false, //批量确定 |
|
ManagerConfirmed: UserPermissions.value == Useridentity.Headquarters_Manager, //处理完毕下面的客服经理批量确定 |
|
ArbitrationDetermination: false, //批量完结确定 |
|
Financial_accounting: false, //财务入账 |
|
defaultassignments: false, //默认指派 |
|
export_Report: false, //导出报表 |
|
Result_review: false, //结果审核(总部审核处理结果) |
|
Timed_outexport: false, //超时导出 |
|
}; |
|
// 其他任何情况下的默认情况 |
|
default: |
|
return { |
|
add: false, |
|
batchReject: false, |
|
assignment: false, |
|
applyArbitration: false, |
|
batchFinish: false, |
|
Batchdetermination: false, //批量确定 |
|
ManagerConfirmed: false, //处理完毕下面的客服经理批量确定 |
|
ArbitrationDetermination: false, //批量完结确定 |
|
Financial_accounting: false, //财务入账 |
|
defaultassignments: false, //默认指派 |
|
export_Report: false, //导出报表 |
|
Result_review: false, //结果审核(总部审核处理结果) |
|
Timed_outexport: false, //超时导出 |
|
}; |
|
} |
|
}); |
|
const details = reactive({ |
|
/** 是否开启搜索 */ |
|
search: false, |
|
/** 表格搜索条件 */ |
|
query: {}, |
|
defaultTime2: [new Date(2000, 1, 1, 0, 0, 0), new Date(2000, 2, 1, 23, 59, 59)], // '12:00:00', '08:00:00' |
|
/** 时间快捷选择设置 */ |
|
shortcuts: [ |
|
{ |
|
text: '最近一周', |
|
value: () => { |
|
const end = new Date(); |
|
const start = new Date(); |
|
start.setTime(start.getTime() - 3600 * 1000 * 24 * 7); |
|
return [start, end]; |
|
}, |
|
}, |
|
{ |
|
text: '最近一个月', |
|
value: () => { |
|
const end = new Date(); |
|
const start = new Date(); |
|
start.setTime(start.getTime() - 3600 * 1000 * 24 * 30); |
|
return [start, end]; |
|
}, |
|
}, |
|
{ |
|
text: '最近三个月', |
|
value: () => { |
|
const end = new Date(); |
|
const start = new Date(); |
|
start.setTime(start.getTime() - 3600 * 1000 * 24 * 90); |
|
return [start, end]; |
|
}, |
|
}, |
|
], |
|
/** 时间选择器数据 */ |
|
stockupDate: [], |
|
/** 列表 */ |
|
columnListPublic: deepClone(columnList), //公共列表 |
|
/** 列表数据 */ |
|
data: [], |
|
/** 页面loading */ |
|
loadingObj: { |
|
/** 列表加载loading */ |
|
list: false, |
|
packageListLoading: false, |
|
}, |
|
/** 列表复选框选中的数据 */ |
|
selectionList: [], |
|
/** 是否显示设置表格 */ |
|
drawerShow: false, |
|
/** 分页参数 */ |
|
page: { |
|
currentPage: 1, |
|
pageSize: 50, |
|
total: 0, |
|
}, |
|
|
|
/** 弹出层显示 */ |
|
popUpShow: { |
|
/** 包件明细 */ |
|
packageOrderListlVisited: false, |
|
/** 二维码 */ |
|
QRCodeVisible: false, |
|
/** 修改客户信息 */ |
|
editClientInfoVisible: false, |
|
}, |
|
/** 列表Dom节点 */ |
|
listNode: '', |
|
form: {}, |
|
/** 全屏 */ |
|
fullscreenObj: { |
|
/** 包明细 */ |
|
packageOrderListlVisited: false, |
|
}, |
|
}); |
|
|
|
const { |
|
search, |
|
query, |
|
shortcuts, |
|
stockupDate, |
|
data, |
|
loadingObj, |
|
selectionList, |
|
drawerShow, |
|
page, |
|
trickleLoadingPage, |
|
zeroAdditionalRecordingInfo, |
|
popUpShow, |
|
recorddata, |
|
defaultTime2, |
|
} = toRefs(details); |
|
|
|
/** 展开列表控件 */ |
|
const showdrawer = _flag => { |
|
details.drawerShow = _flag; |
|
}; |
|
/** 表格表头输入框搜索 */ |
|
const inputsc = (index, row) => { |
|
processRowPropertyName(index, row, details.query); |
|
onLoad(); |
|
}; |
|
|
|
/** 表格表头时间选择 */ |
|
const timesc = (index, row) => { |
|
console.log(index, row); |
|
if (!!index) { |
|
index = dayjs(index).format('YYYY-MM-DD'); |
|
} |
|
details.query[row.prop] = index; |
|
if (!index) { |
|
delete details.query[row.prop]; |
|
} |
|
onLoad(); |
|
}; |
|
|
|
/** 表格表头下拉框选择 */ |
|
const selectsc = (index, row) => { |
|
processRowPropertyName(index, row, details.query); |
|
onLoad(); |
|
}; |
|
/** 表格表头复选框选择 */ |
|
const selectionChange = list => { |
|
console.log(list); |
|
details.selectionList = list; |
|
}; |
|
// 网页顶部搜索按钮 |
|
const searchChange = () => { |
|
onLoad(); |
|
}; |
|
// 每页多少条 |
|
const sizeChange = val => { |
|
details.page.pageSize = val; |
|
onLoad(); |
|
}; |
|
/** 页码改变执行的回调 */ |
|
const currentChange = val => { |
|
details.page.currentPage = val; |
|
onLoad(); |
|
}; |
|
// 刷新按钮 |
|
const searchChangeS = () => { |
|
details.search = false; //关闭搜索 |
|
Publicaccessdata(); |
|
}; |
|
//清空 |
|
const searchReset = () => { |
|
details.query = {}; |
|
details.page.currentPage = 1; |
|
handleClearTableQuery(details.columnList); |
|
onLoad(); |
|
}; |
|
// 顶部搜索 |
|
const searchHide = () => { |
|
console.log(details); |
|
details.search = !details.search; |
|
autoscaling(); |
|
}; |
|
// 字典公共函数 |
|
async function updateDictionary(targetArray, dictionaryType) { |
|
await getDictionaryBiz(dictionaryType).then(res => { |
|
console.log(res, '字典'); |
|
res.data.data.forEach(item => { |
|
targetArray.push({ |
|
value: item.dictKey, |
|
label: item.dictValue, |
|
}); |
|
}); |
|
}); |
|
} |
|
//表格自适应高度 |
|
const autoscaling = () => { |
|
const _node = document.querySelector('.tableNode'); |
|
setNodeHeight(_node, '', true); |
|
}; |
|
|
|
/** |
|
* 描述: 初始化字典,包含角色信息、异常类型、发现环节、工单状态,。 |
|
*/ |
|
const Dictionaryrequest = async () => { |
|
// Map 生成一个包含所有 Promise 的数组 |
|
const dictionaryPromises = Object.entries(dictionaries).map(([key, refValue]) => { |
|
return updateDictionary(refValue.value, key); |
|
}); |
|
//等待字典请求完成执行页面其余参数防止出现判断错误 |
|
await Promise.all(dictionaryPromises); |
|
}; |
|
|
|
/** |
|
* 描述: 获取用户角色信息并更新界面元素状态。 |
|
* 该函数用于检查用户的角色,并根据角色执行相应的验证和UI更新逻辑。 |
|
*/ |
|
const Roleverification = () => { |
|
const userInfo = localStorage.getItem('TWMS-userInfo'); |
|
if (!userInfo) { |
|
console.error('用户信息未找到'); |
|
return; |
|
} |
|
let roleNames = []; |
|
try { |
|
roleNames = JSON.parse(userInfo).content.role_name.split(','); |
|
} catch (error) { |
|
console.error('解析用户角色信息出错:', error); |
|
return; |
|
} |
|
// 匹配用户角色 |
|
const matchingItem = dictionaries.after_sales_visits.value.find(item => |
|
roleNames.includes(item.label) |
|
); |
|
// 更新用户权限 |
|
if (matchingItem) { |
|
UserPermissions.value = matchingItem.label; |
|
} |
|
// 更新TabList的状态 |
|
const updateTabState = (tabName, condition) => { |
|
const tab = TabList.value.find(res => res.name == tabName); |
|
if (tab) { |
|
tab.state = condition; |
|
} |
|
}; |
|
if (UserPermissions.value) { |
|
updateTabState('8', UserPermissions.value == Useridentity.Warehouse_customer_service); |
|
updateTabState('9', UserPermissions.value == Useridentity.Headquarters_Manager); |
|
} else { |
|
// 匹配不到角色时,默认为关闭状态(总部经理的审核菜单) |
|
updateTabState('9', false); |
|
} |
|
console.log('内部执行完毕'); |
|
console.log(matchingItem, '匹配出来的角色'); |
|
}; |
|
|
|
// 页面初始化请求 |
|
const onLoad = () => {}; |
|
/** |
|
*页面初始化函数,包含字典,等必要请求 |
|
*/ |
|
const PageOnlaod = async () => { |
|
PageLoading.value = true; |
|
try { |
|
await Dictionaryrequest(); //初始化字典 |
|
await Roleverification(); //获取角色信息 |
|
tabChenge(TabPermissions.value); //获取页面数据 |
|
} catch (error) { |
|
console.log(error); |
|
} |
|
|
|
PageLoading.value = false; |
|
console.log(Useridentity, 'Useridentity'); |
|
console.log('外部执行完毕'); |
|
console.log(dictionaries); |
|
}; |
|
// 页面初始化 |
|
PageOnlaod(); |
|
/** |
|
* @description: 点击tabBar时,记录当前点击的tab |
|
* @param {number} value 当前点击的tab的value |
|
* @return {void} 无返回值 |
|
*/ |
|
const tabChenge = async value => { |
|
try { |
|
PageLoading.value = true; // 开启loading |
|
TabPermissions.value = value; // 记录当前点击的菜单 |
|
console.log(tabValue.value, 'tabValue'); |
|
|
|
await Processingworkorderstatus(value); // 处理工单状态 |
|
await MenuHeaderProcessing(value); // 处理头部菜单 |
|
|
|
// 定义一个异步函数映射表 |
|
const dataProcessingMap = { |
|
0: Publicaccessdata, |
|
1: Publicaccessdata, |
|
2: Publicaccessdata, |
|
3: Publicaccessdata, |
|
4: ClaimAmountData, |
|
5: Publicaccessdata, |
|
6: Publicaccessdata, |
|
7: OverdueUnprocessedData, |
|
8: DataAwaitingReplyData, |
|
9: Publicaccessdata, |
|
10: AppealData, |
|
}; |
|
|
|
// 执行对应的函数 |
|
const processDataFn = dataProcessingMap[value] || Publicaccessdata; |
|
await processDataFn(); // 使用await确保完成 |
|
} catch (error) { |
|
console.error('An error occurred:', error); |
|
} finally { |
|
PageLoading.value = false; // 确保关闭loading |
|
} |
|
}; |
|
|
|
/** |
|
* @description: 菜单状态处理 |
|
* @param {number} value 当前点击的tab的value |
|
* @return {void} 无返回值 |
|
*/ |
|
const Processingworkorderstatus = value => { |
|
switch (value) { |
|
case 0: // 全部 |
|
workOrderStatus.value = UserPermissions.value === Useridentity.Warehouse_customer_service ? 1000 : null; |
|
break; |
|
case 1: // 处理中 |
|
workOrderStatus.value = UserPermissions.value === Useridentity.Warehouse_customer_service ? 20 : 40; |
|
break; |
|
case 2: // 处理完毕 |
|
workOrderStatus.value = 30; |
|
break; |
|
case 3: // 待处理 |
|
workOrderStatus.value = 10; |
|
break; |
|
case 5: // 客服介入 |
|
workOrderStatus.value = 70; |
|
break; |
|
case 6: // 完结 |
|
workOrderStatus.value = 90; |
|
break; |
|
case 9: // 待审核 |
|
workOrderStatus.value = UserPermissions.value === Useridentity.Headquarters_Manager? 500 : null; |
|
break; |
|
default: |
|
workOrderStatus.value = null; |
|
break; |
|
} |
|
}; |
|
|
|
// 公共菜单数据处理 |
|
const PublicDataProcessing = data => { |
|
details.data = data.records; |
|
console.log(TabList.value, 'TabList'); |
|
let _Obj = {}; |
|
_Obj = TabList.value.find(res => res.name == TabPermissions.value); |
|
console.log(_Obj, '匹配出来的公共菜单'); |
|
_Obj.DataList = data.records; //数据 |
|
_Obj.total = data.total; //总条数 |
|
_Obj.currentPage = data.current; //当前页 |
|
_Obj.pageSize = data.size; //每页条数 |
|
if (_Obj.DataList?.length) { |
|
_Obj.request = true; |
|
} else { |
|
_Obj.request = false; |
|
} |
|
}; |
|
|
|
/** |
|
* @description: 菜单表头处理 |
|
* @param {number} value 当前点击的tab的value |
|
* @return {void} 无返回值 |
|
*/ |
|
const MenuHeaderProcessing = value => { |
|
const columnLists = { |
|
columnList, // 0: 全部 |
|
columnList1, // 1: 处理中 |
|
columnList2, // 2: 处理完毕 |
|
columnList3, // 3: 待处理 |
|
columnList4, // 4: 理赔金额未出 |
|
columnList5, // 5: 客服介入 |
|
columnList6, // 6: 完结 |
|
columnList7, // 7: 超时未处理 |
|
columnList8, // 8: 待回复 |
|
columnList9, // 9: 待审核 |
|
columnList10, // 10: 申诉列表 |
|
}; |
|
|
|
const keys = Object.keys(columnLists); |
|
const selectedKey = value >= 0 && value < keys.length ? keys[value] : 'columnList'; |
|
|
|
// 使用深拷贝赋值 |
|
details.columnListPublic = deepClone(columnLists[selectedKey]); |
|
|
|
// 将变量名字符串赋值给 columnListName.value |
|
columnListName.value = selectedKey; |
|
|
|
console.log(details.columnListPublic, 'details.columnListPublic'); |
|
console.log(columnListName.value, 'columnListName.value'); |
|
}; |
|
// 状态处理 |
|
const DataStateProcessing = data => { |
|
console.log(data, '状态处理'); |
|
console.log(dictionaries, 'dictionaries.pc_work_order.value'); |
|
|
|
// 函数用于查找标签 |
|
const findLabelByValue = (collection, value) => { |
|
const entry = collection.find(res => res.value === value); |
|
return entry ? entry.label : '/'; |
|
}; |
|
|
|
// 对状态进行处理 |
|
if (data.records?.length) { |
|
data.records.forEach(item => { |
|
// 处理工单类型 |
|
item.workOrderTypeNameS = findLabelByValue( |
|
dictionaries.pc_work_order.value, |
|
item.workOrderType |
|
); |
|
|
|
// 处理发现节点 |
|
item.discoveryNodeNameS = findLabelByValue( |
|
dictionaries.pc_discovery_node.value, |
|
item.discoveryNode |
|
); |
|
|
|
// 处理工单状态 |
|
item.workOrderStatusNameS = findLabelByValue( |
|
dictionaries.work_order_status.value, |
|
item.workOrderStatus |
|
); |
|
}); |
|
} |
|
}; |
|
|
|
/** |
|
* @description: 对数据进行处理 |
|
* @return {void} 无返回值 |
|
*/ |
|
const DataAndStateProcessing = data => { |
|
PublicDataProcessing(data); //处理数据 |
|
DataStateProcessing(data); //状态处理 |
|
}; |
|
|
|
/** |
|
* @description: 待回复菜单数据请求 |
|
* @return {Object} 包含待回复菜单数据的对象 |
|
*/ |
|
const DataAwaitingReplyData = async () => { |
|
try { |
|
let _submitData = { |
|
current: details.page.currentPage, //页码 |
|
size: details.page.pageSize, //条数 |
|
}; |
|
let _res = await $_getProcessor(_submitData); |
|
console.log(_res, '待回复菜单数据请求'); |
|
const { code, data } = _res.data; |
|
console.log(data, 'data'); |
|
console.log(code, 'code'); |
|
if (code !== 200) { |
|
return; |
|
} |
|
DataAndStateProcessing(data); //对数据和状态处理 |
|
} catch (error) { |
|
console.log(error); |
|
} finally { |
|
} |
|
}; |
|
|
|
/** |
|
* @description: 理赔金额未出菜单数据请求 |
|
* @return {Object} 包含待回复菜单数据的对象 |
|
*/ |
|
const ClaimAmountData = async () => { |
|
try { |
|
let _submitData = { |
|
current: details.page.currentPage, //页码 |
|
size: details.page.pageSize, //条数 |
|
}; |
|
let _res = await $_listSettlement(_submitData); |
|
console.log(_res, '理赔金额未出菜单数据请求'); |
|
const { code, data } = _res.data; |
|
console.log(data, 'data'); |
|
console.log(code, 'code'); |
|
if (code !== 200) { |
|
return; |
|
} |
|
DataAndStateProcessing(data); //对数据和状态处理 |
|
} catch (error) { |
|
console.log(error); |
|
} finally { |
|
} |
|
}; |
|
/** |
|
* @description: 申诉菜单数据请求 |
|
* @return {Object} 包含申诉菜单数据的对象 |
|
*/ |
|
const AppealData = async () => { |
|
try { |
|
let _submitData = { |
|
current: details.page.currentPage, //页码 |
|
size: details.page.pageSize, //条数 |
|
}; |
|
let _res = await $_listAppeal(_submitData); |
|
console.log(_res, '申诉列表菜单数据请求'); |
|
const { code, data } = _res.data; |
|
console.log(data, 'data'); |
|
console.log(code, 'code'); |
|
if (code !== 200) { |
|
return; |
|
} |
|
DataAndStateProcessing(data); //对数据和状态处理 |
|
} catch (error) { |
|
console.log(error); |
|
} finally { |
|
} |
|
}; |
|
/** |
|
* @description: 超时未处理菜单数据请求 |
|
* @return {Object} 包含超时未处理菜单数据的对象 |
|
*/ |
|
const OverdueUnprocessedData = async () => { |
|
try { |
|
let _submitData = { |
|
current: details.page.currentPage, //页码 |
|
size: details.page.pageSize, //条数 |
|
}; |
|
let _res = await $_listOwn(_submitData); |
|
console.log(_res, '超时未处理表菜单数据请求'); |
|
const { code, data } = _res.data; |
|
console.log(data, 'data'); |
|
console.log(code, 'code'); |
|
if (code !== 200) { |
|
return; |
|
} |
|
DataAndStateProcessing(data); //对数据和状态处理 |
|
} catch (error) { |
|
console.log(error); |
|
} finally { |
|
} |
|
}; |
|
/** |
|
* @description: 公共数据请求,包含全部、待处理、处理中、处理完毕、客服介入、待审核、完结 |
|
*/ |
|
const Publicaccessdata = async () => { |
|
try { |
|
let _submitData = { |
|
workOrderStatus: workOrderStatus.value, //工单状态 |
|
current: details.page.currentPage, //页码 |
|
size: details.page.pageSize, //条数 |
|
}; |
|
let _res = await $_getList(_submitData); |
|
const { code, data } = _res.data; |
|
console.log(data, 'data'); |
|
console.log(code, 'code'); |
|
if (code !== 200) { |
|
return; |
|
} |
|
DataAndStateProcessing(data); //对数据和状态处理 |
|
console.log(_res, '公共数据菜单=:' + TabPermissions.value); |
|
} catch (error) { |
|
console.log(error); |
|
} finally { |
|
} |
|
}; |
|
|
|
// 异常工单号点击查看 |
|
const InformationViewing = val => { |
|
console.log(val, '当前行数据'); |
|
const workOrderInfoPath = '/aftersales/aftersalesWorkOrderInfo'; |
|
const queryParams = { |
|
id: val.row.workOrderId, |
|
name: `${val.row.workOrderNumber}-信息查看`, |
|
warehouseId: val.row.warehouseId, |
|
workOrderNumber: val.row.workOrderNumber, |
|
businessId: val.row.businessId, |
|
RouteIndexs: TabPermissions.value, |
|
workOrderStatus: val.row.workOrderStatus, |
|
}; |
|
$router.push({ path: workOrderInfoPath, query: { ...queryParams, id: val.row.id } }); |
|
}; |
|
</script> |
|
|
|
<style scoped lang="scss"> |
|
:deep(.el-card) { |
|
height: 100%; |
|
} |
|
:deep(.el-card__body) { |
|
height: 100%; |
|
display: flex; |
|
flex-direction: column; |
|
padding: 0 !important; |
|
} |
|
.el-fy { |
|
flex: 1; |
|
display: flex; |
|
align-items: flex-end; |
|
} |
|
.avue-crud { |
|
height: 100%; |
|
display: flex; |
|
flex-direction: column; |
|
} |
|
:deep(.el_tabs) { |
|
.el-tabs__item { |
|
font-family: '黑体'; |
|
border-right: 1px dashed #00000014; |
|
} |
|
.is-active { |
|
font-family: '黑体'; |
|
font-weight: bold; |
|
} |
|
.el-tabs__content { |
|
display: none; |
|
} |
|
} |
|
.avue-crud__header { |
|
min-height: initial; |
|
margin: 4px 0; |
|
padding: 0 4px; |
|
} |
|
.avue-crud__left { |
|
.el-button { |
|
border-radius: 2px; |
|
} |
|
} |
|
</style>
|
|
|