张诺
18 小时以前 ccd67e291e00a2ad9c29ad8df43de6fab5a4afed
src/views/collaborativeApproval/approvalProcess/components/approvalDia.vue
@@ -116,6 +116,19 @@
                <h4>备注</h4>
                <p>{{ currentQuotation.remark }}</p>
              </div>
              <div v-if="quotationAttachments.length > 0" style="margin-top: 20px;">
                <h4>附件</h4>
                <el-table :data="quotationAttachments" border style="width: 100%">
                  <el-table-column prop="name" label="附件名称" min-width="360" show-overflow-tooltip />
                  <el-table-column label="操作" width="160" align="center">
                    <template #default="{ row }">
                      <el-button link type="primary" size="small" @click="downloadAttachment(row)">下载</el-button>
                      <el-button link type="primary" size="small" @click="previewAttachment(row)">预览</el-button>
                    </template>
                  </el-table-column>
                </el-table>
              </div>
            </template>
          </template>
        </el-skeleton>
@@ -197,10 +210,6 @@
              <div v-if="!activity.isShen" class="node-reason">
                <span>审批意见:</span>{{ activity.approveNodeReason }}
              </div>
              <div v-if="!activity.isShen" class="node-reason">
                <span>签名:</span>
                        <img :src="activity.urlTem" class="signImg" alt="" v-if="activity.urlTem"/>
              </div>
              <div v-else-if="activity.isShen">
                <el-form-item
                  :prop="'activities.' + index + '.approveNodeReason'"
@@ -221,6 +230,7 @@
        </div>
      </template>
    </el-dialog>
    <filePreview ref="filePreviewRef" />
  </div>
</template>
@@ -234,8 +244,9 @@
import useUserStore from "@/store/modules/user.js";
import {userListNoPageByTenantId} from "@/api/system/user.js";
import { WarningFilled, Edit, Check, MoreFilled } from '@element-plus/icons-vue'
import { getQuotationList } from "@/api/salesManagement/salesQuotation.js";
import { getQuotationDetail, getQuotationList } from "@/api/salesManagement/salesQuotation.js";
import { getPurchaseByCode } from "@/api/procurementManagement/procurementLedger.js";
import filePreview from "@/components/filePreview/index.vue";
const emit = defineEmits(['close'])
const { proxy } = getCurrentInstance()
@@ -257,8 +268,34 @@
const currentQuotation = ref({})
const purchaseLoading = ref(false)
const currentPurchase = ref({})
const filePreviewRef = ref()
const isQuotationApproval = computed(() => Number(props.approveType) === 6)
const isPurchaseApproval = computed(() => Number(props.approveType) === 5)
const normalizeQuotationFiles = (raw) => {
  const list =
    (raw && Array.isArray(raw.salesLedgerFiles) && raw.salesLedgerFiles) ||
    (raw && Array.isArray(raw.quotationFiles) && raw.quotationFiles) ||
    (raw && Array.isArray(raw.fileList) && raw.fileList) ||
    (raw && Array.isArray(raw.files) && raw.files) ||
    []
  return list
    .map((item) => ({
      id: item?.id,
      name: item?.fileName || item?.name || item?.originalName || item?.filename || "附件",
      url: item?.fileUrl || item?.url || item?.path || item?.tempPath,
    }))
    .filter((i) => i.url)
}
const quotationAttachments = computed(() => normalizeQuotationFiles(currentQuotation.value))
const downloadAttachment = (row) => {
  proxy.$download.name(row.url)
}
const previewAttachment = (row) => {
  filePreviewRef.value?.open?.(row.url)
}
const data = reactive({
   form: {
@@ -334,9 +371,18 @@
    const quotationNo = row?.approveReason;
    if (quotationNo) {
      quotationLoading.value = true
      getQuotationList({ quotationNo }).then((res) => {
      getQuotationList({ quotationNo }).then(async (res) => {
        const records = res?.data?.records || []
        currentQuotation.value = records[0] || {}
        const first = records[0] || {}
        currentQuotation.value = first
        if (first?.id && normalizeQuotationFiles(first).length === 0) {
          try {
            const detailRes = await getQuotationDetail({ id: first.id })
            const detail = detailRes?.data || detailRes || {}
            currentQuotation.value = { ...first, ...detail }
          } catch (e) {
          }
        }
      }).finally(() => {
        quotationLoading.value = false
      })
@@ -449,4 +495,4 @@
   width: 200px;
   height: 60px;
}
</style>
</style>