3 changed files with 298 additions and 2 deletions
@ -0,0 +1,271 @@
|
||||
<template> |
||||
<div> |
||||
<div class="relative"> |
||||
<el-tabs v-model="myTodoActionTab"> |
||||
<el-tab-pane |
||||
v-for="item in tabs" |
||||
:key="item.name" |
||||
:name="item.name" |
||||
> |
||||
<template #label> |
||||
<el-badge :value="item.total"> |
||||
<span class="tab-nav-title_second">{{ |
||||
item.name |
||||
}}</span> |
||||
</el-badge> |
||||
</template> |
||||
</el-tab-pane> |
||||
</el-tabs> |
||||
<!-- <el-button--> |
||||
<!-- type="primary"--> |
||||
<!-- @click="addShow = true"--> |
||||
<!-- v-perms="['negative:add']"--> |
||||
<!-- plain--> |
||||
<!-- class="add-btn"--> |
||||
<!-- ><template #icon> <icon name="el-icon-Plus" /> </template--> |
||||
<!-- >问题下发</el-button--> |
||||
<!-- >--> |
||||
</div> |
||||
<div class="table-container" style="height: 500px;overflow-x: auto"> |
||||
<el-table :data="todos"> |
||||
<el-table-column type="expand"> |
||||
<template #default="{ row }"> |
||||
<div class="row mt-12"> |
||||
<div class="col col-12"> |
||||
<label>样本源头编号</label> |
||||
<span>{{ row.originId }}</span> |
||||
</div> |
||||
<div class="col col-6"> |
||||
<label>问题发现时间</label> |
||||
<span>{{ row.discoveryTime }}</span> |
||||
</div> |
||||
<div class="col col-6"> |
||||
<label>问题发生时间</label> |
||||
<span>{{ row.happenTime || "/" }}</span> |
||||
</div> |
||||
<div class="col col-6"> |
||||
<label>问题录入时间</label> |
||||
<span>{{ row.crtTime || "/" }}</span> |
||||
</div> |
||||
<div class="col col-6"> |
||||
<label>问题来源</label> |
||||
<span>{{ row.problemSources }}</span> |
||||
</div> |
||||
<div class="col col-6"> |
||||
<label>业务类别</label> |
||||
<span>{{ row.businessTypeName }}</span> |
||||
</div> |
||||
<div class="col col-6"> |
||||
<label>涉及警种</label> |
||||
<span>{{ row.policeTypeName || "/" }}</span> |
||||
</div> |
||||
<div class="col col-12"> |
||||
<label>涉嫌问题</label> |
||||
<span>{{ |
||||
getInvolveProblem(row.involveProblem, dict.suspectProblem) || "/" |
||||
}}</span> |
||||
</div> |
||||
<div class="col col-6" v-if="row.responderName"> |
||||
<label>投诉反映人</label> |
||||
<span>{{ row.responderName }}</span> |
||||
</div> |
||||
<div class="col col-6" v-if="row.contactPhone"> |
||||
<label>联系电话</label> |
||||
<span>{{ row.contactPhone }}</span> |
||||
</div> |
||||
<div class="col col-6"> |
||||
<label>涉及单位</label> |
||||
<span>{{ row.involveDepartName || "/" }}</span> |
||||
</div> |
||||
</div> |
||||
<div class="row mt-12"> |
||||
<div class="col col-24"> |
||||
<label>事情简要描述</label> |
||||
<span>{{ row.thingDesc }}</span> |
||||
</div> |
||||
</div> |
||||
</template> |
||||
</el-table-column> |
||||
<el-table-column |
||||
label="问题发现时间" |
||||
prop="discoveryTime" |
||||
width="156" |
||||
/> |
||||
<el-table-column |
||||
label="问题来源" |
||||
prop="problemSources" |
||||
width="108" |
||||
show-overflow-tooltip |
||||
/> |
||||
<el-table-column |
||||
label="业务类别" |
||||
prop="businessTypeName" |
||||
width="98" |
||||
/> |
||||
<el-table-column |
||||
label="问题内容" |
||||
prop="thingDesc" |
||||
show-overflow-tooltip |
||||
/> |
||||
<el-table-column |
||||
label="是否属实" |
||||
prop="checkStatusName" |
||||
width="100" |
||||
align="center" |
||||
/> |
||||
<el-table-column label="办理状态" width="110" align="center"> |
||||
<template #default="{ row }"> |
||||
<el-tag |
||||
>{{ |
||||
getDictLable( |
||||
dict.processingStatus, |
||||
row.processingStatus |
||||
) |
||||
}}{{ |
||||
row.extensionApplyFlag ? "" : "(延期申请)" |
||||
}}{{ |
||||
row.workFlowKey === 'countersign' ? "(单位会签)" : "" |
||||
}}</el-tag |
||||
> |
||||
</template> |
||||
</el-table-column> |
||||
<el-table-column label="会签状态" width="110" align="center"> |
||||
<template #default="{ row }"> |
||||
<!-- 只在会签流程显示 --> |
||||
<el-tag |
||||
:type="row.countersignCompleted === '1' ? 'success' : 'warning'" |
||||
> |
||||
{{ row.countersignCompleted === '1' ? '会签待确认' : '会签进行中' }} |
||||
</el-tag> |
||||
</template> |
||||
</el-table-column> |
||||
|
||||
|
||||
<el-table-column label="流程节点" width="100" show-overflow-tooltip> |
||||
<template #default="{ row }"> |
||||
<span>{{ |
||||
flowNodes.filter( |
||||
(item) => item.flowKey === row.flowKey |
||||
)[0]?.flowName |
||||
}}</span> |
||||
</template> |
||||
</el-table-column> |
||||
<el-table-column label="操作" width="90" fixed="right"> |
||||
<template #default="{ row }"> |
||||
<el-button |
||||
type="primary" |
||||
link |
||||
@click="handleAction(row)" |
||||
>立即处理</el-button |
||||
> |
||||
</template> |
||||
</el-table-column> |
||||
</el-table> |
||||
</div> |
||||
</div> |
||||
|
||||
<negative-dialog |
||||
v-model="show" |
||||
:id="activeNegativeId" |
||||
@change="handleUpdate" |
||||
@close="show = false" |
||||
:disabled="false" |
||||
/> |
||||
|
||||
<negative-add v-model="addShow" @close="addShow = false" /> |
||||
</template> |
||||
<script setup> |
||||
import { listTodos } from "@/api/work"; |
||||
import { getDictLable, getInvolveProblem } from "@/utils/util"; |
||||
import useCatchStore from "@/stores/modules/catch"; |
||||
|
||||
const catchStore = useCatchStore(); |
||||
const dict = catchStore.getDicts(["processingStatus", "suspectProblem"]); |
||||
const flowNodes = catchStore.getFlowNodes(); |
||||
|
||||
const props = defineProps({ |
||||
data: { |
||||
type: Array, |
||||
required: [], |
||||
}, |
||||
}); |
||||
|
||||
const emit = defineEmits(["update"]); |
||||
|
||||
const ALL_LABEL = "全部"; |
||||
const tabs = ref([ |
||||
{ |
||||
name: ALL_LABEL, |
||||
total: 0, |
||||
}, |
||||
]); |
||||
|
||||
const todos = ref([]); |
||||
watch( |
||||
() => props.data, |
||||
(val) => { |
||||
getTodos() |
||||
tabs.value = []; |
||||
tabs.value.push({ |
||||
name: "全部", |
||||
total: val.length, |
||||
}); |
||||
new Set(val.map((item) => item.problemSources)).forEach( |
||||
(problemSources) => { |
||||
tabs.value.push({ |
||||
name: problemSources, |
||||
total: val.filter( |
||||
(item) => item.problemSources === problemSources |
||||
).length, |
||||
}); |
||||
} |
||||
); |
||||
} |
||||
); |
||||
|
||||
const myTodoActionTab = ref(ALL_LABEL); |
||||
watch(myTodoActionTab, getTodos); |
||||
|
||||
function getTodos() { |
||||
if (myTodoActionTab.value === ALL_LABEL) { |
||||
todos.value = props.data |
||||
return |
||||
} |
||||
|
||||
const filtered = props.data.filter( |
||||
(item) => item.problemSources === myTodoActionTab.value |
||||
) |
||||
|
||||
if (filtered.length === 0) { |
||||
myTodoActionTab.value = ALL_LABEL |
||||
todos.value = props.data |
||||
} else { |
||||
todos.value = filtered |
||||
} |
||||
} |
||||
|
||||
|
||||
const show = ref(false); |
||||
const activeNegativeId = ref(""); |
||||
const activeWork = ref({}); |
||||
provide("work", activeWork); |
||||
|
||||
function handleAction(row) { |
||||
show.value = true; |
||||
activeNegativeId.value = row.negativeId; |
||||
activeWork.value = row; |
||||
} |
||||
|
||||
const addShow = ref(false); |
||||
|
||||
function handleUpdate() { |
||||
emit('update') |
||||
} |
||||
</script> |
||||
<style lang="scss" scoped> |
||||
.add-btn { |
||||
position: absolute; |
||||
top: 0; |
||||
right: 0; |
||||
} |
||||
</style> |
||||
Loading…
Reference in new issue