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 * @param params
* @returns 1 * @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({ const res = await http.request({
url: `/ocr/ocrUsersearch/list?`, url: `/ocr/ocrUsersearch/list?`,
method: 'get', method: 'get',
params: { params: {
...params, ...page,
search_searchname: JSON.stringify(searchParam.search_searchname), search_searchname: JSON.stringify(searchParam.search_searchname),
type,
}, },
}) })

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

@ -1,6 +1,6 @@
import { defineStore } from 'pinia' import { defineStore } from 'pinia'
import { store } from '@/store' 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 { export interface DictionaryState {
regionList: any regionList: any
@ -22,6 +22,8 @@ export interface DictionaryState {
izvisitcityList: any izvisitcityList: any
rejectList: any rejectList: any
backList: any backList: any
relationTypeList: any
izstatusList: any
} }
export const useDictionaryStore = defineStore({ export const useDictionaryStore = defineStore({
@ -46,6 +48,8 @@ export const useDictionaryStore = defineStore({
izvisitcityList: null, izvisitcityList: null,
rejectList: null, rejectList: null,
backList: null, backList: null,
relationTypeList: null,
izstatusList: null,
}), }),
getters: { getters: {
getRegionList: (state) => { getRegionList: (state) => {
@ -200,16 +204,30 @@ export const useDictionaryStore = defineStore({
this.izvisitcityList = list this.izvisitcityList = list
return this.izvisitcityList return this.izvisitcityList
}, },
// 拒绝原因
async fetchRejectList() { async fetchRejectList() {
const list = await getRejectList() const list = await getRejectList()
this.rejectList = generateOptions(list) this.rejectList = generateOptions(list)
return this.rejectList return this.rejectList
}, },
// 退回方式
async fetchBackList() { async fetchBackList() {
const list = await getBackList() const list = await getBackList()
this.backList = generateOptions(list) this.backList = generateOptions(list)
return this.backList 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 // 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 || [] const items = list || []
return items.map((item) => { return items.map((item) => {
return { return {
label: item[namekey] || 'todo', label: item[labelKey] || 'todo',
value: item[namekey] || 'todo', value: item[labelKey] || 'todo',
} }
}) })
} }
// label是name,value是id // 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 || [] const items = list || []
return items.map((item) => { return items.map((item) => {
return { return {
label: item[namekey] || 'todo', label: item[labelKey] || 'todo',
value: item[idkey] || 'todo', value: item[valueKey] || 'todo',
} }
}) })
} }

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

@ -88,7 +88,7 @@ const keyword = ref('')
async function query(page: number, pageSize: number) { async function query(page: number, pageSize: number) {
const searchParam: FilterSearchParam = { search_searchname: { value: keyword.value, op: 'like', type: 'string' } } 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 const { data, pageCount } = result
tableData.value = data tableData.value = data
pagination.page = page pagination.page = page

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

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

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

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

1
types/api.d.ts vendored

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

Loading…
Cancel
Save