|
@@ -1,260 +1,424 @@
|
|
|
<template>
|
|
<template>
|
|
|
- <view class="page_submit" :style="{paddingTop: statusBarHeight + 200 + 'rpx', paddingBottom: safeAreaBottom + 100 + 'rpx' }">
|
|
|
|
|
|
|
+ <view class="page_notice" :style="{paddingTop: statusBarHeight + 400 + 'rpx', paddingBottom: safeAreaBottom + 160 + 'rpx' }">
|
|
|
<notice-header
|
|
<notice-header
|
|
|
- :title="isEdit ? '编辑任务' : '新建任务'"
|
|
|
|
|
- mode="submit"
|
|
|
|
|
- :showSave="true"
|
|
|
|
|
- @save="handleSave">
|
|
|
|
|
|
|
+ title="提交材料"
|
|
|
|
|
+ mode="material"
|
|
|
|
|
+ :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">
|
|
|
</notice-header>
|
|
</notice-header>
|
|
|
|
|
|
|
|
- <view class="form_container">
|
|
|
|
|
- <scroll-view scroll-y class="form_scroll">
|
|
|
|
|
- <view class="form_section">
|
|
|
|
|
- <view class="section_title">基本信息</view>
|
|
|
|
|
-
|
|
|
|
|
- <view class="form_item">
|
|
|
|
|
- <text class="form_label">任务标题</text>
|
|
|
|
|
- <input class="form_input" v-model="formData.title" placeholder="请输入任务标题" />
|
|
|
|
|
- </view>
|
|
|
|
|
-
|
|
|
|
|
- <view class="form_item">
|
|
|
|
|
- <text class="form_label">学年</text>
|
|
|
|
|
- <picker mode="selector" :range="academicYearOptions" :value="academicYearIndex" @change="handleAcademicYearChange">
|
|
|
|
|
- <view class="picker_item">
|
|
|
|
|
- <text>{{ academicYearOptions[academicYearIndex] }}</text>
|
|
|
|
|
- <uni-icons type="down" size="16" color="#999999"></uni-icons>
|
|
|
|
|
|
|
+ <view class="notice_content">
|
|
|
|
|
+ <view class="notice_list">
|
|
|
|
|
+ <scroll-view scroll-y v-for="item in taskList" :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>
|
|
|
|
|
+ <text class="notice_title">{{ item.taskName }}</text>
|
|
|
|
|
+ </view>
|
|
|
|
|
+ <view class="notice_meta">
|
|
|
|
|
+ <view class="status_tag" :class="statusClassMap[item.taskStatus] || ''">
|
|
|
|
|
+ <text>{{ taskStatusMap[item.taskStatus] }}</text>
|
|
|
</view>
|
|
</view>
|
|
|
- </picker>
|
|
|
|
|
- </view>
|
|
|
|
|
-
|
|
|
|
|
- <view class="form_item">
|
|
|
|
|
- <text class="form_label">归属分类</text>
|
|
|
|
|
- <picker mode="selector" :range="categoryOptions" :value="categoryIndex" @change="handleCategoryChange">
|
|
|
|
|
- <view class="picker_item">
|
|
|
|
|
- <text>{{ categoryOptions[categoryIndex] }}</text>
|
|
|
|
|
- <uni-icons type="down" size="16" color="#999999"></uni-icons>
|
|
|
|
|
|
|
+ <view class="need_shenhe" v-if="item.auditMechanism">
|
|
|
|
|
+ <text>审</text>
|
|
|
</view>
|
|
</view>
|
|
|
- </picker>
|
|
|
|
|
|
|
+ <text class="meta_text textLength">{{ item.departmentName }}</text>
|
|
|
|
|
+ <text class="meta_text textLength">{{ item.materialCategoryName }}</text>
|
|
|
|
|
+ <text class="meta_text">{{ item.createdBy }}</text>
|
|
|
|
|
+ </view>
|
|
|
</view>
|
|
</view>
|
|
|
-
|
|
|
|
|
- <view class="form_item">
|
|
|
|
|
- <text class="form_label">材料类目</text>
|
|
|
|
|
- <picker mode="selector" :range="materialTypeOptions" :value="materialTypeIndex" @change="handleMaterialTypeChange">
|
|
|
|
|
- <view class="picker_item">
|
|
|
|
|
- <text>{{ materialTypeOptions[materialTypeIndex] }}</text>
|
|
|
|
|
- <uni-icons type="down" size="16" color="#999999"></uni-icons>
|
|
|
|
|
|
|
+ <!-- 任务底部 -->
|
|
|
|
|
+ <view class="item_bottom">
|
|
|
|
|
+ <view class="notice_stats">
|
|
|
|
|
+ <text class="stats_text">开始时间: {{ item.startTime }}</text>
|
|
|
|
|
+ </view>
|
|
|
|
|
+ <view class="notice_actions">
|
|
|
|
|
+ <view class="action_btn delete" :class="{ disable: !!item.submitNum }">
|
|
|
|
|
+ <text>删除</text>
|
|
|
</view>
|
|
</view>
|
|
|
- </picker>
|
|
|
|
|
- </view>
|
|
|
|
|
- </view>
|
|
|
|
|
-
|
|
|
|
|
- <view class="form_section">
|
|
|
|
|
- <view class="section_title">时间设置</view>
|
|
|
|
|
-
|
|
|
|
|
- <view class="form_item">
|
|
|
|
|
- <text class="form_label">开始日期</text>
|
|
|
|
|
- <picker mode="date" :value="formData.startDate" @change="handleStartDateChange">
|
|
|
|
|
- <view class="picker_item">
|
|
|
|
|
- <text>{{ formData.startDate || '请选择开始日期' }}</text>
|
|
|
|
|
- <uni-icons type="down" size="16" color="#999999"></uni-icons>
|
|
|
|
|
|
|
+ <view class="action_btn edit" >
|
|
|
|
|
+ <text>编辑</text>
|
|
|
</view>
|
|
</view>
|
|
|
- </picker>
|
|
|
|
|
- </view>
|
|
|
|
|
-
|
|
|
|
|
- <view class="form_item">
|
|
|
|
|
- <text class="form_label">截止日期</text>
|
|
|
|
|
- <picker mode="date" :value="formData.deadline" @change="handleDeadlineChange">
|
|
|
|
|
- <view class="picker_item">
|
|
|
|
|
- <text>{{ formData.deadline || '请选择截止日期' }}</text>
|
|
|
|
|
- <uni-icons type="down" size="16" color="#999999"></uni-icons>
|
|
|
|
|
|
|
+ <view class="action_btn edit" :class="{ disableLock: item.taskStatus === 0 }">
|
|
|
|
|
+ <text>查看</text>
|
|
|
</view>
|
|
</view>
|
|
|
- </picker>
|
|
|
|
|
|
|
+ </view>
|
|
|
</view>
|
|
</view>
|
|
|
- </view>
|
|
|
|
|
-
|
|
|
|
|
- <view class="form_section">
|
|
|
|
|
- <view class="section_title">任务描述</view>
|
|
|
|
|
- <textarea
|
|
|
|
|
- class="form_textarea"
|
|
|
|
|
- v-model="formData.description"
|
|
|
|
|
- placeholder="请输入任务描述"
|
|
|
|
|
- placeholder-class="textarea_placeholder"
|
|
|
|
|
- maxlength="500"
|
|
|
|
|
- ></textarea>
|
|
|
|
|
- </view>
|
|
|
|
|
- </scroll-view>
|
|
|
|
|
|
|
+ </scroll-view>
|
|
|
|
|
+
|
|
|
|
|
+ <no-data v-if="taskList.length === 0" centered text="暂无任务" />
|
|
|
|
|
+ </view>
|
|
|
</view>
|
|
</view>
|
|
|
|
|
+
|
|
|
|
|
+ <common-tabbar></common-tabbar>
|
|
|
</view>
|
|
</view>
|
|
|
</template>
|
|
</template>
|
|
|
|
|
|
|
|
<script setup>
|
|
<script setup>
|
|
|
-import { ref, computed, onMounted } from 'vue';
|
|
|
|
|
-import { onLoad } from '@dcloudio/uni-app';
|
|
|
|
|
|
|
+import { ref, onMounted } from 'vue';
|
|
|
import NoticeHeader from '@/components/notice-header.vue';
|
|
import NoticeHeader from '@/components/notice-header.vue';
|
|
|
-import uniIcons from '@/uni_modules/uni-icons/components/uni-icons/uni-icons.vue';
|
|
|
|
|
|
|
+import CommonTabbar from '@/components/commonTabbar.vue';
|
|
|
|
|
+import NoData from '@/components/no-data.vue';
|
|
|
import { useSafeArea } from '@/common/safeArea';
|
|
import { useSafeArea } from '@/common/safeArea';
|
|
|
|
|
+import notification from '@/reqApi/notification.js';
|
|
|
|
|
|
|
|
const { statusBarHeight, safeAreaBottom, initSafeArea } = useSafeArea();
|
|
const { statusBarHeight, safeAreaBottom, initSafeArea } = useSafeArea();
|
|
|
|
|
|
|
|
-const taskId = ref(null);
|
|
|
|
|
-const isEdit = computed(() => !!taskId.value);
|
|
|
|
|
-
|
|
|
|
|
-const academicYearOptions = ['2025-2026学年', '2024-2025学年', '2023-2024学年'];
|
|
|
|
|
-const categoryOptions = ['全部分类', '日常教学', '考试测评', '教研活动'];
|
|
|
|
|
-const materialTypeOptions = ['全部类目', '教案', '课件', '试卷', '作业'];
|
|
|
|
|
-
|
|
|
|
|
|
|
+const tabs = ['待提交', '审核中', '已驳回', '已提交'];
|
|
|
|
|
+const activeTab = ref(-1);
|
|
|
|
|
+const stageIndex = ref(0);
|
|
|
const academicYearIndex = 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 categoryIndex = ref(0);
|
|
|
|
|
+const categoryId = ref('');
|
|
|
const materialTypeIndex = ref(0);
|
|
const materialTypeIndex = ref(0);
|
|
|
|
|
+const materialTypeId = ref('');
|
|
|
|
|
+const categoryData = ref([]);
|
|
|
|
|
+const word = ref('');
|
|
|
|
|
+const taskList = ref([]);
|
|
|
|
|
+
|
|
|
|
|
+const statusMap = {
|
|
|
|
|
+ 0: '待开始',
|
|
|
|
|
+ 1: '进行中',
|
|
|
|
|
+ 2: '已结束'
|
|
|
|
|
+};
|
|
|
|
|
|
|
|
-const formData = ref({
|
|
|
|
|
- title: '',
|
|
|
|
|
- startDate: '',
|
|
|
|
|
- deadline: '',
|
|
|
|
|
- description: ''
|
|
|
|
|
-});
|
|
|
|
|
|
|
+const statusClassMap = {
|
|
|
|
|
+ 0: 'status_pending',
|
|
|
|
|
+ 1: 'status_published',
|
|
|
|
|
+ 2: 'status_closed'
|
|
|
|
|
+};
|
|
|
|
|
+
|
|
|
|
|
+const taskStatusMap = {
|
|
|
|
|
+ 0: '待开始',
|
|
|
|
|
+ 1: '进行中',
|
|
|
|
|
+ 2: '已结束'
|
|
|
|
|
+};
|
|
|
|
|
+
|
|
|
|
|
+const fetchTaskList = async () => {
|
|
|
|
|
+ taskList.value = [];
|
|
|
|
|
+ try {
|
|
|
|
|
+ const params = {
|
|
|
|
|
+ schoolYearCode: currentSchoolYearCode.value || null,
|
|
|
|
|
+ schoolYearId: currentSchoolYearId.value || null,
|
|
|
|
|
+ departmentId: categoryId.value || null,
|
|
|
|
|
+ materialCategory: materialTypeId.value || null,
|
|
|
|
|
+ taskName: word.value || '',
|
|
|
|
|
+ taskStatus: activeTab.value === -1 ? null : activeTab.value,
|
|
|
|
|
+ pageNum: 1,
|
|
|
|
|
+ pageSize: 9999
|
|
|
|
|
+ };
|
|
|
|
|
+ const res = await notification.find_collection_task(params);
|
|
|
|
|
+ if (res.data && res.data.records) {
|
|
|
|
|
+ taskList.value = res.data.records
|
|
|
|
|
+ } else {
|
|
|
|
|
+ taskList.value = [];
|
|
|
|
|
+ }
|
|
|
|
|
+ } catch (error) {
|
|
|
|
|
+ console.error('获取任务列表失败:', error);
|
|
|
|
|
+ taskList.value = [];
|
|
|
|
|
+ }
|
|
|
|
|
+};
|
|
|
|
|
|
|
|
-onLoad((options) => {
|
|
|
|
|
- if (options && options.id) {
|
|
|
|
|
- taskId.value = options.id;
|
|
|
|
|
- loadTaskDetail(options.id);
|
|
|
|
|
|
|
+const fetchSchoolYearList = async () => {
|
|
|
|
|
+ try {
|
|
|
|
|
+ const res = await notification.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;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ } catch (error) {
|
|
|
|
|
+ console.error('获取学年学期列表失败:', error);
|
|
|
}
|
|
}
|
|
|
-});
|
|
|
|
|
|
|
+};
|
|
|
|
|
+
|
|
|
|
|
+const fetchCategoryList = async () => {
|
|
|
|
|
+ try {
|
|
|
|
|
+ const res = await notification.getCategoryList();
|
|
|
|
|
+ if (res.data && Array.isArray(res.data)) {
|
|
|
|
|
+ categoryData.value = res.data;
|
|
|
|
|
+ }
|
|
|
|
|
+ } catch (error) {
|
|
|
|
|
+ console.error('获取分类列表失败:', error);
|
|
|
|
|
+ }
|
|
|
|
|
+};
|
|
|
|
|
|
|
|
-onMounted(() => {
|
|
|
|
|
|
|
+onMounted(async () => {
|
|
|
initSafeArea();
|
|
initSafeArea();
|
|
|
|
|
+ await fetchSchoolYearList();
|
|
|
|
|
+ fetchCategoryList();
|
|
|
|
|
+ fetchTaskList();
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
-const loadTaskDetail = (id) => {
|
|
|
|
|
- // 模拟加载任务详情
|
|
|
|
|
- formData.value = {
|
|
|
|
|
- title: '2025年秋季学期教案材料收集',
|
|
|
|
|
- startDate: '2025-07-28',
|
|
|
|
|
- deadline: '2025-08-15',
|
|
|
|
|
- description: '请各位教师按时提交本学期的教案材料'
|
|
|
|
|
- };
|
|
|
|
|
|
|
+const handleTabChange = (status) => {
|
|
|
|
|
+ activeTab.value = status;
|
|
|
|
|
+ fetchTaskList();
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
-const handleAcademicYearChange = (e) => {
|
|
|
|
|
- academicYearIndex.value = e.detail.value;
|
|
|
|
|
|
|
+const handleStageChange = (index) => {
|
|
|
|
|
+ stageIndex.value = index;
|
|
|
|
|
+ // stageIndex: 0-进行中, 1-已结束
|
|
|
|
|
+ // 后续可以根据阶段筛选任务列表
|
|
|
|
|
+ fetchTaskList();
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
-const handleCategoryChange = (e) => {
|
|
|
|
|
- categoryIndex.value = e.detail.value;
|
|
|
|
|
|
|
+const handleAcademicYearChange = (index, id) => {
|
|
|
|
|
+ academicYearIndex.value = index;
|
|
|
|
|
+ currentSchoolYearId.value = id || '';
|
|
|
|
|
+ currentSchoolYearCode.value = academicYearCodes.value[index] || '';
|
|
|
|
|
+ fetchTaskList();
|
|
|
};
|
|
};
|
|
|
-
|
|
|
|
|
-const handleMaterialTypeChange = (e) => {
|
|
|
|
|
- materialTypeIndex.value = e.detail.value;
|
|
|
|
|
|
|
+// 分类选择
|
|
|
|
|
+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 handleStartDateChange = (e) => {
|
|
|
|
|
- formData.value.startDate = e.detail.value;
|
|
|
|
|
|
|
+const handleSearchChange = (keyword) => {
|
|
|
|
|
+ word.value = keyword;
|
|
|
|
|
+ fetchTaskList();
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
-const handleDeadlineChange = (e) => {
|
|
|
|
|
- formData.value.deadline = e.detail.value;
|
|
|
|
|
|
|
+const handleCreate = () => {
|
|
|
|
|
+ uni.navigateTo({
|
|
|
|
|
+ url: '/pages/materialCollection/submitMaterial/index'
|
|
|
|
|
+ });
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
-const handleSave = () => {
|
|
|
|
|
- if (!formData.value.title) {
|
|
|
|
|
- uni.showToast({ title: '请输入任务标题', icon: 'none' });
|
|
|
|
|
- return;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- uni.showModal({
|
|
|
|
|
- title: '提示',
|
|
|
|
|
- content: isEdit.value ? '确定要保存修改吗?' : '确定要创建任务吗?',
|
|
|
|
|
- success: (res) => {
|
|
|
|
|
- if (res.confirm) {
|
|
|
|
|
- uni.showToast({
|
|
|
|
|
- title: isEdit.value ? '保存成功' : '创建成功',
|
|
|
|
|
- icon: 'success'
|
|
|
|
|
- });
|
|
|
|
|
- setTimeout(() => {
|
|
|
|
|
- uni.navigateBack();
|
|
|
|
|
- }, 1500);
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
|
|
+const handleDetail = (id) => {
|
|
|
|
|
+ uni.navigateTo({
|
|
|
|
|
+ url: `/pages/materialCollection/submitMaterial/index?id=${id}`
|
|
|
});
|
|
});
|
|
|
};
|
|
};
|
|
|
</script>
|
|
</script>
|
|
|
|
|
|
|
|
-<style lang="scss" scoped>
|
|
|
|
|
-.page_submit {
|
|
|
|
|
|
|
+<style lang="scss">
|
|
|
|
|
+.page_notice {
|
|
|
min-height: 100vh;
|
|
min-height: 100vh;
|
|
|
- background-color: #F5F7FA;
|
|
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ flex-direction: column;
|
|
|
|
|
+ background-color: #FFFFFF;
|
|
|
|
|
+ box-sizing: border-box;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-.form_container {
|
|
|
|
|
|
|
+.notice_content {
|
|
|
flex: 1;
|
|
flex: 1;
|
|
|
- padding: 24rpx;
|
|
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ flex-direction: column;
|
|
|
|
|
+ overflow: hidden;
|
|
|
|
|
+ padding-left: 0rpx;
|
|
|
|
|
+ padding-right: 0rpx;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-.form_scroll {
|
|
|
|
|
- height: 100%;
|
|
|
|
|
|
|
+.notice_list {
|
|
|
|
|
+ flex: 1;
|
|
|
|
|
+ overflow-y: auto;
|
|
|
|
|
+ overflow-x: hidden;
|
|
|
|
|
+ padding: 0 24rpx;
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ flex-direction: column;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-.form_section {
|
|
|
|
|
- background-color: #FFFFFF;
|
|
|
|
|
- border-radius: 16rpx;
|
|
|
|
|
- padding: 24rpx;
|
|
|
|
|
|
|
+.notice_item {
|
|
|
|
|
+ background-color: #F9FAFF;
|
|
|
|
|
+ border-radius: 20rpx;
|
|
|
margin-bottom: 24rpx;
|
|
margin-bottom: 24rpx;
|
|
|
|
|
+ border: 2rpx solid #E4E7ED;
|
|
|
|
|
|
|
|
- .section_title {
|
|
|
|
|
- font-size: 30rpx;
|
|
|
|
|
- font-weight: 600;
|
|
|
|
|
- color: #333333;
|
|
|
|
|
- margin-bottom: 24rpx;
|
|
|
|
|
- }
|
|
|
|
|
-}
|
|
|
|
|
|
|
+ .item_content {
|
|
|
|
|
+ padding: 24rpx;
|
|
|
|
|
|
|
|
-.form_item {
|
|
|
|
|
- display: flex;
|
|
|
|
|
- align-items: center;
|
|
|
|
|
- padding: 24rpx 0;
|
|
|
|
|
- border-bottom: 1rpx solid #EBEEF5;
|
|
|
|
|
|
|
+ .notice_title_row {
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ align-items: center;
|
|
|
|
|
+ margin-bottom: 16rpx;
|
|
|
|
|
|
|
|
- &:last-child {
|
|
|
|
|
- border-bottom: none;
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ .notice_icon {
|
|
|
|
|
+ width: 32rpx;
|
|
|
|
|
+ height: 32rpx;
|
|
|
|
|
+ margin-right: 16rpx;
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
- .form_label {
|
|
|
|
|
- width: 180rpx;
|
|
|
|
|
- font-size: 28rpx;
|
|
|
|
|
- color: #666666;
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ .notice_title {
|
|
|
|
|
+ flex: 1;
|
|
|
|
|
+ font-weight: 500;
|
|
|
|
|
+ font-size: 28rpx;
|
|
|
|
|
+ color: #333333;
|
|
|
|
|
+ overflow: hidden;
|
|
|
|
|
+ text-overflow: ellipsis;
|
|
|
|
|
+ white-space: nowrap;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
- .form_input {
|
|
|
|
|
- flex: 1;
|
|
|
|
|
- font-size: 28rpx;
|
|
|
|
|
- color: #333333;
|
|
|
|
|
- text-align: right;
|
|
|
|
|
|
|
+ .notice_meta {
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ align-items: center;
|
|
|
|
|
+ flex-wrap: wrap;
|
|
|
|
|
+ gap: 16rpx;
|
|
|
|
|
+
|
|
|
|
|
+ .status_tag {
|
|
|
|
|
+ font-size: 24rpx;
|
|
|
|
|
+ height: 48rpx;
|
|
|
|
|
+ width: 96rpx;
|
|
|
|
|
+ text-align: center;
|
|
|
|
|
+ line-height: 48rpx;
|
|
|
|
|
+ border-radius: 4rpx;
|
|
|
|
|
+ font-weight: 400;
|
|
|
|
|
+ border-radius: 8rpx;
|
|
|
|
|
+
|
|
|
|
|
+ &.status_pending {
|
|
|
|
|
+ background: rgba(46, 100, 250, 0.1);
|
|
|
|
|
+ color: #2E64FA;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ &.status_published {
|
|
|
|
|
+ background: rgba(82, 196, 26, 0.1);
|
|
|
|
|
+ color: #2BC644;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ &.status_closed {
|
|
|
|
|
+ background: #6666661a;
|
|
|
|
|
+ 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;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- .picker_item {
|
|
|
|
|
- flex: 1;
|
|
|
|
|
|
|
+ .item_bottom {
|
|
|
|
|
+ border-top: 2rpx solid #E4E7ED;
|
|
|
display: flex;
|
|
display: flex;
|
|
|
|
|
+ flex-direction: row;
|
|
|
|
|
+ justify-content: space-between;
|
|
|
align-items: center;
|
|
align-items: center;
|
|
|
- justify-content: flex-end;
|
|
|
|
|
- font-size: 28rpx;
|
|
|
|
|
- color: #333333;
|
|
|
|
|
- gap: 8rpx;
|
|
|
|
|
- }
|
|
|
|
|
-}
|
|
|
|
|
|
|
+ padding: 24rpx 16rpx;
|
|
|
|
|
|
|
|
-.form_textarea {
|
|
|
|
|
- width: 100%;
|
|
|
|
|
- min-height: 200rpx;
|
|
|
|
|
- font-size: 28rpx;
|
|
|
|
|
- color: #333333;
|
|
|
|
|
- padding: 16rpx;
|
|
|
|
|
- background-color: #F9FAFF;
|
|
|
|
|
- border-radius: 12rpx;
|
|
|
|
|
- box-sizing: border-box;
|
|
|
|
|
-}
|
|
|
|
|
|
|
+ .notice_stats {
|
|
|
|
|
+ display: flex;
|
|
|
|
|
|
|
|
-.textarea_placeholder {
|
|
|
|
|
- color: #999999;
|
|
|
|
|
- font-size: 28rpx;
|
|
|
|
|
|
|
+ .stats_text {
|
|
|
|
|
+ font-size: 24rpx;
|
|
|
|
|
+ color: #999999;
|
|
|
|
|
+
|
|
|
|
|
+ &:first-child {
|
|
|
|
|
+ margin-right: 32rpx;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ .notice_actions {
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ justify-content: flex-end;
|
|
|
|
|
+ gap: 16rpx;
|
|
|
|
|
+
|
|
|
|
|
+ .action_btn {
|
|
|
|
|
+ font-size: 24rpx;
|
|
|
|
|
+ padding: 12rpx 24rpx;
|
|
|
|
|
+ border-radius: 8rpx;
|
|
|
|
|
+ border: 2rpx solid transparent;
|
|
|
|
|
+
|
|
|
|
|
+ &.delete {
|
|
|
|
|
+ border-color: #F56C6C;
|
|
|
|
|
+ color: #F56C6C;
|
|
|
|
|
+ background-color: #FFFFFF;
|
|
|
|
|
+
|
|
|
|
|
+ &.disabled {
|
|
|
|
|
+ border-color: #C0C4CC;
|
|
|
|
|
+ color: #C0C4CC;
|
|
|
|
|
+ background-color: #FFFFFF;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ &.edit {
|
|
|
|
|
+ border-color: #2E64FA;
|
|
|
|
|
+ color: #2E64FA;
|
|
|
|
|
+ background-color: #FFFFFF;
|
|
|
|
|
+
|
|
|
|
|
+ &.disabled {
|
|
|
|
|
+ border-color: #C0C4CC;
|
|
|
|
|
+ color: #C0C4CC;
|
|
|
|
|
+ background-color: #FFFFFF;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ &.disable {
|
|
|
|
|
+ color: #C0C4CC !important;
|
|
|
|
|
+ cursor: not-allowed;
|
|
|
|
|
+ border-color: #C0C4CC !important;
|
|
|
|
|
+ }
|
|
|
|
|
+ &.disableLock{
|
|
|
|
|
+ color: #C0C4CC !important;
|
|
|
|
|
+ cursor: not-allowed;
|
|
|
|
|
+ background-color: #F3F3F3 !important;
|
|
|
|
|
+ border-color: #F3F3F3 !important;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ &:last-child {
|
|
|
|
|
+ margin-bottom: 0;
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
</style>
|
|
</style>
|