diff --git a/.env.production b/.env.production index cdc2b60..f6e8e63 100644 --- a/.env.production +++ b/.env.production @@ -17,7 +17,7 @@ VITE_GLOB_API_URL = VITE_GLOB_UPLOAD_URL= # 图片前缀地址 -VITE_GLOB_IMG_URL="http://47.103.213.109:8311/jeecg-boot" +VITE_GLOB_IMG_URL="http://47.93.59.251:8311/jeecg-boot" # 接口前缀 VITE_GLOB_API_URL_PREFIX = /api diff --git a/src/api/dictionary/index.ts b/src/api/dictionary/index.ts index 247cf59..9d7c2f6 100644 --- a/src/api/dictionary/index.ts +++ b/src/api/dictionary/index.ts @@ -287,3 +287,31 @@ export async function getIzvisitcityList() { const { data } = res return data } + +/** + * 获取审批不通过原因 + * @returns + */ +export async function getRejectList() { + const res = await http.request({ + url: `/static/admin/web/distionary/bytypecode/TASKREJECT`, + method: 'get', + }) + + const list = res.data[0].distionaryList + return list +} + +/** + * 审批回退方式 + * @returns + */ +export async function getBackList() { + const res = await http.request({ + url: `/static/admin/web/distionary/bytypecode/ACTIONTYPE`, + method: 'get', + }) + + const list = res.data[0].distionaryList + return list +} diff --git a/src/api/home/main.ts b/src/api/home/main.ts index bf9b85e..5ef20a6 100644 --- a/src/api/home/main.ts +++ b/src/api/home/main.ts @@ -106,7 +106,7 @@ export async function getPictureList(params: any): Promise { notEmptyParams[key] = `${start}-${end}` } - if (Array.isArray(val)) + if (Array.isArray(notEmptyParams[key])) notEmptyParams[key] = val.join(',') }) diff --git a/src/api/task/task.ts b/src/api/task/task.ts index afe9a23..a0056b0 100644 --- a/src/api/task/task.ts +++ b/src/api/task/task.ts @@ -1,5 +1,6 @@ import { http } from '@/utils/http/axios' import type { ApprovalParam, PageParam } from '/#/api' +import { ContentTypeEnum } from '@/enums/httpEnum' /** * 获取审核列表 @@ -23,10 +24,11 @@ export async function getApprovalList(params: PageParam, assigneeId: string) { * 审核 * @param param */ -export async function approval(params: ApprovalParam) { +export async function audit(params: ApprovalParam) { return http.request({ - url: `/flow/task/completeFlow`, + url: `/flow/task/completeBatchFlow`, method: 'post', params, + headers: { 'Content-Type': ContentTypeEnum.FORM_DATA }, }) } diff --git a/src/api/work/work.ts b/src/api/work/work.ts index c75ffef..b9741c7 100644 --- a/src/api/work/work.ts +++ b/src/api/work/work.ts @@ -71,10 +71,14 @@ export async function getTaskDetailPictureList(packageid: string, taskchildpictu const { data: { records, pages, total } } = res + debugger + // 精简一下数据 const list = records.map((item) => { return { id: item.id, + taskid: item.taskId, + taskname: item.fromtaskname, pictureid: item.pictureid, imgurl: item.ocrPicture.imgurl, iztrueorfalse: item.iztrueorfalse, diff --git a/src/assets/icons/r6.svg b/src/assets/icons/r6.svg new file mode 100644 index 0000000..447e817 --- /dev/null +++ b/src/assets/icons/r6.svg @@ -0,0 +1,45 @@ + + + 合格 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/icons/r7.svg b/src/assets/icons/r7.svg new file mode 100644 index 0000000..d462afd --- /dev/null +++ b/src/assets/icons/r7.svg @@ -0,0 +1,52 @@ + + + 不合格 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/icons/robot2.svg b/src/assets/icons/robot2.svg new file mode 100644 index 0000000..639b7b6 --- /dev/null +++ b/src/assets/icons/robot2.svg @@ -0,0 +1,11 @@ + + + 查询 2 + + + + + + + + \ No newline at end of file diff --git a/src/assets/icons/time.svg b/src/assets/icons/time.svg new file mode 100644 index 0000000..23aea31 --- /dev/null +++ b/src/assets/icons/time.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/config/aside.ts b/src/config/aside.ts index 8c92e44..96d5bc2 100644 --- a/src/config/aside.ts +++ b/src/config/aside.ts @@ -1,11 +1,12 @@ import type { Component } from 'vue' -import { IzCustomlevel, IzCustomname, IzCustomtype, IzProductVue, IzProjectVue, IzProjecttype, IzShowVue, IzfirmVue, IztaskrromVue, IztaskstatusVue, IzvisitproVue, PictureDownloadVue, PictureTypeVue, PictureUploadVue, PlaceHolderVue, PlanVue, ReportUserVue, SimilarityVue, TimeVue } from '@/views/home/aside/comp/items' +import { IzCustomlevel, IzCustomname, IzCustomtype, IzProductVue, IzProjectVue, IzProjecttype, IzShowVue, IzVisitcity, IzfirmVue, IztaskrromVue, IztaskstatusVue, IzvisitproVue, PictureDownloadVue, PictureTypeVue, PictureUploadVue, PlaceHolderVue, PlanVue, ReportUserVue, SimilarityVue, TimeVue } from '@/views/home/aside/comp/items' export interface AsideEntity { label: string defaultValue?: any - isDefaultFilter?: boolean - inFilterList?: boolean + isDefaultFilter?: boolean// 是否为默认显示选项(不能隐藏) + inFilterList?: boolean// 是否出现在过滤配置选项中 + render?: boolean// 是否作为单独组件渲染 key: string component: Component } @@ -41,16 +42,16 @@ export const asideMap: Recordable = { key: 'izplan', component: PlanVue, }, - izsimilarity: { - label: '相似度阈值', - defaultValue: [30, 95], - isDefaultFilter: true, - key: 'izsimilarity', - component: SimilarityVue, - }, + // izsimilarity: { + // label: '相似度阈值', + // defaultValue: [0,100], + // isDefaultFilter: false, + // key: 'izsimilarity', + // component: SimilarityVue, + // }, izyear: { label: '年份', - defaultValue: [1704038400000, Date.now()], + defaultValue: null, isDefaultFilter: false, key: 'izyear', component: TimeVue, @@ -123,7 +124,7 @@ export const asideMap: Recordable = { defaultValue: null, isDefaultFilter: false, key: 'izvisitcity', - component: PlaceHolderVue, + component: IzVisitcity, }, izfirm: { label: '厂商', @@ -140,20 +141,22 @@ export const asideMap: Recordable = { component: IzProductVue, }, izdesc: { - label: 'izdesc', + label: '添加备注', defaultValue: null, isDefaultFilter: false, key: 'izdesc', component: PlaceHolderVue, inFilterList: false, + render: false, }, izsearchmanager: { - label: 'izsearchmanager', + label: '自定义筛选', defaultValue: null, isDefaultFilter: false, key: 'izsearchmanager', component: PlaceHolderVue, inFilterList: false, + render: false, }, izshow: { label: '分类', @@ -163,11 +166,12 @@ export const asideMap: Recordable = { component: IzShowVue, }, izsearch: { - label: 'izsearch', + label: '自定义过滤', defaultValue: null, isDefaultFilter: false, key: 'izsearch', component: PlaceHolderVue, inFilterList: false, + render: false, }, } diff --git a/src/store/modules/dictonary.ts b/src/store/modules/dictonary.ts index a3dce8a..391ec58 100644 --- a/src/store/modules/dictonary.ts +++ b/src/store/modules/dictonary.ts @@ -1,6 +1,6 @@ import { defineStore } from 'pinia' import { store } from '@/store' -import { getIzCustomtypeList, getIzProjectList, getIzShowList, getIzcustomlevel, getIzfirmList, getIzproductnameList, getIzprojecttypeList, getIztaskrromList, getIztaskstatusList, getIzvisitcityList, getIzvisitproList, getPersonList, getPictureTypeList, getPlanList, getRegionList, getTFList, getizcustomnameList } from '@/api/dictionary' +import { getBackList, getIzCustomtypeList, getIzProjectList, getIzShowList, getIzcustomlevel, getIzfirmList, getIzproductnameList, getIzprojecttypeList, getIztaskrromList, getIztaskstatusList, getIzvisitcityList, getIzvisitproList, getPersonList, getPictureTypeList, getPlanList, getRegionList, getRejectList, getTFList, getizcustomnameList } from '@/api/dictionary' export interface DictionaryState { regionList: any @@ -20,6 +20,8 @@ export interface DictionaryState { izcustomlevelList: any izizprojecttypeList: any izvisitcityList: any + rejectList: any + backList: any } export const useDictionaryStore = defineStore({ @@ -42,6 +44,8 @@ export const useDictionaryStore = defineStore({ izcustomlevelList: null, izizprojecttypeList: null, izvisitcityList: null, + rejectList: null, + backList: null, }), getters: { getRegionList: (state) => { @@ -185,6 +189,16 @@ export const useDictionaryStore = defineStore({ this.izvisitcityList = generateOptions(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 + }, }, }) diff --git a/src/utils/http/axios/index.ts b/src/utils/http/axios/index.ts index 1b31177..ec8d162 100644 --- a/src/utils/http/axios/index.ts +++ b/src/utils/http/axios/index.ts @@ -297,7 +297,7 @@ function createAxios(opt?: Partial) { return new VAxios( deepMerge( { - timeout: 10 * 1000, + timeout: 30 * 1000, authenticationScheme: '', // 接口前缀 prefixUrl: urlPrefix, diff --git a/src/views/final/aside/Aside.vue b/src/views/final/aside/Aside.vue index a474b92..d4efaf5 100644 --- a/src/views/final/aside/Aside.vue +++ b/src/views/final/aside/Aside.vue @@ -103,6 +103,13 @@ configStore.$subscribe(() => { showItems.value = items }) +watch(asideVisible, (newVal) => { + Object.keys(asideValue).forEach((key) => { + if (newVal[key] === false) + asideValue[key] = asideMap[key].defaultValue + }) +}) + const asideEnter = ref(false) const showCollapse = computed(() => { @@ -168,8 +175,8 @@ watch(asideValue, (newVal) => { diff --git a/src/views/home/aside/Aside.vue b/src/views/home/aside/Aside.vue index 055afd9..9eac2a6 100644 --- a/src/views/home/aside/Aside.vue +++ b/src/views/home/aside/Aside.vue @@ -93,9 +93,9 @@ configStore.$subscribe(() => { }) const items = showKeys.reduce((acc, key) => { - const { inFilterList } = asideMap[key] + const { render } = asideMap[key] - if (inFilterList !== false) { + if (render !== false) { const str = key.toLowerCase() const o = { diff --git a/src/views/home/aside/comp/CollapseItem.vue b/src/views/home/aside/comp/CollapseItem.vue index 1af2876..4c31b33 100644 --- a/src/views/home/aside/comp/CollapseItem.vue +++ b/src/views/home/aside/comp/CollapseItem.vue @@ -77,13 +77,13 @@ function isChecked(key: string) { const optionData = ref([]) -watch(optionData, () => { - const data = unref(optionData) - const firstOptionKey = data.length > 0 ? data[0].key : null +// watch(optionData, () => { +// const data = unref(optionData) +// const firstOptionKey = data.length > 0 ? data[0].key : null - if (firstOptionKey) - checkedKeys.push(firstOptionKey) -}) +// if (firstOptionKey) +// checkedKeys.push(firstOptionKey) +// }) const getProps = computed(() => { return { ...props } diff --git a/src/views/home/aside/comp/items/PictureType.vue b/src/views/home/aside/comp/items/PictureType.vue index 750f38f..1a0bf11 100644 --- a/src/views/home/aside/comp/items/PictureType.vue +++ b/src/views/home/aside/comp/items/PictureType.vue @@ -13,7 +13,6 @@ const emit = defineEmits<{ }>() const checkedKeys = ref(props.value) - const configStore = useDictionary() function onChange(value: string[]) { diff --git a/src/views/home/aside/comp/items/Time.vue b/src/views/home/aside/comp/items/Time.vue index dfb3943..dfeb014 100644 --- a/src/views/home/aside/comp/items/Time.vue +++ b/src/views/home/aside/comp/items/Time.vue @@ -2,7 +2,7 @@ import { ref } from 'vue' const props = defineProps<{ - value: [number, number] + value: [number, number] | null label: string }>() @@ -10,7 +10,7 @@ const emit = defineEmits<{ (e: 'update:value', value: number[]): void }>() -const time = ref<[number, number]>(props.value) +const time = ref<[number, number] | null>(props.value) function onChange(value: [number, number]) { emit('update:value', value) diff --git a/src/views/home/aside/comp/modals/CustomFilterModal.vue b/src/views/home/aside/comp/modals/CustomFilterModal.vue index c42dc89..5c6c6a0 100644 --- a/src/views/home/aside/comp/modals/CustomFilterModal.vue +++ b/src/views/home/aside/comp/modals/CustomFilterModal.vue @@ -97,7 +97,6 @@ function generatList(config, customConfig) { }, []) const fixedList = generateDefaultList(config) - offList.unshift(...fixedList) return { showList: onList, hideList: offList } } diff --git a/src/views/home/content/Content.vue b/src/views/home/content/Content.vue index 0028e4c..8740551 100644 --- a/src/views/home/content/Content.vue +++ b/src/views/home/content/Content.vue @@ -6,6 +6,7 @@ import { debounce } from 'lodash-es' import imagesloaded from 'imagesloaded' import { useMessage } from 'naive-ui' import PackageSettingsModal from './modal/PackageSettingsModal.vue' +import GeneratePackageModal from './modal/GeneratePackageModal.vue' import { timeOptions, viewOptions } from '@/config/home' import { useWindowSizeFn } from '@/hooks/event/useWindowSizeFn' import { getViewportOffset } from '@/utils/domUtils' @@ -32,6 +33,7 @@ const pagination = reactive({ }) const configStore = useConfig() const packageModalRef = ref(null) +const generateModalRef = ref(null) const loading = ref(false) const message = useMessage() @@ -67,9 +69,9 @@ const layout = debounce(() => { _imagesload = imagesloaded('.grid-item') - _imagesload.on('always', (instance) => { - console.log('always') - }) + // _imagesload.on('always', (instance) => { + // console.log('always') + // }) _imagesload.on('done', (instance) => { (_masonry as any).layout() @@ -206,8 +208,17 @@ async function commitHandler(settingParam) { const finalParam = { ...contentParams, ...asideVal } finalParam.buessinessno = settingParam.packagename finalParam.search_history = settingParam.comparehistory ? 1 : 0 + // TODO:添加重复标识参数 - oneClickCheck(finalParam) + + const modal = generateModalRef.value as any + modal.showModal() + + oneClickCheck(finalParam).then(() => { + modal.closeModal() + }, () => { + modal.closeModal() + }) } onMounted(() => { @@ -310,6 +321,7 @@ async function refreshHandler() { + diff --git a/src/views/home/content/modal/GeneratePackageModal.vue b/src/views/home/content/modal/GeneratePackageModal.vue new file mode 100644 index 0000000..5a3b277 --- /dev/null +++ b/src/views/home/content/modal/GeneratePackageModal.vue @@ -0,0 +1,50 @@ + + + + + diff --git a/src/views/home/content/modal/PackageSettingsModal.vue b/src/views/home/content/modal/PackageSettingsModal.vue index 6306e08..31e6c15 100644 --- a/src/views/home/content/modal/PackageSettingsModal.vue +++ b/src/views/home/content/modal/PackageSettingsModal.vue @@ -63,10 +63,16 @@ const formItemStyle = { '--n-label-height': '0px', '--n-feedback-height': '8px', } + +function afterLeave() { + model.value.packagename = '' + model.value.comparehistory = false + model.value.mark = false +} @@ -308,10 +402,73 @@ onUnmounted(() => { .left { flex: 0.6; + background-size: cover; + background-position: center; + background-repeat: no-repeat; + border-radius: 8px; + position: relative; + + .mark { + position: absolute; + z-index: 1; + right: 15%; + top: 0px; + width: 128px; + height: 80px; + overflow: hidden; + overflow: hidden; - img { - max-height: 100%; - width: auto; + svg { + position: absolute; + top: -48px; + } + } + + .action { + position: absolute; + z-index: 3; + width: 100%; + height: 100%; + display: flex; + border-radius: 8px; + align-items: center; + justify-content: center; + background-color: rgba(102, 102, 102, 0.5); + } + + .info { + position: absolute; + z-index: 3; + right: 2%; + bottom: 2%; + width: 136px; + height: 119px; + background: rgba(216, 216, 216, 0.4); + border-radius: 7px; + padding: 10px; + color: #FFF; + } + + .time { + position: absolute; + z-index: 3; + left: 2%; + bottom: 2%; + color: #FFF; + display: flex; + align-items: center; + } + + .gi1 { + display: flex; + align-items: center; + } + + .gi2 { + display: flex; + align-items: left; + flex-direction: column; + justify-content: center } } @@ -347,6 +504,16 @@ onUnmounted(() => { overflow: hidden; margin: 0px 16px 27px 0px; + .img-wrapper { + width: 230px; + height: 130px; + overflow: hidden; + background-size: cover; + background-position: center; + background-repeat: no-repeat; + border-radius: 8px; + } + .check { position: absolute; z-index: 5; diff --git a/src/views/task/modal/BatchModal.vue b/src/views/task/modal/BatchModal.vue index cdc9459..cea5037 100644 --- a/src/views/task/modal/BatchModal.vue +++ b/src/views/task/modal/BatchModal.vue @@ -1,16 +1,11 @@