Merge branch 'developer'
This commit is contained in:
@@ -252,6 +252,19 @@ export function saveRepresentor(id: number, representorTeacherNo?: string, repre
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 随机抽取部门参与人
|
||||
* @param applyId 采购申请ID
|
||||
* @param memberTeacherNos 参与随机抽取的人员工号列表(逗号分隔)
|
||||
*/
|
||||
export function randomSelectRepresentor(applyId: string, memberTeacherNos: string) {
|
||||
return request({
|
||||
url: '/purchase/purchasingapply/randomSelectRepresentor',
|
||||
method: 'post',
|
||||
data: { applyId, memberTeacherNos },
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 文件归档:按文件类型打包下载该申请单下所有附件的下载地址(GET 请求,浏览器直接下载 zip)
|
||||
* @param purchaseId 采购申请ID
|
||||
|
||||
@@ -9,8 +9,8 @@
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<el-row :gutter="16">
|
||||
<el-col :span="8">
|
||||
<el-row :gutter="24">
|
||||
<el-col :span="16">
|
||||
<el-card shadow="never" class="info-card">
|
||||
<template #header>
|
||||
<div class="card-header">
|
||||
@@ -38,11 +38,19 @@
|
||||
<span class="card-title">招标文件</span>
|
||||
</div>
|
||||
</template>
|
||||
<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 :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 prop="version" label="版本" width="60" align="center">
|
||||
<template #default="scope">
|
||||
<el-tag v-if="scope.row.isCurrent === '1'" type="success" size="small">{{ scope.row.version || '-' }}</el-tag>
|
||||
<span v-else>{{ scope.row.version || '-' }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="fileName" label="文件名称" show-overflow-tooltip />
|
||||
<el-table-column prop="createTime" label="上传时间" width="160" />
|
||||
<el-table-column label="操作" width="120" align="center">
|
||||
<el-table-column prop="uploadUserName" label="上传人" width="100" />
|
||||
<el-table-column prop="createTime" label="上传时间" width="150" />
|
||||
<el-table-column prop="comment" label="批注" width="150" show-overflow-tooltip />
|
||||
<el-table-column label="操作" width="120" align="center" fixed="right">
|
||||
<template #default="scope">
|
||||
<el-button type="primary" link size="small" icon="View" @click="handlePreview(scope.row)">预览</el-button>
|
||||
<el-button type="success" link size="small" icon="Download" @click="handleDownload(scope.row)">下载</el-button>
|
||||
@@ -53,7 +61,7 @@
|
||||
</el-card>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="16">
|
||||
<el-col :span="8">
|
||||
<el-card shadow="never" class="flow-card">
|
||||
<template #header>
|
||||
<div class="card-header">
|
||||
@@ -85,6 +93,7 @@ import { ref, computed } from 'vue';
|
||||
import { DocumentChecked } from '@element-plus/icons-vue';
|
||||
import { useMessage } from '/@/hooks/message';
|
||||
import { getObj, getDocList, previewFileById, downloadFileById } from '/@/api/purchase/purchasingrequisition';
|
||||
import { getFlowPurchaseDetail } from '/@/api/purchase/bidfile';
|
||||
|
||||
const FlowCommentTimeline = defineAsyncComponent(() => import('/@/views/jsonflow/comment/timeline.vue'));
|
||||
|
||||
@@ -93,6 +102,10 @@ interface DocItem {
|
||||
fileName: string;
|
||||
fileUrl: string;
|
||||
createTime?: string;
|
||||
version?: string;
|
||||
isCurrent?: string;
|
||||
uploadUserName?: string;
|
||||
comment?: string;
|
||||
}
|
||||
|
||||
const visible = ref(false);
|
||||
@@ -117,10 +130,14 @@ const open = async (id: string, row?: any) => {
|
||||
docList.value = [];
|
||||
applyData.value = row || {};
|
||||
|
||||
if (!row || !row.fileFlowInstId) {
|
||||
// 使用专门的招标文件审批详情接口获取数据,确保包含 agentName
|
||||
if (!row || !row.fileFlowInstId || !row.agentName) {
|
||||
try {
|
||||
const res = await getObj(id);
|
||||
applyData.value = res?.data || {};
|
||||
const res = await getFlowPurchaseDetail(id);
|
||||
if (res?.code === 0 && res?.data) {
|
||||
// 合并数据,确保 agentName 等字段正确返回
|
||||
applyData.value = { ...applyData.value, ...res.data };
|
||||
}
|
||||
} catch (e) {
|
||||
console.error('获取采购申请详情失败', e);
|
||||
useMessage().error('获取采购申请详情失败');
|
||||
@@ -134,11 +151,15 @@ const open = async (id: string, row?: any) => {
|
||||
const docsRes = await getDocList(applyData.value.id);
|
||||
const docs = docsRes?.data || [];
|
||||
if (Array.isArray(docs) && docs.length > 0) {
|
||||
docList.value = docs.map((d: any) => ({
|
||||
docList.value = docs.map((d: any) => ({
|
||||
id: d.id || d.fileId,
|
||||
fileName: d.fileName || d.fileTitle || '招标文件',
|
||||
fileUrl: d.fileUrl,
|
||||
createTime: d.createTime,
|
||||
version: d.version,
|
||||
isCurrent: d.isCurrent,
|
||||
uploadUserName: d.uploadUserName,
|
||||
comment: d.comment,
|
||||
}));
|
||||
}
|
||||
} catch (e) {
|
||||
|
||||
@@ -11,9 +11,9 @@
|
||||
</div>
|
||||
</template>
|
||||
<div v-loading="loading" style="padding-bottom: 20px">
|
||||
<div class="form-toolbar mb12" style="text-align: right">
|
||||
<el-button type="primary" link icon="QuestionFilled" @click="helpDialogVisible = true"> 帮助 </el-button>
|
||||
</div>
|
||||
<!-- <div class="form-toolbar mb12" style="text-align: right">-->
|
||||
<!-- <el-button type="primary" link icon="QuestionFilled" @click="helpDialogVisible = true"> 帮助 </el-button>-->
|
||||
<!-- </div>-->
|
||||
<el-form
|
||||
ref="formRef"
|
||||
:model="dataForm"
|
||||
@@ -375,8 +375,8 @@ upload-file-url="/purchase/purchasingfiles/upload"
|
||||
<div class="step-title mb12">学校统一采购</div>
|
||||
<el-row :gutter="16">
|
||||
<el-col :span="8" class="mb12">
|
||||
<el-form-item label="采购形式" prop="purchaseMode" :required="isPurchaseModeRequired">
|
||||
<el-radio-group v-model="dataForm.purchaseMode" :disabled="schoolUnifiedPurchaseFormDisabled">
|
||||
<el-form-item label="组织采购形式" prop="purchaseSchool" :required="isPurchaseSchoolRequired">
|
||||
<el-radio-group v-model="dataForm.purchaseSchool" :disabled="schoolUnifiedPurchaseFormDisabled">
|
||||
<el-radio v-for="item in purchaseModeSchoolList" :key="item.value" :label="item.value">
|
||||
{{ item.label }}
|
||||
</el-radio>
|
||||
@@ -841,7 +841,7 @@ upload-file-url="/purchase/purchasingfiles/upload"
|
||||
</template>
|
||||
<template v-else>
|
||||
<el-button v-if="!isFlowEmbed" @click="handleCancel">取消</el-button>
|
||||
<el-button v-if="!flowSubmitDisabled" type="warning" @click="handleTempStore" :disabled="loading"> 暂存 </el-button>
|
||||
<el-button v-if="!isFlowEmbed && !flowSubmitDisabled" type="warning" @click="handleTempStore" :disabled="loading"> 暂存 </el-button>
|
||||
<!-- <el-button -->
|
||||
<!-- type="primary" -->
|
||||
<!-- @click="handleSubmit" -->
|
||||
@@ -963,6 +963,7 @@ const dataForm = reactive({
|
||||
isSpecial: '',
|
||||
hasAssets: '0',
|
||||
purchaseMode: '',
|
||||
purchaseSchool:'',
|
||||
purchaseType: '',
|
||||
purchaseTypeUnion: '',
|
||||
purchaseChannel: '',
|
||||
@@ -1199,8 +1200,8 @@ const isPurchaseTypeUnionRequired = computed(() => {
|
||||
return false;
|
||||
});
|
||||
|
||||
// 学校统一采购 - 采购形式是否必填
|
||||
const isPurchaseModeRequired = computed(() => {
|
||||
// 学校统一采购 - 组织采购形式是否必填
|
||||
const isPurchaseSchoolRequired = computed(() => {
|
||||
// 审核阶段:采购中心必填
|
||||
if (isFlowEmbed.value && isPurchaseCenter.value) {
|
||||
return true;
|
||||
@@ -1231,20 +1232,7 @@ const showPurchaseDetailBlocks = computed(() => {
|
||||
return !!isViewMode.value || !!isFlowEmbed.value || !!dataForm.id || isPurchaseTypeDetermined.value;
|
||||
});
|
||||
|
||||
// 学校统一采购时采购形式默认值(不由用户选择):>=100万→政府采购('1');5万~100万且集采=否→学校自主('2');5万~100万且集采=政府集中采购→政府采购('1');5万~100万且集采=学校集中采购→学校自主('2')
|
||||
const schoolUnifiedPurchaseFormDefault = computed(() => {
|
||||
if (isDeptPurchase.value || dataForm.budget == null) return null;
|
||||
const budget = Number(dataForm.budget);
|
||||
if (budget >= BUDGET_GOV_PURCHASE_THRESHOLD.value) return '1'; // 政府采购
|
||||
if (budget >= BUDGET_DEPT_PURCHASE_THRESHOLD.value && budget < BUDGET_GOV_PURCHASE_THRESHOLD.value) {
|
||||
if (dataForm.isCentralized === '0') return '2'; // 集采=否 → 学校自主采购
|
||||
if (dataForm.isCentralized === '1') return '1'; // 政府集中采购 → 政府采购
|
||||
if (dataForm.isCentralized === '2') return '2'; // 学校集中采购 → 学校自主采购
|
||||
}
|
||||
return null;
|
||||
});
|
||||
|
||||
// 学校统一采购时采购形式是否禁用
|
||||
// 学校统一采购时组织采购形式是否禁用
|
||||
// 申请阶段:始终可选(根据默认值自动选中后,允许用户自行修改)
|
||||
// 流程嵌入:采购中心节点可编辑,其他节点只读
|
||||
const schoolUnifiedPurchaseFormDisabled = computed(() => {
|
||||
@@ -1587,15 +1575,11 @@ watch(
|
||||
{ immediate: true }
|
||||
);
|
||||
|
||||
// 学校统一采购:采购形式由规则默认选择,随预算与集采变化自动更新
|
||||
// 学校统一采购:组织采购形式由规则默认选择,随预算与集采变化自动更新
|
||||
watch(
|
||||
[() => schoolUnifiedPurchaseFormDefault.value, () => isDeptPurchase.value],
|
||||
[ () => isDeptPurchase.value],
|
||||
() => {
|
||||
if (isDeptPurchase.value) return;
|
||||
const def = schoolUnifiedPurchaseFormDefault.value;
|
||||
if (def != null && dataForm.purchaseMode !== def) {
|
||||
dataForm.purchaseMode = def;
|
||||
}
|
||||
},
|
||||
{ immediate: true }
|
||||
);
|
||||
@@ -1745,12 +1729,12 @@ const dataRules = reactive({
|
||||
},
|
||||
],
|
||||
// 学校统一采购 + 采购中心审核:采购形式必填
|
||||
purchaseMode: [
|
||||
purchaseSchool: [
|
||||
{
|
||||
validator: (_rule: any, value: string, callback: (e?: Error) => void) => {
|
||||
if (!isDeptPurchase.value && isFlowEmbed.value && isPurchaseCenter.value) {
|
||||
if (!value || String(value).trim() === '') {
|
||||
callback(new Error('请选择采购形式'));
|
||||
callback(new Error('请选择组织采购形式'));
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -1877,6 +1861,7 @@ async function loadDetail(applyId: string | number) {
|
||||
isCentralized: detail.isCentralized != null ? String(detail.isCentralized) : '',
|
||||
isSpecial: detail.isSpecial != null ? String(detail.isSpecial) : '',
|
||||
purchaseMode: detail.purchaseMode != null ? String(detail.purchaseMode) : '',
|
||||
purchaseSchool: detail.purchaseSchool != null ? String(detail.purchaseSchool) : '',
|
||||
purchaseType:
|
||||
detail.purchaseType === DEPT_PURCHASE_TYPE.ENTRUST_CENTER
|
||||
? ''
|
||||
|
||||
@@ -208,13 +208,109 @@
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</el-card>
|
||||
|
||||
<!-- 部门参与人选择(部门负责人审核时显示) -->
|
||||
<el-card v-if="showRepresentorSection" shadow="never" class="representor-card">
|
||||
<template #header>
|
||||
<div class="card-header">
|
||||
<span class="card-title">
|
||||
<el-icon><User /></el-icon>
|
||||
部门参与人
|
||||
</span>
|
||||
<el-tag v-if="applyData.representorTeacherNo" type="success">已设置</el-tag>
|
||||
<el-tag v-else type="warning">待设置</el-tag>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<el-form label-width="120px">
|
||||
<el-form-item label="选择方式">
|
||||
<el-radio-group v-model="representorSelectMode" :disabled="isViewMode">
|
||||
<el-radio label="designate">指定一人</el-radio>
|
||||
<el-radio label="random">随机抽取</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
|
||||
<!-- 指定一人 -->
|
||||
<el-form-item v-if="representorSelectMode === 'designate'" label="选择参与人">
|
||||
<el-select
|
||||
v-model="selectedRepresentor"
|
||||
placeholder="请选择参与人"
|
||||
filterable
|
||||
:disabled="isViewMode"
|
||||
style="width: 300px"
|
||||
>
|
||||
<el-option
|
||||
v-for="member in deptMembers"
|
||||
:key="member.teacherNo"
|
||||
:label="`${member.realName} (${member.teacherNo})`"
|
||||
:value="member.teacherNo"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
<!-- 随机抽取 -->
|
||||
<el-form-item v-if="representorSelectMode === 'random'" label="选择候选人">
|
||||
<el-select
|
||||
v-model="randomCandidates"
|
||||
placeholder="请选择参与随机抽取的人员(可多选)"
|
||||
multiple
|
||||
filterable
|
||||
:disabled="isViewMode"
|
||||
style="width: 400px"
|
||||
>
|
||||
<el-option
|
||||
v-for="member in deptMembers"
|
||||
:key="member.teacherNo"
|
||||
:label="`${member.realName} (${member.teacherNo})`"
|
||||
:value="member.teacherNo"
|
||||
/>
|
||||
</el-select>
|
||||
<el-button
|
||||
type="primary"
|
||||
:loading="randomSelectLoading"
|
||||
:disabled="randomCandidates.length < 2 || isViewMode"
|
||||
style="margin-left: 12px"
|
||||
@click="handleRandomSelect"
|
||||
>
|
||||
随机抽取
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
|
||||
<!-- 已选中的参与人 -->
|
||||
<el-form-item v-if="currentRepresentor" label="已选中参与人">
|
||||
<el-tag type="success" size="large">
|
||||
{{ currentRepresentor.realName }} ({{ currentRepresentor.teacherNo }})
|
||||
</el-tag>
|
||||
</el-form-item>
|
||||
|
||||
<!-- 参与人身份 -->
|
||||
<el-form-item label="参与人身份" required>
|
||||
<el-radio-group v-model="representorType" :disabled="isViewMode">
|
||||
<el-radio label="purchase_rep">采购代表</el-radio>
|
||||
<el-radio label="judge">评委</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
|
||||
<!-- 保存按钮 -->
|
||||
<el-form-item>
|
||||
<el-button
|
||||
type="primary"
|
||||
:loading="saveRepresentorLoading"
|
||||
:disabled="!canSaveRepresentor || isViewMode"
|
||||
@click="handleSaveRepresentor"
|
||||
>
|
||||
保存参与人信息
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</el-card>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts" name="BidFileAudit">
|
||||
import { ref, reactive, computed, onMounted, watch } from 'vue';
|
||||
import { useRoute } from 'vue-router';
|
||||
import { Document, FolderOpened, Upload, Link, Guide } from '@element-plus/icons-vue';
|
||||
import { Document, FolderOpened, Upload, Link, Guide, User } from '@element-plus/icons-vue';
|
||||
import { ElMessage } from 'element-plus';
|
||||
import { Session } from '/@/utils/storage';
|
||||
import { useUserInfo } from '/@/stores/userInfo';
|
||||
@@ -232,6 +328,7 @@ import {
|
||||
} from '/@/api/purchase/bidfile';
|
||||
import { getRequirementFiles } from '/@/api/purchase/purchasingfiles';
|
||||
import { currElTabIsSave } from '/@/api/order/order-key-vue';
|
||||
import { getDeptMembers, saveRepresentor, randomSelectRepresentor } from '/@/api/purchase/purchasingrequisition';
|
||||
|
||||
// ==================== Props & Emits ====================
|
||||
|
||||
@@ -252,7 +349,8 @@ const currentUserRoleCodes = computed(() => userStore.userInfos.roleCodes || [])
|
||||
const ROLE_LABEL_MAP: Record<string, string> = {
|
||||
PURCHASE_AGENT: '招标代理',
|
||||
PURCHASE_ASSET: '资产管理处',
|
||||
PURCHASE_DEPT_APPLY: '部门负责人',
|
||||
PURCHASE_DEPT_APPLY: '部门经办人',
|
||||
PURCHASE_DEPT_AUDIT: '部门负责人',
|
||||
PURCHASE_FILE_AUDIT: '内审部门',
|
||||
PURCHASE_CENTER: '采购中心',
|
||||
};
|
||||
@@ -295,6 +393,7 @@ const isViewMode = computed(() => {
|
||||
const isAgent = computed(() => currentUserRoleCodes.value.includes('PURCHASE_AGENT'));
|
||||
const isAsset = computed(() => currentUserRoleCodes.value.includes('PURCHASE_ASSET'));
|
||||
const isDeptApply = computed(() => currentUserRoleCodes.value.includes('PURCHASE_DEPT_APPLY'));
|
||||
const isDeptAudit = computed(() => currentUserRoleCodes.value.includes('PURCHASE_DEPT_AUDIT'));
|
||||
const isFileAudit = computed(() => currentUserRoleCodes.value.includes('PURCHASE_FILE_AUDIT'));
|
||||
|
||||
// 是否显示上传区域
|
||||
@@ -311,6 +410,12 @@ const showFlowTargetSection = computed(() => {
|
||||
return isAsset.value && isFlowEmbed.value;
|
||||
});
|
||||
|
||||
// 是否显示部门参与人选择区域(仅部门负责人在审核时显示)
|
||||
const showRepresentorSection = computed(() => {
|
||||
if (isViewMode.value) return false;
|
||||
return isDeptAudit.value && isFlowEmbed.value;
|
||||
});
|
||||
|
||||
// 采购申请数据
|
||||
const applyData = ref<any>({});
|
||||
const purchaseTypeLabel = computed(() => {
|
||||
@@ -351,6 +456,24 @@ const uploadRules = {
|
||||
// 流转去向(资产管理处审核时使用)
|
||||
const flowTarget = ref<string>('');
|
||||
|
||||
// 部门参与人选择相关(部门负责人审核时使用)
|
||||
const representorSelectMode = ref<'designate' | 'random'>('designate');
|
||||
const deptMembers = ref<any[]>([]);
|
||||
const deptMembersLoading = ref(false);
|
||||
const selectedRepresentor = ref<string>('');
|
||||
const randomCandidates = ref<string[]>([]);
|
||||
const currentRepresentor = ref<any>(null);
|
||||
const representorType = ref<string>('purchase_rep');
|
||||
const saveRepresentorLoading = ref(false);
|
||||
const randomSelectLoading = ref(false);
|
||||
|
||||
const canSaveRepresentor = computed(() => {
|
||||
if (representorSelectMode.value === 'designate') {
|
||||
return !!selectedRepresentor.value;
|
||||
}
|
||||
return !!currentRepresentor.value;
|
||||
});
|
||||
|
||||
// ==================== 计算属性 ====================
|
||||
|
||||
const BID_FILE_TYPE = '130';
|
||||
@@ -634,6 +757,93 @@ const registerFlowCallbacks = () => {
|
||||
}
|
||||
};
|
||||
|
||||
// ==================== 部门参与人选择 ====================
|
||||
|
||||
const loadDeptMembers = async () => {
|
||||
if (!showRepresentorSection.value) return;
|
||||
|
||||
try {
|
||||
deptMembersLoading.value = true;
|
||||
const res = await getDeptMembers();
|
||||
if (res.code === 0 && res.data) {
|
||||
deptMembers.value = res.data;
|
||||
}
|
||||
} catch (e: any) {
|
||||
ElMessage.error(e?.msg || '加载部门人员失败');
|
||||
} finally {
|
||||
deptMembersLoading.value = false;
|
||||
}
|
||||
};
|
||||
|
||||
const handleRandomSelect = async () => {
|
||||
if (randomCandidates.value.length < 2) {
|
||||
ElMessage.warning('请至少选择2名候选人');
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
randomSelectLoading.value = true;
|
||||
const res = await randomSelectRepresentor(
|
||||
effectivePurchaseId.value,
|
||||
randomCandidates.value.join(',')
|
||||
);
|
||||
if (res.code === 0 && res.data) {
|
||||
currentRepresentor.value = res.data;
|
||||
ElMessage.success(`随机抽取成功:${res.data.realName}`);
|
||||
} else {
|
||||
ElMessage.error(res.msg || '随机抽取失败');
|
||||
}
|
||||
} catch (e: any) {
|
||||
ElMessage.error(e?.msg || '随机抽取失败');
|
||||
} finally {
|
||||
randomSelectLoading.value = false;
|
||||
}
|
||||
};
|
||||
|
||||
const handleSaveRepresentor = async () => {
|
||||
if (!canSaveRepresentor.value) {
|
||||
ElMessage.warning('请先选择参与人');
|
||||
return;
|
||||
}
|
||||
|
||||
if (!representorType.value) {
|
||||
ElMessage.warning('请选择参与人身份');
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
saveRepresentorLoading.value = true;
|
||||
let res: any;
|
||||
|
||||
if (representorSelectMode.value === 'designate') {
|
||||
res = await saveRepresentor(
|
||||
Number(effectivePurchaseId.value),
|
||||
selectedRepresentor.value,
|
||||
undefined,
|
||||
representorType.value
|
||||
);
|
||||
} else {
|
||||
res = await saveRepresentor(
|
||||
Number(effectivePurchaseId.value),
|
||||
currentRepresentor.value?.teacherNo,
|
||||
randomCandidates.value.join(','),
|
||||
representorType.value
|
||||
);
|
||||
}
|
||||
|
||||
if (res.code === 0) {
|
||||
ElMessage.success('保存参与人信息成功');
|
||||
await loadApplyData();
|
||||
} else {
|
||||
ElMessage.error(res.msg || '保存失败');
|
||||
}
|
||||
} catch (e: any) {
|
||||
ElMessage.error(e?.msg || '保存失败');
|
||||
} finally {
|
||||
saveRepresentorLoading.value = false;
|
||||
}
|
||||
};
|
||||
|
||||
// ==================== 生命周期 ====================
|
||||
|
||||
onMounted(async () => {
|
||||
@@ -642,6 +852,9 @@ onMounted(async () => {
|
||||
if (isAgent.value) {
|
||||
await loadRequirementFiles();
|
||||
}
|
||||
if (showRepresentorSection.value) {
|
||||
await loadDeptMembers();
|
||||
}
|
||||
registerFlowCallbacks();
|
||||
});
|
||||
|
||||
@@ -654,6 +867,9 @@ watch(
|
||||
if (isAgent.value) {
|
||||
await loadRequirementFiles();
|
||||
}
|
||||
if (showRepresentorSection.value) {
|
||||
await loadDeptMembers();
|
||||
}
|
||||
registerFlowCallbacks();
|
||||
}
|
||||
},
|
||||
|
||||
@@ -55,7 +55,7 @@
|
||||
采购申请管理
|
||||
</span>
|
||||
<div class="header-actions">
|
||||
<el-button icon="Files" link type="primary"> 采购申请汇总</el-button>
|
||||
<!-- <el-button icon="QuestionFilled" link type="primary"> 采购申请操作说明文档下载</el-button>-->
|
||||
<el-button icon="FolderAdd" type="primary" @click="handleAdd"> 新增</el-button>
|
||||
<right-toolbar v-model:showSearch="showSearch" class="ml10" @queryTable="getDataList" />
|
||||
</div>
|
||||
@@ -72,14 +72,14 @@
|
||||
:header-cell-style="tableStyle.headerCellStyle"
|
||||
class="modern-table"
|
||||
>
|
||||
<el-table-column type="index" label="序号" width="70" align="center">
|
||||
<el-table-column type="index" label="序号" width="50" align="center">
|
||||
<template #header>
|
||||
<el-icon>
|
||||
<List />
|
||||
</el-icon>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="purchaseNo" label="申请单编号" min-width="180">
|
||||
<el-table-column prop="purchaseNo" label="申请单编号" min-width="170">
|
||||
<template #header>
|
||||
<el-icon>
|
||||
<DocumentCopy />
|
||||
@@ -130,7 +130,7 @@
|
||||
<span style="margin-left: 4px">需求部门</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="projectType" label="项目类别" min-width="200" align="left" show-overflow-tooltip>
|
||||
<el-table-column prop="projectType" label="项目类别" min-width="100" align="left" show-overflow-tooltip>
|
||||
<template #header>
|
||||
<el-icon>
|
||||
<Collection />
|
||||
@@ -151,7 +151,7 @@
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="budget" label="项目预算(元)" width="130" align="right">
|
||||
<el-table-column prop="budget" label="项目预算(元)" width="120" align="right">
|
||||
<template #header>
|
||||
<el-icon>
|
||||
<Money />
|
||||
|
||||
Reference in New Issue
Block a user