Merge pull request 'feat: 新增任务审批弹窗判断展示' (#19) from al into test

Reviewed-on: #19
pull/21/head
刘释隆 1 year ago
commit 9b29239459

@ -150,7 +150,7 @@ function unformatValue(searchfield: string, searchvalue: any) {
function createCondition() {
formValue.conditions.push({
type: null,
operator: null,
operator: 'eq',
result: null,
})
}
@ -227,7 +227,7 @@ function leaveHandler() {
formValue.conditions = [
{
type: null,
operator: null,
operator: 'eq',
result: null,
},
]
@ -269,7 +269,7 @@ defineExpose({
<n-form-item path="name" label="标题">
<n-input v-model:value="formValue.name" :style="{ width: '780px' }" @keydown.enter.prevent />
</n-form-item>
<n-form-item path="logic" label="逻辑关系">
<n-form-item path="logic" label="逻辑关系" v-show="false">
<n-select filterable v-model:value="formValue.logic" placeholder="请选择逻辑关系" :options="logicOptions" />
</n-form-item>
<n-form-item

@ -158,7 +158,7 @@ function unformatValue(searchfield: string, searchvalue: any) {
function createCondition() {
formValue.conditions.push({
type: null,
operator: null,
operator: 'eq',
result: null,
})
}
@ -260,7 +260,7 @@ function leaveHandler() {
formValue.conditions = [
{
type: null,
operator: null,
operator: 'eq',
result: null,
},
]
@ -302,7 +302,7 @@ defineExpose({
<n-form-item path="name" label="标题">
<n-input v-model:value="formValue.name" :style="{ width: '780px' }" @keydown.enter.prevent />
</n-form-item>
<n-form-item path="logic" label="逻辑关系">
<n-form-item path="logic" label="逻辑关系" v-show="false">
<n-select filterable v-model:value="formValue.logic" placeholder="请选择逻辑关系" :options="logicOptions" />
</n-form-item>
<n-form-item

@ -93,7 +93,7 @@ const rules = {
if (loginSuccess.value || !value) {
return true;
}
if (loginRejectMessge.value.indexOf("用户名") > -1) {
if (loginRejectMessge.value.indexOf("用户名") > -1||loginRejectMessge.value.indexOf("账号") > -1) {
return new Error(loginRejectMessge.value);
}
},

@ -1,23 +1,28 @@
<script lang="ts" setup>
import { computed, onMounted, onUnmounted, reactive, ref, unref, watch } from 'vue'
import { chunk, clone } from 'lodash-es'
import { useDialog, useMessage } from 'naive-ui'
import { useRoute } from 'vue-router'
import BatchModal from '../modal/BatchModal.vue'
import CustomSettingModal from '../modal/CustomSettingModal.vue'
import PictureTable from './PictureTable.vue'
import TaskTable from './TaskTable.vue'
import History from './History.vue'
import NotPassed from '@/components/Approval/NotPassed.vue'
import { getAllfieldList, getfieldList } from '@/api/home/filter'
import { TASK_STATUS_OBJ } from '@/enums/index'
import { audit, dubiousfileyd, getSimilarityList, getTaskDetailInfo } from '@/api/task/task'
import { useTask } from '@/store/modules/task'
import { useUser } from '@/store/modules/user'
import { isEmpty } from '@/utils'
import { formatToDateHMS } from '@/utils/dateUtil'
import { hideDownload } from '@/utils/image'
import { computed, onMounted, onUnmounted, reactive, ref, unref, watch } from "vue";
import { chunk, clone } from "lodash-es";
import { useDialog, useMessage } from "naive-ui";
import { useRoute } from "vue-router";
import BatchModal from "../modal/BatchModal.vue";
import CustomSettingModal from "../modal/CustomSettingModal.vue";
import PictureTable from "./PictureTable.vue";
import TaskTable from "./TaskTable.vue";
import History from "./History.vue";
import NotPassed from "@/components/Approval/NotPassed.vue";
import { getAllfieldList, getfieldList } from "@/api/home/filter";
import { TASK_STATUS_OBJ } from "@/enums/index";
import {
audit,
dubiousfileyd,
getSimilarityList,
getTaskDetailInfo,
} from "@/api/task/task";
import { useTask } from "@/store/modules/task";
import { useUser } from "@/store/modules/user";
import { isEmpty } from "@/utils";
import { formatToDateHMS } from "@/utils/dateUtil";
import { hideDownload } from "@/utils/image";
const emit = defineEmits(['setAsideItemName'])
const batch = ref(false)
@ -34,61 +39,57 @@ const taskTableData = ref<any[]>([])
const route = useRoute()
const sortBy: any = {
orderType: 'desc',
orderName: 'similarityScore',
}
orderType: "desc",
orderName: "similarityScore",
};
function setBatch(value: boolean) {
if (totalCount.value === 0)
return
if (totalCount.value === 0) return;
batch.value = value
batch.value = value;
if (value === false)
selectItems.value = []
}
function onCheckChange(checked: any, item: any) {
const index = selectItems.value.indexOf(item)
item.checked = checked
const index = selectItems.value.indexOf(item);
item.checked = checked;
if (index === -1 && checked)
selectItems.value.push(item)
else selectItems.value.splice(index, 1)
if (index === -1 && checked) selectItems.value.push(item);
else selectItems.value.splice(index, 1);
}
const showActions = computed(() => {
return selectItems.value.length > 0 && batch
})
return selectItems.value.length > 0 && batch;
});
const taskpagination = reactive({
pageNo: 1,
pageSize: 10,
})
const taskStore = useTask()
const overTask = ref<any>(null)
const taskDetailInfo = ref<any>({})
const taskDetailPictureList = ref<any[]>([])
const userStore = useUser()
const imageRef = ref<ComponentElRef | null>()
let processItems: any[] = []
});
const taskStore = useTask();
const overTask = ref<any>(null);
const taskDetailInfo = ref<any>({});
const taskDetailPictureList = ref<any[]>([]);
const userStore = useUser();
const imageRef = ref<ComponentElRef | null>();
let processItems: any[] = [];
onMounted(() => {
window.addEventListener('keydown', handleKeydown)
window.addEventListener("keydown", handleKeydown);
if (route.query.id) {
taskId.value = route.query.id
packageId.value = route.query.packageid
getDetail()
taskId.value = route.query.id;
packageId.value = route.query.packageid;
getDetail();
}
})
});
//
function handleKeydown(event) {
if (event.key === 'ArrowLeft')
backHandler()
if (event.key === "ArrowLeft") backHandler();
//
else if (event.key === 'ArrowRight')
forwardHandler()
else if (event.key === "ArrowRight") forwardHandler();
//
}
@ -100,8 +101,7 @@ function currentTaskId() {
// states:1234
function validate(items: any[]) {
if (items.length === 0)
return '至少选中一个任务'
if (items.length === 0) return "至少选中一个任务";
// const useInfo = userStore.getUserInfo
// const username = useInfo.loginname
@ -118,58 +118,56 @@ function validate(items: any[]) {
// return ''
// }
return null
return null;
}
function approvalHandler(items?: any) {
let cloneItem: any
let cloneItem: any;
if (batch.value) {
processItems = selectItems.value
}
else if (overTask.value) {
cloneItem = clone(overTask.value)
processItems = [cloneItem]
processItems = selectItems.value;
} else if (overTask.value) {
cloneItem = clone(overTask.value);
processItems = [cloneItem];
}
if (items !== undefined && !(items instanceof PointerEvent))
processItems = items
if (items !== undefined && !(items instanceof PointerEvent)) processItems = items;
const msg = validate(processItems)
const msg = validate(processItems);
if (msg !== null) {
message.error(msg)
return
message.error(msg);
return;
}
const list: any = []
const list: any = [];
processItems.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,
}
};
dialog.info({
title: '确认提示',
content: '确认给该任务审批为【通过】吗?',
positiveText: '确定',
negativeText: '取消',
title: "确认提示",
content: "确认给该任务审批为【通过】吗?",
positiveText: "确定",
negativeText: "取消",
onPositiveClick: () => {
doAudit(param)
doAudit(param);
},
onNegativeClick: () => {},
})
});
}
function rejectHandler(items?: any) {
@ -190,114 +188,116 @@ function doAudit(param: any) {
setBatch(false)
reloadList(param, '通过')
}
else { message.error(res.message) }
})
});
}
function showModal(modalRef: any) {
const modal = unref(modalRef)! as any
modal.showModal()
const modal = unref(modalRef)! as any;
modal.showModal();
}
function forwardHandler() {
taskStore.forward()
taskStore.forward();
}
function backHandler() {
taskStore.back()
taskStore.back();
}
async function handleDragEnd(event, item) {
//
const flag = taskStore.getInFile
const flag = taskStore.getInFile;
if (flag) {
const res = await dubiousfileyd({ pictureid: item.pictureid })
if (res.code === 'OK') {
message.success('加入成功')
getTableData()
}
else {
message.error(res.message)
const res = await dubiousfileyd({ pictureid: item.pictureid });
if (res.code === "OK") {
message.success("加入成功");
getTableData();
} else {
message.error(res.message);
}
taskStore.setInFile(false)
taskStore.setInFile(false);
}
}
async function getTableData() {
const useInfo = userStore.getUserInfo
const listData = []
const reviewType = 3 //
let res = await getAllfieldList(reviewType)
const fieldList = (res as any)?.data
res = await getfieldList(reviewType, useInfo.id)
const userFieldList = (res as any)?.data.userFieldFixed
const useInfo = userStore.getUserInfo;
const listData = [];
const reviewType = 3; //
let res = await getAllfieldList(reviewType);
const fieldList = (res as any)?.data;
res = await getfieldList(reviewType, useInfo.id);
const userFieldList = (res as any)?.data.userFieldFixed;
const blueList = [
"拜访终端名称",
"定位信息",
"拜访日期",
"定位距离",
"拜访小结",
"拜访项目类别",
];
fieldList.map((v) => {
if (userFieldList.includes(v.name)) {
const item = {
label: v.fieldDesc,
value: taskDetailInfo.value.ocrPicture[v.name],
key: v.name,
}
listData.push(item)
blue: blueList.includes(v.fieldDesc),
};
listData.push(item);
}
})
taskTableData.value = chunk(listData, 2)
});
taskTableData.value = chunk(listData, 2);
}
async function getImgList() {
if (!isEmpty(taskDetailInfo.value.ocrPicture.id)) {
const { data, total } = await getSimilarityList(
{
...taskpagination,
...sortBy,
pictureId: taskDetailInfo.value.ocrPicture.id,
},
)
taskDetailPictureList.value = data
totalCount.value = total
}
else {
taskDetailPictureList.value.length = 0
totalCount.value = 0
const { data, total } = await getSimilarityList({
...taskpagination,
...sortBy,
pictureId: taskDetailInfo.value.ocrPicture.id,
});
taskDetailPictureList.value = data;
totalCount.value = total;
} else {
taskDetailPictureList.value.length = 0;
totalCount.value = 0;
}
}
function overTaskHandle() {
const item = taskDetailInfo.value
const item = taskDetailInfo.value;
if (item?.userapprove?.statshis === 2 || item?.userapprove?.statshis == 3) {
overTask.value = null
return
overTask.value = null;
return;
}
if (validate([item]) == null && batch.value === false)
overTask.value = item
if (validate([item]) == null && batch.value === false) overTask.value = item;
}
function leaveTaskHandler() {
overTask.value = null
overTask.value = null;
}
function showActionsModal() {
const modal = unref(CustomSettingModalRef)! as any
modal.showModal()
const modal = unref(CustomSettingModalRef)! as any;
modal.showModal();
}
onUnmounted(() => {
taskStore.reset()
window.removeEventListener('keydown', handleKeydown)
})
taskStore.reset();
window.removeEventListener("keydown", handleKeydown);
});
function immersionHandler() {
taskStore.updateImmersion()
taskStore.updateImmersion();
}
function previewHandler(event: MouseEvent) {
event.stopImmediatePropagation()
event.stopPropagation()
event.stopImmediatePropagation();
event.stopPropagation();
if (imageRef.value && (imageRef.value as any).src)
(imageRef.value as any).mergedOnClick()
(imageRef.value as any).mergedOnClick();
}
watch(
@ -313,10 +313,10 @@ watch(
//
async function getDetail() {
taskDetailInfo.value = await getTaskDetailInfo(taskId.value, packageId.value)
setBatch(false)
getTableData()
getImgList()
taskDetailInfo.value = await getTaskDetailInfo(taskId.value, packageId.value);
setBatch(false);
getTableData();
getImgList();
}
function reloadList(param, text) {
@ -336,24 +336,11 @@ function reloadList(param, text) {
<div class="wrapper-header">
<div class="left">
<span class="font">任务ID{{ taskDetailInfo.fromtaskname }}</span>
<SvgIcon
size="22"
class="forward"
name="arrow-left"
@click="backHandler"
/>
<SvgIcon
size="22"
class="back"
name="arrow-right"
@click="forwardHandler"
/>
<SvgIcon size="22" class="forward" name="arrow-left" @click="backHandler" />
<SvgIcon size="22" class="back" name="arrow-right" @click="forwardHandler" />
</div>
<div class="right">
<div
v-show="!showActions"
style="display: flex; align-items: center"
>
<div v-show="!showActions" style="display: flex; align-items: center">
<div class="btn" @click="setBatch(true)">
<SvgIcon style="margin-right: 6px" size="22" name="batch" />
批量审批
@ -384,11 +371,7 @@ function reloadList(param, text) {
</ul>
</n-popover> -->
<div class="icon-wrap">
<SvgIcon
size="20"
name="immersion-model"
@click="immersionHandler"
/>
<SvgIcon size="20" name="immersion-model" @click="immersionHandler" />
</div>
</div>
<div v-show="showActions" class="batch">
@ -398,9 +381,19 @@ function reloadList(param, text) {
</template>
返回
</n-button>
<img class="btn-approval btn-left" src="@/assets/images/task/btn-not-pass.png" alt="" @click.stop="rejectHandler">
<img
class="btn-approval btn-left"
src="@/assets/images/task/btn-not-pass.png"
alt=""
@click.stop="rejectHandler"
/>
<SvgIcon size="24" name="vs" />
<img class="btn-approval" src="@/assets/images/task/btn-pass.png" alt="" @click.stop="approvalHandler">
<img
class="btn-approval"
src="@/assets/images/task/btn-pass.png"
alt=""
@click.stop="approvalHandler"
/>
</div>
</div>
</div>
@ -440,22 +433,24 @@ function reloadList(param, text) {
</div>
<div class="status">
<img v-show="taskDetailInfo?.userapprove?.statshis === 2" class="img-status" src="@/assets/images/task/pass.png" alt="">
<img v-show="taskDetailInfo?.userapprove?.statshis === 3" class="img-status" src="@/assets/images/task/not_pass.png" alt="">
<img
v-show="taskDetailInfo?.userapprove?.statshis === 2"
class="img-status"
src="@/assets/images/task/pass.png"
alt=""
/>
<img
v-show="taskDetailInfo?.userapprove?.statshis === 3"
class="img-status"
src="@/assets/images/task/not_pass.png"
alt=""
/>
</div>
<div class="mark">
<SvgIcon
v-show="taskDetailInfo?.iztrueorfalse === 0"
size="128"
name="jia"
/>
<SvgIcon v-show="taskDetailInfo?.iztrueorfalse === 0" size="128" name="jia" />
</div>
<div class="mark">
<SvgIcon
v-show="taskDetailInfo?.iztrueorfalse === 1"
size="128"
name="zhen"
/>
<SvgIcon v-show="taskDetailInfo?.iztrueorfalse === 1" size="128" name="zhen" />
</div>
<div class="big-mark" />
<div class="preview" @click="previewHandler">
@ -465,22 +460,26 @@ function reloadList(param, text) {
<n-grid x-gap="12" y-gap="10" :cols="12">
<n-gi span="4" class="gi1">
<span>
<img class="icon-status" src="@/assets/images/task/status.png" alt="">
<img class="icon-status" src="@/assets/images/task/status.png" alt="" />
</span>
</n-gi>
<n-gi span="8" class="gi2">
<span class="value">{{ TASK_STATUS_OBJ[taskDetailInfo?.userapprove?.statshis] }}</span>
<span class="value">{{
TASK_STATUS_OBJ[taskDetailInfo?.userapprove?.statshis]
}}</span>
<span class="label">审批状态</span>
</n-gi>
<n-gi span="4" class="gi1">
<span>
<img class="icon-status" src="@/assets/images/task/similarity.png" alt="">
<img
class="icon-status"
src="@/assets/images/task/similarity.png"
alt=""
/>
</span>
</n-gi>
<n-gi span="8" class="gi2">
<span class="value num">{{
totalCount
}}<span class="unit"></span> </span>
<span class="value num">{{ totalCount }}<span class="unit"></span> </span>
<span class="label">相似匹配</span>
</n-gi>
</n-grid>
@ -516,16 +515,16 @@ function reloadList(param, text) {
/>
</div>
<div class="list">
<div
v-for="(item) in taskDetailPictureList"
:key="item.id"
class="item"
>
<div v-for="item in taskDetailPictureList" :key="item.id" class="item">
<div
draggable="true"
class="img-wrapper"
:style="{ 'background-image': `url(${item.imgUrl})` }"
@dragend="(event) => { handleDragEnd(event, item) }"
@dragend="
(event) => {
handleDragEnd(event, item);
}
"
/>
<div class="small-mark" />
<div class="check">
@ -537,8 +536,18 @@ function reloadList(param, text) {
/>
</div>
<img v-if="item.historyStates === 2" class="tag-status" src="@/assets/images/task/tag-pass.png" alt="">
<img v-if="item.historyStates === 3" class="tag-status" src="@/assets/images/task/tag-not-pass.png" alt="">
<img
v-if="item.historyStates === 2"
class="tag-status"
src="@/assets/images/task/tag-pass.png"
alt=""
/>
<img
v-if="item.historyStates === 3"
class="tag-status"
src="@/assets/images/task/tag-not-pass.png"
alt=""
/>
<div class="time">
<div class="time-item">
<SvgIcon class="svg-time" color="#FFF" size="8" name="camera-time" />
@ -549,7 +558,10 @@ function reloadList(param, text) {
<span>{{ item.submitDateTimestamp ? formatToDateHMS(Number(item.submitDateTimestamp)) : '-' }}</span>
</div>
</div>
<div :class="{ 'percent-red': item.similarityScore === 100 }" class="percent">
<div
:class="{ 'percent-red': item.similarityScore === 100 }"
class="percent"
>
{{ item.similarityScore }}<span class="percent-unit">%</span>
</div>
</div>
@ -562,7 +574,11 @@ function reloadList(param, text) {
<n-tabs type="line" animated>
<n-tab-pane name="task-info" tab="任务信息">
<TaskTable :data="taskDetailInfo" :task-table-data="taskTableData" @show-modal="showActionsModal" />
<TaskTable
:data="taskDetailInfo"
:task-table-data="taskTableData"
@show-modal="showActionsModal"
/>
</n-tab-pane>
<n-tab-pane name="picture-info" tab="图片信息">
<PictureTable :data="taskDetailInfo" />
@ -577,7 +593,6 @@ function reloadList(param, text) {
@reject="rejectHandler"
@approval="approvalHandler"
/>
<CustomSettingModal ref="CustomSettingModalRef" :review-type="3" @on-ok="getTableData" />
</div>
</template>
@ -589,7 +604,7 @@ function reloadList(param, text) {
color: #666666;
}
::v-deep(.n-tabs-tab--active .n-tabs-tab__label) {
color: #507AFD;
color: #507afd;
font-size: 16px;
font-weight: 500;
}
@ -608,49 +623,48 @@ function reloadList(param, text) {
}
}
.icon-wrap{
.icon-wrap {
display: flex;
align-items: center;
justify-content: center;
width: 30px;
height: 30px;
background: rgba(80,122,253,.1);
background: rgba(80, 122, 253, 0.1);
border-radius: 8px;
margin-left: 10px;
cursor: pointer;
}
.img-info{
.icon-status{
.img-info {
.icon-status {
width: 32px;
height: 32px;
}
.label{
.label {
font-size: 11px;
font-family: PingFang SC, PingFang SC-Medium;
font-weight: 500;
color: #ffffff;
}
.value{
.value {
font-size: 15px;
font-family: PingFang SC, PingFang SC-Semibold;
font-weight: 600;
color: #ffffff;
}
.num{
.num {
font-size: 18px;
font-family: PingFang SC, PingFang SC-Semibold;
font-weight: 600;
color: #ffffff;
}
.unit{
.unit {
font-size: 11px;
}
}
.wrapper {
display: flex;
@ -713,13 +727,13 @@ function reloadList(param, text) {
display: flex;
align-items: center;
.btn-approval{
.btn-approval {
width: 68px;
height: 28px;
cursor: pointer;
}
.btn-left{
.btn-left {
margin-left: 16px;
}
}
@ -764,7 +778,12 @@ function reloadList(param, text) {
.big-mark{
width: 100%;
height: 151px;
background: linear-gradient(180deg,rgba(0,0,0,0.00) 0%, rgba(0,0,0,0.00) 29%, rgba(3,0,0,0.73));
background: linear-gradient(
180deg,
rgba(0, 0, 0, 0) 0%,
rgba(0, 0, 0, 0) 29%,
rgba(3, 0, 0, 0.73)
);
position: absolute;
left: 0;
bottom: 0;
@ -818,7 +837,7 @@ function reloadList(param, text) {
left: 16px;
bottom: 16px;
.time-item{
.time-item {
display: flex;
align-items: center;
font-size: 14px;
@ -828,12 +847,12 @@ function reloadList(param, text) {
margin-bottom: 4px;
}
.time-item2{
.time-item2 {
margin-bottom: 0;
}
.svg-time{
margin-right: 5px
.svg-time {
margin-right: 5px;
}
}
@ -849,20 +868,20 @@ function reloadList(param, text) {
justify-content: center;
}
.check{
.check {
position: absolute;
z-index: 3;
left: 2%;
top: 2%;
}
.status{
.status {
position: absolute;
z-index: 3;
left: 0;
top: 0;
.img-status{
.img-status {
width: 133px;
height: 129px;
}
@ -871,12 +890,12 @@ function reloadList(param, text) {
.right {
flex: 0.5;
background: #F6F9FD;
background: #f6f9fd;
border-radius: 8px;
margin-left: 20px;
padding: 24px;
.right-card{
.right-card {
padding: 3px;
}
@ -905,10 +924,14 @@ function reloadList(param, text) {
// overflow: hidden;
margin: 0px 16px 27px 0px;
.small-mark{
.small-mark {
width: 100%;
height: 36px;
background: linear-gradient(180deg,rgba(0,0,0,0.01), rgba(0,0,0,0.44) 88%);
background: linear-gradient(
180deg,
rgba(0, 0, 0, 0.01),
rgba(0, 0, 0, 0.44) 88%
);
border-radius: 0px 8px 8px 8px;
position: absolute;
left: 0;
@ -916,7 +939,7 @@ function reloadList(param, text) {
z-index: 0;
}
.tag-status{
.tag-status {
width: 46px;
height: 22px;
position: absolute;
@ -929,7 +952,7 @@ function reloadList(param, text) {
z-index: 3;
left: 3px;
bottom: 3px;
.time-item{
.time-item {
display: flex;
align-items: center;
font-size: 10px;
@ -940,12 +963,12 @@ function reloadList(param, text) {
line-height: 12px;
}
.time-item2{
.time-item2 {
margin-bottom: 0;
}
.svg-time{
margin-right: 5px
.svg-time {
margin-right: 5px;
}
}
@ -985,12 +1008,12 @@ function reloadList(param, text) {
font-size: 14px;
}
.percent-unit{
.percent-unit {
font-size: 8px;
margin-top: 4px
margin-top: 4px;
}
.percent-red{
.percent-red {
background: #ff4e4f;
}
}

@ -1,4 +1,6 @@
<script lang="ts" setup>
import { ref, watch } from "vue";
defineProps({
data: {
type: Object as PropType<any>,
@ -8,19 +10,17 @@ defineProps({
type: Array as any,
default: () => [[]],
},
})
const emit = defineEmits(['showModal'])
});
const emit = defineEmits(["showModal"]);
function showActionsModal() {
emit('showModal')
emit("showModal");
}
</script>
<template>
<div class="info-header">
<div class="left_box">
<div class="title">
填报信息
</div>
<div class="title">填报信息</div>
</div>
<div class="right_box" @click="showActionsModal">
自定义设置
@ -32,13 +32,13 @@ function showActionsModal() {
<th v-if="item && item[0]">
{{ item[0].label }}
</th>
<td v-if="item && item[0]" :class="item.blue ? 'blue' : ''">
<td v-if="item && item[0]" :class="item[0].blue ? 'blue' : ''">
{{ item[0].value }}
</td>
<th v-if="item && item.length > 1">
{{ item[1].label }}
</th>
<td v-if="item && item.length > 1" :class="item.blue ? 'blue' : ''">
<td v-if="item && item.length > 1" :class="item[1].blue ? 'blue' : ''">
{{ item[1].value }}
</td>
</tr>
@ -81,8 +81,8 @@ function showActionsModal() {
font-family: PingFang SC, PingFang SC-Regular;
color: #666666;
.icon{
margin-left: 7px
.icon {
margin-left: 7px;
}
}
}

@ -251,7 +251,10 @@ function removeHandler(id: string) {
let index = onList.value.findIndex((item) => {
return item.id === id;
});
if (index !== -1) onList.value.splice(index, 1);
if (index !== -1) {
onList.value.splice(index, 1);
onShowList.value.splice(index, 1);
}
index = offList.value.findIndex((v) => v.id == id);
offList.value[index].checked = false;

@ -1,101 +1,104 @@
<script lang="ts" setup>
import { reactive, ref, toRefs } from 'vue'
import { format } from 'date-fns'
import { NButton, NDataTable, useDialog, useMessage } from 'naive-ui'
import { aiApprovaltools, aiApprovaltoolsClearmark } from '@/api/work/work'
import { onMounted, reactive, ref, toRefs } from "vue";
import { format } from "date-fns";
import { NButton, NDataTable, useDialog, useMessage } from "naive-ui";
import { aiApprovaltools, aiApprovaltoolsClearmark } from "@/api/work/work";
import { getToolsCount } from "@/api/home/main";
const emit = defineEmits<{
(e: 'reject', params: any)
(e: 'notPass', params: any)
}>()
(e: "reject", params: any);
(e: "notPass", params: any);
}>();
const dialog = useDialog()
const dialog = useDialog();
const state: any = reactive({
detail: {},
taskId: '',
})
const { detail } = toRefs(state)
taskId: "",
});
const { detail } = toRefs(state);
const cardStyle = {
'width': '450px',
'--n-padding-bottom': '10px',
'--n-padding-left': '0px',
}
width: "450px",
"--n-padding-bottom": "10px",
"--n-padding-left": "0px",
};
const show = ref(false)
const show = ref(false);
function showModal(id) {
console.log(id)
state.taskId = id
getDetail(id)
console.log(id);
state.taskId = id;
getDetail(id);
}
async function getDetail(id) {
const res = await aiApprovaltools({ taskid: id })
if (res.code === 'OK') {
state.detail = res.data
show.value = true
const res = await aiApprovaltools({ taskid: id });
if (res.code === "OK") {
state.detail = res.data;
show.value = true;
}
console.log(res)
console.log(res);
}
async function clearMark() {
const res = await aiApprovaltoolsClearmark({ taskid: state.taskId })
if (res.code === 'OK')
closeModal()
const res = await aiApprovaltoolsClearmark({ taskid: state.taskId });
if (res.code === "OK") closeModal();
}
function closeModal() {
show.value = false
show.value = false;
}
async function reject() {
// emit('reject', { a: 'todo' })
// closeModal()
dialog.info({
title: '确认提示',
content: '确认设置成假吗?',
positiveText: '确定',
negativeText: '取消',
title: "确认提示",
content: "确认设置成假吗?",
positiveText: "确定",
negativeText: "取消",
onPositiveClick: async () => {
// TODO
// const result = await resetApproval()
clearMark()
clearMark();
},
onNegativeClick: () => {},
})
});
}
async function viewRepeat(e: MouseEvent) {
emit('notPass', {
emit("notPass", {
id: state.taskId,
detail: state.detail,
})
e.preventDefault()
closeModal()
});
e.preventDefault();
closeModal();
}
async function getShowStatus() {
const res = await getToolsCount();
if (!JSON.parse(res.message)) {
show.value = true;
}
}
onMounted(() => {
getShowStatus();
});
defineExpose({
showModal,
})
});
</script>
<template>
<n-modal v-model:show="show" transform-origin="center" class="modal_wrap">
<div class="wrapper">
<div class="closed">
<SvgIcon
style="cursor: pointer"
name="cut-down"
width="32"
@click="closeModal"
/>
<SvgIcon style="cursor: pointer" name="cut-down" width="32" @click="closeModal" />
</div>
<div class="wrapper-hearder">
<div class="wrapper-title">
智能AI审批工具
</div>
<div class="wrapper-title">智能AI审批工具</div>
<div class="wrapper-mark">
{{ detail.tenantusername }}
</div>
@ -105,25 +108,20 @@ defineExpose({
<div v-for="i in 1" :key="i" class="item">
<div class="imgwrapper" />
<div class="content">
<div class="task_id">
任务ID{{ detail.taskid }}
</div>
<div class="task_id">任务ID{{ detail.taskid }}</div>
<div class="tag_box">
<div class="tag_item">
基线任务
</div>
<div class="tag_item error">
相似图片({{ detail.similarcount }})
</div>
<div class="tag_item">基线任务</div>
<div class="tag_item error">相似图片({{ detail.similarcount }})</div>
</div>
<div class="time_box">
{{ format(detail.createtime, 'yyyy-MM-dd HH:mm:ss') }}
{{ format(detail.createtime, "yyyy-MM-dd HH:mm:ss") }}
</div>
</div>
</div>
</n-scrollbar>
<div class="mark_text">
智能识别{{ detail.similarComplete }}张图片来源于网络建议将图片标记为假 快速审批不通过
智能识别{{ detail.similarComplete }}张图片来源于网络建议将图片标记为假
快速审批不通过
</div>
<div class="footer">
<SvgIcon

Loading…
Cancel
Save