refactor: 完善过滤

bak
elseif 1 year ago
parent e803af9e6e
commit 11ddb58b3f

@ -335,3 +335,49 @@ export async function getBusinessList(field: string, page: PageParam = { pageNo:
}
})
}
/**
*
* @returns
*/
export async function getSystemList(code: string) {
const res = await http.request({
url: `/static/admin/web/distionary/bytypecode`,
method: 'get',
params: { code },
})
const { otherMessage: { records } } = res
return records.map((record) => {
return {
label: record.lable || 'todo',
value: record.value || 'todo',
}
})
}
/**
*
* @returns
*/
export async function getRelationTypeList() {
const res = await http.request({
url: `/static/admin/web/distionary/bytypecode/searchRelationType`,
method: 'get',
})
return res.data[0].distionaryList
}
/**
*
* @returns
*/
export async function getizstatusList() {
const res = await http.request({
url: `/static/admin/web/distionary/bytypecode/izstatus`,
method: 'get',
})
return res.data[0].distionaryList
}

@ -6,13 +6,14 @@ import type { FilterCondition, FilterParam, FilterSearchParam, FilterUpdate, Pag
* @param params
* @returns 1
*/
export async function getConditionList(params: PageParam, searchParam: FilterSearchParam): Promise<any> {
export async function getConditionList(page: PageParam, searchParam: FilterSearchParam, type: number): Promise<any> {
const res = await http.request({
url: `/ocr/ocrUsersearch/list?`,
method: 'get',
params: {
...params,
...page,
search_searchname: JSON.stringify(searchParam.search_searchname),
type,
},
})

@ -7,11 +7,11 @@ import { ContentTypeEnum } from '@/enums/httpEnum'
*
* @returns
*/
export async function getApprovalList(params: PageParam, assigneeId: string) {
export async function getApprovalList(page: PageParam, assigneeId: string) {
const res = await http.request({
url: `/flow/task/listdata`,
url: `/flow/task/listalldata`,
method: 'get',
params: { ...params, assigneeId },
params: { pageSize: page.pageSize, currPage: page.pageNo, assigneeId },
})
const { data: { list, totalPage } } = res

@ -1,6 +1,6 @@
import { defineStore } from 'pinia'
import { store } from '@/store'
import { getBackList, getBusinessList, getIzShowList, getPictureTypeList, getRegionList, getRejectList, getTFList } from '@/api/dictionary'
import { getBackList, getBusinessList, getIzShowList, getIztaskstatusList, getPictureTypeList, getRegionList, getRejectList, getRelationTypeList, getTFList, getizstatusList } from '@/api/dictionary'
export interface DictionaryState {
regionList: any
@ -22,6 +22,8 @@ export interface DictionaryState {
izvisitcityList: any
rejectList: any
backList: any
relationTypeList: any
izstatusList: any
}
export const useDictionaryStore = defineStore({
@ -46,6 +48,8 @@ export const useDictionaryStore = defineStore({
izvisitcityList: null,
rejectList: null,
backList: null,
relationTypeList: null,
izstatusList: null,
}),
getters: {
getRegionList: (state) => {
@ -200,16 +204,30 @@ export const useDictionaryStore = defineStore({
this.izvisitcityList = list
return this.izvisitcityList
},
// 拒绝原因
async fetchRejectList() {
const list = await getRejectList()
this.rejectList = generateOptions(list)
return this.rejectList
},
// 退回方式
async fetchBackList() {
const list = await getBackList()
this.backList = generateOptions(list)
return this.backList
},
// 退回方式
async fetchRelationTypeList() {
const list = await getRelationTypeList()
this.relationTypeList = generateOptions2(list, 'content', 'name')
return this.relationTypeList
},
// 审核状态
async fetchizstatusListt() {
const list = await getizstatusList()
this.izstatusList = generateOptions2(list, 'codeno', 'name')
return this.backList
},
},
})
@ -219,25 +237,25 @@ export function useDictionary() {
}
// label和value都是name,不用id
function generateOptions(list: any[], idkey: string = 'id', namekey: string = 'name') {
function generateOptions(list: any[], valueKey: string = 'id', labelKey: string = 'name') {
const items = list || []
return items.map((item) => {
return {
label: item[namekey] || 'todo',
value: item[namekey] || 'todo',
label: item[labelKey] || 'todo',
value: item[labelKey] || 'todo',
}
})
}
// label是name,value是id
function generateOptions2(list: any[], idkey: string = 'id', namekey: string = 'name') {
function generateOptions2(list: any[], valueKey: string = 'id', labelKey: string = 'name') {
const items = list || []
return items.map((item) => {
return {
label: item[namekey] || 'todo',
value: item[idkey] || 'todo',
label: item[labelKey] || 'todo',
value: item[valueKey] || 'todo',
}
})
}

@ -78,7 +78,7 @@ async function featchList() {
loading = true
try {
const searchParam: FilterSearchParam = { search_searchname: { value: keyword.value, op: 'like', type: 'string' } }
const result = await getConditionList(pagination, searchParam)
const result = await getConditionList(pagination, searchParam, 0)
const { data } = result
// pagination.pageNo += 1
// canloadMore = pageCount >= pagination.pageNo

@ -88,7 +88,7 @@ const keyword = ref('')
async function query(page: number, pageSize: number) {
const searchParam: FilterSearchParam = { search_searchname: { value: keyword.value, op: 'like', type: 'string' } }
const result = await getConditionList({ pageNo: page, pageSize }, searchParam)
const result = await getConditionList({ pageNo: page, pageSize }, searchParam, 0)
const { data, pageCount } = result
tableData.value = data
pagination.page = page

@ -1,6 +1,6 @@
<script lang="ts" setup>
import type { FormInst, FormItemRule, FormRules } from 'naive-ui'
import { computed, defineOptions, reactive, ref, unref, watch } from 'vue'
import { computed, defineOptions, onBeforeMount, reactive, ref, unref, watch } from 'vue'
import { asideMap } from '@/config/aside'
import { useDictionary } from '@/store/modules/dictonary'
import { useConfig } from '@/store/modules/asideConfig'
@ -99,20 +99,21 @@ function handleSumbit(e: MouseEvent) {
if (errors)
return
const list = formValue.conditions.map((item) => {
const list = formValue.conditions.map((item, index) => {
const { type, operator, result } = item
return {
searchfield: type!,
searchtype: operator!,
searchvalue: result!,
searchRelationType: formValue.logic!,
orderNum: index + 1,
}
})
const param: FilterCondition = {
searchname: formValue.name!,
ocrUsersearchchildList: list,
logic: formValue.logic!,
}
if (currentStatus.value === 'new')
@ -152,16 +153,7 @@ const operatorOptions = [
},
]
const logicOptions = [
{
label: '与',
value: 'and',
},
{
label: '或',
value: 'or',
},
]
const logicOptions = ref([])
const similarityOptions = [
{
@ -178,6 +170,14 @@ const similarityOptions = [
},
]
onBeforeMount(() => {
dicStore.fetchRelationTypeList()
})
watch(() => dicStore.relationTypeList, (newval) => {
logicOptions.value = newval
})
const resultOptions = ref<Option[]>([])
function showModal() {

@ -4,23 +4,17 @@ import imagesloaded from 'imagesloaded'
import { debounce } from 'lodash-es'
import Masonry from 'masonry-layout'
import { useMessage } from 'naive-ui'
import { computed, nextTick, onBeforeMount, onMounted, onUnmounted, onUpdated, reactive, ref, unref, watch } from 'vue'
import { computed, nextTick, onMounted, onUnmounted, onUpdated, reactive, ref, unref, watch } from 'vue'
import GeneratePackageModal from './modal/GeneratePackageModal.vue'
import PackageSettingsModal from './modal/PackageSettingsModal.vue'
import LoginSuccessModal from './modal/LoginSuccessModal.vue'
import { getPictureList, oneClickCheck } from '@/api/home/main'
import img1 from '@/assets/images/1.jpg'
import img2 from '@/assets/images/2.jpg'
import img3 from '@/assets/images/3.jpg'
import img4 from '@/assets/images/4.jpg'
import img5 from '@/assets/images/5.jpg'
import avatar from '@/assets/images/avatar.jpg'
import { timeOptions, viewOptions } from '@/config/home'
import { useWindowSizeFn } from '@/hooks/event/useWindowSizeFn'
import { useConfig } from '@/store/modules/asideConfig'
import { getViewportOffset } from '@/utils/domUtils'
import { hideDownload } from '@/utils/image'
import { randomInt } from '@/utils/index'
import emitter from '@/utils/mitt'
import { getImgUrl } from '@/utils/urlUtils'
@ -32,7 +26,7 @@ const el = ref<HTMLDivElement | null>(null)
const viewMode = ref('masonry')
const pagination = reactive({
pageNo: 0,
pageSize: 30,
pageSize: 50,
})
const configStore = useConfig()
const packageModalRef = ref(null)
@ -73,17 +67,13 @@ const layout = debounce(() => {
_imagesload = imagesloaded('.grid-item')
// _imagesload.on('always', (instance) => {
// console.log('always')
// })
_imagesload.on('done', (instance) => {
(_masonry as any).layout()
if (!el.value)
return
const scrollHeight = el.value!.scrollHeight
const clientHeight = el.value!.clientHeight
const top = scrollHeight - clientHeight - 20
const top = scrollHeight - clientHeight - 100
el.value!.scrollTo({ top, behavior: 'instant' })
loading.value = false
})
@ -136,19 +126,6 @@ const viewLabel = computed(() => {
const listData = ref<any[]>([])
const urls = [
img1,
img2,
img3,
img4,
img5,
]
function randomUrl() {
const index = randomInt(0, urls.length)
return urls[index]
}
async function featchList() {
loading.value = true
try {
@ -159,9 +136,6 @@ async function featchList() {
pagination.pageNo += 1
const result = await getPictureList({ ...pagination, ...contentParams })
// TODO
// result.data = Array.from({ length: 30 })
// result.pageCount = 1
const { data, pageCount } = result
canloadMore = pageCount >= pagination.pageNo && pageCount > 0
@ -190,11 +164,6 @@ async function loadMore() {
listData.value.push(...more)
}
// onBeforeMount(async () => {
// const list = await featchList()
// listData.value = list
// })
const gridHeight = computed(() => {
return viewMode.value !== 'masonry' ? '145px' : ''
})
@ -255,7 +224,7 @@ watch(() => configStore.asideValue, (newVal, oldVal) => {
async function refreshHandler() {
pagination.pageNo = 0
pagination.pageSize = 30
pagination.pageSize = 50
listData.value.length = 0
loading.value = true
canloadMore = true
@ -290,30 +259,30 @@ function getAvatar(url: string): string {
<template>
<div class="wrapper">
<div class="wrapper-header">
<div class="wrapper-header-left">
<div class="left">
<SvgIcon size="32" name="magnifying" />
<span class="wrapper-header-font">AI一键查重</span>
<span class="font">AI一键查重</span>
</div>
<SvgIcon style="cursor: pointer;" size="105" name="yijianchachong" @click="oneCheck" />
</div>
<div class="wrapper-content">
<div class="wrapper-content-form">
<div class="form">
<n-popselect v-model:value="timeRange" :options="timeOptions" trigger="click">
<div class="wrapper-content-dropdown">
<div class="dropdown">
<span>{{ timeLabel || '请选择' }}</span>
<SvgIcon class="wrapper-content-dropdown-gap" name="arrow-botton" size="14" />
<SvgIcon class="gap" name="arrow-botton" size="14" />
</div>
</n-popselect>
<n-popselect v-model:value="viewMode" :options="viewOptions" trigger="click">
<div class="wrapper-content-dropdown">
<div class="dropdown">
<span>{{ viewLabel || '请选择' }}</span>
<SvgIcon class="wrapper-content-dropdown-gap" name="arrow-botton" size="14" />
<SvgIcon class="gap" name="arrow-botton" size="14" />
</div>
</n-popselect>
</div>
<div ref="el" class="scroll" :style="listStyle">
<!-- <n-scrollbar :on-scroll="scrollHandler"> -->
<n-spin :show="loading">
<n-spin :show="loading">
<div ref="el" class="scroll" :style="listStyle">
<!-- <n-scrollbar :on-scroll="scrollHandler"> -->
<div ref="masonryRef" class="grid">
<div v-for="(item, index) in listData" :key="index" :style="{ height: gridHeight }" class="grid-item">
<!-- <div :style="{ 'background-color': randomColor(0.2) }" class="wrapper-content-item-img" /> -->
@ -321,22 +290,25 @@ function getAvatar(url: string): string {
class="wrapper-content-item-img" :class="{ 'wrapper-content-item-img-fit': viewMode !== 'masonry' }"
:src="item.imgUrl"
> -->
<n-image class="wrapper-content-item-img" :img-props="{ onClick: hideDownload }" :class="{ 'wrapper-content-item-img-fit': viewMode !== 'masonry' }" :src="item.imgUrl" />
<div class="wrapper-content-item-info">
<div class="wrapper-content-item-info-left">
<n-avatar :src="getAvatar(item.uphead)" class="wrapper-content-item-info-avatar" round />
<n-image
class="img" :img-props="{ onClick: hideDownload }"
:class="{ 'img-fit': viewMode !== 'masonry' }" :src="item.imgUrl"
/>
<div class="info">
<div class="left">
<n-avatar :src="getAvatar(item.uphead)" class="avatar" round />
<span>{{ item.upname }}</span>
</div>
<div class="wrapper-content-item-info-right">
<div class="right">
<span :style="{ marginRight: '5px' }">分类</span>
<span>{{ item.ocrPictureclass?.classname }}</span>
</div>
</div>
</div>
</div>
</n-spin>
<!-- </n-scrollbar> -->
</div>
<!-- </n-scrollbar> -->
</div>
</n-spin>
</div>
<PackageSettingsModal ref="packageModalRef" @commit="commitHandler" />
<GeneratePackageModal ref="generateModalRef" />
@ -365,12 +337,12 @@ function getAvatar(url: string): string {
border-radius: 3px;
width: 100%;
&-left {
.left {
display: flex;
align-items: center;
}
&-font {
.font {
font-size: 18px;
font-weight: bold;
color: #333333;
@ -387,55 +359,53 @@ function getAvatar(url: string): string {
border-radius: 3px;
border: 1px solid rgb(239, 239, 245);
&-form {
.form {
display: flex;
align-items: center;
font-size: 14px;
padding-bottom: 16px;
}
&-item {
&-img {
border-radius: 7px;
display: block;
height: calc(100% - 20px);
}
.img {
border-radius: 7px;
display: block;
height: calc(100% - 25px);
}
.img-fit {
width: 100%;
overflow: hidden;
}
.info {
display: flex;
justify-content: space-between;
margin-top: 4px;
&-img-fit {
width: 100%;
object-fit: cover;
.left {
display: flex;
align-items: center;
}
&-info {
.right {
display: flex;
justify-content: space-between;
margin-top: 4px;
&-left {
display: flex;
align-items: center;
}
&-right {
display: flex;
align-items: center;
}
&-avatar {
width: 15px;
height: 15px;
margin-right: 5px;
}
align-items: center;
}
.avatar {
width: 15px;
height: 15px;
margin-right: 5px;
}
}
&-dropdown {
.dropdown {
display: flex;
flex-direction: row;
align-items: center;
margin-right: 24px;
&-gap {
.gap {
margin-left: 5px;
}
}
@ -443,7 +413,8 @@ function getAvatar(url: string): string {
.grid-item {
width: 182px;
border-radius: 7px;
margin-bottom: 20px;
margin-bottom: 10px;
overflow: hidden;
}
.scroll {

@ -35,9 +35,9 @@ const show = ref(false)
const flag = ref(true)
const formInline: FormState = reactive({
enterprisecode: '三方系统标识8',
username: '13311111111',
password: '12345678l',
enterprisecode: '演示公司',
username: 'yanshi01',
password: '123456',
})
const formSms: FormSms = reactive({

@ -205,6 +205,8 @@ async function handleSelect(item: any) {
const { data, total } = await getTaskDetailPictureList(workStore.activeId, taskId, { ...taskpagination, ...sortBy })
taskDetailPictureList.value = data
totalCount.value = total
debugger
}
async function sortHandler(orderby: 'pictureResult' | 'fromuptime') {

1
types/api.d.ts vendored

@ -25,7 +25,6 @@ export interface ConditionEntry {
export interface FilterCondition {
searchname: string
ocrUsersearchchildList: ConditionEntry[]
logic: string
}
export interface FilterUpdate extends FilterCondition {

Loading…
Cancel
Save