diff --git a/components.d.ts b/components.d.ts index 222bbbd..f08bf82 100644 --- a/components.d.ts +++ b/components.d.ts @@ -22,9 +22,12 @@ declare module 'vue' { NDivider: typeof import('naive-ui')['NDivider'] NDropdown: typeof import('naive-ui')['NDropdown'] NEllipsis: typeof import('naive-ui')['NEllipsis'] + NEllipsis: typeof import('naive-ui')['NEllipsis'] + NEmpty: typeof import('naive-ui')['NEmpty'] NForm: typeof import('naive-ui')['NForm'] NFormItem: typeof import('naive-ui')['NFormItem'] NGi: typeof import('naive-ui')['NGi'] + NGi: typeof import('naive-ui')['NGi'] NGrid: typeof import('naive-ui')['NGrid'] NGridItem: typeof import('naive-ui')['NGridItem'] NImage: typeof import('naive-ui')['NImage'] @@ -34,6 +37,7 @@ declare module 'vue' { NNotificationProvider: typeof import('naive-ui')['NNotificationProvider'] NotPassed: typeof import('./src/components/NotPassed.vue')['default'] NPopconfirm: typeof import('naive-ui')['NPopconfirm'] + NPopconfirm: typeof import('naive-ui')['NPopconfirm'] NPopover: typeof import('naive-ui')['NPopover'] NPopselect: typeof import('naive-ui')['NPopselect'] NProgress: typeof import('naive-ui')['NProgress'] @@ -43,7 +47,11 @@ declare module 'vue' { NSpace: typeof import('naive-ui')['NSpace'] NSpin: typeof import('naive-ui')['NSpin'] NSwitch: typeof import('naive-ui')['NSwitch'] + NTabPane: typeof import('naive-ui')['NTabPane'] + NTabs: typeof import('naive-ui')['NTabs'] NTag: typeof import('naive-ui')['NTag'] + NTimeline: typeof import('naive-ui')['NTimeline'] + NTimelineItem: typeof import('naive-ui')['NTimelineItem'] NTooltip: typeof import('naive-ui')['NTooltip'] NUpload: typeof import('naive-ui')['NUpload'] NUploadDragger: typeof import('naive-ui')['NUploadDragger'] diff --git a/src/api/final/index.ts b/src/api/final/index.ts index e7249f8..fab2e62 100644 --- a/src/api/final/index.ts +++ b/src/api/final/index.ts @@ -30,11 +30,11 @@ export async function getFinalList(params: FinalParam) { params: notEmptyParams, }) - const { data: { list, totalPage,totalCount } } = res + const { data: { list, totalPage, totalCount } } = res return { pageCount: totalPage, data: list, - totalCount + totalCount, } } @@ -62,3 +62,22 @@ export async function repetitionTask() { method: 'get', }) } + +/** + * 获取审核列表 + * @returns + */ +export async function getRepeatList(params: FinalParam) { + const res = await http.request({ + url: `/flow/task/repetitionTaskList`, + method: 'get', + params, + }) + + const { data: { records, totalPage, totalCount } } = res + return { + pageCount: totalPage, + data: records, + totalCount, + } +} diff --git a/src/assets/icons/summary.svg b/src/assets/icons/summary.svg new file mode 100644 index 0000000..075c554 --- /dev/null +++ b/src/assets/icons/summary.svg @@ -0,0 +1,26 @@ + + + chazhongjiansuo + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/components/Approval/NotPassed.vue b/src/components/Approval/NotPassed.vue index b2e53a5..7d3ea14 100644 --- a/src/components/Approval/NotPassed.vue +++ b/src/components/Approval/NotPassed.vue @@ -101,7 +101,7 @@ async function handleSumbit(e: MouseEvent) { audit(param).then((res) => { const { code } = res if (code === 'OK') { - message.success('审核成功') + message.success(res.message) emit('success', param) closeModal() } @@ -199,6 +199,8 @@ async function selectChange(id) { justify-content: flex-end; padding-right: 24px; padding-bottom: 10px; + border-top: 0.5px solid #d9d9d9; + padding-top: 15px; } &-info { @@ -236,6 +238,10 @@ async function selectChange(id) { margin-bottom: 0px; } +::v-deep(.n-form-item-label__text) { + color: #666666; +} + ::v-deep(.n-input__placeholder) { color: #333333!important; } diff --git a/src/config/aside.ts b/src/config/aside.ts index 5ba3b4d..7b6b5b7 100644 --- a/src/config/aside.ts +++ b/src/config/aside.ts @@ -8,7 +8,7 @@ export interface AsideEntity { inFilterList?: boolean// 是否出现在过滤配置选项中(这个名字不好,为false代表只用于客户端的显示配置,不作为参数传递给服务器端) render?: boolean// 是否作为单独组件渲染 key: string - component: Component + component?: Component } // 客户端配置 diff --git a/src/config/final.ts b/src/config/final.ts index 17fe255..fcc931d 100644 --- a/src/config/final.ts +++ b/src/config/final.ts @@ -1,5 +1,5 @@ import type { AsideEntity } from './aside' -import { IzProjectVue, IzStatus, IztaskrromVue, PictureDownloadVue, PlanVue, ReportUserVue, TimeVue } from '@/views/home/aside/comp/items' +import { IzProjectVue, IzStatus, IztaskrromVue, PictureDownloadVue, PlanVue, ReportUserVue, TimeVue, IzCustomname, IzCustomtype, IzVisitcity, IzCustomlevel, IzProjecttype, IzProductVue, IzvisitproVue, IzfirmVue } from '@/views/home/aside/comp/items' export interface RowData { id: string @@ -129,3 +129,99 @@ export const asideMap: Recordable = { inFilterList: false, }, } + + +// 审批添加筛选配置 (左侧) +export const asideTaskMap: Recordable = { + izstatus: { + label: '审批状态', + defaultValue: null, + isDefaultFilter: true, + key: 'izstatus', + component: IzStatus, // todo + }, + izuptime: { + label: '提报时间', + defaultValue: null, + isDefaultFilter: true, + key: 'izuptime', + component: TimeVue, + }, + izupuser: { + label: '提报人', + defaultValue: null, + isDefaultFilter: true, + key: 'izupuser', + component: ReportUserVue, + }, + iztaskrrom: { + label: '任务来源', + defaultValue: null, + isDefaultFilter: true, + key: 'iztaskrrom', + component: IztaskrromVue, + }, + izcustomname: { + label: '拜访客户', + defaultValue: null, + isDefaultFilter: true, + key: 'izcustomname', + component: IzCustomname, + }, + izcustomtype: { + label: '客户类型', + defaultValue: null, + isDefaultFilter: true, + key: 'izcustomtype', + component: IzCustomtype, + }, + izproject: { + label: '所属项目', + defaultValue: null, + isDefaultFilter: true, + key: 'izproject', + component: IzProjectVue, + }, + izvisitpro: { + label: '拜访省份/直辖市', + defaultValue: null, + isDefaultFilter: true, + key: 'izvisitpro', + component: IzVisitcity, + }, + izcustomlevel: { + label: '客户级别', + defaultValue: null, + isDefaultFilter: true, + key: 'izcustomlevel', + component: IzCustomlevel + }, + izprojecttype: { + label: '项目类别', + defaultValue: null, + isDefaultFilter: true, + key: 'izprojecttype', + component: IzProjecttype, + }, + izproductname: { + label: '产品名称', + defaultValue: null, + isDefaultFilter: true, + key: 'izproductname', + component: IzProductVue, + }, + izvisitcity: { + label: '拜访城市', + defaultValue: null, + isDefaultFilter: true, + key: 'izvisitcity', + component: IzvisitproVue, + }, + izfirm: { + label: '厂商', + defaultValue: null, + isDefaultFilter: true, + key: 'izfirm', + component: IzfirmVue, + } +} \ No newline at end of file diff --git a/src/views/final/comp/RepeatModal.vue b/src/views/final/comp/RepeatModal.vue index 8ae0db5..d0ed920 100644 --- a/src/views/final/comp/RepeatModal.vue +++ b/src/views/final/comp/RepeatModal.vue @@ -22,6 +22,7 @@ const { detail, total } = toRefs(state) const show = ref(false) function showModal(id) { + state.total = 0 getDetail(id) } @@ -45,7 +46,13 @@ function closeModal() { } async function reject() { - emit('reject', { a: 'todo' }) + const list = [] + state.detail.forEach((items) => { + items.repeatedTaskList.forEach((item) => { + list.push(item) + }) + }) + emit('reject', list) closeModal() } @@ -157,7 +164,7 @@ defineExpose({ border-radius: 8px; padding: 16px; padding-top: 0; - margin: 45px 12px 35px 38px; + margin: 25px 12px 35px 38px; .imgwrapper { width: 160px; diff --git a/src/views/final/comp/RepeatTaskTableModal.vue b/src/views/final/comp/RepeatTaskTableModal.vue index d0f6d99..0d1c1ae 100644 --- a/src/views/final/comp/RepeatTaskTableModal.vue +++ b/src/views/final/comp/RepeatTaskTableModal.vue @@ -1,101 +1,148 @@