|
|
|
@ -1,102 +1,103 @@
|
|
|
|
|
<script lang="ts" setup>
|
|
|
|
|
import { onMounted, ref, reactive, unref, computed,watch } from "vue";
|
|
|
|
|
import { useRoute, useRouter } from "vue-router";
|
|
|
|
|
import testImg from "@/assets/images/test.png";
|
|
|
|
|
import { chunk } from "lodash-es";
|
|
|
|
|
import type { RowData } from "@/config/final";
|
|
|
|
|
import { getFinalList } from "@/api/final";
|
|
|
|
|
import { useFinal } from "@/store/modules/final";
|
|
|
|
|
import { formatToDateHMS } from "@/utils/dateUtil";
|
|
|
|
|
import { useMessage, useDialog } from "naive-ui";
|
|
|
|
|
import { audit } from "@/api/task/task";
|
|
|
|
|
import NotPassed from "@/components/Approval/NotPassed.vue";
|
|
|
|
|
import { RepeatModal, RepeatTaskTableModal } from "../comp";
|
|
|
|
|
const dialog = useDialog();
|
|
|
|
|
const message = useMessage();
|
|
|
|
|
const router = useRouter();
|
|
|
|
|
const notPassModalRef = ref(null); // 不通过弹窗
|
|
|
|
|
const sortorder = ref("asc");
|
|
|
|
|
const sortname = ref("states");
|
|
|
|
|
const loading = ref(true);
|
|
|
|
|
const total = ref(0);
|
|
|
|
|
const scrollContainer = ref(null);
|
|
|
|
|
const tableData = ref<any>([]);
|
|
|
|
|
const finalStore = useFinal();
|
|
|
|
|
|
|
|
|
|
let num = 1;
|
|
|
|
|
import { computed, onMounted, reactive, ref, unref, watch } from 'vue'
|
|
|
|
|
import { useRoute, useRouter } from 'vue-router'
|
|
|
|
|
import { chunk } from 'lodash-es'
|
|
|
|
|
import { useDialog, useMessage } from 'naive-ui'
|
|
|
|
|
import { RepeatModal, RepeatTaskTableModal } from '../comp'
|
|
|
|
|
import testImg from '@/assets/images/test.png'
|
|
|
|
|
import type { RowData } from '@/config/final'
|
|
|
|
|
import { getFinalList } from '@/api/final'
|
|
|
|
|
import { useFinal } from '@/store/modules/final'
|
|
|
|
|
import { formatToDateHMS } from '@/utils/dateUtil'
|
|
|
|
|
import { audit } from '@/api/task/task'
|
|
|
|
|
import NotPassed from '@/components/Approval/NotPassed.vue'
|
|
|
|
|
|
|
|
|
|
const emit = defineEmits(['changeShow'])
|
|
|
|
|
const dialog = useDialog()
|
|
|
|
|
const message = useMessage()
|
|
|
|
|
const router = useRouter()
|
|
|
|
|
const notPassModalRef = ref(null) // 不通过弹窗
|
|
|
|
|
const sortorder = ref('asc')
|
|
|
|
|
const sortname = ref('states')
|
|
|
|
|
const loading = ref(true)
|
|
|
|
|
const total = ref(0)
|
|
|
|
|
const scrollContainer = ref(null)
|
|
|
|
|
const tableData = ref<any>([])
|
|
|
|
|
const finalStore = useFinal()
|
|
|
|
|
|
|
|
|
|
let num = 1
|
|
|
|
|
const pagination = reactive({
|
|
|
|
|
page: 1,
|
|
|
|
|
pageCount: 20,
|
|
|
|
|
pageSize: 20,
|
|
|
|
|
});
|
|
|
|
|
const repeatModalRef = ref(null);
|
|
|
|
|
const repeatTaskTableModalRef = ref(null);
|
|
|
|
|
const selectionIds = ref([]);
|
|
|
|
|
})
|
|
|
|
|
const repeatModalRef = ref(null)
|
|
|
|
|
const repeatTaskTableModalRef = ref(null)
|
|
|
|
|
const selectionIds = ref([])
|
|
|
|
|
const showActions = computed(() => {
|
|
|
|
|
return selectionIds.value.length;
|
|
|
|
|
});
|
|
|
|
|
const emit = defineEmits(["changeShow"]);
|
|
|
|
|
return selectionIds.value.length
|
|
|
|
|
})
|
|
|
|
|
function handleCheck(row: any, showcheck: any) {
|
|
|
|
|
if (showcheck == false) {
|
|
|
|
|
console.log(tableData.value);
|
|
|
|
|
tableData.value.map((item) => {
|
|
|
|
|
console.log(tableData.value)
|
|
|
|
|
tableData.value.forEach((item) => {
|
|
|
|
|
if (item.length > 0) {
|
|
|
|
|
item.map((itemx, index) => {
|
|
|
|
|
if (row.id == itemx.id) {
|
|
|
|
|
itemx.showcheck = true;
|
|
|
|
|
item.forEach((itemx, index) => {
|
|
|
|
|
if (row.id == itemx.id)
|
|
|
|
|
itemx.showcheck = true
|
|
|
|
|
|
|
|
|
|
// newlistx.push(itemx)
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
//newlistx.push(itemx)
|
|
|
|
|
});
|
|
|
|
|
})
|
|
|
|
|
selectionIds.value.push(row)
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
selectionIds.value.push(row);
|
|
|
|
|
} else {
|
|
|
|
|
tableData.value.map((item) => {
|
|
|
|
|
else {
|
|
|
|
|
tableData.value.forEach((item) => {
|
|
|
|
|
if (item.length > 0) {
|
|
|
|
|
item.map((itemx, index) => {
|
|
|
|
|
if (row.id == itemx.id) {
|
|
|
|
|
itemx.showcheck = false;
|
|
|
|
|
}
|
|
|
|
|
//newlistx.push(itemx)
|
|
|
|
|
});
|
|
|
|
|
item.forEach((itemx, index) => {
|
|
|
|
|
if (row.id == itemx.id)
|
|
|
|
|
itemx.showcheck = false
|
|
|
|
|
|
|
|
|
|
// newlistx.push(itemx)
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
selectionIds.value.pop(row);
|
|
|
|
|
})
|
|
|
|
|
selectionIds.value.pop(row)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
function switchBatch() {
|
|
|
|
|
tableData.value.map((item) => {
|
|
|
|
|
item.map((itemx, index) => {
|
|
|
|
|
itemx.showcheck = false;
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
selectionIds.value = [];
|
|
|
|
|
tableData.value.forEach((item) => {
|
|
|
|
|
item.forEach((itemx, index) => {
|
|
|
|
|
itemx.showcheck = false
|
|
|
|
|
})
|
|
|
|
|
})
|
|
|
|
|
selectionIds.value = []
|
|
|
|
|
}
|
|
|
|
|
function changeContent() {
|
|
|
|
|
emit("changeShow");
|
|
|
|
|
emit('changeShow')
|
|
|
|
|
}
|
|
|
|
|
function initRem() {
|
|
|
|
|
const designWidth = 1440
|
|
|
|
|
const rempPx = 16
|
|
|
|
|
const scale = window.innerWidth / designWidth
|
|
|
|
|
document.documentElement.style.fontSize = `${scale * rempPx}px`
|
|
|
|
|
}
|
|
|
|
|
const initRem = () => {
|
|
|
|
|
const designWidth = 1440;
|
|
|
|
|
const rempPx = 16;
|
|
|
|
|
const scale = window.innerWidth / designWidth;
|
|
|
|
|
document.documentElement.style.fontSize = scale * rempPx + "px";
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
async function initData(
|
|
|
|
|
page: number,
|
|
|
|
|
pageSize: number,
|
|
|
|
|
filterId?: any,
|
|
|
|
|
taskName?: string
|
|
|
|
|
taskName?: string,
|
|
|
|
|
) {
|
|
|
|
|
|
|
|
|
|
const asideParmas = unref(finalStore.getAsideValue);
|
|
|
|
|
const asideParmas = unref(finalStore.getAsideValue)
|
|
|
|
|
// 有过滤配置的时候优先使用过滤配置,不要使用左侧参数
|
|
|
|
|
// let params = filterId ? { userSearchId: filterId } : asideParmas
|
|
|
|
|
let params = asideParmas;
|
|
|
|
|
if(params?.izshowall==false){
|
|
|
|
|
params.isFail=false
|
|
|
|
|
}
|
|
|
|
|
params = params?.izshowall ? {isFail:true} : params;
|
|
|
|
|
let params = asideParmas
|
|
|
|
|
if (params?.izshowall == false)
|
|
|
|
|
params.isFail = false
|
|
|
|
|
|
|
|
|
|
params = params?.izshowall ? { isFail: true } : params
|
|
|
|
|
|
|
|
|
|
const result = await getFinalList({
|
|
|
|
|
sortorder: sortorder.value,
|
|
|
|
@ -106,194 +107,195 @@ async function initData(
|
|
|
|
|
taskName,
|
|
|
|
|
|
|
|
|
|
...params,
|
|
|
|
|
});
|
|
|
|
|
const { data, pageCount, totalCount } = result;
|
|
|
|
|
console.log(data, pageCount, totalCount);
|
|
|
|
|
//tableData.value = tableData.value.concat(data);
|
|
|
|
|
tableData.value = data;
|
|
|
|
|
console.log(tableData.value);
|
|
|
|
|
total.value = totalCount;
|
|
|
|
|
pagination.page = page;
|
|
|
|
|
pagination.pageCount = Math.ceil(totalCount / pageSize);
|
|
|
|
|
loading.value = false;
|
|
|
|
|
tableData.value.map((item) => {
|
|
|
|
|
item.showcheck = false;
|
|
|
|
|
if (isValidTimestamp(item.fromuptime)) {
|
|
|
|
|
item.fromuptime = formatToDateHMS(item.fromuptime);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
tableData.value = chunk(tableData.value, 4);
|
|
|
|
|
})
|
|
|
|
|
const { data, pageCount, totalCount } = result
|
|
|
|
|
console.log(data, pageCount, totalCount)
|
|
|
|
|
// tableData.value = tableData.value.concat(data);
|
|
|
|
|
tableData.value = data
|
|
|
|
|
console.log(tableData.value)
|
|
|
|
|
total.value = totalCount
|
|
|
|
|
pagination.page = page
|
|
|
|
|
pagination.pageCount = Math.ceil(totalCount / pageSize)
|
|
|
|
|
loading.value = false
|
|
|
|
|
tableData.value.forEach((item) => {
|
|
|
|
|
item.showcheck = false
|
|
|
|
|
if (isValidTimestamp(item.fromuptime))
|
|
|
|
|
item.fromuptime = formatToDateHMS(item.fromuptime)
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
tableData.value = chunk(tableData.value, 4)
|
|
|
|
|
}
|
|
|
|
|
async function query(
|
|
|
|
|
page: number,
|
|
|
|
|
pageSize: number,
|
|
|
|
|
filterId?: any,
|
|
|
|
|
taskName?: string
|
|
|
|
|
taskName?: string,
|
|
|
|
|
) {
|
|
|
|
|
console.log("query", taskName);
|
|
|
|
|
console.log('query', taskName)
|
|
|
|
|
|
|
|
|
|
const asideParmas = unref(finalStore.getAsideValue);
|
|
|
|
|
const asideParmas = unref(finalStore.getAsideValue)
|
|
|
|
|
// 有过滤配置的时候优先使用过滤配置,不要使用左侧参数
|
|
|
|
|
// let params = filterId ? { userSearchId: filterId } : asideParmas
|
|
|
|
|
let params = asideParmas;
|
|
|
|
|
if(params?.izshowall==false){
|
|
|
|
|
params.isFail=false
|
|
|
|
|
}
|
|
|
|
|
params = params?.izshowall ? {isFail:true} : params;
|
|
|
|
|
let params = asideParmas
|
|
|
|
|
if (params?.izshowall == false)
|
|
|
|
|
params.isFail = false
|
|
|
|
|
|
|
|
|
|
params = params?.izshowall ? { isFail: true } : params
|
|
|
|
|
const result = await getFinalList({
|
|
|
|
|
sortorder: sortorder.value,
|
|
|
|
|
pageSize,
|
|
|
|
|
currPage: page,
|
|
|
|
|
sortname: sortname.value,
|
|
|
|
|
taskName,
|
|
|
|
|
//isFail: true,
|
|
|
|
|
// isFail: true,
|
|
|
|
|
...params,
|
|
|
|
|
});
|
|
|
|
|
const { data, pageCount, totalCount } = result;
|
|
|
|
|
//console.log(data, pageCount, totalCount);
|
|
|
|
|
let newlist = [];
|
|
|
|
|
let oldlist = tableData.value;
|
|
|
|
|
})
|
|
|
|
|
const { data, pageCount, totalCount } = result
|
|
|
|
|
// console.log(data, pageCount, totalCount);
|
|
|
|
|
const newlist = []
|
|
|
|
|
const oldlist = tableData.value
|
|
|
|
|
if (oldlist.length > 0) {
|
|
|
|
|
oldlist.map((item) => {
|
|
|
|
|
oldlist.forEach((item) => {
|
|
|
|
|
// console.log(item);
|
|
|
|
|
if (item.length > 0) {
|
|
|
|
|
item.map((itemx: any) => {
|
|
|
|
|
itemx.showcheck = false;
|
|
|
|
|
newlist.push(itemx);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
data.map((item) => {
|
|
|
|
|
item.showcheck = false;
|
|
|
|
|
newlist.push(item);
|
|
|
|
|
});
|
|
|
|
|
} else {
|
|
|
|
|
data.map((item) => {
|
|
|
|
|
item.showcheck = false;
|
|
|
|
|
newlist.push(item);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
//tableData.value = tableData.value.concat(data);
|
|
|
|
|
tableData.value = newlist;
|
|
|
|
|
item.forEach((itemx: any) => {
|
|
|
|
|
itemx.showcheck = false
|
|
|
|
|
newlist.push(itemx)
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
data.forEach((item) => {
|
|
|
|
|
item.showcheck = false
|
|
|
|
|
newlist.push(item)
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
data.forEach((item) => {
|
|
|
|
|
item.showcheck = false
|
|
|
|
|
newlist.push(item)
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
// tableData.value = tableData.value.concat(data);
|
|
|
|
|
tableData.value = newlist
|
|
|
|
|
// console.log(tableData.value);
|
|
|
|
|
total.value = totalCount;
|
|
|
|
|
pagination.page = page;
|
|
|
|
|
pagination.pageCount = Math.ceil(totalCount / pageSize);
|
|
|
|
|
loading.value = false;
|
|
|
|
|
tableData.value.map((item) => {
|
|
|
|
|
if (isValidTimestamp(item.fromuptime)) {
|
|
|
|
|
item.fromuptime = formatToDateHMS(item.fromuptime);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
tableData.value = chunk(tableData.value, 4);
|
|
|
|
|
total.value = totalCount
|
|
|
|
|
pagination.page = page
|
|
|
|
|
pagination.pageCount = Math.ceil(totalCount / pageSize)
|
|
|
|
|
loading.value = false
|
|
|
|
|
tableData.value.forEach((item) => {
|
|
|
|
|
if (isValidTimestamp(item.fromuptime))
|
|
|
|
|
item.fromuptime = formatToDateHMS(item.fromuptime)
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
tableData.value = chunk(tableData.value, 4)
|
|
|
|
|
}
|
|
|
|
|
function isValidTimestamp(value) {
|
|
|
|
|
if (typeof value !== "number" || !Number.isInteger(value)) {
|
|
|
|
|
return false; // 首先确保值是一个整数数字
|
|
|
|
|
}
|
|
|
|
|
const date = new Date(value);
|
|
|
|
|
return !isNaN(date.getTime()); // 验证能否转换为有效日期
|
|
|
|
|
if (typeof value !== 'number' || !Number.isInteger(value))
|
|
|
|
|
return false // 首先确保值是一个整数数字
|
|
|
|
|
|
|
|
|
|
const date = new Date(value)
|
|
|
|
|
return !Number.isNaN(date.getTime()) // 验证能否转换为有效日期
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//查看详情页
|
|
|
|
|
// 查看详情页
|
|
|
|
|
function goDetail(row) {
|
|
|
|
|
router.push({
|
|
|
|
|
name: "final-detail",
|
|
|
|
|
name: 'final-detail',
|
|
|
|
|
query: { id: row.id, packageid: row.packageid },
|
|
|
|
|
});
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
// 小结批量不通过
|
|
|
|
|
function repeatBatchReject(items) {
|
|
|
|
|
console.log(items);
|
|
|
|
|
rejectHandler(items);
|
|
|
|
|
console.log(items)
|
|
|
|
|
rejectHandler(items)
|
|
|
|
|
}
|
|
|
|
|
// 审核不通过
|
|
|
|
|
function rejectHandler(list) {
|
|
|
|
|
console.log(list);
|
|
|
|
|
const msg = validate(list);
|
|
|
|
|
console.log(list)
|
|
|
|
|
const msg = validate(list)
|
|
|
|
|
if (msg !== null) {
|
|
|
|
|
message.error(msg);
|
|
|
|
|
return;
|
|
|
|
|
message.error(msg)
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
function validate(items: any[]) {
|
|
|
|
|
if (items.length === 0) return "至少选中一个任务";
|
|
|
|
|
return null;
|
|
|
|
|
if (items.length === 0)
|
|
|
|
|
return '至少选中一个任务'
|
|
|
|
|
return null
|
|
|
|
|
}
|
|
|
|
|
console.log(notPassModalRef);
|
|
|
|
|
const modal = unref(notPassModalRef)! as any;
|
|
|
|
|
modal.showModal(list);
|
|
|
|
|
console.log(notPassModalRef)
|
|
|
|
|
const modal = unref(notPassModalRef)! as any
|
|
|
|
|
modal.showModal(list)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function showModal(modalRef: any) {
|
|
|
|
|
const modal = unref(modalRef)! as any;
|
|
|
|
|
modal.showModal();
|
|
|
|
|
const modal = unref(modalRef)! as any
|
|
|
|
|
modal.showModal()
|
|
|
|
|
}
|
|
|
|
|
onMounted(() => {
|
|
|
|
|
initRem();
|
|
|
|
|
initData(1, 20);
|
|
|
|
|
});
|
|
|
|
|
initRem()
|
|
|
|
|
initData(1, 20)
|
|
|
|
|
})
|
|
|
|
|
const item = {
|
|
|
|
|
img: testImg,
|
|
|
|
|
checked: false,
|
|
|
|
|
title: "YP45678",
|
|
|
|
|
date: "2023-12-19 12:09:18",
|
|
|
|
|
};
|
|
|
|
|
const data = ref<any[]>([]);
|
|
|
|
|
title: 'YP45678',
|
|
|
|
|
date: '2023-12-19 12:09:18',
|
|
|
|
|
}
|
|
|
|
|
const data = ref<any[]>([])
|
|
|
|
|
function actionHandler(action: any, row: any) {
|
|
|
|
|
const { key } = action;
|
|
|
|
|
const { key } = action
|
|
|
|
|
switch (key) {
|
|
|
|
|
case "view":
|
|
|
|
|
goDetail(row);
|
|
|
|
|
break;
|
|
|
|
|
case "reset":
|
|
|
|
|
case 'view':
|
|
|
|
|
goDetail(row)
|
|
|
|
|
break
|
|
|
|
|
case 'reset':
|
|
|
|
|
// resetHandler()
|
|
|
|
|
break;
|
|
|
|
|
case "approval":
|
|
|
|
|
singleApproval(row);
|
|
|
|
|
break;
|
|
|
|
|
case "reject":
|
|
|
|
|
rejectHandler(row);
|
|
|
|
|
break;
|
|
|
|
|
break
|
|
|
|
|
case 'approval':
|
|
|
|
|
singleApproval(row)
|
|
|
|
|
break
|
|
|
|
|
case 'reject':
|
|
|
|
|
rejectHandler(row)
|
|
|
|
|
break
|
|
|
|
|
default:
|
|
|
|
|
break;
|
|
|
|
|
break
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// 审核通过
|
|
|
|
|
function doAudit(param: any, row: any) {
|
|
|
|
|
dialog.info({
|
|
|
|
|
title: "确认提示",
|
|
|
|
|
content: "确认给该任务审批为【通过】吗?",
|
|
|
|
|
positiveText: "确定",
|
|
|
|
|
negativeText: "取消",
|
|
|
|
|
title: '确认提示',
|
|
|
|
|
content: '确认给该任务审批为【通过】吗?',
|
|
|
|
|
positiveText: '确定',
|
|
|
|
|
negativeText: '取消',
|
|
|
|
|
onPositiveClick: () => {
|
|
|
|
|
audit(param).then((res) => {
|
|
|
|
|
const { code } = res;
|
|
|
|
|
if (code === "OK") {
|
|
|
|
|
message.success(res.message);
|
|
|
|
|
//changecardstatus(3, row);
|
|
|
|
|
initData(1, 20);
|
|
|
|
|
num = 1;
|
|
|
|
|
reload();
|
|
|
|
|
} else {
|
|
|
|
|
message.error(res.message);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
const { code } = res
|
|
|
|
|
if (code === 'OK') {
|
|
|
|
|
message.success(res.message)
|
|
|
|
|
// changecardstatus(3, row);
|
|
|
|
|
initData(1, 20)
|
|
|
|
|
num = 1
|
|
|
|
|
reload()
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
message.error(res.message)
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
},
|
|
|
|
|
onNegativeClick: () => {},
|
|
|
|
|
});
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
// 单个审批通过
|
|
|
|
|
function singleApproval(row) {
|
|
|
|
|
console.log(row);
|
|
|
|
|
console.log(row)
|
|
|
|
|
const param = {
|
|
|
|
|
result: true,
|
|
|
|
|
comment: "",
|
|
|
|
|
disposeType: "",
|
|
|
|
|
disposeTypeId: "",
|
|
|
|
|
failCauseId: "",
|
|
|
|
|
failCauseName: "",
|
|
|
|
|
comment: '',
|
|
|
|
|
disposeType: '',
|
|
|
|
|
disposeTypeId: '',
|
|
|
|
|
failCauseId: '',
|
|
|
|
|
failCauseName: '',
|
|
|
|
|
flowTaskInfoList: [
|
|
|
|
|
{
|
|
|
|
|
formId: row.id,
|
|
|
|
@ -301,137 +303,144 @@ function singleApproval(row) {
|
|
|
|
|
taskName: row.fromTaskName,
|
|
|
|
|
},
|
|
|
|
|
],
|
|
|
|
|
};
|
|
|
|
|
doAudit(param, row);
|
|
|
|
|
}
|
|
|
|
|
doAudit(param, row)
|
|
|
|
|
}
|
|
|
|
|
// 批量通过
|
|
|
|
|
function batchApproval() {
|
|
|
|
|
const items: any = selectionIds.value;
|
|
|
|
|
const msg = validate(items);
|
|
|
|
|
const items: any = selectionIds.value
|
|
|
|
|
const msg = validate(items)
|
|
|
|
|
function validate(items: any[]) {
|
|
|
|
|
if (items.length === 0) return "至少选中一个任务";
|
|
|
|
|
return null;
|
|
|
|
|
if (items.length === 0)
|
|
|
|
|
return '至少选中一个任务'
|
|
|
|
|
return null
|
|
|
|
|
}
|
|
|
|
|
if (msg !== null) {
|
|
|
|
|
message.error(msg);
|
|
|
|
|
return;
|
|
|
|
|
message.error(msg)
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
console.log(items);
|
|
|
|
|
const list: any = [];
|
|
|
|
|
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: "",
|
|
|
|
|
comment: '',
|
|
|
|
|
disposeType: '',
|
|
|
|
|
disposeTypeId: '',
|
|
|
|
|
failCauseId: '',
|
|
|
|
|
failCauseName: '',
|
|
|
|
|
flowTaskInfoList: list,
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
doAudit(param, {});
|
|
|
|
|
selectionIds.value = [];
|
|
|
|
|
num = 1;
|
|
|
|
|
doAudit(param, {})
|
|
|
|
|
selectionIds.value = []
|
|
|
|
|
num = 1
|
|
|
|
|
}
|
|
|
|
|
// 批量不通过
|
|
|
|
|
function batchReject() {
|
|
|
|
|
const items: any = selectionIds.value;
|
|
|
|
|
rejectHandler(items);
|
|
|
|
|
selectionIds.value = [];
|
|
|
|
|
num = 1;
|
|
|
|
|
const items: any = selectionIds.value
|
|
|
|
|
rejectHandler(items)
|
|
|
|
|
selectionIds.value = []
|
|
|
|
|
num = 1
|
|
|
|
|
}
|
|
|
|
|
//修改卡片状态渲染效果
|
|
|
|
|
// 修改卡片状态渲染效果
|
|
|
|
|
function changecardstatus(states, item) {
|
|
|
|
|
//let index = tableData.value.findIndex(itemx => itemx.id === item.id);
|
|
|
|
|
let newlist = [];
|
|
|
|
|
tableData.value.map((itemarr, indexarr) => {
|
|
|
|
|
itemarr.map((itemobj, indexobj) => {
|
|
|
|
|
if (item.id == itemobj.id) {
|
|
|
|
|
itemobj.states = states;
|
|
|
|
|
}
|
|
|
|
|
newlist.push(itemobj);
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
tableData.value = chunk(newlist, 4);
|
|
|
|
|
// let index = tableData.value.findIndex(itemx => itemx.id === item.id);
|
|
|
|
|
const newlist = []
|
|
|
|
|
tableData.value.forEach((itemarr, indexarr) => {
|
|
|
|
|
itemarr.forEach((itemobj, indexobj) => {
|
|
|
|
|
if (item.id == itemobj.id)
|
|
|
|
|
itemobj.states = states
|
|
|
|
|
|
|
|
|
|
newlist.push(itemobj)
|
|
|
|
|
})
|
|
|
|
|
})
|
|
|
|
|
tableData.value = chunk(newlist, 4)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function reload() {
|
|
|
|
|
//query(1, 20)
|
|
|
|
|
//num=1
|
|
|
|
|
//selectionIds.value = []
|
|
|
|
|
//checkedRowKeys.value = []
|
|
|
|
|
// query(1, 20)
|
|
|
|
|
// num=1
|
|
|
|
|
// selectionIds.value = []
|
|
|
|
|
// checkedRowKeys.value = []
|
|
|
|
|
// const { page, pageSize } = unref(tableRef.value?.pagination) as PaginationProps
|
|
|
|
|
// query(page!, pageSize!)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
let debounceTimer;
|
|
|
|
|
let debounceTimer
|
|
|
|
|
// 检查是否滚动到底部
|
|
|
|
|
function checkBottom() {
|
|
|
|
|
const container = scrollContainer.value;
|
|
|
|
|
const container = scrollContainer.value
|
|
|
|
|
// console.log(1)
|
|
|
|
|
if (!container) return;
|
|
|
|
|
if (!container)
|
|
|
|
|
return
|
|
|
|
|
|
|
|
|
|
// const { scrollTop, clientHeight, scrollHeight } = container;
|
|
|
|
|
const scrollTop = window.pageYOffset || document.documentElement.scrollTop;
|
|
|
|
|
const scrollTop = window.pageYOffset || document.documentElement.scrollTop
|
|
|
|
|
|
|
|
|
|
// 获取视口的内部高度
|
|
|
|
|
const clientHeight =
|
|
|
|
|
window.innerHeight || document.documentElement.clientHeight;
|
|
|
|
|
const clientHeight
|
|
|
|
|
= window.innerHeight || document.documentElement.clientHeight
|
|
|
|
|
|
|
|
|
|
// 获取整个文档的高度
|
|
|
|
|
const scrollHeight = document.documentElement.scrollHeight;
|
|
|
|
|
const scrollHeight = document.documentElement.scrollHeight
|
|
|
|
|
|
|
|
|
|
clearTimeout(debounceTimer);
|
|
|
|
|
clearTimeout(debounceTimer)
|
|
|
|
|
debounceTimer = setTimeout(() => {
|
|
|
|
|
if (scrollTop + clientHeight >= scrollHeight - 10) {
|
|
|
|
|
num = num + 1;
|
|
|
|
|
console.log(num);
|
|
|
|
|
query(num, 20);
|
|
|
|
|
num = num + 1
|
|
|
|
|
console.log(num)
|
|
|
|
|
query(num, 20)
|
|
|
|
|
// fetchData(); // 接近底部时加载更多数据
|
|
|
|
|
}
|
|
|
|
|
}, 500);
|
|
|
|
|
}, 500)
|
|
|
|
|
}
|
|
|
|
|
function changesort(sortnamex) {
|
|
|
|
|
if (sortorder.value == "asc" && sortnamex == "submit_date_timestamp") {
|
|
|
|
|
sortorder.value = "desc";
|
|
|
|
|
sortname.value = "submit_date_timestamp";
|
|
|
|
|
}else if (sortorder.value == "desc" && sortnamex == "submit_date_timestamp") {
|
|
|
|
|
sortorder.value = "asc";
|
|
|
|
|
sortname.value = "submit_date_timestamp";
|
|
|
|
|
} else if (sortorder.value == "desc" && sortnamex == "similarity_score") {
|
|
|
|
|
sortorder.value = "asc";
|
|
|
|
|
sortname.value = "similarity_score";
|
|
|
|
|
} else if (sortorder.value == "asc" && sortnamex == "similarity_score") {
|
|
|
|
|
sortorder.value = "desc";
|
|
|
|
|
sortname.value = "similarity_score";
|
|
|
|
|
} else if (sortorder.value == "asc" && sortnamex == "field1") {
|
|
|
|
|
sortorder.value = "desc";
|
|
|
|
|
sortname.value = "field1";
|
|
|
|
|
} else if (sortorder.value == "desc" && sortnamex == "field1") {
|
|
|
|
|
sortorder.value = "asc";
|
|
|
|
|
sortname.value = "field1";
|
|
|
|
|
}
|
|
|
|
|
initData(1, 20);
|
|
|
|
|
num=1
|
|
|
|
|
if (sortorder.value == 'asc' && sortnamex == 'submit_date_timestamp') {
|
|
|
|
|
sortorder.value = 'desc'
|
|
|
|
|
sortname.value = 'submit_date_timestamp'
|
|
|
|
|
}
|
|
|
|
|
else if (sortorder.value == 'desc' && sortnamex == 'submit_date_timestamp') {
|
|
|
|
|
sortorder.value = 'asc'
|
|
|
|
|
sortname.value = 'submit_date_timestamp'
|
|
|
|
|
}
|
|
|
|
|
else if (sortorder.value == 'desc' && sortnamex == 'similarity_score') {
|
|
|
|
|
sortorder.value = 'asc'
|
|
|
|
|
sortname.value = 'similarity_score'
|
|
|
|
|
}
|
|
|
|
|
else if (sortorder.value == 'asc' && sortnamex == 'similarity_score') {
|
|
|
|
|
sortorder.value = 'desc'
|
|
|
|
|
sortname.value = 'similarity_score'
|
|
|
|
|
}
|
|
|
|
|
else if (sortorder.value == 'asc' && sortnamex == 'field1') {
|
|
|
|
|
sortorder.value = 'desc'
|
|
|
|
|
sortname.value = 'field1'
|
|
|
|
|
}
|
|
|
|
|
else if (sortorder.value == 'desc' && sortnamex == 'field1') {
|
|
|
|
|
sortorder.value = 'asc'
|
|
|
|
|
sortname.value = 'field1'
|
|
|
|
|
}
|
|
|
|
|
initData(1, 20)
|
|
|
|
|
num = 1
|
|
|
|
|
}
|
|
|
|
|
watch(
|
|
|
|
|
() => finalStore.asideValue,
|
|
|
|
|
(newVal, oldVal) => {
|
|
|
|
|
initData(1, 20);
|
|
|
|
|
initData(1, 20)
|
|
|
|
|
},
|
|
|
|
|
{ deep: true }
|
|
|
|
|
);
|
|
|
|
|
{ deep: true },
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
defineExpose({
|
|
|
|
|
initData,
|
|
|
|
|
});
|
|
|
|
|
})
|
|
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
<template>
|
|
|
|
@ -476,18 +485,17 @@ defineExpose({
|
|
|
|
|
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>
|
|
|
|
|
|
|
|
|
|
<n-popover
|
|
|
|
|
ref="popover"
|
|
|
|
|
:style="{ padding: '0px' }"
|
|
|
|
|
style="width: 148px"
|
|
|
|
|
:show-arrow="false"
|
|
|
|
@ -501,26 +509,20 @@ defineExpose({
|
|
|
|
|
</template>
|
|
|
|
|
<ul class="wrapper-header-action">
|
|
|
|
|
<li @click="importHandler">
|
|
|
|
|
<SvgIcon size="20" name="import" /><span style="margin-left: 5px"
|
|
|
|
|
>批量导入数据</span
|
|
|
|
|
>
|
|
|
|
|
<SvgIcon size="20" name="import" /><span style="margin-left: 5px">批量导入数据</span>
|
|
|
|
|
</li>
|
|
|
|
|
<li @click="exportHandler">
|
|
|
|
|
<SvgIcon size="20" name="download" /><span
|
|
|
|
|
style="margin-left: 5px"
|
|
|
|
|
>导出待审数据</span
|
|
|
|
|
>
|
|
|
|
|
>导出待审数据</span>
|
|
|
|
|
</li>
|
|
|
|
|
<li>
|
|
|
|
|
<SvgIcon size="20" name="download" /><span
|
|
|
|
|
style="margin-left: 5px"
|
|
|
|
|
>导出全部数据</span
|
|
|
|
|
>
|
|
|
|
|
>导出全部数据</span>
|
|
|
|
|
</li>
|
|
|
|
|
<li>
|
|
|
|
|
<SvgIcon size="20" name="look" /><span style="margin-left: 5px"
|
|
|
|
|
>查看导入记录</span
|
|
|
|
|
>
|
|
|
|
|
<SvgIcon size="20" name="look" /><span style="margin-left: 5px">查看导入记录</span>
|
|
|
|
|
</li>
|
|
|
|
|
</ul>
|
|
|
|
|
</n-popover>
|
|
|
|
@ -528,21 +530,18 @@ defineExpose({
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<div class="header_data">
|
|
|
|
|
<DataHeader :hasColor="true" />
|
|
|
|
|
<DataHeader :has-color="true" />
|
|
|
|
|
</div>
|
|
|
|
|
<div class="wrapper-settings">
|
|
|
|
|
<div>
|
|
|
|
|
<div @click="changesort('submit_date_timestamp')">
|
|
|
|
|
<span>提报时间排序</span
|
|
|
|
|
><SvgIcon style="margin-left: 6px" name="sort" size="13" />
|
|
|
|
|
<span>提报时间排序</span><SvgIcon style="margin-left: 6px" name="sort" size="13" />
|
|
|
|
|
</div>
|
|
|
|
|
<div @click="changesort('similarity_score')">
|
|
|
|
|
<span>相似度排序</span
|
|
|
|
|
><SvgIcon style="margin-left: 6px" name="sort" size="13" />
|
|
|
|
|
<span>相似度排序</span><SvgIcon style="margin-left: 6px" name="sort" size="13" />
|
|
|
|
|
</div>
|
|
|
|
|
<div @click="changesort('field1')">
|
|
|
|
|
<span>提报人排序</span
|
|
|
|
|
><SvgIcon style="margin-left: 6px" name="sort" size="13" />
|
|
|
|
|
<span>提报人排序</span><SvgIcon style="margin-left: 6px" name="sort" size="13" />
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div style="width: 3vw">
|
|
|
|
@ -555,12 +554,11 @@ defineExpose({
|
|
|
|
|
/>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div :class="tableData.length>4?'cotnet_wrapeer':'cotnet_wrapeertwo'" @scroll="checkBottom" ref="scrollContainer">
|
|
|
|
|
|
|
|
|
|
<div ref="scrollContainer" :class="tableData.length > 4 ? 'cotnet_wrapeer' : 'cotnet_wrapeertwo'" @scroll="checkBottom">
|
|
|
|
|
<div
|
|
|
|
|
class="data_wrapper"
|
|
|
|
|
v-for="(sitem, sindex) in tableData"
|
|
|
|
|
:key="sindex"
|
|
|
|
|
class="data_wrapper"
|
|
|
|
|
:style="
|
|
|
|
|
sitem.length == 1
|
|
|
|
|
? { width: '25%' }
|
|
|
|
@ -572,9 +570,9 @@ defineExpose({
|
|
|
|
|
"
|
|
|
|
|
>
|
|
|
|
|
<div
|
|
|
|
|
class="item"
|
|
|
|
|
v-for="(item, index) in sitem"
|
|
|
|
|
:key="index"
|
|
|
|
|
class="item"
|
|
|
|
|
:style="
|
|
|
|
|
sitem.length == 1
|
|
|
|
|
? { margin: '0 4% 0 4%' }
|
|
|
|
@ -587,25 +585,27 @@ defineExpose({
|
|
|
|
|
>
|
|
|
|
|
<div class="top">
|
|
|
|
|
<div
|
|
|
|
|
@click="goDetail(item)"
|
|
|
|
|
class="img"
|
|
|
|
|
:style="
|
|
|
|
|
item.serverThumbnailUrl != null
|
|
|
|
|
? `background:url(${item.serverThumbnailUrl});background-size:100% 100%;background-repeat: no-repeat;`
|
|
|
|
|
: `background:url(${item.imgUrl});background-size:100% 100%;background-repeat: no-repeat;`
|
|
|
|
|
"
|
|
|
|
|
> <div class="percent" v-if="item.similarityscore != -1">
|
|
|
|
|
@click="goDetail(item)"
|
|
|
|
|
>
|
|
|
|
|
<div v-if="item.similarityscore != -1" class="percent">
|
|
|
|
|
<SvgIcon size="30" :name="item.similarityscore == 100 ? 'error_tag' : 'tag'" />
|
|
|
|
|
<div class="val">
|
|
|
|
|
{{ `${item.similarityscore}%` }}
|
|
|
|
|
</div>
|
|
|
|
|
</div></div>
|
|
|
|
|
<div class="check_box" v-show="item.states == 2">
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div v-show="item.states == 2" class="check_box">
|
|
|
|
|
<n-checkbox
|
|
|
|
|
size="medium"
|
|
|
|
|
label=" "
|
|
|
|
|
@click="handleCheck(item, item.showcheck)"
|
|
|
|
|
:checked="item.showcheck"
|
|
|
|
|
@click="handleCheck(item, item.showcheck)"
|
|
|
|
|
/>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
@ -616,15 +616,15 @@ defineExpose({
|
|
|
|
|
</n-ellipsis>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="date">
|
|
|
|
|
<n-ellipsis style="max-width: 100%"
|
|
|
|
|
>{{ item.fromuptime }}
|
|
|
|
|
<n-ellipsis style="max-width: 100%">
|
|
|
|
|
{{ item.fromuptime }}
|
|
|
|
|
</n-ellipsis>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="tag_box">
|
|
|
|
|
<div
|
|
|
|
|
class="tag_item"
|
|
|
|
|
v-for="index in 2"
|
|
|
|
|
:key="index"
|
|
|
|
|
class="tag_item"
|
|
|
|
|
:style="
|
|
|
|
|
index == 2 || item.states == 3
|
|
|
|
|
? 'color:#02C984'
|
|
|
|
@ -651,24 +651,24 @@ defineExpose({
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="bottom">
|
|
|
|
|
<!-- <div class="reset_action">重置审批</div>-->
|
|
|
|
|
<!-- <div class="reset_action">重置审批</div> -->
|
|
|
|
|
<div
|
|
|
|
|
class="resovle_action"
|
|
|
|
|
v-show="item.states != 2"
|
|
|
|
|
class="resovle_action"
|
|
|
|
|
@click="goDetail(item)"
|
|
|
|
|
>
|
|
|
|
|
查看
|
|
|
|
|
</div>
|
|
|
|
|
<div
|
|
|
|
|
class="resovle_action"
|
|
|
|
|
v-show="item.states == 2"
|
|
|
|
|
class="resovle_action"
|
|
|
|
|
@click="actionHandler({ key: 'approval' }, item)"
|
|
|
|
|
>
|
|
|
|
|
通过
|
|
|
|
|
</div>
|
|
|
|
|
<div
|
|
|
|
|
class="reject_action"
|
|
|
|
|
v-show="item.states == 2"
|
|
|
|
|
class="reject_action"
|
|
|
|
|
@click="actionHandler({ key: 'reject' }, [item])"
|
|
|
|
|
>
|
|
|
|
|
不通过
|
|
|
|
|