小结 #35

Merged
shenhailong merged 1 commits from shen into test 1 year ago

@ -30,11 +30,11 @@ export async function getFinalList(params: FinalParam) {
params: notEmptyParams, params: notEmptyParams,
}) })
const { data: { list, totalPage,totalCount } } = res const { data: { list, totalPage, totalCount } } = res
return { return {
pageCount: totalPage, pageCount: totalPage,
data: list, data: list,
totalCount totalCount,
} }
} }
@ -62,3 +62,37 @@ export async function repetitionTask() {
method: 'get', method: 'get',
}) })
} }
/**
*
* @returns
*/
export async function getRepeatList(params: FinalParam) {
const notEmptyParams = pickBy(params, notEmpty)
Object.keys(notEmptyParams).forEach((key) => {
const val = notEmptyParams[key]
if (key === 'izuptime') {
const start = formatToDate2(val[0])
const end = formatToDate2(val[1])
notEmptyParams[key] = `${start}-${end}`
}
if (Array.isArray(notEmptyParams[key]))
notEmptyParams[key] = val.join(',')
})
const res = await http.request({
url: `/flow/task/repetitionTaskList`,
method: 'get',
params: notEmptyParams,
})
const { data: { list, totalPage, totalCount } } = res
return {
pageCount: totalPage,
data: list,
totalCount,
}
}

@ -22,6 +22,7 @@ const { detail, total } = toRefs(state)
const show = ref(false) const show = ref(false)
function showModal(id) { function showModal(id) {
state.total = 0
getDetail(id) getDetail(id)
} }
@ -45,7 +46,13 @@ function closeModal() {
} }
async function reject() { async function reject() {
emit('reject', { a: 'todo' }) const list = []
state.detail.forEach((items) => {
items.repeatedTaskList.forEach((item) => {
list.push(item)
})
})
emit('reject', list)
closeModal() closeModal()
} }
@ -157,7 +164,7 @@ defineExpose({
border-radius: 8px; border-radius: 8px;
padding: 16px; padding: 16px;
padding-top: 0; padding-top: 0;
margin: 45px 12px 35px 38px; margin: 25px 12px 35px 38px;
.imgwrapper { .imgwrapper {
width: 160px; width: 160px;

@ -1,101 +1,156 @@
<script lang="ts" setup> <script lang="ts" setup>
import { computed, h, reactive, ref, unref } from "vue"; import {
import { NDataTable, useDialog } from "naive-ui"; computed,
import type { DataTableColumns, DataTableRowKey } from "naive-ui"; defineEmits,
import Action from "../comp/Action.vue"; h,
import { RejectModal } from "./index"; nextTick,
import type { RowData } from "@/config/final"; onBeforeMount,
import { getFinalList } from "@/api/final"; onMounted,
import type { ApprovalParam } from "/#/api"; onUnmounted,
import { audit } from "@/api/task/task"; reactive,
ref,
unref,
watch,
} from 'vue'
import { NDataTable, useDialog, useMessage } from 'naive-ui'
import type { DataTableColumns, DataTableRowKey } from 'naive-ui'
import {
ListAction,
StatusItem,
} from '../comp'
import { RejectModal } from './index'
import { useDictionary } from '@/store/modules/dictonary'
import type { RowData } from '@/config/final'
import { getFinalList, getRepeatList } from '@/api/final'
import { formatToDateHMS } from '@/utils/dateUtil'
import { audit } from '@/api/task/task'
import NotPassed from '@/components/Approval/NotPassed.vue'
const emit = defineEmits<{ const emit = defineEmits<{
(e: "commit", columns: any[]); (e: 'commit', columns: any[])
}>(); }>()
const dicStore = useDictionary()
const show = ref(false); const message = useMessage()
const show = ref(false)
const izstatusList = ref([])
const dialog = useDialog()
const checkedRowKeys = ref([])
onBeforeMount(() => {
dicStore.fetchizstatusListt()
})
function showModal() { function showModal() {
show.value = true; show.value = true
} }
function closeModal() { function closeModal() {
show.value = false; show.value = false
} }
async function handleSumbit(e: MouseEvent) { async function handleSumbit(e: MouseEvent) {
e.preventDefault(); e.preventDefault()
closeModal(); closeModal()
} }
defineExpose({ defineExpose({
showModal, showModal,
}); })
const columns: DataTableColumns<RowData> = [ const columns: DataTableColumns<RowData> = [
{ {
type: "selection", type: 'selection',
fixed: "left", fixed: 'left',
width: 50, width: 50,
disabled(row: any) {
return row.states !== 2
},
}, },
{ {
title: "任务Id", title: '任务Id',
key: "id", key: 'id',
fixed: "left", fixed: 'left',
width: 100, width: 180,
ellipsis: {
tooltip: true,
},
}, },
{ {
title: "任务名称", title: '任务名称',
key: "fromtaskname", key: 'fromtaskname',
fixed: "left", fixed: 'left',
width: 200, width: 150,
ellipsis: {
tooltip: true,
},
}, },
{ {
title: "审批节点", title: '审批节点',
key: "approvalnode", key: 'approvalnode',
width: 100, width: 100,
}, },
{ {
title: "审批状态", title: '审批状态',
key: "states", key: 'states',
width: 100, width: 120,
render(row) {
const item: any = izstatusList.value.find(
(item: any) => item.value == row.states,
)
return h(StatusItem, {
id: row.id,
status: row.states,
label: item ? item.label : '',
})
},
}, },
{ {
title: "图片相似度", title: '图片相似度',
key: "similarity", key: 'similarityscore',
width: 100, width: 100,
render(row: any) {
return h('div', {
id: row.id,
style: { color: row.similarityscore === 100 ? '#FF4E4F' : '' },
}, { default: () => row.similarityscore ? `${row.similarityscore}%` : '' })
},
}, },
{ {
title: "提报时间", title: '提报时间',
key: "fromuptime", key: 'fromuptime',
width: 200, width: 200,
render(row: any) {
return formatToDateHMS(row.createdate || 0)
},
}, },
{ {
title: "更新时间", title: '更新时间',
key: "updatetime", key: 'updatetime',
width: 200, width: 200,
}, },
{ {
title: "操作", title: '操作',
key: "actions", key: 'actions',
width: 200, width: 200,
fixed: "right", fixed: 'right',
render(row) { render(row) {
return h(Action, { return h(ListAction, {
id: row.id, id: row.id,
status: row.states, status: row.states,
trigger: actionHandler, trigger: (action) => {
}); actionHandler(action, row)
},
})
}, },
}, },
]; ]
const notPassModalRef = ref(null) //
const rejectModalRef = ref(null); const rejectModalRef = ref(null)
const columnsRef = ref(columns); const columnsRef = ref(columns)
const tableRef = ref<InstanceType<typeof NDataTable>>(); const tableRef = ref<InstanceType<typeof NDataTable>>()
const rowKey = (row: RowData) => row.id; const rowKey = (row: RowData) => row.id
const loading = ref(true); const loading = ref(true)
const total = ref(0); const total = ref(0)
const pagination = reactive({ const pagination = reactive({
page: 1, page: 1,
pageCount: 1, pageCount: 1,
@ -103,136 +158,211 @@ const pagination = reactive({
showSizePicker: true, showSizePicker: true,
pageSizes: [ pageSizes: [
{ {
label: "10 每页", label: '10 每页',
value: 10, value: 10,
}, },
{ {
label: "15 每页", label: '15 每页',
value: 15, value: 15,
}, },
{ {
label: "30 每页", label: '30 每页',
value: 30, value: 30,
}, },
{ {
label: "50 每页", label: '50 每页',
value: 50, value: 50,
}, },
], ],
showQuickJumper: true, showQuickJumper: true,
prefix:()=>`${total.value} 条数据` prefix: () => `${total.value} 条数据`,
}); })
const tableData = ref<Array<RowData>>([]); const tableData = ref<Array<RowData>>([])
const selectionIds = ref<DataTableRowKey[]>([]); const selectionIds = ref<DataTableRowKey[]>([])
const deviceHeight = ref(600); const deviceHeight = ref(500)
const maxHeight = computed(() => { const maxHeight = computed(() => {
return tableData.value.length ? `${unref(deviceHeight)}px` : "auto"; return tableData.value.length ? `${unref(deviceHeight)}px` : 'auto'
}); })
async function query(page: number, pageSize: number) { async function query(page: number, pageSize: number) {
const result = await getFinalList({ const result = await getRepeatList({
sortorder: "asc", sortorder: 'asc',
pageSize: 10, pageSize: pagination.pageSize,
currPage: 1, currPage: 1,
sortname: "", sortname: '',
}); })
const { data, pageCount,totalCount } = result; console.log(666666)
total.value = totalCount; console.log(result)
tableData.value = data;
pagination.page = page; const { data, pageCount, totalCount } = result
pagination.pageCount = pageCount; total.value = totalCount
loading.value = false; tableData.value = data
pagination.page = page
pagination.pageCount = pageCount
loading.value = false
} }
watch(
() => dicStore.izstatusList,
(newval) => {
izstatusList.value = newval
},
)
async function handlePageChange(currentPage) { async function handlePageChange(currentPage) {
if (loading.value) return; if (loading.value)
pagination.page = currentPage; return
const { pageSize } = pagination; pagination.page = currentPage
await query(currentPage, pageSize); const { pageSize } = pagination
await query(currentPage, pageSize)
} }
async function handlePageSizeChange(currentPageSize) { async function handlePageSizeChange(currentPageSize) {
if (loading.value) return; if (loading.value)
return
const { page } = pagination; const { page } = pagination
pagination.pageSize = currentPageSize; pagination.pageSize = currentPageSize
await query(page, currentPageSize); await query(page, currentPageSize)
} }
function handleCheck(rowKeys: DataTableRowKey[]) { function handleCheck(rowKeys: DataTableRowKey[]) {
selectionIds.value = rowKeys; selectionIds.value = rowKeys
} }
function actionHandler(action: any) { function validate(items: any[]) {
const { key } = action; if (items.length === 0)
return '至少选中一个任务'
return null
}
function actionHandler(action: any, row: any) {
const { key } = action
switch (key) { switch (key) {
case "view": case 'view':
break; break
case "reset": case 'reset':
resetHandler(); // resetHandler()
break; break
case "approval": case 'approval':
approvalHandler(); singleApproval(row)
break; break
case "reject": case 'reject':
(rejectModalRef.value as any).showModal(); rejectHandler([row])
break; break
default: default:
break; break
} }
} }
const dialog = useDialog(); function getSelectItems() {
return tableData.value.filter(item => selectionIds.value.includes(item.id))
}
function resetHandler() { //
dialog.info({ function singleApproval(row) {
title: "确认提示", const param = {
content: "确认重置当前选中的任务的审批吗?", result: true,
positiveText: "确定", comment: '',
negativeText: "取消", disposeType: '',
onPositiveClick: async () => { disposeTypeId: '',
// TODO failCauseId: '',
// const result = await resetApproval() failCauseName: '',
flowTaskInfoList: [
{
formId: row.id,
taskId: row.taskId,
taskName: row.fromTaskName,
}, },
onNegativeClick: () => {}, ],
}); }
doAudit(param)
}
//
function batchApproval() {
const items: any = getSelectItems()
const msg = validate(items)
if (msg !== null) {
message.error(msg)
return
}
console.log(items)
const list: any = []
items.forEach((item) => {
list.push({
formId: item.id,
taskId: item.taskId,
taskName: item.fromtaskname,
})
})
const param = {
result: true,
comment: '',
disposeType: '',
disposeTypeId: '',
failCauseId: '',
failCauseName: '',
flowTaskInfoList: list,
}
doAudit(param)
} }
function approvalHandler() { //
function batchReject() {
const items: any = getSelectItems()
rejectHandler(items)
}
//
function doAudit(param: any) {
dialog.info({ dialog.info({
title: "确认提示", title: '确认提示',
content: "确认给该任务审批为【通过】吗?", content: '确认给该任务审批为【通过】吗?',
positiveText: "确定", positiveText: '确定',
negativeText: "取消", negativeText: '取消',
onPositiveClick: () => { onPositiveClick: () => {
// TODO audit(param).then((res) => {
const { code } = res
if (code === 'OK') {
message.success('审核成功')
reload()
}
else { message.error(res.message) }
})
}, },
onNegativeClick: () => {}, onNegativeClick: () => {},
}); })
} }
function rejectHandler(idOrDesc: string, isOther: boolean) { //
// TODO: function rejectHandler(list) {
// const param: ApprovalParam = { const msg = validate(list)
// formid: '', if (msg !== null) {
// taskId: '', message.error(msg)
// approvd: false, return
// taskComment: '', }
// }
// if (isOther) const modal = unref(notPassModalRef)! as any
// param.taskComment = idOrDesc modal.showModal(list)
// else
// param.taskComment = idOrDesc
// audit(param)
} }
query(pagination.page, pagination.pageSize)
query(pagination.page, pagination.pageSize); function reload() {
selectionIds.value = []
checkedRowKeys.value = []
}
</script> </script>
<template> <template>
<div> <div>
<NotPassed ref="notPassModalRef" @success="reload" />
<n-modal v-model:show="show" transform-origin="center"> <n-modal v-model:show="show" transform-origin="center">
<n-card <n-card
class="cardstyle" class="cardstyle"
@ -248,9 +378,15 @@ query(pagination.page, pagination.pageSize);
<span :style="{ 'margin-left': '18px' }">任务信息</span> <span :style="{ 'margin-left': '18px' }">任务信息</span>
</div> </div>
</div> </div>
<div class="batch">
<img class="btn-approval btn-left" src="@/assets/images/task/btn-not-pass.png" alt="" @click.stop="batchReject">
<SvgIcon size="24" name="vs" />
<img class="btn-approval" src="@/assets/images/task/btn-pass.png" alt="" @click.stop="batchApproval">
</div>
<div class="wrapper-content"> <div class="wrapper-content">
<NDataTable <NDataTable
ref="tableRef" ref="tableRef"
v-model:checked-row-keys="checkedRowKeys"
remote remote
:columns="columnsRef" :columns="columnsRef"
:scroll-x="1250" :scroll-x="1250"
@ -267,7 +403,9 @@ query(pagination.page, pagination.pageSize);
</div> </div>
<template #footer> <template #footer>
<div class="wrapper-footer"> <div class="wrapper-footer">
<n-button type="info" @click="handleSumbit"> </n-button> <n-button type="info" @click="handleSumbit">
确认
</n-button>
<n-button secondary style="margin-left: 15px" @click="closeModal"> <n-button secondary style="margin-left: 15px" @click="closeModal">
取消 取消
</n-button> </n-button>
@ -280,6 +418,18 @@ query(pagination.page, pagination.pageSize);
</template> </template>
<style lang="less" scoped> <style lang="less" scoped>
.batch {
display: flex;
align-items: center;
margin-top: 27px;
.btn-approval{
width: 68px;
height: 28px;
cursor: pointer;
}
}
.wrapper { .wrapper {
display: flex; display: flex;
flex-direction: column; flex-direction: column;

@ -505,7 +505,7 @@ query(pagination.page, pagination.pageSize)
const customTabelRef = ref(null) const customTabelRef = ref(null)
const importExcelRef = ref(null) const importExcelRef = ref(null)
const notPassModalRef = ref(null) // const notPassModalRef = ref(null) //
const repeatModalRef = ref(null) const repeatModalRef = ref(null)
const repeatTaskTableModalRef = ref(null) const repeatTaskTableModalRef = ref(null)
@ -682,6 +682,12 @@ function batchApproval() {
doAudit(param) doAudit(param)
} }
//
function repeatBatchReject(items) {
console.log(items)
rejectHandler(items)
}
// //
function batchReject() { function batchReject() {
const items: any = getSelectItems() const items: any = getSelectItems()
@ -700,6 +706,27 @@ function rejectHandler(list) {
modal.showModal(list) modal.showModal(list)
} }
//
function doAudit(param: any) {
dialog.info({
title: '确认提示',
content: '确认给该任务审批为【通过】吗?',
positiveText: '确定',
negativeText: '取消',
onPositiveClick: () => {
audit(param).then((res) => {
const { code } = res
if (code === 'OK') {
message.success('审核成功')
reload()
}
else { message.error(res.message) }
})
},
onNegativeClick: () => {},
})
}
function reload() { function reload() {
selectionIds.value = [] selectionIds.value = []
checkedRowKeys.value = [] checkedRowKeys.value = []
@ -725,27 +752,6 @@ async function refreshHandler(searchId?: any) {
reset() reset()
query(pagination.page, pagination.pageSize, searchId) query(pagination.page, pagination.pageSize, searchId)
} }
//
function doAudit(param: any) {
dialog.info({
title: '确认提示',
content: '确认给该任务审批为【通过】吗?',
positiveText: '确定',
negativeText: '取消',
onPositiveClick: () => {
audit(param).then((res) => {
const { code } = res
if (code === 'OK') {
message.success('审核成功')
reload()
}
else { message.error(res.message) }
})
},
onNegativeClick: () => {},
})
}
</script> </script>
<template> <template>
@ -842,7 +848,7 @@ function doAudit(param: any) {
<RepeatModal <RepeatModal
ref="repeatModalRef" ref="repeatModalRef"
@reject="showModal(notPassModalRef)" @reject="repeatBatchReject"
@viewrepeat="showModal(repeatTaskTableModalRef)" @viewrepeat="showModal(repeatTaskTableModalRef)"
/> />
<RepeatTaskTableModal ref="repeatTaskTableModalRef" /> <RepeatTaskTableModal ref="repeatTaskTableModalRef" />

Loading…
Cancel
Save