更新采购申请文件模版下载
This commit is contained in:
140
auto-imports.d.ts
vendored
140
auto-imports.d.ts
vendored
@@ -1,73 +1,73 @@
|
|||||||
// Generated by 'unplugin-auto-import'
|
// Generated by 'unplugin-auto-import'
|
||||||
export {}
|
export {};
|
||||||
declare global {
|
declare global {
|
||||||
const EffectScope: typeof import('vue')['EffectScope']
|
const EffectScope: typeof import('vue')['EffectScope'];
|
||||||
const acceptHMRUpdate: typeof import('pinia')['acceptHMRUpdate']
|
const acceptHMRUpdate: typeof import('pinia')['acceptHMRUpdate'];
|
||||||
const computed: typeof import('vue')['computed']
|
const computed: typeof import('vue')['computed'];
|
||||||
const createApp: typeof import('vue')['createApp']
|
const createApp: typeof import('vue')['createApp'];
|
||||||
const createPinia: typeof import('pinia')['createPinia']
|
const createPinia: typeof import('pinia')['createPinia'];
|
||||||
const customRef: typeof import('vue')['customRef']
|
const customRef: typeof import('vue')['customRef'];
|
||||||
const defineAsyncComponent: typeof import('vue')['defineAsyncComponent']
|
const defineAsyncComponent: typeof import('vue')['defineAsyncComponent'];
|
||||||
const defineComponent: typeof import('vue')['defineComponent']
|
const defineComponent: typeof import('vue')['defineComponent'];
|
||||||
const defineStore: typeof import('pinia')['defineStore']
|
const defineStore: typeof import('pinia')['defineStore'];
|
||||||
const effectScope: typeof import('vue')['effectScope']
|
const effectScope: typeof import('vue')['effectScope'];
|
||||||
const getActivePinia: typeof import('pinia')['getActivePinia']
|
const getActivePinia: typeof import('pinia')['getActivePinia'];
|
||||||
const getCurrentInstance: typeof import('vue')['getCurrentInstance']
|
const getCurrentInstance: typeof import('vue')['getCurrentInstance'];
|
||||||
const getCurrentScope: typeof import('vue')['getCurrentScope']
|
const getCurrentScope: typeof import('vue')['getCurrentScope'];
|
||||||
const h: typeof import('vue')['h']
|
const h: typeof import('vue')['h'];
|
||||||
const inject: typeof import('vue')['inject']
|
const inject: typeof import('vue')['inject'];
|
||||||
const isProxy: typeof import('vue')['isProxy']
|
const isProxy: typeof import('vue')['isProxy'];
|
||||||
const isReactive: typeof import('vue')['isReactive']
|
const isReactive: typeof import('vue')['isReactive'];
|
||||||
const isReadonly: typeof import('vue')['isReadonly']
|
const isReadonly: typeof import('vue')['isReadonly'];
|
||||||
const isRef: typeof import('vue')['isRef']
|
const isRef: typeof import('vue')['isRef'];
|
||||||
const mapActions: typeof import('pinia')['mapActions']
|
const mapActions: typeof import('pinia')['mapActions'];
|
||||||
const mapGetters: typeof import('pinia')['mapGetters']
|
const mapGetters: typeof import('pinia')['mapGetters'];
|
||||||
const mapState: typeof import('pinia')['mapState']
|
const mapState: typeof import('pinia')['mapState'];
|
||||||
const mapStores: typeof import('pinia')['mapStores']
|
const mapStores: typeof import('pinia')['mapStores'];
|
||||||
const mapWritableState: typeof import('pinia')['mapWritableState']
|
const mapWritableState: typeof import('pinia')['mapWritableState'];
|
||||||
const markRaw: typeof import('vue')['markRaw']
|
const markRaw: typeof import('vue')['markRaw'];
|
||||||
const nextTick: typeof import('vue')['nextTick']
|
const nextTick: typeof import('vue')['nextTick'];
|
||||||
const onActivated: typeof import('vue')['onActivated']
|
const onActivated: typeof import('vue')['onActivated'];
|
||||||
const onBeforeMount: typeof import('vue')['onBeforeMount']
|
const onBeforeMount: typeof import('vue')['onBeforeMount'];
|
||||||
const onBeforeRouteLeave: typeof import('vue-router')['onBeforeRouteLeave']
|
const onBeforeRouteLeave: typeof import('vue-router')['onBeforeRouteLeave'];
|
||||||
const onBeforeRouteUpdate: typeof import('vue-router')['onBeforeRouteUpdate']
|
const onBeforeRouteUpdate: typeof import('vue-router')['onBeforeRouteUpdate'];
|
||||||
const onBeforeUnmount: typeof import('vue')['onBeforeUnmount']
|
const onBeforeUnmount: typeof import('vue')['onBeforeUnmount'];
|
||||||
const onBeforeUpdate: typeof import('vue')['onBeforeUpdate']
|
const onBeforeUpdate: typeof import('vue')['onBeforeUpdate'];
|
||||||
const onDeactivated: typeof import('vue')['onDeactivated']
|
const onDeactivated: typeof import('vue')['onDeactivated'];
|
||||||
const onErrorCaptured: typeof import('vue')['onErrorCaptured']
|
const onErrorCaptured: typeof import('vue')['onErrorCaptured'];
|
||||||
const onMounted: typeof import('vue')['onMounted']
|
const onMounted: typeof import('vue')['onMounted'];
|
||||||
const onRenderTracked: typeof import('vue')['onRenderTracked']
|
const onRenderTracked: typeof import('vue')['onRenderTracked'];
|
||||||
const onRenderTriggered: typeof import('vue')['onRenderTriggered']
|
const onRenderTriggered: typeof import('vue')['onRenderTriggered'];
|
||||||
const onScopeDispose: typeof import('vue')['onScopeDispose']
|
const onScopeDispose: typeof import('vue')['onScopeDispose'];
|
||||||
const onServerPrefetch: typeof import('vue')['onServerPrefetch']
|
const onServerPrefetch: typeof import('vue')['onServerPrefetch'];
|
||||||
const onUnmounted: typeof import('vue')['onUnmounted']
|
const onUnmounted: typeof import('vue')['onUnmounted'];
|
||||||
const onUpdated: typeof import('vue')['onUpdated']
|
const onUpdated: typeof import('vue')['onUpdated'];
|
||||||
const provide: typeof import('vue')['provide']
|
const provide: typeof import('vue')['provide'];
|
||||||
const reactive: typeof import('vue')['reactive']
|
const reactive: typeof import('vue')['reactive'];
|
||||||
const readonly: typeof import('vue')['readonly']
|
const readonly: typeof import('vue')['readonly'];
|
||||||
const ref: typeof import('vue')['ref']
|
const ref: typeof import('vue')['ref'];
|
||||||
const resolveComponent: typeof import('vue')['resolveComponent']
|
const resolveComponent: typeof import('vue')['resolveComponent'];
|
||||||
const resolveDirective: typeof import('vue')['resolveDirective']
|
const resolveDirective: typeof import('vue')['resolveDirective'];
|
||||||
const setActivePinia: typeof import('pinia')['setActivePinia']
|
const setActivePinia: typeof import('pinia')['setActivePinia'];
|
||||||
const setMapStoreSuffix: typeof import('pinia')['setMapStoreSuffix']
|
const setMapStoreSuffix: typeof import('pinia')['setMapStoreSuffix'];
|
||||||
const shallowReactive: typeof import('vue')['shallowReactive']
|
const shallowReactive: typeof import('vue')['shallowReactive'];
|
||||||
const shallowReadonly: typeof import('vue')['shallowReadonly']
|
const shallowReadonly: typeof import('vue')['shallowReadonly'];
|
||||||
const shallowRef: typeof import('vue')['shallowRef']
|
const shallowRef: typeof import('vue')['shallowRef'];
|
||||||
const storeToRefs: typeof import('pinia')['storeToRefs']
|
const storeToRefs: typeof import('pinia')['storeToRefs'];
|
||||||
const toRaw: typeof import('vue')['toRaw']
|
const toRaw: typeof import('vue')['toRaw'];
|
||||||
const toRef: typeof import('vue')['toRef']
|
const toRef: typeof import('vue')['toRef'];
|
||||||
const toRefs: typeof import('vue')['toRefs']
|
const toRefs: typeof import('vue')['toRefs'];
|
||||||
const triggerRef: typeof import('vue')['triggerRef']
|
const triggerRef: typeof import('vue')['triggerRef'];
|
||||||
const unref: typeof import('vue')['unref']
|
const unref: typeof import('vue')['unref'];
|
||||||
const useAttrs: typeof import('vue')['useAttrs']
|
const useAttrs: typeof import('vue')['useAttrs'];
|
||||||
const useCssModule: typeof import('vue')['useCssModule']
|
const useCssModule: typeof import('vue')['useCssModule'];
|
||||||
const useCssVars: typeof import('vue')['useCssVars']
|
const useCssVars: typeof import('vue')['useCssVars'];
|
||||||
const useLink: typeof import('vue-router')['useLink']
|
const useLink: typeof import('vue-router')['useLink'];
|
||||||
const useRoute: typeof import('vue-router')['useRoute']
|
const useRoute: typeof import('vue-router')['useRoute'];
|
||||||
const useRouter: typeof import('vue-router')['useRouter']
|
const useRouter: typeof import('vue-router')['useRouter'];
|
||||||
const useSlots: typeof import('vue')['useSlots']
|
const useSlots: typeof import('vue')['useSlots'];
|
||||||
const watch: typeof import('vue')['watch']
|
const watch: typeof import('vue')['watch'];
|
||||||
const watchEffect: typeof import('vue')['watchEffect']
|
const watchEffect: typeof import('vue')['watchEffect'];
|
||||||
const watchPostEffect: typeof import('vue')['watchPostEffect']
|
const watchPostEffect: typeof import('vue')['watchPostEffect'];
|
||||||
const watchSyncEffect: typeof import('vue')['watchSyncEffect']
|
const watchSyncEffect: typeof import('vue')['watchSyncEffect'];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -69,11 +69,7 @@ export function uploadBidFileNewVersion(data: {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
export function submitBidFileTask(data: {
|
export function submitBidFileTask(data: { runJobId: string; to?: number; comment?: string }) {
|
||||||
runJobId: string;
|
|
||||||
to?: number;
|
|
||||||
comment?: string;
|
|
||||||
}) {
|
|
||||||
return request({
|
return request({
|
||||||
url: '/purchase/purchasingbidfile/submit',
|
url: '/purchase/purchasingbidfile/submit',
|
||||||
method: 'post',
|
method: 'post',
|
||||||
@@ -121,13 +117,7 @@ export function getFlowPurchaseDetail(purchaseId: string) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
export function tempStoreBidFile(data: {
|
export function tempStoreBidFile(data: { purchaseId: string; fileId?: string; fileName?: string; fileUrl?: string; comment?: string }) {
|
||||||
purchaseId: string;
|
|
||||||
fileId?: string;
|
|
||||||
fileName?: string;
|
|
||||||
fileUrl?: string;
|
|
||||||
comment?: string;
|
|
||||||
}) {
|
|
||||||
return request({
|
return request({
|
||||||
url: '/purchase/purchasingbidfile/tempStore',
|
url: '/purchase/purchasingbidfile/tempStore',
|
||||||
method: 'post',
|
method: 'post',
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ const init = () => {
|
|||||||
let flowInstId = props.currJob.flowInstId;
|
let flowInstId = props.currJob.flowInstId;
|
||||||
let runJobId = props.currJob.id;
|
let runJobId = props.currJob.id;
|
||||||
src.value = props.currElTab.path + `?token=${token}&tenantId=${tenantId}&flowInstId=${flowInstId}&runJobId=${runJobId}`;
|
src.value = props.currElTab.path + `?token=${token}&tenantId=${tenantId}&flowInstId=${flowInstId}&runJobId=${runJobId}`;
|
||||||
console.log(src.value)
|
console.log(src.value);
|
||||||
};
|
};
|
||||||
|
|
||||||
function handleJob(jobBtn) {
|
function handleJob(jobBtn) {
|
||||||
|
|||||||
@@ -20,7 +20,9 @@
|
|||||||
<el-descriptions :column="1" border size="small">
|
<el-descriptions :column="1" border size="small">
|
||||||
<el-descriptions-item label="采购编号">{{ applyData.purchaseNo || '-' }}</el-descriptions-item>
|
<el-descriptions-item label="采购编号">{{ applyData.purchaseNo || '-' }}</el-descriptions-item>
|
||||||
<el-descriptions-item label="项目名称">{{ applyData.projectName || '-' }}</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="招标代理">{{ applyData.agentName || '-' }}</el-descriptions-item>
|
||||||
<el-descriptions-item label="审批状态">
|
<el-descriptions-item label="审批状态">
|
||||||
<el-tag v-if="applyData.fileFlowStatus === '0'" type="primary">运行中</el-tag>
|
<el-tag v-if="applyData.fileFlowStatus === '0'" type="primary">运行中</el-tag>
|
||||||
@@ -38,8 +40,8 @@
|
|||||||
<span class="card-title">招标文件</span>
|
<span class="card-title">招标文件</span>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<el-table :data="docList" border stripe size="small" v-if="docList.length > 0" max-height="300">
|
<el-table :data="docList" border stripe size="small" v-if="docList.length > 0" max-height="300">
|
||||||
<!-- <el-table-column type="index" label="序号" width="50" />-->
|
<!-- <el-table-column type="index" label="序号" width="50" />-->
|
||||||
<el-table-column prop="version" label="版本" width="60" align="center">
|
<el-table-column prop="version" label="版本" width="60" align="center">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<el-tag v-if="scope.row.isCurrent === '1'" type="success" size="small">{{ scope.row.version || '-' }}</el-tag>
|
<el-tag v-if="scope.row.isCurrent === '1'" type="success" size="small">{{ scope.row.version || '-' }}</el-tag>
|
||||||
@@ -151,7 +153,7 @@ const open = async (id: string, row?: any) => {
|
|||||||
const docsRes = await getDocList(applyData.value.id);
|
const docsRes = await getDocList(applyData.value.id);
|
||||||
const docs = docsRes?.data || [];
|
const docs = docsRes?.data || [];
|
||||||
if (Array.isArray(docs) && docs.length > 0) {
|
if (Array.isArray(docs) && docs.length > 0) {
|
||||||
docList.value = docs.map((d: any) => ({
|
docList.value = docs.map((d: any) => ({
|
||||||
id: d.id || d.fileId,
|
id: d.id || d.fileId,
|
||||||
fileName: d.fileName || d.fileTitle || '招标文件',
|
fileName: d.fileName || d.fileTitle || '招标文件',
|
||||||
fileUrl: d.fileUrl,
|
fileUrl: d.fileUrl,
|
||||||
|
|||||||
@@ -19,11 +19,7 @@
|
|||||||
|
|
||||||
<el-divider content-position="left">采购相关文件补充上传</el-divider>
|
<el-divider content-position="left">采购相关文件补充上传</el-divider>
|
||||||
|
|
||||||
<el-alert
|
<el-alert :type="fileTypeAlertType" :closable="false" style="margin-bottom: 16px">
|
||||||
:type="fileTypeAlertType"
|
|
||||||
:closable="false"
|
|
||||||
style="margin-bottom: 16px"
|
|
||||||
>
|
|
||||||
<template #title>
|
<template #title>
|
||||||
<span v-if="requiredFileType">{{ requiredFileTypeName }}必传</span>
|
<span v-if="requiredFileType">{{ requiredFileTypeName }}必传</span>
|
||||||
<span v-else>当前采购方式无需补充材料</span>
|
<span v-else>当前采购方式无需补充材料</span>
|
||||||
|
|||||||
@@ -20,7 +20,9 @@
|
|||||||
<el-descriptions :column="1" border size="small">
|
<el-descriptions :column="1" border size="small">
|
||||||
<el-descriptions-item label="采购编号">{{ applyData.purchaseNo || '-' }}</el-descriptions-item>
|
<el-descriptions-item label="采购编号">{{ applyData.purchaseNo || '-' }}</el-descriptions-item>
|
||||||
<el-descriptions-item label="项目名称">{{ applyData.projectName || '-' }}</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="采购方式">{{ purchaseTypeLabel || '-' }}</el-descriptions-item>
|
||||||
<el-descriptions-item label="补充状态">
|
<el-descriptions-item label="补充状态">
|
||||||
<el-tag v-if="applyData.supplementFlowStatus === '1'" type="success">已完成</el-tag>
|
<el-tag v-if="applyData.supplementFlowStatus === '1'" type="success">已完成</el-tag>
|
||||||
|
|||||||
@@ -11,9 +11,9 @@
|
|||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<div v-loading="loading" style="padding-bottom: 20px">
|
<div v-loading="loading" style="padding-bottom: 20px">
|
||||||
<!-- <div class="form-toolbar mb12" style="text-align: right">-->
|
<!-- <div class="form-toolbar mb12" style="text-align: right">-->
|
||||||
<!-- <el-button type="primary" link icon="QuestionFilled" @click="helpDialogVisible = true"> 帮助 </el-button>-->
|
<!-- <el-button type="primary" link icon="QuestionFilled" @click="helpDialogVisible = true"> 帮助 </el-button>-->
|
||||||
<!-- </div>-->
|
<!-- </div>-->
|
||||||
<el-form
|
<el-form
|
||||||
ref="formRef"
|
ref="formRef"
|
||||||
:model="dataForm"
|
:model="dataForm"
|
||||||
@@ -145,7 +145,7 @@
|
|||||||
<upload-file
|
<upload-file
|
||||||
v-model="dataForm.deptSelfMeetingMinutes"
|
v-model="dataForm.deptSelfMeetingMinutes"
|
||||||
:limit="1"
|
:limit="1"
|
||||||
:file-type="[ 'pdf', 'jpg', 'jpeg', 'png']"
|
:file-type="['pdf', 'jpg', 'jpeg', 'png']"
|
||||||
:data="{ fileType: FILE_TYPE_MAP.deptSelfMeetingMinutes }"
|
:data="{ fileType: FILE_TYPE_MAP.deptSelfMeetingMinutes }"
|
||||||
upload-file-url="/purchase/purchasingfiles/upload"
|
upload-file-url="/purchase/purchasingfiles/upload"
|
||||||
:disabled="flowFieldDisabled('deptSelfMeetingMinutes')"
|
:disabled="flowFieldDisabled('deptSelfMeetingMinutes')"
|
||||||
@@ -238,9 +238,9 @@
|
|||||||
<upload-file
|
<upload-file
|
||||||
v-model="dataForm.serviceDirectSelect"
|
v-model="dataForm.serviceDirectSelect"
|
||||||
:limit="1"
|
:limit="1"
|
||||||
:file-type="[ 'doc', 'docx']"
|
:file-type="['doc', 'docx']"
|
||||||
:data="{ fileType: FILE_TYPE_MAP.serviceDirectSelect }"
|
:data="{ fileType: FILE_TYPE_MAP.serviceDirectSelect }"
|
||||||
upload-file-url="/purchase/purchasingfiles/upload"
|
upload-file-url="/purchase/purchasingfiles/upload"
|
||||||
:disabled="flowFieldDisabled('serviceDirectSelect')"
|
:disabled="flowFieldDisabled('serviceDirectSelect')"
|
||||||
/>
|
/>
|
||||||
<el-button
|
<el-button
|
||||||
@@ -266,7 +266,7 @@ upload-file-url="/purchase/purchasingfiles/upload"
|
|||||||
<upload-file
|
<upload-file
|
||||||
v-model="dataForm.serviceInviteSelect"
|
v-model="dataForm.serviceInviteSelect"
|
||||||
:limit="1"
|
:limit="1"
|
||||||
:file-type="[ 'doc', 'docx']"
|
:file-type="['doc', 'docx']"
|
||||||
:data="{ fileType: FILE_TYPE_MAP.serviceInviteSelect }"
|
:data="{ fileType: FILE_TYPE_MAP.serviceInviteSelect }"
|
||||||
upload-file-url="/purchase/purchasingfiles/upload"
|
upload-file-url="/purchase/purchasingfiles/upload"
|
||||||
:disabled="flowFieldDisabled('serviceInviteSelect')"
|
:disabled="flowFieldDisabled('serviceInviteSelect')"
|
||||||
@@ -312,7 +312,7 @@ upload-file-url="/purchase/purchasingfiles/upload"
|
|||||||
</el-radio-group>
|
</el-radio-group>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="8" class="mb12" v-if="showAutoInviteSelect && dataForm.hasSupplier === '1'">
|
<el-col :span="8" class="mb12" v-if="showAutoInviteSelect && dataForm.hasSupplier === '1'">
|
||||||
<el-form-item label="服务商城项目需求模板(邀请比选)" prop="serviceInviteSelect" required>
|
<el-form-item label="服务商城项目需求模板(邀请比选)" prop="serviceInviteSelect" required>
|
||||||
<upload-file
|
<upload-file
|
||||||
v-model="dataForm.serviceInviteSelect"
|
v-model="dataForm.serviceInviteSelect"
|
||||||
@@ -333,7 +333,7 @@ upload-file-url="/purchase/purchasingfiles/upload"
|
|||||||
</el-button>
|
</el-button>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="8" class="mb12" v-if="showAutoInviteSelect && dataForm.hasSupplier === '0'">
|
<el-col :span="8" class="mb12" v-if="showAutoInviteSelect && dataForm.hasSupplier === '0'">
|
||||||
<el-form-item label="服务商城项目需求模板(公开比选)" prop="servicePublicSelectAuto" required>
|
<el-form-item label="服务商城项目需求模板(公开比选)" prop="servicePublicSelectAuto" required>
|
||||||
<upload-file
|
<upload-file
|
||||||
v-model="dataForm.servicePublicSelectAuto"
|
v-model="dataForm.servicePublicSelectAuto"
|
||||||
@@ -468,7 +468,7 @@ upload-file-url="/purchase/purchasingfiles/upload"
|
|||||||
<upload-file
|
<upload-file
|
||||||
v-model="dataForm.feasibilityReport"
|
v-model="dataForm.feasibilityReport"
|
||||||
:limit="1"
|
:limit="1"
|
||||||
:file-type="[ 'pdf', 'jpg', 'jpeg', 'png']"
|
:file-type="['pdf', 'jpg', 'jpeg', 'png']"
|
||||||
:data="{ fileType: FILE_TYPE_MAP.feasibilityReport }"
|
:data="{ fileType: FILE_TYPE_MAP.feasibilityReport }"
|
||||||
upload-file-url="/purchase/purchasingfiles/upload"
|
upload-file-url="/purchase/purchasingfiles/upload"
|
||||||
:disabled="flowFieldDisabled('feasibilityReport')"
|
:disabled="flowFieldDisabled('feasibilityReport')"
|
||||||
@@ -489,7 +489,7 @@ upload-file-url="/purchase/purchasingfiles/upload"
|
|||||||
<upload-file
|
<upload-file
|
||||||
v-model="dataForm.meetingMinutes"
|
v-model="dataForm.meetingMinutes"
|
||||||
:limit="1"
|
:limit="1"
|
||||||
:file-type="[ 'pdf', 'jpg', 'jpeg', 'png']"
|
:file-type="['pdf', 'jpg', 'jpeg', 'png']"
|
||||||
:data="{ fileType: FILE_TYPE_MAP.meetingMinutes }"
|
:data="{ fileType: FILE_TYPE_MAP.meetingMinutes }"
|
||||||
upload-file-url="/purchase/purchasingfiles/upload"
|
upload-file-url="/purchase/purchasingfiles/upload"
|
||||||
:disabled="flowFieldDisabled('meetingMinutes')"
|
:disabled="flowFieldDisabled('meetingMinutes')"
|
||||||
@@ -502,7 +502,7 @@ upload-file-url="/purchase/purchasingfiles/upload"
|
|||||||
<upload-file
|
<upload-file
|
||||||
v-model="dataForm.singleSourceProof"
|
v-model="dataForm.singleSourceProof"
|
||||||
:limit="1"
|
:limit="1"
|
||||||
:file-type="[ 'pdf', 'jpg', 'jpeg', 'png']"
|
:file-type="['pdf', 'jpg', 'jpeg', 'png']"
|
||||||
:data="{ fileType: FILE_TYPE_MAP.singleSourceProof }"
|
:data="{ fileType: FILE_TYPE_MAP.singleSourceProof }"
|
||||||
upload-file-url="/purchase/purchasingfiles/upload"
|
upload-file-url="/purchase/purchasingfiles/upload"
|
||||||
:disabled="flowFieldDisabled('singleSourceProof')"
|
:disabled="flowFieldDisabled('singleSourceProof')"
|
||||||
@@ -523,7 +523,7 @@ upload-file-url="/purchase/purchasingfiles/upload"
|
|||||||
<upload-file
|
<upload-file
|
||||||
v-model="dataForm.meetingMinutesSingle"
|
v-model="dataForm.meetingMinutesSingle"
|
||||||
:limit="1"
|
:limit="1"
|
||||||
:file-type="[ 'pdf', 'jpg', 'jpeg', 'png']"
|
:file-type="['pdf', 'jpg', 'jpeg', 'png']"
|
||||||
:data="{ fileType: FILE_TYPE_MAP.meetingMinutesSingle }"
|
:data="{ fileType: FILE_TYPE_MAP.meetingMinutesSingle }"
|
||||||
upload-file-url="/purchase/purchasingfiles/upload"
|
upload-file-url="/purchase/purchasingfiles/upload"
|
||||||
:disabled="flowFieldDisabled('meetingMinutesSingle')"
|
:disabled="flowFieldDisabled('meetingMinutesSingle')"
|
||||||
@@ -535,7 +535,7 @@ upload-file-url="/purchase/purchasingfiles/upload"
|
|||||||
<upload-file
|
<upload-file
|
||||||
v-model="dataForm.importApplication"
|
v-model="dataForm.importApplication"
|
||||||
:limit="1"
|
:limit="1"
|
||||||
:file-type="[ 'pdf', 'jpg', 'jpeg', 'png']"
|
:file-type="['pdf', 'jpg', 'jpeg', 'png']"
|
||||||
:data="{ fileType: FILE_TYPE_MAP.importApplication }"
|
:data="{ fileType: FILE_TYPE_MAP.importApplication }"
|
||||||
upload-file-url="/purchase/purchasingfiles/upload"
|
upload-file-url="/purchase/purchasingfiles/upload"
|
||||||
:disabled="flowFieldDisabled('importApplication')"
|
:disabled="flowFieldDisabled('importApplication')"
|
||||||
@@ -556,7 +556,7 @@ upload-file-url="/purchase/purchasingfiles/upload"
|
|||||||
<upload-file
|
<upload-file
|
||||||
v-model="dataForm.meetingMinutesImport"
|
v-model="dataForm.meetingMinutesImport"
|
||||||
:limit="1"
|
:limit="1"
|
||||||
:file-type="[ 'pdf', 'jpg', 'jpeg', 'png']"
|
:file-type="['pdf', 'jpg', 'jpeg', 'png']"
|
||||||
:data="{ fileType: FILE_TYPE_MAP.meetingMinutesImport }"
|
:data="{ fileType: FILE_TYPE_MAP.meetingMinutesImport }"
|
||||||
upload-file-url="/purchase/purchasingfiles/upload"
|
upload-file-url="/purchase/purchasingfiles/upload"
|
||||||
:disabled="flowFieldDisabled('meetingMinutesImport')"
|
:disabled="flowFieldDisabled('meetingMinutesImport')"
|
||||||
@@ -599,7 +599,7 @@ upload-file-url="/purchase/purchasingfiles/upload"
|
|||||||
>下载《{{ getTemplateName('invite_select') }}》模版
|
>下载《{{ getTemplateName('invite_select') }}》模版
|
||||||
</el-button>
|
</el-button>
|
||||||
</template>
|
</template>
|
||||||
<template v-else-if="dataForm.hasSupplier === '0'">
|
<template v-else-if="dataForm.hasSupplier === '0'">
|
||||||
<upload-file
|
<upload-file
|
||||||
v-model="dataForm.servicePublicSelectSchoolAuto"
|
v-model="dataForm.servicePublicSelectSchoolAuto"
|
||||||
:limit="1"
|
:limit="1"
|
||||||
@@ -619,7 +619,7 @@ upload-file-url="/purchase/purchasingfiles/upload"
|
|||||||
</el-button>
|
</el-button>
|
||||||
</template>
|
</template>
|
||||||
</template>
|
</template>
|
||||||
<template v-else-if="showAutoPublicSelect">
|
<template v-else-if="showAutoPublicSelect">
|
||||||
<upload-file
|
<upload-file
|
||||||
v-model="dataForm.servicePublicSelectSchool"
|
v-model="dataForm.servicePublicSelectSchool"
|
||||||
:limit="1"
|
:limit="1"
|
||||||
@@ -638,7 +638,7 @@ upload-file-url="/purchase/purchasingfiles/upload"
|
|||||||
>下载《{{ getTemplateName('public_select') }}》模版
|
>下载《{{ getTemplateName('public_select') }}》模版
|
||||||
</el-button>
|
</el-button>
|
||||||
</template>
|
</template>
|
||||||
<template v-else>
|
<template v-else>
|
||||||
<upload-file
|
<upload-file
|
||||||
v-model="dataForm.purchaseRequirement"
|
v-model="dataForm.purchaseRequirement"
|
||||||
:limit="1"
|
:limit="1"
|
||||||
@@ -664,7 +664,7 @@ upload-file-url="/purchase/purchasingfiles/upload"
|
|||||||
<upload-file
|
<upload-file
|
||||||
v-model="dataForm.governmentPurchaseIntent"
|
v-model="dataForm.governmentPurchaseIntent"
|
||||||
:limit="1"
|
:limit="1"
|
||||||
:file-type="[ 'pdf', 'jpg', 'jpeg', 'png']"
|
:file-type="['pdf', 'jpg', 'jpeg', 'png']"
|
||||||
:data="{ fileType: FILE_TYPE_MAP.governmentPurchaseIntent }"
|
:data="{ fileType: FILE_TYPE_MAP.governmentPurchaseIntent }"
|
||||||
upload-file-url="/purchase/purchasingfiles/upload"
|
upload-file-url="/purchase/purchasingfiles/upload"
|
||||||
:disabled="flowFieldDisabled('governmentPurchaseIntent')"
|
:disabled="flowFieldDisabled('governmentPurchaseIntent')"
|
||||||
@@ -963,7 +963,7 @@ const dataForm = reactive({
|
|||||||
isSpecial: '',
|
isSpecial: '',
|
||||||
hasAssets: '0',
|
hasAssets: '0',
|
||||||
purchaseMode: '',
|
purchaseMode: '',
|
||||||
purchaseSchool:'',
|
purchaseSchool: '',
|
||||||
purchaseType: '',
|
purchaseType: '',
|
||||||
purchaseTypeUnion: '',
|
purchaseTypeUnion: '',
|
||||||
purchaseChannel: '',
|
purchaseChannel: '',
|
||||||
@@ -1577,7 +1577,7 @@ watch(
|
|||||||
|
|
||||||
// 学校统一采购:组织采购形式由规则默认选择,随预算与集采变化自动更新
|
// 学校统一采购:组织采购形式由规则默认选择,随预算与集采变化自动更新
|
||||||
watch(
|
watch(
|
||||||
[ () => isDeptPurchase.value],
|
[() => isDeptPurchase.value],
|
||||||
() => {
|
() => {
|
||||||
if (isDeptPurchase.value) return;
|
if (isDeptPurchase.value) return;
|
||||||
},
|
},
|
||||||
@@ -1586,37 +1586,16 @@ watch(
|
|||||||
|
|
||||||
// 下载模版:统一走后端接口,按原始文件下载(避免前端静态资源被当成 HTML 返回)
|
// 下载模版:统一走后端接口,按原始文件下载(避免前端静态资源被当成 HTML 返回)
|
||||||
const downloadTemplate = async (type: string) => {
|
const downloadTemplate = async (type: string) => {
|
||||||
// 优先从后台模版列表获取模版名称
|
// 从后台模版列表获取模版名称(templateName 包含原始文件扩展名)
|
||||||
const backendTemplate = templateList.value.find((t: any) => t.templateType === type);
|
const backendTemplate = templateList.value.find((t: any) => t.templateType === type);
|
||||||
let displayName = '';
|
|
||||||
|
|
||||||
if (backendTemplate?.templateTitle) {
|
if (!backendTemplate?.templateName) {
|
||||||
displayName = backendTemplate.templateTitle;
|
useMessage().error('模版不存在或未维护模版文件,请联系管理员');
|
||||||
} 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('模版不存在');
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
await other.downBlobFile(`/purchase/purchasingtemplate/download?type=${encodeURIComponent(type)}`, {}, displayName);
|
await other.downBlobFile(`/purchase/purchasingtemplate/download?type=${encodeURIComponent(type)}`, {}, backendTemplate.templateName);
|
||||||
useMessage().success('模版下载成功');
|
useMessage().success('模版下载成功');
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
useMessage().error('模版下载失败,请联系管理员维护模版文件');
|
useMessage().error('模版下载失败,请联系管理员维护模版文件');
|
||||||
|
|||||||
@@ -157,7 +157,7 @@
|
|||||||
accept=".doc,.docx"
|
accept=".doc,.docx"
|
||||||
:disabled="isViewMode"
|
:disabled="isViewMode"
|
||||||
>
|
>
|
||||||
<el-button type="primary" :disabled="isViewMode">选择文件</el-button>
|
<el-button type="primary" :disabled="isViewMode">选择文件</el-button>
|
||||||
<template #tip>
|
<template #tip>
|
||||||
<div class="el-upload__tip">仅支持 doc、docx 格式,单文件不超过 50MB,上传后自动保存</div>
|
<div class="el-upload__tip">仅支持 doc、docx 格式,单文件不超过 50MB,上传后自动保存</div>
|
||||||
</template>
|
</template>
|
||||||
@@ -183,7 +183,7 @@
|
|||||||
:disabled="isViewMode"
|
:disabled="isViewMode"
|
||||||
maxlength="500"
|
maxlength="500"
|
||||||
show-word-limit
|
show-word-limit
|
||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
</el-card>
|
</el-card>
|
||||||
@@ -232,13 +232,7 @@
|
|||||||
|
|
||||||
<!-- 指定一人 -->
|
<!-- 指定一人 -->
|
||||||
<el-form-item v-if="representorSelectMode === 'designate'" label="选择参与人">
|
<el-form-item v-if="representorSelectMode === 'designate'" label="选择参与人">
|
||||||
<el-select
|
<el-select v-model="selectedRepresentor" placeholder="请选择参与人" filterable :disabled="isViewMode" style="width: 300px">
|
||||||
v-model="selectedRepresentor"
|
|
||||||
placeholder="请选择参与人"
|
|
||||||
filterable
|
|
||||||
:disabled="isViewMode"
|
|
||||||
style="width: 300px"
|
|
||||||
>
|
|
||||||
<el-option
|
<el-option
|
||||||
v-for="member in deptMembers"
|
v-for="member in deptMembers"
|
||||||
:key="member.teacherNo"
|
:key="member.teacherNo"
|
||||||
@@ -278,9 +272,7 @@
|
|||||||
|
|
||||||
<!-- 已选中的参与人 -->
|
<!-- 已选中的参与人 -->
|
||||||
<el-form-item v-if="currentRepresentor" label="已选中参与人">
|
<el-form-item v-if="currentRepresentor" label="已选中参与人">
|
||||||
<el-tag type="success" size="large">
|
<el-tag type="success" size="large"> {{ currentRepresentor.realName }} ({{ currentRepresentor.teacherNo }}) </el-tag>
|
||||||
{{ currentRepresentor.realName }} ({{ currentRepresentor.teacherNo }})
|
|
||||||
</el-tag>
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
<!-- 参与人身份 -->
|
<!-- 参与人身份 -->
|
||||||
@@ -293,12 +285,7 @@
|
|||||||
|
|
||||||
<!-- 保存按钮 -->
|
<!-- 保存按钮 -->
|
||||||
<el-form-item>
|
<el-form-item>
|
||||||
<el-button
|
<el-button type="primary" :loading="saveRepresentorLoading" :disabled="!canSaveRepresentor || isViewMode" @click="handleSaveRepresentor">
|
||||||
type="primary"
|
|
||||||
:loading="saveRepresentorLoading"
|
|
||||||
:disabled="!canSaveRepresentor || isViewMode"
|
|
||||||
@click="handleSaveRepresentor"
|
|
||||||
>
|
|
||||||
保存参与人信息
|
保存参与人信息
|
||||||
</el-button>
|
</el-button>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
@@ -399,7 +386,7 @@ const isFileAudit = computed(() => currentUserRoleCodes.value.includes('PURCHASE
|
|||||||
// 是否显示上传区域
|
// 是否显示上传区域
|
||||||
const showUploadSection = computed(() => {
|
const showUploadSection = computed(() => {
|
||||||
if (isViewMode.value) return false;
|
if (isViewMode.value) return false;
|
||||||
if (isAgent.value ) return true;
|
if (isAgent.value) return true;
|
||||||
if (isAsset.value || isDeptApply.value || isFileAudit.value) return true;
|
if (isAsset.value || isDeptApply.value || isFileAudit.value) return true;
|
||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
@@ -492,7 +479,7 @@ const effectivePurchaseId = computed(() => {
|
|||||||
if (props.currJob?.orderId) {
|
if (props.currJob?.orderId) {
|
||||||
return String(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) || '';
|
||||||
});
|
});
|
||||||
|
|
||||||
// 是否可以提交(非查看模式即可提交,不强制要求上传文件)
|
// 是否可以提交(非查看模式即可提交,不强制要求上传文件)
|
||||||
@@ -630,7 +617,7 @@ const handleDownload = (row: any) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// 手动保存上传的招标文件
|
// 手动保存上传的招标文件
|
||||||
const handleSaveBidFile = async () => {
|
const handleSaveBidFile = async () => {
|
||||||
if (!uploadForm.fileId) {
|
if (!uploadForm.fileId) {
|
||||||
ElMessage.warning('请先上传招标文件');
|
ElMessage.warning('请先上传招标文件');
|
||||||
return;
|
return;
|
||||||
@@ -645,10 +632,10 @@ const handleDownload = (row: any) => {
|
|||||||
} finally {
|
} finally {
|
||||||
saveLoading.value = false;
|
saveLoading.value = false;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// 保存上传的招标文件
|
// 保存上传的招标文件
|
||||||
const saveUploadedFile = async () => {
|
const saveUploadedFile = async () => {
|
||||||
if (!uploadForm.fileId) {
|
if (!uploadForm.fileId) {
|
||||||
ElMessage.warning('请先上传招标文件');
|
ElMessage.warning('请先上传招标文件');
|
||||||
return false;
|
return false;
|
||||||
@@ -724,7 +711,7 @@ const handleFlowSave = async () => {
|
|||||||
fileName: uploadForm.fileName || '',
|
fileName: uploadForm.fileName || '',
|
||||||
fileUrl: uploadForm.fileUrl || '',
|
fileUrl: uploadForm.fileUrl || '',
|
||||||
comment: uploadForm.comment || '',
|
comment: uploadForm.comment || '',
|
||||||
flowTarget: flowTarget.value || ''
|
flowTarget: flowTarget.value || '',
|
||||||
};
|
};
|
||||||
|
|
||||||
const res = await tempStoreBidFile(params);
|
const res = await tempStoreBidFile(params);
|
||||||
@@ -735,8 +722,6 @@ const handleFlowSave = async () => {
|
|||||||
currElTabIsSave(props.currJob, props.currElTab.id, true, emit);
|
currElTabIsSave(props.currJob, props.currElTab.id, true, emit);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
ElMessage.error(res.msg || '暂存失败');
|
ElMessage.error(res.msg || '暂存失败');
|
||||||
@@ -783,10 +768,7 @@ const handleRandomSelect = async () => {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
randomSelectLoading.value = true;
|
randomSelectLoading.value = true;
|
||||||
const res = await randomSelectRepresentor(
|
const res = await randomSelectRepresentor(effectivePurchaseId.value, randomCandidates.value.join(','));
|
||||||
effectivePurchaseId.value,
|
|
||||||
randomCandidates.value.join(',')
|
|
||||||
);
|
|
||||||
if (res.code === 0 && res.data) {
|
if (res.code === 0 && res.data) {
|
||||||
currentRepresentor.value = res.data;
|
currentRepresentor.value = res.data;
|
||||||
ElMessage.success(`随机抽取成功:${res.data.realName}`);
|
ElMessage.success(`随机抽取成功:${res.data.realName}`);
|
||||||
@@ -816,12 +798,7 @@ const handleSaveRepresentor = async () => {
|
|||||||
let res: any;
|
let res: any;
|
||||||
|
|
||||||
if (representorSelectMode.value === 'designate') {
|
if (representorSelectMode.value === 'designate') {
|
||||||
res = await saveRepresentor(
|
res = await saveRepresentor(Number(effectivePurchaseId.value), selectedRepresentor.value, undefined, representorType.value);
|
||||||
Number(effectivePurchaseId.value),
|
|
||||||
selectedRepresentor.value,
|
|
||||||
undefined,
|
|
||||||
representorType.value
|
|
||||||
);
|
|
||||||
} else {
|
} else {
|
||||||
res = await saveRepresentor(
|
res = await saveRepresentor(
|
||||||
Number(effectivePurchaseId.value),
|
Number(effectivePurchaseId.value),
|
||||||
|
|||||||
@@ -78,9 +78,9 @@
|
|||||||
<el-button type="success" :loading="sendToAgentSubmitting" @click="handleSendToAgent">发送招标代理</el-button>
|
<el-button type="success" :loading="sendToAgentSubmitting" @click="handleSendToAgent">发送招标代理</el-button>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<!-- 撤回招标代理按钮 -->
|
<!-- 撤回招标代理按钮 -->
|
||||||
<!-- <el-form-item v-if="canRevokeAgent">-->
|
<!-- <el-form-item v-if="canRevokeAgent">-->
|
||||||
<!-- <el-button type="warning" :loading="revokeAgentSubmitting" @click="handleRevokeAgent">撤回</el-button>-->
|
<!-- <el-button type="warning" :loading="revokeAgentSubmitting" @click="handleRevokeAgent">撤回</el-button>-->
|
||||||
<!-- </el-form-item>-->
|
<!-- </el-form-item>-->
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -287,15 +287,11 @@ const handleSendToAgent = async () => {
|
|||||||
|
|
||||||
// 确认弹窗
|
// 确认弹窗
|
||||||
try {
|
try {
|
||||||
await ElMessageBox.confirm(
|
await ElMessageBox.confirm('是否确认发送至招标代理启动招标文件审核流程?', '确认发送', {
|
||||||
'是否确认发送至招标代理启动招标文件审核流程?',
|
|
||||||
'确认发送',
|
|
||||||
{
|
|
||||||
confirmButtonText: '确认',
|
confirmButtonText: '确认',
|
||||||
cancelButtonText: '取消',
|
cancelButtonText: '取消',
|
||||||
type: 'warning',
|
type: 'warning',
|
||||||
}
|
});
|
||||||
);
|
|
||||||
} catch {
|
} catch {
|
||||||
// 用户取消
|
// 用户取消
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
<template #footer>
|
<template #footer>
|
||||||
<div class="dialog-footer">
|
<div class="dialog-footer">
|
||||||
<el-button @click="handleClose">取消</el-button>
|
<el-button @click="handleClose">取消</el-button>
|
||||||
<!-- <el-button type="primary" :loading="confirming" @click="handleConfirm">确定</el-button>-->
|
<!-- <el-button type="primary" :loading="confirming" @click="handleConfirm">确定</el-button>-->
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
|
|||||||
@@ -55,7 +55,7 @@
|
|||||||
采购申请管理
|
采购申请管理
|
||||||
</span>
|
</span>
|
||||||
<div class="header-actions">
|
<div class="header-actions">
|
||||||
<!-- <el-button icon="QuestionFilled" link type="primary"> 采购申请操作说明文档下载</el-button>-->
|
<!-- <el-button icon="QuestionFilled" link type="primary"> 采购申请操作说明文档下载</el-button>-->
|
||||||
<el-button icon="FolderAdd" type="primary" @click="handleAdd"> 新增</el-button>
|
<el-button icon="FolderAdd" type="primary" @click="handleAdd"> 新增</el-button>
|
||||||
<right-toolbar v-model:showSearch="showSearch" class="ml10" @queryTable="getDataList" />
|
<right-toolbar v-model:showSearch="showSearch" class="ml10" @queryTable="getDataList" />
|
||||||
</div>
|
</div>
|
||||||
@@ -283,10 +283,18 @@
|
|||||||
<el-tag v-if="scope.row.fileFlowStatus === '0'" type="primary" class="status-tag-clickable" @click="handleShowDocAudit(scope.row)"
|
<el-tag v-if="scope.row.fileFlowStatus === '0'" type="primary" class="status-tag-clickable" @click="handleShowDocAudit(scope.row)"
|
||||||
>运行中
|
>运行中
|
||||||
</el-tag>
|
</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>
|
||||||
<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>
|
||||||
<el-tag v-else-if="scope.row.fileFlowStatus === '3'" type="info" class="status-tag-clickable" @click="handleShowDocAudit(scope.row)"
|
<el-tag v-else-if="scope.row.fileFlowStatus === '3'" type="info" class="status-tag-clickable" @click="handleShowDocAudit(scope.row)"
|
||||||
|
|||||||
@@ -29,12 +29,7 @@
|
|||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<el-alert
|
<el-alert v-if="requiredFileTypeName" type="info" :closable="false" style="margin-bottom: 16px">
|
||||||
v-if="requiredFileTypeName"
|
|
||||||
type="info"
|
|
||||||
:closable="false"
|
|
||||||
style="margin-bottom: 16px"
|
|
||||||
>
|
|
||||||
<template #title>
|
<template #title>
|
||||||
<span>{{ requiredFileTypeName }}</span>
|
<span>{{ requiredFileTypeName }}</span>
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
@@ -129,14 +129,29 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts" name="ActivityInfoSubSignup">
|
<script setup lang="ts" name="ActivityInfoSubSignup">
|
||||||
import { reactive, ref, onMounted, computed } from 'vue'
|
import { reactive, ref, onMounted, computed } from 'vue';
|
||||||
import { BasicTableProps, useTable } from "/@/hooks/table";
|
import { BasicTableProps, useTable } from '/@/hooks/table';
|
||||||
import { fetchList, delObj, getActivityInfoList, getActivityInfoSubList } from "/@/api/stuwork/activityinfosubsignup";
|
import { fetchList, delObj, getActivityInfoList, getActivityInfoSubList } from '/@/api/stuwork/activityinfosubsignup';
|
||||||
import { makeExportActivitySignUpDetailTask } from "/@/api/stuwork/file";
|
import { makeExportActivitySignUpDetailTask } from '/@/api/stuwork/file';
|
||||||
import { useMessage, useMessageBox } from "/@/hooks/message";
|
import { useMessage, useMessageBox } from '/@/hooks/message';
|
||||||
import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
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 {
|
||||||
import { useTableColumnControl } from '/@/hooks/tableColumn'
|
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();
|
const searchFormRef = ref();
|
||||||
@@ -230,16 +245,16 @@ const handleDelete = async (row: any) => {
|
|||||||
|
|
||||||
// 导出
|
// 导出
|
||||||
const handleExport = async () => {
|
const handleExport = async () => {
|
||||||
exportLoading.value = true
|
exportLoading.value = true;
|
||||||
try {
|
try {
|
||||||
await makeExportActivitySignUpDetailTask(state.queryForm)
|
await makeExportActivitySignUpDetailTask(state.queryForm);
|
||||||
useMessage().success('导出任务已创建,请在文件管理中下载')
|
useMessage().success('导出任务已创建,请在文件管理中下载');
|
||||||
} catch (err: any) {
|
} catch (err: any) {
|
||||||
useMessage().error(err.msg || '导出失败')
|
useMessage().error(err.msg || '导出失败');
|
||||||
} finally {
|
} finally {
|
||||||
exportLoading.value = false
|
exportLoading.value = false;
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
|
|
||||||
// 获取活动主题列表
|
// 获取活动主题列表
|
||||||
const getActivityInfoListData = async () => {
|
const getActivityInfoListData = async () => {
|
||||||
|
|||||||
@@ -269,19 +269,35 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts" name="ClassFeeLog">
|
<script setup lang="ts" name="ClassFeeLog">
|
||||||
import { reactive, ref, onMounted, computed } from 'vue'
|
import { reactive, ref, onMounted, computed } from 'vue';
|
||||||
import { BasicTableProps, useTable } from "/@/hooks/table";
|
import { BasicTableProps, useTable } from '/@/hooks/table';
|
||||||
import { fetchList, delObj, getSummary } from "/@/api/stuwork/classfeelog";
|
import { fetchList, delObj, getSummary } from '/@/api/stuwork/classfeelog';
|
||||||
import { makeExportClassFundTask } from "/@/api/stuwork/file";
|
import { makeExportClassFundTask } from '/@/api/stuwork/file';
|
||||||
import { getDeptList } from "/@/api/basic/basicclass";
|
import { getDeptList } from '/@/api/basic/basicclass';
|
||||||
import { queryAllSchoolYear } from "/@/api/basic/basicyear";
|
import { queryAllSchoolYear } from '/@/api/basic/basicyear';
|
||||||
import { getClassListByRole } from "/@/api/basic/basicclass";
|
import { getClassListByRole } from '/@/api/basic/basicclass';
|
||||||
import { getDicts } from "/@/api/admin/dict";
|
import { getDicts } from '/@/api/admin/dict';
|
||||||
import { useMessage, useMessageBox } from "/@/hooks/message";
|
import { useMessage, useMessageBox } from '/@/hooks/message';
|
||||||
import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
import TableColumnControl from '/@/components/TableColumnControl/index.vue';
|
||||||
import FormDialog from './form.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 {
|
||||||
import { useTableColumnControl } from '/@/hooks/tableColumn'
|
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();
|
const formDialogRef = ref();
|
||||||
@@ -387,12 +403,12 @@ const handleViewAttachment = (row: any) => {
|
|||||||
// 导出
|
// 导出
|
||||||
const handleExport = async () => {
|
const handleExport = async () => {
|
||||||
try {
|
try {
|
||||||
await makeExportClassFundTask(state.queryForm)
|
await makeExportClassFundTask(state.queryForm);
|
||||||
useMessage().success('导出任务已创建,请在文件管理中下载')
|
useMessage().success('导出任务已创建,请在文件管理中下载');
|
||||||
} catch (err: any) {
|
} catch (err: any) {
|
||||||
useMessage().error(err.msg || '导出失败')
|
useMessage().error(err.msg || '导出失败');
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
|
|
||||||
// 编辑
|
// 编辑
|
||||||
const handleEdit = (row: any) => {
|
const handleEdit = (row: any) => {
|
||||||
|
|||||||
@@ -224,19 +224,33 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts" name="ClassSafeEdu">
|
<script setup lang="ts" name="ClassSafeEdu">
|
||||||
import { reactive, ref, onMounted } from 'vue'
|
import { reactive, ref, onMounted } from 'vue';
|
||||||
import { BasicTableProps, useTable } from "/@/hooks/table";
|
import { BasicTableProps, useTable } from '/@/hooks/table';
|
||||||
import { fetchList, delObj, statisticsByYearTerm } from "/@/api/stuwork/classsafeedu";
|
import { fetchList, delObj, statisticsByYearTerm } from '/@/api/stuwork/classsafeedu';
|
||||||
import { makeExportSafetyEducationTask } from "/@/api/stuwork/file";
|
import { makeExportSafetyEducationTask } from '/@/api/stuwork/file';
|
||||||
import { getClassListByRole } from "/@/api/basic/basicclass";
|
import { getClassListByRole } from '/@/api/basic/basicclass';
|
||||||
import { queryAllSchoolYear } from "/@/api/basic/basicyear";
|
import { queryAllSchoolYear } from '/@/api/basic/basicyear';
|
||||||
import { getDicts } from "/@/api/admin/dict";
|
import { getDicts } from '/@/api/admin/dict';
|
||||||
import { useMessage, useMessageBox } from "/@/hooks/message";
|
import { useMessage, useMessageBox } from '/@/hooks/message';
|
||||||
import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
import TableColumnControl from '/@/components/TableColumnControl/index.vue';
|
||||||
import FormDialog from './form.vue'
|
import FormDialog from './form.vue';
|
||||||
import DetailDialog from './detail.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 {
|
||||||
import { useTableColumnControl } from '/@/hooks/tableColumn'
|
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();
|
const formDialogRef = ref();
|
||||||
@@ -333,12 +347,12 @@ const handleViewImage = (url: string) => {
|
|||||||
// 导出
|
// 导出
|
||||||
const handleExport = async () => {
|
const handleExport = async () => {
|
||||||
try {
|
try {
|
||||||
await makeExportSafetyEducationTask(state.queryForm)
|
await makeExportSafetyEducationTask(state.queryForm);
|
||||||
useMessage().success('导出任务已创建,请在文件管理中下载')
|
useMessage().success('导出任务已创建,请在文件管理中下载');
|
||||||
} catch (err: any) {
|
} catch (err: any) {
|
||||||
useMessage().error(err.msg || '导出失败')
|
useMessage().error(err.msg || '导出失败');
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
|
|
||||||
// 查看详情
|
// 查看详情
|
||||||
const handleView = (row: any) => {
|
const handleView = (row: any) => {
|
||||||
|
|||||||
@@ -169,7 +169,14 @@
|
|||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="月份" prop="month">
|
<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-form-item>
|
<el-form-item>
|
||||||
<el-button icon="Download" type="success" @click="handleDownloadTemplate"> 下载模板 </el-button>
|
<el-button icon="Download" type="success" @click="handleDownloadTemplate"> 下载模板 </el-button>
|
||||||
|
|||||||
@@ -183,16 +183,16 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts" name="DormHygieneMonthly">
|
<script setup lang="ts" name="DormHygieneMonthly">
|
||||||
import { ref, reactive, defineAsyncComponent, computed, onMounted, nextTick } from 'vue'
|
import { ref, reactive, defineAsyncComponent, computed, onMounted, nextTick } from 'vue';
|
||||||
import { useRoute } from 'vue-router'
|
import { useRoute } from 'vue-router';
|
||||||
import { BasicTableProps, useTable } from "/@/hooks/table";
|
import { BasicTableProps, useTable } from '/@/hooks/table';
|
||||||
import { fetchList, putObj, delObjs } from "/@/api/stuwork/dormreform";
|
import { fetchList, putObj, delObjs } from '/@/api/stuwork/dormreform';
|
||||||
import { makeExportDormReformTask } from "/@/api/stuwork/file";
|
import { makeExportDormReformTask } from '/@/api/stuwork/file';
|
||||||
import { getBuildingList } from "/@/api/stuwork/dormbuilding";
|
import { getBuildingList } from '/@/api/stuwork/dormbuilding';
|
||||||
import { getDormRoomDataByBuildingNo } from "/@/api/stuwork/dormroom";
|
import { getDormRoomDataByBuildingNo } from '/@/api/stuwork/dormroom';
|
||||||
import { useMessage, useMessageBox } from "/@/hooks/message";
|
import { useMessage, useMessageBox } from '/@/hooks/message';
|
||||||
import { getDicts } from "/@/api/admin/dict";
|
import { getDicts } from '/@/api/admin/dict';
|
||||||
import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
import TableColumnControl from '/@/components/TableColumnControl/index.vue';
|
||||||
|
|
||||||
// 引入组件
|
// 引入组件
|
||||||
const FormDialog = defineAsyncComponent(() => import('./form.vue'));
|
const FormDialog = defineAsyncComponent(() => import('./form.vue'));
|
||||||
@@ -347,12 +347,12 @@ const handleDelete = async (row: any) => {
|
|||||||
// 导出
|
// 导出
|
||||||
const handleExport = async () => {
|
const handleExport = async () => {
|
||||||
try {
|
try {
|
||||||
await makeExportDormReformTask(searchForm)
|
await makeExportDormReformTask(searchForm);
|
||||||
useMessage().success('导出任务已创建,请在文件管理中下载')
|
useMessage().success('导出任务已创建,请在文件管理中下载');
|
||||||
} catch (err: any) {
|
} catch (err: any) {
|
||||||
useMessage().error(err.msg || '导出失败')
|
useMessage().error(err.msg || '导出失败');
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
|
|
||||||
// 格式化整改结果
|
// 格式化整改结果
|
||||||
const formatReformStatus = (value: string | number) => {
|
const formatReformStatus = (value: string | number) => {
|
||||||
|
|||||||
@@ -163,16 +163,16 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts" name="DormRoom">
|
<script setup lang="ts" name="DormRoom">
|
||||||
import { ref, reactive, defineAsyncComponent, onMounted, computed, nextTick } from 'vue'
|
import { ref, reactive, defineAsyncComponent, onMounted, computed, nextTick } from 'vue';
|
||||||
import { useRoute } from 'vue-router'
|
import { useRoute } from 'vue-router';
|
||||||
import { BasicTableProps, useTable } from "/@/hooks/table";
|
import { BasicTableProps, useTable } from '/@/hooks/table';
|
||||||
import { fetchList, delObj, editDept } from "/@/api/stuwork/dormroom";
|
import { fetchList, delObj, editDept } from '/@/api/stuwork/dormroom';
|
||||||
import { makeExportDormRoomTask } from "/@/api/stuwork/file";
|
import { makeExportDormRoomTask } from '/@/api/stuwork/file';
|
||||||
import { getDeptList } from "/@/api/basic/basicclass";
|
import { getDeptList } from '/@/api/basic/basicclass';
|
||||||
import { getBuildingList } from "/@/api/stuwork/dormbuilding";
|
import { getBuildingList } from '/@/api/stuwork/dormbuilding';
|
||||||
import { useMessage, useMessageBox } from "/@/hooks/message";
|
import { useMessage, useMessageBox } from '/@/hooks/message';
|
||||||
import { getDicts } from "/@/api/admin/dict";
|
import { getDicts } from '/@/api/admin/dict';
|
||||||
import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
import TableColumnControl from '/@/components/TableColumnControl/index.vue';
|
||||||
|
|
||||||
// 引入组件
|
// 引入组件
|
||||||
const FormDialog = defineAsyncComponent(() => import('./form.vue'));
|
const FormDialog = defineAsyncComponent(() => import('./form.vue'));
|
||||||
@@ -321,12 +321,12 @@ const confirmDeptAssign = async () => {
|
|||||||
// 导出
|
// 导出
|
||||||
const handleExport = async () => {
|
const handleExport = async () => {
|
||||||
try {
|
try {
|
||||||
await makeExportDormRoomTask(searchForm)
|
await makeExportDormRoomTask(searchForm);
|
||||||
useMessage().success('导出任务已创建,请在文件管理中下载')
|
useMessage().success('导出任务已创建,请在文件管理中下载');
|
||||||
} catch (err: any) {
|
} catch (err: any) {
|
||||||
useMessage().error(err.msg || '导出失败')
|
useMessage().error(err.msg || '导出失败');
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
|
|
||||||
// 获取学院列表
|
// 获取学院列表
|
||||||
const getDeptListData = async () => {
|
const getDeptListData = async () => {
|
||||||
|
|||||||
@@ -3,13 +3,7 @@
|
|||||||
<div class="layout-padding-auto layout-padding-view">
|
<div class="layout-padding-auto layout-padding-view">
|
||||||
<!-- 顶部工具栏 -->
|
<!-- 顶部工具栏 -->
|
||||||
<div class="mb10">
|
<div class="mb10">
|
||||||
<el-button
|
<el-button icon="Download" type="primary" plain @click="handleExport"> 导出 </el-button>
|
||||||
icon="Download"
|
|
||||||
type="primary"
|
|
||||||
plain
|
|
||||||
@click="handleExport">
|
|
||||||
导出
|
|
||||||
</el-button>
|
|
||||||
</div>
|
</div>
|
||||||
<!-- 表格 -->
|
<!-- 表格 -->
|
||||||
<el-table
|
<el-table
|
||||||
@@ -17,7 +11,8 @@
|
|||||||
v-loading="state.loading"
|
v-loading="state.loading"
|
||||||
border
|
border
|
||||||
:cell-style="tableStyle.cellStyle"
|
: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 type="index" label="序号" width="60" align="center" />
|
||||||
<el-table-column prop="deptName" label="学院" show-overflow-tooltip align="center" />
|
<el-table-column prop="deptName" label="学院" show-overflow-tooltip align="center" />
|
||||||
<el-table-column prop="classNo" 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 prop="teacherPhone" label="班主任电话" show-overflow-tooltip align="center" />
|
||||||
<el-table-column label="操作" width="150" align="center" fixed="right">
|
<el-table-column label="操作" width="150" align="center" fixed="right">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<el-button
|
<el-button icon="View" text type="primary" @click="handleView(scope.row)"> 查看 </el-button>
|
||||||
icon="View"
|
|
||||||
text
|
|
||||||
type="primary"
|
|
||||||
@click="handleView(scope.row)">
|
|
||||||
查看
|
|
||||||
</el-button>
|
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
@@ -44,11 +33,11 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts" name="DormAbnormal">
|
<script setup lang="ts" name="DormAbnormal">
|
||||||
import { reactive, onMounted } from 'vue'
|
import { reactive, onMounted } from 'vue';
|
||||||
import { BasicTableProps, useTable } from "/@/hooks/table";
|
import { BasicTableProps, useTable } from '/@/hooks/table';
|
||||||
import { queryStudentAbnormal } from "/@/api/stuwork/dormroomstudent";
|
import { queryStudentAbnormal } from '/@/api/stuwork/dormroomstudent';
|
||||||
import { makeExportDormStudentAbnormalTask } from "/@/api/stuwork/file";
|
import { makeExportDormStudentAbnormalTask } from '/@/api/stuwork/file';
|
||||||
import { useMessage } from "/@/hooks/message";
|
import { useMessage } from '/@/hooks/message';
|
||||||
|
|
||||||
// 配置 useTable
|
// 配置 useTable
|
||||||
const state: BasicTableProps = reactive<BasicTableProps>({
|
const state: BasicTableProps = reactive<BasicTableProps>({
|
||||||
@@ -94,12 +83,12 @@ const handleView = (row: any) => {
|
|||||||
// 导出
|
// 导出
|
||||||
const handleExport = async () => {
|
const handleExport = async () => {
|
||||||
try {
|
try {
|
||||||
await makeExportDormStudentAbnormalTask()
|
await makeExportDormStudentAbnormalTask();
|
||||||
useMessage().success('导出任务已创建,请在文件管理中下载')
|
useMessage().success('导出任务已创建,请在文件管理中下载');
|
||||||
} catch (err: any) {
|
} catch (err: any) {
|
||||||
useMessage().error(err?.msg || '导出失败')
|
useMessage().error(err?.msg || '导出失败');
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
|
|
||||||
// 初始化
|
// 初始化
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
|
|||||||
@@ -191,20 +191,16 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts" name="DormRoomStudent">
|
<script setup lang="ts" name="DormRoomStudent">
|
||||||
import { reactive, ref, onMounted, computed, nextTick } from 'vue'
|
import { reactive, ref, onMounted, computed, nextTick } from 'vue';
|
||||||
import { useRoute } from 'vue-router'
|
import { useRoute } from 'vue-router';
|
||||||
import { BasicTableProps, useTable } from "/@/hooks/table";
|
import { BasicTableProps, useTable } from '/@/hooks/table';
|
||||||
import { fetchList, delObjs } from "/@/api/stuwork/dormroomstudent";
|
import { fetchList, delObjs } from '/@/api/stuwork/dormroomstudent';
|
||||||
import {
|
import { makeExportDormStudentTask, makeExportDormStudentAbnormalTask, makeExportDormStatisticsTask } from '/@/api/stuwork/file';
|
||||||
makeExportDormStudentTask,
|
import { getDeptList } from '/@/api/basic/basicclass';
|
||||||
makeExportDormStudentAbnormalTask,
|
import { getBuildingList } from '/@/api/stuwork/dormbuilding';
|
||||||
makeExportDormStatisticsTask
|
import { fetchDormRoomTreeList } from '/@/api/stuwork/dormroom';
|
||||||
} from "/@/api/stuwork/file";
|
import { useMessage, useMessageBox } from '/@/hooks/message';
|
||||||
import { getDeptList } from "/@/api/basic/basicclass";
|
import TableColumnControl from '/@/components/TableColumnControl/index.vue';
|
||||||
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 FormDialog from './form.vue';
|
||||||
import TransferDialog from './transfer.vue';
|
import TransferDialog from './transfer.vue';
|
||||||
import SwapDialog from './swap.vue';
|
import SwapDialog from './swap.vue';
|
||||||
@@ -379,14 +375,14 @@ const handleExport = async () => {
|
|||||||
roomNo: searchForm.roomNo || searchForm.roomNoInput,
|
roomNo: searchForm.roomNo || searchForm.roomNoInput,
|
||||||
classNo: searchForm.classNo,
|
classNo: searchForm.classNo,
|
||||||
stuNo: searchForm.stuNo,
|
stuNo: searchForm.stuNo,
|
||||||
realName: searchForm.realName
|
realName: searchForm.realName,
|
||||||
}
|
};
|
||||||
await makeExportDormStatisticsTask(params)
|
await makeExportDormStatisticsTask(params);
|
||||||
useMessage().success('导出任务已创建,请在文件管理中下载')
|
useMessage().success('导出任务已创建,请在文件管理中下载');
|
||||||
} catch (err: any) {
|
} catch (err: any) {
|
||||||
useMessage().error(err?.msg || '导出失败')
|
useMessage().error(err?.msg || '导出失败');
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
|
|
||||||
// 名单导出:住宿学生名单导出
|
// 名单导出:住宿学生名单导出
|
||||||
const handleExportList = async () => {
|
const handleExportList = async () => {
|
||||||
@@ -399,14 +395,14 @@ const handleExportList = async () => {
|
|||||||
roomNo: searchForm.roomNo || searchForm.roomNoInput,
|
roomNo: searchForm.roomNo || searchForm.roomNoInput,
|
||||||
classNo: searchForm.classNo,
|
classNo: searchForm.classNo,
|
||||||
stuNo: searchForm.stuNo,
|
stuNo: searchForm.stuNo,
|
||||||
realName: searchForm.realName
|
realName: searchForm.realName,
|
||||||
}
|
};
|
||||||
await makeExportDormStudentTask(params)
|
await makeExportDormStudentTask(params);
|
||||||
useMessage().success('导出任务已创建,请在文件管理中下载')
|
useMessage().success('导出任务已创建,请在文件管理中下载');
|
||||||
} catch (err: any) {
|
} catch (err: any) {
|
||||||
useMessage().error(err?.msg || '导出失败')
|
useMessage().error(err?.msg || '导出失败');
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
|
|
||||||
// 编辑(与转宿共用接口 edit,修改房间/床位/是否舍长)
|
// 编辑(与转宿共用接口 edit,修改房间/床位/是否舍长)
|
||||||
const handleEdit = (row: any) => {
|
const handleEdit = (row: any) => {
|
||||||
|
|||||||
@@ -170,20 +170,7 @@ import { queryAllSchoolYear } from '/@/api/basic/basicyear';
|
|||||||
import { getDicts } from '/@/api/admin/dict';
|
import { getDicts } from '/@/api/admin/dict';
|
||||||
import { useMessage, useMessageBox } from '/@/hooks/message';
|
import { useMessage, useMessageBox } from '/@/hooks/message';
|
||||||
import TableColumnControl from '/@/components/TableColumnControl/index.vue';
|
import TableColumnControl from '/@/components/TableColumnControl/index.vue';
|
||||||
import {
|
import { List, Calendar, Clock, OfficeBuilding, Grid, UserFilled, Trophy, EditPen, Setting, Menu, Search, Document } from '@element-plus/icons-vue';
|
||||||
List,
|
|
||||||
Calendar,
|
|
||||||
Clock,
|
|
||||||
OfficeBuilding,
|
|
||||||
Grid,
|
|
||||||
UserFilled,
|
|
||||||
Trophy,
|
|
||||||
EditPen,
|
|
||||||
Setting,
|
|
||||||
Menu,
|
|
||||||
Search,
|
|
||||||
Document,
|
|
||||||
} from '@element-plus/icons-vue';
|
|
||||||
import { useTableColumnControl } from '/@/hooks/tableColumn';
|
import { useTableColumnControl } from '/@/hooks/tableColumn';
|
||||||
import FormDialog from './form.vue';
|
import FormDialog from './form.vue';
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user