|
|
@@ -1,35 +1,34 @@
|
|
|
<template>
|
|
|
- <view class="page_notice" :style="{paddingTop: statusBarHeight + 430 + 'rpx', paddingBottom: safeAreaBottom + 160 + 'rpx' }">
|
|
|
- <noticeHeader
|
|
|
- title="审核材料"
|
|
|
- mode="material"
|
|
|
- tabMode="index"
|
|
|
- :showSearch="true"
|
|
|
- :showFilter="true"
|
|
|
- :showStageBtn="true"
|
|
|
- :showTabs="true"
|
|
|
- :showCreateBtn="true"
|
|
|
- :tabs="tabs"
|
|
|
- :activeTab="activeTab"
|
|
|
- :academicYearOptions="academicYearOptions"
|
|
|
- :academicYearIds="academicYearIds"
|
|
|
- :categoryData="categoryData"
|
|
|
- @tabChange="handleTabChange"
|
|
|
- @academicYearChange="handleAcademicYearChange"
|
|
|
- @categoryChange="handleCategoryChange"
|
|
|
- @materialTypeChange="handleMaterialTypeChange"
|
|
|
- @searchChange="handleSearchChange"
|
|
|
- @stageChange="handleStageChange"
|
|
|
- @create="handleCreate">
|
|
|
- </noticeHeader>
|
|
|
-
|
|
|
- <view class="notice_content">
|
|
|
+ <!-- 头部 -->
|
|
|
+ <nav-bar height="400" backPath="workspace" title="材料采集" :filterPickerData="state.filterPickerData" :tabList="state.tabList" :onlyTitle="false" :showFilterPicker="true" :showTabs="true" rightWidth="0rpx" @CommonFilterData="CommonFilterData">
|
|
|
+ <template #tabs_top_content>
|
|
|
+ <view class="task_status_list">
|
|
|
+ <view :class="['item_status',{'active':item.value==state.params.taskStatus}]" v-for="item in state.taskStatusList" :key="item.value" @click="ChangeTaskStatus(item.value)">{{item.label}}</view>
|
|
|
+ </view>
|
|
|
+ </template>
|
|
|
+ </nav-bar>
|
|
|
+ <view class="page_content">
|
|
|
+ <scroll-view
|
|
|
+ class="scroll_view_y"
|
|
|
+ :scroll-top="state.scrollTop"
|
|
|
+ scroll-y="true"
|
|
|
+ :refresher-enabled="false"
|
|
|
+ :enable-back-to-top="true"
|
|
|
+ :show-scrollbar="false"
|
|
|
+ :scroll-with-animation="true"
|
|
|
+ refresher-default-style="none"
|
|
|
+ refresher-background="#F8F9FD"
|
|
|
+ :refresher-triggered="state.isRefreshing"
|
|
|
+ @scrolltolower="OnLoadMore"
|
|
|
+ @refresherrefresh="OnRefresh"
|
|
|
+ @scroll="OnScroll">
|
|
|
+ <view class="refresh_loading" v-if="state.isRefreshing"><uni-load-more status="loading" /></view>
|
|
|
<view class="notice_list">
|
|
|
- <scroll-view scroll-y v-for="item in taskList" :key="item.id" class="notice_item">
|
|
|
+ <view v-for="item in state.pageList" :key="item.id" class="notice_item">
|
|
|
<!-- 任务内容 -->
|
|
|
<view class="item_content">
|
|
|
<view class="notice_title_row">
|
|
|
- <image class="notice_icon" src="/static/image/materialCollection/docIcon.png" mode="aspectFit"></image>
|
|
|
+ <image class="notice_icon" src="@/static/image/materialCollection/docIcon.png" mode="aspectFit"></image>
|
|
|
<text class="notice_title">{{ item.taskName }}</text>
|
|
|
</view>
|
|
|
<view class="notice_meta">
|
|
|
@@ -38,246 +37,318 @@
|
|
|
</view>
|
|
|
<text class="meta_text ">{{ truncateText(item.departmentName, 5) }}</text>
|
|
|
<text class="meta_text ">{{ truncateText(item.materialCategoryName, 5) }}</text>
|
|
|
- <text class="meta_text">{{ truncateText(item.createdBy, 5) }}</text>
|
|
|
+ <text class="meta_text">{{ truncateText(item.createBy, 5) }}</text>
|
|
|
</view>
|
|
|
</view>
|
|
|
<!-- 任务底部 -->
|
|
|
<view class="item_bottom">
|
|
|
<view class="notice_stats">
|
|
|
- <view class="status_tag" :class="tabStatusClassMap[activeTab] || ''">
|
|
|
- <text>{{ tabs[activeTab] }}: {{ item.taskTargetVos.length }}</text>
|
|
|
+ <view v-if="Number(item?.notReviewNum) > 0" class="status_tag notSubmitList">
|
|
|
+ <text>待审核:{{ item?.notReviewNum || 0 }}</text>
|
|
|
</view>
|
|
|
- <text class="stats_text">剩余时间: {{remainingDays(item.endTime) }}天</text>
|
|
|
+ <text class="stats_text">
|
|
|
+ <template v-if="remainingDays(item.endTime) > 0">剩余时间:{{remainingDays(item.endTime) }}天</template>
|
|
|
+ <template v-else>结束时间:{{item.endTime }}</template>
|
|
|
+ </text>
|
|
|
</view>
|
|
|
<view class="notice_actions">
|
|
|
- <view class="action_btn edit" >
|
|
|
- <text>查看</text>
|
|
|
+ <view class="action_btn edit">
|
|
|
+ <text>开始审核</text>
|
|
|
</view>
|
|
|
</view>
|
|
|
</view>
|
|
|
- </scroll-view>
|
|
|
-
|
|
|
- <noData v-if="taskList.length === 0" centered text="暂无审核材料" />
|
|
|
+ </view>
|
|
|
</view>
|
|
|
- </view>
|
|
|
-
|
|
|
- <common-tabbar></common-tabbar>
|
|
|
+ <view class="no_data" v-if="!state.isLoading && state.pageList.length == 0">
|
|
|
+ <image class="no_data_img" src="@/static/image/bg/no_data.png"></image>
|
|
|
+ <text class="no_data_text">暂无数据</text>
|
|
|
+ </view>
|
|
|
+ <uni-load-more v-if="state.pageList.length > 0" :status="state.loadStatus" />
|
|
|
+ </scroll-view>
|
|
|
</view>
|
|
|
</template>
|
|
|
|
|
|
<script setup>
|
|
|
-import { ref, onMounted } from 'vue';
|
|
|
-import NoticeHeader from '@/components/noticeHeader.vue';
|
|
|
-import CommonTabbar from '@/components/commonTabbar.vue';
|
|
|
-import NoData from '@/components/noData.vue';
|
|
|
-import { useSafeArea } from '@/common/safeArea';
|
|
|
-import notification from '@/reqApi/notification.js';
|
|
|
-import {truncateText, remainingDays } from '@/common/common.js';
|
|
|
-
|
|
|
-const { statusBarHeight, safeAreaBottom, initSafeArea } = useSafeArea();
|
|
|
-
|
|
|
-const tabs = ['待提交', '审核中', '已驳回', '已提交'];
|
|
|
-const activeTab = ref(0);
|
|
|
-const stageIndex = ref(0);
|
|
|
-const academicYearIndex = ref(0);
|
|
|
-const academicYearOptions = ref(['']);
|
|
|
-const academicYearIds = ref(['']);
|
|
|
-const academicYearCodes = ref(['']);
|
|
|
-const currentSchoolYearId = ref('');
|
|
|
-const currentSchoolYearCode = ref('');
|
|
|
-const categoryIndex = ref(0);
|
|
|
-const categoryId = ref('');
|
|
|
-const materialTypeIndex = ref(0);
|
|
|
-const materialTypeId = ref('');
|
|
|
-const categoryData = ref([]);
|
|
|
-const word = ref('');
|
|
|
-const taskList = ref([]);
|
|
|
-const statusMap = {
|
|
|
- 0: '待开始',
|
|
|
- 1: '进行中',
|
|
|
- 2: '已结束'
|
|
|
-};
|
|
|
-
|
|
|
+import { reactive,ref,nextTick, onMounted } from 'vue';
|
|
|
+import navBar from '@/components/navBar.vue';
|
|
|
+import {getTaskTargetReview,getSchoolYearList,getCategoryList} from '@/reqApi/notification.js';
|
|
|
+import { truncateText,remainingDays } from '@/common/common.js';
|
|
|
+
|
|
|
+const state = reactive({
|
|
|
+ filterPickerData: [{
|
|
|
+ valueIndex:0,//默认值索引
|
|
|
+ defaultValue:'',//默认值
|
|
|
+ list:[]
|
|
|
+ },{
|
|
|
+ valueIndex:0,//默认值索引
|
|
|
+ defaultValue:'',//默认值
|
|
|
+ list:[]
|
|
|
+ },{
|
|
|
+ valueIndex:0,//默认值索引
|
|
|
+ defaultValue:'',//默认值
|
|
|
+ list:[]
|
|
|
+ }],
|
|
|
+ tabList: [{
|
|
|
+ label: '全部',
|
|
|
+ value: 0
|
|
|
+ }, {
|
|
|
+ label: '待审核',
|
|
|
+ value: 1
|
|
|
+ }, {
|
|
|
+ label: '已审核',
|
|
|
+ value: 2
|
|
|
+ }],
|
|
|
+ taskStatusList:[{
|
|
|
+ label:'进行中',
|
|
|
+ value:1
|
|
|
+ },{
|
|
|
+ label:'已结束',
|
|
|
+ value:2
|
|
|
+ }],
|
|
|
+ params:{//参数
|
|
|
+ schoolYearCode: '',//学年
|
|
|
+ schoolYearId:'',//学年id
|
|
|
+ departmentId:'',//归属部门
|
|
|
+ materialCategory:'',//材料类目
|
|
|
+ taskName:'',//任务名称
|
|
|
+ taskStatus:1,//任务状态 1-进行中 2-已结束
|
|
|
+ reviewType:0,//审核状态
|
|
|
+ pageSize: 30,
|
|
|
+ pageNum: 1,
|
|
|
+ },
|
|
|
+ pageLists:[],//全部数据
|
|
|
+ pageList:[],//列表数据
|
|
|
+ pages:0,
|
|
|
+ scrollTop:0,
|
|
|
+ oldScrollTop:0,
|
|
|
+ isRefreshing:false,//设置当前下拉刷新状态,true 表示下拉刷新已经被触发,false 表示下拉刷新未被触发
|
|
|
+ isLoading:true,//加载中
|
|
|
+ noMoreData:false,//没有更多数据了
|
|
|
+ loadStatus:'more',//loading状态
|
|
|
+})
|
|
|
const statusClassMap = {
|
|
|
0: 'status_pending',
|
|
|
1: 'status_published',
|
|
|
2: 'status_closed'
|
|
|
};
|
|
|
-
|
|
|
const taskStatusMap = {
|
|
|
0: '待开始',
|
|
|
1: '进行中',
|
|
|
2: '已结束'
|
|
|
}
|
|
|
const tabStatusClassMap = {
|
|
|
- 0: 'tab_not_submit', // 待提交
|
|
|
- 1: 'tab_reviewing', // 审核中
|
|
|
- 2: 'tab_rejected', // 已驳回
|
|
|
- 3: 'tab_submitted' // 已提交
|
|
|
+ 'notSubmitList':'待提交', // 待提交
|
|
|
+ 'notReviewList':'审核中', // 审核中
|
|
|
+ 'reviewReasonList':'已驳回', // 已驳回
|
|
|
+ 'reviewList':'已提交' // 已提交
|
|
|
};
|
|
|
-
|
|
|
-const fetchTaskList = async () => {
|
|
|
- taskList.value = [];
|
|
|
- try {
|
|
|
- // stageIndex: 0-进行中(taskStatus=1), 1-已结束(taskStatus=2)
|
|
|
- const taskStatusMap = { 0: 1, 1: 2 };
|
|
|
- const params = {
|
|
|
- schoolYearCode: currentSchoolYearCode.value || null,
|
|
|
- schoolYearId: currentSchoolYearId.value || null,
|
|
|
- departmentId: categoryId.value || null,
|
|
|
- materialCategory: materialTypeId.value || null,
|
|
|
- taskName: word.value || '',
|
|
|
- taskStatus: taskStatusMap[stageIndex.value] || null,
|
|
|
- pageNum: 1,
|
|
|
- pageSize: 9999
|
|
|
- };
|
|
|
- const res = await notification.find_teacher_task_target_list(params);
|
|
|
- if (res.data) {
|
|
|
- // 根据当前选中的标签返回不同数组数据
|
|
|
- const listMap = {
|
|
|
- 0: 'notSubmitList', // 待提交
|
|
|
- 1: 'notReviewList', // 审核中
|
|
|
- 2: 'reviewReasonList', // 已驳回
|
|
|
- 3: 'reviewList' // 已提交
|
|
|
- };
|
|
|
- const listKey = listMap[activeTab.value] || 'notSubmitList';
|
|
|
- taskList.value = res.data[listKey] || [];
|
|
|
- } else {
|
|
|
- taskList.value = [];
|
|
|
- }
|
|
|
- } catch (error) {
|
|
|
- console.error('获取任务列表失败:', error);
|
|
|
- taskList.value = [];
|
|
|
- }
|
|
|
-};
|
|
|
-
|
|
|
+// 学年学期列表
|
|
|
const fetchSchoolYearList = async () => {
|
|
|
try {
|
|
|
- const res = await notification.getSchoolYearList();
|
|
|
+ const res = await getSchoolYearList();
|
|
|
if (res.data && Array.isArray(res.data)) {
|
|
|
- const names = res.data.map(item => item.schoolYearName);
|
|
|
- const ids = res.data.map(item => item.id);
|
|
|
- const codes = res.data.map(item => item.schoolYearCode);
|
|
|
- academicYearOptions.value = [...names];
|
|
|
- academicYearIds.value = [...ids];
|
|
|
- academicYearCodes.value = [...codes];
|
|
|
- // 默认选中第一个学年学期
|
|
|
- if (res.data.length > 0) {
|
|
|
- academicYearIndex.value = 0;
|
|
|
- currentSchoolYearId.value = res.data[0].id;
|
|
|
- currentSchoolYearCode.value = res.data[0].schoolYearCode;
|
|
|
- }
|
|
|
+ const resData = res.data;
|
|
|
+ state.filterPickerData[0].list = resData.map(item=>({
|
|
|
+ ...item,
|
|
|
+ label:item.schoolYearName,
|
|
|
+ value:item.id
|
|
|
+ }))
|
|
|
+ const schoolYearId = state.filterPickerData?.[0]?.list?.[0]?.value || '';
|
|
|
+ const schoolYearCode = state.filterPickerData?.[0]?.list?.[0]?.schoolYearCode || '';
|
|
|
+ state.filterPickerData[0].defaultValue = schoolYearId;
|
|
|
+ state.params.schoolYearId = schoolYearId;//默认值学年id
|
|
|
+ state.params.schoolYearCode = schoolYearCode;//默认值学年code
|
|
|
}
|
|
|
} catch (error) {
|
|
|
console.error('获取学年学期列表失败:', error);
|
|
|
}
|
|
|
};
|
|
|
-
|
|
|
+// 归属分类
|
|
|
const fetchCategoryList = async () => {
|
|
|
try {
|
|
|
- const res = await notification.getCategoryList();
|
|
|
+ const res = await getCategoryList();
|
|
|
if (res.data && Array.isArray(res.data)) {
|
|
|
- categoryData.value = res.data;
|
|
|
+ const categoryData = res.data;
|
|
|
+ const categoryList = categoryData.map(item=>({
|
|
|
+ ...item,
|
|
|
+ label:item.categoryName,
|
|
|
+ value:item.id
|
|
|
+ }))
|
|
|
+ state.filterPickerData[1].list = [{label:'归属分类',value:''}].concat(...categoryList);
|
|
|
}
|
|
|
} catch (error) {
|
|
|
console.error('获取分类列表失败:', error);
|
|
|
}
|
|
|
};
|
|
|
-
|
|
|
-onMounted(async () => {
|
|
|
- initSafeArea();
|
|
|
- await fetchSchoolYearList();
|
|
|
- fetchCategoryList();
|
|
|
- fetchTaskList();
|
|
|
-});
|
|
|
-
|
|
|
-const handleTabChange = (status) => {
|
|
|
- activeTab.value = status;
|
|
|
- fetchTaskList();
|
|
|
-};
|
|
|
-
|
|
|
-const handleStageChange = (index) => {
|
|
|
- stageIndex.value = index;
|
|
|
- // stageIndex: 0-进行中, 1-已结束
|
|
|
- // 后续可以根据阶段筛选任务列表
|
|
|
- fetchTaskList();
|
|
|
-};
|
|
|
-
|
|
|
-const handleAcademicYearChange = (index, id) => {
|
|
|
- academicYearIndex.value = index;
|
|
|
- currentSchoolYearId.value = id || '';
|
|
|
- currentSchoolYearCode.value = academicYearCodes.value[index] || '';
|
|
|
- fetchTaskList();
|
|
|
-};
|
|
|
-// 分类选择
|
|
|
-const handleCategoryChange = (index, id) => {
|
|
|
- categoryIndex.value = index;
|
|
|
- categoryId.value = id;
|
|
|
- // 清空类目选择
|
|
|
- materialTypeIndex.value = 0;
|
|
|
- materialTypeId.value = null;
|
|
|
- fetchTaskList();
|
|
|
-};
|
|
|
-// 类目选择
|
|
|
-const handleMaterialTypeChange = (index, id) => {
|
|
|
- materialTypeIndex.value = index;
|
|
|
- materialTypeId.value = id;
|
|
|
- fetchTaskList();
|
|
|
-};
|
|
|
-
|
|
|
-const handleSearchChange = (keyword) => {
|
|
|
- word.value = keyword;
|
|
|
- fetchTaskList();
|
|
|
+//切换条件选择器
|
|
|
+const CommonFilterData = (filterOptions,type) => {
|
|
|
+ const {searchWord,filterOpts,tabsSelected} = filterOptions;
|
|
|
+ const {valueIndex, index,filterPickerValue} = filterOpts;
|
|
|
+ if(type == 'filterPicker'){
|
|
|
+ state.params.departmentId = filterPickerValue[1];//归属部门
|
|
|
+ state.params.materialCategory = filterPickerValue[2];//材料类目
|
|
|
+ state.filterPickerData[index].valueIndex = valueIndex;
|
|
|
+ if(index == 1){
|
|
|
+ state.filterPickerData[2].valueIndex = 0;
|
|
|
+ const parentData = state.filterPickerData[1].list;//分类归属
|
|
|
+ const childrenData = parentData?.[valueIndex]?.childList || [];//材料类目
|
|
|
+ const childrenList = childrenData.map(item=>({
|
|
|
+ ...item,
|
|
|
+ label:item?.categoryName || '',
|
|
|
+ value:item?.id ?? ''
|
|
|
+ }))
|
|
|
+ if(childrenList.length){
|
|
|
+ childrenList.unshift({
|
|
|
+ label:'材料类目',
|
|
|
+ value:''
|
|
|
+ })
|
|
|
+ }
|
|
|
+ state.filterPickerData[2].list = childrenList;
|
|
|
+ }else if(index == 0){//学年
|
|
|
+ state.params.schoolYearId = filterPickerValue[0];//学年id
|
|
|
+ state.params.schoolYearCode = state.filterPickerData?.[index]?.list?.[valueIndex]?.schoolYearCode || '';//学年code
|
|
|
+ }
|
|
|
+ }else if(type == 'search'){
|
|
|
+ state.params.taskName = searchWord;//任务名称
|
|
|
+ }else{
|
|
|
+ state.params.reviewType = tabsSelected;//审核状态
|
|
|
+ }
|
|
|
+ OnLoadData(true);
|
|
|
+}
|
|
|
+//切换任务状态
|
|
|
+const ChangeTaskStatus = (val) => {
|
|
|
+ state.params.taskStatus = val;
|
|
|
+ OnLoadData(true);
|
|
|
+}
|
|
|
+/*
|
|
|
+*任务列表
|
|
|
+* initPage:初始分页 从第一开始
|
|
|
+*/
|
|
|
+const OnLoadData = (initPage) => {
|
|
|
+ // uni.showLoading({
|
|
|
+ // title: '加载中'
|
|
|
+ // });
|
|
|
+ state.isLoading = true;
|
|
|
+ state.loadStatus = 'loading';
|
|
|
+ if (initPage) {
|
|
|
+ state.params.pageNum = 1;//如果是下拉刷新、重新查询 默认加载第一页
|
|
|
+ state.pageLists = [];
|
|
|
+ state.pageList = [];
|
|
|
+ const params = {
|
|
|
+ schoolYearCode: state.params.schoolYearCode,
|
|
|
+ schoolYearId: state.params.schoolYearId,
|
|
|
+ departmentId: state.params.departmentId,
|
|
|
+ materialCategory: state.params.materialCategory,
|
|
|
+ taskName: state.params.taskName,
|
|
|
+ taskStatus: state.params.taskStatus,
|
|
|
+ reviewType:state.params.reviewType,
|
|
|
+ pageNum: state.params.pageNum,
|
|
|
+ pageSize: 999
|
|
|
+ };
|
|
|
+ getTaskTargetReview(params).then(res=>{
|
|
|
+ if (res.code == 200) {
|
|
|
+ const tableData = res?.data || [];
|
|
|
+ state.pageLists = tableData;//全部数据
|
|
|
+ const total = tableData?.length || 0;//总数
|
|
|
+ state.pages = Math.ceil(total / state.params.pageSize);//总页数
|
|
|
+ //默认加载
|
|
|
+ state.pageList = state.pageLists.slice(0, state.params.pageSize);
|
|
|
+ //没有更多了
|
|
|
+ state.noMoreData = state.params.pageNum == state.pages;
|
|
|
+ //分页+1
|
|
|
+ state.params.pageNum++;
|
|
|
+ state.isLoading = false;
|
|
|
+ state.isRefreshing = false;//下拉刷新未被触发
|
|
|
+ state.loadStatus = state.noMoreData?'no-more':'more';
|
|
|
+ }
|
|
|
+ }).finally(()=>{
|
|
|
+ // uni.hideLoading();
|
|
|
+ //返回到页面顶部
|
|
|
+ if(initPage){
|
|
|
+ GoTop();
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }else{
|
|
|
+ const start = (state.params.pageNum - 1) * state.params.pageSize;
|
|
|
+ const end = start + state.params.pageSize;
|
|
|
+ const list = state.pageLists.slice(start, end);
|
|
|
+ state.pageList = [...state.pageList, ...list];
|
|
|
+ state.noMoreData = state.params.pageNum == state.pages;
|
|
|
+ state.params.pageNum++;
|
|
|
+ setTimeout(() => {
|
|
|
+ state.isLoading = false;
|
|
|
+ state.isRefreshing = false; //下拉刷新未被触发
|
|
|
+ state.loadStatus = state.noMoreData?'no-more':'more';
|
|
|
+ }, 0)
|
|
|
+ }
|
|
|
};
|
|
|
-
|
|
|
-const handleCreate = () => {
|
|
|
+// 自定义下拉刷新被触发 下拉刷新
|
|
|
+const OnRefresh = () =>{
|
|
|
+ state.isRefreshing = true;//下拉刷新已经被触发
|
|
|
+ OnLoadData(true);
|
|
|
+}
|
|
|
+//滚动到底部/右边 触发上拉刷新
|
|
|
+const OnLoadMore = () => {
|
|
|
+ if (state.isLoading || state.noMoreData) return;
|
|
|
+ OnLoadData(false);
|
|
|
+}
|
|
|
+// 滚动时触发
|
|
|
+const OnScroll = (e) => {
|
|
|
+ state.oldScrollTop = e.detail.scrollTop;
|
|
|
+}
|
|
|
+//返回到顶部
|
|
|
+const GoTop = () => {
|
|
|
+ // 解决view层不同步的问题
|
|
|
+ state.scrollTop = state.oldScrollTop;
|
|
|
+ nextTick(() => {
|
|
|
+ state.scrollTop = 0
|
|
|
+ });
|
|
|
+}
|
|
|
+//编辑
|
|
|
+const handleEdit = (item) => {
|
|
|
uni.navigateTo({
|
|
|
- url: '/pages/materialCollection/submitMaterial/index'
|
|
|
+ url: `/pages/materialCollection/taskOverview/components/index?id=${item.id}`
|
|
|
});
|
|
|
};
|
|
|
-
|
|
|
+//
|
|
|
const handleDetail = (id) => {
|
|
|
uni.navigateTo({
|
|
|
url: `/pages/materialCollection/submitMaterial/index?id=${id}`
|
|
|
});
|
|
|
};
|
|
|
+onMounted(async () => {
|
|
|
+ await fetchSchoolYearList();//学年学期列表
|
|
|
+ fetchCategoryList();//归属分类
|
|
|
+ OnLoadData(true);
|
|
|
+});
|
|
|
</script>
|
|
|
|
|
|
-<style lang="scss">
|
|
|
-.page_notice {
|
|
|
- min-height: 100vh;
|
|
|
- display: flex;
|
|
|
- flex-direction: column;
|
|
|
- background-color: #FFFFFF;
|
|
|
- box-sizing: border-box;
|
|
|
-}
|
|
|
-
|
|
|
-.notice_content {
|
|
|
- flex: 1;
|
|
|
- display: flex;
|
|
|
- flex-direction: column;
|
|
|
- overflow: hidden;
|
|
|
- padding-left: 0rpx;
|
|
|
- padding-right: 0rpx;
|
|
|
+<style lang="scss" scoped>
|
|
|
+.page_content{
|
|
|
+ height: calc(100% - 536rpx);
|
|
|
+ .scroll_view_y{
|
|
|
+ height: 100%;
|
|
|
+ .refresh_loading{
|
|
|
+ padding: 10rpx 0;
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
-
|
|
|
.notice_list {
|
|
|
- flex: 1;
|
|
|
- overflow-y: auto;
|
|
|
- overflow-x: hidden;
|
|
|
- padding: 0 24rpx;
|
|
|
+ width: 100%;
|
|
|
display: flex;
|
|
|
flex-direction: column;
|
|
|
}
|
|
|
-
|
|
|
.notice_item {
|
|
|
background-color: #F9FAFF;
|
|
|
border-radius: 20rpx;
|
|
|
- margin-bottom: 24rpx;
|
|
|
+ margin-top: 24rpx;
|
|
|
border: 2rpx solid #E4E7ED;
|
|
|
+ &:first-child{
|
|
|
+ margin-top: 16rpx;
|
|
|
+ }
|
|
|
|
|
|
.item_content {
|
|
|
- padding: 24rpx;
|
|
|
+ padding: 24rpx 16rpx;
|
|
|
|
|
|
.notice_title_row {
|
|
|
display: flex;
|
|
|
@@ -332,27 +403,17 @@ const handleDetail = (id) => {
|
|
|
color: #666666;
|
|
|
}
|
|
|
}
|
|
|
- .need_shenhe {
|
|
|
- width: 48rpx;
|
|
|
- height: 48rpx;
|
|
|
- background: rgba(245,108,108,0.1);
|
|
|
- border-radius: 8rpx 8rpx 8rpx 8rpx;
|
|
|
- font-size: 24rpx;
|
|
|
- color: #F56C6C;
|
|
|
- text-align: center;
|
|
|
- line-height: 48rpx;
|
|
|
- }
|
|
|
.meta_text {
|
|
|
font-size: 24rpx;
|
|
|
color: #999999;
|
|
|
line-height: 48rpx;
|
|
|
}
|
|
|
.textLength {
|
|
|
- max-width: 160rpx;
|
|
|
- overflow: hidden;
|
|
|
- text-overflow: ellipsis;
|
|
|
- white-space: nowrap;
|
|
|
- }
|
|
|
+ max-width: 160rpx;
|
|
|
+ overflow: hidden;
|
|
|
+ text-overflow: ellipsis;
|
|
|
+ white-space: nowrap;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -371,10 +432,6 @@ const handleDetail = (id) => {
|
|
|
.stats_text {
|
|
|
font-size: 24rpx;
|
|
|
color: #999999;
|
|
|
-
|
|
|
- &:first-child {
|
|
|
- margin-right: 32rpx;
|
|
|
- }
|
|
|
}
|
|
|
|
|
|
.status_tag{
|
|
|
@@ -385,19 +442,20 @@ const handleDetail = (id) => {
|
|
|
// line-height: 48rpx;
|
|
|
font-weight: 400;
|
|
|
border-radius: 8rpx;
|
|
|
- &.tab_not_submit {
|
|
|
+ flex-shrink: 0;
|
|
|
+ &.notSubmitList {
|
|
|
background: rgba(46,100,250,0.1);
|
|
|
color: #2E64FA;
|
|
|
}
|
|
|
- &.tab_reviewing {
|
|
|
+ &.notReviewList {
|
|
|
background: rgba(251,159,52,0.1);
|
|
|
color: #FB9F34;
|
|
|
}
|
|
|
- &.tab_rejected {
|
|
|
+ &.reviewReasonList {
|
|
|
background: rgba(245,108,108,0.1);
|
|
|
color: #F56C6C;
|
|
|
}
|
|
|
- &.tab_submitted {
|
|
|
+ &.reviewList {
|
|
|
background: rgba(43,198,68,0.1);
|
|
|
color: #2BC644;
|
|
|
}
|
|
|
@@ -407,6 +465,7 @@ const handleDetail = (id) => {
|
|
|
.notice_actions {
|
|
|
display: flex;
|
|
|
justify-content: flex-end;
|
|
|
+ flex-shrink: 0;
|
|
|
gap: 16rpx;
|
|
|
.action_btn {
|
|
|
font-size: 24rpx;
|
|
|
@@ -452,9 +511,44 @@ const handleDetail = (id) => {
|
|
|
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
- &:last-child {
|
|
|
- margin-bottom: 0;
|
|
|
+}
|
|
|
+:deep(.scroll_tabs){
|
|
|
+ height: 72rpx;
|
|
|
+ align-items: center;
|
|
|
+ .scroll_tabs_view{
|
|
|
+ height: 56rpx;
|
|
|
+ }
|
|
|
+}
|
|
|
+:deep(.filter_picker){
|
|
|
+ gap: 16rpx !important;
|
|
|
+ .item_filter_picker{
|
|
|
+ width: calc((100% - 16rpx * 2) / 3) !important;
|
|
|
+ }
|
|
|
+}
|
|
|
+.task_status_list{
|
|
|
+ margin-top: 24rpx;
|
|
|
+ padding: 0 24rpx;
|
|
|
+ display: flex;
|
|
|
+ width: 100%;
|
|
|
+ gap:24rpx 30rpx;
|
|
|
+ box-sizing: border-box;
|
|
|
+ .item_status{
|
|
|
+ flex: 1;
|
|
|
+ display: inline-flex;
|
|
|
+ justify-content: center;
|
|
|
+ align-items: center;
|
|
|
+ height: 64rpx;
|
|
|
+ background-color: #FFFFFF;
|
|
|
+ border-radius: 8rpx;
|
|
|
+ border: 2rpx solid #DCDFE6;
|
|
|
+ font-weight: 400;
|
|
|
+ font-size: 28rpx;
|
|
|
+ color: #333333;
|
|
|
+ &.active{
|
|
|
+ background-color: rgba(46,100,250,0.1);
|
|
|
+ border: 2rpx solid #2E64FA;
|
|
|
+ color: #2E64FA;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
</style>
|