123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281 |
- <template>
- <div class="hc-agent-charge border-10">
- <div class="active-menus">
- <div class="active-item" :class="{ 'active-select': activeIndex === 1 }" @click="handleSelect(1)">
- <img :src="activeIndex === 1 ? frame254 : frame257" alt="">
- <div style="margin-top:5px;">
- <el-badge :value="tags1" :hidden="!tags1" class="item">
- <span class="font-bold">我的代办工单 </span>
- </el-badge>
- </div>
- </div>
- <div class="triangle-bottomleft" :class="{ 'b-b-b-w': activeIndex === 1 }" />
- <div class="active-item" :class="{ 'active-select': activeIndex === 2 }" @click="handleSelect(2)">
- <img :src="activeIndex === 2 ? frame256 : frame255" alt="">
- <div style="margin-top:5px;">
- <el-badge :value="tags2" :hidden="!tags2" class="item">
- <span class="font-bold">所有代办工单 </span>
- </el-badge>
- </div>
- </div>
- <div class="triangle-bottomleft" :class="{ 'b-b-b-w': activeIndex === 2 }" />
- </div>
- <div v-loading="isLoading" class="active-body border-bottom-10 relative h-[250px] bg-white p-3">
- <el-scrollbar>
- <div class="border-bottom-10">
- <div v-if="tableData.length <= 0">
- <hc-no-data tip="没有找到代办工单~" />
- </div>
- <div v-for="(item, index) in tableData" v-else :key="index" class="info-item">
- <div class="frame-warning">
- <img class="h-[14px] w-[14px]" :src="frameWarning" alt="">
- </div>
- <div class="frame-content">
- <span class="title-common">来自</span>
- <span class="title-text">{{ item.projectContract }}</span>
- <span class="title-common">的</span>
- <span class="title-text">{{ item.roleUser }}</span>
- <span class="title-common">向</span>
- <span v-if="item.manageUser === '您'" class="title-common">您</span>
- <span v-else class="title-text">{{ item.manageUser }}</span>
- <span class="title-common">反馈</span>
- <span class="title-red">{{ item.title }}</span>
- </div>
- <div class="frame-time" :class="(activeIndex === 2 && item.operation) || activeIndex === 1 ? 'is-more' : ''">{{ item.time }}</div>
- <div v-if="(activeIndex === 2 && item.operation) || activeIndex === 1" class="frame-more">
- <el-dropdown class="outline: none;">
- <span class="el-dropdown-more">
- <el-link :underline="false">
- <hc-icon name="more-2" class="more-icon" />
- </el-link>
- </span>
- <template #dropdown>
- <el-dropdown-menu>
- <el-dropdown-item @click="openPreview(item)">立即处理</el-dropdown-item>
- <el-dropdown-item v-yes-com:[ignore]="{ index }">忽略</el-dropdown-item>
- </el-dropdown-menu>
- </template>
- </el-dropdown>
- </div>
- </div>
- <div v-if="tableData.length === 1" class="text-align-c" style="color:#CCD0DE;line-height:200px">没有更多数据了~</div>
- </div>
- </el-scrollbar>
- </div>
- <!-- 工单详情 -->
- <hc-new-dialog v-model="isAgentChargeShow" widths="720px" title="工单详情" save-text="处理" @save="agentChargeSave">
- <table border="1" class="hc-agent-charge-new-table">
- <tbody>
- <tr>
- <td class="new-titile">合同名称</td>
- <td class="new-content">{{ agentChargeData.projectName }}——{{ agentChargeData.contractName }}</td>
- </tr>
- <tr>
- <td class="new-titile">问题描述</td>
- <td class="new-content" style="color:#EB4D3D">{{ agentChargeData.opinionContent }}</td>
- </tr>
- <tr>
- <td class="new-titile">反馈人员</td>
- <td class="new-content">{{ agentChargeData.submitUserName }}</td>
- </tr>
- <tr>
- <td class="new-titile">电话</td>
- <td class="new-content">{{ agentChargeData.submitPhone }}</td>
- </tr>
- <tr>
- <td class="new-titile">岗位</td>
- <td class="new-content">{{ agentChargeData.submitUserRole }}</td>
- </tr>
- <tr>
- <td class="new-titile">反馈时间</td>
- <td class="new-content">{{ agentChargeData.manageTime }}</td>
- </tr>
- <tr>
- <td class="new-titile">图片补充</td>
- <td class="new-content">
- <div v-if="agentChargeData.fileUrl && agentChargeData.fileUrl.length" class="flex">
- <div v-for="item in agentChargeData.fileUrl" :key="item">
- <div class="new-img">
- <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAQhJREFUOE+lkzFOAzEURN8cASkSoUqOETroOAI3oEgBHekiOuiggxtwBDrSwS2AiiBRcIOJHNmrv85KVsRWu9/2+/4zs+Kfj+rztl+Bk6r+Lul4qFcHsD0BPoGFpLu42fYlcA9MJX3FtQgwcCRpPdTJ9hj4ltS79fbD9hvwLOmhHLZ9mN4l/YTaNXAm6bTUCsA12fYyA26qcXp7dwC2R8A8CLkCHstNbDcBadaLCvBUtGkCwrx7jZC8f4n2ZdWTiJ0r2c7zmInaxnFUvRIvubIetDFbOQU+gKtoZ15L9t1mYK/JUJRTJmZVmFbJ+xImoIPsAFr/VoAcSPrbG5BHGkn63Qat1bG1vgHcfowRy9YlxwAAAABJRU5ErkJggg==" style="margin: 40px 0 0 40px;" alt="">
- </div>
- <el-image class="h-[100px] w-[100px] border-4" :src="item" :preview-src-list="agentChargeData.fileUrl" />
- </div>
- </div>
- <span v-else>无</span>
- </td>
- </tr>
- </tbody>
- </table>
- </hc-new-dialog>
- <!-- 处理工单 -->
- <hc-new-dialog v-model="isAgentDisposeShow" widths="400px" title="处理工单" @save="agentDisposeSave">
- <el-form ref="formRef" :model="formModel" :rules="formRules" label-position="top">
- <el-form-item label="计量期:">
- <el-select v-model="formModel.currentLink" placeholder="选择提交进度" block>
- <el-option label="进入人工预处理环节" :value="2" />
- <el-option label="已解决" :value="3" />
- </el-select>
- </el-form-item>
- <el-form-item v-show="formModel.currentLink === 2" label="预计处理截止日期:" prop="manageTime">
- <el-date-picker v-model="formModel.manageTime" class="block" format="YYYY-MM-DD" type="date" value-format="YYYY-MM-DD" />
- </el-form-item>
- </el-form>
- </hc-new-dialog>
- </div>
- </template>
- <script setup>
- import { onMounted, ref, watch } from 'vue'
- import frame254 from '~ass/home/Frame254.png'
- import frame257 from '~ass/home/Frame257.png'
- import frame256 from '~ass/home/Frame256.png'
- import frame255 from '~ass/home/Frame255.png'
- import frameWarning from '~ass/home/warning.png'
- import { formValidate, getArrValue, getObjValue } from 'js-fast-way'
- import mainApi from '~api/home/index'
- const props = defineProps({
- active: {
- type: [Number, String],
- default: 1,
- },
- })
- //事件
- const emit = defineEmits(['load'])
- //工单数量
- const tags1 = ref(0)
- const tags2 = ref(0)
- //代办工单
- const activeIndex = ref(1)
- //工单数据
- const tableData = ref([])
- //监听数据
- watch(() => props.active, (active) => {
- activeIndex.value = active ?? 1
- }, { immediate: true, deep: true })
- //渲染完成
- onMounted(() => {
- getLoadData()
- })
- //工单类型被切换
- const handleSelect = (val) => {
- if (activeIndex.value === val) return
- activeIndex.value = val
- getLoadData(false)
- }
- //获取数据
- const isLoading = ref(false)
- const getLoadData = (first = true) => {
- isLoading.value = true
- emit('load', activeIndex.value, first, async ({ tag, data }) => {
- tableData.value = getArrValue(data)
- const { tag1, tag2 } = getObjValue(tag)
- tags1.value = tag1 ?? 0
- tags2.value = tag2 ?? 0
- isLoading.value = false
- })
- }
- //立即处理
- const isAgentChargeShow = ref(false)
- const agentChargeData = ref({})
- const agentChargeRow = ref({})
- const openPreview = async (row) => {
- const { data } = await mainApi.queryOpinionDetails({
- userOpinionId : row.userOpinionId,
- })
- agentChargeRow.value = row
- agentChargeData.value = getObjValue(data)
- isAgentChargeShow.value = true
- }
- //处理工单
- const isAgentDisposeShow = ref(false)
- const agentChargeSave = () => {
- formModel.value = { currentLink: 2 }
- isAgentDisposeShow.value = true
- }
- //基础表单
- const formRef = ref(null)
- const formModel = ref({ currentLink: 2 })
- const formRules = {
- manageTime: {
- required: true,
- trigger: 'blur',
- message: '请选择预计处理截止日期',
- },
- }
- //确认处理工单
- const isCancel = ref(true)
- const agentDisposeSave = async () => {
- const isForm = await formValidate(formRef.value)
- if (!isForm) return
- //业务人员提交环节操作
- const { manageTime } = formModel.value
- const { currentLinkId, currentLink, newNumber, userOpinionId } = agentChargeRow.value
- const { error, code, msg } = await mainApi.manageUserOperationStatus({
- currentLinkId: currentLinkId,
- currentLink: currentLink,
- newNumber: newNumber,
- userOpinionId: userOpinionId,
- manageTime: manageTime ?? null,
- })
- if (!error && code === 200) {
- window.$message.success('提交成功')
- isAgentDisposeShow.value = false
- isAgentChargeShow.value = false
- //重新刷新列表
- getLoadData(false)
- } else {
- window.$message.error(msg ?? '操作失败')
- }
- //是否前往消息区继续处理
- if (isCancel.value) {
- window?.$messageBox?.alert('是否前往消息区继续处理?', '提示', {
- showCancelButton: true,
- confirmButtonText: '确认',
- cancelButtonText: '取消',
- type: 'warning',
- callback: (action) => {
- if (action === 'confirm') {
- console.log('前往消息区继续处理')
- } else {
- isCancel.value = false
- }
- },
- })
- }
- }
- //忽略
- const ignore = async ({ item }, resolve) => {
- const { index } = getObjValue(item)
- const { userOpinionId } = tableData.value[index]
- const { error, code, msg } = await mainApi.isIgnore({
- userOpinionId : userOpinionId,
- })
- resolve()
- if (!error && code === 200) {
- //重新刷新列表
- getLoadData(false)
- } else {
- window.$message.error(msg ?? '操作失败')
- }
- }
- </script>
- <style lang="scss">
- @import '~src/styles/home/agent-charge';
- </style>
|