更新采购申请文件模版下载

This commit is contained in:
吴红兵
2026-03-09 15:22:19 +08:00
parent 5963bbafd6
commit 03f10180dc
22 changed files with 333 additions and 364 deletions

140
auto-imports.d.ts vendored
View File

@@ -1,73 +1,73 @@
// Generated by 'unplugin-auto-import'
export {}
export {};
declare global {
const EffectScope: typeof import('vue')['EffectScope']
const acceptHMRUpdate: typeof import('pinia')['acceptHMRUpdate']
const computed: typeof import('vue')['computed']
const createApp: typeof import('vue')['createApp']
const createPinia: typeof import('pinia')['createPinia']
const customRef: typeof import('vue')['customRef']
const defineAsyncComponent: typeof import('vue')['defineAsyncComponent']
const defineComponent: typeof import('vue')['defineComponent']
const defineStore: typeof import('pinia')['defineStore']
const effectScope: typeof import('vue')['effectScope']
const getActivePinia: typeof import('pinia')['getActivePinia']
const getCurrentInstance: typeof import('vue')['getCurrentInstance']
const getCurrentScope: typeof import('vue')['getCurrentScope']
const h: typeof import('vue')['h']
const inject: typeof import('vue')['inject']
const isProxy: typeof import('vue')['isProxy']
const isReactive: typeof import('vue')['isReactive']
const isReadonly: typeof import('vue')['isReadonly']
const isRef: typeof import('vue')['isRef']
const mapActions: typeof import('pinia')['mapActions']
const mapGetters: typeof import('pinia')['mapGetters']
const mapState: typeof import('pinia')['mapState']
const mapStores: typeof import('pinia')['mapStores']
const mapWritableState: typeof import('pinia')['mapWritableState']
const markRaw: typeof import('vue')['markRaw']
const nextTick: typeof import('vue')['nextTick']
const onActivated: typeof import('vue')['onActivated']
const onBeforeMount: typeof import('vue')['onBeforeMount']
const onBeforeRouteLeave: typeof import('vue-router')['onBeforeRouteLeave']
const onBeforeRouteUpdate: typeof import('vue-router')['onBeforeRouteUpdate']
const onBeforeUnmount: typeof import('vue')['onBeforeUnmount']
const onBeforeUpdate: typeof import('vue')['onBeforeUpdate']
const onDeactivated: typeof import('vue')['onDeactivated']
const onErrorCaptured: typeof import('vue')['onErrorCaptured']
const onMounted: typeof import('vue')['onMounted']
const onRenderTracked: typeof import('vue')['onRenderTracked']
const onRenderTriggered: typeof import('vue')['onRenderTriggered']
const onScopeDispose: typeof import('vue')['onScopeDispose']
const onServerPrefetch: typeof import('vue')['onServerPrefetch']
const onUnmounted: typeof import('vue')['onUnmounted']
const onUpdated: typeof import('vue')['onUpdated']
const provide: typeof import('vue')['provide']
const reactive: typeof import('vue')['reactive']
const readonly: typeof import('vue')['readonly']
const ref: typeof import('vue')['ref']
const resolveComponent: typeof import('vue')['resolveComponent']
const resolveDirective: typeof import('vue')['resolveDirective']
const setActivePinia: typeof import('pinia')['setActivePinia']
const setMapStoreSuffix: typeof import('pinia')['setMapStoreSuffix']
const shallowReactive: typeof import('vue')['shallowReactive']
const shallowReadonly: typeof import('vue')['shallowReadonly']
const shallowRef: typeof import('vue')['shallowRef']
const storeToRefs: typeof import('pinia')['storeToRefs']
const toRaw: typeof import('vue')['toRaw']
const toRef: typeof import('vue')['toRef']
const toRefs: typeof import('vue')['toRefs']
const triggerRef: typeof import('vue')['triggerRef']
const unref: typeof import('vue')['unref']
const useAttrs: typeof import('vue')['useAttrs']
const useCssModule: typeof import('vue')['useCssModule']
const useCssVars: typeof import('vue')['useCssVars']
const useLink: typeof import('vue-router')['useLink']
const useRoute: typeof import('vue-router')['useRoute']
const useRouter: typeof import('vue-router')['useRouter']
const useSlots: typeof import('vue')['useSlots']
const watch: typeof import('vue')['watch']
const watchEffect: typeof import('vue')['watchEffect']
const watchPostEffect: typeof import('vue')['watchPostEffect']
const watchSyncEffect: typeof import('vue')['watchSyncEffect']
const EffectScope: typeof import('vue')['EffectScope'];
const acceptHMRUpdate: typeof import('pinia')['acceptHMRUpdate'];
const computed: typeof import('vue')['computed'];
const createApp: typeof import('vue')['createApp'];
const createPinia: typeof import('pinia')['createPinia'];
const customRef: typeof import('vue')['customRef'];
const defineAsyncComponent: typeof import('vue')['defineAsyncComponent'];
const defineComponent: typeof import('vue')['defineComponent'];
const defineStore: typeof import('pinia')['defineStore'];
const effectScope: typeof import('vue')['effectScope'];
const getActivePinia: typeof import('pinia')['getActivePinia'];
const getCurrentInstance: typeof import('vue')['getCurrentInstance'];
const getCurrentScope: typeof import('vue')['getCurrentScope'];
const h: typeof import('vue')['h'];
const inject: typeof import('vue')['inject'];
const isProxy: typeof import('vue')['isProxy'];
const isReactive: typeof import('vue')['isReactive'];
const isReadonly: typeof import('vue')['isReadonly'];
const isRef: typeof import('vue')['isRef'];
const mapActions: typeof import('pinia')['mapActions'];
const mapGetters: typeof import('pinia')['mapGetters'];
const mapState: typeof import('pinia')['mapState'];
const mapStores: typeof import('pinia')['mapStores'];
const mapWritableState: typeof import('pinia')['mapWritableState'];
const markRaw: typeof import('vue')['markRaw'];
const nextTick: typeof import('vue')['nextTick'];
const onActivated: typeof import('vue')['onActivated'];
const onBeforeMount: typeof import('vue')['onBeforeMount'];
const onBeforeRouteLeave: typeof import('vue-router')['onBeforeRouteLeave'];
const onBeforeRouteUpdate: typeof import('vue-router')['onBeforeRouteUpdate'];
const onBeforeUnmount: typeof import('vue')['onBeforeUnmount'];
const onBeforeUpdate: typeof import('vue')['onBeforeUpdate'];
const onDeactivated: typeof import('vue')['onDeactivated'];
const onErrorCaptured: typeof import('vue')['onErrorCaptured'];
const onMounted: typeof import('vue')['onMounted'];
const onRenderTracked: typeof import('vue')['onRenderTracked'];
const onRenderTriggered: typeof import('vue')['onRenderTriggered'];
const onScopeDispose: typeof import('vue')['onScopeDispose'];
const onServerPrefetch: typeof import('vue')['onServerPrefetch'];
const onUnmounted: typeof import('vue')['onUnmounted'];
const onUpdated: typeof import('vue')['onUpdated'];
const provide: typeof import('vue')['provide'];
const reactive: typeof import('vue')['reactive'];
const readonly: typeof import('vue')['readonly'];
const ref: typeof import('vue')['ref'];
const resolveComponent: typeof import('vue')['resolveComponent'];
const resolveDirective: typeof import('vue')['resolveDirective'];
const setActivePinia: typeof import('pinia')['setActivePinia'];
const setMapStoreSuffix: typeof import('pinia')['setMapStoreSuffix'];
const shallowReactive: typeof import('vue')['shallowReactive'];
const shallowReadonly: typeof import('vue')['shallowReadonly'];
const shallowRef: typeof import('vue')['shallowRef'];
const storeToRefs: typeof import('pinia')['storeToRefs'];
const toRaw: typeof import('vue')['toRaw'];
const toRef: typeof import('vue')['toRef'];
const toRefs: typeof import('vue')['toRefs'];
const triggerRef: typeof import('vue')['triggerRef'];
const unref: typeof import('vue')['unref'];
const useAttrs: typeof import('vue')['useAttrs'];
const useCssModule: typeof import('vue')['useCssModule'];
const useCssVars: typeof import('vue')['useCssVars'];
const useLink: typeof import('vue-router')['useLink'];
const useRoute: typeof import('vue-router')['useRoute'];
const useRouter: typeof import('vue-router')['useRouter'];
const useSlots: typeof import('vue')['useSlots'];
const watch: typeof import('vue')['watch'];
const watchEffect: typeof import('vue')['watchEffect'];
const watchPostEffect: typeof import('vue')['watchPostEffect'];
const watchSyncEffect: typeof import('vue')['watchSyncEffect'];
}

View File

@@ -69,11 +69,7 @@ export function uploadBidFileNewVersion(data: {
});
}
export function submitBidFileTask(data: {
runJobId: string;
to?: number;
comment?: string;
}) {
export function submitBidFileTask(data: { runJobId: string; to?: number; comment?: string }) {
return request({
url: '/purchase/purchasingbidfile/submit',
method: 'post',
@@ -121,13 +117,7 @@ export function getFlowPurchaseDetail(purchaseId: string) {
});
}
export function tempStoreBidFile(data: {
purchaseId: string;
fileId?: string;
fileName?: string;
fileUrl?: string;
comment?: string;
}) {
export function tempStoreBidFile(data: { purchaseId: string; fileId?: string; fileName?: string; fileUrl?: string; comment?: string }) {
return request({
url: '/purchase/purchasingbidfile/tempStore',
method: 'post',

View File

@@ -31,7 +31,7 @@ const init = () => {
let flowInstId = props.currJob.flowInstId;
let runJobId = props.currJob.id;
src.value = props.currElTab.path + `?token=${token}&tenantId=${tenantId}&flowInstId=${flowInstId}&runJobId=${runJobId}`;
console.log(src.value)
console.log(src.value);
};
function handleJob(jobBtn) {

View File

@@ -20,7 +20,9 @@
<el-descriptions :column="1" border size="small">
<el-descriptions-item label="采购编号">{{ applyData.purchaseNo || '-' }}</el-descriptions-item>
<el-descriptions-item label="项目名称">{{ applyData.projectName || '-' }}</el-descriptions-item>
<el-descriptions-item label="采购金额">{{ applyData.budget ? Number(applyData.budget).toLocaleString() + ' 元' : '-' }}</el-descriptions-item>
<el-descriptions-item label="采购金额">{{
applyData.budget ? Number(applyData.budget).toLocaleString() + ' 元' : '-'
}}</el-descriptions-item>
<el-descriptions-item label="招标代理">{{ applyData.agentName || '-' }}</el-descriptions-item>
<el-descriptions-item label="审批状态">
<el-tag v-if="applyData.fileFlowStatus === '0'" type="primary">运行中</el-tag>

View File

@@ -19,11 +19,7 @@
<el-divider content-position="left">采购相关文件补充上传</el-divider>
<el-alert
:type="fileTypeAlertType"
:closable="false"
style="margin-bottom: 16px"
>
<el-alert :type="fileTypeAlertType" :closable="false" style="margin-bottom: 16px">
<template #title>
<span v-if="requiredFileType">{{ requiredFileTypeName }}必传</span>
<span v-else>当前采购方式无需补充材料</span>

View File

@@ -20,7 +20,9 @@
<el-descriptions :column="1" border size="small">
<el-descriptions-item label="采购编号">{{ applyData.purchaseNo || '-' }}</el-descriptions-item>
<el-descriptions-item label="项目名称">{{ applyData.projectName || '-' }}</el-descriptions-item>
<el-descriptions-item label="采购金额">{{ applyData.budget ? Number(applyData.budget).toLocaleString() + ' 元' : '-' }}</el-descriptions-item>
<el-descriptions-item label="采购金额">{{
applyData.budget ? Number(applyData.budget).toLocaleString() + ' 元' : '-'
}}</el-descriptions-item>
<el-descriptions-item label="采购方式">{{ purchaseTypeLabel || '-' }}</el-descriptions-item>
<el-descriptions-item label="补充状态">
<el-tag v-if="applyData.supplementFlowStatus === '1'" type="success">已完成</el-tag>

View File

@@ -1586,37 +1586,16 @@ watch(
// 下载模版:统一走后端接口,按原始文件下载(避免前端静态资源被当成 HTML 返回)
const downloadTemplate = async (type: string) => {
// 优先从后台模版列表获取模版名称
// 从后台模版列表获取模版名称templateName 包含原始文件扩展名)
const backendTemplate = templateList.value.find((t: any) => t.templateType === type);
let displayName = '';
if (backendTemplate?.templateTitle) {
displayName = backendTemplate.templateTitle;
} else {
// 后备:使用本地硬编码的名称
const templateMap: Record<string, string> = {
business_negotiation: '商务洽谈表.doc',
market_purchase_minutes: '部门自行采购市场采购纪要.doc',
inquiry: '部门采购询价模版.doc',
direct_select: '服务商城项目需求模板(直选).doc',
public_select: '服务商城项目需求模板(公开比选).doc',
invite_select: '服务商城项目需求模板(邀请比选).doc',
purchase_requirement: '采购需求填报模板.doc',
import_application: '进口产品申请及专家论证意见表.doc',
single_source: '单一来源论专家证附件.docx',
feasibility_report: '项目可行性论证报告模板.doc',
gov_pur_int: '政府采购意向申请表.doc',
};
displayName = templateMap[type] || '';
}
if (!displayName) {
useMessage().error('模版不存在');
if (!backendTemplate?.templateName) {
useMessage().error('模版不存在或未维护模版文件,请联系管理员');
return;
}
try {
await other.downBlobFile(`/purchase/purchasingtemplate/download?type=${encodeURIComponent(type)}`, {}, displayName);
await other.downBlobFile(`/purchase/purchasingtemplate/download?type=${encodeURIComponent(type)}`, {}, backendTemplate.templateName);
useMessage().success('模版下载成功');
} catch (err) {
useMessage().error('模版下载失败,请联系管理员维护模版文件');

View File

@@ -232,13 +232,7 @@
<!-- 指定一人 -->
<el-form-item v-if="representorSelectMode === 'designate'" label="选择参与人">
<el-select
v-model="selectedRepresentor"
placeholder="请选择参与人"
filterable
:disabled="isViewMode"
style="width: 300px"
>
<el-select v-model="selectedRepresentor" placeholder="请选择参与人" filterable :disabled="isViewMode" style="width: 300px">
<el-option
v-for="member in deptMembers"
:key="member.teacherNo"
@@ -278,9 +272,7 @@
<!-- 已选中的参与人 -->
<el-form-item v-if="currentRepresentor" label="已选中参与人">
<el-tag type="success" size="large">
{{ currentRepresentor.realName }} ({{ currentRepresentor.teacherNo }})
</el-tag>
<el-tag type="success" size="large"> {{ currentRepresentor.realName }} ({{ currentRepresentor.teacherNo }}) </el-tag>
</el-form-item>
<!-- 参与人身份 -->
@@ -293,12 +285,7 @@
<!-- 保存按钮 -->
<el-form-item>
<el-button
type="primary"
:loading="saveRepresentorLoading"
:disabled="!canSaveRepresentor || isViewMode"
@click="handleSaveRepresentor"
>
<el-button type="primary" :loading="saveRepresentorLoading" :disabled="!canSaveRepresentor || isViewMode" @click="handleSaveRepresentor">
保存参与人信息
</el-button>
</el-form-item>
@@ -492,7 +479,7 @@ const effectivePurchaseId = computed(() => {
if (props.currJob?.orderId) {
return String(props.currJob.orderId);
}
return route.query.id as string || route.query.purchaseId as string || '';
return (route.query.id as string) || (route.query.purchaseId as string) || '';
});
// 是否可以提交(非查看模式即可提交,不强制要求上传文件)
@@ -724,7 +711,7 @@ const handleFlowSave = async () => {
fileName: uploadForm.fileName || '',
fileUrl: uploadForm.fileUrl || '',
comment: uploadForm.comment || '',
flowTarget: flowTarget.value || ''
flowTarget: flowTarget.value || '',
};
const res = await tempStoreBidFile(params);
@@ -735,8 +722,6 @@ const handleFlowSave = async () => {
currElTabIsSave(props.currJob, props.currElTab.id, true, emit);
}
return true;
} else {
ElMessage.error(res.msg || '暂存失败');
@@ -783,10 +768,7 @@ const handleRandomSelect = async () => {
try {
randomSelectLoading.value = true;
const res = await randomSelectRepresentor(
effectivePurchaseId.value,
randomCandidates.value.join(',')
);
const res = await randomSelectRepresentor(effectivePurchaseId.value, randomCandidates.value.join(','));
if (res.code === 0 && res.data) {
currentRepresentor.value = res.data;
ElMessage.success(`随机抽取成功:${res.data.realName}`);
@@ -816,12 +798,7 @@ const handleSaveRepresentor = async () => {
let res: any;
if (representorSelectMode.value === 'designate') {
res = await saveRepresentor(
Number(effectivePurchaseId.value),
selectedRepresentor.value,
undefined,
representorType.value
);
res = await saveRepresentor(Number(effectivePurchaseId.value), selectedRepresentor.value, undefined, representorType.value);
} else {
res = await saveRepresentor(
Number(effectivePurchaseId.value),

View File

@@ -287,15 +287,11 @@ const handleSendToAgent = async () => {
// 确认弹窗
try {
await ElMessageBox.confirm(
'是否确认发送至招标代理启动招标文件审核流程?',
'确认发送',
{
await ElMessageBox.confirm('是否确认发送至招标代理启动招标文件审核流程?', '确认发送', {
confirmButtonText: '确认',
cancelButtonText: '取消',
type: 'warning',
}
);
});
} catch {
// 用户取消
return;

View File

@@ -283,10 +283,18 @@
<el-tag v-if="scope.row.fileFlowStatus === '0'" type="primary" class="status-tag-clickable" @click="handleShowDocAudit(scope.row)"
>运行中
</el-tag>
<el-tag v-else-if="scope.row.fileFlowStatus === '1'" type="success" class="status-tag-clickable" @click="handleShowDocAudit(scope.row)"
<el-tag
v-else-if="scope.row.fileFlowStatus === '1'"
type="success"
class="status-tag-clickable"
@click="handleShowDocAudit(scope.row)"
>完成
</el-tag>
<el-tag v-else-if="scope.row.fileFlowStatus === '2'" type="danger" class="status-tag-clickable" @click="handleShowDocAudit(scope.row)"
<el-tag
v-else-if="scope.row.fileFlowStatus === '2'"
type="danger"
class="status-tag-clickable"
@click="handleShowDocAudit(scope.row)"
>作废
</el-tag>
<el-tag v-else-if="scope.row.fileFlowStatus === '3'" type="info" class="status-tag-clickable" @click="handleShowDocAudit(scope.row)"

View File

@@ -29,12 +29,7 @@
</span>
</div>
</template>
<el-alert
v-if="requiredFileTypeName"
type="info"
:closable="false"
style="margin-bottom: 16px"
>
<el-alert v-if="requiredFileTypeName" type="info" :closable="false" style="margin-bottom: 16px">
<template #title>
<span>{{ requiredFileTypeName }}</span>
</template>

View File

@@ -129,14 +129,29 @@
</template>
<script setup lang="ts" name="ActivityInfoSubSignup">
import { reactive, ref, onMounted, computed } from 'vue'
import { BasicTableProps, useTable } from "/@/hooks/table";
import { fetchList, delObj, getActivityInfoList, getActivityInfoSubList } from "/@/api/stuwork/activityinfosubsignup";
import { makeExportActivitySignUpDetailTask } from "/@/api/stuwork/file";
import { useMessage, useMessageBox } from "/@/hooks/message";
import TableColumnControl from '/@/components/TableColumnControl/index.vue'
import { List, Trophy, Document, Files, CreditCard, Avatar, OfficeBuilding, Grid, UserFilled, Phone, Setting, Menu, Search, Document as DocIcon } from '@element-plus/icons-vue'
import { useTableColumnControl } from '/@/hooks/tableColumn'
import { reactive, ref, onMounted, computed } from 'vue';
import { BasicTableProps, useTable } from '/@/hooks/table';
import { fetchList, delObj, getActivityInfoList, getActivityInfoSubList } from '/@/api/stuwork/activityinfosubsignup';
import { makeExportActivitySignUpDetailTask } from '/@/api/stuwork/file';
import { useMessage, useMessageBox } from '/@/hooks/message';
import TableColumnControl from '/@/components/TableColumnControl/index.vue';
import {
List,
Trophy,
Document,
Files,
CreditCard,
Avatar,
OfficeBuilding,
Grid,
UserFilled,
Phone,
Setting,
Menu,
Search,
Document as DocIcon,
} from '@element-plus/icons-vue';
import { useTableColumnControl } from '/@/hooks/tableColumn';
// 定义变量内容
const searchFormRef = ref();
@@ -230,16 +245,16 @@ const handleDelete = async (row: any) => {
// 导出
const handleExport = async () => {
exportLoading.value = true
exportLoading.value = true;
try {
await makeExportActivitySignUpDetailTask(state.queryForm)
useMessage().success('导出任务已创建,请在文件管理中下载')
await makeExportActivitySignUpDetailTask(state.queryForm);
useMessage().success('导出任务已创建,请在文件管理中下载');
} catch (err: any) {
useMessage().error(err.msg || '导出失败')
useMessage().error(err.msg || '导出失败');
} finally {
exportLoading.value = false
}
exportLoading.value = false;
}
};
// 获取活动主题列表
const getActivityInfoListData = async () => {

View File

@@ -269,19 +269,35 @@
</template>
<script setup lang="ts" name="ClassFeeLog">
import { reactive, ref, onMounted, computed } from 'vue'
import { BasicTableProps, useTable } from "/@/hooks/table";
import { fetchList, delObj, getSummary } from "/@/api/stuwork/classfeelog";
import { makeExportClassFundTask } from "/@/api/stuwork/file";
import { getDeptList } from "/@/api/basic/basicclass";
import { queryAllSchoolYear } from "/@/api/basic/basicyear";
import { getClassListByRole } from "/@/api/basic/basicclass";
import { getDicts } from "/@/api/admin/dict";
import { useMessage, useMessageBox } from "/@/hooks/message";
import TableColumnControl from '/@/components/TableColumnControl/index.vue'
import FormDialog from './form.vue'
import { List, Calendar, Clock, OfficeBuilding, Grid, Collection, Money, User, Document, Setting, Menu, Search, FolderAdd, EditPen, DataAnalysis } from '@element-plus/icons-vue'
import { useTableColumnControl } from '/@/hooks/tableColumn'
import { reactive, ref, onMounted, computed } from 'vue';
import { BasicTableProps, useTable } from '/@/hooks/table';
import { fetchList, delObj, getSummary } from '/@/api/stuwork/classfeelog';
import { makeExportClassFundTask } from '/@/api/stuwork/file';
import { getDeptList } from '/@/api/basic/basicclass';
import { queryAllSchoolYear } from '/@/api/basic/basicyear';
import { getClassListByRole } from '/@/api/basic/basicclass';
import { getDicts } from '/@/api/admin/dict';
import { useMessage, useMessageBox } from '/@/hooks/message';
import TableColumnControl from '/@/components/TableColumnControl/index.vue';
import FormDialog from './form.vue';
import {
List,
Calendar,
Clock,
OfficeBuilding,
Grid,
Collection,
Money,
User,
Document,
Setting,
Menu,
Search,
FolderAdd,
EditPen,
DataAnalysis,
} from '@element-plus/icons-vue';
import { useTableColumnControl } from '/@/hooks/tableColumn';
// 定义变量内容
const formDialogRef = ref();
@@ -387,12 +403,12 @@ const handleViewAttachment = (row: any) => {
// 导出
const handleExport = async () => {
try {
await makeExportClassFundTask(state.queryForm)
useMessage().success('导出任务已创建,请在文件管理中下载')
await makeExportClassFundTask(state.queryForm);
useMessage().success('导出任务已创建,请在文件管理中下载');
} catch (err: any) {
useMessage().error(err.msg || '导出失败')
}
useMessage().error(err.msg || '导出失败');
}
};
// 编辑
const handleEdit = (row: any) => {

View File

@@ -224,19 +224,33 @@
</template>
<script setup lang="ts" name="ClassSafeEdu">
import { reactive, ref, onMounted } from 'vue'
import { BasicTableProps, useTable } from "/@/hooks/table";
import { fetchList, delObj, statisticsByYearTerm } from "/@/api/stuwork/classsafeedu";
import { makeExportSafetyEducationTask } from "/@/api/stuwork/file";
import { getClassListByRole } from "/@/api/basic/basicclass";
import { queryAllSchoolYear } from "/@/api/basic/basicyear";
import { getDicts } from "/@/api/admin/dict";
import { useMessage, useMessageBox } from "/@/hooks/message";
import TableColumnControl from '/@/components/TableColumnControl/index.vue'
import FormDialog from './form.vue'
import DetailDialog from './detail.vue'
import { List, Calendar, Clock, Grid, Trophy, User, Location, UserFilled, Setting, Menu, Search, Document, DataAnalysis } from '@element-plus/icons-vue'
import { useTableColumnControl } from '/@/hooks/tableColumn'
import { reactive, ref, onMounted } from 'vue';
import { BasicTableProps, useTable } from '/@/hooks/table';
import { fetchList, delObj, statisticsByYearTerm } from '/@/api/stuwork/classsafeedu';
import { makeExportSafetyEducationTask } from '/@/api/stuwork/file';
import { getClassListByRole } from '/@/api/basic/basicclass';
import { queryAllSchoolYear } from '/@/api/basic/basicyear';
import { getDicts } from '/@/api/admin/dict';
import { useMessage, useMessageBox } from '/@/hooks/message';
import TableColumnControl from '/@/components/TableColumnControl/index.vue';
import FormDialog from './form.vue';
import DetailDialog from './detail.vue';
import {
List,
Calendar,
Clock,
Grid,
Trophy,
User,
Location,
UserFilled,
Setting,
Menu,
Search,
Document,
DataAnalysis,
} from '@element-plus/icons-vue';
import { useTableColumnControl } from '/@/hooks/tableColumn';
// 定义变量内容
const formDialogRef = ref();
@@ -333,12 +347,12 @@ const handleViewImage = (url: string) => {
// 导出
const handleExport = async () => {
try {
await makeExportSafetyEducationTask(state.queryForm)
useMessage().success('导出任务已创建,请在文件管理中下载')
await makeExportSafetyEducationTask(state.queryForm);
useMessage().success('导出任务已创建,请在文件管理中下载');
} catch (err: any) {
useMessage().error(err.msg || '导出失败')
}
useMessage().error(err.msg || '导出失败');
}
};
// 查看详情
const handleView = (row: any) => {

View File

@@ -169,7 +169,14 @@
</el-select>
</el-form-item>
<el-form-item label="月份" prop="month">
<el-date-picker v-model="importForm.month" type="month" placeholder="选择月份" format="YYYY-MM" value-format="YYYY-MM" style="width: 100%" />
<el-date-picker
v-model="importForm.month"
type="month"
placeholder="选择月份"
format="YYYY-MM"
value-format="YYYY-MM"
style="width: 100%"
/>
</el-form-item>
<el-form-item>
<el-button icon="Download" type="success" @click="handleDownloadTemplate"> 下载模板 </el-button>

View File

@@ -183,16 +183,16 @@
</template>
<script setup lang="ts" name="DormHygieneMonthly">
import { ref, reactive, defineAsyncComponent, computed, onMounted, nextTick } from 'vue'
import { useRoute } from 'vue-router'
import { BasicTableProps, useTable } from "/@/hooks/table";
import { fetchList, putObj, delObjs } from "/@/api/stuwork/dormreform";
import { makeExportDormReformTask } from "/@/api/stuwork/file";
import { getBuildingList } from "/@/api/stuwork/dormbuilding";
import { getDormRoomDataByBuildingNo } from "/@/api/stuwork/dormroom";
import { useMessage, useMessageBox } from "/@/hooks/message";
import { getDicts } from "/@/api/admin/dict";
import TableColumnControl from '/@/components/TableColumnControl/index.vue'
import { ref, reactive, defineAsyncComponent, computed, onMounted, nextTick } from 'vue';
import { useRoute } from 'vue-router';
import { BasicTableProps, useTable } from '/@/hooks/table';
import { fetchList, putObj, delObjs } from '/@/api/stuwork/dormreform';
import { makeExportDormReformTask } from '/@/api/stuwork/file';
import { getBuildingList } from '/@/api/stuwork/dormbuilding';
import { getDormRoomDataByBuildingNo } from '/@/api/stuwork/dormroom';
import { useMessage, useMessageBox } from '/@/hooks/message';
import { getDicts } from '/@/api/admin/dict';
import TableColumnControl from '/@/components/TableColumnControl/index.vue';
// 引入组件
const FormDialog = defineAsyncComponent(() => import('./form.vue'));
@@ -347,12 +347,12 @@ const handleDelete = async (row: any) => {
// 导出
const handleExport = async () => {
try {
await makeExportDormReformTask(searchForm)
useMessage().success('导出任务已创建,请在文件管理中下载')
await makeExportDormReformTask(searchForm);
useMessage().success('导出任务已创建,请在文件管理中下载');
} catch (err: any) {
useMessage().error(err.msg || '导出失败')
}
useMessage().error(err.msg || '导出失败');
}
};
// 格式化整改结果
const formatReformStatus = (value: string | number) => {

View File

@@ -163,16 +163,16 @@
</template>
<script setup lang="ts" name="DormRoom">
import { ref, reactive, defineAsyncComponent, onMounted, computed, nextTick } from 'vue'
import { useRoute } from 'vue-router'
import { BasicTableProps, useTable } from "/@/hooks/table";
import { fetchList, delObj, editDept } from "/@/api/stuwork/dormroom";
import { makeExportDormRoomTask } from "/@/api/stuwork/file";
import { getDeptList } from "/@/api/basic/basicclass";
import { getBuildingList } from "/@/api/stuwork/dormbuilding";
import { useMessage, useMessageBox } from "/@/hooks/message";
import { getDicts } from "/@/api/admin/dict";
import TableColumnControl from '/@/components/TableColumnControl/index.vue'
import { ref, reactive, defineAsyncComponent, onMounted, computed, nextTick } from 'vue';
import { useRoute } from 'vue-router';
import { BasicTableProps, useTable } from '/@/hooks/table';
import { fetchList, delObj, editDept } from '/@/api/stuwork/dormroom';
import { makeExportDormRoomTask } from '/@/api/stuwork/file';
import { getDeptList } from '/@/api/basic/basicclass';
import { getBuildingList } from '/@/api/stuwork/dormbuilding';
import { useMessage, useMessageBox } from '/@/hooks/message';
import { getDicts } from '/@/api/admin/dict';
import TableColumnControl from '/@/components/TableColumnControl/index.vue';
// 引入组件
const FormDialog = defineAsyncComponent(() => import('./form.vue'));
@@ -321,12 +321,12 @@ const confirmDeptAssign = async () => {
// 导出
const handleExport = async () => {
try {
await makeExportDormRoomTask(searchForm)
useMessage().success('导出任务已创建,请在文件管理中下载')
await makeExportDormRoomTask(searchForm);
useMessage().success('导出任务已创建,请在文件管理中下载');
} catch (err: any) {
useMessage().error(err.msg || '导出失败')
}
useMessage().error(err.msg || '导出失败');
}
};
// 获取学院列表
const getDeptListData = async () => {

View File

@@ -3,13 +3,7 @@
<div class="layout-padding-auto layout-padding-view">
<!-- 顶部工具栏 -->
<div class="mb10">
<el-button
icon="Download"
type="primary"
plain
@click="handleExport">
导出
</el-button>
<el-button icon="Download" type="primary" plain @click="handleExport"> 导出 </el-button>
</div>
<!-- 表格 -->
<el-table
@@ -17,7 +11,8 @@
v-loading="state.loading"
border
:cell-style="tableStyle.cellStyle"
:header-cell-style="tableStyle.headerCellStyle">
:header-cell-style="tableStyle.headerCellStyle"
>
<el-table-column type="index" label="序号" width="60" align="center" />
<el-table-column prop="deptName" label="学院" show-overflow-tooltip align="center" />
<el-table-column prop="classNo" label="班号" show-overflow-tooltip align="center" />
@@ -29,13 +24,7 @@
<el-table-column prop="teacherPhone" label="班主任电话" show-overflow-tooltip align="center" />
<el-table-column label="操作" width="150" align="center" fixed="right">
<template #default="scope">
<el-button
icon="View"
text
type="primary"
@click="handleView(scope.row)">
查看
</el-button>
<el-button icon="View" text type="primary" @click="handleView(scope.row)"> 查看 </el-button>
</template>
</el-table-column>
</el-table>
@@ -44,11 +33,11 @@
</template>
<script setup lang="ts" name="DormAbnormal">
import { reactive, onMounted } from 'vue'
import { BasicTableProps, useTable } from "/@/hooks/table";
import { queryStudentAbnormal } from "/@/api/stuwork/dormroomstudent";
import { makeExportDormStudentAbnormalTask } from "/@/api/stuwork/file";
import { useMessage } from "/@/hooks/message";
import { reactive, onMounted } from 'vue';
import { BasicTableProps, useTable } from '/@/hooks/table';
import { queryStudentAbnormal } from '/@/api/stuwork/dormroomstudent';
import { makeExportDormStudentAbnormalTask } from '/@/api/stuwork/file';
import { useMessage } from '/@/hooks/message';
// 配置 useTable
const state: BasicTableProps = reactive<BasicTableProps>({
@@ -94,12 +83,12 @@ const handleView = (row: any) => {
// 导出
const handleExport = async () => {
try {
await makeExportDormStudentAbnormalTask()
useMessage().success('导出任务已创建,请在文件管理中下载')
await makeExportDormStudentAbnormalTask();
useMessage().success('导出任务已创建,请在文件管理中下载');
} catch (err: any) {
useMessage().error(err?.msg || '导出失败')
}
useMessage().error(err?.msg || '导出失败');
}
};
// 初始化
onMounted(() => {

View File

@@ -191,20 +191,16 @@
</template>
<script setup lang="ts" name="DormRoomStudent">
import { reactive, ref, onMounted, computed, nextTick } from 'vue'
import { useRoute } from 'vue-router'
import { BasicTableProps, useTable } from "/@/hooks/table";
import { fetchList, delObjs } from "/@/api/stuwork/dormroomstudent";
import {
makeExportDormStudentTask,
makeExportDormStudentAbnormalTask,
makeExportDormStatisticsTask
} from "/@/api/stuwork/file";
import { getDeptList } from "/@/api/basic/basicclass";
import { getBuildingList } from "/@/api/stuwork/dormbuilding";
import { fetchDormRoomTreeList } from "/@/api/stuwork/dormroom";
import { useMessage, useMessageBox } from "/@/hooks/message";
import TableColumnControl from '/@/components/TableColumnControl/index.vue'
import { reactive, ref, onMounted, computed, nextTick } from 'vue';
import { useRoute } from 'vue-router';
import { BasicTableProps, useTable } from '/@/hooks/table';
import { fetchList, delObjs } from '/@/api/stuwork/dormroomstudent';
import { makeExportDormStudentTask, makeExportDormStudentAbnormalTask, makeExportDormStatisticsTask } from '/@/api/stuwork/file';
import { getDeptList } from '/@/api/basic/basicclass';
import { getBuildingList } from '/@/api/stuwork/dormbuilding';
import { fetchDormRoomTreeList } from '/@/api/stuwork/dormroom';
import { useMessage, useMessageBox } from '/@/hooks/message';
import TableColumnControl from '/@/components/TableColumnControl/index.vue';
import FormDialog from './form.vue';
import TransferDialog from './transfer.vue';
import SwapDialog from './swap.vue';
@@ -379,14 +375,14 @@ const handleExport = async () => {
roomNo: searchForm.roomNo || searchForm.roomNoInput,
classNo: searchForm.classNo,
stuNo: searchForm.stuNo,
realName: searchForm.realName
}
await makeExportDormStatisticsTask(params)
useMessage().success('导出任务已创建,请在文件管理中下载')
realName: searchForm.realName,
};
await makeExportDormStatisticsTask(params);
useMessage().success('导出任务已创建,请在文件管理中下载');
} catch (err: any) {
useMessage().error(err?.msg || '导出失败')
}
useMessage().error(err?.msg || '导出失败');
}
};
// 名单导出:住宿学生名单导出
const handleExportList = async () => {
@@ -399,14 +395,14 @@ const handleExportList = async () => {
roomNo: searchForm.roomNo || searchForm.roomNoInput,
classNo: searchForm.classNo,
stuNo: searchForm.stuNo,
realName: searchForm.realName
}
await makeExportDormStudentTask(params)
useMessage().success('导出任务已创建,请在文件管理中下载')
realName: searchForm.realName,
};
await makeExportDormStudentTask(params);
useMessage().success('导出任务已创建,请在文件管理中下载');
} catch (err: any) {
useMessage().error(err?.msg || '导出失败')
}
useMessage().error(err?.msg || '导出失败');
}
};
// 编辑(与转宿共用接口 edit修改房间/床位/是否舍长)
const handleEdit = (row: any) => {

View File

@@ -170,20 +170,7 @@ import { queryAllSchoolYear } from '/@/api/basic/basicyear';
import { getDicts } from '/@/api/admin/dict';
import { useMessage, useMessageBox } from '/@/hooks/message';
import TableColumnControl from '/@/components/TableColumnControl/index.vue';
import {
List,
Calendar,
Clock,
OfficeBuilding,
Grid,
UserFilled,
Trophy,
EditPen,
Setting,
Menu,
Search,
Document,
} from '@element-plus/icons-vue';
import { List, Calendar, Clock, OfficeBuilding, Grid, UserFilled, Trophy, EditPen, Setting, Menu, Search, Document } from '@element-plus/icons-vue';
import { useTableColumnControl } from '/@/hooks/tableColumn';
import FormDialog from './form.vue';