فهرست منبع

Merge branch 'main'

xiaodai2017 1 سال پیش
والد
کامیت
393a0b5003

+ 3 - 0
src/apis/service/customerService/invoiceApply/index.js

@@ -5,6 +5,9 @@ const api = "admin/orderInvoice/";
 export default {
   // 详情
   detail: (data, params) => http(api + "info", data, "post", params),
+  //上传发票
+  upload:(data, params) => http(api + "edit", data, "post", params),
+
   // 更新
   update: (data, params) => http(api + "zxedit", data, "post", params),
   // 修改状态

+ 47 - 75
src/components/approval-node/src/uploadInvoice/_template.js

@@ -1,15 +1,15 @@
 export const mapFields = {
+    invoiceNo:'invoiceNo', //发票类型
     invoiceType:'invoiceType', //发票类型
-    invoiceNumber:"invoiceNumber", //发票号码
+    invoiceNumber:"invoiceNum", //发票号码
     invoiceCode:'invoiceCode',  //发票代码
     invoiceName:'invoiceName', //发票名称
-    openTime:'openTime', //开票日期
-    beforeTax:'beforeTax', //税前金额
-    afterTax:'afterTax' //税后金额
+    openTime:'openDate', //开票日期
+    beforeTax:'subTotal', //税前金额
+    afterTax:'total', //税后金额
+    checkNumber:'checkCode'
 }
 
-export const getTableProperty = (key) => mapTemplateToTable[key]
-
 /***
  * @props
  * 发票申请编号 invoiceNo
@@ -25,67 +25,57 @@ export const getTableProperty = (key) => mapTemplateToTable[key]
 */
 
 export const manuallyUploadRules = {
-   invoiceType:[
+   [mapFields.invoiceType]:[
         {
             trigger: "blur",
             message: "请选择发票类型",
             required: true
         }
     ],
-    invoiceNumber: [
+    [mapFields.invoiceNumber]: [
         {
             trigger: "blur",
             message: "请输入发票号码",
             required: true
         }
     ],
-    invoiceCode: [
+    [mapFields.invoiceCode]: [
         {
             trigger: "blur",
             message: "请选择发票代码",
             required: true
         }
     ],
-    openTime: [
+    [mapFields.openTime]: [
         {
             trigger: "blur",
             message: "请选择开票时间",
             required: true
         }
     ],
-    beforeTax: [
+    [mapFields.beforeTax]: [
         {
             trigger: "blur",
             message: "请输入金额",
             required: true
         }
     ],
-    invoiceName: [
+    [mapFields.afterTax]: [
         {
             trigger: "blur",
-            message: "请输入发票名称",
+            message: "请输入税后金额",
             required: true
         }
     ],
-    checkNumber: [
+    [mapFields.checkNumber]: [
         {
             trigger: "blur",
             message: "请输入校验码",
-            required: true
+            required: false
         }
     ]
 }
 
-const mapTemplateToTable = {
-    '发票申请编号': "invoiceNo",
-    '发票类型': "invoiceType",
-    '发票号码': "invoiceNumber",
-    '开票日期': "openTime",
-    '税后金额': "afterTax",
-    '发票代码': "invoiceCode",
-    '税前金额': "beforeTax",
-    '校验码': "checkNumber"
-}
 
 export const columns = [
     {
@@ -94,100 +84,82 @@ export const columns = [
         width: '70px'
     },
     {
-        prop: "invoiceNo",
+        prop: mapFields.invoiceNo,
         label: '发票申请编号',
         width: '110px',
         required: true
     },
     {
-        prop: "invoiceType",
+        prop: mapFields.invoiceType,
         label: '发票类型',
         width: '120px',
         required: true
     },
     {
-        prop: "invoiceNumber",
+        prop: mapFields.invoiceNumber,
         label: '发票号码',
         width: '156px',
         required: true
     },
     {
-        prop: "openTime",
+        prop: mapFields["invoiceCode"],
+        label: '发票代码',
+        width: '156px',
+        required: true
+    },
+    {
+        prop: mapFields["openTime"],
         label: '开票日期',
         width: '180px',
         required: true
     },
     {
-        prop: "afterTax",
+        prop: mapFields["afterTax"],
         label: '税后金额',
         width: '156px',
         required: true
     },
     {
-        prop: "invoiceCode",
-        label: '发票代码',
-        width: '156px',
-        required: false
-    },
-    {
-        prop: "beforeTax",
+        prop: mapFields["beforeTax"],
         label: '税前金额',
         width: '150px',
         required: false
     },
     {
-        prop: "checkNumber",
+        prop: mapFields["checkNumber"],
         label: '校验码',
         minWidth: '150px',
         required: false
     },
 ]
 
-export function createErrorMessage(messages) {
-    const rows = Object.keys(messages)
-    return rows.reduce((prev, row, index) => {
-        const suffix = index === rows.length - 1 ? '</ul>' : ''
-        const content = prev + ` <li><strong style="font-weight:700">第${row}行</strong>,${messages[row]} </li> `
-        return content + suffix
-    }, '<ul>')
+export const getColumn = (key) => {
+    return (columns.find(({prop}) => key === prop) || {})
 }
 
-export const createFieldVerification = (message) => ({
-    notValidRows: [],
-    isValid: true,
-    message
-})
+export const getTableProperty = (key) => {
+    return (columns.find(({label}) => key === label) || {}).prop
+}
 
-export const template = Array(1).fill(1).map(() => Object.keys(mapTemplateToTable).reduce((prev, property) => {
-    prev[property] = ''
+export const template = Array(1).fill(1).map(() => columns.slice(2).reduce((prev, {label}) => {
+    prev[label] = ''
     return prev
 }, {}))
 
-export const requsetFields = []
+export const requsetFields = [
+    mapFields.invoiceNumber,
+    mapFields.invoiceCode,
+    mapFields.invoiceType,
+    mapFields.afterTax,
+    mapFields.openTime
+]
 
 export const requiredFields = [
-    "invoiceNo",
-    "invoiceNumber",
-    "invoiceType",
-    "afterTax",
-    "openTime"
+    mapFields.invoiceNumber,
+    mapFields.invoiceCode,
+    mapFields.invoiceType,
+    mapFields.afterTax,
+    mapFields.openTime
 ]
 
 export const numberFields = []
-
-export const helper = {
-    fields(sourceObject) {
-        return Object.keys(sourceObject)
-    },
-    values(sourceObject, fields, index = 0) {
-        return fields.map(field => {
-            return sourceObject[field][index]
-        })
-    },
-    write(sourceObject, fields) {
-        return fields.reduce((prev, currentKey) => ({
-            ...prev,
-            [currentKey]: sourceObject[currentKey]
-        }), {})
-    }
-}

+ 47 - 18
src/components/approval-node/src/uploadInvoice/index.vue

@@ -1,19 +1,23 @@
 <template>
-  <div>
+  <div v-loading="loading">
     <div style="display:flex;justify-content:flex-end">
       <el-button size="mini" @click="onDownloadTemplate">下载发票模板</el-button>
       <el-button size="mini" type="primary" @click="xlsxVisible = true">上传发票信息</el-button>
     </div>
-    <el-table size="mini" style="margin-top:10px" border>
-      <el-table-column label="发票申请编号" prop="invoiceNo"></el-table-column>
-      <el-table-column label="发票状态" prop="invoiceStatus"></el-table-column>
-      <el-table-column label="发票类型" prop="invoiceType"></el-table-column>
-      <el-table-column label="发票代码" prop="invoiceCode"></el-table-column>
-      <el-table-column label="发票号码" prop="invoiceNumber"></el-table-column>
-      <el-table-column label="开票日期" prop="openTime"></el-table-column>
-      <el-table-column label="税前金额" prop="beforeTax"></el-table-column>
-      <el-table-column label="税后金额" prop="afterTax"></el-table-column>
-      <el-table-column label="校验码" prop="checkNumber"></el-table-column> 
+    <el-table size="mini" style="margin-top:10px" border :data="list">
+      <!-- <el-table-column label="发票申请编号" prop="invoiceNo"></el-table-column> -->
+      <!-- <el-table-column label="发票状态" :prop="mapFields/invoiceStatus']"></el-table-column> -->
+      <el-table-column label="发票类型" :prop="mapFields.invoiceType">
+        <template slot-scope="scope">
+          {{invoiceTypeList.find(({value}) => value === scope.row[mapFields.invoiceType]).label}}
+        </template>
+      </el-table-column>
+      <el-table-column label="发票代码" :prop="mapFields.invoiceCode"></el-table-column>
+      <el-table-column label="发票号码" :prop="mapFields.invoiceNumber"></el-table-column>
+      <el-table-column label="开票日期" :prop="mapFields.openTime"></el-table-column>
+      <el-table-column label="税前金额" :prop="mapFields.beforeTax"></el-table-column>
+      <el-table-column label="税后金额" :prop="mapFields.afterTax"></el-table-column>
+      <el-table-column label="校验码" :prop="mapFields.checkNumber"></el-table-column> 
       <el-table-column label="操作">
         <template #header>
           <div style="display:flex;justify-content:space-between;">
@@ -21,15 +25,19 @@
             <el-button size="mini" type="text" @click="manuallyVisible = true">添加</el-button>
           </div>
         </template>
+
+        <template slot-scope="scope">
+          <el-button @click="deleteItem(scope.$index)" size="mini" type="text">删除</el-button>
+        </template>
       </el-table-column>
     </el-table>
 
     <div style="display:flex;justify-content:flex-end;padding:10px 0px">
-      <el-button size="mini" type="primary">保存</el-button>
+      <el-button size="mini" type="primary" @click="onSave">保存</el-button>
     </div>
 
-    <manually-upload-modal :visible.sync="manuallyVisible" />
-    <excel-upload-modal :visible.sync="xlsxVisible" />
+    <manually-upload-modal :visible.sync="manuallyVisible" @change="handleModalChange" />
+    <excel-upload-modal :visible.sync="xlsxVisible" @change="handleUploadChange" />
   </div>
 </template>
 
@@ -37,9 +45,9 @@
 <script>
 import ManuallyUploadModal from "./manuallyUploadModal.vue"
 import ExcelUploadModal from "./xlsxUploadModal.vue"
+import { template,mapFields } from "./_template"
 import { writeFile, utils } from "xlsx";
-import { template } from "./_template"
-
+import { invoiceTypeList } from '@/assets/js/statusList';
 /***
  * @props
  * 发票申请编号 invoiceNo
@@ -55,6 +63,7 @@ import { template } from "./_template"
 */
 
 export default {
+  props:['requestMethod'],
   name:'UploadInvoiceNode',
   components:{
     ManuallyUploadModal,
@@ -62,11 +71,31 @@ export default {
   },
   data(){
     return {
-      manuallyVisible:false,
-      xlsxVisible:false
+      invoiceTypeList,
+      mapFields,
+      manuallyVisible: false,
+      xlsxVisible: false,
+      loading: false,
+      list: []
     }
   },
   methods:{
+    deleteItem(index){
+      this.list.splice(index, 1)
+    },
+    handleUploadChange(list){
+      this.list = [...list]
+    },
+    handleModalChange(item){
+      this.list.push(item)
+    },
+    async onSave(){
+      this.loading = true
+      const { code , data } = await this.requestMethod(this.list)
+      this.loading = false
+      if(code !== 1) return
+      this.$emit("refresh")
+    },
     onDownloadTemplate(){
       const workBook = utils.book_new()
       const workSheet = utils.json_to_sheet(template)

+ 64 - 27
src/components/approval-node/src/uploadInvoice/manuallyUploadModal.vue

@@ -4,25 +4,28 @@
       <el-form-item label="扫码枪">
         <el-input v-model="scanValue" type="textarea" placeholder="请在扫码完成后手动回车" @keyup.native.enter="handleEnterParse" />
       </el-form-item>
-      <el-form-item label="发票类型" prop="invoiceType">
-        <el-select v-model="ruleForm.invoiceType" style="width:100%" placeholder="发票类型">
-          <el-option />
+      <el-form-item label="发票类型" :prop="mapFields.invoiceType">
+        <el-select v-model="ruleForm[mapFields.invoiceType]" style="width:100%" placeholder="发票类型">
+          <el-option v-for="type in invoiceTypeList" :key="type.value" :value="type.value" :label="type.label"/>
         </el-select>
       </el-form-item>
-      <el-form-item label="发票代码" prop="invoiceCode">
-        <el-input v-model="ruleForm.invoiceCode" placeholder="发票代码" />
+      <el-form-item label="发票代码" :prop="mapFields.invoiceCode" v-if="!isAllelectric">
+        <el-input v-model="ruleForm[mapFields.invoiceCode]" placeholder="发票代码" />
       </el-form-item>
-      <el-form-item label="发票号码" prop="invoiceNumber">
-        <el-input v-model="ruleForm.invoiceNumber"  placeholder="发票号码" />
+      <el-form-item label="发票号码" :prop="mapFields.invoiceNumber">
+        <el-input v-model="ruleForm[mapFields.invoiceNumber]"  placeholder="发票号码" />
       </el-form-item>
-      <el-form-item label="税前金额" prop="beforeTax">
-        <el-input v-model="ruleForm.beforeTax" placeholder="税前金额" />
+      <el-form-item label="税前金额" :prop="mapFields.beforeTax" v-if="!isAllelectric">
+        <el-input v-model="ruleForm[mapFields.beforeTax]" placeholder="税前金额" />
       </el-form-item>
-      <el-form-item label="校验码" prop="checkNumber">
-        <el-input v-model="ruleForm.checkNumber"  placeholder="校验码" />
+      <el-form-item label="税后金额" :prop="mapFields.afterTax" v-if="isAllelectric">
+        <el-input v-model="ruleForm[mapFields.afterTax]" placeholder="税后金额" />
       </el-form-item>
-      <el-form-item label="开票日期" prop="openTime">
-        <el-date-picker v-model="ruleForm.openTime" style="width:100%" placeholder="开票日期" />
+      <el-form-item label="校验码" :prop="mapFields.checkNumber" v-if="!isAllelectric">
+        <el-input v-model="ruleForm[mapFields.checkNumber]"  placeholder="校验码" />
+      </el-form-item>
+      <el-form-item label="开票日期" :prop="mapFields.openTime">
+        <el-date-picker v-model="ruleForm[mapFields.openTime]"  value-format="yyyy-MM-dd HH:mm:ss" style="width:100%" placeholder="开票日期" />
       </el-form-item>
 
       <el-form-item style="display:flex;justify-content:flex-end">
@@ -35,6 +38,7 @@
 <script>
 import dayjs from "dayjs"
 import { manuallyUploadRules, mapFields } from "./_template"
+import { invoiceTypeList } from '@/assets/js/statusList'
 
 /***
  * @props
@@ -53,6 +57,28 @@ import { manuallyUploadRules, mapFields } from "./_template"
 export default {
   props:['visible'],
   computed:{
+    isAllelectric(){
+      const invoiceType = this.ruleForm[mapFields.invoiceType]
+      const allelectries = ['5','6']
+      return allelectries.includes(invoiceType)
+    },
+    isSpecialTicket(){
+      const invoiceType = this.ruleForm[mapFields.invoiceType]
+      const specialTickets = ['2','4']
+      return specialTickets.includes(invoiceType)
+    },
+    rules(){
+      const isSpecialTicket = this.isSpecialTicket
+
+      return {
+        ...manuallyUploadRules,
+        [mapFields.checkNumber]:[{
+          ...manuallyUploadRules[mapFields.checkNumber][0],
+          //非专票必填校验码
+          required:!isSpecialTicket
+        }]
+      }
+    },
     innerVisible:{
       get(){
         return this.visible
@@ -65,21 +91,30 @@ export default {
   data(){
     return {
       scanValue:"",
-      rules:manuallyUploadRules,
+      invoiceTypeList,
       mapFields,
       ruleForm:{
-        invoiceType:"",
-        invoiceCode:"",
-        beforeTax:"",
-        openTime: "",
-        invoiceNumber:"",
-        checkNumber:""
+        [mapFields.invoiceType]:"",
+        [mapFields.invoiceCode]:"",
+        [mapFields.beforeTax]:"",
+        [mapFields.openTime]: "",
+        [mapFields.invoiceNumber]:"",
+        [mapFields.checkNumber]:""
       }
     }
   },
   methods:{
     handleClose(){
       this.innerVisible = false
+
+      this.ruleForm = {
+        [mapFields.invoiceType]:"",
+        [mapFields.invoiceCode]:"",
+        [mapFields.beforeTax]:"",
+        [mapFields.openTime]: "",
+        [mapFields.invoiceNumber]:"",
+        [mapFields.checkNumber]:""
+      }
     },
     handleEnterParse(evt){
       /* 校验是否有中文逗号 **/
@@ -108,18 +143,20 @@ export default {
       this.scanValue = ""
       const { invoice } = mapPropertys
       this.ruleForm = {
-        invoiceType:invoiceType,
-        invoiceCode:invCode,
-        beforeTax:subtotal_amount,
-        openTime: _open_time,
-        invoiceNumber:invNumber,
-        checkNumber:checkNumber
+        [mapFields.invoiceType]:invoiceType,
+        [mapFields.invoiceCode]:invCode,
+        [mapFields.beforeTax]:subtotal_amount,
+        [mapFields.openTime]: _open_time,
+        [mapFields.invoiceNumber]:invNumber,
+        [mapFields.checkNumber]:checkNumber
       }
     },
     async onSubmit(){
       try{
         await this.$refs.ruleForm.validate()
-        console.log('todo...')
+        this.$emit("change",this.ruleForm)
+        this.handleClose()
+        // thiis
       }catch(err){
         console.log(err)
       }

+ 54 - 65
src/components/approval-node/src/uploadInvoice/xlsxUploadModal.vue

@@ -5,7 +5,7 @@
     title="导入发票信息"
     :visible="innerVisible"
     :close-on-click-modal="false"
-    @close="() => innerVisible = false"
+    @close="handleClose"
   >
     <div v-if="tableData && tableData.length > 0" class="tr" style="padding: 10px 0 0 0">
       <el-button :size="'mini'" @click="() => tableData = []">取消</el-button>
@@ -21,27 +21,22 @@
       :data="tableData"
       style="margin: 15px 0 0 0"
     />
-
-    <div style="width:100%;display:flex;justify-content:flex-end;margin-top:10px">
-      <el-button size="mini" type="primary">保存</el-button>
-    </div>
   </el-dialog>
 </template>
 
 <script>
 import companyHelper from '@/mixins/companyHelper'
 import { MessageBox } from 'element-ui'
-import dayjs from 'dayjs'
 
 import {
-  helper,
   columns,
+  getColumn,
   getTableProperty,
-  createErrorMessage,
-  createFieldVerification,
   requsetFields,
   requiredFields,
+  mapFields,
 } from './_template'
+import { invoiceTypeList } from '@/assets/js/statusList'
 
 export default {
   mixins: [companyHelper],
@@ -84,59 +79,38 @@ export default {
 
       return isHeaderOk
     },
-    validateRequiredField(requiredFields) {
-        const verification = createFieldVerification('发票申请编号、发票类型、发票号码、开票日期、税后金额不能为空')
-      const fields = helper.fields(requiredFields)
-      requiredFields[fields[0]].forEach((_, index) => {
-        if (!helper.values(requiredFields, fields, index).every(value => value && String(value).trim() !== '')) {
-          verification.isValid = false
-          verification.notValidRows.push(index + 1)
-        }
-      })
-      return verification
-    },
-    /* 处理不合法的值,提示错误信息,并返回最终的验证状态 **/
-    handleNotValidFields(...validStates) {
-      const messages = {}
-      let isFinalValid = true
+    /* 校验导入的数据 **/
+    /* 校验导入的数据 **/
+    validateFields() {
+      for (const index in this.tableData) {
+        const line = Number(index) + 1
+        const tableItem = this.tableData[index]
+        const properties = Object.keys(tableItem)
+        for (const property of properties) {
+          if(requiredFields.includes(property) && !this.isValueNotNull(tableItem[property])){
+            this.$message.warning(`第 ${line} 行 : ${getColumn(property).label} 不能为空`)
+            return false
+          }
 
-      for (const validState of validStates) {
-        const { message, isValid, notValidRows } = validState
-        if (isValid) continue
-        isFinalValid = false
+          if(property === mapFields.invoiceType){
+            const invoiceType = invoiceTypeList.find(({label}) => label === tableItem[property])
 
-        notValidRows.forEach(row => {
-          if (!messages[row]) messages[row] = []
-          messages[row].push(message)
-        })
-      }
+            if(!invoiceType){
+              this.$message.warning(`第 ${line} 行 : ${getColumn(property).label} 必须为 ${invoiceTypeList.map(({label}) => label).join('、')}`)
+              return false
+            }
 
-      return {
-        isFinalValid,
-        message: () => !isFinalValid && MessageBox({
-          type: 'warning',
-          title: '数据填写错误',
-          dangerouslyUseHTMLString: true,
-          message: createErrorMessage(messages),
-          customClass: 'error-message__wrapper'
-        })
-      }
-    },
-    /* 校验导入的数据 **/
-    validateFields(tableData = []) {
-      const mapTableFieldToTableData = {}
-      for (const tableItem of tableData) {
-        const propertys = Object.keys(tableItem)
-        for (const property of propertys) {
-          const value = tableItem[property]
-          if (!mapTableFieldToTableData[property]) mapTableFieldToTableData[property] = []
-          mapTableFieldToTableData[property].push(value)
+            // this.tableData[index][property] = invoiceType.value
+          }
         }
       }
 
-      return this.handleNotValidFields(
-        this.validateRequiredField(helper.write(mapTableFieldToTableData, requiredFields))
-      )
+      return true
+    },
+    isValueNotNull(value){
+      if(!value) return
+      const _value = String(value)
+      return _value.trim() !== ""
     },
     mapTemplateItemToTableItem(templateItem) {
       const tableItem = {}
@@ -149,7 +123,7 @@ export default {
     },
     onSuccess({ results: templateItems, header: templateHeader }) {
       const isHeaderValid = this.validateTableHeader(
-        this.columns.map(({ label }) => label).slice(1),
+        this.columns.map(({ label }) => label).slice(2),
         templateHeader
       )
       if (!isHeaderValid) {
@@ -164,18 +138,33 @@ export default {
         const tableItem = this.mapTemplateItemToTableItem(templateItem)
         this.tableData.push(tableItem)
       })
-      this.validateFields(this.tableData).message()
+      this.validateFields(this.tableData)
+    },
+    handleClose(){
+      this.innerVisible = false
+      this.tableData = []
     },
     async onSubmit() {
-      const { message, isFinalValid } = this.validateFields(this.tableData)
-      if (!isFinalValid) return message()
+      if(!this.validateFields(this.tableData)){
+        return
+      }
+
+      const list = this.tableData.map(tableItem => requsetFields.reduce((prev, currentKey) => {
+        let data = tableItem[currentKey]
+        if(currentKey === mapFields.invoiceType){
+          const invoiceType = invoiceTypeList.find(({label}) => label === tableItem[currentKey])
+          data = invoiceType.value
+        }
+
+        return {
+            ...prev,
+            [currentKey]: data
+          }
+      }, {}))
 
-      const list = this.tableData.map(tableItem => requsetFields.reduce((prev, currentKey) => ({
-        ...prev,
-        [currentKey]: tableItem[currentKey]
-      }), {}))
 
-      this.loading = true
+      this.$emit("change",list)
+      this.innerVisible = false
     }
   }
 }

+ 4 - 4
src/components/manage/src/letter/index.vue

@@ -142,13 +142,13 @@ export default {
 
       const { planinfo = [], req_id, store_id, plan_file } = data;
 
-      console.log(fileUrl, plan_file)
-
       const plan_info =  planinfo.map(
-        ({ name, service_cat, price, unit, num, tax}) =>
-        ({ name, service_cat, price, unit, num, tax })
+        ({ name,service_cat,unit,price,num,remark,total_fee,tax,pay_fee,tax_fee  }) =>
+        ({ name,service_cat,unit,price,num,remark,total_fee,tax,pay_fee,tax_fee  })
       )
 
+      console.log(plan_info)
+
       const letter = await asyncRequest.create({
         plan_type: mapLetterToType[form],
         file: fileUrl ? fileUrl : plan_file,

+ 2 - 3
src/components/manage/src/letter/xlsxUploadModal.vue

@@ -9,7 +9,7 @@
       <search-store size="mini" :value.sync="storeId" />
     </div>
 
-    <div style="display:flex;align-items:center" v-if="type !== 'budget' && type !== 'project'">
+    <div style="display:flex;align-items:center" v-if="type === 'activity'">
       <p style="margin-right:10px"><span style="color:red"> * </span>{{mapTitle[type]}}文件:</p>
       <div v-if="file_url && isFile">
         <el-tooltip content="点击下载" placement="top">
@@ -274,8 +274,7 @@ export default {
       }
 
       if((this.isFile && !this.file_url) && (
-        this.type !== 'budget' &&
-        this.type !== 'project'
+        this.type === 'activity'
       )){
         this.$message.warning('请上传文件!')
         return

+ 17 - 4
src/views/customerService/invoiceApply/detail.vue

@@ -9,13 +9,16 @@
             </el-collapse-item>
 
             <template v-else>
-              <el-collapse-item title="需求订单详情" name="3" />
-
-              <el-collapse-item title="开票申请详情" name="4" />
+              <el-collapse-item title="需求订单详情" name="3">
+                <demand-detail id="2" />
+              </el-collapse-item>
 
+              <el-collapse-item title="开票申请详情" name="4">
+                TODO发票详情...
+              </el-collapse-item>
               
               <el-collapse-item title="发票申请管理" name="5">
-                <upload-invoice-node />
+                <upload-invoice-node :requestMethod="handleInvoiceUpload" />
               </el-collapse-item>
             </template>
           </el-collapse>
@@ -113,6 +116,8 @@ export default {
         return
       }
 
+      this.sitem = invoice.data
+
       this.loading = false
 
       const demand = await demandRequest.detail({
@@ -124,6 +129,14 @@ export default {
       this.newTime = new Date().valueOf();
     },
 
+    async handleInvoiceUpload(invoiceList){
+      const params = {
+        invoiceList,
+        id:this.sitem.id
+      }
+      return asyncRequest.upload(params)
+    },
+
     async statusSubmit(model, title) {
       if (model.status === "0") model.status = "2";
       const { code, data, message } = await asyncRequest.status(model);